Skip to content

Commit

Permalink
fix backup-ns cli nameing (fixes autocompletion scripts), add backup-…
Browse files Browse the repository at this point in the history
…ns postgres info and backup-ns mysql info subcommands
  • Loading branch information
majodev committed Jan 10, 2025
1 parent 2c56f38 commit 49fec1b
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 1 deletion.
17 changes: 17 additions & 0 deletions .github/workflows/build-test-publish-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,23 @@ jobs:
sudo mv create-adhoc-backup.sh /usr/local/bin/
rm create-adhoc-backup.sh.tar.gz
```
### Install as Dockerfile layer (for [DevContainers](https://containers.dev/))
```Dockerfile
RUN set -x; BACKUP_NS_VERSION="${{ github.ref_name }}" \
&& BACKUP_NS_TMP="$(mktemp -d)" \
&& cd "${BACKUP_NS_TMP}" \
&& ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" \
&& curl -fsSLO "https://github.com/allaboutapps/backup-ns/releases/download/v${BACKUP_NS_VERSION}/backup-ns-linux-${ARCH}.tar.gz" \
&& tar zxvf "backup-ns-linux-${ARCH}.tar.gz" \
&& chmod +x "backup-ns-linux-${ARCH}" \
&& cp "backup-ns-linux-${ARCH}" /usr/local/bin/backup-ns \
&& curl -fsSLO "https://github.com/allaboutapps/backup-ns/releases/download/v${BACKUP_NS_VERSION}/create-adhoc-backup.sh.tar.gz" \
&& tar zxvf "create-adhoc-backup.sh.tar.gz" \
&& chmod +x create-adhoc-backup.sh \
&& cp create-adhoc-backup.sh /usr/local/bin/ \
&& rm -rf "${BACKUP_NS_TMP}"
```
draft: false
prerelease: false
env:
Expand Down
42 changes: 42 additions & 0 deletions cmd/mysql_info.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package cmd

import (
"log"

"github.com/allaboutapps/backup-ns/internal/lib"
"github.com/spf13/cobra"
)

var mysqlInfoCmd = &cobra.Command{
Use: "info",
Short: "Shows information about the mysql database backup state",
Run: func(_ *cobra.Command, _ []string) {
config := lib.LoadConfig()

if !config.MySQL.Enabled {
log.Fatal("BAK_DB_MYSQL=true must be set.")
}

runMySQLInfo(config)
},
}

func init() {
mysqlCmd.AddCommand(mysqlInfoCmd)
}

func runMySQLInfo(config lib.Config) {
if err := lib.EnsureResourceAvailable(config.Namespace, config.MySQL.ExecResource); err != nil {
log.Fatal(err)
}
if err := lib.EnsureMySQLAvailable(config.Namespace, config.MySQL); err != nil {
log.Fatal(err)
}

timestamp, err := lib.GetRemoteFileTimestamp(config.Namespace, config.MySQL.ExecResource, config.MySQL.ExecContainer, config.MySQL.DumpFile)
if err != nil {
log.Fatal(err)
}

log.Printf("Last mysql dump in namespace='%s' was created at %s", config.Namespace, timestamp.UTC().Format("2006-01-02 15:04:05 MST"))
}
42 changes: 42 additions & 0 deletions cmd/postgres_info.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package cmd

import (
"log"

"github.com/allaboutapps/backup-ns/internal/lib"
"github.com/spf13/cobra"
)

var postgresInfoCmd = &cobra.Command{
Use: "info",
Short: "Shows information about the postgres database backup state",
Run: func(_ *cobra.Command, _ []string) {
config := lib.LoadConfig()

if !config.Postgres.Enabled {
log.Fatal("BAK_DB_POSTGRES=true must be set.")
}

runPostgresInfo(config)
},
}

func init() {
postgresCmd.AddCommand(postgresInfoCmd)
}

func runPostgresInfo(config lib.Config) {
if err := lib.EnsureResourceAvailable(config.Namespace, config.Postgres.ExecResource); err != nil {
log.Fatal(err)
}
if err := lib.EnsurePostgresAvailable(config.Namespace, config.Postgres); err != nil {
log.Fatal(err)
}

timestamp, err := lib.GetRemoteFileTimestamp(config.Namespace, config.Postgres.ExecResource, config.Postgres.ExecContainer, config.Postgres.DumpFile)
if err != nil {
log.Fatal(err)
}

log.Printf("Last postgres dump in namespace='%s' was created at %s", config.Namespace, timestamp.UTC().Format("2006-01-02 15:04:05 MST"))
}
2 changes: 1 addition & 1 deletion cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "app",
Use: "backup-ns",
Short: "k8s application-aware snapshots",
// Long: ``,
// Uncomment the following line if your bare application
Expand Down
2 changes: 2 additions & 0 deletions test/test_create.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ BAK_VS_CLASS_NAME=csi-hostpath-snapclass BAK_DB_POSTGRES=true BAK_NAMESPACE=post
BAK_VS_CLASS_NAME=csi-hostpath-snapclass BAK_DB_MYSQL=true BAK_NAMESPACE=mysql-test BAK_DB_MYSQL_EXEC_RESOURCE=deployment/mysql backup-ns create

BAK_DB_POSTGRES=true BAK_NAMESPACE=postgres-test BAK_DB_POSTGRES_EXEC_RESOURCE=deployment/postgres backup-ns postgres dump
BAK_DB_POSTGRES=true BAK_NAMESPACE=postgres-test BAK_DB_POSTGRES_EXEC_RESOURCE=deployment/postgres backup-ns postgres info
BAK_DB_POSTGRES=true BAK_NAMESPACE=postgres-test BAK_DB_POSTGRES_EXEC_RESOURCE=deployment/postgres backup-ns postgres downloadDump -o "$SCRIPT_DIR/postgres-test.tar.gz"
rm -f "$SCRIPT_DIR/postgres-test.tar.gz"
BAK_DB_POSTGRES=true BAK_NAMESPACE=postgres-test BAK_DB_POSTGRES_EXEC_RESOURCE=deployment/postgres backup-ns postgres restore --force

BAK_DB_MYSQL=true BAK_NAMESPACE=mysql-test BAK_DB_MYSQL_EXEC_RESOURCE=deployment/mysql backup-ns mysql dump
BAK_DB_MYSQL=true BAK_NAMESPACE=mysql-test BAK_DB_MYSQL_EXEC_RESOURCE=deployment/mysql backup-ns mysql info
BAK_DB_MYSQL=true BAK_NAMESPACE=mysql-test BAK_DB_MYSQL_EXEC_RESOURCE=deployment/mysql backup-ns mysql downloadDump -o "$SCRIPT_DIR/mysql-test.tar.gz"
rm -f "$SCRIPT_DIR/mysql-test.tar.gz"
BAK_DB_MYSQL=true BAK_NAMESPACE=mysql-test BAK_DB_MYSQL_EXEC_RESOURCE=deployment/mysql backup-ns mysql restore -f
Expand Down

0 comments on commit 49fec1b

Please sign in to comment.