Skip to content

Commit 43a2ea5

Browse files
We want to reuse ip allowlist in postgres and keyvalue so we should pull it out of the service types (#349)
GitOrigin-RevId: 6b6c9de5dbf2d32297c1c0997f5fc4132cc04e6d
1 parent b73435f commit 43a2ea5

7 files changed

Lines changed: 41 additions & 23 deletions

File tree

pkg/service/clone.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ func formatIPAllowListEntries(entries []client.CidrBlockAndDescription) []string
312312
}
313313
parsed := make([]string, 0, len(entries))
314314
for _, entry := range entries {
315-
parsed = append(parsed, servicetypes.FormatIPAllowListEntry(entry.CidrBlock, entry.Description))
315+
parsed = append(parsed, types.FormatIPAllowListEntry(entry.CidrBlock, entry.Description))
316316
}
317317
return parsed
318318
}

pkg/service/create.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ func buildServiceDetails(
147147
if err != nil {
148148
return nil, err
149149
}
150-
ipAllowList, err := parseIPAllowListInputs(cliInput.IPAllowList)
150+
ipAllowList, err := ParseIPAllowListInputs(cliInput.IPAllowList)
151151
if err != nil {
152152
return nil, err
153153
}
@@ -233,7 +233,7 @@ func buildServiceDetails(
233233
return nil, err
234234
}
235235
case client.StaticSite:
236-
ipAllowList, err := parseIPAllowListInputs(cliInput.IPAllowList)
236+
ipAllowList, err := ParseIPAllowListInputs(cliInput.IPAllowList)
237237
if err != nil {
238238
return nil, err
239239
}
@@ -370,13 +370,13 @@ func buildFilterFromInputs(paths []string, ignoredPaths []string) *client.BuildF
370370
}
371371
}
372372

373-
func parseIPAllowListInputs(raw []string) (*[]client.CidrBlockAndDescription, error) {
373+
func ParseIPAllowListInputs(raw []string) (*[]client.CidrBlockAndDescription, error) {
374374
if len(raw) == 0 {
375375
return nil, nil
376376
}
377377
entries := make([]client.CidrBlockAndDescription, 0, len(raw))
378378
for _, entry := range raw {
379-
cidr, description, err := servicetypes.ParseIPAllowListEntry(entry)
379+
cidr, description, err := types.ParseIPAllowListEntry(entry)
380380
if err != nil {
381381
return nil, err
382382
}

pkg/text/keyvalue.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package text
2+
3+
import (
4+
"github.com/render-oss/cli/pkg/client"
5+
)
6+
7+
// KeyValueDetail formats a KV instance detail for text output.
8+
// Does NOT include an action prefix (e.g., "Created" or "Updated") — callers should prepend
9+
// their own action prefix in the formatText closure passed to command.NonInteractive.
10+
func KeyValueDetail(kv *client.KeyValueDetail) string {
11+
return FormatStringF(
12+
"Name: %s\nID: %s\nPlan: %s\nRegion: %s\nStatus: %s",
13+
kv.Name,
14+
kv.Id,
15+
string(kv.Plan),
16+
string(kv.Region),
17+
string(kv.Status),
18+
)
19+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package service
1+
package types
22

33
import (
44
"fmt"
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,84 @@
1-
package service_test
1+
package types_test
22

33
import (
44
"testing"
55

6+
"github.com/render-oss/cli/pkg/types"
67
"github.com/stretchr/testify/assert"
78
"github.com/stretchr/testify/require"
8-
9-
service "github.com/render-oss/cli/pkg/types/service"
109
)
1110

1211
func TestParseIPAllowListEntry(t *testing.T) {
1312
t.Run("parses cidr with description", func(t *testing.T) {
14-
cidr, desc, err := service.ParseIPAllowListEntry("cidr=10.0.0.0/8,description=Internal")
13+
cidr, desc, err := types.ParseIPAllowListEntry("cidr=10.0.0.0/8,description=Internal")
1514
require.NoError(t, err)
1615
assert.Equal(t, "10.0.0.0/8", cidr)
1716
assert.Equal(t, "Internal", desc)
1817
})
1918

2019
t.Run("parses cidr without description", func(t *testing.T) {
21-
cidr, desc, err := service.ParseIPAllowListEntry("cidr=10.0.0.0/8")
20+
cidr, desc, err := types.ParseIPAllowListEntry("cidr=10.0.0.0/8")
2221
require.NoError(t, err)
2322
assert.Equal(t, "10.0.0.0/8", cidr)
2423
assert.Equal(t, "", desc)
2524
})
2625

2726
t.Run("handles IPv6 CIDR", func(t *testing.T) {
28-
cidr, desc, err := service.ParseIPAllowListEntry("cidr=2001:db8::/32,description=IPv6 range")
27+
cidr, desc, err := types.ParseIPAllowListEntry("cidr=2001:db8::/32,description=IPv6 range")
2928
require.NoError(t, err)
3029
assert.Equal(t, "2001:db8::/32", cidr)
3130
assert.Equal(t, "IPv6 range", desc)
3231
})
3332

3433
t.Run("rejects malformed input missing cidr key", func(t *testing.T) {
35-
_, _, err := service.ParseIPAllowListEntry("malformed")
34+
_, _, err := types.ParseIPAllowListEntry("malformed")
3635
require.Error(t, err)
3736
assert.Contains(t, err.Error(), "must start with cidr=")
3837
})
3938

4039
t.Run("rejects empty cidr value", func(t *testing.T) {
41-
_, _, err := service.ParseIPAllowListEntry("cidr=")
40+
_, _, err := types.ParseIPAllowListEntry("cidr=")
4241
require.Error(t, err)
4342
assert.Contains(t, err.Error(), "cidr value is empty")
4443
})
4544

4645
t.Run("rejects empty cidr value with description", func(t *testing.T) {
47-
_, _, err := service.ParseIPAllowListEntry("cidr=,description=foo")
46+
_, _, err := types.ParseIPAllowListEntry("cidr=,description=foo")
4847
require.Error(t, err)
4948
assert.Contains(t, err.Error(), "cidr value is empty")
5049
})
5150

5251
t.Run("rejects invalid CIDR", func(t *testing.T) {
53-
_, _, err := service.ParseIPAllowListEntry("cidr=not-a-cidr")
52+
_, _, err := types.ParseIPAllowListEntry("cidr=not-a-cidr")
5453
require.Error(t, err)
5554
assert.Contains(t, err.Error(), "invalid CIDR")
5655
})
5756

5857
t.Run("rejects IP without prefix length", func(t *testing.T) {
59-
_, _, err := service.ParseIPAllowListEntry("cidr=10.0.0.1")
58+
_, _, err := types.ParseIPAllowListEntry("cidr=10.0.0.1")
6059
require.Error(t, err)
6160
assert.Contains(t, err.Error(), "invalid CIDR")
6261
})
6362
}
6463

6564
func TestFormatIPAllowListEntry(t *testing.T) {
6665
t.Run("formats cidr with description", func(t *testing.T) {
67-
result := service.FormatIPAllowListEntry("10.0.0.0/8", "Internal")
66+
result := types.FormatIPAllowListEntry("10.0.0.0/8", "Internal")
6867
assert.Equal(t, "cidr=10.0.0.0/8,description=Internal", result)
6968
})
7069

7170
t.Run("formats cidr without description", func(t *testing.T) {
72-
result := service.FormatIPAllowListEntry("10.0.0.0/8", "")
71+
result := types.FormatIPAllowListEntry("10.0.0.0/8", "")
7372
assert.Equal(t, "cidr=10.0.0.0/8", result)
7473
})
7574

7675
t.Run("formats IPv6 cidr with description", func(t *testing.T) {
77-
result := service.FormatIPAllowListEntry("2001:db8::/32", "IPv6 range")
76+
result := types.FormatIPAllowListEntry("2001:db8::/32", "IPv6 range")
7877
assert.Equal(t, "cidr=2001:db8::/32,description=IPv6 range", result)
7978
})
8079

8180
t.Run("formats IPv6 cidr without description", func(t *testing.T) {
82-
result := service.FormatIPAllowListEntry("2001:db8::/32", "")
81+
result := types.FormatIPAllowListEntry("2001:db8::/32", "")
8382
assert.Equal(t, "cidr=2001:db8::/32", result)
8483
})
8584
}

pkg/types/service/servicecreate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func (s ServiceCreateInput) validateNormalized(isInteractive bool) error {
127127
}
128128

129129
for _, entry := range s.IPAllowList {
130-
if _, _, err := ParseIPAllowListEntry(entry); err != nil {
130+
if _, _, err := types.ParseIPAllowListEntry(entry); err != nil {
131131
return err
132132
}
133133
}

pkg/types/service/serviceupdate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func (s ServiceUpdateInput) ValidateUpdate() error {
103103
}
104104
}
105105
for _, entry := range s.IPAllowList {
106-
if _, _, err := ParseIPAllowListEntry(entry); err != nil {
106+
if _, _, err := types.ParseIPAllowListEntry(entry); err != nil {
107107
return err
108108
}
109109
}

0 commit comments

Comments
 (0)