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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3e16b0b9220fcb8b20915939481a181206e10b7
4
- data.tar.gz: e7573a6bdb27b27cd1b1cbdc7bce7ed8ceeadc8d
3
+ metadata.gz: 51fea1f6476f3e4d5e0262b69f74805079182d7a
4
+ data.tar.gz: 4622721f521947a65aeb2e4350e50e50d02b54a2
5
5
  SHA512:
6
- metadata.gz: 01eea39e072b4b4557b72bd9da1d162e8b4b5de330715e4cacddde5bd47b3de968e40d6368be162ac39b43c43916ee471f5e15b73ac4863cb56f813b2e60f2ff
7
- data.tar.gz: 453a76736169896414447ecd1b2939966c72d3ad22203f0c809f5cda0c5f625beb0fed91aca4fa7f7c7ade12e741f11c89809f2657cc18130752f0269ccd6b25
6
+ metadata.gz: 2c1ddeb57df262dc9079498518baec241263f2b6151c24a3fe827c6ff4dd4c744570a9638ad1dd3621d4f5a90737d9aa7ec9eff43352cab851c7e1de6bdb435c
7
+ data.tar.gz: 81bf040b7d01cc21958b9de84a00b68518bcb3825dfba81938af3ae8fa02ea0e24605087ade1c3f55d92f3ff3a5d42dcddaa6c39b7c8075b71b1a548c27bdd9b
@@ -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 'mime', '~> 0.4'
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'
@@ -1,8 +1,7 @@
1
1
  require 'yaml'
2
2
  require 'thor'
3
3
  require 'terminal-table'
4
- require 'mime'
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'
@@ -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
@@ -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 instances by tags."
7
- method_option :fields, :type => :string
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
- say "Please specify at least one tag=/=value/tag=value"
15
+ help( :find )
11
16
  return
12
17
  end
13
- fields = nil
14
- if !options[:fields].nil?
15
- fields = options[:fields].split(',').map { |f| f.to_sym }
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]',
@@ -13,36 +13,8 @@ module Awsm
13
13
  @@c.dns
14
14
  end
15
15
 
16
- def self.instance_table_config
17
- @@c.instance_table
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 instance_table
28
+ def table( table )
56
29
  if block_given?
57
- @instance_tablutron = InstanceTablutron.new
58
- yield @instance_tablutron
30
+ @table[ table ] = Tablulatrix.new
31
+ yield @table[ table ]
59
32
  else
60
- @instance_tablutron
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
@@ -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 initialize( instances, fields=nil )
6
- @use_fields = if fields.nil?
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
- @fields = {
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 tag( key, tags )
60
- tags.select { |t| t.key == key }
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
@@ -1,3 +1,3 @@
1
1
  module Awsm
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
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.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: mime
56
+ name: vcr
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.4'
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: '0.4'
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: