From a1b0029c476c66d6659fa73dcf458d6bd6bad6d4 Mon Sep 17 00:00:00 2001 From: Yusuke Hata Date: Fri, 19 Jul 2024 15:23:31 +0900 Subject: [PATCH] add flatcar command --- distro.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/distro.go b/distro.go index a680761..f2aae5f 100644 --- a/distro.go +++ b/distro.go @@ -50,7 +50,8 @@ func getOS() string { // return an operating-system specific user management command to run func getOSCommands(flavour string) distroCommands { - switch strings.ToLower(flavour) { + f := strings.ToLower(flavour) + switch f { case "centos:7", "centos:7.4", "centos:7.5", "centos:7.6": return distroCommands{ addUser: func(username string, home string) ([]byte, error) { @@ -135,8 +136,51 @@ func getOSCommands(flavour string) distroCommands { return exec.Command(args[0], args[1:]...).CombinedOutput() }, } + } + + switch { + case strings.HasPrefix(f, "flatcar"), strings.HasPrefix(f, "flatcar:3510.3"): + return distroCommands{ + addUser: func(username string, home string) ([]byte, error) { + args := []string{"useradd", "-m", "--home-dir", home, username} + return exec.Command(args[0], args[1:]...).CombinedOutput() + }, + delUser: func(username string) ([]byte, error) { + pgrep := []string{"pgrep", "-l", "-u", username} + if processlist, _ := exec.Command(pgrep[0], pgrep[1:]...).CombinedOutput(); strings.TrimSpace(string(processlist)) != "" { + log.Printf("Found %s processes: %s", username, strings.TrimSpace(strings.Replace(string(processlist), "\n", " ", -1))) + pkill := []string{"pkill", "--signal", "9", "-e", "-u", username} + out, _ := exec.Command(pkill[0], pkill[1:]...).CombinedOutput() + if strings.TrimSpace(string(out)) != "" { + log.Printf("Killed %s processes: %s", username, strings.TrimSpace(strings.Replace(string(out), "\n", " ", -1))) + } + } + args := []string{"userdel", "--remove", "-f", username} + return exec.Command(args[0], args[1:]...).CombinedOutput() + }, + changeShell: func(username string, shell string) ([]byte, error) { + args := []string{"usermod", "--shell", shell, username} + return exec.Command(args[0], args[1:]...).CombinedOutput() + }, + changePassword: func(username string, password string) ([]byte, error) { + args := []string{"usermod", "--password", password, username} + return exec.Command(args[0], args[1:]...).CombinedOutput() + }, + changeHomeDir: func(username string, home string) ([]byte, error) { + args := []string{"usermod", "--move-home", "--home", home, username} + return exec.Command(args[0], args[1:]...).CombinedOutput() + }, + changeGroups: func(username string, groups string) ([]byte, error) { + args := []string{"usermod", "--groups", groups, username} + return exec.Command(args[0], args[1:]...).CombinedOutput() + }, + changeComment: func(username string, comment string) ([]byte, error) { + args := []string{"usermod", "--comment", comment, username} + return exec.Command(args[0], args[1:]...).CombinedOutput() + }, + } default: - log.Fatalf("No config for operating system: %s", flavour) + log.Fatalf("No config for operating system: %s", f) } return distroCommands{} }