Skip to content

Commit 00f3dbc

Browse files
authored
CLOUDP-56544: project_id not available as a set config (#44)
1 parent 3da296e commit 00f3dbc

File tree

8 files changed

+137
-16
lines changed

8 files changed

+137
-16
lines changed

internal/cli/cli.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
)
2020

2121
type globalOpts struct {
22+
orgID string
2223
projectID string
2324
}
2425

@@ -36,3 +37,13 @@ func (opts *globalOpts) ProjectID() string {
3637
opts.projectID = config.ProjectID()
3738
return opts.projectID
3839
}
40+
41+
// OrgID returns the organization id.
42+
// If the id is empty, it caches it after querying config.
43+
func (opts *globalOpts) OrgID() string {
44+
if opts.orgID != "" {
45+
return opts.orgID
46+
}
47+
opts.orgID = config.OrgID()
48+
return opts.orgID
49+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// Copyright 2020 MongoDB Inc
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package cli
16+
17+
import (
18+
"log"
19+
)
20+
21+
func ExampleConfigSetBuilder_projectID() {
22+
cmd := ConfigSetBuilder()
23+
cmd.SetArgs([]string{"project_id", "1"})
24+
err := cmd.Execute()
25+
if err != nil {
26+
log.Fatal(err)
27+
}
28+
// Output:
29+
// Updated prop 'project_id'
30+
}
31+
32+
func ExampleConfigSetBuilder_orgID() {
33+
cmd := ConfigSetBuilder()
34+
cmd.SetArgs([]string{"org_id", "1"})
35+
err := cmd.Execute()
36+
if err != nil {
37+
log.Fatal(err)
38+
}
39+
// Output:
40+
// Updated prop 'org_id'
41+
}
42+
43+
func ExampleConfigSetBuilder_privateAPIKey() {
44+
cmd := ConfigSetBuilder()
45+
cmd.SetArgs([]string{"private_api_key", "1"})
46+
err := cmd.Execute()
47+
if err != nil {
48+
log.Fatal(err)
49+
}
50+
// Output:
51+
// Updated prop 'private_api_key'
52+
}
53+
54+
func ExampleConfigSetBuilder_publicAPIKey() {
55+
cmd := ConfigSetBuilder()
56+
cmd.SetArgs([]string{"public_api_key", "1"})
57+
err := cmd.Execute()
58+
if err != nil {
59+
log.Fatal(err)
60+
}
61+
// Output:
62+
// Updated prop 'public_api_key'
63+
}
64+
65+
func ExampleConfigSetBuilder_service() {
66+
cmd := ConfigSetBuilder()
67+
cmd.SetArgs([]string{"service", "1"})
68+
err := cmd.Execute()
69+
if err != nil {
70+
log.Fatal(err)
71+
}
72+
// Output:
73+
// Updated prop 'service'
74+
}
75+
76+
func ExampleConfigSetBuilder_opsManagerURL() {
77+
cmd := ConfigSetBuilder()
78+
cmd.SetArgs([]string{"ops_manager_url", "1"})
79+
err := cmd.Execute()
80+
if err != nil {
81+
log.Fatal(err)
82+
}
83+
// Output:
84+
// Updated prop 'ops_manager_url'
85+
}

internal/cli/iam_projects_create.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
)
2424

2525
type iamProjectsCreateOpts struct {
26-
orgID string
26+
*globalOpts
2727
name string
2828
store store.ProjectCreator
2929
}
@@ -40,7 +40,7 @@ func (opts *iamProjectsCreateOpts) init() error {
4040
}
4141

4242
func (opts *iamProjectsCreateOpts) Run() error {
43-
projects, err := opts.store.CreateProject(opts.name, opts.orgID)
43+
projects, err := opts.store.CreateProject(opts.name, opts.OrgID())
4444

4545
if err != nil {
4646
return err
@@ -51,7 +51,9 @@ func (opts *iamProjectsCreateOpts) Run() error {
5151

5252
// mcli iam project(s) create name [--orgId orgId]
5353
func IAMProjectsCreateBuilder() *cobra.Command {
54-
opts := new(iamProjectsCreateOpts)
54+
opts := &iamProjectsCreateOpts{
55+
globalOpts: newGlobalOpts(),
56+
}
5557
cmd := &cobra.Command{
5658
Use: "create [name]",
5759
Short: "Create a project",

internal/cli/iam_projects_create_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,11 @@ func TestIAMProjectsCreate_Run(t *testing.T) {
3636
Times(1)
3737

3838
createOpts := &iamProjectsCreateOpts{
39-
store: mockStore,
40-
name: "ProjectBar",
41-
orgID: "5a0a1e7e0f2912c554080adc",
39+
globalOpts: newGlobalOpts(),
40+
store: mockStore,
41+
name: "ProjectBar",
4242
}
43+
createOpts.orgID = "5a0a1e7e0f2912c554080adc"
4344
err := createOpts.Run()
4445
if err != nil {
4546
t.Fatalf("Run() unexpected error: %v", err)

internal/cli/iam_projects_list.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
)
2525

2626
type iamProjectsListOpts struct {
27-
orgID string
27+
*globalOpts
2828
store store.ProjectLister
2929
}
3030

@@ -42,8 +42,8 @@ func (opts *iamProjectsListOpts) init() error {
4242
func (opts *iamProjectsListOpts) Run() error {
4343
var projects interface{}
4444
var err error
45-
if opts.orgID != "" && config.Service() == config.OpsManagerService {
46-
projects, err = opts.store.GetOrgProjects(opts.orgID)
45+
if opts.OrgID() != "" && config.Service() == config.OpsManagerService {
46+
projects, err = opts.store.GetOrgProjects(opts.OrgID())
4747
} else {
4848
projects, err = opts.store.GetAllProjects()
4949
}
@@ -55,7 +55,9 @@ func (opts *iamProjectsListOpts) Run() error {
5555

5656
// mcli iam project(s) list [--orgId orgId]
5757
func IAMProjectsListBuilder() *cobra.Command {
58-
opts := new(iamProjectsListOpts)
58+
opts := &iamProjectsListOpts{
59+
globalOpts: newGlobalOpts(),
60+
}
5961
cmd := &cobra.Command{
6062
Use: "list",
6163
Aliases: []string{"ls"},

internal/cli/iam_projects_list_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ func TestIAMProjectsList_Run(t *testing.T) {
3838
Return(expected, nil).
3939
Times(1)
4040

41-
listOpts := &iamProjectsListOpts{store: mockStore}
41+
listOpts := &iamProjectsListOpts{
42+
store: mockStore,
43+
globalOpts: newGlobalOpts(),
44+
}
4245
err := listOpts.Run()
4346
if err != nil {
4447
t.Fatalf("Run() unexpected error: %v", err)
@@ -53,9 +56,10 @@ func TestIAMProjectsList_Run(t *testing.T) {
5356
Times(1)
5457

5558
listOpts := &iamProjectsListOpts{
56-
orgID: "1",
57-
store: mockStore,
59+
globalOpts: newGlobalOpts(),
60+
store: mockStore,
5861
}
62+
listOpts.orgID = "1"
5963
config.SetService(config.OpsManagerService)
6064
err := listOpts.Run()
6165
if err != nil {
@@ -71,9 +75,10 @@ func TestIAMProjectsList_Run(t *testing.T) {
7175
Times(1)
7276

7377
listOpts := &iamProjectsListOpts{
74-
orgID: "1",
75-
store: mockStore,
78+
globalOpts: newGlobalOpts(),
79+
store: mockStore,
7680
}
81+
listOpts.orgID = "1"
7782
config.SetService(config.CloudService)
7883
err := listOpts.Run()
7984
if err != nil {

internal/config/const.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const (
2121
CloudManagerService = "cloud-manager" // CloudManagerService settings when using CLoud Manager API
2222
OpsManagerService = "ops-manager" // OpsManagerService settings when using Ops Manager API
2323
projectID = "project_id"
24+
orgID = "org_id"
2425
configType = "toml"
2526
service = "service"
2627
publicAPIKey = "public_api_key"

internal/config/profile.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type Profile struct {
2929
}
3030

3131
func Properties() []string {
32-
return []string{service, publicAPIKey, privateAPIKey, opsManagerURL, baseURL}
32+
return []string{projectID, orgID, service, publicAPIKey, privateAPIKey, opsManagerURL, baseURL}
3333
}
3434

3535
var p *Profile
@@ -135,10 +135,24 @@ func (p Profile) ProjectID() string {
135135
return p.GetString(projectID)
136136
}
137137

138+
// SetProjectID sets the global project ID
139+
func SetProjectID(v string) { p.SetProjectID(v) }
138140
func (p Profile) SetProjectID(v string) {
139141
p.Set(projectID, v)
140142
}
141143

144+
// OrgID get configured organization ID
145+
func OrgID() string { return p.OrgID() }
146+
func (p Profile) OrgID() string {
147+
return p.GetString(orgID)
148+
}
149+
150+
// SetOrgID sets the global organization ID
151+
func SetOrgID(v string) { p.SetOrgID(v) }
152+
func (p Profile) SetOrgID(v string) {
153+
p.Set(orgID, v)
154+
}
155+
142156
// Load loads the configuration from disk
143157
func Load() error { return p.Load() }
144158
func (p Profile) Load() error {

0 commit comments

Comments
 (0)