awsm 0.2.2 → 0.2.3
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/awsm.gemspec +2 -1
- data/lib/awsm.rb +3 -2
- data/lib/awsm/cli/spin.rb +0 -8
- data/lib/awsm/cli/tag.rb +19 -8
- data/lib/awsm/configure.rb +38 -43
- data/lib/awsm/table/image.rb +39 -0
- data/lib/awsm/table/instance.rb +9 -40
- data/lib/awsm/tablebase.rb +71 -0
- data/lib/awsm/version.rb +1 -1
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51fea1f6476f3e4d5e0262b69f74805079182d7a
|
4
|
+
data.tar.gz: 4622721f521947a65aeb2e4350e50e50d02b54a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c1ddeb57df262dc9079498518baec241263f2b6151c24a3fe827c6ff4dd4c744570a9638ad1dd3621d4f5a90737d9aa7ec9eff43352cab851c7e1de6bdb435c
|
7
|
+
data.tar.gz: 81bf040b7d01cc21958b9de84a00b68518bcb3825dfba81938af3ae8fa02ea0e24605087ade1c3f55d92f3ff3a5d42dcddaa6c39b7c8075b71b1a548c27bdd9b
|
data/awsm.gemspec
CHANGED
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_runtime_dependency 'thor', '~> 0.19'
|
22
22
|
spec.add_runtime_dependency 'aws-sdk', '~> 2'
|
23
23
|
spec.add_runtime_dependency 'terminal-table', '~> 1.4'
|
24
|
-
spec.add_runtime_dependency '
|
24
|
+
spec.add_runtime_dependency 'vcr', '~> 2.9'
|
25
|
+
spec.add_runtime_dependency 'fakeweb', '~> 1.3'
|
25
26
|
|
26
27
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
27
28
|
spec.add_development_dependency "pry", '~> 0.10'
|
data/lib/awsm.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'thor'
|
3
3
|
require 'terminal-table'
|
4
|
-
require '
|
5
|
-
require 'base64'
|
4
|
+
require 'json'
|
6
5
|
|
7
6
|
require 'awsm/version'
|
8
7
|
|
@@ -13,7 +12,9 @@ require 'awsm/autoscalinggroups'
|
|
13
12
|
require 'awsm/dns'
|
14
13
|
require 'awsm/instances'
|
15
14
|
|
15
|
+
require 'awsm/tablebase'
|
16
16
|
require 'awsm/table/instance'
|
17
|
+
require 'awsm/table/image'
|
17
18
|
|
18
19
|
require 'awsm/clibase'
|
19
20
|
require 'awsm/cli/tag'
|
data/lib/awsm/cli/spin.rb
CHANGED
@@ -94,25 +94,17 @@ module Awsm
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def spin_up( c )
|
97
|
-
userdata = MIME::Multipart::Mixed.new
|
98
|
-
c.userdata.each do |path, file|
|
99
|
-
userdata.attach( MIME::Text.new( file, 'mendeley-config', charset: 'us-ascii' ), filename: path )
|
100
|
-
end
|
101
|
-
blobbified = Base64.encode64( userdata.to_s )
|
102
|
-
|
103
97
|
response = ec2.run_instances(
|
104
98
|
image_id: c.image_id,
|
105
99
|
key_name: c.key_name,
|
106
100
|
instance_type: c.instance_type,
|
107
101
|
security_group_ids: c.security_groups,
|
108
102
|
subnet_id: c.subnet,
|
109
|
-
user_data: blobbified,
|
110
103
|
min_count: 1,
|
111
104
|
max_count: 1
|
112
105
|
)
|
113
106
|
|
114
107
|
say "Spinning up #{c.image_id}..."
|
115
|
-
say "Userdata blob: #{blobbified}"
|
116
108
|
|
117
109
|
instance_id = response.instances.first.instance_id
|
118
110
|
say "Instance #{instance_id} is spinning up...", :green
|
data/lib/awsm/cli/tag.rb
CHANGED
@@ -2,19 +2,30 @@ module Awsm
|
|
2
2
|
module CLI
|
3
3
|
class Tag < Clibase
|
4
4
|
|
5
|
-
desc 'find tag=value [tag=] [=value] [...]',
|
6
|
-
"Find
|
7
|
-
method_option :
|
5
|
+
desc 'find tag=value [--instances|--images] [tag=] [=value] [...]',
|
6
|
+
"Find resources by tags."
|
7
|
+
method_option :format, :type => :string, :default => :pretty,
|
8
|
+
:desc => "Specify output format. [pretty|tsv|csv|json]"
|
9
|
+
method_option :instances, :type => :boolean, :lazy_default => false,
|
10
|
+
:desc => "Find instances matching tags."
|
11
|
+
method_option :images, :type => :boolean, :lazy_default => false,
|
12
|
+
:desc => "Find Images matching tags."
|
8
13
|
def find( *args )
|
9
14
|
if args == []
|
10
|
-
|
15
|
+
help( :find )
|
11
16
|
return
|
12
17
|
end
|
13
|
-
|
14
|
-
|
15
|
-
|
18
|
+
|
19
|
+
format = options[:format].to_sym
|
20
|
+
filters = argsToFilters( args )
|
21
|
+
|
22
|
+
if options[:instances]
|
23
|
+
Table::Instance.new( filter_instances( filters ), format ).print
|
24
|
+
end
|
25
|
+
|
26
|
+
if options[:images]
|
27
|
+
Table::Image.new( filter_images( filters ), format ).print
|
16
28
|
end
|
17
|
-
Table::Instance.new( filter_instances( argsToFilters( args ) ), fields ).print
|
18
29
|
end
|
19
30
|
|
20
31
|
desc 'list [resource_id]',
|
data/lib/awsm/configure.rb
CHANGED
@@ -13,36 +13,8 @@ module Awsm
|
|
13
13
|
@@c.dns
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.
|
17
|
-
@@c.
|
18
|
-
end
|
19
|
-
|
20
|
-
class InstanceTablutron
|
21
|
-
|
22
|
-
def initialize
|
23
|
-
@use_fields = []
|
24
|
-
@fields = {}
|
25
|
-
end
|
26
|
-
|
27
|
-
def use_fields( fields=nil )
|
28
|
-
if fields.nil?
|
29
|
-
return @use_fields
|
30
|
-
end
|
31
|
-
|
32
|
-
@use_fields = fields
|
33
|
-
end
|
34
|
-
|
35
|
-
def add_field( name, heading, &block )
|
36
|
-
@fields[ name ] = {
|
37
|
-
heading: heading,
|
38
|
-
block: block
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
def fields
|
43
|
-
return @fields
|
44
|
-
end
|
45
|
-
|
16
|
+
def self.table_config( table )
|
17
|
+
@@c.table( table )
|
46
18
|
end
|
47
19
|
|
48
20
|
class Configulator
|
@@ -50,14 +22,18 @@ module Awsm
|
|
50
22
|
def initialize
|
51
23
|
@spin_blocks = {}
|
52
24
|
@dns_block = nil
|
25
|
+
@table = {}
|
53
26
|
end
|
54
27
|
|
55
|
-
def
|
28
|
+
def table( table )
|
56
29
|
if block_given?
|
57
|
-
@
|
58
|
-
yield @
|
30
|
+
@table[ table ] = Tablulatrix.new
|
31
|
+
yield @table[ table ]
|
59
32
|
else
|
60
|
-
@
|
33
|
+
if @table[ table ].nil?
|
34
|
+
raise StandardError, "Invalid table configuration: #{table}"
|
35
|
+
end
|
36
|
+
@table[ table ]
|
61
37
|
end
|
62
38
|
end
|
63
39
|
|
@@ -101,6 +77,34 @@ module Awsm
|
|
101
77
|
|
102
78
|
end
|
103
79
|
|
80
|
+
class Tablulatrix
|
81
|
+
|
82
|
+
def initialize
|
83
|
+
@use_fields = []
|
84
|
+
@fields = {}
|
85
|
+
end
|
86
|
+
|
87
|
+
def use_fields( fields=nil )
|
88
|
+
if fields.nil?
|
89
|
+
return @use_fields
|
90
|
+
end
|
91
|
+
|
92
|
+
@use_fields = fields
|
93
|
+
end
|
94
|
+
|
95
|
+
def add_field( name, heading, &block )
|
96
|
+
@fields[ name ] = {
|
97
|
+
heading: heading,
|
98
|
+
block: block
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
def fields
|
103
|
+
return @fields
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
104
108
|
class Domainatrix
|
105
109
|
|
106
110
|
def hosted_zone( zone=nil )
|
@@ -123,7 +127,6 @@ module Awsm
|
|
123
127
|
@config[:subnet] = default.subnet
|
124
128
|
@config[:security_groups] = default.security_groups
|
125
129
|
@config[:tags] = default.tags || {}
|
126
|
-
@config[:userdata] = default.userdata || {}
|
127
130
|
end
|
128
131
|
end
|
129
132
|
|
@@ -171,14 +174,6 @@ module Awsm
|
|
171
174
|
end
|
172
175
|
end
|
173
176
|
|
174
|
-
def userdata( path=nil, file=nil )
|
175
|
-
if path.nil? && file.nil?
|
176
|
-
return @config[:userdata]
|
177
|
-
end
|
178
|
-
|
179
|
-
@config[:userdata][ path ] = file
|
180
|
-
end
|
181
|
-
|
182
177
|
end
|
183
178
|
|
184
179
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Awsm
|
2
|
+
module Table
|
3
|
+
class Image < TableBase
|
4
|
+
|
5
|
+
def defaultHeadings
|
6
|
+
{
|
7
|
+
image_id: 'Image ID',
|
8
|
+
name: 'Name',
|
9
|
+
location: 'Location',
|
10
|
+
creation_date: 'Creation Date',
|
11
|
+
public: 'Public',
|
12
|
+
architecture: 'Architecture',
|
13
|
+
image_type: 'Image Type',
|
14
|
+
description: 'Description',
|
15
|
+
hypervisor: 'Hypervisor'
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def defaultFields
|
20
|
+
{
|
21
|
+
image_id: -> (i) { i.image_id },
|
22
|
+
name: -> (i) { i.name },
|
23
|
+
location: -> (i) { i.image_location },
|
24
|
+
creation_date: -> (i) { i.creation_date },
|
25
|
+
public: -> (i) { i.public },
|
26
|
+
architecture: -> (i) { i.architecture },
|
27
|
+
image_type: -> (i) { i.image_type },
|
28
|
+
description: -> (i) { i.description },
|
29
|
+
hypervisor: -> (i) { i.hypervisor }
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def config
|
34
|
+
Awsm::table_config( :image )
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/awsm/table/instance.rb
CHANGED
@@ -1,15 +1,9 @@
|
|
1
1
|
module Awsm
|
2
|
-
module Table
|
3
|
-
class Instance
|
2
|
+
module Table
|
3
|
+
class Instance < TableBase
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
Awsm::instance_table_config.use_fields
|
8
|
-
else
|
9
|
-
fields
|
10
|
-
end
|
11
|
-
|
12
|
-
@headings = {
|
5
|
+
def defaultHeadings
|
6
|
+
{
|
13
7
|
instance_id: 'Instance ID',
|
14
8
|
name: 'Name',
|
15
9
|
state: 'State',
|
@@ -18,8 +12,10 @@ module Awsm
|
|
18
12
|
private_ip: 'Private IP',
|
19
13
|
awsm_owner: 'Owner'
|
20
14
|
}
|
15
|
+
end
|
21
16
|
|
22
|
-
|
17
|
+
def defaultFields
|
18
|
+
{
|
23
19
|
instance_id: -> (i) { i.instance_id },
|
24
20
|
name: -> (i) { tag( 'Name', i.tags ).first },
|
25
21
|
state: -> (i) { i.state.name },
|
@@ -28,37 +24,10 @@ module Awsm
|
|
28
24
|
private_ip: -> (i) { i.private_ip_address },
|
29
25
|
awsm_owner: -> (i) { tag( 'awsm:owner', i.tags ).first }
|
30
26
|
}
|
31
|
-
|
32
|
-
Awsm::instance_table_config.fields.each do |name, field|
|
33
|
-
@headings[ name ] = field[:heading]
|
34
|
-
@fields[ name ] = field[:block]
|
35
|
-
end
|
36
|
-
|
37
|
-
@rows = instances.map do |i|
|
38
|
-
row = []
|
39
|
-
@use_fields.each do |f|
|
40
|
-
row << extract_field( i, f )
|
41
|
-
end
|
42
|
-
row
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def print
|
47
|
-
puts Terminal::Table.new(
|
48
|
-
headings: @use_fields.map { |f| @headings[ f ] },
|
49
|
-
rows: @rows
|
50
|
-
)
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def extract_field( instance, field )
|
56
|
-
@fields[ field ].call( instance )
|
57
27
|
end
|
58
28
|
|
59
|
-
def
|
60
|
-
|
61
|
-
.map { |t| t.value }
|
29
|
+
def config
|
30
|
+
Awsm::table_config( :instance )
|
62
31
|
end
|
63
32
|
|
64
33
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Awsm
|
2
|
+
class TableBase
|
3
|
+
|
4
|
+
def initialize( objects, format=:pretty )
|
5
|
+
@objects = objects
|
6
|
+
@format = format
|
7
|
+
|
8
|
+
@use_fields = config.use_fields
|
9
|
+
@fields = defaultFields
|
10
|
+
@headings = defaultHeadings
|
11
|
+
end
|
12
|
+
|
13
|
+
def print
|
14
|
+
config.fields.each do |name, field|
|
15
|
+
@headings[ name ] = field[:heading]
|
16
|
+
@fields[ name ] = field[:block]
|
17
|
+
end
|
18
|
+
|
19
|
+
@rows = @objects.map do |i|
|
20
|
+
row = []
|
21
|
+
@use_fields.each do |f|
|
22
|
+
row << extract_field( i, f )
|
23
|
+
end
|
24
|
+
row
|
25
|
+
end
|
26
|
+
|
27
|
+
case @format
|
28
|
+
when :pretty
|
29
|
+
puts Terminal::Table.new(
|
30
|
+
headings: @use_fields.map { |f| @headings[ f ] },
|
31
|
+
rows: @rows
|
32
|
+
)
|
33
|
+
when :tsv
|
34
|
+
@rows.each do |row|
|
35
|
+
puts row.join("\t")
|
36
|
+
end
|
37
|
+
when :csv
|
38
|
+
@rows.each do |row|
|
39
|
+
puts row.join(',')
|
40
|
+
end
|
41
|
+
when :json
|
42
|
+
json = []
|
43
|
+
@rows.each do |row|
|
44
|
+
json << Hash[ @use_fields.zip( row ) ]
|
45
|
+
end
|
46
|
+
puts JSON.generate( json )
|
47
|
+
else
|
48
|
+
puts "Unknown output format: #{@format}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def field( field )
|
55
|
+
if @fields[ field ].nil?
|
56
|
+
raise StandardError, "Unknown field: #{field}"
|
57
|
+
end
|
58
|
+
@fields[ field ]
|
59
|
+
end
|
60
|
+
|
61
|
+
def extract_field( instance, field )
|
62
|
+
@fields[ field ].call( instance )
|
63
|
+
end
|
64
|
+
|
65
|
+
def tag( key, tags )
|
66
|
+
tags.select { |t| t.key == key }
|
67
|
+
.map { |t| t.value }
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
data/lib/awsm/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awsm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Kendell
|
@@ -53,19 +53,33 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.4'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: vcr
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.9'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.9'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: fakeweb
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.3'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.3'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,7 +137,9 @@ files:
|
|
123
137
|
- lib/awsm/dns.rb
|
124
138
|
- lib/awsm/instances.rb
|
125
139
|
- lib/awsm/loadbalancers.rb
|
140
|
+
- lib/awsm/table/image.rb
|
126
141
|
- lib/awsm/table/instance.rb
|
142
|
+
- lib/awsm/tablebase.rb
|
127
143
|
- lib/awsm/version.rb
|
128
144
|
homepage: http://github.com/mduk/awsm
|
129
145
|
licenses:
|