feat(crdb): use crdb native backup and s3 backup added (#1915)

* fix(zitadelctl): implement takedown command

* fix(zitadelctl): correct destroy flow

* fix(zitadelctl): correct backup commands to read crds beforehand

* fix: add of destroyfile

* fix: clean for userlist

* fix: change backup and restore to crdb native

* fix: timeout for delete pvc for cockroachdb

* fix: corrected unit tests

* fix: add ignored file for scale

* fix: correct handling of gitops in backup command

* feat: add s3 backup kind

* fix: backuplist for s3 and timeout for pv deletion

* fix(database): fix nil pointer with binary version

* fix(database): cleanup of errors which cam with merging of the s3 logic

* fix: correct unit tests

* fix: cleanup monitor output

Co-authored-by: Elio Bischof <eliobischof@gmail.com>

* fix: backup imagepullpolixy to ifnotpresent

Co-authored-by: Elio Bischof <eliobischof@gmail.com>
This commit is contained in:
Stefan Benz
2021-10-13 14:34:03 +02:00
committed by GitHub
parent 591a460450
commit 425a8b5fd5
67 changed files with 3867 additions and 626 deletions

View File

@@ -6,7 +6,7 @@ import (
"github.com/caos/orbos/pkg/kubernetes"
"github.com/caos/orbos/pkg/tree"
"github.com/caos/zitadel/operator/api/database"
"github.com/caos/zitadel/operator/database/kinds/databases/core"
"github.com/caos/zitadel/operator/database/kinds/databases/managed"
orbdb "github.com/caos/zitadel/operator/database/kinds/orb"
)
@@ -14,51 +14,42 @@ func GitOpsClear(
monitor mntr.Monitor,
k8sClient kubernetes.ClientInt,
gitClient *git.Client,
databases []string,
users []string,
) error {
desired, err := gitClient.ReadTree(git.DatabaseFile)
if err != nil {
return err
}
return clear(monitor, k8sClient, databases, users, desired)
return clear(monitor, k8sClient, desired, true)
}
func CrdClear(
monitor mntr.Monitor,
k8sClient kubernetes.ClientInt,
databases []string,
users []string,
) error {
desired, err := database.ReadCrd(k8sClient)
if err != nil {
return err
}
return clear(monitor, k8sClient, databases, users, desired)
return clear(monitor, k8sClient, desired, false)
}
func clear(
monitor mntr.Monitor,
k8sClient kubernetes.ClientInt,
databases []string,
users []string,
desired *tree.Tree,
gitops bool,
) error {
current := &tree.Tree{}
query, _, _, _, _, _, err := orbdb.AdaptFunc("", nil, false, "clean")(monitor, desired, current)
query, _, _, _, _, _, err := orbdb.AdaptFunc("", nil, gitops, managed.Clean)(monitor, desired, current)
if err != nil {
monitor.Error(err)
return err
}
queried := map[string]interface{}{}
core.SetQueriedForDatabaseDBList(queried, databases, users)
ensure, err := query(k8sClient, queried)
if err != nil {
monitor.Error(err)
return err
}

View File

@@ -6,7 +6,6 @@ import (
"github.com/caos/orbos/pkg/kubernetes"
"github.com/caos/orbos/pkg/tree"
"github.com/caos/zitadel/operator/api/database"
"github.com/caos/zitadel/operator/database/kinds/databases/core"
orbdb "github.com/caos/zitadel/operator/database/kinds/orb"
)
@@ -15,26 +14,24 @@ func GitOpsRestore(
k8sClient kubernetes.ClientInt,
gitClient *git.Client,
name string,
databases []string,
) error {
desired, err := gitClient.ReadTree(git.DatabaseFile)
if err != nil {
return err
}
return restore(monitor, k8sClient, desired, name, databases)
return restore(monitor, k8sClient, desired, name)
}
func CrdRestore(
monitor mntr.Monitor,
k8sClient kubernetes.ClientInt,
name string,
databases []string,
) error {
desired, err := database.ReadCrd(k8sClient)
if err != nil {
return err
}
return restore(monitor, k8sClient, desired, name, databases)
return restore(monitor, k8sClient, desired, name)
}
func restore(
@@ -42,7 +39,6 @@ func restore(
k8sClient kubernetes.ClientInt,
desired *tree.Tree,
name string,
databases []string,
) error {
current := &tree.Tree{}
@@ -52,8 +48,6 @@ func restore(
return err
}
queried := map[string]interface{}{}
core.SetQueriedForDatabaseDBList(queried, databases, []string{})
ensure, err := query(k8sClient, queried)
if err != nil {
monitor.Error(err)

View File

@@ -354,7 +354,7 @@ func DestroyZitadelOperator(
func ScaleZitadelOperator(
monitor mntr.Monitor,
client *kubernetes.Client,
client kubernetes.ClientInt,
replicaCount int,
) error {
monitor.Debug("Scaling zitadel-operator")
@@ -363,7 +363,7 @@ func ScaleZitadelOperator(
func ScaleDatabaseOperator(
monitor mntr.Monitor,
client *kubernetes.Client,
client kubernetes.ClientInt,
replicaCount int,
) error {
monitor.Debug("Scaling database-operator")

View File

@@ -1,105 +0,0 @@
package zitadel
import (
"time"
"github.com/caos/orbos/mntr"
"github.com/caos/orbos/pkg/git"
"github.com/caos/orbos/pkg/kubernetes"
orbconfig "github.com/caos/orbos/pkg/orb"
"github.com/caos/zitadel/pkg/databases"
kubernetes2 "github.com/caos/zitadel/pkg/kubernetes"
)
var (
databasesList = []string{
"notification",
"adminapi",
"auth",
"authz",
"eventstore",
"management",
"zitadel",
}
userList = []string{
"notification",
"adminapi",
"auth",
"authz",
"eventstore",
"management",
"queries",
}
)
func GitOpsClearMigrateRestore(
monitor mntr.Monitor,
gitClient *git.Client,
orbCfg *orbconfig.Orb,
k8sClient *kubernetes.Client,
backup string,
version *string,
) error {
if err := kubernetes2.ScaleZitadelOperator(monitor, k8sClient, 0); err != nil {
return err
}
time.Sleep(5 * time.Second)
if err := GitOpsScaleDown(monitor, orbCfg, gitClient, k8sClient, version); err != nil {
return err
}
if err := databases.GitOpsClear(monitor, k8sClient, gitClient, databasesList, userList); err != nil {
return err
}
if err := GitOpsMigrations(monitor, orbCfg, gitClient, k8sClient, version); err != nil {
return err
}
if err := databases.GitOpsRestore(monitor, k8sClient, gitClient, backup, databasesList); err != nil {
return err
}
if err := kubernetes2.ScaleZitadelOperator(monitor, k8sClient, 1); err != nil {
return err
}
return nil
}
func CrdClearMigrateRestore(
monitor mntr.Monitor,
k8sClient *kubernetes.Client,
backup string,
version *string,
) error {
if err := kubernetes2.ScaleZitadelOperator(monitor, k8sClient, 0); err != nil {
return err
}
time.Sleep(5 * time.Second)
if err := CrdScaleDown(monitor, k8sClient, version); err != nil {
return err
}
if err := databases.CrdClear(monitor, k8sClient, databasesList, userList); err != nil {
return err
}
if err := CrdMigrations(monitor, k8sClient, version); err != nil {
return err
}
if err := databases.CrdRestore(monitor, k8sClient, backup, databasesList); err != nil {
return err
}
if err := kubernetes2.ScaleZitadelOperator(monitor, k8sClient, 1); err != nil {
return err
}
return nil
}