1
0
mirror of https://github.com/rancher/os.git synced 2025-08-30 12:31:24 +00:00
os/pkg/install/install.go

114 lines
2.3 KiB
Go
Raw Normal View History

2021-08-31 18:14:03 +00:00
package install
import (
2021-10-13 23:00:29 +00:00
"fmt"
2021-08-31 18:14:03 +00:00
"io/ioutil"
"os"
"os/exec"
"github.com/rancher/os/pkg/config"
"github.com/rancher/os/pkg/questions"
"sigs.k8s.io/yaml"
)
2021-10-13 23:00:29 +00:00
func Run(automatic bool, configFile string) error {
cfg, err := config.ReadConfig(configFile)
2021-08-31 18:14:03 +00:00
if err != nil {
return err
}
2021-10-13 23:00:29 +00:00
if automatic && !cfg.RancherOS.Install.Automatic {
2021-08-31 18:14:03 +00:00
return nil
} else if automatic {
2021-10-13 23:00:29 +00:00
cfg.RancherOS.Install.Silent = true
2021-08-31 18:14:03 +00:00
}
err = Ask(&cfg)
if err != nil {
return err
}
2021-10-03 05:27:31 +00:00
tempFile, err := ioutil.TempFile("", "ros-install")
2021-08-31 18:14:03 +00:00
if err != nil {
return err
}
if err := tempFile.Close(); err != nil {
return err
}
return runInstall(cfg, tempFile.Name())
}
func runInstall(cfg config.Config, output string) error {
installBytes, err := config.PrintInstall(cfg)
if err != nil {
return err
}
2021-10-13 23:00:29 +00:00
if !cfg.RancherOS.Install.Silent {
2021-08-31 18:14:03 +00:00
val, err := questions.PromptBool("\nConfiguration\n"+"-------------\n\n"+
string(installBytes)+
"\nYour disk will be formatted and installed with the above configuration.\nContinue?", false)
if err != nil || !val {
return err
}
}
2021-10-13 23:00:29 +00:00
if cfg.RancherOS.Install.ConfigURL == "" && !cfg.RancherOS.Install.Silent {
yip := config.YipConfig{}
if cfg.RancherOS.Install.Password != "" || len(cfg.SSHAuthorizedKeys) > 0 {
2021-08-31 18:14:03 +00:00
yip.Stages = map[string][]config.Stage{
2021-10-03 05:27:31 +00:00
"network": {{
2021-08-31 18:14:03 +00:00
Users: map[string]config.User{
"root": {
Name: "root",
2021-10-13 23:00:29 +00:00
PasswordHash: cfg.RancherOS.Install.Password,
2021-08-31 18:14:03 +00:00
SSHAuthorizedKeys: cfg.SSHAuthorizedKeys,
},
}},
}}
2021-10-13 23:00:29 +00:00
cfg.RancherOS.Install.Password = ""
2021-08-31 18:14:03 +00:00
}
data, err := yaml.Marshal(yip)
if err != nil {
return err
}
if err := ioutil.WriteFile(output+".yip", data, 0600); err != nil {
return err
}
2021-10-13 23:00:29 +00:00
cfg.RancherOS.Install.ConfigURL = output + ".yip"
2021-08-31 18:14:03 +00:00
}
ev, err := config.ToEnv(cfg)
if err != nil {
return err
}
2021-10-13 23:00:29 +00:00
printEnv(cfg)
2021-08-31 18:14:03 +00:00
cmd := exec.Command("cos-installer")
cmd.Env = append(os.Environ(), ev...)
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
return cmd.Run()
}
2021-10-13 23:00:29 +00:00
func printEnv(cfg config.Config) {
if cfg.RancherOS.Install.Password != "" {
cfg.RancherOS.Install.Password = "<removed>"
}
ev2, err := config.ToEnv(cfg)
if err != nil {
return
}
fmt.Println("Install environment:")
for _, ev := range ev2 {
fmt.Println(ev)
}
}