-
Notifications
You must be signed in to change notification settings - Fork 3
/
require_args.go
50 lines (45 loc) · 1.55 KB
/
require_args.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
package inputvars
import (
"fmt"
"github.com/turbot/pipe-fittings/modconfig"
"github.com/turbot/pipe-fittings/versionmap"
"github.com/turbot/terraform-components/terraform"
"github.com/turbot/terraform-components/tfdiags"
)
const ValueFromModFile terraform.ValueSourceType = 'M'
func CollectVariableValuesFromModRequire(m *modconfig.Mod, lock *versionmap.WorkspaceLock) (terraform.InputValues, error) {
res := make(terraform.InputValues)
if m.Require != nil {
for _, depModConstraint := range m.Require.Mods {
if args := depModConstraint.Args; args != nil {
// find the loaded dep mod which satisfies this constraint
resolvedConstraint := lock.GetMod(depModConstraint.Name, m)
if resolvedConstraint == nil {
return nil, fmt.Errorf("dependency mod %s is not loaded", depModConstraint.Name)
}
for varName, varVal := range args {
varFullName := fmt.Sprintf("%s.var.%s", resolvedConstraint.Alias, varName)
sourceRange := tfdiags.SourceRange{
Filename: m.Require.DeclRange.Filename,
Start: tfdiags.SourcePos{
Line: m.Require.DeclRange.Start.Line,
Column: m.Require.DeclRange.Start.Column,
Byte: m.Require.DeclRange.Start.Byte,
},
End: tfdiags.SourcePos{
Line: m.Require.DeclRange.End.Line,
Column: m.Require.DeclRange.End.Column,
Byte: m.Require.DeclRange.End.Byte,
},
}
res[varFullName] = &terraform.InputValue{
Value: varVal,
SourceType: ValueFromModFile,
SourceRange: sourceRange,
}
}
}
}
}
return res, nil
}