From 9751a602cc8f51c1f99def29d890cb71359275aa Mon Sep 17 00:00:00 2001 From: rony5394 <143897221+rony5394@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:39:57 +0100 Subject: [PATCH] Something. --- .gitignore | 1 + docker/docker.go | 12 +++++++++++ docker/prepare.go | 6 ++---- docker/scale.go | 2 ++ helper.Dockerfile | 4 ++++ host/host.go | 53 ++++++++++++++++++++++++++++++++++++++++------- 6 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 helper.Dockerfile diff --git a/.gitignore b/.gitignore index a2c77fb..96906dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ ssh-key ssh-key.pub +ssk-key.tar diff --git a/docker/docker.go b/docker/docker.go index 1e4bdb5..703aba3 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -13,6 +13,7 @@ import ( "net/http" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/client" ) @@ -53,6 +54,16 @@ func Run(){ http.HandleFunc("/services", listServices); http.HandleFunc("/prepare", prepare); http.HandleFunc("/cleanup", cleanup); + + ApiClient.NetworkCreate(context.Background(), "blazenaPohar", network.CreateOptions{ + Attachable: true, + // Internal: true, + Driver: "overlay", + Labels: map[string]string{ + "blazena.pohar": "true", + }, + }); + go func(){ err = server.ListenAndServe(); if err == http.ErrServerClosed { @@ -69,6 +80,7 @@ func Run(){ <-ctx.Done(); fmt.Println("Stopping http server."); server.Close(); + ApiClient.NetworkRemove(context.Background(), "blazenaPohar"); fmt.Println("Exiting!"); } diff --git a/docker/prepare.go b/docker/prepare.go index 8b919aa..2060f8e 100644 --- a/docker/prepare.go +++ b/docker/prepare.go @@ -51,9 +51,7 @@ func prepare(w http.ResponseWriter, r *http.Request){ maxConcurrent := uint64(1); totalCompletions := uint64(1); targetNode := labels["blazena.node"]; - helperCommand := `apk add openssh rsync && \ - ssh-keygen -t ed25519 -f /host_key && \ - mkdir -p /root/.ssh/ && \ + helperCommand := `ssh-keygen -t ed25519 -f /host_key && \ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByYbl8vu946LPycSO5pBohq3vMvvl+wX7snu1Bqpd7p test" > /root/.ssh/authorized_keys && \ /usr/sbin/sshd -h /host_key -p 22 -D`; @@ -70,7 +68,7 @@ func prepare(w http.ResponseWriter, r *http.Request){ }, TaskTemplate: swarm.TaskSpec{ ContainerSpec: &swarm.ContainerSpec{ - Image: "docker.io/library/alpine:latest", + Image: "registry.lan.ronycloud.dev/blazena/helper:latest", Command: []string{"sh", "-c", helperCommand}, Mounts: []mount.Mount{ mount.Mount{ diff --git a/docker/scale.go b/docker/scale.go index 92296c4..51c4156 100644 --- a/docker/scale.go +++ b/docker/scale.go @@ -18,6 +18,7 @@ func scaleDown(serviceId string){ newScale := uint64(0); updatedSpec.Mode.Replicated.Replicas = &newScale; + updatedSpec.Labels["blazena.scaledDown"] = "true"; scale.Store(serviceId, *originalScale); @@ -46,6 +47,7 @@ func scaleUp(serviceId string){ updatedSpec := inspectresoult.Spec; updatedSpec.Mode.Replicated.Replicas = &originalScaleChecked; + delete(updatedSpec.Labels, "blazena.scaledDown"); ApiClient.ServiceUpdate(context.Background(), serviceId, inspectresoult.Version, updatedSpec, swarm.ServiceUpdateOptions{}); } diff --git a/helper.Dockerfile b/helper.Dockerfile new file mode 100644 index 0000000..0fbab05 --- /dev/null +++ b/helper.Dockerfile @@ -0,0 +1,4 @@ +FROM alpine:3 + +RUN mkdir -p /root/.ssh/ +RUN apk add openssh rsync --no-cache diff --git a/host/host.go b/host/host.go index cc6be9e..c0e76a2 100644 --- a/host/host.go +++ b/host/host.go @@ -7,6 +7,7 @@ import ( "fmt" "io" "net/http" + "os" "time" "github.com/docker/docker/api/types/container" @@ -46,16 +47,37 @@ func Run(Config cfg.Config) { fmt.Println("Preparing: " + service.ServiceId + " volume: " + volume); if !prepareService(Config, service, volume) {continue} fmt.Println("Done!"); - time.Sleep(5*time.Second); - fmt.Println("Cleaning Up: " + service.ServiceId + " volume: " + volume); + + command := `apk add --no-cache rsync openssh-client && \ + echo "It Works Under Water!"`; + //rsync -avz --delete -e "ssh -i /ssh-key -p 2222 -o StrictHostKeyChecking=no" \ + //root@`+Config.Nodes[service.Node].Ip+`:/volume/ /tmp` + + + time.Sleep(15*time.Second); + exec, err := DockerClient.ContainerExecCreate(context.Background(), "BlazenaStorage", container.ExecOptions{ + Cmd: []string{"sh", "-c", command}, + AttachStdout: true, + AttachStderr: true, + Tty: false, + }); + if err != nil { + panic("Failed to create rsync exec!"+err.Error()); + } + + + resp, err := DockerClient.ContainerExecAttach(context.Background(), exec.ID, container.ExecStartOptions{}); + defer resp.Close(); + + io.Copy(os.Stdout, resp.Reader) + + fmt.Println("Cleaning Up: " + service.ServiceId); cleanupService(Config, service); fmt.Println("Done!"); - - } } - + time.Sleep(15*time.Second); DockerClient.ContainerRemove(context.Background(), "BlazenaStorage", container.RemoveOptions{ Force: true, }); @@ -169,7 +191,7 @@ func createStorageContainer(Config cfg.Config, DockerClient *client.Client){ Labels: map[string]string{ "blazena.storage": "true", }, - Cmd: strslice.StrSlice{"sleep", "infinity"}, + Cmd: strslice.StrSlice{"sleep", "1h"}, }, &container.HostConfig{ Mounts: []mount.Mount{ mount.Mount{ @@ -180,7 +202,7 @@ func createStorageContainer(Config cfg.Config, DockerClient *client.Client){ }, }, //AutoRemove: true, - NetworkMode: "blazena", + NetworkMode: "blazenaPohar", }, &network.NetworkingConfig{ }, &v1.Platform{}, "BlazenaStorage"); @@ -194,4 +216,21 @@ func createStorageContainer(Config cfg.Config, DockerClient *client.Client){ panic("Failed to start BlazenaStorage container!"+err.Error()); } + + reader, err := os.Open("./ssh-key.tar"); + + if err != nil { + panic("Failed To open ssh key file for reading!"+err.Error()); + } + + defer reader.Close(); + + err = DockerClient.CopyToContainer(context.Background(), "BlazenaStorage", "/", reader, container.CopyToContainerOptions{ + AllowOverwriteDirWithFile: true, + }); + if err != nil { + panic("Failed to copy ssh key to container!"+err.Error()); + } + + }