From c49001b41269174af53289ececf5243c6f5f2b53 Mon Sep 17 00:00:00 2001 From: mcfarlm3 <58636946+mcfarlm3@users.noreply.github.com> Date: Fri, 8 Oct 2021 14:08:44 -0700 Subject: [PATCH] feat: added functionality for `replication update` command (#299) * feat: added functionality for replication update command * refactor: changed replication update usage text for clarity * fix: added closing bracket back in * chore: ran make fmt --- clients/replication/replication.go | 42 +++++++++++++++++++++++++ cmd/influx/replication.go | 49 +++++++++++++++++++++++++++--- 2 files changed, 86 insertions(+), 5 deletions(-) diff --git a/clients/replication/replication.go b/clients/replication/replication.go index 14ed127..7d014c7 100644 --- a/clients/replication/replication.go +++ b/clients/replication/replication.go @@ -104,6 +104,48 @@ func (c Client) List(ctx context.Context, params *ListParams) error { return c.printReplication(printOpts) } +type UpdateParams struct { + ReplicationID string + Name string + Description string + RemoteID string + RemoteBucketID string + MaxQueueSize int64 +} + +func (c Client) Update(ctx context.Context, params *UpdateParams) error { + // build request + body := api.ReplicationUpdateRequest{} + + if params.Name != "" { + body.SetName(params.Name) + } + + if params.Description != "" { + body.SetDescription(params.Description) + } + + if params.RemoteID != "" { + body.SetRemoteID(params.RemoteID) + } + + if params.RemoteBucketID != "" { + body.SetRemoteBucketID(params.RemoteBucketID) + } + + if params.MaxQueueSize != 0 { + body.SetMaxQueueSizeBytes(params.MaxQueueSize) + } + + // send patch request + res, err := c.PatchReplicationByID(ctx, params.ReplicationID).ReplicationUpdateRequest(body).Execute() + if err != nil { + return fmt.Errorf("failed to update replication stream %q: %w", params.ReplicationID, err) + } + // print updated replication stream info + return c.printReplication(printReplicationOpts{replication: &res}) +} + func (c Client) Delete(ctx context.Context, replicationID string) error { // get replication stream via ID connection, err := c.GetReplicationByID(ctx, replicationID).Execute() diff --git a/cmd/influx/replication.go b/cmd/influx/replication.go index 6e64b99..853cda9 100644 --- a/cmd/influx/replication.go +++ b/cmd/influx/replication.go @@ -1,8 +1,6 @@ package main import ( - "fmt" - "github.com/influxdata/influx-cli/v2/clients/replication" "github.com/influxdata/influx-cli/v2/pkg/cli/middleware" "github.com/urfave/cli" @@ -172,13 +170,54 @@ func newReplicationListCmd() cli.Command { } func newReplicationUpdateCmd() cli.Command { + var params replication.UpdateParams return cli.Command{ Name: "update", Usage: "Update an existing replication stream", Before: middleware.WithBeforeFns(withCli(), withApi(true), middleware.NoArgs), - Flags: commonFlags(), - Action: func(ctx *cli.Context) { - fmt.Println("replication update command was called") + Flags: append( + commonFlags(), + &cli.StringFlag{ + Name: "id, i", + Usage: "ID of the replication stream to be updated", + Required: true, + Destination: ¶ms.ReplicationID, + }, + &cli.StringFlag{ + Name: "name, n", + Usage: "New name for the replication stream", + Destination: ¶ms.Name, + }, + &cli.StringFlag{ + Name: "description, d", + Usage: "New description for the replication stream", + Destination: ¶ms.Description, + }, + &cli.StringFlag{ + Name: "remote-id", + Usage: "New ID of remote connection the replication stream should send data to", + Destination: ¶ms.RemoteID, + }, + &cli.StringFlag{ + Name: "remote-bucket", + Usage: "New ID of remote bucket that data should be replicated to", + Destination: ¶ms.RemoteBucketID, + }, + &cli.Int64Flag{ + Name: "max-queue-bytes", + Usage: "New max queue size in bytes", + Destination: ¶ms.MaxQueueSize, + }, + ), + Action: func(ctx *cli.Context) error { + api := getAPI(ctx) + + client := replication.Client{ + CLI: getCLI(ctx), + ReplicationsApi: api.ReplicationsApi, + } + + return client.Update(getContext(ctx), ¶ms) }, } }