Skip to content

Commit 8385ec1

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

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
log.Fatalf("Couldn't parse deployment files: %v", err)
@@ -208,14 +221,32 @@ func (c *EKS) K8SDeploymentsParse(*kingpin.ParseContext) error {
208221
return nil
209222
}
210223

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

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

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

237268
if err != nil {
238-
log.Fatalf("creating cluster err:%v", err)
269+
return nil, fmt.Errorf("creating stack err:%v", err)
239270
}
240271

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

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

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

266289
err = provider.RetryUntilTrue(
@@ -270,7 +293,7 @@ func (c *EKS) StackDelete(*kingpin.ParseContext) error {
270293
)
271294

272295
if err != nil {
273-
log.Fatalf("deleting stack err:%v", err)
296+
return fmt.Errorf("deleting stack err:%v", err)
274297
}
275298

276299
return nil
@@ -301,27 +324,34 @@ func (c *EKS) stackDeleted(name string) (bool, error) {
301324
StackName: aws.String(name),
302325
}
303326
stackRes, err := c.clientCF.DescribeStacks(req)
327+
328+
if err.(awserr.Error).Code() == "ValidationError" {
329+
return true, nil
330+
}
331+
304332
if err != nil {
305333
return false, fmt.Errorf("Couldn't get stack status: %v", err)
306334
}
335+
307336
if *stackRes.Stacks[0].StackStatus == cloudFormation.StackStatusDeleteFailed {
308337
return false, fmt.Errorf("Stack delete failed - %s", *stackRes.Stacks[0].StackStatus)
309338
}
310-
if len(stackRes.Stacks) == 0 {
311-
return true, nil
312-
}
339+
313340
log.Printf("Stack '%s' status: %s", name, *stackRes.Stacks[0].StackStatus)
314341
return false, nil
315342
}
316343

317-
func (c *EKS) showSubnetIds(name string) ([]string, error) {
344+
func (c *EKS) showSubnetIds(clusterName string) ([]string, error) {
345+
stackName := fmt.Sprintf("%s-vpc", clusterName)
318346
req := &cloudFormation.DescribeStacksInput{
319-
StackName: aws.String(name),
347+
StackName: aws.String(stackName),
320348
}
321349
stackRes, err := c.clientCF.DescribeStacks(req)
322350

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

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

0 commit comments

Comments
 (0)