Skip to content

Commit e4d8173

Browse files
authored
Merge pull request #36 from equinix-labs/project-bgp
feat: optionally enable BGP on the project after creation
2 parents ca222e2 + 4cff490 commit e4d8173

File tree

4 files changed

+47
-40
lines changed

4 files changed

+47
-40
lines changed

action.yml

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
1-
# action.yml
2-
name: 'Equinix Metal Project'
3-
description: 'Create an Equinix Metal and a new Project API Key for that project'
1+
---
2+
name: Equinix Metal Project
3+
description: >
4+
Create an Equinix Metal and a new Project API Key for that project
45
inputs:
56
projectName:
6-
description: 'Equinix Metal Project Name. A name will be generated from the Git SHA if not provided.'
7+
description: >
8+
Equinix Metal Project Name. A name will be generated from the Git SHA if
9+
not provided.
710
required: false
811
default: ''
912
organizationID:
10-
description: 'Equinix Metal Organization ID for the Project. The default organization for the user will be used by the API if this is not provided.'
13+
description: >
14+
Equinix Metal Organization ID for the Project. The default organization
15+
for the user will be used by the API if this is not provided.
1116
required: false
1217
userToken:
1318
description: 'The user API key to use when creating the project.'
1419
required: true
20+
enableBGP:
21+
description: 'Set this to "true" in order to enable BGP on the project'
22+
required: false
23+
default: 'false'
1524
outputs:
1625
projectID:
1726
description: 'The UUID of the created project'
@@ -20,9 +29,13 @@ outputs:
2029
projectToken:
2130
description: 'A Project API key restricted to the new project'
2231
projectSSHPrivateKeyBase64:
23-
description: 'A private SSH key (base64 encoded to preserve new lines) authorized as root on devices created in the created project.'
32+
description: >
33+
A private SSH key (base64 encoded to preserve new lines) authorized as
34+
root on devices created in the created project.'
2435
projectSSHPublicKey:
25-
description: 'A public SSH key authorized as root on devices created in the created project.'
36+
description: >
37+
A public SSH key authorized as root on devices created in the created
38+
project.
2639
organizationID:
2740
description: 'The Equinix Metal Organization ID for the created project'
2841
runs:

go.sum

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
11
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3-
github.com/equinix-labs/metal-go v0.9.0 h1:eEkX7jRY06RblH3C3yHnT0lmRbasYrD68iNwl8esLGg=
4-
github.com/equinix-labs/metal-go v0.9.0/go.mod h1:SmxCklxW+KjmBLVMdEXgtFO5gD5/b4N0VxcNgUYbOH4=
5-
github.com/equinix-labs/metal-go v0.9.1-0.20230615170029-6f8b25231753 h1:M070R6NsKR3xBimc0yzRPQ8yY6Z/LeTHXte8lARPT1Y=
6-
github.com/equinix-labs/metal-go v0.9.1-0.20230615170029-6f8b25231753/go.mod h1:SmxCklxW+KjmBLVMdEXgtFO5gD5/b4N0VxcNgUYbOH4=
7-
github.com/equinix-labs/metal-go v0.10.0 h1:LPf/QlkaggeuAcvZJ/qrdk3dNZEhHYYqburfkpAcKe0=
8-
github.com/equinix-labs/metal-go v0.10.0/go.mod h1:SmxCklxW+KjmBLVMdEXgtFO5gD5/b4N0VxcNgUYbOH4=
9-
github.com/equinix-labs/metal-go v0.12.0 h1:zT+Sjham0mDY0y0B26+5i0xVaY707WmshWCzdTLF74Q=
10-
github.com/equinix-labs/metal-go v0.12.0/go.mod h1:SmxCklxW+KjmBLVMdEXgtFO5gD5/b4N0VxcNgUYbOH4=
11-
github.com/equinix-labs/metal-go v0.16.0 h1:4YmGx9SRFkDtHiEqRsSjlgJDztV6NHqH1eeaOZcK7d4=
12-
github.com/equinix-labs/metal-go v0.16.0/go.mod h1:SmxCklxW+KjmBLVMdEXgtFO5gD5/b4N0VxcNgUYbOH4=
13-
github.com/equinix-labs/metal-go v0.17.0 h1:wWvw8G1FfLApdHFdinyN79eW8JNpvCCFDk1k0qwjwKc=
14-
github.com/equinix-labs/metal-go v0.17.0/go.mod h1:SmxCklxW+KjmBLVMdEXgtFO5gD5/b4N0VxcNgUYbOH4=
153
github.com/equinix-labs/metal-go v0.18.0 h1:lzMqg6MQu25D/1nAO3qSlPZK1pENhcMKoEzcUgxLXbo=
164
github.com/equinix-labs/metal-go v0.18.0/go.mod h1:SmxCklxW+KjmBLVMdEXgtFO5gD5/b4N0VxcNgUYbOH4=
175
github.com/equinix-labs/metal-go v0.20.0 h1:FJNYjB3igBBaWtd+w95Or1WC48uAuALLVEacz3WXFus=
@@ -25,18 +13,11 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
2513
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
2614
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
2715
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
28-
golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a h1:y6sBfNd1b9Wy08a6K1Z1DZc4aXABUN5TKjkYhz7UKmo=
29-
golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
3016
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
31-
golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM=
32-
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
33-
golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA=
34-
golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
3517
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
3618
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
3719
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
3820
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
39-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
4021
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
4122
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
4223
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -46,34 +27,25 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
4627
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
4728
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
4829
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
49-
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
50-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5130
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
5231
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5332
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5433
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5534
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5635
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
57-
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
58-
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
59-
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
60-
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6136
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
6237
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
6338
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
6439
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
6540
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
6641
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
67-
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
68-
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
42+
golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0=
6943
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
7044
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
7145
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
7246
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
7347
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
7448
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
75-
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
76-
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
7749
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
7850
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
7951
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=

internal/action.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ type action struct {
2525
client *metal.APIClient
2626
label string
2727
organizationID string
28+
enableBGP bool
2829
}
2930

3031
type Project struct {
@@ -35,8 +36,10 @@ type Project struct {
3536
APIToken string
3637
}
3738

38-
// NewAction returns an action with a Packngo client
39-
func NewAction(apiToken, organizationID, label string) (*action, error) {
39+
// NewAction returns an action with a metal-go client
40+
//
41+
//nolint:revive
42+
func NewAction(apiToken, organizationID, label string, enableBGP bool) (*action, error) {
4043
config := metal.NewConfiguration()
4144
config.AddDefaultHeader("X-Auth-Token", apiToken)
4245
config.UserAgent = fmt.Sprintf(uaFmt, version, config.UserAgent)
@@ -46,6 +49,7 @@ func NewAction(apiToken, organizationID, label string) (*action, error) {
4649
organizationID: organizationID,
4750
label: label,
4851
client: client,
52+
enableBGP: enableBGP,
4953
}, nil
5054
}
5155

@@ -71,6 +75,21 @@ func (a *action) CreateProject() (*Project, error) {
7175
return nil, err
7276
}
7377

78+
if a.enableBGP {
79+
log.Println("Enabling BGP for project")
80+
// TODO support setting a BGP password?
81+
bgpConfigRequest := metal.BgpConfigRequestInput{
82+
Asn: 65000,
83+
DeploymentType: "local",
84+
}
85+
86+
_, err := a.client.BGPApi.RequestBgpConfig(context.Background(), project.GetId()).BgpConfigRequestInput(bgpConfigRequest).Execute()
87+
88+
if err != nil {
89+
return nil, err
90+
}
91+
}
92+
7493
p := &Project{Project: project}
7594

7695
log.Println("Creating Keys")
@@ -79,7 +98,7 @@ func (a *action) CreateProject() (*Project, error) {
7998
p.createAPIKey,
8099
} {
81100
if err := f(a.client); err != nil {
82-
return nil, err
101+
return p, err
83102
}
84103
}
85104

main.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ func main() {
2121
log.Fatal("You must provide an auth token in `with.userToken` must be supplied")
2222
}
2323

24-
a, err := action.NewAction(apiToken, os.Getenv("INPUT_ORGANIZATIONID"), projectName)
24+
enableBGP := os.Getenv("INPUT_ENABLEBGP") == "true"
25+
26+
a, err := action.NewAction(apiToken, os.Getenv("INPUT_ORGANIZATIONID"), projectName, enableBGP)
2527
if err != nil {
2628
log.Fatal("Could not create client action", err)
2729
}
@@ -52,6 +54,7 @@ func main() {
5254
outputFile, err := os.OpenFile(os.Getenv("GITHUB_OUTPUT"),
5355
os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
5456
if err != nil {
57+
//nolint:gocritic
5558
log.Fatal("Could not open output file", err)
5659
}
5760
defer outputFile.Close()

0 commit comments

Comments
 (0)