aws_pocketknife 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +1 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +115 -0
- data/Rakefile +22 -0
- data/aws_pocketknife.gemspec +40 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/cert/ca-bundle.crt +3988 -0
- data/exe/pocketknife +5 -0
- data/lib/aws_pocketknife.rb +88 -0
- data/lib/aws_pocketknife/admin/policies/developer_dev_acc.json +10 -0
- data/lib/aws_pocketknife/admin/policies/developer_prd_acc.json +15 -0
- data/lib/aws_pocketknife/admin/policies/tc_devops.json.erb +207 -0
- data/lib/aws_pocketknife/admin/policies/tester_dev_acc.json +176 -0
- data/lib/aws_pocketknife/admin/policies/tester_prd_acc.json +176 -0
- data/lib/aws_pocketknife/admin/policies/web_front_end.json.erb +59 -0
- data/lib/aws_pocketknife/admin/trust_relationships/ec2.json +13 -0
- data/lib/aws_pocketknife/asg.rb +56 -0
- data/lib/aws_pocketknife/cli/ami.rb +24 -0
- data/lib/aws_pocketknife/cli/asg.rb +40 -0
- data/lib/aws_pocketknife/cli/eb.rb +49 -0
- data/lib/aws_pocketknife/cli/ec2.rb +61 -0
- data/lib/aws_pocketknife/cli/elb.rb +20 -0
- data/lib/aws_pocketknife/cli/iam.rb +31 -0
- data/lib/aws_pocketknife/cli/main.rb +34 -0
- data/lib/aws_pocketknife/cli/rds.rb +13 -0
- data/lib/aws_pocketknife/cli/rds_snapshot.rb +44 -0
- data/lib/aws_pocketknife/cli/route53.rb +56 -0
- data/lib/aws_pocketknife/cloudwatch_logs.rb +25 -0
- data/lib/aws_pocketknife/common/logging.rb +31 -0
- data/lib/aws_pocketknife/common/utils.rb +63 -0
- data/lib/aws_pocketknife/ec2.rb +308 -0
- data/lib/aws_pocketknife/elastic_beanstalk.rb +62 -0
- data/lib/aws_pocketknife/elb.rb +25 -0
- data/lib/aws_pocketknife/iam.rb +135 -0
- data/lib/aws_pocketknife/rds.rb +84 -0
- data/lib/aws_pocketknife/route53.rb +234 -0
- data/lib/aws_pocketknife/tasks/asg.rake +18 -0
- data/lib/aws_pocketknife/tasks/cloudwatch.rake +12 -0
- data/lib/aws_pocketknife/tasks/ec2.rake +57 -0
- data/lib/aws_pocketknife/tasks/elastic_beanstalk.rake +25 -0
- data/lib/aws_pocketknife/tasks/elb.rake +13 -0
- data/lib/aws_pocketknife/tasks/iam.rake +57 -0
- data/lib/aws_pocketknife/tasks/route53.rake +64 -0
- data/lib/aws_pocketknife/version.rb +3 -0
- metadata +284 -0
@@ -0,0 +1,176 @@
|
|
1
|
+
{
|
2
|
+
"Version": "2012-10-17",
|
3
|
+
"Statement": [
|
4
|
+
{
|
5
|
+
"Action": [
|
6
|
+
"acm:DescribeCertificate",
|
7
|
+
"acm:GetCertificate",
|
8
|
+
"acm:ListCertificates",
|
9
|
+
"appstream:Get*",
|
10
|
+
"autoscaling:Describe*",
|
11
|
+
"cloudformation:DescribeStackEvents",
|
12
|
+
"cloudformation:DescribeStackResource",
|
13
|
+
"cloudformation:DescribeStackResources",
|
14
|
+
"cloudformation:DescribeStacks",
|
15
|
+
"cloudformation:GetTemplate",
|
16
|
+
"cloudformation:List*",
|
17
|
+
"cloudfront:Get*",
|
18
|
+
"cloudfront:List*",
|
19
|
+
"cloudsearch:Describe*",
|
20
|
+
"cloudsearch:List*",
|
21
|
+
"cloudtrail:DescribeTrails",
|
22
|
+
"cloudtrail:GetTrailStatus",
|
23
|
+
"cloudwatch:Describe*",
|
24
|
+
"cloudwatch:Get*",
|
25
|
+
"cloudwatch:List*",
|
26
|
+
"codecommit:BatchGetRepositories",
|
27
|
+
"codecommit:Get*",
|
28
|
+
"codecommit:GitPull",
|
29
|
+
"codecommit:List*",
|
30
|
+
"codedeploy:Batch*",
|
31
|
+
"codedeploy:Get*",
|
32
|
+
"codedeploy:List*",
|
33
|
+
"config:Deliver*",
|
34
|
+
"config:Describe*",
|
35
|
+
"config:Get*",
|
36
|
+
"datapipeline:DescribeObjects",
|
37
|
+
"datapipeline:DescribePipelines",
|
38
|
+
"datapipeline:EvaluateExpression",
|
39
|
+
"datapipeline:GetPipelineDefinition",
|
40
|
+
"datapipeline:ListPipelines",
|
41
|
+
"datapipeline:QueryObjects",
|
42
|
+
"datapipeline:ValidatePipelineDefinition",
|
43
|
+
"directconnect:Describe*",
|
44
|
+
"ds:Check*",
|
45
|
+
"ds:Describe*",
|
46
|
+
"ds:Get*",
|
47
|
+
"ds:List*",
|
48
|
+
"ds:Verify*",
|
49
|
+
"dynamodb:BatchGetItem",
|
50
|
+
"dynamodb:DescribeTable",
|
51
|
+
"dynamodb:GetItem",
|
52
|
+
"dynamodb:ListTables",
|
53
|
+
"dynamodb:Query",
|
54
|
+
"dynamodb:Scan",
|
55
|
+
"ec2:Describe*",
|
56
|
+
"ec2:GetConsoleOutput",
|
57
|
+
"ecr:GetAuthorizationToken",
|
58
|
+
"ecr:BatchCheckLayerAvailability",
|
59
|
+
"ecr:GetDownloadUrlForLayer",
|
60
|
+
"ecr:GetManifest",
|
61
|
+
"ecr:DescribeRepositories",
|
62
|
+
"ecr:ListImages",
|
63
|
+
"ecr:BatchGetImage",
|
64
|
+
"ecs:Describe*",
|
65
|
+
"ecs:List*",
|
66
|
+
"elasticache:Describe*",
|
67
|
+
"elasticache:List*",
|
68
|
+
"elasticbeanstalk:Check*",
|
69
|
+
"elasticbeanstalk:Describe*",
|
70
|
+
"elasticbeanstalk:List*",
|
71
|
+
"elasticbeanstalk:RequestEnvironmentInfo",
|
72
|
+
"elasticbeanstalk:RetrieveEnvironmentInfo",
|
73
|
+
"elasticloadbalancing:Describe*",
|
74
|
+
"elasticmapreduce:Describe*",
|
75
|
+
"elasticmapreduce:List*",
|
76
|
+
"elastictranscoder:List*",
|
77
|
+
"elastictranscoder:Read*",
|
78
|
+
"es:DescribeElasticsearchDomain",
|
79
|
+
"es:DescribeElasticsearchDomains",
|
80
|
+
"es:DescribeElasticsearchDomainConfig",
|
81
|
+
"es:ListDomainNames",
|
82
|
+
"es:ListTags",
|
83
|
+
"es:ESHttpGet",
|
84
|
+
"es:ESHttpHead",
|
85
|
+
"events:DescribeRule",
|
86
|
+
"events:ListRuleNamesByTarget",
|
87
|
+
"events:ListRules",
|
88
|
+
"events:ListTargetsByRule",
|
89
|
+
"events:TestEventPattern",
|
90
|
+
"firehose:Describe*",
|
91
|
+
"firehose:List*",
|
92
|
+
"glacier:ListVaults",
|
93
|
+
"glacier:DescribeVault",
|
94
|
+
"glacier:GetDataRetrievalPolicy",
|
95
|
+
"glacier:GetVaultAccessPolicy",
|
96
|
+
"glacier:GetVaultLock",
|
97
|
+
"glacier:GetVaultNotifications",
|
98
|
+
"glacier:ListJobs",
|
99
|
+
"glacier:ListMultipartUploads",
|
100
|
+
"glacier:ListParts",
|
101
|
+
"glacier:ListTagsForVault",
|
102
|
+
"glacier:DescribeJob",
|
103
|
+
"glacier:GetJobOutput",
|
104
|
+
"iam:GenerateCredentialReport",
|
105
|
+
"iam:Get*",
|
106
|
+
"iam:List*",
|
107
|
+
"inspector:Describe*",
|
108
|
+
"inspector:Get*",
|
109
|
+
"inspector:List*",
|
110
|
+
"inspector:LocalizeText",
|
111
|
+
"inspector:PreviewAgentsForResourceGroup",
|
112
|
+
"iot:Describe*",
|
113
|
+
"iot:Get*",
|
114
|
+
"iot:List*",
|
115
|
+
"kinesis:Describe*",
|
116
|
+
"kinesis:Get*",
|
117
|
+
"kinesis:List*",
|
118
|
+
"kms:Describe*",
|
119
|
+
"kms:Get*",
|
120
|
+
"kms:List*",
|
121
|
+
"lambda:List*",
|
122
|
+
"lambda:Get*",
|
123
|
+
"logs:Describe*",
|
124
|
+
"logs:Get*",
|
125
|
+
"logs:TestMetricFilter",
|
126
|
+
"machinelearning:Describe*",
|
127
|
+
"machinelearning:Get*",
|
128
|
+
"mobilehub:GetProject",
|
129
|
+
"mobilehub:ListAvailableFeatures",
|
130
|
+
"mobilehub:ListAvailableRegions",
|
131
|
+
"mobilehub:ListProjects",
|
132
|
+
"mobilehub:ValidateProject",
|
133
|
+
"mobilehub:VerifyServiceRole",
|
134
|
+
"opsworks:Describe*",
|
135
|
+
"opsworks:Get*",
|
136
|
+
"rds:Describe*",
|
137
|
+
"rds:ListTagsForResource",
|
138
|
+
"redshift:Describe*",
|
139
|
+
"redshift:ViewQueriesInConsole",
|
140
|
+
"route53:Get*",
|
141
|
+
"route53:List*",
|
142
|
+
"route53domains:CheckDomainAvailability",
|
143
|
+
"route53domains:GetDomainDetail",
|
144
|
+
"route53domains:GetOperationDetail",
|
145
|
+
"route53domains:ListDomains",
|
146
|
+
"route53domains:ListOperations",
|
147
|
+
"route53domains:ListTagsForDomain",
|
148
|
+
"s3:Get*",
|
149
|
+
"s3:List*",
|
150
|
+
"sdb:GetAttributes",
|
151
|
+
"sdb:List*",
|
152
|
+
"sdb:Select*",
|
153
|
+
"ses:Get*",
|
154
|
+
"ses:List*",
|
155
|
+
"sns:Get*",
|
156
|
+
"sns:List*",
|
157
|
+
"sqs:GetQueueAttributes",
|
158
|
+
"sqs:ListQueues",
|
159
|
+
"sqs:ReceiveMessage",
|
160
|
+
"storagegateway:Describe*",
|
161
|
+
"storagegateway:List*",
|
162
|
+
"swf:Count*",
|
163
|
+
"swf:Describe*",
|
164
|
+
"swf:Get*",
|
165
|
+
"swf:List*",
|
166
|
+
"tag:Get*",
|
167
|
+
"trustedadvisor:Describe*",
|
168
|
+
"waf:Get*",
|
169
|
+
"waf:List*",
|
170
|
+
"workspaces:Describe*"
|
171
|
+
],
|
172
|
+
"Effect": "Allow",
|
173
|
+
"Resource": "*"
|
174
|
+
}
|
175
|
+
]
|
176
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
{
|
2
|
+
"Version": "2012-10-17",
|
3
|
+
"Statement": [
|
4
|
+
{
|
5
|
+
"Sid": "Stmt1445469060000",
|
6
|
+
"Effect": "Allow",
|
7
|
+
"Action": [
|
8
|
+
"ec2:CreateTags",
|
9
|
+
"ec2:DescribeTags",
|
10
|
+
"ec2:RunInstances"
|
11
|
+
],
|
12
|
+
"Resource": [
|
13
|
+
"*"
|
14
|
+
]
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"Sid": "Stmt1445469103000",
|
18
|
+
"Effect": "Allow",
|
19
|
+
"Action": [
|
20
|
+
"s3:GetObject"
|
21
|
+
],
|
22
|
+
"Resource": [
|
23
|
+
<% buckets.first(buckets.length-1).each do |bucket| %>
|
24
|
+
"<%= bucket %>/*",
|
25
|
+
<% end %>
|
26
|
+
"<%= buckets.reverse[0] %>"
|
27
|
+
]
|
28
|
+
},
|
29
|
+
{
|
30
|
+
"Effect": "Allow",
|
31
|
+
"Action": [
|
32
|
+
"s3:PutObject",
|
33
|
+
"s3:ListBucket"
|
34
|
+
],
|
35
|
+
"Resource": [
|
36
|
+
<% buckets.first(buckets.length-1).each do |bucket| %>
|
37
|
+
"<%= bucket %>/logs",
|
38
|
+
"<%= bucket %>/logs/*",
|
39
|
+
<% end %>
|
40
|
+
"<%= buckets.reverse[0] %>"
|
41
|
+
]
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"Sid": "AllowAccessToSSM",
|
45
|
+
"Effect": "Allow",
|
46
|
+
"Action": [
|
47
|
+
"cloudwatch:PutMetricData",
|
48
|
+
"logs:CreateLogGroup",
|
49
|
+
"logs:CreateLogStream",
|
50
|
+
"logs:DescribeLogGroups",
|
51
|
+
"logs:DescribeLogStreams",
|
52
|
+
"logs:PutLogEvents"
|
53
|
+
],
|
54
|
+
"Resource": [
|
55
|
+
"*"
|
56
|
+
]
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'aws_pocketknife'
|
2
|
+
require 'base64'
|
3
|
+
require 'openssl'
|
4
|
+
|
5
|
+
module AwsPocketknife
|
6
|
+
module Asg
|
7
|
+
|
8
|
+
class << self
|
9
|
+
include AwsPocketknife::Common::Utils
|
10
|
+
|
11
|
+
def describe_asg_by_name(name: "")
|
12
|
+
asgs = []
|
13
|
+
asg_list = name.split(";")
|
14
|
+
resp = asg_client.describe_auto_scaling_groups({
|
15
|
+
auto_scaling_group_names: asg_list,
|
16
|
+
})
|
17
|
+
resp.auto_scaling_groups.each do |asg|
|
18
|
+
asgs << asg
|
19
|
+
end
|
20
|
+
asgs
|
21
|
+
end
|
22
|
+
|
23
|
+
def list(max_records: 100)
|
24
|
+
asgs = []
|
25
|
+
resp = asg_client.describe_auto_scaling_groups({
|
26
|
+
max_records: max_records,
|
27
|
+
})
|
28
|
+
asgs << resp.auto_scaling_groups
|
29
|
+
next_token = resp.next_token
|
30
|
+
while true
|
31
|
+
break if next_token.nil? or next_token.empty?
|
32
|
+
resp = get_asgs(next_token: next_token, max_records: max_records)
|
33
|
+
asgs << resp.auto_scaling_groups
|
34
|
+
next_token = resp.next_token
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
asgs.flatten!
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def get_asgs(next_token: "", max_records: 100)
|
45
|
+
|
46
|
+
asg_client.describe_auto_scaling_groups({
|
47
|
+
max_records: max_records,
|
48
|
+
next_token: next_token,
|
49
|
+
})
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "aws_pocketknife"
|
3
|
+
|
4
|
+
module AwsPocketknife
|
5
|
+
module Cli
|
6
|
+
class Ami < Thor
|
7
|
+
|
8
|
+
desc "clean AMI_NAME_PATTERN DAYS --dry_run", "Given a name or filter (i.e, test-*), this command will delete all matched AMIs (and associated snapshots) with creation time lower than DAYS."
|
9
|
+
option :dry_run, :type => :boolean, :default => true, :desc => 'just show images that would be deleted'
|
10
|
+
def clean(ami_name_pattern, days)
|
11
|
+
dry_run = options.fetch("dry_run", true)
|
12
|
+
AwsPocketknife::Ec2.clean_ami ami_name_pattern: ami_name_pattern,
|
13
|
+
days: days,
|
14
|
+
dry_run: dry_run
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "share IMAGE_ID ACCOUNT_ID", "share the IMAGE_ID with the specified ACCOUNT_ID"
|
18
|
+
def share(image_id, account_id)
|
19
|
+
AwsPocketknife::Ec2.share_ami(image_id: image_id, user_id: account_id)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "aws_pocketknife"
|
3
|
+
|
4
|
+
module AwsPocketknife
|
5
|
+
module Cli
|
6
|
+
class Asg < Thor
|
7
|
+
|
8
|
+
desc "list", "list all autoscaling groups"
|
9
|
+
def list
|
10
|
+
asgs = AwsPocketknife::Asg.list
|
11
|
+
print_asg(asgs: asgs)
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "desc ASG_NAME", "describe autoscaling group name"
|
15
|
+
def desc(asg_name)
|
16
|
+
asgs = AwsPocketknife::Asg.describe_asg_by_name(name: asg_name)
|
17
|
+
print_asg(asgs: asgs)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def print_asg(asgs: [])
|
23
|
+
headers = ["name", "min size", "max size", "desired capacity", "instances", "elb"]
|
24
|
+
data = []
|
25
|
+
if asgs.length > 0
|
26
|
+
asgs.each do |asg|
|
27
|
+
instances = []
|
28
|
+
asg.instances.map { |instance| instances << instance.instance_id }
|
29
|
+
data << [asg.auto_scaling_group_name, asg.min_size, asg.max_size,
|
30
|
+
asg.desired_capacity, instances.join(", "), asg.load_balancer_names.join(", ")]
|
31
|
+
end
|
32
|
+
AwsPocketknife::Asg.pretty_table(headers: headers, data: data)
|
33
|
+
else
|
34
|
+
puts "No asg(s) found for name #{args[:name]}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "aws_pocketknife"
|
3
|
+
|
4
|
+
module AwsPocketknife
|
5
|
+
module Cli
|
6
|
+
class Eb < Thor
|
7
|
+
|
8
|
+
desc "list", "list environments"
|
9
|
+
def list
|
10
|
+
environments = AwsPocketknife::ElasticBeanstalk.describe_environment
|
11
|
+
headers = [ 'App Name', 'Env Name', 'cname', 'Updated', 'Version', 'Health']
|
12
|
+
data = []
|
13
|
+
environments.each do |e|
|
14
|
+
data << [e.application_name, e.environment_name, e.cname, e.date_updated, e.version_label, e.health]
|
15
|
+
end
|
16
|
+
AwsPocketknife::ElasticBeanstalk.pretty_table(headers: headers, data: data)
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "desc ENVIRONMENT_NAME", "describe environment name"
|
20
|
+
def desc(environment_name)
|
21
|
+
environment = AwsPocketknife::ElasticBeanstalk.describe_environment_resources(environment_name: environment_name)
|
22
|
+
unless environment.nil?
|
23
|
+
AwsPocketknife::ElasticBeanstalk.nice_print(object: environment.to_h)
|
24
|
+
else
|
25
|
+
puts "#{environment_name} not found"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "vars NAME", "list environment variables for the specified elastic beanstalk environment name"
|
30
|
+
def vars(environment_name)
|
31
|
+
variables = AwsPocketknife::ElasticBeanstalk.list_environment_variables(environment_name: environment_name)
|
32
|
+
headers = [ 'Name', 'Value']
|
33
|
+
data = []
|
34
|
+
variables.each do |v|
|
35
|
+
v_temp = v.split("=")
|
36
|
+
name = v_temp[0]
|
37
|
+
|
38
|
+
# remove first element (headers) from array
|
39
|
+
v_temp.shift
|
40
|
+
value = v_temp.join
|
41
|
+
data << [name, value]
|
42
|
+
end
|
43
|
+
puts "Environment: #{environment_name}"
|
44
|
+
AwsPocketknife::ElasticBeanstalk.pretty_table(headers: headers, data: data)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require "thor"
|
2
|
+
require "aws_pocketknife"
|
3
|
+
|
4
|
+
module AwsPocketknife
|
5
|
+
module Cli
|
6
|
+
class Ec2 < Thor
|
7
|
+
|
8
|
+
desc "find_by_name NAME", "find instances by name. (You can filter by adding *) "
|
9
|
+
def find_by_name(name)
|
10
|
+
|
11
|
+
instances = AwsPocketknife::Ec2.find_by_name(name: name)
|
12
|
+
headers = ["name", "id", "image", "state", "private ip", "public ip", "type", "key name", "launch time"]
|
13
|
+
data = []
|
14
|
+
if instances.length > 0
|
15
|
+
instances.each do |instance|
|
16
|
+
name = AwsPocketknife::Ec2.get_tag_value(tags: instance.tags, tag_key: "Name")
|
17
|
+
data << [name, instance.instance_id, instance.image_id, instance.state.name,
|
18
|
+
instance.private_ip_address, instance.public_ip_address, instance.instance_type,
|
19
|
+
instance.key_name, instance.launch_time]
|
20
|
+
end
|
21
|
+
AwsPocketknife::Ec2.pretty_table(headers: headers, data: data)
|
22
|
+
else
|
23
|
+
puts "No instance(s) found for name #{name}"
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "find_by_id INSTANCE_ID", "find instances by id."
|
29
|
+
def find_by_id(instance_id)
|
30
|
+
instance = AwsPocketknife::Ec2.find_by_id(instance_id: instance_id)
|
31
|
+
if instance.nil?
|
32
|
+
puts "Instance #{instance_id} not found"
|
33
|
+
else
|
34
|
+
AwsPocketknife::Ec2.nice_print(object: instance.to_h)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "get_windows_password INSTANCE_ID", "get windows password."
|
39
|
+
def get_windows_password(instance_id)
|
40
|
+
instance = AwsPocketknife::Ec2.get_windows_password(instance_id: instance_id)
|
41
|
+
headers = ["instance id", "password", "private ip", "public ip"]
|
42
|
+
data = [[instance.instance_id,
|
43
|
+
instance.password,
|
44
|
+
instance.private_ip_address,
|
45
|
+
instance.public_ip_address]]
|
46
|
+
AwsPocketknife::Ec2.pretty_table(headers: headers, data: data)
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "stop INSTANCE_ID", "stop ec2 instance"
|
50
|
+
def stop(instance_id)
|
51
|
+
AwsPocketknife::Ec2.stop_instance_by_id(instance_id)
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "start INSTANCE_ID", "start ec2 instance"
|
55
|
+
def start(instance_id)
|
56
|
+
AwsPocketknife::Ec2.start_instance_by_id(instance_id)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|