instant_ec2 0.1.3 → 0.1.4
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
- checksums.yaml.gz.sig +0 -0
- data/lib/instant_ec2.rb +59 -13
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df4c6b926f369e4b1cb6cdbad52818d61781ce71
|
4
|
+
data.tar.gz: 41a8663e649b6fe159814f5b0891cd1f8e2fd1c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2a029b6746f3e63e7b48cde244ce7b122ce96a9accf89904278da34b53fc7f808842125173342d189872008d7d6d689254a12770eb1cc983426db2f907391e4
|
7
|
+
data.tar.gz: dbbb8484a8ccc37817376d48fae13ea261b7f0828bd93254c8f7e227505c810dffbd22b54648e1a152fe483ded1931c4aefa4850a19cf158bcbe211448b03259
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/instant_ec2.rb
CHANGED
@@ -16,8 +16,19 @@ class EC2Instance < Hash
|
|
16
16
|
|
17
17
|
def start(duration: nil)
|
18
18
|
|
19
|
-
@c.start_instance self[:instance_id]
|
20
|
-
|
19
|
+
@c.start_instance self[:instance_id]
|
20
|
+
|
21
|
+
if duration then
|
22
|
+
|
23
|
+
seconds = duration.to_i * 60
|
24
|
+
|
25
|
+
if @c.async then
|
26
|
+
Thread.new{ sleep seconds; self.stop}
|
27
|
+
else
|
28
|
+
sleep seconds
|
29
|
+
self.stop
|
30
|
+
end
|
31
|
+
end
|
21
32
|
|
22
33
|
end
|
23
34
|
|
@@ -30,9 +41,11 @@ end
|
|
30
41
|
|
31
42
|
class InstantEC2
|
32
43
|
|
33
|
-
attr_reader :images
|
44
|
+
attr_reader :images, :async
|
34
45
|
|
35
|
-
def initialize(credentials: [], region: 'us-east-1')
|
46
|
+
def initialize(credentials: [], region: 'us-east-1', async: true)
|
47
|
+
|
48
|
+
@async = async
|
36
49
|
|
37
50
|
@ec2 = Aws::EC2::Client.new(region: region,
|
38
51
|
credentials: Aws::Credentials.new(*credentials))
|
@@ -57,6 +70,9 @@ class InstantEC2
|
|
57
70
|
end
|
58
71
|
|
59
72
|
@hooks = {
|
73
|
+
pending: ->(){
|
74
|
+
puts "%s: the instance is now pending" % [Time.now]
|
75
|
+
},
|
60
76
|
running: ->(ip){
|
61
77
|
puts "%s: the instance is now accessible from %s" % [Time.now, ip]
|
62
78
|
},
|
@@ -68,11 +84,19 @@ class InstantEC2
|
|
68
84
|
def find_image(s)
|
69
85
|
@images.find {|x| x[:image_name][/#{s}/i]}
|
70
86
|
end
|
87
|
+
|
88
|
+
def find_pending()
|
89
|
+
|
90
|
+
r = @ec2.describe_instances.reservations.detect do |x|
|
91
|
+
x.instances[0].state.name == 'pending'
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
71
95
|
|
72
96
|
def find_running()
|
73
97
|
|
74
98
|
r = @ec2.describe_instances.reservations.detect do |x|
|
75
|
-
x.instances[0].state.name
|
99
|
+
x.instances[0].state.name == 'running'
|
76
100
|
end
|
77
101
|
|
78
102
|
end
|
@@ -81,10 +105,18 @@ class InstantEC2
|
|
81
105
|
r = self.find_running
|
82
106
|
r.instances[0].public_ip_address if r
|
83
107
|
end
|
108
|
+
|
109
|
+
def on_pending(&blk)
|
110
|
+
@hooks[:pending]= blk
|
111
|
+
end
|
84
112
|
|
85
113
|
def on_running(&blk)
|
86
114
|
@hooks[:running] = blk
|
87
115
|
end
|
116
|
+
|
117
|
+
def on_stopped(&blk)
|
118
|
+
@hooks[:stopped] = blk
|
119
|
+
end
|
88
120
|
|
89
121
|
def running?
|
90
122
|
self.ip ? true : false
|
@@ -100,7 +132,7 @@ class InstantEC2
|
|
100
132
|
|
101
133
|
def start_instance(id)
|
102
134
|
@ec2.start_instances instance_ids: [id]
|
103
|
-
Thread.new { trigger_on_start() }
|
135
|
+
@async ? Thread.new { trigger_on_start() } : trigger_on_start()
|
104
136
|
end
|
105
137
|
|
106
138
|
def stop()
|
@@ -120,16 +152,13 @@ class InstantEC2
|
|
120
152
|
|
121
153
|
def stop_instance(id)
|
122
154
|
@ec2.stop_instances instance_ids: [id]
|
123
|
-
trigger_on_stopping()
|
155
|
+
@async ? Thread.new { trigger_on_stopping() } : trigger_on_stopping()
|
124
156
|
end
|
125
157
|
|
126
158
|
def stopped?()
|
127
159
|
self.ip.nil?
|
128
160
|
end
|
129
161
|
|
130
|
-
def on_stopped(&blk)
|
131
|
-
@hooks[:stopped] = blk
|
132
|
-
end
|
133
162
|
|
134
163
|
private
|
135
164
|
|
@@ -137,7 +166,23 @@ class InstantEC2
|
|
137
166
|
|
138
167
|
# timeout after 60 seconds
|
139
168
|
t1 = Time.now
|
140
|
-
sleep
|
169
|
+
sleep 10
|
170
|
+
sleep 2; pending = self.find_pending() until pending or Time.now > t1 + 60
|
171
|
+
|
172
|
+
if pending then
|
173
|
+
@hooks[:pending].call()
|
174
|
+
trigger_on_running()
|
175
|
+
else
|
176
|
+
puts 'on_running timedout'
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
def trigger_on_running()
|
182
|
+
|
183
|
+
# timeout after 30 seconds
|
184
|
+
t1 = Time.now
|
185
|
+
sleep 1; ip = self.ip until ip or Time.now > t1 + 30
|
141
186
|
|
142
187
|
if ip then
|
143
188
|
@hooks[:running].call(ip)
|
@@ -145,13 +190,14 @@ class InstantEC2
|
|
145
190
|
puts 'on_running timedout'
|
146
191
|
end
|
147
192
|
|
148
|
-
end
|
193
|
+
end
|
149
194
|
|
150
195
|
def trigger_on_stopping()
|
151
196
|
|
152
197
|
# timeout after 30 seconds
|
153
198
|
t1 = Time.now
|
154
|
-
sleep
|
199
|
+
sleep 7
|
200
|
+
sleep 2; ip = self.ip until ip.nil? or Time.now > t1 + 30
|
155
201
|
|
156
202
|
if ip.nil? then
|
157
203
|
@hooks[:stopping].call()
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: instant_ec2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
I2p/gjcBfDCdq3/4DlrprfJdiPD30+XqKCWbt0NOod/6Ky8nvmilmfrciMvsgp+g
|
32
32
|
bO5j5Um4EdA15w==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2015-12-
|
34
|
+
date: 2015-12-21 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: aws-sdk
|
metadata.gz.sig
CHANGED
Binary file
|