ecspresso

package module
v1.7.11-5-g22dfb2c-2-g... Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 4, 2022 License: MIT Imports: 60 Imported by: 2

README

ecspresso

ecspresso is a deployment tool for Amazon ECS.

(pronounced same as "espresso")

Documents

ecspresso handbook (Japanese)

ecspresso Advent Calendar 2020 (Japanese)

Install

Homebrew (macOS and Linux)
$ brew install kayac/tap/ecspresso
Binary packages

Releases

CircleCI Orbs

https://circleci.com/orbs/registry/orb/fujiwara/ecspresso

version: 2.1
orbs:
  ecspresso: fujiwara/ecspresso@0.0.15
jobs:
  install:
    steps:
      - checkout
      - ecspresso/install:
          version: v1.6.0 # or latest
      - run:
          command: |
            ecspresso version
GitHub Actions

Action kayac/ecspresso@v1 installs ecspresso binary for Linux into /usr/local/bin. This action runs install only.

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: kayac/ecspresso@v1
        with:
          version: v1.6.0
      - run: |
          ecspresso deploy --config ecspresso.yml

Pass the parameter "latest" to use the latest version of ecspresso.

      - uses: kayac/ecspresso@v1
        with:
          version: latest

Usage

usage: ecspresso [<flags>] <command> [<args> ...]

Flags:
  --help                 Show context-sensitive help (also try --help-long and
                         --help-man).
  --config=CONFIG        config file
  --debug                enable debug log
  --envfile=ENVFILE ...  environment files
  --color                enable colored output

Commands:
  help [<command>...]
    Show help.

  version
    show version

  deploy [<flags>]
    deploy service

  scale [<flags>]
    scale service. equivalent to deploy --skip-task-definition
    --no-update-service

  refresh [<flags>]
    refresh service. equivalent to deploy --skip-task-definition
    --force-new-deployment --no-update-service

  create [<flags>]
    create service

  status [<flags>]
    show status of service

  rollback [<flags>]
    rollback service

  delete [<flags>]
    delete service

  run [<flags>]
    run task

  register [<flags>]
    register task definition

  wait
    wait until service stable

  init --service=SERVICE [<flags>]
    create service/task definition files by existing ECS service

  diff
    display diff for task definition compared with latest one on ECS

  appspec [<flags>]
    output AppSpec YAML for CodeDeploy to STDOUT

  verify [<flags>]
    verify resources in configurations

  render [<flags>]
    render config, service definition or task definition file to stdout

  tasks [<flags>]
    list tasks that are in a service or having the same family

  exec [<flags>]
    execute command in a task

For more options for sub-commands, See ecspresso sub-command --help.

Quick Start

Using ecspresso, you can easily manage your existing/running ECS service by codes.

Try ecspresso init for your ECS service with option --region, --cluster and --service.

$ ecspresso init --region ap-northeast-1 --cluster default --service myservice --config ecspresso.yml
2019/10/12 01:31:48 myservice/default save service definition to ecs-service-def.json
2019/10/12 01:31:48 myservice/default save task definition to ecs-task-def.json
2019/10/12 01:31:48 myservice/default save config to ecspresso.yml

You will be seeing the following files generated: ecspresso.yml, ecs-service-def.json, and ecs-task-def.json.

If you see the files, you're ready to deploy the service using ecspresso!

$ ecspresso deploy --config ecspresso.yml

Configuration file

YAML format.

region: ap-northeast-1
cluster: default
service: myService
task_definition: myTask.json
timeout: 5m

ecspresso deploy works as below.

  • Register a new task definition from JSON file.
    • JSON file is allowed in both formats as below.
      • Output format of aws ecs describe-task-definition command.
      • Input format of aws ecs register-task-definition --cli-input-json command.
    • The {{ env `FOO` `bar` }} syntax in the JSON file will be replaced by the environment variable "FOO".
      • If "FOO" is not defined, it will be replaced by "bar"
    • The {{ must_env `FOO` }} syntax in the JSON file will be replaced by the environment variable "FOO".
      • If "FOO" is not defined, abort immediately.
  • Update service tasks.
    • When --update-service option is set, service attributes are updated using the values defined in the service definition.
  • Wait for the service to be stable.

Configuration files and task/service definition files are read by go-config. go-config has template functions env, must_env and json_escape.

Example of deployment

Rolling deployment
$ ecspresso deploy --config ecspresso.yml
2017/11/09 23:20:13 myService/default Starting deploy
Service: myService
Cluster: default
TaskDefinition: myService:3
Deployments:
    PRIMARY myService:3 desired:1 pending:0 running:1
Events:
2017/11/09 23:20:13 myService/default Creating a new task definition by myTask.json
2017/11/09 23:20:13 myService/default Registering a new task definition...
2017/11/09 23:20:13 myService/default Task definition is registered myService:4
2017/11/09 23:20:13 myService/default Updating service...
2017/11/09 23:20:13 myService/default Waiting for service stable...(it will take a few minutes)
2017/11/09 23:23:23 myService/default  PRIMARY myService:4 desired:1 pending:0 running:1
2017/11/09 23:23:29 myService/default Service is stable now. Completed!
Blue/Green deployment (with AWS CodeDeploy)

ecspresso create can create a service having CODE_DEPLOY deployment controller. See ecs-service-def.json below.

{
  "deploymentController": {
    "type": "CODE_DEPLOY"
  },
  # ...
}

Currently, ecspresso doesn't create any resources on CodeDeploy. You must create an application and a deployment group for your ECS service on CodeDeploy in other way.

ecspresso deploy creates a new deployment for CodeDeploy, which starts to run on CodeDeploy.

$ ecspresso deploy --config ecspresso.yml --rollback-events DEPLOYMENT_FAILURE
2019/10/15 22:47:07 myService/default Starting deploy
Service: myService
Cluster: default
TaskDefinition: myService:5
TaskSets:
   PRIMARY myService:5 desired:1 pending:0 running:1
Events:
2019/10/15 22:47:08 myService/default Creating a new task definition by ecs-task-def.json
2019/10/15 22:47:08 myService/default Registering a new task definition...
2019/10/15 22:47:08 myService/default Task definition is registered myService:6
2019/10/15 22:47:08 myService/default desired count: 1
2019/10/15 22:47:09 myService/default Deployment d-XXXXXXXXX is created on CodeDeploy
2019/10/15 22:47:09 myService/default https://ap-northeast-1.console.aws.amazon.com/codesuite/codedeploy/deployments/d-XXXXXXXXX?region=ap-northeast-1

CodeDeploy appspec hooks can be defined in a config file. ecspresso automatically creates Resources and version elements in appspec on deploy.

cluster: default
service: test
service_definition: ecs-service-def.json
task_definition: ecs-task-def.json
appspec:
  Hooks:
    - BeforeInstall: "LambdaFunctionToValidateBeforeInstall"
    - AfterInstall: "LambdaFunctionToValidateAfterTraffic"
    - AfterAllowTestTraffic: "LambdaFunctionToValidateAfterTestTrafficStarts"
    - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowingProductionTraffic"
    - AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowingProductionTraffic"

Scale out/in

To change the desired count of the service, specify scale --tasks.

$ ecspresso scale --config ecspresso.yml --tasks 10

scale command is equivalent to deploy --skip-task-definition --no-update-service.

Example of create

escpresso can create a new service using service_definition JSON file and task_definition.

$ ecspresso create --config ecspresso.yml
...
# ecspresso.yml
service_definition: service.json

example of the service.json:

{
  "role": "ecsServiceRole",
  "desiredCount": 2,
  "loadBalancers": [
    {
      "containerName": "myLoadbalancer",
      "containerPort": 80,
      "targetGroupArn": "arn:aws:elasticloadbalancing:[region]:[account-id]:targetgroup/{target-name}/201ae83c14de522d"
    }
  ]
}

Keys are in the same format as aws ecs describe-services output.

  • deploymentConfiguration
  • launchType
  • loadBalancers
  • networkConfiguration
  • placementConstraint
  • placementStrategy
  • role
  • etc.

Example of run task

$ ecspresso run --config ecspresso.yml --task-def=db-migrate.json

When --task-def is not set, the task definition included in the service is used.

Other options for RunTask API are set by service attributes(CapacityProviderStrategy, LaunchType, PlacementConstraints, PlacementStrategy and PlatformVersion).

Notes

Use Jsonnet instead of JSON

ecspresso v1.7 or later can use Jsonnet file format for service and task definition.

If the file extension is .jsonnet, ecspresso will first process the file as Jsonnet, convert it to JSON, and then load it.

service_definition: ecs-service-def.jsonnet
task_definition: ecs-task-def.jsonnet

As ecspresso includes github.com/google/go-jsonnet as a library, jsonnet command is not required.

--ext-str and --ext-code flag sets Jsonnet External Variables.

$ ecspresso --ext-str Foo=foo --ext-code "Bar=1+1" ...
{
  foo: std.extVar('Foo'), // = "foo"
  bar: std.extVar('Bar'), // = 2
}

Deploy to Fargate

When deploying to Fargate, there are some required fields for task definitions and service definitions.

For task definitions,

  • requiresCompatibilities (must be "FARGATE")
  • networkMode (must be "awsvpc")
  • cpu (required)
  • memory (required)
  • executionRoleArn (optional)
{
  "taskDefinition": {
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
      "FARGATE"
    ],
    "cpu": "1024",
    "memory": "2048",
    // ...
}

For service-definition,

  • launchType (must be "FARGATE")
  • networkConfiguration (must be "awsvpcConfiguration")
{
  "launchType": "FARGATE",
  "networkConfiguration": {
    "awsvpcConfiguration": {
      "subnets": [
        "subnet-aaaaaaaa",
        "subnet-bbbbbbbb"
      ],
      "securityGroups": [
        "sg-11111111"
      ],
      "assignPublicIp": "ENABLED"
    }
  },
  // ...
}

Fargate Spot support

  1. Set capacityProviders and defaultCapacityProviderStrategy to ECS cluster.
  2. If you are to migrate existing service to use Fargate Spot, define capacityProviderStrategy into service definition as below. ecspresso deploy --update-service applies the settings to the service.
{
  "capacityProviderStrategy": [
    {
      "base": 1,
      "capacityProvider": "FARGATE",
      "weight": 1
    },
    {
      "base": 0,
      "capacityProvider": "FARGATE_SPOT",
      "weight": 1
    }
  ],
  # ...

How to check diff and verify service/task definitions before deploy.

ecspresso supports diff and verify subcommands.

diff

Shows differences between local task/service definitions and remote (on ECS) definitions.

$ ecspresso --config ecspresso.yml diff --unified
--- arn:aws:ecs:ap-northeast-1:123456789012:service/ecspresso-test/nginx-local
+++ ecs-service-def.json
@@ -38,5 +38,5 @@
   },
   "placementConstraints": [],
   "placementStrategy": [],
-  "platformVersion": "1.3.0"
+  "platformVersion": "LATEST"
 }
 
--- arn:aws:ecs:ap-northeast-1:123456789012:task-definition/ecspresso-test:202
+++ ecs-task-def.json
@@ -1,6 +1,10 @@
 {
   "containerDefinitions": [
     {
       "cpu": 0,
       "environment": [],
       "essential": true,
-      "image": "nginx:latest",
+      "image": "nginx:alpine",
       "logConfiguration": {
         "logDriver": "awslogs",
         "options": {
verify

Verify resources related to service/task definitions.

For example,

  • Whether the ECS cluster exists.
  • Whether the target groups in service definitions match the container name and port defined in the definitions.
  • Whether the task role and the task execution role exist and can be assumed by ecs-tasks.amazonaws.com.
  • Whether the container images exist at the URL defined in task definitions. (Checks only for ECR or DockerHub public images.)
  • Whether the secrets in task definitions exist and are readable.
  • Whether it can create log streams, can put messages to the streams in the specified CloudWatch log groups.

ecspresso verify tries to assume-role the task execution role defined in task definitions to verify these items. If the assume-role fails, the verification continues using the current session.

$ ecspresso --config ecspresso.yml verify
2020/12/08 11:43:10 nginx-local/ecspresso-test Starting verify
  TaskDefinition
    ExecutionRole[arn:aws:iam::123456789012:role/ecsTaskRole]
    --> [OK]
    TaskRole[arn:aws:iam::123456789012:role/ecsTaskRole]
    --> [OK]
    ContainerDefinition[nginx]
      Image[nginx:alpine]
      --> [OK]
      LogConfiguration[awslogs]
      --> [OK]
    --> [OK]
  --> [OK]
  ServiceDefinition
  --> [OK]
  Cluster
  --> [OK]
2020/12/08 11:43:14 nginx-local/ecspresso-test Verify OK!
tasks

task subcommand lists tasks run by a service or having the same family to a task definition.

Flags:
  --id=""                task ID
  --output=table         output format (table|json|tsv)
  --find                 find a task from tasks list and dump it as JSON
  --stop                 stop a task
  --force                stop a task without confirmation prompt

When --find option is set, you can select a task in a list of tasks and show the task as JSON.

filter_command in ecspresso.yml can define a command to filter tasks. For example peco, fzf and etc.

filter_command: peco

When --stop option is set, you can select a task in a list of tasks and stop the task.

exec

exec subcommand executes a command on task.

session-manager-plugin is required in PATH.

Flags:
  --id=""                task ID
  --command="sh"         command
  --container=CONTAINER  container name

If --id is not set, the command shows the list of tasks, which could be used to select which task to exec on.

filter_command in ecspresso.yml works the same as tasks subcommand.

See also the official document Using Amazon ECS Exec for debugging.

port forwarding

ecspresso exec --port-forward forwards local port to ECS tasks port.

$ ecspresso exec --port-forward --port 80 --local-port 8080
...

If --id is not set, the command shows the list of tasks, which could be used to select which task to forward port.

When --local-port is not specified, ephemeral port will be used for the local port.

suspend / resume application auto scaling

ecspresso deploy and scale can suspend / resume application auto scaling.

--suspend-auto-scaling sets suspended state true. --resume-auto-scaling sets suspended state false.

When you simply want to change the suspended state, try ecspresso scale --suspend-auto-scaling or ecspresso scale --resume-auto-scaling. That operation will only change the suspended state.

Plugins

tfstate

tfstate plugin introduces a template function tfstate.

ecspresso.yml

region: ap-northeast-1
cluster: default
service: test
service_definition: ecs-service-def.json
task_definition: ecs-task-def.json
plugins:
  - name: tfstate
    config:
      path: terraform.tfstate    # path to tfstate file
      # or url: s3://my-bucket/terraform.tfstate

ecs-service-def.json

{
  "networkConfiguration": {
    "awsvpcConfiguration": {
      "subnets": [
        "{{ tfstatef `aws_subnet.private['%s'].id` `az-a` }}"
      ],
      "securityGroups": [
        "{{ tfstate `data.aws_security_group.default.id` }}"
      ]
    }
  }
}

{{ tfstate "resource_type.resource_name.attr" }} will be expanded to the attribute value of the resource in tfstate.

{{ tfstatef "resource_type.resource_name['%s'].attr" "index" }} is similar to {{ tfstatef "resource_type.resource_name['index'].attr" }}. This function is useful to build a resource address with environment variables.

{{ tfstatef `aws_subnet.ecs['%s'].id` (must_env `SERVICE`) }}

cloudformation

cloudformation plugin introduces template functions cfn_output and cfn_export.

An example of CloudFormation stack template that defines Outputs and Exports is:

# StackName: ECS-ecspresso
Outputs:
  SubnetAz1:
    Value: !Ref PublicSubnetAz1
  SubnetAz2:
    Value: !Ref PublicSubnetAz2
  EcsSecurityGroupId:
    Value: !Ref EcsSecurityGroup
    Export:
      Name: !Sub ${AWS::StackName}-EcsSecurityGroupId

The cloudformation plugin needs to be loaded in the config file.

ecspresso.yml

# ...
plugins:
  - name: cloudformation

cfn_output StackName OutputKey lookups OutputValue of OutputKey in the StackName. cfn_export ExportName lookups exported value by name.

ecs-service-def.json

{
  "networkConfiguration": {
    "awsvpcConfiguration": {
      "subnets": [
        "{{ cfn_output `ECS-ecspresso` `SubnetAz1` }}",
        "{{ cfn_output `ECS-ecspresso` `SubnetAz2` }}"
      ],
      "securityGroups": [
        "{{ cfn_export `ECS-ecspresso-EcsSecurityGroupId` }}"
      ]
    }
  }
}

LICENCE

MIT

Author

KAYAC Inc.

Documentation

Index

Constants

View Source
const (
	DefaultClusterName = "default"
	DefaultTimeout     = 10 * time.Minute
)
View Source
const (
	CodeDeployConsoleURLFmt = "https://%s.console.aws.amazon.com/codesuite/codedeploy/deployments/%s?region=%s"
)
View Source
const DefaultDesiredCount = -1
View Source
const SessionManagerPluginBinary = "session-manager-plugin"

Variables

View Source
var CreateFileMode = os.FileMode(0644)
View Source
var TerminalWidth = 90

Functions

func ExportEnvFile added in v1.4.0

func ExportEnvFile(file string) error

ExportEnvFile exports envfile to environment variables.

func MarshalJSON added in v0.11.0

func MarshalJSON(s interface{}) ([]byte, error)

func MarshalJSONString added in v0.16.0

func MarshalJSONString(s interface{}) string

Types

type App added in v0.0.2

type App struct {
	Service string
	Cluster string

	Debug bool

	ExtStr  map[string]string
	ExtCode map[string]string
	// contains filtered or unexported fields
}

func NewApp added in v0.1.0

func NewApp(conf *Config) (*App, error)

func (*App) AppSpec added in v0.99.7

func (d *App) AppSpec(opt AppSpecOption) error

func (*App) Create added in v0.2.0

func (d *App) Create(opt CreateOption) error

func (*App) DebugLog added in v0.10.0

func (d *App) DebugLog(v ...interface{})

func (*App) Delete added in v0.4.0

func (d *App) Delete(opt DeleteOption) error

func (*App) Deploy added in v0.1.0

func (d *App) Deploy(opt DeployOption) error

func (*App) DeployByCodeDeploy added in v0.12.0

func (d *App) DeployByCodeDeploy(ctx context.Context, taskDefinitionArn string, count *int64, sv *ecs.Service, opt DeployOption) error

func (*App) Deregister added in v1.7.0

func (d *App) Deregister(opt DeregisterOption) error

func (*App) DescribeService added in v0.16.0

func (d *App) DescribeService(ctx context.Context) (*ecs.Service, error)

func (*App) DescribeServiceDeployments added in v0.0.2

func (d *App) DescribeServiceDeployments(ctx context.Context, startedAt time.Time) (int, error)

func (*App) DescribeServiceStatus added in v0.1.0

func (d *App) DescribeServiceStatus(ctx context.Context, events int) (*ecs.Service, error)

func (*App) DescribeServicesInput added in v0.0.2

func (d *App) DescribeServicesInput() *ecs.DescribeServicesInput

func (*App) DescribeTaskDefinition added in v0.8.1

func (d *App) DescribeTaskDefinition(ctx context.Context, tdArn string) (*TaskDefinitionInput, error)

func (*App) DescribeTaskStatus added in v0.15.0

func (d *App) DescribeTaskStatus(ctx context.Context, task *ecs.Task, watchContainer *ecs.ContainerDefinition) error

func (*App) DescribeTasksInput added in v0.5.0

func (d *App) DescribeTasksInput(task *ecs.Task) *ecs.DescribeTasksInput

func (*App) Diff added in v0.16.0

func (d *App) Diff(opt DiffOption) error

func (*App) Exec added in v1.5.0

func (d *App) Exec(opt ExecOption) error

func (*App) FindRollbackTarget added in v0.1.0

func (d *App) FindRollbackTarget(ctx context.Context, taskDefinitionArn string) (string, error)

func (*App) GetLogEvents added in v0.5.0

func (d *App) GetLogEvents(ctx context.Context, logGroup string, logStream string, startedAt time.Time, nextToken *string) (*string, error)

func (*App) GetLogEventsInput added in v0.5.0

func (d *App) GetLogEventsInput(logGroup string, logStream string, startAt int64, nextToken *string) *cloudwatchlogs.GetLogEventsInput

func (*App) GetLogInfo added in v0.5.0

func (d *App) GetLogInfo(task *ecs.Task, c *ecs.ContainerDefinition) (string, string)

func (*App) Init added in v0.11.0

func (d *App) Init(opt InitOption) error

func (*App) LoadServiceDefinition added in v0.2.0

func (d *App) LoadServiceDefinition(path string) (*ecs.Service, error)

func (*App) LoadTaskDefinition added in v0.0.2

func (d *App) LoadTaskDefinition(path string) (*TaskDefinitionInput, error)

func (*App) Log added in v0.0.2

func (d *App) Log(v ...interface{})

func (*App) LogJSON added in v0.16.0

func (d *App) LogJSON(v interface{})

func (*App) Name added in v0.0.2

func (d *App) Name() string

func (*App) Register added in v0.10.0

func (d *App) Register(opt RegisterOption) error

func (*App) RegisterTaskDefinition added in v0.0.2

func (d *App) RegisterTaskDefinition(ctx context.Context, td *TaskDefinitionInput) (*TaskDefinition, error)

func (*App) Render added in v1.2.0

func (d *App) Render(opt RenderOption) error

func (*App) Revesions added in v1.7.0

func (d *App) Revesions(opt RevisionsOption) error

func (*App) Rollback added in v0.1.0

func (d *App) Rollback(opt RollbackOption) error

func (*App) RollbackByCodeDeploy added in v1.5.0

func (d *App) RollbackByCodeDeploy(ctx context.Context, sv *ecs.Service, tdArn string, opt RollbackOption) error

func (*App) Run added in v0.5.0

func (d *App) Run(opt RunOption) error

func (*App) RunTask added in v0.5.0

func (d *App) RunTask(ctx context.Context, tdArn string, ov *ecs.TaskOverride, opt *RunOption) (*ecs.Task, error)

func (*App) Start added in v0.1.0

func (d *App) Start() (context.Context, context.CancelFunc)

func (*App) Status added in v0.1.0

func (d *App) Status(opt StatusOption) error

func (*App) Tasks added in v1.5.0

func (d *App) Tasks(opt TasksOption) error

func (*App) UpdateServiceAttributes added in v0.13.3

func (d *App) UpdateServiceAttributes(ctx context.Context, sv *ecs.Service, opt DeployOption) error

func (*App) UpdateServiceTasks added in v0.13.3

func (d *App) UpdateServiceTasks(ctx context.Context, taskDefinitionArn string, count *int64, opt DeployOption) error

func (*App) Verify added in v1.2.0

func (d *App) Verify(opt VerifyOption) error

Verify verifies service / task definitions related resources are valid.

func (*App) Wait added in v0.9.0

func (d *App) Wait(opt WaitOption) error

func (*App) WaitForCodeDeploy added in v0.99.1

func (d *App) WaitForCodeDeploy(ctx context.Context, sv *ecs.Service) error

func (*App) WaitRunTask added in v0.5.0

func (d *App) WaitRunTask(ctx context.Context, task *ecs.Task, watchContainer *ecs.ContainerDefinition, startedAt time.Time, untilRunning bool) error

func (*App) WaitServiceStable added in v0.0.2

func (d *App) WaitServiceStable(ctx context.Context, startedAt time.Time) error

type AppSpecOption added in v0.99.7

type AppSpecOption struct {
	TaskDefinition *string
	UpdateService  *bool
}

type Config added in v0.0.2

type Config struct {
	RequiredVersion       string           `yaml:"required_version,omitempty"`
	Region                string           `yaml:"region"`
	Cluster               string           `yaml:"cluster"`
	Service               string           `yaml:"service"`
	ServiceDefinitionPath string           `yaml:"service_definition"`
	TaskDefinitionPath    string           `yaml:"task_definition"`
	Timeout               time.Duration    `yaml:"timeout"`
	Plugins               []ConfigPlugin   `yaml:"plugins,omitempty"`
	AppSpec               *appspec.AppSpec `yaml:"appspec,omitempty"`
	FilterCommand         string           `yaml:"filter_command,omitempty"`
	// contains filtered or unexported fields
}

Config represents a configuration.

func NewDefaultConfig added in v0.1.0

func NewDefaultConfig() *Config

NewDefaultConfig creates a default configuration.

func (*Config) Load added in v0.99.0

func (c *Config) Load(path string) error

Load loads configuration file from file path.

func (*Config) Restrict added in v0.99.0

func (c *Config) Restrict() error

Restrict restricts a configuration.

func (*Config) ValidateVersion added in v1.3.0

func (c *Config) ValidateVersion(version string) error

ValidateVersion validates a version satisfies required_version.

type ConfigPlugin added in v0.14.0

type ConfigPlugin struct {
	Name   string                 `yaml:"name"`
	Config map[string]interface{} `yaml:"config"`
}

func (ConfigPlugin) Setup added in v0.14.0

func (p ConfigPlugin) Setup(c *Config) error

type CreateOption added in v0.2.0

type CreateOption struct {
	DryRun       *bool
	DesiredCount *int64
	NoWait       *bool
}

func (CreateOption) DryRunString added in v0.13.3

func (opt CreateOption) DryRunString() string

type DeleteOption added in v0.4.0

type DeleteOption struct {
	DryRun *bool
	Force  *bool
}

func (DeleteOption) DryRunString added in v0.13.3

func (opt DeleteOption) DryRunString() string

type DeployOption added in v0.2.0

type DeployOption struct {
	DryRun               *bool
	DesiredCount         *int64
	SkipTaskDefinition   *bool
	ForceNewDeployment   *bool
	NoWait               *bool
	SuspendAutoScaling   *bool
	RollbackEvents       *string
	UpdateService        *bool
	LatestTaskDefinition *bool
}

func (DeployOption) DryRunString added in v0.13.3

func (opt DeployOption) DryRunString() string

type DeregisterOption added in v1.7.0

type DeregisterOption struct {
	DryRun   *bool
	Keeps    *int
	Revision *int64
	Force    *bool
}

func (DeregisterOption) DryRunString added in v1.7.0

func (opt DeregisterOption) DryRunString() string

type DiffOption added in v0.16.0

type DiffOption struct {
	Unified *bool
}

type DryRunnable added in v0.13.3

type DryRunnable interface {
	DryRunString() bool
}

type ExecOption added in v1.5.0

type ExecOption struct {
	ID        *string
	Command   *string
	Container *string

	PortForward *bool
	LocalPort   *int
	Port        *int
}

type InitOption added in v0.11.0

type InitOption struct {
	Region                *string
	Cluster               *string
	Service               *string
	TaskDefinitionPath    *string
	ServiceDefinitionPath *string
	ConfigFilePath        *string
	ForceOverwrite        *bool
	Jsonnet               *bool
}

type RegisterOption added in v0.10.0

type RegisterOption struct {
	DryRun *bool
	Output *bool
}

func (RegisterOption) DryRunString added in v0.13.3

func (opt RegisterOption) DryRunString() string

type RenderOption added in v1.2.0

type RenderOption struct {
	ConfigFile        *bool
	ServiceDefinition *bool
	TaskDefinition    *bool
}

type RevisionsOption added in v1.7.0

type RevisionsOption struct {
	Revision *int64
	Output   *string
}

type RollbackOption added in v0.2.0

type RollbackOption struct {
	DryRun                   *bool
	DeregisterTaskDefinition *bool
	NoWait                   *bool
	RollbackEvents           *string
}

func (RollbackOption) DryRunString added in v0.13.3

func (opt RollbackOption) DryRunString() string

type RunOption added in v0.5.0

type RunOption struct {
	DryRun               *bool
	TaskDefinition       *string
	NoWait               *bool
	TaskOverrideStr      *string
	TaskOverrideFile     *string
	SkipTaskDefinition   *bool
	Count                *int64
	WatchContainer       *string
	LatestTaskDefinition *bool
	PropagateTags        *string
	Tags                 *string
	WaitUntil            *string
	Revision             *int64
}

func (RunOption) DryRunString added in v0.13.3

func (opt RunOption) DryRunString() string

type StatusOption added in v0.2.0

type StatusOption struct {
	Events *int
}

type TaskDefinition

type TaskDefinition = ecs.TaskDefinition

type TaskDefinitionInput added in v1.5.0

type TaskDefinitionInput = ecs.RegisterTaskDefinitionInput

type TasksOption added in v1.5.0

type TasksOption struct {
	ID     *string
	Output *string
	Find   *bool
	Stop   *bool
	Force  *bool
	Trace  *bool
}

type VerifyOption added in v1.2.0

type VerifyOption struct {
	GetSecrets *bool
	PutLogs    *bool
}

VerifyOption represents options for Verify()

type WaitOption added in v0.9.0

type WaitOption struct {
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL