zitadel/cmd/admin/initialise/verify_zitadel.go
Silvan 4272ea6fe1
fix: init sub commands (#3218)
* fix(init): add sub commands

* fix(init): admin user in config,
test(init): verify functions

* refactor: config, remove second commands

* refactor: init steps

* chore: fix link in readme

* chore: numerate sql files

* Update cmd/admin/initialise/sql/README.md

Co-authored-by: Livio Amstutz <livio.a@gmail.com>

* Update cmd/admin/initialise/sql/README.md

Co-authored-by: Livio Amstutz <livio.a@gmail.com>

* fix(init): remove unused index

* user

* fix database username in defaults.yaml

Co-authored-by: Livio Amstutz <livio.a@gmail.com>
2022-02-16 12:30:49 +00:00

87 lines
1.8 KiB
Go

package initialise
import (
"database/sql"
_ "embed"
"github.com/caos/zitadel/internal/database"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
const (
eventstoreSchema = "eventstore"
projectionsSchema = "projections"
)
var (
searchEventsTable = "SELECT table_name FROM [SHOW TABLES] WHERE table_name = 'events'"
searchSchema = "SELECT schema_name FROM [SHOW SCHEMAS] WHERE schema_name = $1"
//go:embed sql/06_enable_hash_sharded_indexes.sql
enableHashShardedIdx string
//go:embed sql/07_events_table.sql
createEventsStmt string
//go:embed sql/05_projections.sql
createProjectionsStmt string
//go:embed sql/04_eventstore.sql
createEventstoreStmt string
)
func newZitadel() *cobra.Command {
return &cobra.Command{
Use: "zitadel",
Short: "initialize ZITADEL internas",
Long: `initialize ZITADEL internas.
Prereqesits:
- cockroachdb with user and database
`,
RunE: func(cmd *cobra.Command, args []string) error {
config := new(Config)
if err := viper.Unmarshal(config); err != nil {
return err
}
return verifyZitadel(config.Database)
},
}
}
func verifyZitadel(config database.Config) error {
db, err := database.Connect(config)
if err != nil {
return err
}
if err := verify(db, exists(searchSchema, projectionsSchema), exec(createProjectionsStmt)); err != nil {
return err
}
if err := verify(db, exists(searchSchema, eventstoreSchema), exec(createEventstoreStmt)); err != nil {
return err
}
if err := verify(db, exists(searchSchema, projectionsSchema), createEvents); err != nil {
return err
}
return db.Close()
}
func createEvents(db *sql.DB) error {
tx, err := db.Begin()
if err != nil {
return err
}
if _, err = tx.Exec(enableHashShardedIdx); err != nil {
tx.Rollback()
return err
}
if _, err = tx.Exec(createEventsStmt); err != nil {
tx.Rollback()
return err
}
return tx.Commit()
}