Skip to content

Commit a4a1554

Browse files
committed
Add support for stackCreation and stackDeletion
Signed-off-by: Drumil Patel <[email protected]>
1 parent 4bacc6a commit a4a1554

File tree

1 file changed

+66
-29
lines changed

1 file changed

+66
-29
lines changed

pkg/provider/eks/eks.go

Lines changed: 66 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,19 @@ func (c *EKS) EKSDeploymentParse(*kingpin.ParseContext) error {
160160
return err
161161
}
162162

163+
subnetIds, err := c.listdownSubnetIds(c.DeploymentVars["CLUSTER_NAME"])
164+
165+
if err != nil {
166+
log.Fatalf("Error in listing down subnets: %v", err)
167+
}
168+
169+
c.DeploymentVars = provider.MergeDeploymentVars(
170+
c.DeploymentVars,
171+
map[string]string{
172+
"EKS_SUBNET_IDS": strings.Join(subnetIds, c.DeploymentVars["SEPARATOR"]),
173+
},
174+
)
175+
163176
deploymentResource, err := provider.DeploymentsParse(c.DeploymentFiles, c.DeploymentVars)
164177
if err != nil {
165178
return fmt.Errorf("Couldn't parse deployment files: %v", err)
@@ -209,14 +222,32 @@ func (c *EKS) K8SDeploymentsParse(*kingpin.ParseContext) error {
209222
return nil
210223
}
211224

212-
// StackCreate creates a new vpc and prints desired subnetIds.
213-
func (c *EKS) StackCreate(*kingpin.ParseContext) error {
214-
stackName := fmt.Sprintf("%s-vpc", c.DeploymentVars["CLUSTER_NAME"])
225+
func (c *EKS) listdownSubnetIds(clusterName string) ([]string, error) {
226+
subnetIds, err := c.showSubnetIds(clusterName)
227+
228+
if err != nil {
229+
return []string{}, err
230+
}
231+
232+
if len(subnetIds) == 0 {
233+
subnetIds, err = c.createStack(clusterName)
234+
if err != nil {
235+
return []string{}, err
236+
}
237+
}
238+
239+
return subnetIds, err
240+
}
241+
242+
// createStack creates a new vpc and prints desired subnetIds.
243+
func (c *EKS) createStack(clusterName string) ([]string, error) {
244+
stackName := fmt.Sprintf("%s-vpc", clusterName)
215245
req := &cloudFormation.CreateStackInput{
216-
StackName: aws.String(stackName),
246+
TemplateURL: aws.String("https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-07-23/amazon-eks-vpc-sample.yaml"),
247+
StackName: aws.String(stackName),
217248
Tags: []*cloudFormation.Tag{
218249
{
219-
Key: aws.String(fmt.Sprintf("kubernetes.io/cluster/%s", c.DeploymentVars["CLUSTER_NAME"])),
250+
Key: aws.String(fmt.Sprintf("kubernetes.io/cluster/%s", clusterName)),
220251
Value: aws.String("shared"),
221252
},
222253
},
@@ -226,33 +257,25 @@ func (c *EKS) StackCreate(*kingpin.ParseContext) error {
226257

227258
_, err := c.clientCF.CreateStack(req)
228259
if err != nil {
229-
log.Fatalf("Couldn't create stack '%s' ,err: %s", *req.StackName, err)
260+
return nil, fmt.Errorf("Couldn't create stack '%s' ,err: %s", *req.StackName, err)
230261
}
231262

232263
err = provider.RetryUntilTrue(
233264
fmt.Sprintf("creating stack:%v", *req.StackName),
234265
provider.GlobalRetryCount,
235-
func() (bool, error) { return c.clusterRunning(*req.StackName) },
266+
func() (bool, error) { return c.stackCreated(*req.StackName) },
236267
)
237268

238269
if err != nil {
239-
log.Fatalf("creating cluster err:%v", err)
270+
return nil, fmt.Errorf("creating stack err:%v", err)
240271
}
241272

242-
subnetIds, err := c.showSubnetIds(*req.StackName)
243-
244-
if err != nil {
245-
log.Fatalf("error in displaying subnetIds, err:%v", err)
246-
}
247-
248-
fmt.Printf("SubnetIds with defined separator is as follows: %s", strings.Join(subnetIds, c.DeploymentVars["SEPARATOR"]))
249-
250-
return nil
273+
return c.showSubnetIds(clusterName)
251274
}
252275

253-
// StackDelete deletes vpc stack.
254-
func (c *EKS) StackDelete(*kingpin.ParseContext) error {
255-
stackName := fmt.Sprintf("%s-vpc", c.DeploymentVars["CLUSTER_NAME"])
276+
// deleteStack deletes vpc stack.
277+
func (c *EKS) deleteStack(clusterName string) error {
278+
stackName := fmt.Sprintf("%s-vpc", clusterName)
256279
req := &cloudFormation.DeleteStackInput{
257280
StackName: aws.String(stackName),
258281
}
@@ -261,7 +284,7 @@ func (c *EKS) StackDelete(*kingpin.ParseContext) error {
261284

262285
_, err := c.clientCF.DeleteStack(req)
263286
if err != nil {
264-
log.Fatalf("Couldn't delete stack '%s' ,err: %s", *req.StackName, err)
287+
return fmt.Errorf("Couldn't delete stack '%s' ,err: %s", *req.StackName, err)
265288
}
266289

267290
err = provider.RetryUntilTrue(
@@ -271,7 +294,7 @@ func (c *EKS) StackDelete(*kingpin.ParseContext) error {
271294
)
272295

273296
if err != nil {
274-
log.Fatalf("deleting stack err:%v", err)
297+
return fmt.Errorf("deleting stack err:%v", err)
275298
}
276299

277300
return nil
@@ -302,27 +325,34 @@ func (c *EKS) stackDeleted(name string) (bool, error) {
302325
StackName: aws.String(name),
303326
}
304327
stackRes, err := c.clientCF.DescribeStacks(req)
328+
329+
if err.(awserr.Error).Code() == "ValidationError" {
330+
return true, nil
331+
}
332+
305333
if err != nil {
306334
return false, fmt.Errorf("Couldn't get stack status: %v", err)
307335
}
336+
308337
if *stackRes.Stacks[0].StackStatus == cloudFormation.StackStatusDeleteFailed {
309338
return false, fmt.Errorf("Stack delete failed - %s", *stackRes.Stacks[0].StackStatus)
310339
}
311-
if len(stackRes.Stacks) == 0 {
312-
return true, nil
313-
}
340+
314341
log.Printf("Stack '%s' status: %s", name, *stackRes.Stacks[0].StackStatus)
315342
return false, nil
316343
}
317344

318-
func (c *EKS) showSubnetIds(name string) ([]string, error) {
345+
func (c *EKS) showSubnetIds(clusterName string) ([]string, error) {
346+
stackName := fmt.Sprintf("%s-vpc", clusterName)
319347
req := &cloudFormation.DescribeStacksInput{
320-
StackName: aws.String(name),
348+
StackName: aws.String(stackName),
321349
}
322350
stackRes, err := c.clientCF.DescribeStacks(req)
323351

324-
if err != nil {
325-
return []string{}, err
352+
if awsErr, ok := err.(awserr.Error); ok {
353+
if awsErr.Code() != "ValidationError" {
354+
return []string{}, awsErr
355+
}
326356
}
327357

328358
for _, stack := range stackRes.Stacks {
@@ -457,6 +487,13 @@ func (c *EKS) ClusterDelete(*kingpin.ParseContext) error {
457487
if err != nil {
458488
return fmt.Errorf("removing cluster err:%v", err)
459489
}
490+
491+
log.Printf("Removing subnets related to cluster '%s'", *req.Cluster.Name)
492+
err = c.deleteStack(*req.Cluster.Name)
493+
494+
if err != nil {
495+
log.Fatalf("removing cluster's subnets err:%v", err)
496+
}
460497
}
461498
return nil
462499
}

0 commit comments

Comments
 (0)