Skip to content

Commit

Permalink
Add Service ID to --verbose output (#383)
Browse files Browse the repository at this point in the history
* abstraction for displaying Service ID

* call new function

* remove conditional as it's now moved inside ServiceDetails

* put back accidentally deleted code

* fix tests

* integrate new function into abstraction and fix tests

* avoid double operation

* don't pass unused serviceID arg
  • Loading branch information
Integralist authored Sep 6, 2021
1 parent 8428752 commit 9c3be6f
Show file tree
Hide file tree
Showing 93 changed files with 180 additions and 91 deletions.
25 changes: 25 additions & 0 deletions pkg/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ import (
"github.com/fastly/cli/pkg/api"
"github.com/fastly/cli/pkg/commands/compute/manifest"
"github.com/fastly/cli/pkg/config"
"github.com/fastly/cli/pkg/env"
"github.com/fastly/cli/pkg/errors"
"github.com/fastly/cli/pkg/text"
"github.com/fastly/go-fastly/v3/fastly"
"github.com/fastly/kingpin"
)
Expand Down Expand Up @@ -123,6 +125,11 @@ type ServiceDetailsOpts struct {
// ServiceDetails returns the Service ID and Service Version.
func ServiceDetails(opts ServiceDetailsOpts) (serviceID string, serviceVersion *fastly.Version, err error) {
serviceID, source := opts.Manifest.ServiceID()

if opts.VerboseMode {
DisplayServiceID(serviceID, source, opts.Out)
}

if source == manifest.SourceUndefined {
return serviceID, serviceVersion, errors.ErrNoServiceID
}
Expand All @@ -148,3 +155,21 @@ func ServiceDetails(opts ServiceDetailsOpts) (serviceID string, serviceVersion *

return serviceID, v, nil
}

// DisplayServiceID acquires the Service ID (if provided) and displays both it
// and its source location.
func DisplayServiceID(sid string, s manifest.Source, out io.Writer) {
var via string
switch s {
case manifest.SourceFlag:
via = " (via --service-id)"
case manifest.SourceFile:
via = fmt.Sprintf(" (via %s)", manifest.Filename)
case manifest.SourceEnv:
via = fmt.Sprintf(" (via %s)", env.ServiceID)
case manifest.SourceUndefined:
via = " (not provided)"
}
text.Output(out, "Service ID%s: %s", via, sid)
text.Break(out)
}
2 changes: 0 additions & 2 deletions pkg/cmd/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,7 @@ func (ac *OptionalAutoClone) Parse(v *fastly.Version, sid string, verbose bool,
}
if verbose {
msg := fmt.Sprintf("Service version %d is not editable, so it was automatically cloned because --autoclone is enabled. Now operating on version %d.", v.Number, version.Number)
text.Break(out)
text.Output(out, msg)
text.Break(out)
}
return version, nil
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/commands/acl/acl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ func TestACLList(t *testing.T) {
ListACLsFn: listACLs,
},
Args: args("acl list --service-id 123 --verbose --version 1"),
WantOutput: "Fastly API token not provided\nFastly API endpoint: https://api.fastly.com\n\nService ID: 123\nService Version: 1\n\nName: foo\nID: 456\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n\nName: bar\nID: 789\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n",
WantOutput: "Fastly API token not provided\nFastly API endpoint: https://api.fastly.com\nService ID (via --service-id): 123\n\nService Version: 1\n\nName: foo\nID: 456\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n\nName: bar\nID: 789\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n",
},
}

Expand Down
12 changes: 7 additions & 5 deletions pkg/commands/acl/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
}

if c.Globals.Verbose() {
c.printVerbose(out, serviceID, serviceVersion.Number, as)
c.printVerbose(out, serviceVersion.Number, as)
} else {
c.printSummary(out, as)
}
Expand All @@ -88,13 +88,13 @@ func (c *ListCommand) constructInput(serviceID string, serviceVersion int) *fast

// printVerbose displays the information returned from the API in a verbose
// format.
func (c *ListCommand) printVerbose(out io.Writer, serviceID string, serviceVersion int, as []*fastly.ACL) {
fmt.Fprintf(out, "\nService ID: %s\n", serviceID)
fmt.Fprintf(out, "Service Version: %d\n", serviceVersion)
func (c *ListCommand) printVerbose(out io.Writer, serviceVersion int, as []*fastly.ACL) {
fmt.Fprintf(out, "Service Version: %d\n\n", serviceVersion)

for _, a := range as {
fmt.Fprintf(out, "\nName: %s\n", a.Name)
fmt.Fprintf(out, "Name: %s\n", a.Name)
fmt.Fprintf(out, "ID: %s\n\n", a.ID)

if a.CreatedAt != nil {
fmt.Fprintf(out, "Created at: %s\n", a.CreatedAt)
}
Expand All @@ -104,6 +104,8 @@ func (c *ListCommand) printVerbose(out io.Writer, serviceID string, serviceVersi
if a.DeletedAt != nil {
fmt.Fprintf(out, "Deleted at: %s\n", a.DeletedAt)
}

fmt.Fprintf(out, "\n")
}
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/commands/aclentry/aclentry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func TestACLEntryList(t *testing.T) {
ListACLEntriesFn: listACLEntries,
},
Args: args("acl-entry list --acl-id 123 --service-id 123 --verbose"),
WantOutput: "Fastly API token not provided\nFastly API endpoint: https://api.fastly.com\n\nService ID: 123\n\nACL ID: 123\nID: 456\nIP: 127.0.0.1\nSubnet: 0\nNegated: false\nComment: foo\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n\nACL ID: 123\nID: 789\nIP: 127.0.0.2\nSubnet: 0\nNegated: true\nComment: bar\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n",
WantOutput: "Fastly API token not provided\nFastly API endpoint: https://api.fastly.com\nService ID (via --service-id): 123\n\nACL ID: 123\nID: 456\nIP: 127.0.0.1\nSubnet: 0\nNegated: false\nComment: foo\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n\nACL ID: 123\nID: 789\nIP: 127.0.0.2\nSubnet: 0\nNegated: true\nComment: bar\n\nCreated at: 2021-06-15 23:00:00 +0000 UTC\nUpdated at: 2021-06-15 23:00:00 +0000 UTC\nDeleted at: 2021-06-15 23:00:00 +0000 UTC\n",
},
}

Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/aclentry/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ type CreateCommand struct {
// Exec invokes the application logic for the command.
func (c *CreateCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
err := errors.ErrNoServiceID
c.Globals.ErrLog.Add(err)
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/aclentry/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ type DeleteCommand struct {
// Exec invokes the application logic for the command.
func (c *DeleteCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
err := errors.ErrNoServiceID
c.Globals.ErrLog.Add(err)
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/aclentry/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ type DescribeCommand struct {
// Exec invokes the application logic for the command.
func (c *DescribeCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
err := errors.ErrNoServiceID
c.Globals.ErrLog.Add(err)
Expand Down
13 changes: 8 additions & 5 deletions pkg/commands/aclentry/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ type ListCommand struct {
// Exec invokes the application logic for the command.
func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
err := errors.ErrNoServiceID
c.Globals.ErrLog.Add(err)
Expand All @@ -57,7 +60,7 @@ func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
}

if c.Globals.Verbose() {
c.printVerbose(out, serviceID, as)
c.printVerbose(out, as)
} else {
c.printSummary(out, as)
}
Expand All @@ -76,11 +79,9 @@ func (c *ListCommand) constructInput(serviceID string) *fastly.ListACLEntriesInp

// printVerbose displays the information returned from the API in a verbose
// format.
func (c *ListCommand) printVerbose(out io.Writer, serviceID string, as []*fastly.ACLEntry) {
fmt.Fprintf(out, "\nService ID: %s\n", serviceID)

func (c *ListCommand) printVerbose(out io.Writer, as []*fastly.ACLEntry) {
for _, a := range as {
fmt.Fprintf(out, "\nACL ID: %s\n", a.ACLID)
fmt.Fprintf(out, "ACL ID: %s\n", a.ACLID)
fmt.Fprintf(out, "ID: %s\n", a.ID)
fmt.Fprintf(out, "IP: %s\n", a.IP)
fmt.Fprintf(out, "Subnet: %d\n", a.Subnet)
Expand All @@ -96,6 +97,8 @@ func (c *ListCommand) printVerbose(out io.Writer, serviceID string, as []*fastly
if a.DeletedAt != nil {
fmt.Fprintf(out, "Deleted at: %s\n", a.DeletedAt)
}

fmt.Fprintf(out, "\n")
}
}

Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/aclentry/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ type UpdateCommand struct {
// Exec invokes the application logic for the command.
func (c *UpdateCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
err := errors.ErrNoServiceID
c.Globals.ErrLog.Add(err)
Expand Down
3 changes: 2 additions & 1 deletion pkg/commands/backend/backend_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,8 @@ SERVICE VERSION NAME ADDRESS PORT COMMENT
var listBackendsVerboseOutput = strings.Join([]string{
"Fastly API token not provided",
"Fastly API endpoint: https://api.fastly.com",
"Service ID: 123",
"Service ID (via --service-id): 123",
"",
"Version: 1",
" Backend 1/2",
" Name: test.com",
Expand Down
1 change: 0 additions & 1 deletion pkg/commands/backend/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
return nil
}

fmt.Fprintf(out, "Service ID: %s\n", c.Input.ServiceID)
fmt.Fprintf(out, "Version: %d\n", c.Input.ServiceVersion)
for i, backend := range backends {
fmt.Fprintf(out, "\tBackend %d/%d\n", i+1, len(backends))
Expand Down
6 changes: 5 additions & 1 deletion pkg/commands/compute/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ func NewDeployCommand(parent cmd.Registerer, client api.HTTPClient, globals *con

// Exec implements the command interface.
func (c *DeployCommand) Exec(in io.Reader, out io.Writer) (err error) {
serviceID, sidSrc := c.Manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, sidSrc, out)
}

// Exit early if no token configured.
_, s := c.Globals.Token()
if s == config.SourceUndefined {
Expand All @@ -107,7 +112,6 @@ func (c *DeployCommand) Exec(in io.Reader, out io.Writer) (err error) {
serviceVersion *fastly.Version
)

serviceID, sidSrc := c.Manifest.ServiceID()
if sidSrc == manifest.SourceUndefined {
newService = true
serviceID, serviceVersion, err = manageNoServiceIDFlow(c.AcceptDefaults, in, out, verbose, apiClient, pkgName, errLog, &c.Manifest.File)
Expand Down
1 change: 1 addition & 0 deletions pkg/commands/compute/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ func NewInitCommand(parent cmd.Registerer, client api.HTTPClient, globals *confi

// Exec implements the command interface.
func (c *InitCommand) Exec(in io.Reader, out io.Writer) (err error) {
text.Break(out)
text.Output(out, "Creating a new Compute@Edge project.")
text.Break(out)
text.Output(out, "Press ^C at any time to quit.")
Expand Down
3 changes: 2 additions & 1 deletion pkg/commands/domain/domain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,8 @@ SERVICE VERSION NAME COMMENT
var listDomainsVerboseOutput = strings.TrimSpace(`
Fastly API token not provided
Fastly API endpoint: https://api.fastly.com
Service ID: 123
Service ID (via --service-id): 123
Version: 1
Domain 1/2
Name: www.test.com
Expand Down
1 change: 0 additions & 1 deletion pkg/commands/domain/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
return nil
}

fmt.Fprintf(out, "Service ID: %s\n", c.Input.ServiceID)
fmt.Fprintf(out, "Version: %d\n", c.Input.ServiceVersion)
for i, domain := range domains {
fmt.Fprintf(out, "\tDomain %d/%d\n", i+1, len(domains))
Expand Down
4 changes: 3 additions & 1 deletion pkg/commands/edgedictionary/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ func (c *DescribeCommand) Exec(in io.Reader, out io.Writer) error {
return err
}

text.Output(out, "Service ID: %s", dictionary.ServiceID)
if !c.Globals.Verbose() {
text.Output(out, "Service ID: %s", dictionary.ServiceID)
}
text.Output(out, "Version: %d", dictionary.ServiceVersion)
text.PrintDictionary(out, "", dictionary)

Expand Down
6 changes: 3 additions & 3 deletions pkg/commands/edgedictionary/edgedictionary_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -448,18 +448,17 @@ var updateDictionaryOutputVerbose = strings.Join(
[]string{
"Fastly API token not provided",
"Fastly API endpoint: https://api.fastly.com",
"Service ID (via --service-id): 123",
"",
"Service version 1 is not editable, so it was automatically cloned because --autoclone is",
"enabled. Now operating on version 4.",
"",
"",
strings.TrimSpace(updateDictionaryNameOutput),
updateDictionaryOutputVersionCloned,
},
"\n")

var updateDictionaryOutputVersionCloned = strings.TrimSpace(`
Service ID: 123
Version: 4
ID: 456
Name: dict-1
Expand Down Expand Up @@ -492,7 +491,8 @@ Deleted (UTC): 2001-02-03 04:05
var describeDictionaryOutputVerbose = strings.TrimSpace(`
Fastly API token not provided
Fastly API endpoint: https://api.fastly.com
Service ID: 123
Service ID (via --service-id): 123
Version: 1
ID: 456
Name: dict-1
Expand Down
1 change: 0 additions & 1 deletion pkg/commands/edgedictionary/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ func (c *UpdateCommand) Exec(in io.Reader, out io.Writer) error {
text.Success(out, "Updated dictionary %s (service %s version %d)", d.Name, d.ServiceID, d.ServiceVersion)

if c.Globals.Verbose() {
text.Output(out, "Service ID: %s", d.ServiceID)
text.Output(out, "Version: %d", d.ServiceVersion)
text.PrintDictionary(out, "", d)
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/edgedictionaryitem/batch.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ func NewBatchCommand(parent cmd.Registerer, globals *config.Data) *BatchCommand
// Exec invokes the application logic for the command.
func (c *BatchCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
return errors.ErrNoServiceID
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/edgedictionaryitem/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ func NewCreateCommand(parent cmd.Registerer, globals *config.Data) *CreateComman
// Exec invokes the application logic for the command.
func (c *CreateCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
return errors.ErrNoServiceID
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/edgedictionaryitem/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ func NewDeleteCommand(parent cmd.Registerer, globals *config.Data) *DeleteComman
// Exec invokes the application logic for the command.
func (c *DeleteCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
return errors.ErrNoServiceID
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/edgedictionaryitem/describe.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ func NewDescribeCommand(parent cmd.Registerer, globals *config.Data) *DescribeCo
// Exec invokes the application logic for the command.
func (c *DescribeCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
return errors.ErrNoServiceID
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/edgedictionaryitem/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ func NewListCommand(parent cmd.Registerer, globals *config.Data) *ListCommand {
// Exec invokes the application logic for the command.
func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
return errors.ErrNoServiceID
}
Expand Down
3 changes: 3 additions & 0 deletions pkg/commands/edgedictionaryitem/update.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ func NewUpdateCommand(parent cmd.Registerer, globals *config.Data) *UpdateComman
// Exec invokes the application logic for the command.
func (c *UpdateCommand) Exec(in io.Reader, out io.Writer) error {
serviceID, source := c.manifest.ServiceID()
if c.Globals.Verbose() {
cmd.DisplayServiceID(serviceID, source, out)
}
if source == manifest.SourceUndefined {
return errors.ErrNoServiceID
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/commands/healthcheck/healthcheck_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,8 @@ SERVICE VERSION NAME METHOD HOST PATH
var listHealthChecksVerboseOutput = strings.Join([]string{
"Fastly API token not provided",
"Fastly API endpoint: https://api.fastly.com",
"Service ID: 123",
"Service ID (via --service-id): 123",
"",
"Version: 1",
" Healthcheck 1/2",
" Name: test",
Expand Down
1 change: 0 additions & 1 deletion pkg/commands/healthcheck/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
return nil
}

fmt.Fprintf(out, "Service ID: %s\n", c.Input.ServiceID)
fmt.Fprintf(out, "Version: %d\n", c.Input.ServiceVersion)
for i, healthCheck := range healthChecks {
fmt.Fprintf(out, "\tHealthcheck %d/%d\n", i+1, len(healthChecks))
Expand Down
3 changes: 2 additions & 1 deletion pkg/commands/logging/azureblob/azureblob_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,8 @@ SERVICE VERSION NAME
var listBlobStoragesVerboseOutput = strings.TrimSpace(`
Fastly API token not provided
Fastly API endpoint: https://api.fastly.com
Service ID: 123
Service ID (via --service-id): 123
Version: 1
BlobStorage 1/2
Service ID: 123
Expand Down
1 change: 0 additions & 1 deletion pkg/commands/logging/azureblob/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ func (c *ListCommand) Exec(in io.Reader, out io.Writer) error {
return nil
}

fmt.Fprintf(out, "Service ID: %s\n", c.Input.ServiceID)
fmt.Fprintf(out, "Version: %d\n", c.Input.ServiceVersion)
for i, azureblob := range azureblobs {
fmt.Fprintf(out, "\tBlobStorage %d/%d\n", i+1, len(azureblobs))
Expand Down
Loading

0 comments on commit 9c3be6f

Please sign in to comment.