forked from gruntwork-io/terragrunt
-
Notifications
You must be signed in to change notification settings - Fork 2
/
config_substitute.go
113 lines (100 loc) · 3.11 KB
/
config_substitute.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package config
import (
"path/filepath"
"strings"
"github.com/coveo/gotemplate/collections"
"github.com/gruntwork-io/terragrunt/options"
)
// SubstituteAllVariables replace all remaining variables by the value
func (conf *TerragruntConfig) SubstituteAllVariables(terragruntOptions *options.TerragruntOptions, substituteFinal bool) {
scriptFolder := filepath.Join(terragruntOptions.WorkingDir, TerragruntScriptFolder)
substitute := func(value *string) *string {
if value == nil {
return nil
}
*value = SubstituteVars(*value, terragruntOptions)
if substituteFinal {
// We only substitute folders on the last substitute call
*value = strings.Replace(*value, getTempFolder, terragruntOptions.DownloadDir, -1)
*value = strings.Replace(*value, getScriptsFolder, scriptFolder, -1)
*value = strings.TrimSpace(collections.UnIndent(*value))
}
return value
}
substitute(conf.Uniqueness)
if roles, ok := conf.AssumeRole.([]string); ok {
for i := range roles {
substitute(&roles[i])
}
conf.AssumeRole = roles
}
if conf.Terraform != nil {
for i, extraArgs := range conf.Terraform.ExtraArgs {
substitute(&extraArgs.Description)
conf.Terraform.ExtraArgs[i] = extraArgs
}
substitute(&conf.Terraform.Source)
}
if conf.RemoteState != nil && conf.RemoteState.Config != nil {
for key, value := range conf.RemoteState.Config {
switch val := value.(type) {
case string:
conf.RemoteState.Config[key] = *substitute(&val)
}
}
}
substituteHooks := func(hooks HookList) {
for i, hook := range hooks {
substitute(&hook.Command)
substitute(&hook.Description)
for i, arg := range hook.Arguments {
hook.Arguments[i] = *substitute(&arg)
}
hooks[i] = hook
}
}
substituteHooks(conf.PreHooks)
substituteHooks(conf.PostHooks)
for i, command := range conf.ExtraCommands {
substitute(&command.Description)
substitute(&command.VersionArg)
for i, cmd := range command.Commands {
command.Commands[i] = *substitute(&cmd)
}
for i, alias := range command.Aliases {
command.Aliases[i] = *substitute(&alias)
}
for i, arg := range command.Arguments {
command.Arguments[i] = *substitute(&arg)
}
conf.ExtraCommands[i] = command
}
for i, importer := range conf.ImportFiles {
substitute(&importer.Description)
substitute(&importer.Source)
substitute(&importer.Target)
for i, value := range importer.Files {
importer.Files[i] = *substitute(&value)
}
for _, value := range importer.CopyAndRename {
substitute(&value.Source)
substitute(&value.Target)
}
conf.ImportFiles[i] = importer
}
for i, importVariables := range conf.ImportVariables {
substitute(&importVariables.Description)
substitute(&importVariables.Source)
substitute(&importVariables.TFVariablesFile)
for i, value := range importVariables.Vars {
importVariables.Vars[i] = *substitute(&value)
}
for i, value := range importVariables.RequiredVarFiles {
importVariables.RequiredVarFiles[i] = *substitute(&value)
}
for i, value := range importVariables.OptionalVarFiles {
importVariables.OptionalVarFiles[i] = *substitute(&value)
}
conf.ImportVariables[i] = importVariables
}
}