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  }