From 4128b50baec9d48fff23636c81233dea13080d80 Mon Sep 17 00:00:00 2001 From: prashima Date: Wed, 29 Mar 2017 16:37:56 -0700 Subject: [PATCH] Added support for multiple workers for vSphere. --- pkg/model/names.go | 4 ++ pkg/model/vspheremodel/autoscalinggroup.go | 50 +++++++++++++--------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/pkg/model/names.go b/pkg/model/names.go index 4b1a3916dc..0b2b92c612 100644 --- a/pkg/model/names.go +++ b/pkg/model/names.go @@ -203,3 +203,7 @@ func (b *KopsModelContext) NamePrivateRouteTableInZone(zoneName string) string { func (b *KopsModelContext) LinkToPrivateRouteTableInZone(zoneName string) *awstasks.RouteTable { return &awstasks.RouteTable{Name: s(b.NamePrivateRouteTableInZone(zoneName))} } + +func (b *KopsModelContext) InstanceName(ig *kops.InstanceGroup, suffix string) string { + return b.AutoscalingGroupName(ig) + suffix +} diff --git a/pkg/model/vspheremodel/autoscalinggroup.go b/pkg/model/vspheremodel/autoscalinggroup.go index 4fecdc211f..ba554cc784 100644 --- a/pkg/model/vspheremodel/autoscalinggroup.go +++ b/pkg/model/vspheremodel/autoscalinggroup.go @@ -17,9 +17,11 @@ limitations under the License. package vspheremodel import ( + "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/model" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/cloudup/vspheretasks" + "strconv" ) // AutoscalingGroupModelBuilder configures AutoscalingGroup objects @@ -36,31 +38,37 @@ func (b *AutoscalingGroupModelBuilder) Build(c *fi.ModelBuilderContext) error { // The following logic should considerably change once we add support for multiple master/worker nodes, // cloud-init etc. for _, ig := range b.InstanceGroups { - name := b.AutoscalingGroupName(ig) - createVmTask := &vspheretasks.VirtualMachine{ - Name: &name, - VMTemplateName: fi.String(ig.Spec.Image), + instanceCount := int(fi.Int32Value(ig.Spec.MinSize)) + if ig.Spec.Role == kops.InstanceGroupRoleMaster { + instanceCount = 1 } + for i := 1; i <= instanceCount; i++ { + name := b.InstanceName(ig, strconv.Itoa(i)) + createVmTask := &vspheretasks.VirtualMachine{ + Name: &name, + VMTemplateName: fi.String(ig.Spec.Image), + } - c.AddTask(createVmTask) + c.AddTask(createVmTask) - attachISOTaskName := "AttachISO-" + name - attachISOTask := &vspheretasks.AttachISO{ - Name: &attachISOTaskName, - VM: createVmTask, - IG: ig, - BootstrapScript: b.BootstrapScript, + attachISOTaskName := "AttachISO-" + name + attachISOTask := &vspheretasks.AttachISO{ + Name: &attachISOTaskName, + VM: createVmTask, + IG: ig, + BootstrapScript: b.BootstrapScript, + } + attachISOTask.BootstrapScript.AddAwsEnvironmentVariables = true + + c.AddTask(attachISOTask) + + powerOnTaskName := "PowerON-" + name + powerOnTask := &vspheretasks.VMPowerOn{ + Name: &powerOnTaskName, + AttachISO: attachISOTask, + } + c.AddTask(powerOnTask) } - attachISOTask.BootstrapScript.AddAwsEnvironmentVariables = true - - c.AddTask(attachISOTask) - - powerOnTaskName := "PowerON-" + name - powerOnTask := &vspheretasks.VMPowerOn{ - Name: &powerOnTaskName, - AttachISO: attachISOTask, - } - c.AddTask(powerOnTask) } return nil }