db import Datas added

This commit is contained in:
mr
2026-01-21 12:03:02 +01:00
parent 4ff6e706ca
commit 7a8a4f678a
12 changed files with 83 additions and 58 deletions

View File

@@ -6,6 +6,15 @@ or to ease opencloud dependencies (dex, mongo, mongo-express, ...) deployment.
Kind (https://kind.sigs.k8s.io/) is used here as a lightweight kubernetes deployment. Obviously, any kubenetes compliant
environment is a legitimate target.
# Requirements
- go
- docker
- docker buildx
- make
- Rajouter dans le bashrc > export KUBECONFIG=$HOME/.kube/config
# Locally built microservices deployment procedure
## Install OC-K8S
@@ -16,20 +25,6 @@ sudo cp oc-k8s.sh /usr/bin/oc-k8s
sudo chmod +x /usr/bin/oc-k8s
```
## Install kind
Follow instructions here https://kind.sigs.k8s.io/
or
```
go install sigs.k8s.io/kind@v0.30.0 && kind create cluster
```
## Install helm
Download suitable helm client here https://helm.sh/docs/intro/install/
# Generate values (optionnal)
Use command :

Binary file not shown.

View File

@@ -59,9 +59,11 @@ func action() error {
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")
arch := flag.String("a", "amd64", "Arch expected")
version := flag.String("v", "v0.31.0", "version of arch")
confFile := flag.String("c", "", "Configuration files to map")
mUsr := flag.String("m", "admin", "Mongo user")
mPwd := flag.String("M", "admin", "Mongo password")
if len(os.Args) > 2 && slices.Contains([]string{"start", "help", "stop"}, os.Args[1]) {
flag.CommandLine.Parse(os.Args[2:])
@@ -131,7 +133,7 @@ func action() error {
case "cluster":
return internal.Create_Cluster(*folder, *release)
case "db":
return internal.Create_DB(folder, *release, *namespace, *dbName)
return internal.Create_DB(folder, *release, *namespace, *dbName, *mUsr, *mPwd)
case "services":
return internal.Create_Service(*folder, *release, *branch, *target)
case "values":
@@ -150,7 +152,7 @@ func action() error {
case "cluster":
return internal.Delete_Cluster(*folder, *release)
case "db":
return internal.Delete_DB(*release, *namespace, *dbName)
return internal.Delete_DB(*release, *namespace, *dbName, *mUsr, *mPwd)
default:
internal.Help_Func()
}
@@ -163,7 +165,7 @@ func action() error {
case "helm":
return internal.Upgrade_Helm(*folder, *release, *namespace)
case "db":
return internal.Upgrade_DB(folder, *release, *namespace, *dbName)
return internal.Upgrade_DB(folder, *release, *namespace, *dbName, *mUsr, *mPwd)
default:
internal.Help_Func()
}

Binary file not shown.

View File

@@ -62,6 +62,7 @@ apiVersion: kind.x-k8s.io/v1alpha4
name: ` + clusterName + `
nodes:
- role: control-plane
image: kindest/node:v1.35.0
kubeadmConfigPatches:
- |
kind: InitConfiguration
@@ -72,14 +73,13 @@ nodes:
- containerPort: ` + containerPort + `
hostPort: ` + port + `
protocol: TCP
containerdConfigPatches:
- |-
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
`
cmd := exec.Command("kind", "create", "cluster", "--name", clusterName, "--config=-")
utils.Exec(`docker exec -it oc-control-plane bash -c 'mkdir -p /etc/containerd && cat <<EOF >/etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5000"]
endpoint = ["http://dev-docker-registry-ui-registry-server.opencloud.svc.cluster.local:5000"]
EOF
containerd config restart'`)
cmd := exec.Command("kind", "create", "cluster", "--name", clusterName, "--wait", "0", "--config=-")
cmd.Stdin = bytes.NewBufferString(kindConfig)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

View File

@@ -6,6 +6,8 @@ import (
"oc-k8s/utils"
"os"
"strings"
"bytes"
"os/exec"
)
func Help_DB() {
@@ -23,7 +25,7 @@ Usage:
namespace - Namespace values name (default: dev)
db_name - db name (default: opencloud)
folder - Helm config folder (required, default: .)
oc-k8s upgrade db -d [db_name] -r [release] -n [namespace] -f [folder]
oc-k8s upgrade db -d [db_name] -r [release] -n [namespace] -f [folder]
folder - Datas folder files path (required)
release - Release values name (default: dev)
namespace - Namespace values name (default: dev)
@@ -36,9 +38,12 @@ Usage:
oc-k8s help db `)
}
func Delete_DB(release string, namespace string, dbName string) error {
podName := "$(kubectl get pods -n " + namespace + " -o=name | grep " + release + "-mongodb-* | sed 's|pod/||')"
return utils.Exec("kubectl exec " + podName + ": -- mongosh --eval \"db.getSiblingDB('" + dbName + "').dropDatabase()\"")
func Delete_DB(release string, namespace string, dbName string, adminUsr string, adminPsw string) error {
podName, err := getMongoPod(namespace)
if err != nil {
return err
}
return utils.Exec("kubectl exec " + podName + " -- mongosh --eval \"db.getSiblingDB('" + dbName + "').dropDatabase()\" -u " + adminUsr + " -p " + adminPsw +" --authenticationDatabase admin")
}
func getFileNames(folderPath string) []string {
@@ -56,25 +61,40 @@ func getFileNames(folderPath string) []string {
return fileNames
}
func Create_DB(filePath *string, release string, namespace string, dbName string) error {
func Create_DB(filePath *string, release string, namespace string, dbName string, adminUsr string, adminPsw string) error {
if filePath == nil {
return errors.New("missing db datas file path")
}
podName := "$(kubectl get pods -n " + namespace + " -o jsonpath='{.items[0].metadata.name}')"
podName, err := getMongoPod(namespace)
if err != nil {
return err
}
for _, fileName := range getFileNames(*filePath) {
fmt.Println("ADD file " + fileName + " in collection")
fmt.Println("POD=" + podName + " && kubectl cp -n " + namespace + " " + *filePath + "/" + fileName + " \"$POD:/tmp/" + fileName + "\"")
if err := utils.Exec("POD=" + podName + " && kubectl cp -n " + namespace + " " + *filePath + "/" + fileName + " \"$POD:/tmp/" + fileName + "\""); err != nil {
fmt.Println("kubectl cp -n " + namespace + " " + *filePath + "/" + fileName + " \"" + podName + ":/tmp/" + fileName + "\"")
if err := utils.Exec("kubectl cp -n " + namespace + " " + *filePath + "/" + fileName + " \"" + podName + ":/tmp/" + fileName + "\""); err != nil {
return err
}
if err := utils.Exec("POD=" + podName + " && kubectl exec -n " + namespace + " $POD: -- mongoimport --db " + dbName + " --collection " + strings.ReplaceAll(fileName, ".json", "") + " --file /tmp/" + fileName + " --jsonArray"); err != nil {
fmt.Println("kubectl exec -n " + namespace + " " + podName + " -- mongoimport --db " + dbName + " --collection " + strings.ReplaceAll(fileName, ".json", "") + " --file /tmp/" + fileName + " --jsonArray -u " + adminUsr + " -p " + adminPsw +" --authenticationDatabase admin")
if err := utils.Exec("kubectl exec -n " + namespace + " " + podName + " -- mongoimport --db " + dbName + " --collection " + strings.ReplaceAll(fileName, ".json", "") + " --file /tmp/" + fileName + " --jsonArray -u " + adminUsr + " -p " + adminPsw +" --authenticationDatabase admin"); err != nil {
return err
}
}
return nil
}
func Upgrade_DB(filePath *string, release string, namespace string, dbName string) error {
Delete_DB(release, namespace, dbName)
return Create_DB(filePath, release, namespace, dbName)
func getMongoPod(namespace string) (string, error) {
cmd := exec.Command("bash", "-c", "kubectl get pods -n "+namespace+" --no-headers -o custom-columns=\":metadata.name\" | grep mongodb | head -n 1")
var out bytes.Buffer
cmd.Stdout = &out
if err := cmd.Run(); err != nil {
return "", err
}
podName := strings.TrimSpace(out.String()) // remove newline
return podName, nil
}
func Upgrade_DB(filePath *string, release string, namespace string, dbName string, adminUsr string, adminPsw string) error {
Delete_DB(release, namespace, dbName, adminUsr, adminPsw)
return Create_DB(filePath, release, namespace, dbName, adminUsr, adminPsw)
}

View File

@@ -42,10 +42,18 @@ Usage:
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)
if err := Create_K3S(); err != nil {
return err
}
if err := Create_Cluster(folder, release); err != nil {
return err
}
if err := Create_Service(folder, release, branch, target); err != nil {
return err
}
if err := Create_Helm(folder, release, namespace); err != nil {
return err
}
return nil
}

View File

@@ -52,11 +52,8 @@ func Create_Helm(folder string, release string, namespace string) error {
}
ExtractTrees("assets", tmp)
clusterName := "opencloud"
host := "beta.opencloud.com"
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
clusterName, _ = utils.Extract(string(b), "clusterName")
host, _ = utils.Extract(string(b), "host")
}
@@ -89,13 +86,9 @@ func Create_Helm(folder string, release string, namespace string) error {
if err := utils.Exec("helm upgrade --install " + release + " " + tmp + " -n " + namespace + " --create-namespace -f " + folder + "/" + release + "-values.yaml --debug"); err != nil {
return err
}
utils.Exec("kind get kubeconfig --name " + clusterName + " > ./deployed_config")
utils.Exec("kind export logs ./kind-logs")
utils.Exec("sudo rm -rf " + tmp)
utils.Exec("sudo sed -i.bak \"/[[:space:]]" + host + "$/d\" /etc/hosts")
utils.Exec("echo \"$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type==\"InternalIP\")].address}') " + host + "\" | sudo tee -a /etc/hosts > /dev/null")
utils.Exec("sudo sed -i.bak \"\n/[[:space:]]" + host + "$/d\" /etc/hosts")
utils.Exec("echo \"\n127.0.0.1 " + host + "\" | sudo tee -a /etc/hosts > /dev/null")
return nil
}

View File

@@ -21,6 +21,7 @@ Usage:
func Install_K3S() error {
utils.Exec("sudo /usr/local/bin/k3s-uninstall.sh")
utils.Exec("sudo rm -rf /etc/rancher /var/lib/rancher")
utils.Exec("sudo chown $USER:$USER /home/$USER/.kube/config")
if err := utils.Exec("curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644"); err != nil {
return err
}

View File

@@ -13,13 +13,19 @@ Kind commands: oc-k8s <action> kind
Usage:
oc-k8s install kind -a [arch] -v [version]
arch - Arch of OS (required)
kind_version - version of kind (required)
arch - Arch of OS (required, default: amd64)
kind_version - version of kind (optionnal)
oc-k8s help values `)
}
func Install_Kind(arch string, version string) error {
utils.Exec("curl -Lo kind-linux-amd64 https://kind.sigs.k8s.io/dl/" + version + "/kind-" + arch)
//utils.Exec("sudo rm -f kind-" + arch)
if version == "" {
utils.Exec("GOARCH=" + arch +" GOOS=linux go install sigs.k8s.io/kind@latest")
} else {
utils.Exec("curl -Lo kind-linux-amd64 https://kind.sigs.k8s.io/dl/" + version + "/kind-linux-" + arch)
utils.Exec("sudo chmod +x ./kind-linux-" + arch)
utils.Exec("sudo mv ./kind-linux-" + arch + " /usr/local/bin/kind")
}
return nil
}
}

View File

@@ -44,7 +44,7 @@ func Create_Service(folder string, release string, branch string, target string)
hostname, _ = utils.Extract(string(b), "host")
scheme, _ = utils.Extract(string(b), "scheme")
clusterName, _ = utils.Extract(string(b), "clusterName")
pport, _ = utils.Extract(string(b), "port")
pport, _ = utils.Extract(string(b), "hostPort")
}
for _, repo := range REPOS {

View File

@@ -13,6 +13,6 @@ data:
"PEER_HOST": "peers",
"DATACENTER_HOST": "datacenter",
"COLLABORATIVE_AREA_HOST": "shared",
"HOST": "{{ .Values.scheme }}://{{ .Values.host }}:{{ .Values.port }}",
"HOST": "{{ .Values.scheme }}://{{ .Values.host }}:{{ .Values.hostPort }}",
}
{{- end }}