awsm 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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: