Skip to content

Commit

Permalink
[VPC-4215] Support PIA Get BGP auth key and regenerate service key (#…
Browse files Browse the repository at this point in the history
…1662)

* Support get service key operation

* add get bgpauth details and regenerate service key

* update godo version

* add integration test

* fix command example

* rm service key code

* fix test

* rm service key pending code
  • Loading branch information
guptado authored Feb 19, 2025
1 parent 7a3b683 commit 43eedfa
Show file tree
Hide file tree
Showing 14 changed files with 546 additions and 9 deletions.
54 changes: 54 additions & 0 deletions commands/displayers/partner_interconnect_attachment.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,57 @@ func (v *PartnerInterconnectAttachmentRoute) KV() []map[string]any {

return out
}

type PartnerInterconnectAttachmentRegenerateServiceKey struct {
RegenerateKey do.PartnerInterconnectAttachmentRegenerateServiceKey
}

var _ Displayable = &PartnerInterconnectAttachmentRegenerateServiceKey{}

func (v *PartnerInterconnectAttachmentRegenerateServiceKey) JSON(out io.Writer) error {
return writeJSON(v.RegenerateKey, out)
}

func (v *PartnerInterconnectAttachmentRegenerateServiceKey) Cols() []string {
return []string{}
}

func (v *PartnerInterconnectAttachmentRegenerateServiceKey) ColMap() map[string]string {
return map[string]string{}
}

func (v *PartnerInterconnectAttachmentRegenerateServiceKey) KV() []map[string]any {
out := make([]map[string]any, 0, 1)

o := map[string]any{}
out = append(out, o)
return out
}

type PartnerInterconnectAttachmentBgpAuthKey struct {
Key do.PartnerInterconnectAttachmentBGPAuthKey
}

var _ Displayable = &PartnerInterconnectAttachmentBgpAuthKey{}

func (v *PartnerInterconnectAttachmentBgpAuthKey) JSON(out io.Writer) error {
return writeJSON(v.Key, out)
}

func (v *PartnerInterconnectAttachmentBgpAuthKey) Cols() []string {
return []string{"Value"}
}

func (v *PartnerInterconnectAttachmentBgpAuthKey) ColMap() map[string]string {
return map[string]string{"Value": "Value"}
}

func (v *PartnerInterconnectAttachmentBgpAuthKey) KV() []map[string]any {
out := make([]map[string]any, 0, 1)

o := map[string]any{
"Value": v.Key.BgpAuthKey.Value,
}
out = append(out, o)
return out
}
64 changes: 64 additions & 0 deletions commands/partner_interconnect_attachment.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,20 @@ vpc-ids "270a76ed-1bb7-4c5d-a6a5-e863de086940"`
cmdPartnerIARouteList.Example = `The following example lists the Network Interconnect Attachments on your account :` +
` doctl network --type "partner" interconnect-attachment list-routes --format ID,Cidr `

cmdGetPartnerIARegenerateServiceKey := CmdBuilder(cmd, RunPartnerInterconnectAttachmentRegenerateServiceKey, "regenerate-service-key <interconnect-attachment-id>",
"Regenerates a Service key of Partner Interconnect Attachment", "Regenerates information about a Service key of Partner Interconnect Attachment", Writer,
aliasOpt("regen-service-key"), displayerType(&displayers.PartnerInterconnectAttachmentRegenerateServiceKey{}))
AddStringFlag(cmdGetPartnerIARegenerateServiceKey, doctl.ArgInterconnectAttachmentType, "", "partner", "Specify interconnect attachment type (e.g., partner)")
cmdGetPartnerIARegenerateServiceKey.Example = `The following example retrieves information about a Service key of Partner Interconnect Attachment with the ID ` + "`" + `f81d4fae-7dec-11d0-a765-00a0c91e6bf6` + "`" +
`: doctl network --type "partner" interconnect-attachment regenerate-service-key f81d4fae-7dec-11d0-a765-00a0c91e6bf6`

cmdGetPartnerIAGetBGPAuthKey := CmdBuilder(cmd, RunGetPartnerInterconnectAttachmentBGPAuthKey, "get-bgp-auth-key <interconnect-attachment-id>",
"Retrieves a BGP Auth key of Partner Interconnect Attachment", "Retrieves information about a BGP Auth key of Partner Interconnect Attachment", Writer,
aliasOpt("g-bgp-auth-key"), displayerType(&displayers.PartnerInterconnectAttachmentBgpAuthKey{}))
AddStringFlag(cmdGetPartnerIAGetBGPAuthKey, doctl.ArgInterconnectAttachmentType, "", "partner", "Specify interconnect attachment type (e.g., partner)")
cmdGetPartnerIAGetBGPAuthKey.Example = `The following example retrieves information about a Service key of Partner Interconnect Attachment with the ID ` + "`" + `f81d4fae-7dec-11d0-a765-00a0c91e6bf6` + "`" +
`: doctl network --type "partner" interconnect-attachment get-bgp-auth-key f81d4fae-7dec-11d0-a765-00a0c91e6bf6`

return cmd
}

Expand Down Expand Up @@ -296,6 +310,56 @@ func RunPartnerInterconnectAttachmentUpdate(c *CmdConfig) error {
return c.Display(item)
}

// RunPartnerInterconnectAttachmentRegenerateServiceKey regenerates a service key of existing Partner Interconnect Attachment
func RunPartnerInterconnectAttachmentRegenerateServiceKey(c *CmdConfig) error {

if err := ensurePartnerAttachmentType(c); err != nil {
return err
}

err := ensureOneArg(c)
if err != nil {
return err
}
iaID := c.Args[0]

pias := c.PartnerInterconnectAttachments()
regenerateServiceKey, err := pias.RegenerateServiceKey(iaID)
if err != nil {
return err
}

item := &displayers.PartnerInterconnectAttachmentRegenerateServiceKey{
RegenerateKey: *regenerateServiceKey,
}
return c.Display(item)
}

// RunGetPartnerInterconnectAttachmentBGPAuthKey get a bgp auth key of existing Partner Interconnect Attachment
func RunGetPartnerInterconnectAttachmentBGPAuthKey(c *CmdConfig) error {

if err := ensurePartnerAttachmentType(c); err != nil {
return err
}

err := ensureOneArg(c)
if err != nil {
return err
}
iaID := c.Args[0]

pias := c.PartnerInterconnectAttachments()
bgpAuthKey, err := pias.GetBGPAuthKey(iaID)
if err != nil {
return err
}

item := &displayers.PartnerInterconnectAttachmentBgpAuthKey{
Key: *bgpAuthKey,
}
return c.Display(item)
}

// RunPartnerInterconnectAttachmentDelete deletes an existing Partner Interconnect Attachment by its identifier.
func RunPartnerInterconnectAttachmentDelete(c *CmdConfig) error {

Expand Down
45 changes: 42 additions & 3 deletions commands/partner_interconnect_attachment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ import (
"testing"
"time"

"github.com/digitalocean/doctl"
"github.com/digitalocean/doctl/do"
"github.com/digitalocean/godo"
"github.com/stretchr/testify/assert"

"github.com/digitalocean/doctl"
"github.com/digitalocean/doctl/do"
)

var (
Expand Down Expand Up @@ -39,13 +40,23 @@ var (
testPartnerIARouteList = do.PartnerInterconnectAttachmentRoutes{
testPartnerAttachmentRoute,
}

testRegenerateServiceKey = do.PartnerInterconnectAttachmentRegenerateServiceKey{
RegenerateServiceKey: &godo.RegenerateServiceKey{},
}

testBGPAuthKey = do.PartnerInterconnectAttachmentBGPAuthKey{
BgpAuthKey: &godo.BgpAuthKey{
Value: "test-bgp-auth-key",
},
}
)

func TestPartnerInterconnectAttachmentsCommand(t *testing.T) {
cmd := PartnerInterconnectAttachments()
assert.NotNil(t, cmd)

assertCommandNames(t, cmd, "create", "get", "list", "delete", "update", "list-routes")
assertCommandNames(t, cmd, "create", "get", "list", "delete", "update", "list-routes", "regenerate-service-key", "get-bgp-auth-key")
}

func TestPartnerInterconnectAttachmentCreate(t *testing.T) {
Expand Down Expand Up @@ -174,3 +185,31 @@ func TestInterconnectAttachmentRoutesList(t *testing.T) {
assert.NoError(t, err)
})
}

func TestInterconnectAttachmentsRegenerateServiceKey(t *testing.T) {
withTestClient(t, func(config *CmdConfig, tm *tcMocks) {
config.Doit.Set(config.NS, doctl.ArgInterconnectAttachmentType, "partner")

iaID := "e819b321-a9a1-4078-b437-8e6b8bf13530"
tm.partnerInterconnectAttachment.EXPECT().RegenerateServiceKey(iaID).Return(&testRegenerateServiceKey, nil)

config.Args = append(config.Args, iaID)

err := RunPartnerInterconnectAttachmentRegenerateServiceKey(config)
assert.NoError(t, err)
})
}

func TestInterconnectAttachmentsBgpAuthKey(t *testing.T) {
withTestClient(t, func(config *CmdConfig, tm *tcMocks) {
config.Doit.Set(config.NS, doctl.ArgInterconnectAttachmentType, "partner")

iaID := "e819b321-a9a1-4078-b437-8e6b8bf13530"
tm.partnerInterconnectAttachment.EXPECT().GetBGPAuthKey(iaID).Return(&testBGPAuthKey, nil)

config.Args = append(config.Args, iaID)

err := RunGetPartnerInterconnectAttachmentBGPAuthKey(config)
assert.NoError(t, err)
})
}
30 changes: 30 additions & 0 deletions do/mocks/PartnerInterconnectAttachmentsService.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions do/partner_interconnect_attachments.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,16 @@ type PartnerInterconnectAttachmentRoute struct {
// PartnerInterconnectAttachmentRoutes is a slice of PartnerInterconnectAttachmentRoute.
type PartnerInterconnectAttachmentRoutes []PartnerInterconnectAttachmentRoute

// PartnerInterconnectAttachmentBGPAuthKey wrap a godo BgpAuthKey.
type PartnerInterconnectAttachmentBGPAuthKey struct {
*godo.BgpAuthKey
}

// PartnerInterconnectAttachmentRegenerateServiceKey wraps a godo ServiceKey.
type PartnerInterconnectAttachmentRegenerateServiceKey struct {
*godo.RegenerateServiceKey
}

// PartnerInterconnectAttachmentsService is an interface for interacting with
// DigitalOcean's partner interconnect attachments api.
type PartnerInterconnectAttachmentsService interface {
Expand All @@ -44,6 +54,8 @@ type PartnerInterconnectAttachmentsService interface {
DeletePartnerInterconnectAttachment(iaID string) error
UpdatePartnerInterconnectAttachment(iaID string, req *godo.PartnerInterconnectAttachmentUpdateRequest) (*PartnerInterconnectAttachment, error)
ListPartnerInterconnectAttachmentRoutes(iaID string) (PartnerInterconnectAttachmentRoutes, error)
GetBGPAuthKey(iaID string) (*PartnerInterconnectAttachmentBGPAuthKey, error)
RegenerateServiceKey(iaID string) (*PartnerInterconnectAttachmentRegenerateServiceKey, error)
}

var _ PartnerInterconnectAttachmentsService = &partnerInterconnectAttachmentsService{}
Expand Down Expand Up @@ -150,3 +162,19 @@ func (p *partnerInterconnectAttachmentsService) ListPartnerInterconnectAttachmen

return list, nil
}

func (p *partnerInterconnectAttachmentsService) GetBGPAuthKey(iaID string) (*PartnerInterconnectAttachmentBGPAuthKey, error) {
bgpAuthKey, _, err := p.client.PartnerInterconnectAttachments.GetBGPAuthKey(context.TODO(), iaID)
if err != nil {
return nil, err
}
return &PartnerInterconnectAttachmentBGPAuthKey{BgpAuthKey: bgpAuthKey}, nil
}

func (p *partnerInterconnectAttachmentsService) RegenerateServiceKey(iaID string) (*PartnerInterconnectAttachmentRegenerateServiceKey, error) {
regenerateServiceKey, _, err := p.client.PartnerInterconnectAttachments.RegenerateServiceKey(context.TODO(), iaID)
if err != nil {
return nil, err
}
return &PartnerInterconnectAttachmentRegenerateServiceKey{RegenerateServiceKey: regenerateServiceKey}, nil
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.22
require (
github.com/blang/semver v3.5.1+incompatible
github.com/creack/pty v1.1.21
github.com/digitalocean/godo v1.136.0
github.com/digitalocean/godo v1.138.0
github.com/docker/cli v24.0.5+incompatible
github.com/docker/docker v25.0.6+incompatible
github.com/docker/docker-credential-helpers v0.7.0 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/digitalocean/godo v1.136.0 h1:DTxugljFJSMBPfEGq4KeXpnKeAHicggNqogcrw/YdZw=
github.com/digitalocean/godo v1.136.0/go.mod h1:PU8JB6I1XYkQIdHFop8lLAY9ojp6M0XcU0TWaQSxbrc=
github.com/digitalocean/godo v1.138.0 h1:0l0UEaVyNKvEmrn4r5NkZCpDysimJjVhLj30Gl6HgiQ=
github.com/digitalocean/godo v1.138.0/go.mod h1:PU8JB6I1XYkQIdHFop8lLAY9ojp6M0XcU0TWaQSxbrc=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/docker/cli v24.0.5+incompatible h1:WeBimjvS0eKdH4Ygx+ihVq1Q++xg36M/rMi4aXAvodc=
Expand Down
Loading

0 comments on commit 43eedfa

Please sign in to comment.