package internal import ( "embed" "fmt" "io" "io/fs" "oc-k8s/utils" "os" "path" "path/filepath" ) func Help_Func() { fmt.Println(` Main commands: oc-k8s install - Install opencloud dependancies [arch] [version] start - Start opencloud k8s stop - Stop opencloud k8s Usage: oc-k8s install [arch] [version] arch - Arch of OS (required) kind_version - version of kind (required) oc-k8s start [env_folder] [release] [namespace] [branch] [target] [hostname] env_folder - Helm config folder (required, default: .) release - environnement selected (default: dev) namespace - namespace selected (default: dev) branch - Git branch to build (default: main) target - make target (default: all) oc-k8s stop [env_folder] [release] [namespace] env_folder - Helm config folder (required, default: .) release - environnement selected (default: dev) namespace - namespace selected (default: dev)`) Help_Cluster() Help_Service() Help_Helm() Help_Values() Help_K3S() Help_Kind() Help_DB() } func Start(args ...string) error { utils.Exec("sudo sysctl -w fs.inotify.max_user_instances=256") utils.Exec("sudo /etc/init.d/apache2 stop") utils.Exec("sudo nginx -s stop") Create_Cluster(args...) Create_Service(args...) Create_Helm(args...) return nil } func Stop(args ...string) error { Delete_Helm(args...) Delete_Cluster(args...) return nil } func Install_Func(args ...string) error { Install_K3S() Install_Kind(args...) Install_Helm() return nil } func ExtractTrees(src, dst string) error { for i, fs := range utils.FSS { fmt.Printf("\rExtract temporary Charts: %d/11", i) if err := ExtractTree(fs, "assets", dst); err != nil { continue } } fmt.Print("\n") return nil } func ExtractTree(FS embed.FS, src, dst string) error { seen := map[string]bool{} if err := os.MkdirAll(dst, 0755); err != nil { return err } entries, err := fs.ReadDir(FS, src) if err != nil { return err // src may not exist in this FS } for _, e := range entries { srcPath := path.Join(src, e.Name()) dstPath := filepath.Join(dst, e.Name()) if seen[dstPath] { continue // already copied } if e.IsDir() { if err := ExtractTree(FS, srcPath, dstPath); err != nil { continue } continue } in, err := FS.Open(srcPath) if err != nil { continue } out, err := os.Create(dstPath) if err != nil { in.Close() continue } if _, err := io.Copy(out, in); err != nil { in.Close() out.Close() continue } in.Close() out.Close() seen[dstPath] = true } return nil }