Skip to content

Commit

Permalink
Merge pull request #161 from massdriver-cloud/add-http-backend-for-te…
Browse files Browse the repository at this point in the history
…rraform

Add http backend and disable backend generation of already exists
  • Loading branch information
chrisghill authored Sep 8, 2024
2 parents 1e81002 + a8064b0 commit 2ad8497
Show file tree
Hide file tree
Showing 9 changed files with 191 additions and 43 deletions.
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
{
"name": "Go",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/go:1-1.21-bullseye"
"image": "mcr.microsoft.com/devcontainers/go:1-1.22-bookworm"

// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
Expand Down
14 changes: 7 additions & 7 deletions cmd/bundle.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,24 +61,24 @@ func runBundleBuild(cmd *cobra.Command, args []string) error {
// default the output to the path of the bundle.yaml file
output, err := cmd.Flags().GetString("output")
if err != nil {
log.Error().Err(err).Str("bundle", bundlePath).Msg("an error occurred while building bundle")
log.Error().Err(err).Msg("an error occurred while building bundle")
return err
}
if output == "" {
output = filepath.Dir(bundlePath)
}

log.Info().Str("bundle", bundlePath).Msg("building bundle")
log.Info().Msg("building bundle")

bun, err := bundle.ParseBundle(bundlePath)
if err != nil {
log.Error().Err(err).Str("bundle", bundlePath).Msg("an error occurred while building bundle")
log.Error().Err(err).Msg("an error occurred while building bundle")
return err
}

err = bun.GenerateSchemas(output)
if err != nil {
log.Error().Err(err).Str("bundle", bundlePath).Msg("an error occurred while generating bundle schema files")
log.Error().Err(err).Msg("an error occurred while generating bundle schema files")
return err
}

Expand All @@ -87,18 +87,18 @@ func runBundleBuild(cmd *cobra.Command, args []string) error {
case "terraform":
err = terraform.GenerateFiles(output, step.Path)
if err != nil {
log.Error().Err(err).Str("bundle", bundlePath).Str("provisioner", step.Provisioner).Msg("an error occurred while generating provisioner files")
log.Error().Err(err).Msg("an error occurred while generating provisioner files")
return err
}
case "exec":
// No-op (Golang doesn't not fallthrough unless explicitly stated)
default:
log.Error().Str("bundle", bundlePath).Msg("unknown provisioner: " + step.Provisioner)
log.Error().Msg("unknown provisioner: " + step.Provisioner)
return fmt.Errorf("unknown provisioner: %v", step.Provisioner)
}
}

log.Info().Str("bundle", bundlePath).Str("output", output).Msg("bundle built")
log.Info().Msg("bundle built")

return err
}
Expand Down
8 changes: 4 additions & 4 deletions cmd/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,22 +122,22 @@ func RunDeploymentStatus(cmd *cobra.Command, args []string) error {

deploymentStatus := cmd.Parent().Use + "_" + cmd.Use

log.Info().Str("deployment", deploymentId).Msg("sending deployment status event: deploymentStatus")
log.Info().Msgf("sending deployment status event: %s", deploymentStatus)
mdClient, err := massdriver.InitializeMassdriverClient()
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while sending deployment status event: deploymentStatus")
log.Error().Err(err).Msgf("an error occurred while sending deployment status event: %s", deploymentStatus)
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
}
err = mdClient.ReportDeploymentStatus(ctx, deploymentId, deploymentStatus)
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while sending deployment status event: deploymentStatus")
log.Error().Err(err).Msgf("an error occurred while sending deployment status event: %s", deploymentStatus)
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
}

log.Info().Str("deployment", deploymentId).Msg("deployment status event sent: deploymentStatus")
log.Info().Msgf("deployment status event sent: %s", deploymentStatus)
return nil
}
53 changes: 38 additions & 15 deletions cmd/provisioner.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,13 @@ var provisionerTerraformBackendS3Cmd = &cobra.Command{
RunE: runProvisionerTerraformBackendS3,
}

var provisionerTerraformBackendHTTPCmd = &cobra.Command{
Use: "http",
Short: "Generate a terraform HTTP backend config",
Long: ``,
RunE: runProvisionerTerraformBackendHTTP,
}

func init() {
rootCmd.AddCommand(provisionerCmd)

Expand Down Expand Up @@ -118,6 +125,9 @@ func init() {
provisionerTerraformBackendCmd.AddCommand(provisionerTerraformBackendS3Cmd)
provisionerTerraformBackendS3Cmd.Flags().StringP("step", "s", "", "Bundle Step")
provisionerTerraformBackendS3Cmd.MarkFlagRequired("step")
provisionerTerraformBackendCmd.AddCommand(provisionerTerraformBackendHTTPCmd)
provisionerTerraformBackendHTTPCmd.Flags().StringP("step", "s", "", "Bundle Step")
provisionerTerraformBackendHTTPCmd.MarkFlagRequired("step")
}

func runProvisionerAuth(cmd *cobra.Command, args []string) error {
Expand Down Expand Up @@ -225,7 +235,7 @@ func runProvisionerHelmReport(cmd *cobra.Command, args []string) error {
} else {
inputFile, err := os.Open(file)
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while opening file")
log.Error().Err(err).Msg("an error occurred while opening file")
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
Expand All @@ -236,7 +246,7 @@ func runProvisionerHelmReport(cmd *cobra.Command, args []string) error {

mdClient, err := massdriver.InitializeMassdriverClient()
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while initializing Massdriver client")
log.Error().Err(err).Msg("an error occurred while initializing Massdriver client")
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
Expand Down Expand Up @@ -274,7 +284,7 @@ func runProvisionerOPAReport(cmd *cobra.Command, args []string) error {
} else {
inputFile, err := os.Open(file)
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while opening file")
log.Error().Err(err).Msg("an error occurred while opening file")
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
Expand All @@ -285,7 +295,7 @@ func runProvisionerOPAReport(cmd *cobra.Command, args []string) error {

mdClient, err := massdriver.InitializeMassdriverClient()
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while initializing Massdriver client")
log.Error().Err(err).Msg("an error occurred while initializing Massdriver client")
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
Expand Down Expand Up @@ -323,7 +333,7 @@ func runProvisionerTerraformReport(cmd *cobra.Command, args []string) error {
} else {
inputFile, err := os.Open(file)
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while opening file")
log.Error().Err(err).Msg("an error occurred while opening file")
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
Expand All @@ -334,7 +344,7 @@ func runProvisionerTerraformReport(cmd *cobra.Command, args []string) error {

mdClient, err := massdriver.InitializeMassdriverClient()
if err != nil {
log.Error().Err(err).Str("deployment", deploymentId).Msg("an error occurred while initializing Massdriver client")
log.Error().Err(err).Msg("an error occurred while initializing Massdriver client")
span.RecordError(err)
span.SetStatus(codes.Error, err.Error())
return err
Expand Down Expand Up @@ -366,15 +376,28 @@ func runProvisionerTerraformBackendS3(cmd *cobra.Command, args []string) error {
return specErr
}

log.Info().
Str("provisioner", "terraform").
Str("output", output).
Str("step", step).
Str("bucket", spec.S3StateBucket).
Str("organization-id", spec.OrganizationID).
Str("package-id", spec.PackageID).
Str("region", spec.S3StateRegion).
Str("dynamodb-table", spec.DynamoDBStateLockTableArn).Msg("Generating state file")
log.Info().Msg("Generating state file")

return tf.GenerateBackendS3File(ctx, output, spec, step)
}

func runProvisionerTerraformBackendHTTP(cmd *cobra.Command, args []string) error {
ctx, span := otel.Tracer("xo").Start(telemetry.GetContextWithTraceParentFromEnv(), "runProvisionerTerraformBackendHTTP")
telemetry.SetSpanAttributes(span)
defer span.End()

output, _ := cmd.Flags().GetString("output")
step, _ := cmd.Flags().GetString("step")

spec, specErr := massdriver.GetSpecification()
if specErr != nil {
log.Error().Err(specErr).Msg("an error occurred while extracting Massdriver specification")
span.RecordError(specErr)
span.SetStatus(codes.Error, specErr.Error())
return specErr
}

log.Info().Msg("Generating state file")

return tf.GenerateBackendHTTPFile(ctx, output, spec, step)
}
2 changes: 2 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"strings"

"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/spf13/cobra"

homedir "github.com/mitchellh/go-homedir"
Expand Down Expand Up @@ -77,4 +78,5 @@ func initLogging() {
default:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
}
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout})
}
15 changes: 13 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module xo

go 1.21
go 1.22

require (
github.com/aws/aws-sdk-go-v2 v1.17.3
Expand All @@ -18,12 +18,14 @@ require (
github.com/itchyny/gojq v0.12.8
github.com/kelseyhightower/envconfig v1.4.0
github.com/manifoldco/promptui v0.9.0
github.com/massdriver-cloud/terraform-config-inspect v0.0.0-20240906041648-e5461c213cea
github.com/mitchellh/go-homedir v1.1.0
github.com/rs/zerolog v1.27.0
github.com/spf13/cobra v1.5.0
github.com/spf13/viper v1.12.0
github.com/stretchr/testify v1.8.4
github.com/xeipuuv/gojsonschema v1.2.0
github.com/zclconf/go-cty v1.10.0
github.com/zclconf/go-cty v1.14.4
go.opentelemetry.io/otel v1.18.0
go.opentelemetry.io/otel/trace v1.18.0
gopkg.in/ini.v1 v1.66.6
Expand All @@ -32,6 +34,8 @@ require (
)

require (
github.com/agext/levenshtein v1.2.2 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.2 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.6 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 // indirect
Expand All @@ -48,23 +52,28 @@ require (
github.com/aws/smithy-go v1.13.5 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/chzyer/readline v1.5.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.5.4 // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/hcl/v2 v2.20.1 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/itchyny/timefmt-go v0.1.3 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect
github.com/magiconair/properties v1.8.6 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mitchellh/go-wordwrap v1.0.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
github.com/sethvargo/go-envconfig v0.9.0 // indirect
github.com/shirou/gopsutil/v3 v3.23.8 // indirect
Expand Down Expand Up @@ -95,9 +104,11 @@ require (
go.opentelemetry.io/otel/sdk/metric v0.41.0 // indirect
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
golang.org/x/tools v0.6.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/grpc v1.58.3 // indirect
Expand Down
Loading

0 comments on commit 2ad8497

Please sign in to comment.