in internal/pkg/cli/task_run.go [1166:1307]
func BuildTaskRunCmd() *cobra.Command {
vars := runTaskVars{}
cmd := &cobra.Command{
Use: "run",
Short: "Run a one-off task on Amazon ECS.",
Example: `
Run a task using your local Dockerfile and display log streams after the task is running.
You will be prompted to specify an environment for the tasks to run in.
/code $ copilot task run
Run a task named "db-migrate" in the "test" environment under the current workspace.
/code $ copilot task run -n db-migrate --env test
Run 4 tasks with 2GB memory, an existing image, and a custom task role.
/code $ copilot task run --count 4 --memory 2048 --image=rds-migrate --task-role migrate-role
Run a task with environment variables.
/code $ copilot task run --env-vars name=myName,user=myUser
Run a task using the current workspace with specific subnets and security groups.
/code $ copilot task run --subnets subnet-123,subnet-456 --security-groups sg-123,sg-456
Run a task with a command.
/code $ copilot task run --command "python migrate-script.py"
Run a task with Docker build args.
/code $ copilot task run --build-args GO_VERSION=1.19"`,
RunE: runCmdE(func(cmd *cobra.Command, args []string) error {
opts, err := newTaskRunOpts(vars)
if err != nil {
return err
}
opts.nFlag = cmd.Flags().NFlag()
if cmd.Flags().Changed(dockerFileFlag) {
opts.isDockerfileSet = true
}
return run(opts)
}),
}
// add flags to comments.
cmd.Flags().StringVarP(&vars.groupName, taskGroupNameFlag, nameFlagShort, "", taskGroupFlagDescription)
cmd.Flags().StringVar(&vars.dockerfilePath, dockerFileFlag, defaultDockerfilePath, dockerFileFlagDescription)
cmd.Flags().StringToStringVar(&vars.dockerfileBuildArgs, dockerFileBuildArgsFlag, nil, dockerFileBuildArgsFlagDescription)
cmd.Flags().StringVar(&vars.dockerfileContextPath, dockerFileContextFlag, "", dockerFileContextFlagDescription)
cmd.Flags().StringVarP(&vars.image, imageFlag, imageFlagShort, "", imageFlagDescription)
cmd.Flags().StringVar(&vars.imageTag, imageTagFlag, "", taskImageTagFlagDescription)
cmd.Flags().StringVar(&vars.appName, appFlag, "", taskAppFlagDescription)
cmd.Flags().StringVar(&vars.env, envFlag, "", taskEnvFlagDescription)
cmd.Flags().StringVar(&vars.cluster, clusterFlag, "", clusterFlagDescription)
cmd.Flags().BoolVar(&vars.acknowledgeSecretsAccess, acknowledgeSecretsAccessFlag, false, acknowledgeSecretsAccessDescription)
cmd.Flags().StringSliceVar(&vars.subnets, subnetsFlag, nil, subnetsFlagDescription)
cmd.Flags().StringSliceVar(&vars.securityGroups, securityGroupsFlag, nil, securityGroupsFlagDescription)
cmd.Flags().BoolVar(&vars.useDefaultSubnetsAndCluster, taskDefaultFlag, false, taskRunDefaultFlagDescription)
cmd.Flags().IntVar(&vars.count, countFlag, 1, countFlagDescription)
cmd.Flags().IntVar(&vars.cpu, cpuFlag, 256, cpuFlagDescription)
cmd.Flags().IntVar(&vars.memory, memoryFlag, 512, memoryFlagDescription)
cmd.Flags().StringVar(&vars.taskRole, taskRoleFlag, "", taskRoleFlagDescription)
cmd.Flags().StringVar(&vars.executionRole, executionRoleFlag, "", executionRoleFlagDescription)
cmd.Flags().StringVar(&vars.os, osFlag, "", osFlagDescription)
cmd.Flags().StringVar(&vars.arch, archFlag, "", archFlagDescription)
cmd.Flags().StringToStringVar(&vars.envVars, envVarsFlag, nil, envVarsFlagDescription)
cmd.Flags().StringVar(&vars.envFile, envFileFlag, "", envFileFlagDescription)
cmd.Flags().StringToStringVar(&vars.secrets, secretsFlag, nil, secretsFlagDescription)
cmd.Flags().StringVar(&vars.command, commandFlag, "", runCommandFlagDescription)
cmd.Flags().StringVar(&vars.entrypoint, entrypointFlag, "", entrypointFlagDescription)
cmd.Flags().StringToStringVar(&vars.resourceTags, resourceTagsFlag, nil, resourceTagsFlagDescription)
cmd.Flags().BoolVar(&vars.follow, followFlag, false, followFlagDescription)
cmd.Flags().StringVar(&vars.generateCommandTarget, generateCommandFlag, "", generateCommandFlagDescription)
// group flags.
nameFlags := pflag.NewFlagSet("Name", pflag.ContinueOnError)
nameFlags.AddFlag(cmd.Flags().Lookup(taskGroupNameFlag))
buildFlags := pflag.NewFlagSet("Build", pflag.ContinueOnError)
buildFlags.AddFlag(cmd.Flags().Lookup(dockerFileFlag))
buildFlags.AddFlag(cmd.Flags().Lookup(dockerFileBuildArgsFlag))
buildFlags.AddFlag(cmd.Flags().Lookup(dockerFileContextFlag))
buildFlags.AddFlag(cmd.Flags().Lookup(imageFlag))
buildFlags.AddFlag(cmd.Flags().Lookup(imageTagFlag))
placementFlags := pflag.NewFlagSet("Placement", pflag.ContinueOnError)
placementFlags.AddFlag(cmd.Flags().Lookup(appFlag))
placementFlags.AddFlag(cmd.Flags().Lookup(envFlag))
placementFlags.AddFlag(cmd.Flags().Lookup(clusterFlag))
placementFlags.AddFlag(cmd.Flags().Lookup(subnetsFlag))
placementFlags.AddFlag(cmd.Flags().Lookup(securityGroupsFlag))
placementFlags.AddFlag(cmd.Flags().Lookup(taskDefaultFlag))
taskFlags := pflag.NewFlagSet("Task", pflag.ContinueOnError)
taskFlags.AddFlag(cmd.Flags().Lookup(countFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(cpuFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(memoryFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(taskRoleFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(executionRoleFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(osFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(archFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(envVarsFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(envFileFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(secretsFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(commandFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(entrypointFlag))
taskFlags.AddFlag(cmd.Flags().Lookup(resourceTagsFlag))
utilityFlags := pflag.NewFlagSet("Utility", pflag.ContinueOnError)
utilityFlags.AddFlag(cmd.Flags().Lookup(followFlag))
utilityFlags.AddFlag(cmd.Flags().Lookup(generateCommandFlag))
utilityFlags.AddFlag(cmd.Flags().Lookup(acknowledgeSecretsAccessFlag))
// prettify help menu.
cmd.Annotations = map[string]string{
"name": nameFlags.FlagUsages(),
"build": buildFlags.FlagUsages(),
"placement": placementFlags.FlagUsages(),
"task": taskFlags.FlagUsages(),
"utility": utilityFlags.FlagUsages(),
}
cmd.SetUsageTemplate(`{{h1 "Usage"}}
{{- if .Runnable}}
{{.UseLine}}
{{- end }}
{{h1 "Name Flags"}}
{{(index .Annotations "name") | trimTrailingWhitespaces}}
{{h1 "Build Flags"}}
{{(index .Annotations "build") | trimTrailingWhitespaces}}
{{h1 "Placement Flags"}}
{{(index .Annotations "placement") | trimTrailingWhitespaces}}
{{h1 "Task Configuration Flags"}}
{{(index .Annotations "task") | trimTrailingWhitespaces}}
{{h1 "Utility Flags"}}
{{(index .Annotations "utility") | trimTrailingWhitespaces}}
{{if .HasExample }}
{{- h1 "Examples"}}
{{- code .Example}}
{{- end}}
`)
return cmd
}