Files
steampipe/pkg/steampipeconfig/inputvars/require_args.go
kaidaguerre 91436fafba Support resolution of variables for transitive dependencies using parent mod 'args' property
`steampipe mod update` now updates transitive mods
It is now be possible to set values for variables in the current mod using fully qualified variable names. 
Only variables for root mod and top level dependency mods can be set by user
Closes #3533. Closes #3547. Closes #3548. Closes #3549
2023-06-09 16:22:09 +01:00

48 lines
1.4 KiB
Go

package inputvars
import (
"fmt"
"github.com/hashicorp/terraform/tfdiags"
"github.com/turbot/steampipe/pkg/steampipeconfig/modconfig"
"github.com/turbot/steampipe/pkg/steampipeconfig/versionmap"
)
func CollectVariableValuesFromModRequire(m *modconfig.Mod, lock *versionmap.WorkspaceLock) (InputValues, error) {
res := make(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] = &InputValue{
Value: varVal,
SourceType: ValueFromModFile,
SourceRange: sourceRange,
}
}
}
}
}
return res, nil
}