func segmentAdd(cmd *cli.Command, args []string) error { if len(args) != 2 { return util.UsageError(cmd, "TENANT and SEGMENT name should be provided.") } tnt := args[0] seg := args[1] client, err := getRestClient() if err != nil { return err } romanaID, err := romana.GetTenantID(client, tnt) if err != nil { return errors.New("Romana Tenant doesn't exists: " + tnt) } romanaIDStr := strconv.FormatUint(romanaID, 10) tenantURL, err := client.GetServiceUrl("tenant") if err != nil { return err } data := tenant.Segment{Name: seg, ExternalID: externalID} var result map[string]interface{} err = client.Post(tenantURL+"/tenants/"+romanaIDStr+"/segments", data, &result) if err != nil { return err } _, tFound := result["name"] if !tFound { var h common.HttpError dc := &ms.DecoderConfig{TagName: "json", Result: &h} decoder, err := ms.NewDecoder(dc) if err != nil { return err } err = decoder.Decode(result) if err != nil { return err } if config.GetString("Format") == "json" { status, _ := json.MarshalIndent(h, "", "\t") fmt.Println(string(status)) return fmt.Errorf("HTTP Error") } return fmt.Errorf(h.Error()) } if config.GetString("Format") == "json" { segment := tenant.Segment{} dc := &ms.DecoderConfig{TagName: "json", Result: &segment} decoder, err := ms.NewDecoder(dc) if err != nil { return err } err = decoder.Decode(result) if err != nil { return err } body, err := json.MarshalIndent(segment, "", "\t") if err != nil { return err } fmt.Println(string(body)) } else { fmt.Printf("Tenant Segment (%s) added successfully.\n", seg) } return nil }
// tenantCreate accepts tenant names as arguments for // creating new tenants for platform being set in // config file (~/.romana.yaml) or via command line // flags. func tenantCreate(cmd *cli.Command, args []string) error { if len(args) < 1 { return util.UsageError(cmd, fmt.Sprintf("expected at-least 1 argument, saw none")) } client, err := getRestClient() if err != nil { return err } tenantURL, err := client.GetServiceUrl("tenant") if err != nil { return err } tenants := []tenant.Tenant{} for _, tnt := range args { var tntUUID string // uncomment this once creating tenant for all // platforms are ready. Till then tenants needs // to be manually created for every platform and // then created using romana command line tools. // if adaptor.CreateTenant(tnt) != nil { // return err // } // adaptor.GetTenantUUID below wouldn't be needed once // adaptor.CreateTenant is supported because CreateTenant // will create a new tenant for a specific platform // instead of polling for an already created one using // GetTenantUUID. if externalID == "" { tntUUID, err = adaptor.GetTenantUUID(tnt) if err != nil { switch err { case util.ErrUnimplementedFeature: return util.UsageError(cmd, "[tenantname] --externalid <externalid> should be provided.") default: return err } } } else { if len(args) > 1 { return util.UsageError(cmd, "[tenantname] --externalid <externalid> should be provided.\n"+ "Multiple tenants can't be created with same external ID.", ) } tntUUID = externalID } data := tenant.Tenant{Name: tnt, ExternalID: tntUUID} var result map[string]interface{} err = client.Post(tenantURL+"/tenants", data, &result) if err != nil { return err } _, tFound := result["name"] if tFound { var t tenant.Tenant dc := &ms.DecoderConfig{TagName: "json", Result: &t} decoder, err := ms.NewDecoder(dc) if err != nil { return err } err = decoder.Decode(result) if err != nil { return err } tenants = append(tenants, t) } else { var h common.HttpError dc := &ms.DecoderConfig{TagName: "json", Result: &h} decoder, err := ms.NewDecoder(dc) if err != nil { return err } err = decoder.Decode(result) if err != nil { return err } if config.GetString("Format") == "json" { status, _ := json.MarshalIndent(h, "", "\t") fmt.Println(string(status)) return fmt.Errorf("HTTP Error") } return fmt.Errorf(h.Error()) } } if config.GetString("Format") == "json" { body, err := json.MarshalIndent(tenants, "", "\t") if err != nil { return err } fmt.Println(string(body)) } else { w := new(tabwriter.Writer) w.Init(os.Stdout, 0, 8, 0, '\t', 0) fmt.Println("New Tenant(s) Added:") fmt.Fprintln(w, "Id\t", "Tenant Name\t", "External ID\t", ) for _, t := range tenants { fmt.Fprintf(w, "%d \t %s \t %s \t", t.ID, t.Name, t.ExternalID) fmt.Fprintf(w, "\n") } w.Flush() } return nil }