Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cmd/outback/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ var (
ErrCantFollowWithEndTime = errors.New("Could not follow logs because an end time was given")
)

var (
ErrorMissingClusterInput = errors.New("A cluster name must be specified using the --cluster flag")
ErrorMissingServiceInput = errors.New("A service name must be specified using the --service flag")
)

// handleError is intended to be called with an error return to simplify error handling
// Usage:
// foo, err := GetFoo()
Expand Down
75 changes: 75 additions & 0 deletions cmd/outback/pull_latest.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package cmd

import (
"fmt"
Outback "github.com/koala-labs/outback/pkg/outback"
"github.com/spf13/cobra"
)

var pullLatestCmd = &cobra.Command{
Use: "pull-latest",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jclarkkoala let's add some documentation around this new command in the README

Short: "Pull the latest deployed docker image from a service",
Long: `A cluster must be specified via the --cluster flag, and a service must be specified via the --cluster flag.
The --verbose flag can be input to enable verbose output.
The --login flag can be input to login to AWS ECR.`,
RunE: runPullLatest,
}

func runPullLatest(cmd *cobra.Command, args []string) error {
return pullLatest(flagCluster, flagService)
}

func pullLatest(clusterName string, serviceName string) error {
if clusterName == "" {
return ErrorMissingClusterInput
}

if serviceName == "" {
return ErrorMissingServiceInput
}

outback := Outback.New(awsConfig)

cluster, err := cfg.getCluster(clusterName)
if err != nil {
return err
}

ecsCluster, err := outback.GetCluster(cluster.Name)
if err != nil {
return err
}

ecsService, err := outback.GetService(ecsCluster, serviceName)
if err != nil {
return err
}

// Get the Service's TaskDefinition
ecsTaskDef, err := outback.GetTaskDefinition(ecsCluster, ecsService)
if err != nil {
return err
}

// Get the commit from the last TaskDefinition if it exists
commit, err := outback.GetLastDeployedCommit(*ecsTaskDef.TaskDefinitionArn)
if err != nil {
return err
}

fmt.Printf("Found image at %s:%s\nPulling...\n", cfg.Repo, commit)

// Pull latest image
err = outback.LoginPullImage(cfg.Repo, commit)
if err != nil {
return err
}

fmt.Printf("Successfully pulled the latest image from :\n\t%s:%s\n", cfg.Repo, commit)

return nil
}

func init() {
rootCmd.AddCommand(pullLatestCmd)
}