Skip to content

Commit 9865b8b

Browse files
authored
[CDTOOL-895] - Support for Image Optimizer Settings (#1518)
All Submissions: * [x] Have you followed the guidelines in our Contributing document? ### New Feature Submissions: * [x] Does your submission pass tests? ### Changes to Core Features: * [x] Have you written new tests for your core changes, as applicable? * [x] Have you successfully run tests with your changes locally? This PR implements support for retrieving and updating Image Optimizer defaults for a given VCL service .
1 parent a089761 commit 9865b8b

File tree

10 files changed

+650
-0
lines changed

10 files changed

+650
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- Add experimental "enable Pushpin" mode ([#1509](https://github.com/fastly/cli/pull/1509))
1010
- feat(object-storage): improve access-keys list output ([#1513](https://github.com/fastly/cli/pull/1513))
1111
- refactor(domainv1,tools): use updated go-fastly domainmanagement imports and types ([#1517](https://github.com/fastly/cli/pull/1517))
12+
- feat (imageoptimizerdefaults): Support for retrieving and updating Image Optimizer defaults for a given VCL service ([#1518](https://github.com/fastly/cli/pull/1518))
1213

1314
### Bug fixes:
1415

pkg/api/interface.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ type Interface interface {
4848
ValidateDomain(context.Context, *fastly.ValidateDomainInput) (*fastly.DomainValidationResult, error)
4949
ValidateAllDomains(context.Context, *fastly.ValidateAllDomainsInput) ([]*fastly.DomainValidationResult, error)
5050

51+
GetImageOptimizerDefaultSettings(context.Context, *fastly.GetImageOptimizerDefaultSettingsInput) (*fastly.ImageOptimizerDefaultSettings, error)
52+
UpdateImageOptimizerDefaultSettings(context.Context, *fastly.UpdateImageOptimizerDefaultSettingsInput) (*fastly.ImageOptimizerDefaultSettings, error)
53+
5154
CreateBackend(context.Context, *fastly.CreateBackendInput) (*fastly.Backend, error)
5255
ListBackends(context.Context, *fastly.ListBackendsInput) ([]*fastly.Backend, error)
5356
GetBackend(context.Context, *fastly.GetBackendInput) (*fastly.Backend, error)

pkg/app/run_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ dictionary-entry
7575
domain
7676
domain-v1
7777
healthcheck
78+
imageoptimizer
7879
install
7980
ip-list
8081
kv-store

pkg/commands/commands.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/fastly/cli/pkg/commands/domain"
2222
"github.com/fastly/cli/pkg/commands/domainv1"
2323
"github.com/fastly/cli/pkg/commands/healthcheck"
24+
"github.com/fastly/cli/pkg/commands/imageoptimizerdefaults"
2425
"github.com/fastly/cli/pkg/commands/install"
2526
"github.com/fastly/cli/pkg/commands/ip"
2627
"github.com/fastly/cli/pkg/commands/kvstore"
@@ -212,6 +213,9 @@ func Define( // nolint:revive // function-length
212213
healthcheckDescribe := healthcheck.NewDescribeCommand(healthcheckCmdRoot.CmdClause, data)
213214
healthcheckList := healthcheck.NewListCommand(healthcheckCmdRoot.CmdClause, data)
214215
healthcheckUpdate := healthcheck.NewUpdateCommand(healthcheckCmdRoot.CmdClause, data)
216+
imageoptimizerdefaultsCmdRoot := imageoptimizerdefaults.NewRootCommand(app, data)
217+
imageoptimizerdefaultsGet := imageoptimizerdefaults.NewGetCommand(imageoptimizerdefaultsCmdRoot.CmdClause, data)
218+
imageoptimizerdefaultsUpdate := imageoptimizerdefaults.NewUpdateCommand(imageoptimizerdefaultsCmdRoot.CmdClause, data)
215219
installRoot := install.NewRootCommand(app, data)
216220
ipCmdRoot := ip.NewRootCommand(app, data)
217221
kvstoreCmdRoot := kvstore.NewRootCommand(app, data)
@@ -629,6 +633,9 @@ func Define( // nolint:revive // function-length
629633
healthcheckDescribe,
630634
healthcheckList,
631635
healthcheckUpdate,
636+
imageoptimizerdefaultsCmdRoot,
637+
imageoptimizerdefaultsGet,
638+
imageoptimizerdefaultsUpdate,
632639
installRoot,
633640
ipCmdRoot,
634641
kvstoreCreate,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// Package imageoptimizerdefaults contains commands to configure default settings for Fastly Image Optimizer requests.
2+
package imageoptimizerdefaults
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package imageoptimizerdefaults
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
8+
"github.com/fastly/go-fastly/v11/fastly"
9+
10+
"github.com/fastly/cli/pkg/argparser"
11+
fsterr "github.com/fastly/cli/pkg/errors"
12+
"github.com/fastly/cli/pkg/global"
13+
)
14+
15+
// GetCommand calls the Fastly API to describe the Image Optimizer default settings for a service.
16+
type GetCommand struct {
17+
argparser.Base
18+
argparser.JSONOutput
19+
20+
Input fastly.GetImageOptimizerDefaultSettingsInput
21+
serviceName argparser.OptionalServiceNameID
22+
serviceVersion argparser.OptionalServiceVersion
23+
}
24+
25+
// NewGetCommand returns a usable command registered under the parent.
26+
func NewGetCommand(parent argparser.Registerer, g *global.Data) *GetCommand {
27+
c := GetCommand{
28+
Base: argparser.Base{
29+
Globals: g,
30+
},
31+
}
32+
c.CmdClause = parent.Command("get", "Retrieve the current Image Optimizer default settings")
33+
34+
// Required.
35+
c.RegisterFlag(argparser.StringFlagOpts{
36+
Name: argparser.FlagServiceIDName,
37+
Description: argparser.FlagServiceIDDesc,
38+
Dst: &g.Manifest.Flag.ServiceID,
39+
Short: 's',
40+
Required: true,
41+
})
42+
c.RegisterFlag(argparser.StringFlagOpts{
43+
Name: argparser.FlagVersionName,
44+
Description: argparser.FlagVersionDesc,
45+
Dst: &c.serviceVersion.Value,
46+
Required: true,
47+
})
48+
49+
// Optional.
50+
c.RegisterFlagBool(c.JSONFlag()) // --json
51+
c.RegisterFlag(argparser.StringFlagOpts{
52+
Action: c.serviceName.Set,
53+
Name: argparser.FlagServiceName,
54+
Description: argparser.FlagServiceNameDesc,
55+
Dst: &c.serviceName.Value,
56+
})
57+
return &c
58+
}
59+
60+
// Exec invokes the application logic for the command.
61+
func (c *GetCommand) Exec(_ io.Reader, out io.Writer) error {
62+
if c.Globals.Verbose() && c.JSONOutput.Enabled {
63+
return fsterr.ErrInvalidVerboseJSONCombo
64+
}
65+
66+
serviceID, serviceVersion, err := argparser.ServiceDetails(argparser.ServiceDetailsOpts{
67+
APIClient: c.Globals.APIClient,
68+
Manifest: *c.Globals.Manifest,
69+
Out: out,
70+
ServiceNameFlag: c.serviceName,
71+
ServiceVersionFlag: c.serviceVersion,
72+
VerboseMode: c.Globals.Flags.Verbose,
73+
})
74+
if err != nil {
75+
c.Globals.ErrLog.AddWithContext(err, map[string]any{
76+
"Service ID": serviceID,
77+
"Service Version": fsterr.ServiceVersion(serviceVersion),
78+
})
79+
return err
80+
}
81+
82+
c.Input.ServiceID = serviceID
83+
c.Input.ServiceVersion = fastly.ToValue(serviceVersion.Number)
84+
85+
o, err := c.Globals.APIClient.GetImageOptimizerDefaultSettings(context.TODO(), &c.Input)
86+
if err != nil {
87+
c.Globals.ErrLog.AddWithContext(err, map[string]any{
88+
"Service ID": serviceID,
89+
"Service Version": fastly.ToValue(serviceVersion.Number),
90+
})
91+
return err
92+
}
93+
94+
if ok, err := c.WriteJSON(out, o); ok {
95+
return err
96+
}
97+
98+
fmt.Fprintf(out, "Allow Video: %t\n", o.AllowVideo)
99+
fmt.Fprintf(out, "JPEG Quality: %d\n", o.JpegQuality)
100+
fmt.Fprintf(out, "JPEG Type: %s\n", o.JpegType)
101+
fmt.Fprintf(out, "Resize Filter: %s\n", o.ResizeFilter)
102+
fmt.Fprintf(out, "Upscale: %t\n", o.Upscale)
103+
fmt.Fprintf(out, "WebP: %t\n", o.Webp)
104+
fmt.Fprintf(out, "WebP Quality: %d\n", o.WebpQuality)
105+
106+
return nil
107+
}

0 commit comments

Comments
 (0)