Skip to content

Commit

Permalink
added elasticsearch
Browse files Browse the repository at this point in the history
  • Loading branch information
simisoft-exo committed Sep 12, 2024
1 parent 96f403c commit 435139f
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 2 deletions.
4 changes: 2 additions & 2 deletions cmd/dbaas_external_endpoint_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@ func (c *dbaasExternalEndpointCreateCmd) cmdRun(cmd *cobra.Command, args []strin
switch c.Type {
case "datadog":
return c.createDatadog(cmd, args)
// case "elasticsearch":
// return c.createElasticsearch(cmd, args)
case "opensearch":
return c.createOpensearch(cmd, args)
case "elasticsearch":
return c.createElasticsearch(cmd, args)
// case "prometheus":
// return c.createPrometheus(cmd, args)
// case "rsyslog":
Expand Down
59 changes: 59 additions & 0 deletions cmd/dbaas_external_endpoint_create_elasticsearch.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package cmd

import (
"fmt"
"github.com/spf13/cobra"
"github.com/exoscale/cli/pkg/account"
"github.com/exoscale/cli/pkg/globalstate"
v3 "github.com/exoscale/egoscale/v3"
)

func (c *dbaasExternalEndpointCreateCmd) createElasticsearch(_ *cobra.Command, _ []string) error {
ctx := gContext
client, err := switchClientZoneV3(ctx, globalstate.EgoscaleV3Client, v3.ZoneName(account.CurrentAccount.DefaultZone))
if err != nil {
return err
}

elasticsearchRequestPayload := v3.CreateDBAASExternalEndpointElasticsearchRequest{
Settings: &v3.DBAASEndpointElasticsearch{},
}

if c.ElasticsearchURL != "" {
elasticsearchRequestPayload.Settings.URL = c.ElasticsearchURL
}
if c.ElasticsearchIndexPrefix != "" {
elasticsearchRequestPayload.Settings.IndexPrefix = c.ElasticsearchIndexPrefix
}
if c.ElasticsearchCA != "" {
elasticsearchRequestPayload.Settings.CA = c.ElasticsearchCA
}
if c.ElasticsearchIndexDaysMax != 0 {
elasticsearchRequestPayload.Settings.IndexDaysMax = c.ElasticsearchIndexDaysMax
}
if c.ElasticsearchTimeout != 0 {
elasticsearchRequestPayload.Settings.Timeout = c.ElasticsearchTimeout
}

op, err := client.CreateDBAASExternalEndpointElasticsearch(ctx, c.Name, elasticsearchRequestPayload)
if err != nil {
return err
}

decorateAsyncOperation(fmt.Sprintf("Creating DBaaS ElasticSearch external Endpoint %q", c.Name), func() {
op, err = client.Wait(ctx, op, v3.OperationStateSuccess)
})
if err != nil {
return err
}

endpointID := op.Reference.ID.String()
if !globalstate.Quiet {
return (&dbaasExternalEndpointShowCmd{
cliCommandSettings: defaultCLICmdSettings(),
EndpointID: endpointID,
Type: "elasticsearch",
}).cmdRun(nil, nil)
}
return nil
}
2 changes: 2 additions & 0 deletions cmd/dbaas_external_endpoint_show.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ func (c *dbaasExternalEndpointShowCmd) cmdRun(cmd *cobra.Command, args []string)
return c.outputFunc(c.showDatadog())
case "opensearch":
return c.outputFunc(c.showOpensearch())
case "elasticsearch":
return c.outputFunc(c.showElasticsearch())
default:
return fmt.Errorf("unsupported external endpoint type %q", c.Type)
}
Expand Down
66 changes: 66 additions & 0 deletions cmd/dbaas_external_endpoint_show_elasticsearch.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package cmd

import (
"fmt"
"os"
"strconv"

"github.com/exoscale/cli/pkg/account"
"github.com/exoscale/cli/pkg/globalstate"
"github.com/exoscale/cli/pkg/output"
"github.com/exoscale/cli/table"
v3 "github.com/exoscale/egoscale/v3"
)

type elasticsearchOutput struct {
ID string `json:"id"`
Name string `json:"name"`
Type string `json:"type"`
Settings v3.DBAASEndpointElasticsearch `json:"settings"`
}

func (o *elasticsearchOutput) ToJSON() { output.JSON(o) }
func (o *elasticsearchOutput) ToText() { output.Text(o) }
func (o *elasticsearchOutput) ToTable() {
t := table.NewTable(os.Stdout)
t.SetHeader([]string{"Elasticsearch External Endpoint"})
defer t.Render()

t.Append([]string{"Endpoint ID", o.ID})
t.Append([]string{"Endpoint Name", o.Name})
t.Append([]string{"Endpoint Type", o.Type})

settings := o.Settings
t.Append([]string{"Elasticsearch URL", settings.URL})
t.Append([]string{"Index Prefix", settings.IndexPrefix})
t.Append([]string{"CA Certificate", truncateString(settings.CA, 50)})
t.Append([]string{"Index Days Max", strconv.FormatInt(settings.IndexDaysMax, 10)})
t.Append([]string{"Timeout", strconv.FormatInt(settings.Timeout, 10)})
}

func (c *dbaasExternalEndpointShowCmd) showElasticsearch() (output.Outputter, error) {
ctx := gContext
client, err := switchClientZoneV3(ctx, globalstate.EgoscaleV3Client, v3.ZoneName(account.CurrentAccount.DefaultZone))
if err != nil {
return nil, err
}

endpointUUID, err := v3.ParseUUID(c.EndpointID)
if err != nil {
return nil, fmt.Errorf("invalid endpoint ID: %w", err)
}

endpointResponse, err := client.GetDBAASExternalEndpointElasticsearch(ctx, endpointUUID)
if err != nil {
return nil, fmt.Errorf("error getting ElasticSearch external endpoint: %w", err)
}

output := &elasticsearchOutput{
ID: endpointResponse.ID.String(),
Name: endpointResponse.Name,
Type: string(endpointResponse.Type),
Settings: *endpointResponse.Settings,
}

return output, nil
}

0 comments on commit 435139f

Please sign in to comment.