From 701ab5c5367a9c1f7ec67999ee987e9136e362ff Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Tue, 15 Mar 2022 13:33:46 +0530 Subject: [PATCH] Switch to fetching all needed values via named cli args --- scripts/initialize/main.go | 47 +++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/scripts/initialize/main.go b/scripts/initialize/main.go index 6756bd9..852d098 100644 --- a/scripts/initialize/main.go +++ b/scripts/initialize/main.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "encoding/json" + "flag" "fmt" "io/ioutil" "log" @@ -13,6 +14,7 @@ import ( "github.com/RafaySystems/rcloud-base/internal/models" providers "github.com/RafaySystems/rcloud-base/internal/persistence/provider/kratos" "github.com/RafaySystems/rcloud-base/internal/persistence/provider/pg" + "github.com/RafaySystems/rcloud-base/pkg/common" "github.com/RafaySystems/rcloud-base/pkg/enforcer" "github.com/RafaySystems/rcloud-base/pkg/service" commonv3 "github.com/RafaySystems/rcloud-base/proto/types/commonpb/v3" @@ -37,6 +39,10 @@ import ( // We make use of service instead of just insserting to db as that way // all the dependent items will be taken care of automatically. +// Inorder to reset everything, we can do +// truncate table authsrv_partner cascade; +// truncate table casbin_rule; + const ( dbAddrEnv = "DB_ADDR" dbNameEnv = "DB_NAME" @@ -76,9 +82,23 @@ func addResourcePermissions(dao pg.EntityDAO, basePath string) error { } func main() { - if len(os.Args) != 4 { - // this step happens after org creation and so we will have org and partner - log.Fatal("Usage: ", os.Args[0], " ", " ", "") + partner := flag.String("partner", "", "Name of partner") + partnerDesc := flag.String("partner-desc", "", "Description of partner") + partnerHost := flag.String("partner-host", "", "Host of partner") + + org := flag.String("org", "", "Name of org") + orgDesc := flag.String("org-desc", "", "Description of org") + + oae := flag.String("admin-email", "", "Email of org admin") + oafn := flag.String("admin-first-name", "", "First name of org admin") + oaln := flag.String("admin-last-name", "", "Last name of org admin") + + flag.Parse() + + if *partner == "" || *org == "" || *oae == "" || *oafn == "" || *oaln == "" || *partnerHost == "" { + fmt.Println("Usage: initialize") + flag.PrintDefaults() + os.Exit(1) } viper.SetDefault(dbAddrEnv, "localhost:5432") @@ -102,10 +122,6 @@ func main() { kratosScheme := viper.GetString(kratosSchemeEnv) kratosAddr := viper.GetString(kratosAddrEnv) - partner := os.Args[1] - org := os.Args[2] - orgAdminEmail := os.Args[3] - content, err := ioutil.ReadFile(path.Join("scripts", "initialize", "roles.json")) if err != nil { log.Fatal("unable to read file: ", err) @@ -141,7 +157,7 @@ func main() { ps := service.NewPartnerService(db) os := service.NewOrganizationService(db) rs := service.NewRoleService(db, as) - us := service.NewUserService(providers.NewKratosAuthProvider(kc), db, as) + us := service.NewUserService(providers.NewKratosAuthProvider(kc), db, as, nil, common.CliConfigDownloadData{}) err = dao.DeleteAll(context.Background(), &models.ResourcePermission{}) if err != nil { @@ -155,14 +171,14 @@ func main() { // Create partner _, err = ps.Create(context.Background(), &systemv3.Partner{ - Metadata: &commonv3.Metadata{Name: partner, Description: "..."}, - Spec: &systemv3.PartnerSpec{Host: ""}, + Metadata: &commonv3.Metadata{Name: *partner, Description: *partnerDesc}, + Spec: &systemv3.PartnerSpec{Host: *partnerHost}, }) if err != nil { log.Fatal("unable to create partner", err) } _, err = os.Create(context.Background(), &systemv3.Organization{ - Metadata: &commonv3.Metadata{Name: org, Partner: partner, Description: "..."}, + Metadata: &commonv3.Metadata{Name: *org, Partner: *partner, Description: *orgDesc}, Spec: &systemv3.OrganizationSpec{Active: true}, }) if err != nil { @@ -174,7 +190,7 @@ func main() { perms := data[scope][name] fmt.Println(scope, name, len(perms)) _, err := rs.Create(context.Background(), &rolev3.Role{ - Metadata: &commonv3.Metadata{Name: name, Partner: partner, Organization: org, Description: "..."}, + Metadata: &commonv3.Metadata{Name: name, Partner: *partner, Organization: *org, Description: "..."}, Spec: &rolev3.RoleSpec{IsGlobal: true, Scope: scope, Rolepermissions: perms}, }) if err != nil { @@ -183,11 +199,10 @@ func main() { } } - // TODO: should we directly interact with kratos and create a user with a password? + // should we directly interact with kratos and create a user with a password? _, err = us.Create(context.Background(), &userv3.User{ - Metadata: &commonv3.Metadata{Name: orgAdminEmail, Partner: partner, Organization: org, Description: "..."}, - // TODO: get proper name via cli arg - Spec: &userv3.UserSpec{FirstName: "Org", LastName: "Admin", ProjectNamespaceRoles: []*userv3.ProjectNamespaceRole{{Role: "ADMIN"}}}, + Metadata: &commonv3.Metadata{Name: *oae, Partner: *partner, Organization: *org, Description: "..."}, + Spec: &userv3.UserSpec{FirstName: *oafn, LastName: *oaln, ProjectNamespaceRoles: []*userv3.ProjectNamespaceRole{{Role: "ADMIN"}}}, }) if err != nil {