Skip to content

Commit

Permalink
export literal env vars
Browse files Browse the repository at this point in the history
  • Loading branch information
kendavis2 committed Jul 27, 2021
1 parent d5d8875 commit 84eaa6f
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 12 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,8 @@ Using the `--output` or `-o` flag, the stashed configuration can be downloaded,
|ecs-task-inject-env|*|*|.env|stdout|AWS ECS task definition [secrets](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/specifying-sensitive-data.html) / [envfile](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html) (ENV) (key/arn)|
|ecs-task-env|.env|.env|.env|stdout|AWS ECS task definition [environment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environment) (JSON) (key/value)|
|json|.env|.env|.env|stdout|JSON object|
|terminal-export|.env|.env|.env|stdout|prepend "export " to each key/value pair|
|terminal-export-literal|.env|.env|.env|stdout|prepend "export " to each key/value pair (single quotes)|
|terminal-export|.env|.env|.env|stdout|prepend "export " to each key/value pair (double quotes)|

</details>

Expand Down
17 changes: 9 additions & 8 deletions cli/cmd/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,14 @@ Examples:
stash get config/dev/.env -o file
Outputs:
file file system original file
terraform file system terraform scripts
ecs-task-inject-json stdout AWS ECS task definition secrets / envfile (JSON) (key/arn)
ecs-task-inject-env stdout AWS ECS task definition secrets / envfile (ENV) (key/arn)
ecs-task-env stdout AWS ECS task definition environment (JSON) (key/value)
json stdout JSON object
terminal-export stdout prepend "export " to each key/value pair
file file system original file
terraform file system terraform scripts
ecs-task-inject-json stdout AWS ECS task definition secrets / envfile (JSON) (key/arn)
ecs-task-inject-env stdout AWS ECS task definition secrets / envfile (ENV) (key/arn)
ecs-task-env stdout AWS ECS task definition environment (JSON) (key/value)
json stdout JSON object
terminal-export stdout prepend "export " to each key/value pair (double quotes)
terminal-export-literal stdout prepend "export " to each key/value pair (single quotes)
`,
PreRun: func(cmd *cobra.Command, args []string) {
viper.BindPFlags(cmd.Flags())
Expand All @@ -66,7 +67,7 @@ Outputs:
opts.Service = viper.GetString("service")
opts.Tags = viper.GetStringSlice("tags")
opts.Output = viper.GetString("output")

downloaded, err := action.Get(opts, action.Dep{
Monitor: &m,
Stderr: os.Stderr,
Expand Down
9 changes: 8 additions & 1 deletion component/output/transformer.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const (
TypeECSTaskInjectEnv = "ecs-task-inject-env"
TypeJSONObject = "json"
TypeExport = "terminal-export"
TypeExportLiteral = "terminal-export-literal"
TypeOriginal = "original"
TypeFile = "file"
)
Expand All @@ -16,7 +17,7 @@ type ITransformer interface {
}

// GetTransformer ...
func GetTransformer(output string, fileType string) (ITransformer, error) {
func GetTransformer(output, fileType string) (ITransformer, error) {

switch output {
case TypeJSONObject:
Expand All @@ -26,6 +27,12 @@ func GetTransformer(output string, fileType string) (ITransformer, error) {
case TypeExport:
return ExportTransformer{
fileType: fileType,
literal: false,
}, nil
case TypeExportLiteral:
return ExportTransformer{
fileType: fileType,
literal: true,
}, nil
case TypeECSTaskEnv:
return TaskDefEnvTransformer{
Expand Down
15 changes: 13 additions & 2 deletions component/output/transformer_export.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ package output
import (
"bytes"
"fmt"

"github.com/dabblebox/stash/component/dotenv"
"github.com/dabblebox/stash/component/file"
)

type ExportTransformer struct {
fileType string
literal bool
}

func (t ExportTransformer) Transform(data []byte) ([]byte, error) {
Expand All @@ -22,10 +23,20 @@ func (t ExportTransformer) Transform(data []byte) ([]byte, error) {
return data, err
}

quote := getQuote(t.literal)

var b bytes.Buffer
for k, v := range params {
b.WriteString(fmt.Sprintf("export %s=\"%s\"\n", k, v))
b.WriteString(fmt.Sprintf("export %s=%s%s%s\n", k, quote, v, quote))
}

return b.Bytes(), nil
}

func getQuote(literal bool) string {
if literal {
return `'`
}

return `"`
}

0 comments on commit 84eaa6f

Please sign in to comment.