in pkg/shell/terraform.go [408:474]
func ImportInputs(groupDir string, artifactsDir string, bp config.Blueprint) error {
deploymentRoot := filepath.Clean(filepath.Join(groupDir, ".."))
g, err := bp.Group(config.GroupName(filepath.Base(groupDir)))
if err != nil {
return err
}
inputs, err := gatherUpstreamOutputs(deploymentRoot, artifactsDir, g, bp)
if err != nil {
return err
}
if len(inputs) == 0 {
return nil
}
var outFile string
var toImport map[string]cty.Value // input values to be imported
switch g.Kind() {
case config.TerraformKind:
outFile = fmt.Sprintf("%s_inputs.auto.tfvars", g.Name)
toImport = inputs // import all
case config.PackerKind:
// Packer groups are enforced to have length 1
mod := g.Modules[0]
modPath, err := modulewriter.DeploymentSource(mod)
if err != nil {
return err
}
// evaluate Packer settings that contain intergroup references in the
// context of deployment variables and intergroup output values
intergroupSettings := map[string]cty.Value{}
for setting, value := range mod.Settings.Items() {
igcRefs := config.FindIntergroupReferences(value, mod, bp)
if len(igcRefs) > 0 {
intergroupSettings[setting] = value
}
}
igcVars := modulewriter.FindIntergroupVariables(g, bp)
newModule, err := modulewriter.SubstituteIgcReferencesInModule(config.Module{Settings: config.NewDict(intergroupSettings)}, igcVars)
if err != nil {
return err
}
if err := mergeMapsWithoutLoss(inputs, bp.Vars.Items()); err != nil {
return err
}
fakeBP := config.Blueprint{Vars: config.NewDict(inputs)}
evaluatedSettings, err := fakeBP.EvalDict(newModule.Settings)
if err != nil {
return err
}
outFile = filepath.Join(modPath, fmt.Sprintf("%s_inputs.auto.pkrvars.hcl", mod.ID))
toImport = evaluatedSettings.Items()
default:
return fmt.Errorf("unknown module kind for deployment group %s", g.Name)
}
outPath := filepath.Join(groupDir, outFile)
logging.Info("Writing outputs for deployment group %s to file %s", g.Name, outPath)
return modulewriter.WriteHclAttributes(toImport, outPath)
}