db import Datas added
This commit is contained in:
23
README.md
23
README.md
@@ -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.
12
cmd/main.go
12
cmd/main.go
@@ -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()
|
||||
}
|
||||
|
||||
BIN
cmd/oc-k8s
BIN
cmd/oc-k8s
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 }}
|
||||
Reference in New Issue
Block a user