github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/cmd/tenantloader/main.go (about) 1 package main 2 3 import ( 4 "context" 5 6 "github.com/kyma-incubator/compass/components/director/internal/domain/label" 7 "github.com/kyma-incubator/compass/components/director/internal/domain/labeldef" 8 "github.com/kyma-incubator/compass/components/director/internal/domain/tenant" 9 "github.com/kyma-incubator/compass/components/director/internal/uid" 10 "github.com/kyma-incubator/compass/components/director/pkg/log" 11 "github.com/kyma-incubator/compass/components/director/pkg/persistence" 12 "github.com/pkg/errors" 13 "github.com/vrischmann/envconfig" 14 15 "github.com/kyma-incubator/compass/components/director/internal/externaltenant" 16 ) 17 18 type jobConfig struct { 19 Database persistence.DatabaseConfig 20 Log log.Config 21 DefaultTenantRegion string `envconfig:"APP_DEFAULT_TENANT_REGION,default=eu-1"` 22 } 23 24 func main() { 25 const tenantsDirectoryPath = "/data/" 26 27 cfg := jobConfig{} 28 err := envconfig.Init(&cfg) 29 exitOnError(err, "error while loading app config") 30 31 ctx, err := log.Configure(context.Background(), &cfg.Log) 32 exitOnError(err, "Error while configuring logger") 33 34 transact, closeFunc, err := persistence.Configure(ctx, cfg.Database) 35 exitOnError(err, "error while establishing the connection to the database") 36 37 defer func() { 38 err := closeFunc() 39 exitOnError(err, "error while closing the connection to the database") 40 }() 41 42 UIDSvc := uid.NewService() 43 44 labelConv := label.NewConverter() 45 labelRepo := label.NewRepository(labelConv) 46 labelDefConv := labeldef.NewConverter() 47 labelDefRepo := labeldef.NewRepository(labelDefConv) 48 labelSvc := label.NewLabelService(labelRepo, labelDefRepo, UIDSvc) 49 50 tenantConverter := tenant.NewConverter() 51 tenantRepo := tenant.NewRepository(tenantConverter) 52 tenantSvc := tenant.NewServiceWithLabels(tenantRepo, UIDSvc, labelRepo, labelSvc, tenantConverter) 53 54 tenants, err := externaltenant.MapTenants(tenantsDirectoryPath, cfg.DefaultTenantRegion) 55 exitOnError(err, "error while mapping tenants from file") 56 57 tx, err := transact.Begin() 58 exitOnError(err, "error while beginning db transaction") 59 defer transact.RollbackUnlessCommitted(ctx, tx) 60 61 ctx = persistence.SaveToContext(ctx, tx) 62 63 _, err = tenantSvc.CreateManyIfNotExists(ctx, tenants...) 64 exitOnError(err, "error while creating tenants") 65 66 err = tx.Commit() 67 exitOnError(err, "error while committing the transaction") 68 69 log.C(ctx).Println("Tenants were successfully synchronized.") 70 } 71 72 func exitOnError(err error, context string) { 73 if err != nil { 74 wrappedError := errors.Wrap(err, context) 75 log.D().Fatal(wrappedError) 76 } 77 }