-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexec.go
More file actions
85 lines (75 loc) · 2.7 KB
/
Copy pathexec.go
File metadata and controls
85 lines (75 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"errors"
"fmt"
"github.com/Mic-U/ecsher/config"
"github.com/Mic-U/ecsher/ecs"
"github.com/Mic-U/ecsher/session"
"github.com/Mic-U/ecsher/util"
"github.com/spf13/cobra"
)
// execCmd represents the exec command
var execCmd = &cobra.Command{
Use: "exec TASK_NAME COMMAND",
Short: "Execution command in the container",
Long: `Execution command in the container`,
Args: func(cmd *cobra.Command, args []string) error {
if len(args) < 2 {
return errors.New("must specify TASK_NAME and COMMAND")
}
return nil
},
Run: func(cmd *cobra.Command, args []string) {
task := args[0]
command := util.ExtractCommand(args)
exec(task, command)
},
Example: ` # Exec task which has single container
ecsher exec 5018d08c0be448ae9040beb6cc5879f4 /bin/bash -i
# Exec task which has multiple container
ecsher exec 5018d08c0be448ae9040beb6cc5879f4 /bin/bash --container nginx -i
# Exec command with option
ecsher exec 5018d08c0be448ae9040beb6cc5879f4 "ls -al" --container nginx -i`,
}
type ExecOptions struct {
Cluster string
Region string
Container string
Interactive bool
}
var execOptions ExecOptions
func init() {
rootCmd.AddCommand(execCmd)
execCmd.Flags().StringVarP(&execOptions.Cluster, "cluster", "c", "", "Cluster Name")
execCmd.Flags().StringVarP(&execOptions.Region, "region", "r", "", "Region")
execCmd.Flags().StringVar(&execOptions.Container, "container", "", "Container Name")
execCmd.Flags().BoolVarP(&execOptions.Interactive, "interactive", "i", false, "Interactive mode(Currently, support only interactive mode)")
}
func exec(taskName string, command string) {
region := execOptions.Region
cluster := config.EcsherConfigManager.GetCluster(execOptions.Cluster, RootOptions.profile)
fmt.Printf("Cluster: %s\n", cluster)
client := ecs.GetClient(region, RootOptions.profile)
output, err := ecs.ExecuteCommand(client, cluster, &ecs.ExecuteCmmandParams{
Task: taskName,
Container: execOptions.Container,
Command: command,
Interactive: execOptions.Interactive,
})
cobra.CheckErr(err)
cmd := session.NewSSMPluginCommand(region)
err = cmd.Start(output.Session)
cobra.CheckErr(err)
}