90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
package internal
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/spf13/cobra"
|
|
"k8s.io/klog/v2"
|
|
|
|
"example.com/monok8s/pkg/system"
|
|
)
|
|
|
|
func newInternalFWPrintEnvCmd() *cobra.Command {
|
|
var key string
|
|
var configPath string
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "fw-printenv",
|
|
Short: "Run fw_printenv",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
ctx := cmd.Context()
|
|
|
|
key = strings.TrimSpace(key)
|
|
configPath = strings.TrimSpace(configPath)
|
|
|
|
if configPath == "" {
|
|
configPath = defaultFWEnvConfigPath
|
|
}
|
|
|
|
if _, err := os.Stat(configPath); err != nil {
|
|
return fmt.Errorf("stat fw env config %q: %w", configPath, err)
|
|
}
|
|
|
|
runner := system.NewRunner(system.RunnerConfig{
|
|
DefaultTimeout: 15 * time.Second,
|
|
StreamOutput: false,
|
|
Logger: &system.StdLogger{},
|
|
})
|
|
|
|
runArgs := []string{"-c", configPath}
|
|
if key != "" {
|
|
runArgs = append(runArgs, key)
|
|
}
|
|
|
|
res, err := runner.RunWithOptions(
|
|
ctx,
|
|
"fw_printenv",
|
|
runArgs,
|
|
system.RunOptions{
|
|
Quiet: true,
|
|
},
|
|
)
|
|
if err != nil {
|
|
if res != nil {
|
|
klog.ErrorS(err, "fw_printenv failed",
|
|
"key", key,
|
|
"stdout", strings.TrimSpace(res.Stdout),
|
|
"stderr", strings.TrimSpace(res.Stderr),
|
|
)
|
|
}
|
|
return err
|
|
}
|
|
|
|
stdout := strings.TrimSpace(res.Stdout)
|
|
stderr := strings.TrimSpace(res.Stderr)
|
|
|
|
if stdout != "" {
|
|
fmt.Println(stdout)
|
|
}
|
|
if stderr != "" {
|
|
klog.InfoS("fw_printenv stderr", "output", stderr)
|
|
}
|
|
|
|
klog.InfoS("fw_printenv succeeded",
|
|
"key", key,
|
|
"configPath", configPath,
|
|
)
|
|
|
|
return nil
|
|
},
|
|
}
|
|
|
|
cmd.Flags().StringVar(&key, "key", "", "U-Boot environment variable name to print")
|
|
cmd.Flags().StringVar(&configPath, "config", defaultFWEnvConfigPath, "Path to fw_env.config")
|
|
|
|
return cmd
|
|
}
|