Skip to content

Commit

Permalink
ecspresso revisons --revision (current|latest|[number])
Browse files Browse the repository at this point in the history
  • Loading branch information
fujiwara committed Mar 24, 2023
1 parent 65c4e01 commit 419bc0a
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 21 deletions.
20 changes: 18 additions & 2 deletions cli_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -394,15 +394,31 @@ var cliTests = []struct {
args: []string{"revisions"},
sub: "revisions",
subOption: &ecspresso.RevisionsOption{
Revision: ptr(int64(0)),
Revision: ptr(""),
Output: ptr("table"),
},
},
{
args: []string{"revisions", "--revision", "123", "--output", "json"},
sub: "revisions",
subOption: &ecspresso.RevisionsOption{
Revision: ptr(int64(123)),
Revision: ptr("123"),
Output: ptr("json"),
},
},
{
args: []string{"revisions", "--revision", "current", "--output", "json"},
sub: "revisions",
subOption: &ecspresso.RevisionsOption{
Revision: ptr("current"),
Output: ptr("json"),
},
},
{
args: []string{"revisions", "--revision", "latest", "--output", "json"},
sub: "revisions",
subOption: &ecspresso.RevisionsOption{
Revision: ptr("latest"),
Output: ptr("json"),
},
},
Expand Down
59 changes: 40 additions & 19 deletions revisions.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"io"
"os"
"strconv"
"strings"

"github.com/aws/aws-sdk-go-v2/aws"
Expand All @@ -14,7 +15,7 @@ import (
)

type RevisionsOption struct {
Revision *int64 `help:"revision number to output" default:"0"`
Revision *string `help:"revision number or 'current' or 'latest'" default:""`
Output *string `help:"output format (json, table, tsv)" default:"table" enum:"json,table,tsv"`
}

Expand Down Expand Up @@ -72,30 +73,17 @@ func (d *App) Revesions(ctx context.Context, opt RevisionsOption) error {
ctx, cancel := d.Start(ctx)
defer cancel()

inUse, err := d.inUseRevisions(ctx)
td, err := d.LoadTaskDefinition(d.config.TaskDefinitionPath)
if err != nil {
return err
}

td, err := d.LoadTaskDefinition(d.config.TaskDefinitionPath)
if err != nil {
return err
if rv := aws.ToString(opt.Revision); rv != "" {
return d.dumpRevision(ctx, aws.ToString(td.Family), rv)
}

if r := aws.ToInt64(opt.Revision); r > 0 {
name := fmt.Sprintf("%s:%d", aws.ToString(td.Family), r)
res, err := d.ecs.DescribeTaskDefinition(ctx, &ecs.DescribeTaskDefinitionInput{
TaskDefinition: &name,
Include: []types.TaskDefinitionField{types.TaskDefinitionFieldTags},
})
if err != nil {
return fmt.Errorf("failed to describe task definition %s: %w", name, err)
}
b, err := MarshalJSONForAPI(res.TaskDefinition)
if err != nil {
return err
}
_, err = os.Stdout.Write(b)
inUse, err := d.inUseRevisions(ctx)
if err != nil {
return err
}

Expand Down Expand Up @@ -133,3 +121,36 @@ func (d *App) Revesions(ctx context.Context, opt RevisionsOption) error {
}
return nil
}

func (d *App) dumpRevision(ctx context.Context, family string, rv string) error {
var name string
switch rv {
case "current":
family, revision, err := d.resolveTaskdefinition(ctx)
if err != nil {
return err
}
name = family + ":" + revision
case "latest":
name = family
default:
rint64, err := strconv.ParseInt(rv, 10, 64)
if err != nil {
return fmt.Errorf("invalid revision: %s", rv)
}
name = fmt.Sprintf("%s:%d", family, rint64)
}
res, err := d.ecs.DescribeTaskDefinition(ctx, &ecs.DescribeTaskDefinitionInput{
TaskDefinition: &name,
Include: []types.TaskDefinitionField{types.TaskDefinitionFieldTags},
})
if err != nil {
return fmt.Errorf("failed to describe task definition %s: %w", name, err)
}
b, err := MarshalJSONForAPI(res.TaskDefinition)
if err != nil {
return err
}
_, err = os.Stdout.Write(b)
return err
}

0 comments on commit 419bc0a

Please sign in to comment.