51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package util
|
|
|
|
import (
|
|
"fmt"
|
|
"syscall"
|
|
|
|
"github.com/manifoldco/promptui"
|
|
"github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1"
|
|
"github.com/warewulf/warewulf/internal/pkg/node"
|
|
"github.com/warewulf/warewulf/internal/pkg/wwlog"
|
|
)
|
|
|
|
// ConfirmationPrompt prompt is a blocking confirmation prompt.
|
|
// Returns true on y or yes user input.
|
|
func ConfirmationPrompt(label string) (yes bool) {
|
|
|
|
prompt := promptui.Prompt{
|
|
Label: label,
|
|
IsConfirm: true,
|
|
}
|
|
|
|
result, _ := prompt.Run()
|
|
if result == "y" || result == "yes" {
|
|
yes = true
|
|
}
|
|
return
|
|
}
|
|
|
|
/*
|
|
Simple check if the config can be written in case wwctl isn't run as root
|
|
*/
|
|
func CanWriteConfig() (canwrite *wwapiv1.CanWriteConfig, err error) {
|
|
canwrite = new(wwapiv1.CanWriteConfig)
|
|
// node is not initialized yet
|
|
if node.ConfigFile == "" {
|
|
_, err := node.New()
|
|
if err != nil {
|
|
canwrite.CanWriteConfig = false
|
|
return canwrite, fmt.Errorf("unable to initialize the node %w", err)
|
|
}
|
|
}
|
|
err = syscall.Access(node.ConfigFile, syscall.O_RDWR)
|
|
if err != nil {
|
|
wwlog.Warn("Couldn't open %s:%s", node.ConfigFile, err)
|
|
canwrite.CanWriteConfig = false
|
|
} else {
|
|
canwrite.CanWriteConfig = true
|
|
}
|
|
return canwrite, err
|
|
}
|