Skip to content

Commit 7e1139a

Browse files
committed
refactor(opensearch): use custom type for local references
1 parent 44ef254 commit 7e1139a

File tree

3 files changed

+37
-15
lines changed

3 files changed

+37
-15
lines changed

create/opensearch.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package create
22

33
import (
44
"context"
5+
"fmt"
56
"strings"
67

78
"github.com/alecthomas/kong"
@@ -20,7 +21,7 @@ type openSearchCmd struct {
2021
ClusterType storage.OpenSearchClusterType `placeholder:"${opensearch_cluster_type_default}" help:"Type of cluster. Available types: ${opensearch_cluster_types}"`
2122
MachineType string `placeholder:"${opensearch_machine_type_default}" help:"Defines the sizing of an OpenSearch instance. Available types: ${opensearch_machine_types}"`
2223
AllowedCidrs []meta.IPv4CIDR `placeholder:"203.0.113.1/32" help:"IP addresses allowed to connect to the public endpoint."`
23-
BucketUsers []string `placeholder:"user1,user2" help:"BucketUsers specify the users who have read access to the OpenSearch snapshots bucket."`
24+
BucketUsers []LocalReference `placeholder:"user1,user2" help:"BucketUsers specify the users who have read access to the OpenSearch snapshots bucket."`
2425
PublicNetworking *bool `negatable:"" help:"Enable or disable public networking. Enabled by default."`
2526

2627
// Deprecated Flags
@@ -78,6 +79,11 @@ func (cmd *openSearchCmd) newOpenSearch(namespace string) (*storage.OpenSearch,
7879
publicNetworking = cmd.PublicNetworkingEnabled
7980
}
8081

82+
bucketUsers := make([]meta.LocalReference, 0, len(cmd.BucketUsers))
83+
for _, user := range cmd.BucketUsers {
84+
bucketUsers = append(bucketUsers, user.LocalReference)
85+
}
86+
8187
openSearch := &storage.OpenSearch{
8288
ObjectMeta: metav1.ObjectMeta{
8389
Name: name,
@@ -95,7 +101,7 @@ func (cmd *openSearchCmd) newOpenSearch(namespace string) (*storage.OpenSearch,
95101
MachineType: infra.NewMachineType(cmd.MachineType),
96102
ClusterType: cmd.ClusterType,
97103
AllowedCIDRs: cmd.AllowedCidrs,
98-
BucketUsers: LocalReferences(cmd.BucketUsers),
104+
BucketUsers: bucketUsers,
99105
PublicNetworkingEnabled: publicNetworking,
100106
},
101107
},
@@ -104,12 +110,19 @@ func (cmd *openSearchCmd) newOpenSearch(namespace string) (*storage.OpenSearch,
104110
return openSearch, nil
105111
}
106112

107-
// LocalReferences converts a slice of strings to []meta.LocalReference.
108-
func LocalReferences(s []string) []meta.LocalReference {
109-
references := make([]meta.LocalReference, len(s))
110-
for i, user := range s {
111-
references[i] = meta.LocalReference{Name: user}
113+
// LocalReference references another object in the same namespace.
114+
type LocalReference struct {
115+
meta.LocalReference
116+
}
117+
118+
// UnmarshalText parses a local reference from a string.
119+
func (r *LocalReference) UnmarshalText(text []byte) error {
120+
name := strings.TrimSpace(string(text))
121+
if name == "" {
122+
return fmt.Errorf("reference unmarshal error: got %q", text)
112123
}
113124

114-
return references
125+
r.Name = name
126+
127+
return nil
115128
}

update/opensearch.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ import (
1515

1616
type openSearchCmd struct {
1717
resourceCmd
18-
MachineType *string `help:"Configures OpenSearch to use a specified machine type." placeholder:"nine-search-m"`
19-
AllowedCidrs *[]meta.IPv4CIDR `help:"IP addresses allowed to connect to the cluster. These restrictions do not apply for service connections." placeholder:"203.0.113.1/32"`
20-
BucketUsers *[]string `help:"Users who have read access to the OpenSearch snapshots bucket." placeholder:"user1,user2"`
21-
PublicNetworking *bool `negatable:"" help:"Enable or disable public networking."`
18+
MachineType *string `help:"Configures OpenSearch to use a specified machine type." placeholder:"nine-search-m"`
19+
AllowedCidrs *[]meta.IPv4CIDR `help:"IP addresses allowed to connect to the cluster. These restrictions do not apply for service connections." placeholder:"203.0.113.1/32"`
20+
BucketUsers *[]create.LocalReference `help:"Users who have read access to the OpenSearch snapshots bucket." placeholder:"user1,user2"`
21+
PublicNetworking *bool `negatable:"" help:"Enable or disable public networking."`
2222

2323
// Deprecated Flags
2424
PublicNetworkingEnabled *bool `hidden:"" help:"If public networking is \"false\", it is only possible to access the service by configuring a service connection."`
@@ -50,7 +50,12 @@ func (cmd *openSearchCmd) applyUpdates(os *storage.OpenSearch) error {
5050
os.Spec.ForProvider.AllowedCIDRs = *cmd.AllowedCidrs
5151
}
5252
if cmd.BucketUsers != nil {
53-
os.Spec.ForProvider.BucketUsers = create.LocalReferences(*cmd.BucketUsers)
53+
bucketUsers := make([]meta.LocalReference, 0, len(*cmd.BucketUsers))
54+
for _, user := range *cmd.BucketUsers {
55+
bucketUsers = append(bucketUsers, user.LocalReference)
56+
}
57+
58+
os.Spec.ForProvider.BucketUsers = bucketUsers
5459
}
5560

5661
publicNetworking := cmd.PublicNetworking

update/opensearch_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
meta "github.com/ninech/apis/meta/v1alpha1"
99
storage "github.com/ninech/apis/storage/v1alpha1"
1010
"github.com/ninech/nctl/api"
11+
"github.com/ninech/nctl/create"
1112
"github.com/ninech/nctl/internal/test"
1213
"github.com/stretchr/testify/require"
1314
"k8s.io/utils/ptr"
@@ -55,8 +56,11 @@ func TestOpenSearch(t *testing.T) {
5556
},
5657
},
5758
{
58-
name: "bucket-users-set",
59-
update: openSearchCmd{BucketUsers: &[]string{"user1", "user2"}},
59+
name: "bucket-users-set",
60+
update: openSearchCmd{BucketUsers: &[]create.LocalReference{
61+
{LocalReference: meta.LocalReference{Name: "user1"}},
62+
{LocalReference: meta.LocalReference{Name: "user2"}},
63+
}},
6064
want: storage.OpenSearchParameters{
6165
BucketUsers: []meta.LocalReference{{Name: "user1"}, {Name: "user2"}},
6266
},

0 commit comments

Comments
 (0)