Files
oc-k8s/internal/func.go
2026-01-08 21:15:34 +01:00

125 lines
2.5 KiB
Go

package internal
import (
"embed"
"fmt"
"io"
"io/fs"
"oc-k8s/utils"
"os"
"path"
"path/filepath"
)
func Help_Func() {
fmt.Println(`
Main commands: oc-k8s <action>
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
}