func getBlueprintInterfaces()

in cli/bpmetadata/tfconfig.go [244:283]


func getBlueprintInterfaces(configPath string) (*BlueprintInterface, error) {
	//load the configs from the dir path
	mod, diags := tfconfig.LoadModule(configPath)
	err := hasTfconfigErrors(diags)
	if err != nil {
		return nil, err
	}

	var variables []*BlueprintVariable
	for _, val := range mod.Variables {
		v := getBlueprintVariable(val)
		variables = append(variables, v)
	}

	// Get the varible orders from tf file.
	variableOrders, sortErr := getBlueprintVariableOrders(configPath)
	if sortErr != nil {
		Log.Info("Failed to get variables orders. Fallback to sort by variable names.", sortErr)
		sort.SliceStable(variables, func(i, j int) bool { return variables[i].Name < variables[j].Name })
	} else {
		Log.Info("Sort variables by the original input order.")
		sort.SliceStable(variables, func(i, j int) bool {
			return variableOrders[variables[i].Name] < variableOrders[variables[j].Name]
		})
	}

	var outputs []*BlueprintOutput
	for _, val := range mod.Outputs {
		o := getBlueprintOutput(val)
		outputs = append(outputs, o)
	}

	// Sort outputs
	sort.SliceStable(outputs, func(i, j int) bool { return outputs[i].Name < outputs[j].Name })

	return &BlueprintInterface{
		Variables: variables,
		Outputs:   outputs,
	}, nil
}