mirror of
https://github.com/turbot/steampipe.git
synced 2025-12-19 18:12:43 -05:00
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package cmdconfig
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"slices"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/spf13/viper"
|
|
"github.com/turbot/steampipe/v2/pkg/constants"
|
|
"github.com/turbot/steampipe/v2/pkg/error_helpers"
|
|
)
|
|
|
|
// DisplayConfig prints all config set via WorkspaceProfile or HCL options
|
|
func DisplayConfig() {
|
|
diagnostics, ok := os.LookupEnv(constants.EnvConfigDump)
|
|
if !ok {
|
|
// shouldn't happen
|
|
return
|
|
}
|
|
diagnostics = strings.ToLower(diagnostics)
|
|
configFormats := []string{"config", "config_json"}
|
|
if !slices.Contains(configFormats, diagnostics) {
|
|
error_helpers.ShowWarning("invalid value for STEAMPIPE_CONFIG_DUMP, expected values: config,config_json")
|
|
return
|
|
}
|
|
|
|
var configArgNames = viper.AllKeys()
|
|
res := make(map[string]interface{}, len(configArgNames))
|
|
|
|
maxLength := 0
|
|
for _, a := range configArgNames {
|
|
if l := len(a); l > maxLength {
|
|
maxLength = l
|
|
}
|
|
res[a] = viper.Get(a)
|
|
}
|
|
|
|
switch diagnostics {
|
|
case "config":
|
|
// write config lines into array then sort them
|
|
lines := make([]string, len(res))
|
|
idx := 0
|
|
fmtStr := `%-` + fmt.Sprintf("%d", maxLength) + `s: %v` + "\n"
|
|
for k, v := range res {
|
|
lines[idx] = fmt.Sprintf(fmtStr, k, v)
|
|
idx++
|
|
}
|
|
sort.Strings(lines)
|
|
|
|
var b strings.Builder
|
|
b.WriteString("\n================\nSteampipe Config\n================\n\n")
|
|
|
|
for _, line := range lines {
|
|
b.WriteString(line)
|
|
}
|
|
fmt.Println(b.String())
|
|
case "config_json":
|
|
// iterate once more for the non-serializable values
|
|
for k, v := range res {
|
|
if _, err := json.Marshal(v); err != nil {
|
|
res[k] = fmt.Sprintf("%v", v)
|
|
}
|
|
}
|
|
jsonBytes, err := json.MarshalIndent(res, "", " ")
|
|
error_helpers.FailOnError(err)
|
|
fmt.Println(string(jsonBytes))
|
|
}
|
|
|
|
}
|