Skip to content

Commit 9fbd9c8

Browse files
Merge pull request openshift#74 from drewandersonnz/OSD4804-servicequota-all-regions
OSD-4804 service-quota --all-regions
2 parents 435edc2 + 365dd97 commit 9fbd9c8

File tree

6 files changed

+182
-11
lines changed

6 files changed

+182
-11
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package servicequotas
2+
3+
import (
4+
"errors"
5+
6+
awsv1alpha1 "github.com/openshift/aws-account-operator/pkg/apis/aws/v1alpha1"
7+
)
8+
9+
// GetSupportedRegions returns a []string of all supported regions if found and an error. Filtering for a single region is also supported.
10+
func GetSupportedRegions(filter string, allRegions bool) ([]string, error) {
11+
var results []string
12+
for i := range awsv1alpha1.CoveredRegions {
13+
if (filter != "") && !allRegions {
14+
if filter == i {
15+
results = append(results, i)
16+
return results, nil
17+
}
18+
continue
19+
}
20+
21+
results = append(results, i)
22+
}
23+
24+
if len(results) == 0 {
25+
return results, errors.New("Cannot find Supported Region")
26+
}
27+
28+
return results, nil
29+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package servicequotas
2+
3+
import (
4+
"strings"
5+
"testing"
6+
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
func TestGetSupportedRegions(t *testing.T) {
11+
g := NewGomegaWithT(t)
12+
testCases := []struct {
13+
title string
14+
region string
15+
allRegions bool
16+
errExpected bool
17+
errContent string
18+
expectRegionsMoreThanOne bool
19+
expectRegionsOnlyOne bool
20+
expectRegionsNone bool
21+
}{
22+
{
23+
title: "no region filter, not all regions, no error, return all",
24+
region: "",
25+
allRegions: false,
26+
errExpected: false,
27+
expectRegionsMoreThanOne: true,
28+
expectRegionsOnlyOne: false,
29+
expectRegionsNone: false,
30+
},
31+
{
32+
title: "no region filter, return all regions, no error, return all",
33+
region: "",
34+
allRegions: true,
35+
errExpected: false,
36+
expectRegionsMoreThanOne: true,
37+
expectRegionsOnlyOne: false,
38+
expectRegionsNone: false,
39+
},
40+
{
41+
title: "us-east-1 region filter, not all regions, should return 1 region",
42+
region: "us-east-1",
43+
allRegions: false,
44+
errExpected: false,
45+
expectRegionsMoreThanOne: false,
46+
expectRegionsOnlyOne: true,
47+
expectRegionsNone: false,
48+
},
49+
{
50+
title: "us-east-1 region filter, return all regions, should return all regions",
51+
region: "us-east-1",
52+
allRegions: true,
53+
errExpected: false,
54+
expectRegionsMoreThanOne: true,
55+
expectRegionsOnlyOne: false,
56+
expectRegionsNone: false,
57+
},
58+
{
59+
title: "us-east-15 region filter, not all regions, should error",
60+
region: "us-east-15",
61+
allRegions: false,
62+
errExpected: true,
63+
expectRegionsMoreThanOne: false,
64+
expectRegionsOnlyOne: false,
65+
expectRegionsNone: true,
66+
},
67+
{
68+
title: "us-east-15 region filter, return all regions, should return all regions",
69+
region: "us-east-15",
70+
allRegions: true,
71+
errExpected: false,
72+
expectRegionsMoreThanOne: true,
73+
expectRegionsOnlyOne: false,
74+
expectRegionsNone: false,
75+
},
76+
}
77+
78+
for _, tc := range testCases {
79+
t.Run(tc.title, func(t *testing.T) {
80+
regions, err := GetSupportedRegions(tc.region, tc.allRegions)
81+
if tc.errExpected {
82+
g.Expect(err).Should(HaveOccurred())
83+
if tc.errContent != "" {
84+
g.Expect(true).Should(Equal(strings.Contains(err.Error(), tc.errContent)))
85+
}
86+
} else {
87+
g.Expect(err).ShouldNot(HaveOccurred())
88+
}
89+
90+
g.Expect(tc.expectRegionsMoreThanOne == (len(regions) > 1)).To(BeTrue(), "Should return more than one region")
91+
g.Expect(tc.expectRegionsOnlyOne == (len(regions) == 1)).To(BeTrue(), "Should return exactly one region")
92+
g.Expect(tc.expectRegionsNone == (len(regions) == 0)).To(BeTrue(), "Should return no regions")
93+
})
94+
}
95+
}

cmd/account/servicequotas/describe.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ func newCmdDescribe(streams genericclioptions.IOStreams, flags *genericclioption
3636
describeCmd.Flags().StringVarP(&ops.queryServiceCode, "service-code", "", "ec2", "Query for ServiceCode")
3737
describeCmd.Flags().StringVarP(&ops.queryQuotaCode, "quota-code", "q", "L-1216C47A", "Query for QuotaCode")
3838

39+
describeCmd.Flags().BoolVarP(&ops.allRegions, "all-regions", "", false, "Loop through all supported regions")
40+
3941
describeCmd.Flags().BoolVarP(&ops.verbose, "verbose", "v", false, "Verbose output")
4042

4143
return describeCmd
@@ -48,7 +50,8 @@ type describeOptions struct {
4850
queryServiceCode string
4951
queryQuotaCode string
5052

51-
verbose bool
53+
verbose bool
54+
allRegions bool
5255

5356
genericclioptions.IOStreams
5457
}
@@ -63,24 +66,44 @@ func newDescribeOptions(streams genericclioptions.IOStreams, flags *genericcliop
6366
}
6467

6568
func (o *describeOptions) complete(cmd *cobra.Command) error {
66-
k8svalid, err := o.k8sclusterresourcefactory.ValidateIdentifiers()
67-
if !k8svalid {
69+
if valid, err := o.k8sclusterresourcefactory.ValidateIdentifiers(); !valid {
6870
if err != nil {
6971
return err
7072
}
7173
}
7274

73-
awsvalid, err := o.k8sclusterresourcefactory.Awscloudfactory.ValidateIdentifiers()
74-
if !awsvalid {
75+
if valid, err := o.k8sclusterresourcefactory.Awscloudfactory.ValidateIdentifiers(); !valid {
7576
if err != nil {
7677
return err
7778
}
7879
}
7980

81+
if _, err := GetSupportedRegions(o.k8sclusterresourcefactory.Awscloudfactory.Region, o.allRegions); err != nil {
82+
return err
83+
}
84+
8085
return nil
8186
}
8287

8388
func (o *describeOptions) run() error {
89+
regions, error := GetSupportedRegions(o.k8sclusterresourcefactory.Awscloudfactory.Region, o.allRegions)
90+
if error != nil {
91+
return error
92+
}
93+
94+
for _, region := range regions {
95+
if err := o.runOnceByRegion(region); err != nil {
96+
return err
97+
}
98+
}
99+
100+
return nil
101+
}
102+
103+
func (o *describeOptions) runOnceByRegion(region string) error {
104+
// override region in factory class
105+
o.k8sclusterresourcefactory.Awscloudfactory.Region = region
106+
84107
awsClient, err := o.k8sclusterresourcefactory.GetCloudProvider(o.verbose)
85108
if err != nil {
86109
return err

cmd/account/servicequotas/update.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ func newCmdUpdate(streams genericclioptions.IOStreams, flags *genericclioptions.
3636
updateCmd.Flags().StringVarP(&ops.queryQuotaCode, "quota-code", "q", "L-1216C47A", "Query for QuotaCode")
3737
updateCmd.Flags().Float64VarP(&ops.desiredValue, "desired-value", "", -1, "Desired Value for Quota")
3838

39+
updateCmd.Flags().BoolVarP(&ops.allRegions, "all-regions", "", false, "Loop through all supported regions")
40+
3941
updateCmd.Flags().BoolVarP(&ops.verbose, "verbose", "v", false, "Verbose output")
4042

4143
return updateCmd
@@ -49,7 +51,8 @@ type updateOptions struct {
4951
queryQuotaCode string
5052
desiredValue float64
5153

52-
verbose bool
54+
verbose bool
55+
allRegions bool
5356

5457
genericclioptions.IOStreams
5558
}
@@ -64,24 +67,44 @@ func newUpdateOptions(streams genericclioptions.IOStreams, flags *genericcliopti
6467
}
6568

6669
func (o *updateOptions) complete(cmd *cobra.Command) error {
67-
k8svalid, err := o.k8sclusterresourcefactory.ValidateIdentifiers()
68-
if !k8svalid {
70+
if valid, err := o.k8sclusterresourcefactory.ValidateIdentifiers(); !valid {
6971
if err != nil {
7072
return err
7173
}
7274
}
7375

74-
awsvalid, err := o.k8sclusterresourcefactory.Awscloudfactory.ValidateIdentifiers()
75-
if !awsvalid {
76+
if valid, err := o.k8sclusterresourcefactory.Awscloudfactory.ValidateIdentifiers(); !valid {
7677
if err != nil {
7778
return err
7879
}
7980
}
8081

82+
if _, err := GetSupportedRegions(o.k8sclusterresourcefactory.Awscloudfactory.Region, o.allRegions); err != nil {
83+
return err
84+
}
85+
8186
return nil
8287
}
8388

8489
func (o *updateOptions) run() error {
90+
regions, error := GetSupportedRegions(o.k8sclusterresourcefactory.Awscloudfactory.Region, o.allRegions)
91+
if error != nil {
92+
return error
93+
}
94+
95+
for _, region := range regions {
96+
if err := o.runOnceByRegion(region); err != nil {
97+
return err
98+
}
99+
}
100+
101+
return nil
102+
}
103+
104+
func (o *updateOptions) runOnceByRegion(region string) error {
105+
// override region in factory class
106+
o.k8sclusterresourcefactory.Awscloudfactory.Region = region
107+
85108
awsClient, err := o.k8sclusterresourcefactory.GetCloudProvider(o.verbose)
86109
if err != nil {
87110
return err

docs/command/osdctl_account_servicequotas_describe.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ osdctl account servicequotas describe [flags]
1616
-i, --account-id string The AWS account ID we need to create AWS credentials for -- This argument will not work for CCS accounts
1717
-a, --account-name string The AWS account CR we need to create a temporary AWS console URL for
1818
--account-namespace string The namespace to keep AWS accounts. The default value is aws-account-operator. (default "aws-account-operator")
19+
--all-regions Loop through all supported regions
1920
-c, --aws-config string specify AWS config file path
2021
-p, --aws-profile string specify AWS profile
2122
-r, --aws-region string specify AWS region (default "us-east-1")

pkg/k8s/clusterresourcefactory.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func (factory *ClusterResourceFactoryOptions) GetCloudProvider(verbose bool) (aw
188188
AccessKeyID: *factory.Awscloudfactory.Credentials.AccessKeyId,
189189
SecretAccessKey: *factory.Awscloudfactory.Credentials.SecretAccessKey,
190190
SessionToken: *factory.Awscloudfactory.Credentials.SessionToken,
191-
Region: "us-east-1",
191+
Region: factory.Awscloudfactory.Region,
192192
})
193193
if err != nil {
194194
return nil, err

0 commit comments

Comments
 (0)