Skip to content

Commit c717815

Browse files
Merge pull request #1110 from planetscale/add-engine-flag-to-cluster-size-list
Add engine flag to cluster size list
2 parents 76d4c23 + eb96fb9 commit c717815

File tree

6 files changed

+96
-4
lines changed

6 files changed

+96
-4
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ require (
1818
github.com/hashicorp/go-cleanhttp v0.5.2
1919
github.com/hashicorp/go-version v1.7.0
2020
github.com/lensesio/tableprinter v0.0.0-20201125135848-89e81fc956e7
21+
github.com/lib/pq v1.10.9
2122
github.com/mark3labs/mcp-go v0.37.0
2223
github.com/matoous/go-nanoid/v2 v2.1.0
2324
github.com/mattn/go-isatty v0.0.20
2425
github.com/mattn/go-shellwords v1.0.12
2526
github.com/mitchellh/go-homedir v1.1.0
2627
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
27-
github.com/planetscale/planetscale-go v0.139.0
28+
github.com/planetscale/planetscale-go v0.140.0
2829
github.com/planetscale/psdb v0.0.0-20250717190954-65c6661ab6e4
2930
github.com/planetscale/psdbproxy v0.0.0-20250728082226-3f4ea3a74ec7
3031
github.com/spf13/cobra v1.9.1
@@ -80,7 +81,6 @@ require (
8081
github.com/klauspost/connect-compress/v2 v2.0.0 // indirect
8182
github.com/kr/pretty v0.3.1 // indirect
8283
github.com/kr/text v0.2.0 // indirect
83-
github.com/lib/pq v1.10.9 // indirect
8484
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
8585
github.com/mailru/easyjson v0.7.7 // indirect
8686
github.com/mattn/go-colorable v0.1.14 // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ github.com/planetscale/noglog v0.2.1-0.20210421230640-bea75fcd2e8e h1:MZ8D+Z3m2v
177177
github.com/planetscale/noglog v0.2.1-0.20210421230640-bea75fcd2e8e/go.mod h1:hwAsSPQdvPa3WcfKfzTXxtEq/HlqwLjQasfO6QbGo4Q=
178178
github.com/planetscale/planetscale-go v0.139.0 h1:Ie7RnhqY8QjBDx9MxONI88Arnex2Wpc18H7/5YW9DuI=
179179
github.com/planetscale/planetscale-go v0.139.0/go.mod h1:/n7PU99UvYaajJlTbMWMOOlHmkEuN7SFjvLNDSgMQOk=
180+
github.com/planetscale/planetscale-go v0.140.0 h1:zyL5kArfVUwg/+DyPeR6ENB+2+eaNzVW7DbotW0GqG4=
181+
github.com/planetscale/planetscale-go v0.140.0/go.mod h1:/n7PU99UvYaajJlTbMWMOOlHmkEuN7SFjvLNDSgMQOk=
180182
github.com/planetscale/psdb v0.0.0-20250717190954-65c6661ab6e4 h1:Xv5pj20Rhfty1Tv0OVcidg4ez4PvGrpKvb6rvUwQgDs=
181183
github.com/planetscale/psdb v0.0.0-20250717190954-65c6661ab6e4/go.mod h1:M52h5IWxAcbdQ1hSZrLAGQC4ZXslxEsK/Wh9nu3wdWs=
182184
github.com/planetscale/psdbproxy v0.0.0-20250728082226-3f4ea3a74ec7 h1:aRd6vdE1fyuSI4RVj7oCr8lFmgqXvpnPUmN85VbZCp8=

internal/cmd/size/cluster.go

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ func ListCmd(ch *cmdutil.Helper) *cobra.Command {
2727
var flags struct {
2828
region string
2929
metal bool
30+
engine string
3031
}
3132

3233
cmd := &cobra.Command{
3334
Use: "list",
3435
Short: "List the sizes that are available for a PlanetScale database",
36+
Long: "List the sizes that are available for a PlanetScale database. Use --engine to specify the database engine type.",
3537
Args: cobra.NoArgs,
3638
Aliases: []string{"ls"},
3739
RunE: func(cmd *cobra.Command, args []string) error {
@@ -41,9 +43,26 @@ func ListCmd(ch *cmdutil.Helper) *cobra.Command {
4143
return err
4244
}
4345

46+
// Parse the engine flag
47+
engine, err := parseDatabaseEngine(flags.engine)
48+
if err != nil {
49+
return err
50+
}
51+
52+
// Build the list options
53+
listOpts := []planetscale.ListOption{planetscale.WithRates()}
54+
if flags.region != "" {
55+
listOpts = append(listOpts, planetscale.WithRegion(flags.region))
56+
}
57+
58+
// Add engine-specific parameter for PostgreSQL
59+
if engine == planetscale.DatabaseEnginePostgres {
60+
listOpts = append(listOpts, planetscale.WithPostgreSQL())
61+
}
62+
4463
clusterSKUs, err := client.Organizations.ListClusterSKUs(ctx, &planetscale.ListOrganizationClusterSKUsRequest{
4564
Organization: ch.Config.Organization,
46-
}, planetscale.WithRates(), planetscale.WithRegion(flags.region))
65+
}, listOpts...)
4766
if err != nil {
4867
return err
4968
}
@@ -54,11 +73,19 @@ func ListCmd(ch *cmdutil.Helper) *cobra.Command {
5473

5574
cmd.Flags().StringVar(&flags.region, "region", "", "view cluster sizes and rates for a specific region")
5675
cmd.Flags().BoolVar(&flags.metal, "metal", false, "view cluster sizes and rates for clusters with metal storage")
76+
cmd.Flags().StringVar(&flags.engine, "engine", "mysql", "The database engine to show cluster sizes for. Supported values: mysql, postgresql. Defaults to mysql.")
5777

5878
cmd.RegisterFlagCompletionFunc("region", func(cmd *cobra.Command, args []string, toComplete string) ([]cobra.Completion, cobra.ShellCompDirective) {
5979
return cmdutil.RegionsCompletionFunc(ch, cmd, args, toComplete)
6080
})
6181

82+
cmd.RegisterFlagCompletionFunc("engine", func(cmd *cobra.Command, args []string, toComplete string) ([]cobra.Completion, cobra.ShellCompDirective) {
83+
return []cobra.Completion{
84+
cobra.CompletionWithDesc("mysql", "A Vitess database"),
85+
cobra.CompletionWithDesc("postgresql", "The fastest cloud Postgres"),
86+
}, cobra.ShellCompDirectiveNoFileComp
87+
})
88+
6289
return cmd
6390
}
6491

@@ -105,6 +132,17 @@ func toClusterSKU(clusterSKU *planetscale.ClusterSKU) *ClusterSKU {
105132
return cluster
106133
}
107134

135+
func parseDatabaseEngine(engine string) (planetscale.DatabaseEngine, error) {
136+
switch engine {
137+
case "mysql":
138+
return planetscale.DatabaseEngineMySQL, nil
139+
case "postgresql", "postgres":
140+
return planetscale.DatabaseEnginePostgres, nil
141+
default:
142+
return planetscale.DatabaseEngineMySQL, fmt.Errorf("invalid database engine %q, supported values: mysql, postgresql", engine)
143+
}
144+
}
145+
108146
func toClusterSKUs(clusterSKUs []*planetscale.ClusterSKU, onlyMetal bool) []*ClusterSKU {
109147
clusters := make([]*ClusterSKU, 0, len(clusterSKUs))
110148

internal/cmd/size/cluster_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,49 @@ func TestSizeCluster_ListCmd(t *testing.T) {
5959

6060
c.Assert(buf.String(), qt.JSONEquals, res)
6161
}
62+
63+
func TestSizeCluster_ListCmd_PostgreSQL(t *testing.T) {
64+
c := qt.New(t)
65+
66+
var buf bytes.Buffer
67+
format := printer.JSON
68+
p := printer.NewPrinter(&format)
69+
p.SetResourceOutput(&buf)
70+
71+
org := "planetscale"
72+
73+
orig := []*ps.ClusterSKU{
74+
{Name: "PS-10", Enabled: true, Rate: testutil.Pointer[int64](39)},
75+
}
76+
svc := &mock.OrganizationsService{
77+
ListClusterSKUsFn: func(ctx context.Context, req *ps.ListOrganizationClusterSKUsRequest, opts ...ps.ListOption) ([]*ps.ClusterSKU, error) {
78+
c.Assert(req.Organization, qt.Equals, org)
79+
return orig, nil
80+
},
81+
}
82+
83+
ch := &cmdutil.Helper{
84+
Printer: p,
85+
Config: &config.Config{
86+
Organization: org,
87+
},
88+
Client: func() (*ps.Client, error) {
89+
return &ps.Client{
90+
Organizations: svc,
91+
}, nil
92+
},
93+
}
94+
95+
cmd := ListCmd(ch)
96+
cmd.SetArgs([]string{"--engine", "postgresql"})
97+
err := cmd.Execute()
98+
99+
c.Assert(err, qt.IsNil)
100+
c.Assert(svc.ListClusterSKUsFnInvoked, qt.IsTrue)
101+
102+
res := []*ClusterSKU{
103+
{orig: orig[0]},
104+
}
105+
106+
c.Assert(buf.String(), qt.JSONEquals, res)
107+
}

internal/cmdutil/completions.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,15 @@ func ClusterSizesCompletionFunc(ch *Helper, cmd *cobra.Command, args []string, t
2828
return nil, cobra.ShellCompDirectiveNoFileComp
2929
}
3030

31+
// Build list options
32+
listOpts := []ps.ListOption{ps.WithRates()}
33+
if region != "" {
34+
listOpts = append(listOpts, ps.WithRegion(region))
35+
}
36+
3137
clusterSKUs, err := client.Organizations.ListClusterSKUs(ctx, &ps.ListOrganizationClusterSKUsRequest{
3238
Organization: org,
33-
}, ps.WithRegion(region), ps.WithRates())
39+
}, listOpts...)
3440
if err != nil {
3541
return nil, cobra.ShellCompDirectiveNoFileComp
3642
}

pscale

37.7 MB
Binary file not shown.

0 commit comments

Comments
 (0)