func provisionStack(svc *awscf.CloudFormation, b []byte, onFailure string, params []*awscf.Parameter, stackName string) { input := &awscf.CreateStackInput{ StackName: aws.String(stackName), Capabilities: []*string{ aws.String("CAPABILITY_IAM"), }, OnFailure: aws.String(onFailure), Parameters: params, TemplateBody: aws.String(string(b)), TimeoutInMinutes: aws.Long(20), } resp, err := svc.CreateStack(input) if err != nil { log.Fatal(err) } log.Println(awsutil.StringValue(resp)) }
func (r *Run) runCreate(client *cf.CloudFormation, d tacks.Document, stack string) error { e := d.Environment tacks.Logger().Infof("Creating stack %s", e.StackName) var ( capabilities []*string onFailure = "DO_NOTHING" tags []*cf.Tag timeoutInMinutes uint8 = 15 ) if d.IsIamCapabilitiesRequired() { capabilities = append(capabilities, aws.String("CAPABILITY_IAM")) } if e.DeleteOnFailure { onFailure = "DELETE" } if e.Timeout > 0 { timeoutInMinutes = e.Timeout } for key, value := range e.Tags { tags = append(tags, &cf.Tag{ Key: aws.String(key), Value: aws.String(value), }) } _, err := client.CreateStack(&cf.CreateStackInput{ Capabilities: capabilities, OnFailure: aws.String(onFailure), StackName: aws.String(e.StackName), Tags: tags, TemplateBody: aws.String(stack), TimeoutInMinutes: aws.Long(int64(timeoutInMinutes)), }) return err }
func createStackAndWait(svc *cloudformation.CloudFormation, name, stackBody string) error { creq := &cloudformation.CreateStackInput{ StackName: aws.String(name), OnFailure: aws.String("DO_NOTHING"), Capabilities: []*string{aws.String(cloudformation.CapabilityCapabilityIam)}, TemplateBody: aws.String(stackBody), } resp, err := svc.CreateStack(creq) if err != nil { return err } if err := waitForStackCreateComplete(svc, aws.StringValue(resp.StackId)); err != nil { return err } return nil }