1
0
mirror of https://github.com/rancher/os.git synced 2025-09-01 14:48:55 +00:00
Files
os/pkg/install/ask.go

136 lines
2.7 KiB
Go
Raw Normal View History

2021-08-31 11:14:03 -07:00
package install
import (
"os/exec"
"strings"
"github.com/rancher/os/pkg/config"
"github.com/rancher/os/pkg/questions"
"github.com/rancher/os/pkg/util"
)
func Ask(cfg *config.Config) error {
if err := AskInstallDevice(cfg); err != nil {
return err
}
if err := AskConfigURL(cfg); err != nil {
return err
}
2021-10-13 16:00:29 -07:00
if cfg.RancherOS.Install.ConfigURL == "" {
2021-08-31 11:14:03 -07:00
if err := AskGithub(cfg); err != nil {
return err
}
if err := AskPassword(cfg); err != nil {
return err
}
}
return nil
}
func AskInstallDevice(cfg *config.Config) error {
2021-10-13 16:00:29 -07:00
if cfg.RancherOS.Install.Device != "" {
2021-08-31 11:14:03 -07:00
return nil
}
output, err := exec.Command("/bin/sh", "-c", "lsblk -r -o NAME,TYPE | grep -w disk | grep -v fd0 | awk '{print $1}'").CombinedOutput()
if err != nil {
return err
}
fields := strings.Fields(string(output))
i, err := questions.PromptFormattedOptions("Installation target. Device will be formatted", -1, fields...)
if err != nil {
return err
}
2021-10-13 16:00:29 -07:00
cfg.RancherOS.Install.Device = "/dev/" + fields[i]
2021-08-31 11:14:03 -07:00
return nil
}
2021-10-13 16:00:29 -07:00
func isServer(cfg *config.Config) (bool, bool, error) {
opts := []string{"server", "agent", "none"}
2021-08-31 11:14:03 -07:00
i, err := questions.PromptFormattedOptions("Run as server or agent?", 0, opts...)
if err != nil {
2021-10-13 16:00:29 -07:00
return false, false, err
2021-08-31 11:14:03 -07:00
}
2021-10-13 16:00:29 -07:00
return i == 0, i == 1, nil
2021-08-31 11:14:03 -07:00
}
func AskPassword(cfg *config.Config) error {
2021-10-13 16:00:29 -07:00
if cfg.RancherOS.Install.Silent || cfg.RancherOS.Install.Password != "" {
2021-08-31 11:14:03 -07:00
return nil
}
var (
ok = false
err error
pass string
)
for !ok {
pass, ok, err = util.PromptPassword()
if err != nil {
return err
}
}
if pass != "" {
pass, err = util.GetEncryptedPasswd(pass)
if err != nil {
return err
}
}
2021-10-13 16:00:29 -07:00
cfg.RancherOS.Install.Password = pass
2021-08-31 11:14:03 -07:00
return nil
}
func AskGithub(cfg *config.Config) error {
2021-10-13 16:00:29 -07:00
if len(cfg.SSHAuthorizedKeys) > 0 || cfg.RancherOS.Install.Password != "" || cfg.RancherOS.Install.Silent {
2021-08-31 11:14:03 -07:00
return nil
}
ok, err := questions.PromptBool("Authorize GitHub users to root SSH?", false)
if !ok || err != nil {
return err
}
str, err := questions.Prompt("Comma separated list of GitHub users to authorize: ", "")
if err != nil {
return err
}
for _, s := range strings.Split(str, ",") {
cfg.SSHAuthorizedKeys = append(cfg.SSHAuthorizedKeys, "github:"+strings.TrimSpace(s))
}
return nil
}
func AskConfigURL(cfg *config.Config) error {
2021-10-13 16:00:29 -07:00
if cfg.RancherOS.Install.ConfigURL != "" || cfg.RancherOS.Install.Silent {
2021-08-31 11:14:03 -07:00
return nil
}
2021-10-02 22:27:31 -07:00
ok, err := questions.PromptBool("Configure system using an cloud-config file?", false)
2021-08-31 11:14:03 -07:00
if err != nil {
return err
}
if !ok {
return nil
}
2021-10-02 22:27:31 -07:00
str, err := questions.Prompt("cloud-config file location (file path or http URL): ", "")
2021-08-31 11:14:03 -07:00
if err != nil {
return err
}
2021-10-13 16:00:29 -07:00
cfg.RancherOS.Install.ConfigURL = str
2021-08-31 11:14:03 -07:00
return nil
}