awsm 0.1.2 → 0.2.0
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 +4 -4
- data/lib/awsm.rb +3 -0
- data/lib/awsm/cli/main.rb +3 -0
- data/lib/awsm/cli/spin.rb +12 -51
- data/lib/awsm/cli/tag.rb +44 -0
- data/lib/awsm/clibase.rb +16 -0
- data/lib/awsm/table/instance.rb +70 -0
- data/lib/awsm/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2a776b8b7a7da2f58130c059143503dd7ef9c91
|
4
|
+
data.tar.gz: fce86df5336b0ee0db8fa886de9d568856b3b224
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9059fd4236a6833e02183dd59de47ea9ef892136beb5c2b81c5cd9261e2456c1979b8c03e95428fa94514fb2174107a5f05620d6cfe3859d51a0083887db5b1f
|
7
|
+
data.tar.gz: 64113ba02491f7f85ecacecffc3313d8e9d77907eae9215c1e8c74e8f0faa1203f17397ed8e7d1a665b00dae406e142243583e1251490da58d8aeb92d2b95186
|
data/lib/awsm.rb
CHANGED
@@ -11,7 +11,10 @@ require 'awsm/autoscalinggroups'
|
|
11
11
|
require 'awsm/dns'
|
12
12
|
require 'awsm/instances'
|
13
13
|
|
14
|
+
require 'awsm/table/instance'
|
15
|
+
|
14
16
|
require 'awsm/clibase'
|
17
|
+
require 'awsm/cli/tag'
|
15
18
|
require 'awsm/cli/unused'
|
16
19
|
require 'awsm/cli/spin'
|
17
20
|
require 'awsm/cli/main'
|
data/lib/awsm/cli/main.rb
CHANGED
@@ -16,6 +16,9 @@ module Awsm
|
|
16
16
|
desc 'unused', 'Find unused resources'
|
17
17
|
subcommand 'unused', Awsm::CLI::Unused
|
18
18
|
|
19
|
+
desc 'tag', 'Search by tags'
|
20
|
+
subcommand 'tag', Awsm::CLI::Tag
|
21
|
+
|
19
22
|
desc "specific <comma-separated-elb-names>",
|
20
23
|
"Only find specific ELBs named in a comma-separated list."
|
21
24
|
def specific( elb_names )
|
data/lib/awsm/cli/spin.rb
CHANGED
@@ -38,21 +38,14 @@ module Awsm
|
|
38
38
|
"Spin down the specified instance"
|
39
39
|
def down( instance_id )
|
40
40
|
response = ec2.describe_instances(
|
41
|
-
|
41
|
+
filters: [
|
42
|
+
{ name: 'instance-id', values: [ instance_id ] },
|
43
|
+
{ name: 'tag:awsm:owner', values: [ whoami ] }
|
44
|
+
]
|
42
45
|
)
|
43
46
|
|
44
|
-
if response.reservations.
|
45
|
-
say "Instance #{instance_id} not
|
46
|
-
return
|
47
|
-
end
|
48
|
-
|
49
|
-
instance = response.reservations.first.instances.first
|
50
|
-
owner_tag = instance.tags.select do |t|
|
51
|
-
t.key == 'awsm:owner' && t.value == whoami
|
52
|
-
end
|
53
|
-
|
54
|
-
if owner_tag.length == 0
|
55
|
-
say "Instance #{instance_id} doesn't belong to you, leave it alone."
|
47
|
+
if response.reservations.length == 0
|
48
|
+
say "Instance #{instance_id} not spinning."
|
56
49
|
return
|
57
50
|
end
|
58
51
|
|
@@ -67,47 +60,15 @@ module Awsm
|
|
67
60
|
option :simple, :type => :boolean, :default => false, :aliases => '-s',
|
68
61
|
:desc => "Display list without prettiness - good for sedding"
|
69
62
|
def list
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
response.reservations.each do |r|
|
77
|
-
r.instances.each do |i|
|
78
|
-
owner = i.tags.select { |t| t.key == 'awsm:owner' }.first.value
|
79
|
-
|
80
|
-
if owner == whoami
|
81
|
-
fields = [ i.instance_id, i.state.name, i.image_id, owner, i.launch_time ]
|
82
|
-
|
83
|
-
if i.state.name == 'running'
|
84
|
-
fields << i.private_ip_address
|
85
|
-
else
|
86
|
-
fields << 'N/A'
|
87
|
-
end
|
88
|
-
|
89
|
-
spinning << fields
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
if options[:simple]
|
95
|
-
spinning.each do |row|
|
96
|
-
say row.join(' ')
|
97
|
-
end
|
98
|
-
else
|
99
|
-
puts_table(
|
100
|
-
headings: [ 'Instance ID', 'State', 'AMI ID', 'Owner', 'Launched Time', 'Private IP' ],
|
101
|
-
rows: spinning
|
102
|
-
)
|
103
|
-
end
|
63
|
+
instances = filter_instances( [
|
64
|
+
{ name: 'tag:awsm:owner', values: [ whoami ] }
|
65
|
+
] )
|
66
|
+
Table::Instance.new( instances, [
|
67
|
+
:instance_id, :state, :image_id, :awsm_owner, :launch_time, :private_ip
|
68
|
+
] ).print
|
104
69
|
end
|
105
70
|
|
106
71
|
no_commands do
|
107
|
-
def ec2
|
108
|
-
Aws::EC2::Client.new
|
109
|
-
end
|
110
|
-
|
111
72
|
def whoami
|
112
73
|
me_host = `hostname -f`.strip
|
113
74
|
me_user = `whoami`.strip
|
data/lib/awsm/cli/tag.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
module Awsm
|
2
|
+
module CLI
|
3
|
+
class Tag < Clibase
|
4
|
+
|
5
|
+
desc 'find tag=value [tag2=value2] [...]',
|
6
|
+
"Find resources by tags. Resources must have all tag key value pairs specified."
|
7
|
+
def find( *args )
|
8
|
+
Table::Instance.new( filter_instances( argsToFilters( args ) ) ).print
|
9
|
+
end
|
10
|
+
|
11
|
+
no_commands do
|
12
|
+
def argsToFilters( args )
|
13
|
+
tags = {}
|
14
|
+
filters = args.map do |arg|
|
15
|
+
key, value = arg.split( '=' )
|
16
|
+
|
17
|
+
if tags[ key ].nil?
|
18
|
+
tags[ key ] = []
|
19
|
+
end
|
20
|
+
|
21
|
+
tags[ key ] << value
|
22
|
+
end
|
23
|
+
|
24
|
+
filters = []
|
25
|
+
tags.each do |k, v|
|
26
|
+
v = v.select { |e| !e.nil? }.uniq
|
27
|
+
if k == ""
|
28
|
+
filters << { name: 'tag-value', values: v }
|
29
|
+
else
|
30
|
+
if v == []
|
31
|
+
filters << { name: 'tag-key', values: [ k ] }
|
32
|
+
else
|
33
|
+
filters << { name: "tag:#{k}", values: v }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
filters
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/awsm/clibase.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Awsm
|
2
2
|
class Clibase < Thor
|
3
3
|
no_commands do
|
4
|
+
|
4
5
|
def puts_table( table )
|
5
6
|
if options[:tables] == true
|
6
7
|
puts Terminal::Table.new( table )
|
@@ -10,6 +11,21 @@ module Awsm
|
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
14
|
+
|
15
|
+
def ec2
|
16
|
+
Aws::EC2::Client.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def filter_instances( filters )
|
20
|
+
instances = []
|
21
|
+
ec2.describe_instances( filters: filters ).reservations.each do |r|
|
22
|
+
r.instances.each do |i|
|
23
|
+
instances << i
|
24
|
+
end
|
25
|
+
end
|
26
|
+
instances
|
27
|
+
end
|
28
|
+
|
13
29
|
end
|
14
30
|
end
|
15
31
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Awsm
|
2
|
+
module Table
|
3
|
+
class Instance
|
4
|
+
|
5
|
+
def initialize( instances, fields = [ :instance_id, :name, :state, :image_id, :launch_time, :private_ip ] )
|
6
|
+
@fields = fields
|
7
|
+
@rows = instances.map do |i|
|
8
|
+
row = []
|
9
|
+
@fields.each do |f|
|
10
|
+
row << extract_field( i, f )
|
11
|
+
end
|
12
|
+
row
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def print
|
17
|
+
puts Terminal::Table.new(
|
18
|
+
headings: @fields.map { |f| heading( f ) },
|
19
|
+
rows: @rows
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def extract_field( instance, field )
|
26
|
+
case field
|
27
|
+
when :instance_id
|
28
|
+
instance.instance_id
|
29
|
+
when :name
|
30
|
+
tag( 'Name', instance.tags ).first
|
31
|
+
when :state
|
32
|
+
instance.state.name
|
33
|
+
when :image_id
|
34
|
+
instance.image_id
|
35
|
+
when :launch_time
|
36
|
+
instance.launch_time
|
37
|
+
when :private_ip
|
38
|
+
if instance.state.name == "running"
|
39
|
+
instance.private_ip_address
|
40
|
+
else
|
41
|
+
'N/A'
|
42
|
+
end
|
43
|
+
when :awsm_owner
|
44
|
+
tag( 'awsm:owner', instance.tags ).first
|
45
|
+
else
|
46
|
+
raise StandardError "Unknown field"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def heading( field )
|
51
|
+
headings = {
|
52
|
+
instance_id: 'Instance ID',
|
53
|
+
name: 'Name',
|
54
|
+
state: 'State',
|
55
|
+
image_id: 'Image ID',
|
56
|
+
launch_time: 'Launch Time',
|
57
|
+
private_ip: 'Private IP',
|
58
|
+
awsm_owner: 'Owner'
|
59
|
+
}
|
60
|
+
headings[ field ]
|
61
|
+
end
|
62
|
+
|
63
|
+
def tag( key, tags )
|
64
|
+
tags.select { |t| t.key == key }
|
65
|
+
.map { |t| t.value }
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/awsm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awsm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Kendell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -102,12 +102,14 @@ files:
|
|
102
102
|
- lib/awsm/autoscalinggroups.rb
|
103
103
|
- lib/awsm/cli/main.rb
|
104
104
|
- lib/awsm/cli/spin.rb
|
105
|
+
- lib/awsm/cli/tag.rb
|
105
106
|
- lib/awsm/cli/unused.rb
|
106
107
|
- lib/awsm/clibase.rb
|
107
108
|
- lib/awsm/configure.rb
|
108
109
|
- lib/awsm/dns.rb
|
109
110
|
- lib/awsm/instances.rb
|
110
111
|
- lib/awsm/loadbalancers.rb
|
112
|
+
- lib/awsm/table/instance.rb
|
111
113
|
- lib/awsm/version.rb
|
112
114
|
homepage: http://github.com/mduk/awsm
|
113
115
|
licenses:
|