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
|
Kind (https://kind.sigs.k8s.io/) is used here as a lightweight kubernetes deployment. Obviously, any kubenetes compliant
|
||||||
environment is a legitimate target.
|
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
|
# Locally built microservices deployment procedure
|
||||||
|
|
||||||
## Install OC-K8S
|
## Install OC-K8S
|
||||||
@@ -16,20 +25,6 @@ sudo cp oc-k8s.sh /usr/bin/oc-k8s
|
|||||||
sudo chmod +x /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)
|
# Generate values (optionnal)
|
||||||
|
|
||||||
Use command :
|
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")
|
branch := flag.String("b", "main", "Git branch/version of a OC build")
|
||||||
target := flag.String("y", "all", "Makefile build up mode")
|
target := flag.String("y", "all", "Makefile build up mode")
|
||||||
dbName := flag.String("d", "opencloud", "DBName in use")
|
dbName := flag.String("d", "opencloud", "DBName in use")
|
||||||
arch := flag.String("a", "linux-amd64", "Arch expected")
|
arch := flag.String("a", "amd64", "Arch expected")
|
||||||
version := flag.String("v", "v0.30.0", "version of arch")
|
version := flag.String("v", "v0.31.0", "version of arch")
|
||||||
confFile := flag.String("c", "", "Configuration files to map")
|
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]) {
|
if len(os.Args) > 2 && slices.Contains([]string{"start", "help", "stop"}, os.Args[1]) {
|
||||||
flag.CommandLine.Parse(os.Args[2:])
|
flag.CommandLine.Parse(os.Args[2:])
|
||||||
@@ -131,7 +133,7 @@ func action() error {
|
|||||||
case "cluster":
|
case "cluster":
|
||||||
return internal.Create_Cluster(*folder, *release)
|
return internal.Create_Cluster(*folder, *release)
|
||||||
case "db":
|
case "db":
|
||||||
return internal.Create_DB(folder, *release, *namespace, *dbName)
|
return internal.Create_DB(folder, *release, *namespace, *dbName, *mUsr, *mPwd)
|
||||||
case "services":
|
case "services":
|
||||||
return internal.Create_Service(*folder, *release, *branch, *target)
|
return internal.Create_Service(*folder, *release, *branch, *target)
|
||||||
case "values":
|
case "values":
|
||||||
@@ -150,7 +152,7 @@ func action() error {
|
|||||||
case "cluster":
|
case "cluster":
|
||||||
return internal.Delete_Cluster(*folder, *release)
|
return internal.Delete_Cluster(*folder, *release)
|
||||||
case "db":
|
case "db":
|
||||||
return internal.Delete_DB(*release, *namespace, *dbName)
|
return internal.Delete_DB(*release, *namespace, *dbName, *mUsr, *mPwd)
|
||||||
default:
|
default:
|
||||||
internal.Help_Func()
|
internal.Help_Func()
|
||||||
}
|
}
|
||||||
@@ -163,7 +165,7 @@ func action() error {
|
|||||||
case "helm":
|
case "helm":
|
||||||
return internal.Upgrade_Helm(*folder, *release, *namespace)
|
return internal.Upgrade_Helm(*folder, *release, *namespace)
|
||||||
case "db":
|
case "db":
|
||||||
return internal.Upgrade_DB(folder, *release, *namespace, *dbName)
|
return internal.Upgrade_DB(folder, *release, *namespace, *dbName, *mUsr, *mPwd)
|
||||||
default:
|
default:
|
||||||
internal.Help_Func()
|
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 + `
|
name: ` + clusterName + `
|
||||||
nodes:
|
nodes:
|
||||||
- role: control-plane
|
- role: control-plane
|
||||||
|
image: kindest/node:v1.35.0
|
||||||
kubeadmConfigPatches:
|
kubeadmConfigPatches:
|
||||||
- |
|
- |
|
||||||
kind: InitConfiguration
|
kind: InitConfiguration
|
||||||
@@ -72,14 +73,13 @@ nodes:
|
|||||||
- containerPort: ` + containerPort + `
|
- containerPort: ` + containerPort + `
|
||||||
hostPort: ` + port + `
|
hostPort: ` + port + `
|
||||||
protocol: TCP
|
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"]
|
|
||||||
`
|
`
|
||||||
|
utils.Exec(`docker exec -it oc-control-plane bash -c 'mkdir -p /etc/containerd && cat <<EOF >/etc/containerd/config.toml
|
||||||
cmd := exec.Command("kind", "create", "cluster", "--name", clusterName, "--config=-")
|
[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.Stdin = bytes.NewBufferString(kindConfig)
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import (
|
|||||||
"oc-k8s/utils"
|
"oc-k8s/utils"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
"bytes"
|
||||||
|
"os/exec"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Help_DB() {
|
func Help_DB() {
|
||||||
@@ -36,9 +38,12 @@ Usage:
|
|||||||
oc-k8s help db `)
|
oc-k8s help db `)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Delete_DB(release string, namespace string, dbName string) error {
|
func Delete_DB(release string, namespace string, dbName string, adminUsr string, adminPsw string) error {
|
||||||
podName := "$(kubectl get pods -n " + namespace + " -o=name | grep " + release + "-mongodb-* | sed 's|pod/||')"
|
podName, err := getMongoPod(namespace)
|
||||||
return utils.Exec("kubectl exec " + podName + ": -- mongosh --eval \"db.getSiblingDB('" + dbName + "').dropDatabase()\"")
|
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 {
|
func getFileNames(folderPath string) []string {
|
||||||
@@ -56,25 +61,40 @@ func getFileNames(folderPath string) []string {
|
|||||||
return fileNames
|
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 {
|
if filePath == nil {
|
||||||
return errors.New("missing db datas file path")
|
return errors.New("missing db datas file path")
|
||||||
}
|
}
|
||||||
podName := "$(kubectl get pods -n " + namespace + " -o jsonpath='{.items[0].metadata.name}')"
|
podName, err := getMongoPod(namespace)
|
||||||
for _, fileName := range getFileNames(*filePath) {
|
if err != nil {
|
||||||
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 {
|
|
||||||
return err
|
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 {
|
for _, fileName := range getFileNames(*filePath) {
|
||||||
|
fmt.Println("ADD file " + fileName + " in collection")
|
||||||
|
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
|
||||||
|
}
|
||||||
|
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 err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Upgrade_DB(filePath *string, release string, namespace string, dbName string) error {
|
func getMongoPod(namespace string) (string, error) {
|
||||||
Delete_DB(release, namespace, dbName)
|
cmd := exec.Command("bash", "-c", "kubectl get pods -n "+namespace+" --no-headers -o custom-columns=\":metadata.name\" | grep mongodb | head -n 1")
|
||||||
return Create_DB(filePath, release, namespace, dbName)
|
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 {
|
func Start(folder string, release string, namespace string, branch string, target string) error {
|
||||||
Stop(folder, release, namespace)
|
Stop(folder, release, namespace)
|
||||||
Create_K3S()
|
if err := Create_K3S(); err != nil {
|
||||||
Create_Cluster(folder, release)
|
return err
|
||||||
Create_Service(folder, release, branch, target)
|
}
|
||||||
Create_Helm(folder, release, namespace)
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,11 +52,8 @@ func Create_Helm(folder string, release string, namespace string) error {
|
|||||||
}
|
}
|
||||||
ExtractTrees("assets", tmp)
|
ExtractTrees("assets", tmp)
|
||||||
|
|
||||||
clusterName := "opencloud"
|
|
||||||
|
|
||||||
host := "beta.opencloud.com"
|
host := "beta.opencloud.com"
|
||||||
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
|
if b, err := os.ReadFile(folder + "/" + release + "-values.yaml"); err == nil {
|
||||||
clusterName, _ = utils.Extract(string(b), "clusterName")
|
|
||||||
host, _ = utils.Extract(string(b), "host")
|
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 {
|
if err := utils.Exec("helm upgrade --install " + release + " " + tmp + " -n " + namespace + " --create-namespace -f " + folder + "/" + release + "-values.yaml --debug"); err != nil {
|
||||||
return err
|
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 rm -rf " + tmp)
|
||||||
|
utils.Exec("sudo sed -i.bak \"\n/[[:space:]]" + host + "$/d\" /etc/hosts")
|
||||||
utils.Exec("sudo sed -i.bak \"/[[:space:]]" + host + "$/d\" /etc/hosts")
|
utils.Exec("echo \"\n127.0.0.1 " + host + "\" | sudo tee -a /etc/hosts > /dev/null")
|
||||||
utils.Exec("echo \"$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type==\"InternalIP\")].address}') " + host + "\" | sudo tee -a /etc/hosts > /dev/null")
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ Usage:
|
|||||||
func Install_K3S() error {
|
func Install_K3S() error {
|
||||||
utils.Exec("sudo /usr/local/bin/k3s-uninstall.sh")
|
utils.Exec("sudo /usr/local/bin/k3s-uninstall.sh")
|
||||||
utils.Exec("sudo rm -rf /etc/rancher /var/lib/rancher")
|
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 {
|
if err := utils.Exec("curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,13 +13,19 @@ Kind commands: oc-k8s <action> kind
|
|||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
oc-k8s install kind -a [arch] -v [version]
|
oc-k8s install kind -a [arch] -v [version]
|
||||||
arch - Arch of OS (required)
|
arch - Arch of OS (required, default: amd64)
|
||||||
kind_version - version of kind (required)
|
kind_version - version of kind (optionnal)
|
||||||
oc-k8s help values `)
|
oc-k8s help values `)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Install_Kind(arch string, version string) error {
|
func Install_Kind(arch string, version string) error {
|
||||||
utils.Exec("curl -Lo kind-linux-amd64 https://kind.sigs.k8s.io/dl/" + version + "/kind-" + arch)
|
if version == "" {
|
||||||
//utils.Exec("sudo rm -f kind-" + arch)
|
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
|
return nil
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ func Create_Service(folder string, release string, branch string, target string)
|
|||||||
hostname, _ = utils.Extract(string(b), "host")
|
hostname, _ = utils.Extract(string(b), "host")
|
||||||
scheme, _ = utils.Extract(string(b), "scheme")
|
scheme, _ = utils.Extract(string(b), "scheme")
|
||||||
clusterName, _ = utils.Extract(string(b), "clusterName")
|
clusterName, _ = utils.Extract(string(b), "clusterName")
|
||||||
pport, _ = utils.Extract(string(b), "port")
|
pport, _ = utils.Extract(string(b), "hostPort")
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, repo := range REPOS {
|
for _, repo := range REPOS {
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ data:
|
|||||||
"PEER_HOST": "peers",
|
"PEER_HOST": "peers",
|
||||||
"DATACENTER_HOST": "datacenter",
|
"DATACENTER_HOST": "datacenter",
|
||||||
"COLLABORATIVE_AREA_HOST": "shared",
|
"COLLABORATIVE_AREA_HOST": "shared",
|
||||||
"HOST": "{{ .Values.scheme }}://{{ .Values.host }}:{{ .Values.port }}",
|
"HOST": "{{ .Values.scheme }}://{{ .Values.host }}:{{ .Values.hostPort }}",
|
||||||
}
|
}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
Reference in New Issue
Block a user