Skip to content

Commit

Permalink
Merge pull request #458 from twhiston/cmd_environment_vars
Browse files Browse the repository at this point in the history
Add environment key ENV
  • Loading branch information
twhiston committed Mar 20, 2018
2 parents caec53e + 690f80a commit d22f2eb
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 15 deletions.
44 changes: 43 additions & 1 deletion api/tasks/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,12 @@ func (t *task) getPlaybookArgs() ([]string, error) {
return nil, err
}

args = append(args, "--extra-vars", t.environment.JSON)
extraVar, err := removeCommandEnvironment(t.environment.JSON, js)
if err != nil {
t.log("Could not remove command environment, if existant it will be passed to --extra-vars. This is not fatal but be aware of side effects")
}

args = append(args, "--extra-vars", extraVar)
}

var extraArgs []string
Expand Down Expand Up @@ -449,13 +454,50 @@ func (t *task) envVars(home string, pwd string, gitSSHCommand *string) []string
env = append(env, fmt.Sprintln("PYTHONUNBUFFERED=1"))
//env = append(env, fmt.Sprintln("GIT_FLUSH=1"))

env = append(env, extractCommandEnvironment(t.environment.JSON)...)

if gitSSHCommand != nil {
env = append(env, fmt.Sprintf("GIT_SSH_COMMAND=%s", *gitSSHCommand))
}

return env
}

// extractCommandEnvironment unmarshalls a json string, extracts the ENV key from it and returns it as
// []string where strings are in key=value format
func extractCommandEnvironment(envJSON string) []string {
env := make([]string, 0)
var js map[string]interface{}
err := json.Unmarshal([]byte(envJSON), &js)
if err == nil {
if cfg, ok := js["ENV"]; ok {
switch v := cfg.(type) {
case map[string]interface{}:
for key, val := range v {
env = append(env, fmt.Sprintf("%s=%s", key, val))
}
}
}
}
return env
}

// removeCommandEnvironment removes the ENV key from task environments and returns the resultant json encoded string
// which can be passed as the --extra-vars flag values
func removeCommandEnvironment(envJSON string, envJs map[string]interface{}) (string, error) {
if _, ok := envJs["ENV"]; ok {
delete(envJs, "ENV")
ev, err := json.Marshal(envJs)
if err != nil {
return envJSON, err
}
envJSON = string(ev)
}

return envJSON, nil

}

// checkTmpDir checks to see if the temporary directory exists
// and if it does not attempts to create it
func checkTmpDir(path string) error {
Expand Down
31 changes: 17 additions & 14 deletions web/resources/pug/projects/environment/add.pug
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
.modal-header
h4.modal-title
span(ng-if="!env.id") New Environment
span(ng-if="env.id") Edit Environment
h4.modal-title
span(ng-if="!env.id") New Environment
span(ng-if="env.id") Edit Environment

.modal-body
form.form-horizontal
label.control-label Environment Name
input.form-control(type="text" ng-model="env.name" placeholder="Friendly name to identify your environment")
form.form-horizontal
label.control-label Environment Name
input.form-control(type="text" ng-model="env.name" placeholder="Friendly name to identify your environment")

label.control-label Environment (This has to be a JSON object)
div(ui-ace="{mode: 'json', workerPath: '/public/js/ace/'}" class="form-control" style="height: 200px" ng-model="env.json")
p.help-block Must be valid JSON
label.control-label Environment (This has to be a JSON object)
div(ui-ace="{mode: 'json', workerPath: '/public/js/ace/'}" class="form-control" style="height: 200px" ng-model="env.json")
p.help-block
| Must be valid JSON.
| You may use the key ENV to pass a json object which sets environmental
| variables for the ansible command execution environment

.modal-footer
button.btn.btn-default.pull-left(ng-click="$dismiss()") Dismiss
button.btn.btn-danger(ng-click="$close({ remove: true })") Delete
button.btn.btn-success(ng-click="$close({ environment: env })")
span(ng-if="!env.id") Create
span(ng-if="env.id") Update
button.btn.btn-default.pull-left(ng-click="$dismiss()") Dismiss
button.btn.btn-danger(ng-click="$close({ remove: true })") Delete
button.btn.btn-success(ng-click="$close({ environment: env })")
span(ng-if="!env.id") Create
span(ng-if="env.id") Update

0 comments on commit d22f2eb

Please sign in to comment.