Merge pull request #9981 from olemarkus/cleanup-cloud-2

More removals of BuildCloud
This commit is contained in:
Kubernetes Prow Robot 2020-10-01 05:18:54 -07:00 committed by GitHub
commit d6f60b9ee5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 117 additions and 159 deletions

View File

@ -510,14 +510,14 @@ func RunCreateCluster(ctx context.Context, f *util.Factory, out io.Writer, c *Cr
} }
assetBuilder := assets.NewAssetBuilder(cluster, "") assetBuilder := assets.NewAssetBuilder(cluster, "")
fullCluster, err := cloudup.PopulateClusterSpec(clientset, cluster, assetBuilder) fullCluster, err := cloudup.PopulateClusterSpec(clientset, cluster, cloud, assetBuilder)
if err != nil { if err != nil {
return err return err
} }
var fullInstanceGroups []*api.InstanceGroup var fullInstanceGroups []*api.InstanceGroup
for _, group := range instanceGroups { for _, group := range instanceGroups {
fullGroup, err := cloudup.PopulateInstanceGroupSpec(fullCluster, group, clusterResult.Channel) fullGroup, err := cloudup.PopulateInstanceGroupSpec(fullCluster, group, cloud, clusterResult.Channel)
if err != nil { if err != nil {
return err return err
} }

View File

@ -160,7 +160,12 @@ func RunCreateInstanceGroup(ctx context.Context, f *util.Factory, cmd *cobra.Com
ig.Spec.Subnets = options.Subnets ig.Spec.Subnets = options.Subnets
ig, err = cloudup.PopulateInstanceGroupSpec(cluster, ig, channel) cloud, err := cloudup.BuildCloud(cluster)
if err != nil {
return err
}
ig, err = cloudup.PopulateInstanceGroupSpec(cluster, ig, cloud, channel)
if err != nil { if err != nil {
return err return err
} }
@ -228,11 +233,6 @@ func RunCreateInstanceGroup(ctx context.Context, f *util.Factory, cmd *cobra.Com
return fmt.Errorf("unexpected object type: %T", obj) return fmt.Errorf("unexpected object type: %T", obj)
} }
cloud, err := cloudup.BuildCloud(cluster)
if err != nil {
return err
}
err = validation.CrossValidateInstanceGroup(group, cluster, cloud).ToAggregate() err = validation.CrossValidateInstanceGroup(group, cluster, cloud).ToAggregate()
if err != nil { if err != nil {
return err return err

View File

@ -217,7 +217,7 @@ func RunEditCluster(ctx context.Context, f *util.Factory, cmd *cobra.Command, ar
} }
assetBuilder := assets.NewAssetBuilder(newCluster, "") assetBuilder := assets.NewAssetBuilder(newCluster, "")
fullCluster, err := cloudup.PopulateClusterSpec(clientset, newCluster, assetBuilder) fullCluster, err := cloudup.PopulateClusterSpec(clientset, newCluster, cloud, assetBuilder)
if err != nil { if err != nil {
results = editResults{ results = editResults{
file: file, file: file,

View File

@ -155,12 +155,11 @@ func RunEditInstanceGroup(ctx context.Context, f *util.Factory, cmd *cobra.Comma
return fmt.Errorf("object was not of expected type: %T", newObj) return fmt.Errorf("object was not of expected type: %T", newObj)
} }
fullGroup, err := cloudup.PopulateInstanceGroupSpec(cluster, newGroup, channel) cloud, err := cloudup.BuildCloud(cluster)
if err != nil { if err != nil {
return err return err
} }
fullGroup, err := cloudup.PopulateInstanceGroupSpec(cluster, newGroup, cloud, channel)
cloud, err := cloudup.BuildCloud(cluster)
if err != nil { if err != nil {
return err return err
} }
@ -173,7 +172,7 @@ func RunEditInstanceGroup(ctx context.Context, f *util.Factory, cmd *cobra.Comma
} }
assetBuilder := assets.NewAssetBuilder(cluster, "") assetBuilder := assets.NewAssetBuilder(cluster, "")
fullCluster, err := cloudup.PopulateClusterSpec(clientset, cluster, assetBuilder) fullCluster, err := cloudup.PopulateClusterSpec(clientset, cluster, cloud, assetBuilder)
if err != nil { if err != nil {
return err return err
} }

View File

@ -278,7 +278,7 @@ func RunToolboxInstanceSelector(ctx context.Context, f *util.Factory, args []str
if instanceSelectorOpts.ClusterAutoscaler { if instanceSelectorOpts.ClusterAutoscaler {
ig = decorateWithClusterAutoscalerLabels(ig, clusterName) ig = decorateWithClusterAutoscalerLabels(ig, clusterName)
} }
ig, err = cloudup.PopulateInstanceGroupSpec(cluster, ig, channel) ig, err = cloudup.PopulateInstanceGroupSpec(cluster, ig, cloud, channel)
if err != nil { if err != nil {
return err return err
} }

View File

@ -266,7 +266,13 @@ func RunUpdateCluster(ctx context.Context, f *util.Factory, clusterName string,
lifecycleOverrideMap[taskName] = lifecycleOverride lifecycleOverrideMap[taskName] = lifecycleOverride
} }
cloud, err := cloudup.BuildCloud(cluster)
if err != nil {
return nil, err
}
applyCmd := &cloudup.ApplyClusterCmd{ applyCmd := &cloudup.ApplyClusterCmd{
Cloud: cloud,
Clientset: clientset, Clientset: clientset,
Cluster: cluster, Cluster: cluster,
DryRun: isDryrun, DryRun: isDryrun,

View File

@ -226,7 +226,7 @@ func BuildNodeupModelContext(basedir string) (*NodeupModelContext, error) {
return nodeUpModelContext, nil return nodeUpModelContext, nil
} }
func mockedPopulateClusterSpec(c *kops.Cluster) (*kops.Cluster, error) { func mockedPopulateClusterSpec(c *kops.Cluster, cloud fi.Cloud) (*kops.Cluster, error) {
vfs.Context.ResetMemfsContext(true) vfs.Context.ResetMemfsContext(true)
assetBuilder := assets.NewAssetBuilder(c, "") assetBuilder := assets.NewAssetBuilder(c, "")
@ -235,7 +235,7 @@ func mockedPopulateClusterSpec(c *kops.Cluster) (*kops.Cluster, error) {
return nil, fmt.Errorf("error building vfspath: %v", err) return nil, fmt.Errorf("error building vfspath: %v", err)
} }
clientset := vfsclientset.NewVFSClientset(basePath) clientset := vfsclientset.NewVFSClientset(basePath)
return cloudup.PopulateClusterSpec(clientset, c, assetBuilder) return cloudup.PopulateClusterSpec(clientset, c, cloud, assetBuilder)
} }
// Fixed cert and key, borrowed from the create_kubecfg_test.go test // Fixed cert and key, borrowed from the create_kubecfg_test.go test
@ -307,7 +307,7 @@ func RunGoldenTest(t *testing.T, basedir string, key string, builder func(*Nodeu
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(nodeupModelContext.Cluster) full, err := mockedPopulateClusterSpec(nodeupModelContext.Cluster, cloud)
if err != nil { if err != nil {
t.Fatalf("unexpected error from mockedPopulateClusterSpec: %v", err) t.Fatalf("unexpected error from mockedPopulateClusterSpec: %v", err)
} }

View File

@ -41,7 +41,7 @@ func UpdateCluster(ctx context.Context, clientset simple.Clientset, cluster *kop
} }
assetBuilder := assets.NewAssetBuilder(cluster, "") assetBuilder := assets.NewAssetBuilder(cluster, "")
fullCluster, err := cloudup.PopulateClusterSpec(clientset, cluster, assetBuilder) fullCluster, err := cloudup.PopulateClusterSpec(clientset, cluster, cloud, assetBuilder)
if err != nil { if err != nil {
return err return err
} }

View File

@ -84,6 +84,7 @@ var (
) )
type ApplyClusterCmd struct { type ApplyClusterCmd struct {
Cloud fi.Cloud
Cluster *kops.Cluster Cluster *kops.Cluster
InstanceGroups []*kops.InstanceGroup InstanceGroups []*kops.InstanceGroup
@ -258,10 +259,7 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error {
} }
} }
cloud, err := BuildCloud(cluster) cloud := c.Cloud
if err != nil {
return err
}
err = validation.DeepValidate(c.Cluster, c.InstanceGroups, true, cloud) err = validation.DeepValidate(c.Cluster, c.InstanceGroups, true, cloud)
if err != nil { if err != nil {
@ -840,14 +838,14 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error {
// upgradeSpecs ensures that fields are fully populated / defaulted // upgradeSpecs ensures that fields are fully populated / defaulted
func (c *ApplyClusterCmd) upgradeSpecs(assetBuilder *assets.AssetBuilder) error { func (c *ApplyClusterCmd) upgradeSpecs(assetBuilder *assets.AssetBuilder) error {
fullCluster, err := PopulateClusterSpec(c.Clientset, c.Cluster, assetBuilder) fullCluster, err := PopulateClusterSpec(c.Clientset, c.Cluster, c.Cloud, assetBuilder)
if err != nil { if err != nil {
return err return err
} }
c.Cluster = fullCluster c.Cluster = fullCluster
for i, g := range c.InstanceGroups { for i, g := range c.InstanceGroups {
fullGroup, err := PopulateInstanceGroupSpec(fullCluster, g, c.channel) fullGroup, err := PopulateInstanceGroupSpec(fullCluster, g, c.Cloud, c.channel)
if err != nil { if err != nil {
return err return err
} }

View File

@ -88,7 +88,7 @@ func runChannelBuilderTest(t *testing.T, key string, addonManifests []string) {
t.Fatalf("error from PerformAssignments for %q: %v", key, err) t.Fatalf("error from PerformAssignments for %q: %v", key, err)
} }
fullSpec, err := mockedPopulateClusterSpec(cluster) fullSpec, err := mockedPopulateClusterSpec(cluster, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PopulateClusterSpec for %q: %v", key, err) t.Fatalf("error from PopulateClusterSpec for %q: %v", key, err)
} }

View File

@ -46,6 +46,10 @@ func PerformAssignments(c *kops.Cluster, cloud fi.Cloud) error {
c.Spec.Topology = &kops.TopologySpec{Masters: kops.TopologyPublic, Nodes: kops.TopologyPublic} c.Spec.Topology = &kops.TopologySpec{Masters: kops.TopologyPublic, Nodes: kops.TopologyPublic}
} }
if cloud == nil {
return fmt.Errorf("cloud cannot be nil")
}
if cloud.ProviderID() == kops.CloudProviderGCE { if cloud.ProviderID() == kops.CloudProviderGCE {
if err := gce.PerformNetworkAssignments(c, cloud); err != nil { if err := gce.PerformNetworkAssignments(c, cloud); err != nil {
return err return err
@ -99,7 +103,7 @@ func PerformAssignments(c *kops.Cluster, cloud fi.Cloud) error {
pd := cloud.ProviderID() pd := cloud.ProviderID()
if pd == kops.CloudProviderAWS || pd == kops.CloudProviderOpenstack || pd == kops.CloudProviderALI { if pd == kops.CloudProviderAWS || pd == kops.CloudProviderOpenstack || pd == kops.CloudProviderALI {
// TODO: Use vpcInfo // TODO: Use vpcInfo
err := assignCIDRsToSubnets(c) err := assignCIDRsToSubnets(c, cloud)
if err != nil { if err != nil {
return err return err
} }

View File

@ -23,7 +23,7 @@ import (
) )
func TestPopulateClusterSpec_Proxy(t *testing.T) { func TestPopulateClusterSpec_Proxy(t *testing.T) {
c := buildMinimalCluster() _, c := buildMinimalCluster()
c.Spec.EgressProxy = &kops.EgressProxySpec{ c.Spec.EgressProxy = &kops.EgressProxySpec{
ProxyExcludes: "google.com", ProxyExcludes: "google.com",

View File

@ -43,6 +43,8 @@ import (
var EtcdClusters = []string{"main", "events"} var EtcdClusters = []string{"main", "events"}
type populateClusterSpec struct { type populateClusterSpec struct {
cloud fi.Cloud
// InputCluster is the api object representing the whole cluster, as input by the user // InputCluster is the api object representing the whole cluster, as input by the user
// We build it up into a complete config, but we write the values as input // We build it up into a complete config, but we write the values as input
InputCluster *kopsapi.Cluster InputCluster *kopsapi.Cluster
@ -56,8 +58,9 @@ type populateClusterSpec struct {
// PopulateClusterSpec takes a user-specified cluster spec, and computes the full specification that should be set on the cluster. // PopulateClusterSpec takes a user-specified cluster spec, and computes the full specification that should be set on the cluster.
// We do this so that we don't need any real "brains" on the node side. // We do this so that we don't need any real "brains" on the node side.
func PopulateClusterSpec(clientset simple.Clientset, cluster *kopsapi.Cluster, assetBuilder *assets.AssetBuilder) (*kopsapi.Cluster, error) { func PopulateClusterSpec(clientset simple.Clientset, cluster *kopsapi.Cluster, cloud fi.Cloud, assetBuilder *assets.AssetBuilder) (*kopsapi.Cluster, error) {
c := &populateClusterSpec{ c := &populateClusterSpec{
cloud: cloud,
InputCluster: cluster, InputCluster: cluster,
assetBuilder: assetBuilder, assetBuilder: assetBuilder,
} }
@ -83,6 +86,8 @@ func (c *populateClusterSpec) run(clientset simple.Clientset) error {
return errs.ToAggregate() return errs.ToAggregate()
} }
cloud := c.cloud
// Copy cluster & instance groups, so we can modify them freely // Copy cluster & instance groups, so we can modify them freely
cluster := &kopsapi.Cluster{} cluster := &kopsapi.Cluster{}
@ -98,11 +103,6 @@ func (c *populateClusterSpec) run(clientset simple.Clientset) error {
return err return err
} }
cloud, err := BuildCloud(cluster)
if err != nil {
return err
}
err = PerformAssignments(cluster, cloud) err = PerformAssignments(cluster, cloud)
if err != nil { if err != nil {
return err return err
@ -301,7 +301,7 @@ func (c *populateClusterSpec) run(clientset simple.Clientset) error {
fullCluster.Spec = *completed fullCluster.Spec = *completed
if errs := validation.ValidateCluster(fullCluster, true); len(errs) != 0 { if errs := validation.ValidateCluster(fullCluster, true); len(errs) != 0 {
return fmt.Errorf("Completed cluster failed validation: %v", errs.ToAggregate()) return fmt.Errorf("completed cluster failed validation: %v", errs.ToAggregate())
} }
c.fullCluster = fullCluster c.fullCluster = fullCluster

View File

@ -59,7 +59,7 @@ var awsDedicatedInstanceExceptions = map[string]bool{
// PopulateInstanceGroupSpec sets default values in the InstanceGroup // PopulateInstanceGroupSpec sets default values in the InstanceGroup
// The InstanceGroup is simpler than the cluster spec, so we just populate in place (like the rest of k8s) // The InstanceGroup is simpler than the cluster spec, so we just populate in place (like the rest of k8s)
func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup, channel *kops.Channel) (*kops.InstanceGroup, error) { func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup, cloud fi.Cloud, channel *kops.Channel) (*kops.InstanceGroup, error) {
var err error var err error
err = validation.ValidateInstanceGroup(input, nil).ToAggregate() err = validation.ValidateInstanceGroup(input, nil).ToAggregate()
if err != nil { if err != nil {
@ -72,7 +72,7 @@ func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup,
// TODO: Clean up // TODO: Clean up
if ig.IsMaster() { if ig.IsMaster() {
if ig.Spec.MachineType == "" { if ig.Spec.MachineType == "" {
ig.Spec.MachineType, err = defaultMachineType(cluster, ig) ig.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)
if err != nil { if err != nil {
return nil, fmt.Errorf("error assigning default machine type for masters: %v", err) return nil, fmt.Errorf("error assigning default machine type for masters: %v", err)
} }
@ -86,7 +86,7 @@ func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup,
} }
} else if ig.Spec.Role == kops.InstanceGroupRoleBastion { } else if ig.Spec.Role == kops.InstanceGroupRoleBastion {
if ig.Spec.MachineType == "" { if ig.Spec.MachineType == "" {
ig.Spec.MachineType, err = defaultMachineType(cluster, ig) ig.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)
if err != nil { if err != nil {
return nil, fmt.Errorf("error assigning default machine type for bastions: %v", err) return nil, fmt.Errorf("error assigning default machine type for bastions: %v", err)
} }
@ -99,7 +99,7 @@ func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup,
} }
} else { } else {
if ig.Spec.MachineType == "" { if ig.Spec.MachineType == "" {
ig.Spec.MachineType, err = defaultMachineType(cluster, ig) ig.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)
if err != nil { if err != nil {
return nil, fmt.Errorf("error assigning default machine type for nodes: %v", err) return nil, fmt.Errorf("error assigning default machine type for nodes: %v", err)
} }
@ -123,7 +123,7 @@ func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup,
switch kops.CloudProviderID(cluster.Spec.CloudProvider) { switch kops.CloudProviderID(cluster.Spec.CloudProvider) {
case kops.CloudProviderAWS: case kops.CloudProviderAWS:
if _, ok := awsDedicatedInstanceExceptions[ig.Spec.MachineType]; ok { if _, ok := awsDedicatedInstanceExceptions[ig.Spec.MachineType]; ok {
return nil, fmt.Errorf("Invalid dedicated instance type: %s", ig.Spec.MachineType) return nil, fmt.Errorf("invalid dedicated instance type: %s", ig.Spec.MachineType)
} }
default: default:
klog.Warning("Trying to set tenancy on non-AWS environment") klog.Warning("Trying to set tenancy on non-AWS environment")
@ -132,7 +132,7 @@ func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup,
if ig.IsMaster() { if ig.IsMaster() {
if len(ig.Spec.Subnets) == 0 { if len(ig.Spec.Subnets) == 0 {
return nil, fmt.Errorf("Master InstanceGroup %s did not specify any Subnets", ig.ObjectMeta.Name) return nil, fmt.Errorf("master InstanceGroup %s did not specify any Subnets", ig.ObjectMeta.Name)
} }
} else { } else {
if len(ig.Spec.Subnets) == 0 { if len(ig.Spec.Subnets) == 0 {
@ -152,13 +152,9 @@ func PopulateInstanceGroupSpec(cluster *kops.Cluster, input *kops.InstanceGroup,
} }
// defaultMachineType returns the default MachineType for the instance group, based on the cloudprovider // defaultMachineType returns the default MachineType for the instance group, based on the cloudprovider
func defaultMachineType(cluster *kops.Cluster, ig *kops.InstanceGroup) (string, error) { func defaultMachineType(cloud fi.Cloud, cluster *kops.Cluster, ig *kops.InstanceGroup) (string, error) {
switch kops.CloudProviderID(cluster.Spec.CloudProvider) { switch kops.CloudProviderID(cluster.Spec.CloudProvider) {
case kops.CloudProviderAWS: case kops.CloudProviderAWS:
cloud, err := BuildCloud(cluster)
if err != nil {
return "", fmt.Errorf("error building cloud for AWS cluster: %v", err)
}
instanceType, err := cloud.(awsup.AWSCloud).DefaultInstanceType(cluster, ig) instanceType, err := cloud.(awsup.AWSCloud).DefaultInstanceType(cluster, ig)
if err != nil { if err != nil {
@ -189,11 +185,6 @@ func defaultMachineType(cluster *kops.Cluster, ig *kops.InstanceGroup) (string,
} }
case kops.CloudProviderOpenstack: case kops.CloudProviderOpenstack:
cloud, err := BuildCloud(cluster)
if err != nil {
return "", fmt.Errorf("error building cloud for Openstack cluster: %v", err)
}
instanceType, err := cloud.(openstack.OpenstackCloud).DefaultInstanceType(cluster, ig) instanceType, err := cloud.(openstack.OpenstackCloud).DefaultInstanceType(cluster, ig)
if err != nil { if err != nil {
return "", fmt.Errorf("error finding default machine type: %v", err) return "", fmt.Errorf("error finding default machine type: %v", err)

View File

@ -31,32 +31,28 @@ import (
"k8s.io/kops/util/pkg/vfs" "k8s.io/kops/util/pkg/vfs"
) )
func buildMinimalCluster() *kopsapi.Cluster { func buildMinimalCluster() (*awsup.MockAWSCloud, *kopsapi.Cluster) {
awsup.InstallMockAWSCloud(MockAWSRegion, "abcd") cloud := awsup.InstallMockAWSCloud(MockAWSRegion, "abcd")
c := testutils.BuildMinimalCluster("testcluster.test.com") c := testutils.BuildMinimalCluster("testcluster.test.com")
return c return cloud, c
} }
func TestPopulateCluster_Default_NoError(t *testing.T) { func TestPopulateCluster_Default_NoError(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
cloud, err := BuildCloud(c)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud) err := PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
_, err = mockedPopulateClusterSpec(c) _, err = mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }
} }
func mockedPopulateClusterSpec(c *kopsapi.Cluster) (*kopsapi.Cluster, error) { func mockedPopulateClusterSpec(c *kopsapi.Cluster, cloud fi.Cloud) (*kopsapi.Cluster, error) {
vfs.Context.ResetMemfsContext(true) vfs.Context.ResetMemfsContext(true)
assetBuilder := assets.NewAssetBuilder(c, "") assetBuilder := assets.NewAssetBuilder(c, "")
@ -65,11 +61,11 @@ func mockedPopulateClusterSpec(c *kopsapi.Cluster) (*kopsapi.Cluster, error) {
return nil, fmt.Errorf("error building vfspath: %v", err) return nil, fmt.Errorf("error building vfspath: %v", err)
} }
clientset := vfsclientset.NewVFSClientset(basePath) clientset := vfsclientset.NewVFSClientset(basePath)
return PopulateClusterSpec(clientset, c, assetBuilder) return PopulateClusterSpec(clientset, c, cloud, assetBuilder)
} }
func TestPopulateCluster_Docker_Spec(t *testing.T) { func TestPopulateCluster_Docker_Spec(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.Docker = &kopsapi.DockerConfig{ c.Spec.Docker = &kopsapi.DockerConfig{
MTU: fi.Int32(5678), MTU: fi.Int32(5678),
InsecureRegistry: fi.String("myregistry.com:1234"), InsecureRegistry: fi.String("myregistry.com:1234"),
@ -77,17 +73,13 @@ func TestPopulateCluster_Docker_Spec(t *testing.T) {
RegistryMirrors: []string{"https://registry.example.com"}, RegistryMirrors: []string{"https://registry.example.com"},
LogOpt: []string{"env=FOO"}, LogOpt: []string{"env=FOO"},
} }
cloud, err := BuildCloud(c)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud) err := PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }
@ -114,18 +106,14 @@ func TestPopulateCluster_Docker_Spec(t *testing.T) {
} }
func TestPopulateCluster_StorageDefault(t *testing.T) { func TestPopulateCluster_StorageDefault(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
cloud, err := BuildCloud(c)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud) err := PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }
@ -146,7 +134,7 @@ func build(c *kopsapi.Cluster) (*kopsapi.Cluster, error) {
return nil, fmt.Errorf("error from PerformAssignments: %v", err) return nil, fmt.Errorf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
return nil, fmt.Errorf("Unexpected error from PopulateCluster: %v", err) return nil, fmt.Errorf("Unexpected error from PopulateCluster: %v", err)
} }
@ -154,7 +142,7 @@ func build(c *kopsapi.Cluster) (*kopsapi.Cluster, error) {
} }
func TestPopulateCluster_Kubenet(t *testing.T) { func TestPopulateCluster_Kubenet(t *testing.T) {
c := buildMinimalCluster() _, c := buildMinimalCluster()
full, err := build(c) full, err := build(c)
if err != nil { if err != nil {
@ -171,7 +159,7 @@ func TestPopulateCluster_Kubenet(t *testing.T) {
} }
func TestPopulateCluster_CNI(t *testing.T) { func TestPopulateCluster_CNI(t *testing.T) {
c := buildMinimalCluster() _, c := buildMinimalCluster()
c.Spec.Kubelet = &kopsapi.KubeletConfigSpec{ c.Spec.Kubelet = &kopsapi.KubeletConfigSpec{
ConfigureCBR0: fi.Bool(false), ConfigureCBR0: fi.Bool(false),
@ -199,7 +187,7 @@ func TestPopulateCluster_CNI(t *testing.T) {
} }
func TestPopulateCluster_Custom_CIDR(t *testing.T) { func TestPopulateCluster_Custom_CIDR(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.NetworkCIDR = "172.20.2.0/24" c.Spec.NetworkCIDR = "172.20.2.0/24"
c.Spec.Subnets = []kopsapi.ClusterSubnetSpec{ c.Spec.Subnets = []kopsapi.ClusterSubnetSpec{
{Name: "subnet-us-mock-1a", Zone: "us-mock-1a", CIDR: "172.20.2.0/27"}, {Name: "subnet-us-mock-1a", Zone: "us-mock-1a", CIDR: "172.20.2.0/27"},
@ -207,17 +195,12 @@ func TestPopulateCluster_Custom_CIDR(t *testing.T) {
{Name: "subnet-us-mock-1c", Zone: "us-mock-1c", CIDR: "172.20.2.64/27"}, {Name: "subnet-us-mock-1c", Zone: "us-mock-1c", CIDR: "172.20.2.64/27"},
} }
cloud, err := BuildCloud(c) err := PerformAssignments(c, cloud)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }
@ -227,19 +210,15 @@ func TestPopulateCluster_Custom_CIDR(t *testing.T) {
} }
func TestPopulateCluster_IsolateMasters(t *testing.T) { func TestPopulateCluster_IsolateMasters(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.IsolateMasters = fi.Bool(true) c.Spec.IsolateMasters = fi.Bool(true)
cloud, err := BuildCloud(c)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud) err := PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }
@ -252,20 +231,15 @@ func TestPopulateCluster_IsolateMasters(t *testing.T) {
} }
func TestPopulateCluster_IsolateMastersFalse(t *testing.T) { func TestPopulateCluster_IsolateMastersFalse(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
// default: c.Spec.IsolateMasters = fi.Bool(false) // default: c.Spec.IsolateMasters = fi.Bool(false)
cloud, err := BuildCloud(c) err := PerformAssignments(c, cloud)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }
@ -275,52 +249,52 @@ func TestPopulateCluster_IsolateMastersFalse(t *testing.T) {
} }
func TestPopulateCluster_Name_Required(t *testing.T) { func TestPopulateCluster_Name_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.ObjectMeta.Name = "" c.ObjectMeta.Name = ""
expectErrorFromPopulateCluster(t, c, "Name") expectErrorFromPopulateCluster(t, c, cloud, "Name")
} }
func TestPopulateCluster_Zone_Required(t *testing.T) { func TestPopulateCluster_Zone_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.Subnets = nil c.Spec.Subnets = nil
expectErrorFromPopulateCluster(t, c, "subnet") expectErrorFromPopulateCluster(t, c, cloud, "subnet")
} }
func TestPopulateCluster_NetworkCIDR_Required(t *testing.T) { func TestPopulateCluster_NetworkCIDR_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.NetworkCIDR = "" c.Spec.NetworkCIDR = ""
expectErrorFromPopulateCluster(t, c, "networkCIDR") expectErrorFromPopulateCluster(t, c, cloud, "networkCIDR")
} }
func TestPopulateCluster_NonMasqueradeCIDR_Required(t *testing.T) { func TestPopulateCluster_NonMasqueradeCIDR_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.NonMasqueradeCIDR = "" c.Spec.NonMasqueradeCIDR = ""
expectErrorFromPopulateCluster(t, c, "nonMasqueradeCIDR") expectErrorFromPopulateCluster(t, c, cloud, "nonMasqueradeCIDR")
} }
func TestPopulateCluster_CloudProvider_Required(t *testing.T) { func TestPopulateCluster_CloudProvider_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.CloudProvider = "" c.Spec.CloudProvider = ""
expectErrorFromPopulateCluster(t, c, "cloudProvider") expectErrorFromPopulateCluster(t, c, cloud, "cloudProvider")
} }
func TestPopulateCluster_TopologyInvalidNil_Required(t *testing.T) { func TestPopulateCluster_TopologyInvalidNil_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.Topology.Masters = "" c.Spec.Topology.Masters = ""
c.Spec.Topology.Nodes = "" c.Spec.Topology.Nodes = ""
expectErrorFromPopulateCluster(t, c, "topology") expectErrorFromPopulateCluster(t, c, cloud, "topology")
} }
func TestPopulateCluster_TopologyInvalidValue_Required(t *testing.T) { func TestPopulateCluster_TopologyInvalidValue_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.Topology.Masters = "123" c.Spec.Topology.Masters = "123"
c.Spec.Topology.Nodes = "abc" c.Spec.Topology.Nodes = "abc"
expectErrorFromPopulateCluster(t, c, "topology") expectErrorFromPopulateCluster(t, c, cloud, "topology")
} }
//func TestPopulateCluster_TopologyInvalidMatchingValues_Required(t *testing.T) { //func TestPopulateCluster_TopologyInvalidMatchingValues_Required(t *testing.T) {
@ -333,25 +307,25 @@ func TestPopulateCluster_TopologyInvalidValue_Required(t *testing.T) {
func TestPopulateCluster_BastionInvalidMatchingValues_Required(t *testing.T) { func TestPopulateCluster_BastionInvalidMatchingValues_Required(t *testing.T) {
// We can't have a bastion with public masters / nodes // We can't have a bastion with public masters / nodes
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.Topology.Masters = kopsapi.TopologyPublic c.Spec.Topology.Masters = kopsapi.TopologyPublic
c.Spec.Topology.Nodes = kopsapi.TopologyPublic c.Spec.Topology.Nodes = kopsapi.TopologyPublic
c.Spec.Topology.Bastion = &kopsapi.BastionSpec{} c.Spec.Topology.Bastion = &kopsapi.BastionSpec{}
expectErrorFromPopulateCluster(t, c, "bastion") expectErrorFromPopulateCluster(t, c, cloud, "bastion")
} }
func TestPopulateCluster_BastionIdleTimeoutInvalidNegative_Required(t *testing.T) { func TestPopulateCluster_BastionIdleTimeoutInvalidNegative_Required(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.Topology.Masters = kopsapi.TopologyPrivate c.Spec.Topology.Masters = kopsapi.TopologyPrivate
c.Spec.Topology.Nodes = kopsapi.TopologyPrivate c.Spec.Topology.Nodes = kopsapi.TopologyPrivate
c.Spec.Topology.Bastion = &kopsapi.BastionSpec{} c.Spec.Topology.Bastion = &kopsapi.BastionSpec{}
c.Spec.Topology.Bastion.IdleTimeoutSeconds = fi.Int64(-1) c.Spec.Topology.Bastion.IdleTimeoutSeconds = fi.Int64(-1)
expectErrorFromPopulateCluster(t, c, "bastion") expectErrorFromPopulateCluster(t, c, cloud, "bastion")
} }
func expectErrorFromPopulateCluster(t *testing.T, c *kopsapi.Cluster, message string) { func expectErrorFromPopulateCluster(t *testing.T, c *kopsapi.Cluster, cloud fi.Cloud, message string) {
_, err := mockedPopulateClusterSpec(c) _, err := mockedPopulateClusterSpec(c, cloud)
if err == nil { if err == nil {
t.Fatalf("Expected error from PopulateCluster") t.Fatalf("Expected error from PopulateCluster")
} }
@ -362,7 +336,7 @@ func expectErrorFromPopulateCluster(t *testing.T, c *kopsapi.Cluster, message st
} }
func TestPopulateCluster_APIServerCount(t *testing.T) { func TestPopulateCluster_APIServerCount(t *testing.T) {
c := buildMinimalCluster() _, c := buildMinimalCluster()
full, err := build(c) full, err := build(c)
if err != nil { if err != nil {
@ -375,20 +349,15 @@ func TestPopulateCluster_APIServerCount(t *testing.T) {
} }
func TestPopulateCluster_AnonymousAuth(t *testing.T) { func TestPopulateCluster_AnonymousAuth(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.KubernetesVersion = "1.15.0" c.Spec.KubernetesVersion = "1.15.0"
cloud, err := BuildCloud(c) err := PerformAssignments(c, cloud)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }
@ -430,7 +399,7 @@ func TestPopulateCluster_DockerVersion(t *testing.T) {
} }
for _, test := range grid { for _, test := range grid {
c := buildMinimalCluster() _, c := buildMinimalCluster()
c.Spec.KubernetesVersion = test.KubernetesVersion c.Spec.KubernetesVersion = test.KubernetesVersion
full, err := build(c) full, err := build(c)
@ -445,20 +414,15 @@ func TestPopulateCluster_DockerVersion(t *testing.T) {
} }
func TestPopulateCluster_KubeController_High_Enough_Version(t *testing.T) { func TestPopulateCluster_KubeController_High_Enough_Version(t *testing.T) {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
c.Spec.KubernetesVersion = "v1.9.0" c.Spec.KubernetesVersion = "v1.9.0"
cloud, err := BuildCloud(c) err := PerformAssignments(c, cloud)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
full, err := mockedPopulateClusterSpec(c) full, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("Unexpected error from PopulateCluster: %v", err) t.Fatalf("Unexpected error from PopulateCluster: %v", err)
} }

View File

@ -43,7 +43,7 @@ func buildMinimalMasterInstanceGroup(subnet string) *kopsapi.InstanceGroup {
} }
func TestPopulateInstanceGroup_Name_Required(t *testing.T) { func TestPopulateInstanceGroup_Name_Required(t *testing.T) {
cluster := buildMinimalCluster() _, cluster := buildMinimalCluster()
g := buildMinimalNodeInstanceGroup() g := buildMinimalNodeInstanceGroup()
g.ObjectMeta.Name = "" g.ObjectMeta.Name = ""
@ -53,7 +53,7 @@ func TestPopulateInstanceGroup_Name_Required(t *testing.T) {
} }
func TestPopulateInstanceGroup_Role_Required(t *testing.T) { func TestPopulateInstanceGroup_Role_Required(t *testing.T) {
cluster := buildMinimalCluster() _, cluster := buildMinimalCluster()
g := buildMinimalNodeInstanceGroup() g := buildMinimalNodeInstanceGroup()
g.Spec.Role = "" g.Spec.Role = ""
@ -63,7 +63,12 @@ func TestPopulateInstanceGroup_Role_Required(t *testing.T) {
} }
func expectErrorFromPopulateInstanceGroup(t *testing.T, cluster *kopsapi.Cluster, g *kopsapi.InstanceGroup, channel *kopsapi.Channel, message string) { func expectErrorFromPopulateInstanceGroup(t *testing.T, cluster *kopsapi.Cluster, g *kopsapi.InstanceGroup, channel *kopsapi.Channel, message string) {
_, err := PopulateInstanceGroupSpec(cluster, g, channel) cloud, err := BuildCloud(cluster)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
_, err = PopulateInstanceGroupSpec(cluster, g, cloud, channel)
if err == nil { if err == nil {
t.Fatalf("Expected error from PopulateInstanceGroup") t.Fatalf("Expected error from PopulateInstanceGroup")
} }

View File

@ -41,7 +41,7 @@ func (a ByZone) Less(i, j int) bool {
return a[i].Zone < a[j].Zone return a[i].Zone < a[j].Zone
} }
func assignCIDRsToSubnets(c *kops.Cluster) error { func assignCIDRsToSubnets(c *kops.Cluster, cloud fi.Cloud) error {
// TODO: We probably could query for the existing subnets & allocate appropriately // TODO: We probably could query for the existing subnets & allocate appropriately
// for now we'll require users to set CIDRs themselves // for now we'll require users to set CIDRs themselves
@ -51,10 +51,6 @@ func assignCIDRsToSubnets(c *kops.Cluster) error {
} }
if c.Spec.NetworkID != "" { if c.Spec.NetworkID != "" {
cloud, err := BuildCloud(c)
if err != nil {
return err
}
vpcInfo, err := cloud.FindVPCInfo(c.Spec.NetworkID) vpcInfo, err := cloud.FindVPCInfo(c.Spec.NetworkID)
if err != nil { if err != nil {

View File

@ -99,7 +99,7 @@ func Test_AssignSubnets(t *testing.T) {
c.Spec.NetworkCIDR = "10.0.0.0/8" c.Spec.NetworkCIDR = "10.0.0.0/8"
c.Spec.Subnets = test.subnets c.Spec.Subnets = test.subnets
err := assignCIDRsToSubnets(c) err := assignCIDRsToSubnets(c, nil)
if err != nil { if err != nil {
t.Fatalf("unexpected error on test %d: %v", i+1, err) t.Fatalf("unexpected error on test %d: %v", i+1, err)
} }

View File

@ -30,19 +30,14 @@ import (
const MockAWSRegion = "us-mock-1" const MockAWSRegion = "us-mock-1"
func buildDefaultCluster(t *testing.T) *api.Cluster { func buildDefaultCluster(t *testing.T) *api.Cluster {
c := buildMinimalCluster() cloud, c := buildMinimalCluster()
cloud, err := BuildCloud(c) err := PerformAssignments(c, cloud)
if err != nil {
t.Fatalf("error from BuildCloud: %v", err)
}
err = PerformAssignments(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PerformAssignments: %v", err) t.Fatalf("error from PerformAssignments: %v", err)
} }
fullSpec, err := mockedPopulateClusterSpec(c) fullSpec, err := mockedPopulateClusterSpec(c, cloud)
if err != nil { if err != nil {
t.Fatalf("error from PopulateClusterSpec: %v", err) t.Fatalf("error from PopulateClusterSpec: %v", err)
} }

View File

@ -108,7 +108,7 @@ func (x *ConvertKubeupCluster) Upgrade(ctx context.Context) error {
} }
assetBuilder := assets.NewAssetBuilder(cluster, "") assetBuilder := assets.NewAssetBuilder(cluster, "")
fullCluster, err := cloudup.PopulateClusterSpec(x.Clientset, cluster, assetBuilder) fullCluster, err := cloudup.PopulateClusterSpec(x.Clientset, cluster, x.Cloud, assetBuilder)
if err != nil { if err != nil {
return err return err
} }

View File

@ -481,7 +481,7 @@ func (x *ImportCluster) ImportAWSCluster(ctx context.Context) error {
var fullInstanceGroups []*kops.InstanceGroup var fullInstanceGroups []*kops.InstanceGroup
for _, ig := range instanceGroups { for _, ig := range instanceGroups {
full, err := cloudup.PopulateInstanceGroupSpec(cluster, ig, channel) full, err := cloudup.PopulateInstanceGroupSpec(cluster, ig, awsCloud, channel)
if err != nil { if err != nil {
return err return err
} }