func ImportInputs()

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)
}