diff --git a/cmd/infra.go b/cmd/infra.go index 926c7824..8aa47cf2 100644 --- a/cmd/infra.go +++ b/cmd/infra.go @@ -7,8 +7,37 @@ import ( "github.com/spf13/cobra" "github.com/spf13/viper" "go.uber.org/zap" + "io/ioutil" + "path/filepath" + "fmt" + "strings" ) +func writeS3VarsFile(logger *zap.SugaredLogger, tfDir, bucket string) error { + logger.Infof("Writing s3 bucket %s to tfvars\n", bucket) + bucketvarspath := filepath.Join(tfDir, "terraform.tfvars") + input, err := ioutil.ReadFile(bucketvarspath) + if err != nil { + return errors.Wrapf(err, "Error reading bucket vars file %s", bucketvarspath) + } + + lines := strings.Split(string(input), "\n") + for i, line := range lines { + if strings.Contains(line, "s3_bucket_name = ") { + lines[i] = fmt.Sprintf("s3_bucket_name = \"%s\"", bucket) + } + } + output := strings.Join(lines, "\n") + + err = ioutil.WriteFile(bucketvarspath, []byte(output), 0644) + if err != nil { + return errors.Wrapf(err, "Error writing providers file %s", bucketvarspath) + } + + logger.Infof("Wrote s3 bucket %s to tfvars\n", bucket) + return nil +} + func newCreateCommand(logger *zap.SugaredLogger) *cobra.Command { cmd := &cobra.Command{ Use: `create`, @@ -24,7 +53,17 @@ func newCreateCommand(logger *zap.SugaredLogger) *cobra.Command { scenariosDir := viper.GetString("scenarios-dir") attackTag := viper.GetString("attack-container-tag") tfDir := viper.GetString("tf-dir") - err := simulator.Create(logger, tfDir, bucket, attackTag) + + //bucket var + logger.Infof("Creating variable %s for terraform s3 bucket\n", bucket) + err := writeS3VarsFile(logger, tfDir, bucket) + if err != nil { + return errors.Wrap(err, "Error saving bucket name") + } + logger.Infof("Created s3 bucket %s for terraform remote state\n", bucket) + //bucket var + + err = simulator.Create(logger, tfDir, bucket, attackTag) if err != nil { logger.Errorw("Error creating infrastructure", zap.Error(err)) } diff --git a/cmd/init.go b/cmd/init.go index fd3fadbc..dc7094de 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -24,6 +24,7 @@ func newInitCommand() *cobra.Command { Short: "Creates and configures a bucket for remote state", RunE: func(cmd *cobra.Command, args []string) error { bucket := viper.GetString("state-bucket") + logger, err := newLogger(viper.GetString("loglevel"), "console") if err != nil { logger.Fatalf("Can't re-initialize zap logger: %v", err) @@ -43,6 +44,7 @@ func newInitCommand() *cobra.Command { bucket = strings.TrimSpace(bucket) + logger.Infof("Creating s3 bucket %s for terraform remote state\n", bucket) if err = simulator.CreateRemoteStateBucket(logger, bucket); err != nil { if strings.HasPrefix(errors.Cause(err).Error(), "BucketAlreadyOwnedByYou") { @@ -53,8 +55,6 @@ func newInitCommand() *cobra.Command { return errors.Wrapf(err, "Error creating s3 bucket %s", bucket) } - - logger.Infof("Created s3 bucket %s for terraform remote state\n", bucket) saveBucketConfig(logger, bucket) return nil diff --git a/terraform/deployments/AWS/main.tf b/terraform/deployments/AWS/main.tf index 604a6219..fe0344dd 100644 --- a/terraform/deployments/AWS/main.tf +++ b/terraform/deployments/AWS/main.tf @@ -1,6 +1,6 @@ locals { - aws_tags = "${var.default_tags}" + aws_tags = "${merge(var.default_tags, map("Simulator Bucket", "${var.s3_bucket_name}"))}" } // Setup networking diff --git a/terraform/deployments/AWS/terraform.tfvars b/terraform/deployments/AWS/terraform.tfvars new file mode 100644 index 00000000..8ff176fa --- /dev/null +++ b/terraform/deployments/AWS/terraform.tfvars @@ -0,0 +1 @@ +s3_bucket_name = "###replaced by infra.go###" diff --git a/terraform/deployments/AWS/variables.tf b/terraform/deployments/AWS/variables.tf index ff95cd4d..7aa601fa 100644 --- a/terraform/deployments/AWS/variables.tf +++ b/terraform/deployments/AWS/variables.tf @@ -66,6 +66,11 @@ variable "attack_container_tag" { default = "latest" } +variable "s3_bucket_name" { + description = "name of the s3 state bucket" +} + + variable "default_tags" { description = "Default tags for all resources" type = "map" @@ -73,4 +78,3 @@ variable "default_tags" { Product = "simulator" } } -