cloud_powers 0.2.7.22 → 0.2.7.23

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: de10bce1d27f8f3e36f3ab6a1113a23ad5bed4be
4
- data.tar.gz: 23596a2a01d2e8bb51491891e1dd1055010b0e84
3
+ metadata.gz: 97dc22c7470b4936967a4e45da7b3bf962dd2697
4
+ data.tar.gz: 0b0a347337a1f910bb10c46f8da3e785b3e6af21
5
5
  SHA512:
6
- metadata.gz: cae627f2df35cca72af7135fad2bd4b912e1ceb92f66fbd0a7fb87dd8bcbbc527902685e6e33e20af18374c5470405aba03063f535d413ce69411de90207cb77
7
- data.tar.gz: e6e8235e93cf78c2787ab97535edb0d6991280bae5feeb59748cdbde44d15230b4d9d744c6e256a8b12cc4afac30245db386e3974e1d5b770682248723ace0be
6
+ metadata.gz: f93ff5427fba0268c10899d3103c220167d4461eb5606c89f5d175cf460f1975f7a9e30dd8ffcff7e4899eee3c1b08c3d53f71e6d39f3bc0fa60c027438539fb
7
+ data.tar.gz: a3cdab518b3ad93891227d615fab39ec9ddcb32d1825e7ed37d4ec3f106cd647809153053fbe09d76868b103e0ed568e8cb6f9dd15bfa18dc4d1429a5818de9b
data/.gitignore CHANGED
@@ -1,17 +1,15 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- *Gemfile.lock
5
- /_yardoc/
6
- /coverage/
7
- /doc/
8
- /pkg/
9
- /spec/reports/
10
- /tmp/
11
- *.env
12
- .byebug_history
13
- lib/cloud_powers/synapse/.DS_Store
14
- .DS_Store
15
- ./**/.DS_Store
16
- lib/tasks
17
- .idea
1
+ **/.bundle
2
+ **/.yardoc
3
+ **/Gemfile.lock
4
+ **/_yardoc/
5
+ **/coverage/
6
+ **/doc/
7
+ **/pkg/
8
+ **/spec/reports/
9
+ **/tmp/
10
+ **/*.env
11
+ **/.byebug_history
12
+ **/lib/cloud_powers/synapse/.DS_Store
13
+ **/.DS_Store
14
+ **/./**/.DS_Store
15
+ **/*.swp
@@ -43,10 +43,11 @@ module Smash
43
43
  # * opts +Hash+ (optional)
44
44
  # an optional instance configuration hash can be passed, which will override
45
45
  # the values in the default configuration returned by #instance_config()
46
- def spin_up_neurons(opts = {})
46
+ def spin_up_neurons(opts = {}, tags = [])
47
47
  should_wait = opts.delete(:wait) || true
48
48
  ids = nil
49
49
  begin
50
+
50
51
  response = ec2.run_instances(node_config(opts))
51
52
  ids = response.instances.map(&:instance_id)
52
53
 
@@ -61,9 +62,10 @@ module Smash
61
62
  # redo unless (count += 1 <=3 )
62
63
  end
63
64
  end
65
+
66
+ batch_tag(ids, tags) unless tags.empty?
64
67
  ids
65
68
 
66
- # tag(ids, { key: 'task', value: to_camel(self.class.to_s) })
67
69
  rescue Aws::EC2::Errors::DryRunOperation
68
70
  ids = (1..(opts[:max_count] || 0)).to_a.map { |n| n.to_s }
69
71
  logger.info "waiting for #{ids.count} Neurons to start..."
@@ -71,6 +73,28 @@ module Smash
71
73
 
72
74
  ids
73
75
  end
76
+
77
+ # This method adds certain tags to an array of resource ids.
78
+ #
79
+ # Parameters
80
+ # * ids +Array+|+String+ - an Array or a single instance id, as an Array of Strings or a single String
81
+ # * tags +Array+ - an Array of key, value hash
82
+ #
83
+ # Returns
84
+ # * Returns an empty response.
85
+ #
86
+ # Examples
87
+ # create_tag('ami-2342354', tags: { key: "stack", value: "production"})
88
+ # or
89
+ # create_tag(['ami-2432342'], tags: [{ key: 'stack', value: 'production' }])
90
+ # or any permutation of those
91
+
92
+ def batch_tag(ids, tags)
93
+ tags_opts = { resources: ids, tags: tags }
94
+ ec2.create_tags(tags_opts)
95
+ logger.info "tags for #{ids} created"
96
+ end
97
+
74
98
  end
75
99
  end
76
100
  end
@@ -182,6 +182,24 @@ module Smash
182
182
  end
183
183
  end
184
184
 
185
+
186
+ # Search through tags on an instances using a regex pattern for your tag's
187
+ # key/name
188
+ #
189
+ # Parameters
190
+ # * pattern +String+|+Regex+
191
+ #
192
+ # Returns
193
+ # * +String+ - if a tag is found
194
+ # * +nil+ - if a tag is not found
195
+ def tag_search(pattern, id = @instance_id)
196
+ resp = ec2.describe_instances(instance_ids: [id].flatten).reservations.first
197
+ return nil if resp.nil?
198
+ resp.instances[0].tags.select do |tag|
199
+ tag.value if (tag.key =~ %r[#{pattern}])
200
+ end.collect.map(&:value).first
201
+ end
202
+
185
203
  # Check self-tags for 'task' and act as an attr_accessor.
186
204
  # A different node's tag's can be checked for a task by passing
187
205
  # that instance's id as a parameter
@@ -191,16 +209,15 @@ module Smash
191
209
  #
192
210
  # Returns
193
211
  # +String+
212
+ #
213
+ # Notes
214
+ # * See <tt>tag_search()</tt>
194
215
  def task_name(id = @instance_id)
195
216
  # get @task_name
196
217
  return @task_name unless @task_name.nil?
197
218
  # set @task_name
198
219
  # TODO: get all tasks instead of just the first
199
- resp = ec2.describe_instances(instance_ids: [id].flatten).reservations.first
200
- return @task_name = nil if resp.nil?
201
- @task_name = resp.instances[0].tags.select do |t|
202
- t.value if t.key == 'taskType'
203
- end.first
220
+ @task_name = tag_search('task', id)
204
221
  end
205
222
 
206
223
  # This method will return true if:
@@ -6,49 +6,45 @@ module Smash
6
6
  module WebSocClient
7
7
 
8
8
  def create_websoc_client(opts = {})
9
+ ws = {}
10
+ Thread.new(ws) do
11
+ EM.run do
12
+ ws = WebSocket::EventMachine::Client.connect(:uri => 'ws://' + opts[:host] + ':' + opts[:port])
9
13
 
10
- EM.run do
14
+ client_name = opts[:client] || 'default_client'
11
15
 
12
- ws = WebSocket::EventMachine::Client.connect(:uri => 'ws://' + opts[:host] + ':' + opts[:port])
13
- add_to_clients(opts[:name],ws)
16
+ instance_variable_set(:"@#{client_name}",ws)
14
17
 
15
- open_callback = opts[:on_open] || Proc.new do
16
- puts "Connected"
17
- end
18
+ open_callback = opts[:on_open] || Proc.new do
19
+ puts "Connected"
20
+ end
18
21
 
19
- ws.onopen &open_callback
22
+ ws.onopen &open_callback
20
23
 
21
- on_message_callback = opts[:on_message] || Proc.new do |msg, type|
22
- puts "Received message: #{msg}"
23
- end
24
+ on_message_callback = opts[:on_message] || Proc.new do |msg, type|
25
+ puts "Received message: #{msg}"
26
+ end
24
27
 
25
- ws.onmessage &on_message_callback
28
+ ws.onmessage &on_message_callback
26
29
 
27
- on_error_callback = opts[:on_error] || Proc.new do |error|
28
- puts "Error ==> #{error}"
29
- end
30
+ on_error_callback = opts[:on_error] || Proc.new do |error|
31
+ puts "Error ==> #{error}"
32
+ end
30
33
 
31
- ws.onerror &on_error_callback
34
+ ws.onerror &on_error_callback
32
35
 
33
- on_close_callback = opts[:on_close] || Proc.new do |code, reason|
34
- puts "Disconnected with status code: #{code}"
35
- puts "Disconnected with status message: #{reason}"
36
- end
36
+ on_close_callback = opts[:on_close] || Proc.new do |code, reason|
37
+ puts "Disconnected with status code: #{code}"
38
+ puts "Disconnected with status message: #{reason}"
39
+ end
37
40
 
38
- ws.onclose &on_close_callback
41
+ ws.onclose &on_close_callback
39
42
 
40
- end
41
-
42
- end
43
+ end
43
44
 
44
- def add_to_clients(name,client)
45
- begin
46
- @clients[name] = client
47
- rescue NoMethodError => e
48
- puts e.backtrace
49
- puts "no client hash is available"
50
45
  end
51
46
  end
47
+
52
48
  end
53
49
  end
54
50
  end
@@ -1,3 +1,3 @@
1
1
  module CloudPowers
2
- VERSION = '0.2.7.22'
2
+ VERSION = '0.2.7.23'
3
3
  end
@@ -74,6 +74,7 @@ module Smash
74
74
  # for your own custom configuration
75
75
  def self.node_stub(opts = {})
76
76
  time = opts[:launch_time] || Time.new((Time.now.utc.to_i / 86400 * 86400)) # midnight
77
+ tags = [{key: 'task', value: 'test'}]
77
78
  {
78
79
  stub_responses: {
79
80
  create_tags: {},
@@ -88,11 +89,11 @@ module Smash
88
89
  describe_instances: {
89
90
  reservations: [
90
91
  { instances: [
91
- { instance_id: 'asd-1234', state: { code: 200, name: 'running' } },
92
- { instance_id: 'qwe-4323', state: { code: 200, name: 'running' } },
93
- { instance_id: 'tee-4322', state: { code: 200, name: 'running' } },
94
- { instance_id: 'bbf-6969', state: { code: 200, name: 'running' } },
95
- { instance_id: 'lkj-0987', state: { code: 200, name: 'running' } }
92
+ { instance_id: 'asd-1234', state: { code: 200, name: 'running' }, tags: tags },
93
+ { instance_id: 'qwe-4323', state: { code: 200, name: 'running' }, tags: tags },
94
+ { instance_id: 'tee-4322', state: { code: 200, name: 'running' }, tags: tags },
95
+ { instance_id: 'bbf-6969', state: { code: 200, name: 'running' }, tags: tags },
96
+ { instance_id: 'lkj-0987', state: { code: 200, name: 'running' }, tags: tags }
96
97
  ] }] },
97
98
  describe_images: {
98
99
  images: [
@@ -310,6 +311,21 @@ module Smash
310
311
  }
311
312
  }.merge(opts)
312
313
  end
314
+
315
+ # Stub metadata for EC2 tags
316
+ #
317
+ # Notes
318
+ # * defaults can't be overriden or don't have good support for
319
+ # for it yet but you can use this hash as a guide
320
+ # for your own custom configuration
321
+ def self.instance_tags_stub(opts = {})
322
+ {
323
+ tags: [
324
+ { key: 'tag_one_key', value: 'tag_one_value' },
325
+ { key: 'tag_two_key', value: 'tag_two_value' }
326
+ ]
327
+ }.merge(opts)
328
+ end
313
329
  end
314
330
  end
315
331
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud_powers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7.22
4
+ version: 0.2.7.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Phillipps
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2016-10-26 00:00:00.000000000 Z
13
+ date: 2016-11-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport-core-ext