Skip to content

Commit c896dd8

Browse files
authored
Merge pull request #1163 from Scalingo/feat/STORY-2400/command-get-project-info
feat(projects): add command to get project info and private network details
2 parents 076adee + db6b9e6 commit c896dd8

File tree

13 files changed

+142
-16
lines changed

13 files changed

+142
-16
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Some features listed in this changelog, like databases next generation, are currently only available in preview to
66
selected users.
77

8+
* feat(projects): add command to get project and private network information
89
* fix(privatenetworks): default format should be `table`
910
* feat(databases next generation): create all commands to handle next generation `databases`.
1011
* feat(databases next generation): add the support of `--database` flag for several commands:

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,8 @@ COMMANDS:
224224
projects-add Create a project
225225
projects-update Update a project
226226
projects-remove Remove a project
227-
227+
projects-details Get details about a project
228+
228229
Public SSH Keys:
229230
keys List your SSH public keys
230231
keys-add Add a public SSH key to deploy your apps

cmd/commands.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ var (
308308
&projectsAddCommand,
309309
&projectsUpdateCommand,
310310
&projectsRemoveCommand,
311+
&projectsDetailsCommand,
311312

312313
// Private Networks
313314
&privateNetworksApplicationDomainsListCommand,

cmd/projects.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,32 @@ var (
139139
_ = autocomplete.ProjectsGenericListAutoComplete(ctx)
140140
},
141141
}
142+
143+
projectsDetailsCommand = cli.Command{
144+
Name: "projects-details",
145+
Category: "Projects",
146+
Usage: "Get details about a project",
147+
ArgsUsage: "project-id",
148+
Description: CommandDescription{
149+
Description: "Get details about a project",
150+
Examples: []string{"scalingo projects-details prj-00000000-0000-0000-0000-000000000000"},
151+
}.Render(),
152+
Action: func(ctx context.Context, c *cli.Command) error {
153+
projectID := c.Args().First()
154+
if projectID == "" {
155+
errorQuitWithHelpMessage(ctx, errors.New(ctx, "missing project ID parameter"), c, "projects-details")
156+
}
157+
158+
err := projects.Get(ctx, projectID)
159+
if err != nil {
160+
errorQuit(ctx, err)
161+
}
162+
163+
return nil
164+
},
165+
ShellComplete: func(ctx context.Context, c *cli.Command) {
166+
_ = autocomplete.CmdFlagsAutoComplete(c, "projects-details")
167+
_ = autocomplete.ProjectsGenericListAutoComplete(ctx)
168+
},
169+
}
142170
)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.24.0
44

55
require (
66
github.com/AlecAivazis/survey/v2 v2.3.7
7-
github.com/Scalingo/go-scalingo/v8 v8.7.1
7+
github.com/Scalingo/go-scalingo/v8 v8.8.0
88
github.com/Scalingo/go-utils/errors/v2 v2.5.1
99
github.com/Scalingo/go-utils/logger v1.11.0
1010
github.com/Scalingo/gopassword v1.1.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63n
99
github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
1010
github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw=
1111
github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE=
12-
github.com/Scalingo/go-scalingo/v8 v8.7.1 h1:Sqos+T77pVBR6iTQenG/7yafQoWMCNurBtdQD8Vg+MQ=
13-
github.com/Scalingo/go-scalingo/v8 v8.7.1/go.mod h1:C87ufsz8H4/tUutK6cAmUaLpM4HwV8QOGAyfZyRgFAA=
12+
github.com/Scalingo/go-scalingo/v8 v8.8.0 h1:OY14XbEEdZabwImRgXGL0txjesdhW8fX5/GrlAsxlBg=
13+
github.com/Scalingo/go-scalingo/v8 v8.8.0/go.mod h1:C87ufsz8H4/tUutK6cAmUaLpM4HwV8QOGAyfZyRgFAA=
1414
github.com/Scalingo/go-utils/errors/v2 v2.5.1 h1:1tfJW6/ZxTgrRmFTlKQCOtArQquOW0/XdZQzx8wMHoM=
1515
github.com/Scalingo/go-utils/errors/v2 v2.5.1/go.mod h1:SbR1JuMtfAl+gpM7ahUW/c3Jm5MMzMAwJBk1pEHkVd8=
1616
github.com/Scalingo/go-utils/logger v1.11.0 h1:QUsGgZIv6LWUCyKKy06DuW67FLmzSmWPmnhD/3YlxeM=

projects/details.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package projects
2+
3+
import (
4+
"context"
5+
"os"
6+
"strconv"
7+
8+
"github.com/olekukonko/tablewriter"
9+
10+
"github.com/Scalingo/cli/config"
11+
"github.com/Scalingo/go-utils/errors/v2"
12+
"github.com/Scalingo/go-utils/logger"
13+
)
14+
15+
func Get(ctx context.Context, projectID string) error {
16+
log := logger.Get(ctx)
17+
client, err := config.ScalingoClient(ctx)
18+
if err != nil {
19+
return errors.Wrap(ctx, err, "get Scalingo client")
20+
}
21+
22+
project, err := client.ProjectGet(ctx, projectID)
23+
if err != nil {
24+
return errors.Wrap(ctx, err, "get project")
25+
}
26+
27+
t := tablewriter.NewWriter(os.Stdout)
28+
t.Header([]string{"Project Field", "Value"})
29+
30+
_ = t.Append([]string{"Name", project.Name})
31+
_ = t.Append([]string{"ID", project.ID})
32+
_ = t.Append([]string{"Default", strconv.FormatBool(project.Default)})
33+
_ = t.Append([]string{"Owner", project.Owner.Username})
34+
35+
if project.Flags["private-network"] {
36+
_ = t.Append([]string{"", ""})
37+
_ = t.Append([]string{"Private Network", "true"})
38+
39+
privateNetworkInfo, err := client.ProjectPrivateNetworkGet(ctx, projectID)
40+
if err != nil {
41+
log.WithError(err).Error("Failed to fetch private network info")
42+
_ = t.Append([]string{"", "Failed to fetch private network info"})
43+
} else {
44+
_ = t.Append([]string{" - ID", privateNetworkInfo.ID})
45+
_ = t.Append([]string{" - Subnet", privateNetworkInfo.Subnet})
46+
_ = t.Append([]string{" - Gateway IP", privateNetworkInfo.Gateway})
47+
_ = t.Append([]string{" - Total number of assignable IPs", strconv.Itoa(privateNetworkInfo.MaxIPsCount)})
48+
_ = t.Append([]string{" - Used IPs count", strconv.Itoa(privateNetworkInfo.UsedIPsCount)})
49+
50+
if len(privateNetworkInfo.UsedIPs) == 0 {
51+
_ = t.Append([]string{" - Used IPs", "None"})
52+
} else {
53+
_ = t.Append([]string{" - Used IPs", privateNetworkInfo.UsedIPs[0]})
54+
}
55+
for _, usedIP := range privateNetworkInfo.UsedIPs[1:] {
56+
_ = t.Append([]string{"", usedIP})
57+
}
58+
}
59+
}
60+
61+
_ = t.Render()
62+
63+
return nil
64+
}

projects/list.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package projects
22

33
import (
44
"context"
5+
"fmt"
56
"os"
67
"strconv"
78

@@ -26,10 +27,15 @@ func List(ctx context.Context) error {
2627
io.Warning("This command only displays projects where you are the owner")
2728

2829
t := tablewriter.NewWriter(os.Stdout)
29-
t.Header([]string{"Name", "Default", "ID"})
30+
t.Header([]string{"Name", "Default", "ID", "Private Network"})
3031

3132
for _, project := range projects {
32-
_ = t.Append([]string{project.Name, strconv.FormatBool(project.Default), project.ID})
33+
hasPrivateNetwork := ""
34+
if project.Flags["private-network"] {
35+
hasPrivateNetwork = "true"
36+
}
37+
fmt.Print(project.Flags)
38+
_ = t.Append([]string{project.Name, strconv.FormatBool(project.Default), project.ID, hasPrivateNetwork})
3339
}
3440
_ = t.Render()
3541

vendor/github.com/Scalingo/go-scalingo/v8/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/Scalingo/go-scalingo/v8/README.md

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)