diff --git a/.gitignore b/.gitignore index 3e7ae8e..174db53 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ .vscode vendor dist +.idea/ +cp.out +.DS_Store diff --git a/Makefile b/Makefile index 11a99f4..aa98965 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ generate: deps mockgen --destination ./internal/mocks/ssh_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/ssh_keys.go mockgen --destination ./internal/mocks/ssl_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/ssl_certificates.go mockgen --destination ./internal/mocks/load_balancers_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/load_balancers.go + mockgen --destination ./internal/mocks/load_balancer_clusters_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/load_balancer_clusters.go mockgen --destination ./internal/mocks/racks_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/racks.go mockgen --destination ./internal/mocks/invoices_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/invoices.go mockgen --destination ./internal/mocks/account_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/accounts.go @@ -24,6 +25,7 @@ generate: deps ./internal/mocks/hosts_service.go \ ./internal/mocks/ssl_service.go \ ./internal/mocks/load_balancers_service.go \ + ./internal/mocks/load_balancer_clusters_service.go \ ./internal/mocks/racks_service.go \ ./internal/mocks/invoices_service.go \ ./internal/mocks/account_service.go \ diff --git a/cmd/entities/load_balancer_clusters/get.go b/cmd/entities/load_balancer_clusters/get.go new file mode 100644 index 0000000..8242ecc --- /dev/null +++ b/cmd/entities/load_balancer_clusters/get.go @@ -0,0 +1,39 @@ +package loadbalancerclusters + +import ( + "github.com/serverscom/srvctl/cmd/base" + "github.com/spf13/cobra" +) + +func newGetCmd(cmdContext *base.CmdContext) *cobra.Command { + cmd := &cobra.Command{ + Use: "get ", + Short: "Get LB Cluster", + Long: "Get LB Cluster by id", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + manager := cmdContext.GetManager() + + ctx, cancel := base.SetupContext(cmd, manager) + defer cancel() + + base.SetupProxy(cmd, manager) + + scClient := cmdContext.GetClient().SetVerbose(manager.GetVerbose(cmd)).GetScClient() + + id := args[0] + lbCluster, err := scClient.LoadBalancerClusters.GetLoadBalancerCluster(ctx, id) + if err != nil { + return err + } + + if lbCluster != nil { + formatter := cmdContext.GetOrCreateFormatter(cmd) + return formatter.Format(lbCluster) + } + return nil + }, + } + + return cmd +} diff --git a/cmd/entities/load_balancer_clusters/list.go b/cmd/entities/load_balancer_clusters/list.go new file mode 100644 index 0000000..73f748d --- /dev/null +++ b/cmd/entities/load_balancer_clusters/list.go @@ -0,0 +1,21 @@ +package loadbalancerclusters + +import ( + serverscom "github.com/serverscom/serverscom-go-client/pkg" + "github.com/serverscom/srvctl/cmd/base" + "github.com/spf13/cobra" +) + +func newListCmd(cmdContext *base.CmdContext) *cobra.Command { + factory := func(verbose bool, args ...string) serverscom.Collection[serverscom.LoadBalancerCluster] { + scClient := cmdContext.GetClient().SetVerbose(verbose).GetScClient() + return scClient.LoadBalancerClusters.Collection() + } + + opts := base.NewListOptions( + &base.BaseListOptions[serverscom.LoadBalancerCluster]{}, + &base.SearchPatternOption[serverscom.LoadBalancerCluster]{}, + ) + + return base.NewListCmd("list", "lb-clusters", factory, cmdContext, opts...) +} diff --git a/cmd/entities/load_balancer_clusters/load_balancer_clusters.go b/cmd/entities/load_balancer_clusters/load_balancer_clusters.go new file mode 100644 index 0000000..38eef67 --- /dev/null +++ b/cmd/entities/load_balancer_clusters/load_balancer_clusters.go @@ -0,0 +1,38 @@ +package loadbalancerclusters + +import ( + "log" + + serverscom "github.com/serverscom/serverscom-go-client/pkg" + "github.com/serverscom/srvctl/cmd/base" + "github.com/serverscom/srvctl/internal/output/entities" + "github.com/spf13/cobra" +) + +func NewCmd(cmdContext *base.CmdContext) *cobra.Command { + lbClusterEntity, err := entities.Registry.GetEntityFromValue(serverscom.LoadBalancerCluster{}) + if err != nil { + log.Fatal(err) + } + entitiesMap := make(map[string]entities.EntityInterface) + entitiesMap["lb-clusters"] = lbClusterEntity + cmd := &cobra.Command{ + Use: "lb-clusters", + Short: "Manage LB Clusters", + PersistentPreRunE: base.CombinePreRunE( + base.CheckFormatterFlags(cmdContext, entitiesMap), + base.CheckEmptyContexts(cmdContext), + ), + Args: base.NoArgs, + Run: base.UsageRun, + } + + cmd.AddCommand( + newListCmd(cmdContext), + newGetCmd(cmdContext), + ) + + base.AddFormatFlags(cmd) + + return cmd +} diff --git a/cmd/entities/load_balancer_clusters/load_balancer_clusters_test.go b/cmd/entities/load_balancer_clusters/load_balancer_clusters_test.go new file mode 100644 index 0000000..cff1f84 --- /dev/null +++ b/cmd/entities/load_balancer_clusters/load_balancer_clusters_test.go @@ -0,0 +1,245 @@ +package loadbalancerclusters + +import ( + "errors" + "fmt" + "path/filepath" + "testing" + "time" + + . "github.com/onsi/gomega" + serverscom "github.com/serverscom/serverscom-go-client/pkg" + "github.com/serverscom/srvctl/cmd/testutils" + "github.com/serverscom/srvctl/internal/mocks" + "go.uber.org/mock/gomock" +) + +var ( + testId = "testId" + fixtureBasePath = filepath.Join("..", "..", "..", "testdata", "entities", "lb-clusters") + fixedTime = time.Date(2025, 1, 1, 12, 0, 0, 0, time.UTC) + testLbCluster = serverscom.LoadBalancerCluster{ + ID: testId, + Name: "test-lb-cluster", + LocationID: 1, + Status: "active", + Created: fixedTime, + Updated: fixedTime, + } +) + +func TestGetLoadBalancerClusterCmd(t *testing.T) { + testCases := []struct { + id string + name string + output string + expectedOutput []byte + expectError bool + }{ + { + name: "get LB Cluster in default format", + id: testId, + output: "", + expectedOutput: testutils.ReadFixture(filepath.Join(fixtureBasePath, "get.txt")), + }, + { + name: "get LB Cluster in JSON format", + id: testId, + output: "json", + expectedOutput: testutils.ReadFixture(filepath.Join(fixtureBasePath, "get.json")), + }, + { + name: "get LB Cluster in YAML format", + id: testId, + output: "yaml", + expectedOutput: testutils.ReadFixture(filepath.Join(fixtureBasePath, "get.yaml")), + }, + { + name: "get LB Cluster with error", + id: testId, + expectError: true, + }, + } + + mockCtrl := gomock.NewController(t) + defer mockCtrl.Finish() + + lbClustersServiceHandler := mocks.NewMockLoadBalancerClustersService(mockCtrl) + + scClient := serverscom.NewClientWithEndpoint("", "") + scClient.LoadBalancerClusters = lbClustersServiceHandler + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + g := NewWithT(t) + + var err error + if tc.expectError { + err = errors.New("some error") + } + lbClustersServiceHandler.EXPECT(). + GetLoadBalancerCluster(gomock.Any(), testId). + Return(&testLbCluster, err) + + testCmdContext := testutils.NewTestCmdContext(scClient) + lbClusterCmd := NewCmd(testCmdContext) + + args := []string{"lb-clusters", "get", fmt.Sprint(tc.id)} + if tc.output != "" { + args = append(args, "--output", tc.output) + } + + builder := testutils.NewTestCommandBuilder(). + WithCommand(lbClusterCmd). + WithArgs(args) + + cmd := builder.Build() + + err = cmd.Execute() + + if tc.expectError { + g.Expect(err).To(HaveOccurred()) + } else { + g.Expect(err).To(BeNil()) + g.Expect(builder.GetOutput()).To(BeEquivalentTo(string(tc.expectedOutput))) + } + }) + } +} + +func TestListLoadBalancerClustersCmd(t *testing.T) { + testLbCluster1 := testLbCluster + testLbCluster2 := testLbCluster + + testLbCluster1.ID += "1" + testLbCluster1.Name = "test-lb-cluster-1" + + testLbCluster2.ID += "2" + testLbCluster2.Name = "test-lb-cluster-2" + + testCases := []struct { + name string + output string + args []string + expectedOutput []byte + expectError bool + configureMock func(*mocks.MockCollection[serverscom.LoadBalancerCluster]) + }{ + { + name: "list all LB Clusters", + output: "json", + args: []string{"-A"}, + expectedOutput: testutils.ReadFixture(filepath.Join(fixtureBasePath, "list_all.json")), + configureMock: func(mock *mocks.MockCollection[serverscom.LoadBalancerCluster]) { + mock.EXPECT(). + Collect(gomock.Any()). + Return([]serverscom.LoadBalancerCluster{ + testLbCluster1, + testLbCluster2, + }, nil) + }, + }, + { + name: "list LB Clusters", + output: "json", + expectedOutput: testutils.ReadFixture(filepath.Join(fixtureBasePath, "list.json")), + configureMock: func(mock *mocks.MockCollection[serverscom.LoadBalancerCluster]) { + mock.EXPECT(). + List(gomock.Any()). + Return([]serverscom.LoadBalancerCluster{ + testLbCluster1, + }, nil) + }, + }, + { + name: "list LB Clusters with template", + args: []string{"--template", "{{range .}}Name: {{.Name}}\n{{end}}"}, + expectedOutput: testutils.ReadFixture(filepath.Join(fixtureBasePath, "list_template.txt")), + configureMock: func(mock *mocks.MockCollection[serverscom.LoadBalancerCluster]) { + mock.EXPECT(). + List(gomock.Any()). + Return([]serverscom.LoadBalancerCluster{ + testLbCluster1, + testLbCluster2, + }, nil) + }, + }, + { + name: "list LB Clusters with pageView", + args: []string{"--page-view"}, + expectedOutput: testutils.ReadFixture(filepath.Join(fixtureBasePath, "list_pageview.txt")), + configureMock: func(mock *mocks.MockCollection[serverscom.LoadBalancerCluster]) { + mock.EXPECT(). + List(gomock.Any()). + Return([]serverscom.LoadBalancerCluster{ + testLbCluster1, + testLbCluster2, + }, nil) + }, + }, + { + name: "list LB Clusters with error", + expectError: true, + configureMock: func(mock *mocks.MockCollection[serverscom.LoadBalancerCluster]) { + mock.EXPECT(). + List(gomock.Any()). + Return(nil, errors.New("some error")) + }, + }, + } + + mockCtrl := gomock.NewController(t) + defer mockCtrl.Finish() + + lbClustersServiceHandler := mocks.NewMockLoadBalancerClustersService(mockCtrl) + collectionHandler := mocks.NewMockCollection[serverscom.LoadBalancerCluster](mockCtrl) + + lbClustersServiceHandler.EXPECT(). + Collection(). + Return(collectionHandler). + AnyTimes() + + collectionHandler.EXPECT(). + SetParam(gomock.Any(), gomock.Any()). + Return(collectionHandler). + AnyTimes() + + scClient := serverscom.NewClientWithEndpoint("", "") + scClient.LoadBalancerClusters = lbClustersServiceHandler + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + g := NewWithT(t) + + if tc.configureMock != nil { + tc.configureMock(collectionHandler) + } + + testCmdContext := testutils.NewTestCmdContext(scClient) + lbClusterCmd := NewCmd(testCmdContext) + + args := []string{"lb-clusters", "list"} + if len(tc.args) > 0 { + args = append(args, tc.args...) + } + if tc.output != "" { + args = append(args, "--output", tc.output) + } + + builder := testutils.NewTestCommandBuilder(). + WithCommand(lbClusterCmd). + WithArgs(args) + + cmd := builder.Build() + + err := cmd.Execute() + + if tc.expectError { + g.Expect(err).To(HaveOccurred()) + } else { + g.Expect(err).To(BeNil()) + g.Expect(builder.GetOutput()).To(BeEquivalentTo(string(tc.expectedOutput))) + } + }) + } +} diff --git a/cmd/root.go b/cmd/root.go index 6c2ed63..7c7c08f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -10,6 +10,7 @@ import ( "github.com/serverscom/srvctl/cmd/entities/invoices" "github.com/serverscom/srvctl/cmd/entities/k8s" l2segments "github.com/serverscom/srvctl/cmd/entities/l2_segments" + loadbalancerclusters "github.com/serverscom/srvctl/cmd/entities/load_balancer_clusters" loadbalancers "github.com/serverscom/srvctl/cmd/entities/load_balancers" "github.com/serverscom/srvctl/cmd/entities/locations" networkpools "github.com/serverscom/srvctl/cmd/entities/network-pools" @@ -56,6 +57,7 @@ func NewRootCmd(version string) *cobra.Command { cmd.AddCommand(sshkeys.NewCmd(cmdContext)) cmd.AddCommand(hosts.NewCmd(cmdContext)) cmd.AddCommand(ssl.NewCmd(cmdContext)) + cmd.AddCommand(loadbalancerclusters.NewCmd(cmdContext)) cmd.AddCommand(loadbalancers.NewCmd(cmdContext)) cmd.AddCommand(racks.NewCmd(cmdContext)) cmd.AddCommand(invoices.NewCmd(cmdContext)) diff --git a/go.mod b/go.mod index c5fe7f1..872059d 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/creack/pty v1.1.24 github.com/jmespath/go-jmespath v0.4.0 github.com/onsi/gomega v1.38.0 - github.com/serverscom/serverscom-go-client v1.0.20 + github.com/serverscom/serverscom-go-client v1.0.21 github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.7 github.com/spf13/viper v1.20.1 diff --git a/go.sum b/go.sum index 271a58b..e5b5143 100644 --- a/go.sum +++ b/go.sum @@ -43,8 +43,8 @@ github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/f github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.10.0 h1:FM8Cv6j2KqIhM2ZK7HZjm4mpj9NBktLgowT1aN9q5Cc= github.com/sagikazarmark/locafero v0.10.0/go.mod h1:Ieo3EUsjifvQu4NZwV5sPd4dwvu0OCgEQV7vjc9yDjw= -github.com/serverscom/serverscom-go-client v1.0.20 h1:a7LwhBvJJivyxnxbzDO7i3OVYe904oYHV6lcQwdoXYg= -github.com/serverscom/serverscom-go-client v1.0.20/go.mod h1:/Nf+XygKOxm19Sl2gvMzT55O4X+tWDkj/UM4mjzfKgM= +github.com/serverscom/serverscom-go-client v1.0.21 h1:7L3Mo56M9yprj33iCxeP/iaxnQfCfiV0OwOqnCqIt1I= +github.com/serverscom/serverscom-go-client v1.0.21/go.mod h1:/Nf+XygKOxm19Sl2gvMzT55O4X+tWDkj/UM4mjzfKgM= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= diff --git a/internal/mocks/hosts_service.go b/internal/mocks/hosts_service.go index 80b9f12..8602898 100644 --- a/internal/mocks/hosts_service.go +++ b/internal/mocks/hosts_service.go @@ -335,6 +335,49 @@ func (mr *MockHostsServiceMockRecorder) GetSBMServer(ctx, id any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSBMServer", reflect.TypeOf((*MockHostsService)(nil).GetSBMServer), ctx, id) } +// KubernetesBaremetalNodeDriveSlots mocks base method. +func (m *MockHostsService) KubernetesBaremetalNodeDriveSlots(id string) serverscom.Collection[serverscom.HostDriveSlot] { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "KubernetesBaremetalNodeDriveSlots", id) + ret0, _ := ret[0].(serverscom.Collection[serverscom.HostDriveSlot]) + return ret0 +} + +// KubernetesBaremetalNodeDriveSlots indicates an expected call of KubernetesBaremetalNodeDriveSlots. +func (mr *MockHostsServiceMockRecorder) KubernetesBaremetalNodeDriveSlots(id any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "KubernetesBaremetalNodeDriveSlots", reflect.TypeOf((*MockHostsService)(nil).KubernetesBaremetalNodeDriveSlots), id) +} + +// KubernetesBaremetalNodeNetworks mocks base method. +func (m *MockHostsService) KubernetesBaremetalNodeNetworks(id string) serverscom.Collection[serverscom.Network] { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "KubernetesBaremetalNodeNetworks", id) + ret0, _ := ret[0].(serverscom.Collection[serverscom.Network]) + return ret0 +} + +// KubernetesBaremetalNodeNetworks indicates an expected call of KubernetesBaremetalNodeNetworks. +func (mr *MockHostsServiceMockRecorder) KubernetesBaremetalNodeNetworks(id any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "KubernetesBaremetalNodeNetworks", reflect.TypeOf((*MockHostsService)(nil).KubernetesBaremetalNodeNetworks), id) +} + +// KubernetesBaremetalNodePowerFeeds mocks base method. +func (m *MockHostsService) KubernetesBaremetalNodePowerFeeds(ctx context.Context, id string) ([]serverscom.HostPowerFeed, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "KubernetesBaremetalNodePowerFeeds", ctx, id) + ret0, _ := ret[0].([]serverscom.HostPowerFeed) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// KubernetesBaremetalNodePowerFeeds indicates an expected call of KubernetesBaremetalNodePowerFeeds. +func (mr *MockHostsServiceMockRecorder) KubernetesBaremetalNodePowerFeeds(ctx, id any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "KubernetesBaremetalNodePowerFeeds", reflect.TypeOf((*MockHostsService)(nil).KubernetesBaremetalNodePowerFeeds), ctx, id) +} + // ListDedicatedServers mocks base method. func (m *MockHostsService) ListDedicatedServers() serverscom.Collection[serverscom.DedicatedServer] { m.ctrl.T.Helper() diff --git a/internal/mocks/load_balancer_clusters_service.go b/internal/mocks/load_balancer_clusters_service.go new file mode 100644 index 0000000..7427af5 --- /dev/null +++ b/internal/mocks/load_balancer_clusters_service.go @@ -0,0 +1,71 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./vendor/github.com/serverscom/serverscom-go-client/pkg/load_balancer_clusters.go +// +// Generated by this command: +// +// mockgen --destination ./internal/mocks/load_balancer_clusters_service.go --package=mocks --source ./vendor/github.com/serverscom/serverscom-go-client/pkg/load_balancer_clusters.go +// + +// Package mocks is a generated GoMock package. +package mocks + +import ( + context "context" + reflect "reflect" + + serverscom "github.com/serverscom/serverscom-go-client/pkg" + gomock "go.uber.org/mock/gomock" +) + +// MockLoadBalancerClustersService is a mock of LoadBalancerClustersService interface. +type MockLoadBalancerClustersService struct { + ctrl *gomock.Controller + recorder *MockLoadBalancerClustersServiceMockRecorder + isgomock struct{} +} + +// MockLoadBalancerClustersServiceMockRecorder is the mock recorder for MockLoadBalancerClustersService. +type MockLoadBalancerClustersServiceMockRecorder struct { + mock *MockLoadBalancerClustersService +} + +// NewMockLoadBalancerClustersService creates a new mock instance. +func NewMockLoadBalancerClustersService(ctrl *gomock.Controller) *MockLoadBalancerClustersService { + mock := &MockLoadBalancerClustersService{ctrl: ctrl} + mock.recorder = &MockLoadBalancerClustersServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockLoadBalancerClustersService) EXPECT() *MockLoadBalancerClustersServiceMockRecorder { + return m.recorder +} + +// Collection mocks base method. +func (m *MockLoadBalancerClustersService) Collection() serverscom.Collection[serverscom.LoadBalancerCluster] { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Collection") + ret0, _ := ret[0].(serverscom.Collection[serverscom.LoadBalancerCluster]) + return ret0 +} + +// Collection indicates an expected call of Collection. +func (mr *MockLoadBalancerClustersServiceMockRecorder) Collection() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Collection", reflect.TypeOf((*MockLoadBalancerClustersService)(nil).Collection)) +} + +// GetLoadBalancerCluster mocks base method. +func (m *MockLoadBalancerClustersService) GetLoadBalancerCluster(ctx context.Context, id string) (*serverscom.LoadBalancerCluster, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetLoadBalancerCluster", ctx, id) + ret0, _ := ret[0].(*serverscom.LoadBalancerCluster) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetLoadBalancerCluster indicates an expected call of GetLoadBalancerCluster. +func (mr *MockLoadBalancerClustersServiceMockRecorder) GetLoadBalancerCluster(ctx, id any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetLoadBalancerCluster", reflect.TypeOf((*MockLoadBalancerClustersService)(nil).GetLoadBalancerCluster), ctx, id) +} diff --git a/internal/output/entities/init.go b/internal/output/entities/init.go index 8246b46..a5244a8 100644 --- a/internal/output/entities/init.go +++ b/internal/output/entities/init.go @@ -15,6 +15,7 @@ func init() { RegisterSSLCertDefinition() RegisterSSLCertCustomDefinition() RegisterSSLCertLeDefinition() + RegisterLoadBalancerClusterDefinition() RegisterLoadBalancerDefinitions() RegisterRackDefinition() RegisterInvoiceDefinition() diff --git a/internal/output/entities/load_balancer_clusters.go b/internal/output/entities/load_balancer_clusters.go new file mode 100644 index 0000000..954c7a1 --- /dev/null +++ b/internal/output/entities/load_balancer_clusters.go @@ -0,0 +1,29 @@ +package entities + +import ( + "log" + "reflect" + + serverscom "github.com/serverscom/serverscom-go-client/pkg" +) + +var ( + LoadBalancerClusterType = reflect.TypeOf(serverscom.LoadBalancerCluster{}) +) + +func RegisterLoadBalancerClusterDefinition() { + lbClusterEntity := &Entity{ + fields: []Field{ + {ID: "ID", Name: "ID", Path: "ID", ListHandlerFunc: stringHandler, PageViewHandlerFunc: stringHandler, Default: true}, + {ID: "Name", Name: "Name", Path: "Name", ListHandlerFunc: stringHandler, PageViewHandlerFunc: stringHandler, Default: true}, + {ID: "Status", Name: "Status", Path: "Status", ListHandlerFunc: stringHandler, PageViewHandlerFunc: stringHandler, Default: true}, + {ID: "LocationID", Name: "LocationID", Path: "LocationID", ListHandlerFunc: stringHandler, PageViewHandlerFunc: stringHandler, Default: true}, + {ID: "Created", Name: "Created", Path: "Created", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, + {ID: "Updated", Name: "Updated", Path: "Updated", ListHandlerFunc: timeHandler, PageViewHandlerFunc: timeHandler, Default: true}, + }, + eType: LoadBalancerClusterType, + } + if err := Registry.Register(lbClusterEntity); err != nil { + log.Fatal(err) + } +} diff --git a/testdata/entities/lb-clusters/get.json b/testdata/entities/lb-clusters/get.json new file mode 100644 index 0000000..a42aa96 --- /dev/null +++ b/testdata/entities/lb-clusters/get.json @@ -0,0 +1,8 @@ +{ + "id": "testId", + "name": "test-lb-cluster", + "location_id": 1, + "status": "active", + "created_at": "2025-01-01T12:00:00Z", + "updated_at": "2025-01-01T12:00:00Z" +} \ No newline at end of file diff --git a/testdata/entities/lb-clusters/get.txt b/testdata/entities/lb-clusters/get.txt new file mode 100644 index 0000000..9572b01 --- /dev/null +++ b/testdata/entities/lb-clusters/get.txt @@ -0,0 +1,2 @@ +ID Name Status LocationID Created Updated +testId test-lb-cluster active 1 2025-01-01T12:00:00Z 2025-01-01T12:00:00Z diff --git a/testdata/entities/lb-clusters/get.yaml b/testdata/entities/lb-clusters/get.yaml new file mode 100644 index 0000000..66461f2 --- /dev/null +++ b/testdata/entities/lb-clusters/get.yaml @@ -0,0 +1,6 @@ +id: testId +name: test-lb-cluster +locationid: 1 +status: active +created: 2025-01-01T12:00:00Z +updated: 2025-01-01T12:00:00Z diff --git a/testdata/entities/lb-clusters/list.json b/testdata/entities/lb-clusters/list.json new file mode 100644 index 0000000..9185556 --- /dev/null +++ b/testdata/entities/lb-clusters/list.json @@ -0,0 +1,10 @@ +[ + { + "id": "testId1", + "name": "test-lb-cluster-1", + "location_id": 1, + "status": "active", + "created_at": "2025-01-01T12:00:00Z", + "updated_at": "2025-01-01T12:00:00Z" + } +] \ No newline at end of file diff --git a/testdata/entities/lb-clusters/list_all.json b/testdata/entities/lb-clusters/list_all.json new file mode 100644 index 0000000..46e6083 --- /dev/null +++ b/testdata/entities/lb-clusters/list_all.json @@ -0,0 +1,18 @@ +[ + { + "id": "testId1", + "name": "test-lb-cluster-1", + "location_id": 1, + "status": "active", + "created_at": "2025-01-01T12:00:00Z", + "updated_at": "2025-01-01T12:00:00Z" + }, + { + "id": "testId2", + "name": "test-lb-cluster-2", + "location_id": 1, + "status": "active", + "created_at": "2025-01-01T12:00:00Z", + "updated_at": "2025-01-01T12:00:00Z" + } +] \ No newline at end of file diff --git a/testdata/entities/lb-clusters/list_pageview.txt b/testdata/entities/lb-clusters/list_pageview.txt new file mode 100644 index 0000000..c4c2257 --- /dev/null +++ b/testdata/entities/lb-clusters/list_pageview.txt @@ -0,0 +1,13 @@ +ID: testId1 +Name: test-lb-cluster-1 +Status: active +LocationID: 1 +Created: 2025-01-01T12:00:00Z +Updated: 2025-01-01T12:00:00Z +--- +ID: testId2 +Name: test-lb-cluster-2 +Status: active +LocationID: 1 +Created: 2025-01-01T12:00:00Z +Updated: 2025-01-01T12:00:00Z diff --git a/testdata/entities/lb-clusters/list_template.txt b/testdata/entities/lb-clusters/list_template.txt new file mode 100644 index 0000000..7a2bfc3 --- /dev/null +++ b/testdata/entities/lb-clusters/list_template.txt @@ -0,0 +1,2 @@ +Name: test-lb-cluster-1 +Name: test-lb-cluster-2