cloud_powers 0.2.7.22 → 0.2.7.23

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: 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