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
}