package main import ( "flag" "fmt" "oc-k8s/internal" "os" "slices" ) func main() { defer func() { if r := recover(); r != nil { } }() if len(os.Args) < 2 { internal.Help_Func() fmt.Println("Error: Not enough arguments") return } if err := action(); err != nil { if len(os.Args) > 2 && slices.Contains([]string{"start", "help", "stop"}, os.Args[1]) { internal.Help_Func() } else { what := "" if len(os.Args) > 2 { what = os.Args[2] } switch what { case "helm": internal.Help_Helm() case "k3s": internal.Help_K3S() case "kind": internal.Help_Kind() case "cluster": internal.Help_Cluster() case "db": internal.Help_DB() case "services": internal.Help_Service() case "values": internal.Help_Values() default: internal.Help_Func() } flag.CommandLine.Parse(os.Args[3:]) } fmt.Println("ERROR", err) } } func action() error { folder := flag.String("f", ".", "Folder to reach config/datas") release := flag.String("r", "dev", "Release name in run") namespace := flag.String("n", "dev", "Namespace in run") branch := flag.String("b", "main", "Git branch/version of a OC build") target := flag.String("y", "all", "Makefile build up mode") dbName := flag.String("d", "opencloud", "DBName in use") arch := flag.String("a", "linux-amd64", "Arch expected") version := flag.String("v", "v0.30.0", "version of arch") confFile := flag.String("c", "", "Configuration files to map") if len(os.Args) > 2 && slices.Contains([]string{"start", "help", "stop"}, os.Args[1]) { flag.CommandLine.Parse(os.Args[2:]) } else if len(os.Args) > 3 { flag.CommandLine.Parse(os.Args[3:]) } else { flag.Parse() } action := os.Args[1] switch action { case "start": internal.Start(*folder, *release, *namespace, *branch, *target) case "stop": internal.Stop(*folder, *release, *namespace) case "extract": what := os.Args[2] switch what { case "charts": return internal.ExtractTrees("assets", "./opencloud-chart") } case "help": what := "" if len(os.Args) > 2 { what = os.Args[2] } switch what { case "helm": internal.Help_Helm() case "k3s": internal.Help_K3S() case "kind": internal.Help_Kind() case "cluster": internal.Help_Cluster() case "db": internal.Help_DB() case "services": internal.Help_Service() case "values": internal.Help_Values() default: internal.Help_Func() } case "install": what := "" if len(os.Args) > 2 { what = os.Args[2] } switch what { case "helm": return internal.Install_Helm() case "k3s": return internal.Install_K3S() case "kind": return internal.Install_Kind(*arch, *version) default: internal.Install_Func(*arch, *version) } case "create": what := os.Args[2] switch what { case "helm": return internal.Create_Helm(*folder, *release, *namespace) case "cluster": return internal.Create_Cluster(*folder, *release) case "db": return internal.Create_DB(folder, *release, *namespace, *dbName) case "services": return internal.Create_Service(*folder, *release, *branch, *target) case "values": return internal.Create_Values(folder, release, confFile) default: internal.Help_Func() } case "delete": what := "" if len(os.Args) > 2 { what = os.Args[2] } switch what { case "helm": return internal.Delete_Helm(*release, *namespace) case "cluster": return internal.Delete_Cluster(*folder, *release) case "db": return internal.Delete_DB(*release, *namespace, *dbName) default: internal.Help_Func() } case "upgrade": what := "" if len(os.Args) > 2 { what = os.Args[2] } switch what { case "helm": return internal.Upgrade_Helm(*folder, *release, *namespace) case "db": return internal.Upgrade_DB(folder, *release, *namespace, *dbName) default: internal.Help_Func() } default: internal.Help_Func() } return nil }