Skip to content

Commit

Permalink
backup only mode gencode added
Browse files Browse the repository at this point in the history
  • Loading branch information
WoodProgrammer committed May 24, 2023
1 parent 52e5999 commit 0f58937
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 16 deletions.
Binary file added src/backup.bin
Binary file not shown.
8 changes: 4 additions & 4 deletions src/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ func getBackup(namespace string, clientset *kubernetes.Clientset) []HelmRelease
for _, item := range secrets.Items {

r := HelmRelease{
status: item.ObjectMeta.Labels["status"],
version: item.ObjectMeta.Labels["version"],
content: string(item.Data["release"]),
name: item.ObjectMeta.Labels["name"],
Status: item.ObjectMeta.Labels["status"],
Version: item.ObjectMeta.Labels["version"],
Content: string(item.Data["release"]),
Name: item.ObjectMeta.Labels["name"],
}
releaseMap = append(releaseMap, r)
}
Expand Down
60 changes: 60 additions & 0 deletions src/binary.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package main

import (
"bufio"
"bytes"
"encoding/gob"
"fmt"
"log"
"os"
)

func dump(filename string, value []HelmRelease) {
file, _ := os.Create(filename)

enc := gob.NewEncoder(file)

if err := enc.Encode(value); err != nil {
log.Fatal(err)
}
}

func encodedBackup(filename string) []byte {
file, err := os.Open(filename)

if err != nil {
fmt.Println(err)
}
defer file.Close()

stats, statsErr := file.Stat()
if statsErr != nil {
fmt.Println(statsErr)
}

var size int64 = stats.Size()
bytes := make([]byte, size)

bufr := bufio.NewReader(file)
_, err = bufr.Read(bytes)

return bytes
}

func decodeFromBackup(filename string) error {

data := encodedBackup(filename)

buf := bytes.NewBuffer(data)
dec := gob.NewDecoder(buf)

m := []HelmRelease{}

if err := dec.Decode(&m); err != nil {
log.Fatal(err)
return err
}

return nil

}
24 changes: 21 additions & 3 deletions src/cli.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package main

import (
"fmt"
"os"
"time"

"github.com/spf13/cobra"
)
Expand All @@ -25,23 +27,38 @@ var mode = &cobra.Command{
targetCluster, _ := cmd.Flags().GetString("targetcluster")
sourceCluster, _ := cmd.Flags().GetString("sourcecluster")
targetNs, _ := cmd.Flags().GetString("ns")
rollback, _ := cmd.Flags().GetBool("rollback")

WarningLogger.Println("Source cluster is :: ", sourceCluster)
WarningLogger.Println("Target cluster is ::", targetCluster)
WarningLogger.Println("Source namespace is ::", targetNs)
sourceClusterclientset := configHandler(sourceCluster)

if args[0] == "backup" {
WarningLogger.Println("Running only backup mode.. Extracting files under this directory...")
backup := getBackup(targetNs, sourceClusterclientset)
currentTime := time.Now()

backupFile := fmt.Sprintf("%d-%d-%d-%d-%d-%d-helm.backup\n",
currentTime.Year(),
currentTime.Month(),
currentTime.Day(),
currentTime.Hour(),
currentTime.Hour(),
currentTime.Second())

// TODO backup only mode
} else if args[0] == "restore" {
dump(backupFile, backup)

} else if args[0] == "restore" || args[0] == "full" {
WarningLogger.Println("This option provides both backup and restore functionality...")
sourceClusterclientset := configHandler(sourceCluster)
targetClusterclientset := configHandler(targetCluster)
backup := getBackup(targetNs, sourceClusterclientset)

restoreBackup(targetNs, targetClusterclientset, backup)

if rollback == true {
WarningLogger.Println("Rollback option is enabled ")
}
}
},
}
Expand All @@ -52,6 +69,7 @@ func Execute() {
mode.PersistentFlags().String("ns", "", "The target namespace to fetch helm release and restore")
mode.PersistentFlags().String("targetcluster", "", "Source of the backup of helm releases")
mode.PersistentFlags().String("sourcecluster", "", "Target cluster address of helm restore operation")
mode.PersistentFlags().String("rollback", "", "This option provides rollback option enabled whether or not")

if err := rootCmd.Execute(); err != nil {
ErrorLogger.Println(os.Stderr, "Whoops. There was an error while executing your CLI '%s'", err)
Expand Down
10 changes: 5 additions & 5 deletions src/restore.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

func restoreBackup(namespace string, clientset *kubernetes.Clientset, releaseMap []HelmRelease) {
for _, release := range releaseMap {
secretName := fmt.Sprintf("sh.helm.release.v1.%s.v%s", release.name, release.version)
secretName := fmt.Sprintf("sh.helm.release.v1.%s.v%s", release.Name, release.Version)

secret := corev1.Secret{
TypeMeta: metav1.TypeMeta{
Expand All @@ -26,12 +26,12 @@ func restoreBackup(namespace string, clientset *kubernetes.Clientset, releaseMap
Namespace: namespace,
Labels: map[string]string{
"owner": "helm",
"name": release.name,
"status": release.status,
"version": release.version,
"name": release.Name,
"status": release.Status,
"version": release.Version,
},
},
Data: map[string][]byte{"release": []byte(release.content)},
Data: map[string][]byte{"release": []byte(release.Content)},
}
_, err := clientset.CoreV1().Secrets(namespace).Create(context.TODO(), &secret, metav1.CreateOptions{})

Expand Down
8 changes: 4 additions & 4 deletions src/types.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package main

type HelmRelease struct {
name string
version string
status string
content string
Name string
Version string
Status string
Content string
}

0 comments on commit 0f58937

Please sign in to comment.