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 -a [arch] -v [version] arch - Arch of OS (required) kind_version - version of kind (required) oc-k8s start -n [namespace] -r [release] -f [folder] -b [branch] -t [target] -p [port] -P [portTLS] 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 -n [namespace] -r [release] -f [folder] 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(folder string, release string, namespace string, branch string, target string) error { Stop(folder, release, namespace) Create_K3S() Create_Cluster(folder, release) Create_Service(folder, release, branch, target) Create_Helm(folder, release, namespace) return nil } func Stop(folder string, release string, namespace string) error { Delete_Helm(release, namespace) Delete_Cluster(folder, release) return nil } func Install_Func(arch string, version string) error { Install_K3S() Install_Kind(arch, version) 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 }