lorj 0.1.0 → 0.2.0
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
- data/Gemfile.lock +6 -3
- data/lib/core/core.rb +9 -10
- data/lib/core/definition.rb +9 -2
- data/lib/core/lorj-basedefinition.rb +69 -9
- data/lib/core/lorj-baseprocess.rb +6 -1
- data/lib/core_process/CloudProcess.rb +9 -6
- data/lib/core_process/global_process.rb +184 -88
- data/lib/core_process/network_process.rb +96 -94
- data/lib/lorj/version.rb +1 -1
- data/lib/lorj.rb +2 -5
- data/lib/prc-config.rb +12 -5
- data/lib/prc-logging.rb +80 -2
- data/lib/prc.rb +23 -0
- data/lib/providers/hpcloud/Hpcloud.rb +28 -21
- data/lib/providers/hpcloud/compute.rb +5 -0
- data/lorj.gemspec +29 -26
- metadata +36 -7
@@ -26,24 +26,24 @@ class SSLErrorMgt
|
|
26
26
|
if @iRetry <@iMaxRetry
|
27
27
|
sleep(2)
|
28
28
|
@iRetry+=1
|
29
|
-
print "%s/%s try... 'unknown protocol' SSL Error\r" % [@iRetry, @iMaxRetry] if
|
29
|
+
print "%s/%s try... 'unknown protocol' SSL Error\r" % [@iRetry, @iMaxRetry] if PrcLib.level == 0
|
30
30
|
return false
|
31
31
|
else
|
32
|
-
|
32
|
+
PrcLib.error('Too many retry. %s' % message)
|
33
33
|
return true
|
34
34
|
end
|
35
35
|
elsif e.is_a?(Excon::Errors::InternalServerError)
|
36
36
|
if @iRetry <@iMaxRetry
|
37
37
|
sleep(2)
|
38
38
|
@iRetry+=1
|
39
|
-
print "%s/%s try... %s\n" % [@iRetry, @iMaxRetry, ANSI.red(e.class)] if
|
39
|
+
print "%s/%s try... %s\n" % [@iRetry, @iMaxRetry, ANSI.red(e.class)] if PrcLib.level == 0
|
40
40
|
return false
|
41
41
|
else
|
42
|
-
|
42
|
+
PrcLib.error('Too many retry. %s' % message)
|
43
43
|
return true
|
44
44
|
end
|
45
45
|
else
|
46
|
-
|
46
|
+
PrcLib.error("Exception %s: %s\n%s" % [e.class, message,backtrace.join("\n")])
|
47
47
|
return true
|
48
48
|
end
|
49
49
|
end
|
@@ -51,17 +51,17 @@ class SSLErrorMgt
|
|
51
51
|
end
|
52
52
|
|
53
53
|
|
54
|
-
class CloudProcess
|
54
|
+
class CloudProcess
|
55
55
|
def connect(sCloudObj, hParams)
|
56
56
|
oSSLError = SSLErrorMgt.new # Retry object
|
57
|
-
|
57
|
+
PrcLib.debug("%s:%s Connecting to '%s' - Project '%s'" % [self.class, sCloudObj, config.get(:provider), hParams[:tenant]])
|
58
58
|
begin
|
59
|
-
|
59
|
+
controller_connect(sCloudObj)
|
60
60
|
rescue => e
|
61
61
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
62
62
|
retry
|
63
63
|
end
|
64
|
-
|
64
|
+
PrcLib.error('%s:%s: Unable to connect.\n%s' % [self.class, sCloudObj, e.message ])
|
65
65
|
nil
|
66
66
|
end
|
67
67
|
end
|
@@ -71,66 +71,68 @@ end
|
|
71
71
|
# Keypair management
|
72
72
|
# ---------------------------------------------------------------------------
|
73
73
|
class CloudProcess
|
74
|
+
|
75
|
+
# KeyPair Create Process Handler
|
76
|
+
# The process implemented is:
|
77
|
+
# * Check local SSH keypairs
|
78
|
+
# * Check remote keypair existence
|
79
|
+
# * Compare and warn if needed.
|
80
|
+
# * Import public key found if missing remotely and name it.
|
81
|
+
#
|
82
|
+
# Return:
|
83
|
+
# - keypair : Lorj::Data keypair object. Following additional data should be found in the keypair attributes
|
84
|
+
# - :coherent : Boolean. True, if the local keypair (public AND private) is coherent with remote keypair found in the cloud
|
85
|
+
# - :private_key_file: String. Path to local private key file
|
86
|
+
# - :public_key_file : String. Path to local public key file
|
87
|
+
# - :public_key : String. Public key content. (config[:public_key] is also set - Used to import it)
|
88
|
+
#
|
74
89
|
def forj_get_or_create_keypair(sCloudObj, hParams)
|
75
90
|
sKeypair_name = hParams[:keypair_name]
|
76
91
|
# setup has configured and copied the appropriate key to forj keypairs.
|
77
92
|
|
78
|
-
|
79
|
-
if hKeys[:private_key_exist? ]
|
80
|
-
hParams[:private_key_file] = File.join(hKeys[:keypair_path], hKeys[:private_key_name])
|
81
|
-
Logging.info("Openssh private key file '%s' exists." % hParams[:private_key_file])
|
82
|
-
end
|
83
|
-
if hKeys[:public_key_exist? ]
|
84
|
-
hParams[:public_key_file] = File.join(hKeys[:keypair_path], hKeys[:public_key_name])
|
85
|
-
else
|
86
|
-
Logging.fatal("Public key file is not found. Please run 'forj setup %s'" % config[:account_name])
|
87
|
-
end
|
93
|
+
hLocalKeypair = keypair_detect(sKeypair_name, File.expand_path(hParams[:keypair_path]))
|
88
94
|
|
89
|
-
|
95
|
+
private_key_file = File.join(hLocalKeypair[:keypair_path], hLocalKeypair[:private_key_name])
|
96
|
+
public_key_file = File.join(hLocalKeypair[:keypair_path], hLocalKeypair[:private_key_name])
|
97
|
+
|
98
|
+
PrcLib.info("Found openssh private key file '%s'." % private_key_file) if hLocalKeypair[:private_key_exist? ]
|
99
|
+
PrcLib.info("Found openssh public key file '%s'." % public_key_file) if hLocalKeypair[:public_key_exist? ]
|
100
|
+
|
101
|
+
PrcLib.state("Searching for keypair '%s'" % [sKeypair_name] )
|
90
102
|
|
91
103
|
keypairs = forj_query_keypair(sCloudObj, {:name => sKeypair_name}, hParams)
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
Logging.error("Unable to read '%s'.\n%s",[hParams[:public_key_file], e.message] )
|
100
|
-
keypair[:coherent] = false
|
101
|
-
else
|
102
|
-
if local_pub_key.split(' ')[1].strip == keypair[:public_key].split(' ')[1].strip
|
103
|
-
Logging.info("keypair '%s' local files are coherent with keypair in your cloud service. You will be able to connect to your box over SSH." % sKeypair_name)
|
104
|
-
keypair[:coherent] = true
|
105
|
-
else
|
106
|
-
keypair[:coherent] = false
|
107
|
-
Logging.warning("Your local keypair file '%s' are incoherent with public key '%s' found in your cloud. You won't be able to access your box with this keypair.\nPublic key found in the cloud:\n%s" % [hParams[:public_key_file], sKeypair_name, keypair[:public_key]])
|
108
|
-
end
|
109
|
-
end
|
110
|
-
else
|
111
|
-
keypair[:coherent] = false
|
112
|
-
Logging.warning("Unable to verify keypair coherence between your cloud and your local SSH keys. The cloud controller did not provided ':public_key'")
|
104
|
+
|
105
|
+
if keypairs.length == 0
|
106
|
+
PrcLib.fatal(1, "Unable to import keypair '%s'. Public key file is not found. Please run 'forj setup %s'" % [sKeypair_name, config[:account_name]]) if not hLocalKeypair[:public_key_exist? ]
|
107
|
+
begin
|
108
|
+
config[:public_key] = File.read(hLocalKeypair[:public_key_file])
|
109
|
+
rescue => e
|
110
|
+
PrcLib.error("Unable to import keypair '%s'. '%s' is unreadable.\n%s",[hLocalKeypair[:public_key_file], e.message] )
|
113
111
|
end
|
114
|
-
else
|
115
|
-
config[:public_key] = File.read(hParams[:public_key_file])
|
116
112
|
keypair = create_keypair(sCloudObj, hParams)
|
117
|
-
if not
|
113
|
+
if not hLocalKeypair[:private_key_exist? ]
|
118
114
|
keypair[:coherent] = false
|
119
115
|
else
|
120
116
|
keypair[:coherent] = true
|
121
117
|
end
|
118
|
+
else
|
119
|
+
keypair = keypairs[0]
|
120
|
+
keypair[:coherent] = coherent_keypair?(hLocalKeypair, keypair)
|
121
|
+
# Adding information about key files.
|
122
|
+
end
|
123
|
+
if keypair[:coherent]
|
124
|
+
keypair[:private_key_file] = hLocalKeypair[:private_key_file]
|
125
|
+
keypair[:public_key_file] = hLocalKeypair[:public_key_file]
|
122
126
|
end
|
123
|
-
# Adding information about key files.
|
124
|
-
keypair[:private_key_file] = hParams[:private_key_file]
|
125
|
-
keypair[:public_key_file] = hParams[:public_key_file]
|
126
127
|
keypair
|
128
|
+
|
127
129
|
end
|
128
130
|
|
129
131
|
def forj_query_keypair(sCloudObj, sQuery, hParams)
|
130
132
|
key_name = hParams[:keypair_name]
|
131
133
|
oSSLError = SSLErrorMgt.new
|
132
134
|
begin
|
133
|
-
oList =
|
135
|
+
oList = controller_query(sCloudObj, sQuery)
|
134
136
|
query_single(sCloudObj, oList, sQuery, key_name)
|
135
137
|
rescue => e
|
136
138
|
if not oSSLError.ErrorDetected(e.message, e.backtrace, e)
|
@@ -140,25 +142,26 @@ class CloudProcess
|
|
140
142
|
|
141
143
|
end
|
142
144
|
|
145
|
+
# Internal process function: Create keypair
|
143
146
|
def create_keypair(sCloudObj, hParams)
|
144
147
|
key_name = hParams[:keypair_name]
|
145
|
-
|
148
|
+
PrcLib.state("Importing keypair '%s'" % [key_name])
|
146
149
|
oSSLError=SSLErrorMgt.new
|
147
150
|
begin
|
148
|
-
keypair =
|
149
|
-
|
151
|
+
keypair = controller_create(sCloudObj)
|
152
|
+
PrcLib.info("Keypair '%s' imported." % [keypair[:name]])
|
150
153
|
rescue StandardError => e
|
151
154
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
152
155
|
retry
|
153
156
|
end
|
154
|
-
|
157
|
+
PrcLib.error "error importing keypair '%s'" % [key_name]
|
155
158
|
end
|
156
159
|
keypair
|
157
160
|
end
|
158
161
|
|
162
|
+
# Build keypair data information structure with files found in local filesystem.
|
163
|
+
# Take care of priv with or without .pem and pubkey with pub.
|
159
164
|
def keypair_detect(keypair_name, key_fullpath)
|
160
|
-
# Build key data information structure.
|
161
|
-
# Take care of priv with or without .pem and pubkey with pub.
|
162
165
|
|
163
166
|
key_basename = File.basename(key_fullpath)
|
164
167
|
key_path = File.expand_path(File.dirname(key_fullpath))
|
@@ -167,12 +170,18 @@ class CloudProcess
|
|
167
170
|
key_basename = mObj[1]
|
168
171
|
|
169
172
|
private_key_ext = nil
|
170
|
-
|
171
|
-
private_key_ext =
|
173
|
+
temp_file1 = File.join(key_path, key_basename)
|
174
|
+
private_key_ext = "" if File.exists?(temp_file1) and not File.directory?(temp_file1)
|
175
|
+
temp_file2 = File.join(key_path, key_basename + '.pem')
|
176
|
+
private_key_ext = '.pem' if File.exists?(temp_file2) and not File.directory?(temp_file2)
|
177
|
+
|
172
178
|
if private_key_ext
|
173
179
|
private_key_exist = true
|
174
180
|
private_key_name = key_basename + private_key_ext
|
175
181
|
else
|
182
|
+
[ temp_file1, temp_file2].each { | temp_file |
|
183
|
+
PrcLib.warning("keypair_detect: Private key file name detection has detected '%s' as a directory. Usually, it should be a private key file. Please check." % temp_file) if File.directory?(temp_file)
|
184
|
+
}
|
176
185
|
private_key_exist = false
|
177
186
|
private_key_name = key_basename
|
178
187
|
end
|
@@ -181,13 +190,76 @@ class CloudProcess
|
|
181
190
|
public_key_name = key_basename + '.pub'
|
182
191
|
|
183
192
|
|
193
|
+
# keypair basic structure
|
184
194
|
{:keypair_name => keypair_name,
|
185
195
|
:keypair_path => key_path, :key_basename => key_basename,
|
186
196
|
:private_key_name => private_key_name, :private_key_exist? => private_key_exist,
|
187
|
-
:public_key_name => public_key_name, :public_key_exist? => public_key_exist
|
197
|
+
:public_key_name => public_key_name, :public_key_exist? => public_key_exist
|
188
198
|
}
|
189
199
|
end
|
190
200
|
|
201
|
+
def forj_get_keypair(sCloudObj, sName, hParams)
|
202
|
+
oSSLError = SSLErrorMgt.new
|
203
|
+
begin
|
204
|
+
controller_get(sCloudObj, sName)
|
205
|
+
rescue => e
|
206
|
+
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
207
|
+
retry
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def get_keypairs_path(hParams, hKeys)
|
213
|
+
sKeypair_name = hParams[:keypair_name]
|
214
|
+
|
215
|
+
if hKeys[:private_key_exist? ]
|
216
|
+
hParams[:private_key_file] = File.join(hKeys[:keypair_path], hKeys[:private_key_name])
|
217
|
+
PrcLib.info("Openssh private key file '%s' exists." % hParams[:private_key_file])
|
218
|
+
end
|
219
|
+
if hKeys[:public_key_exist? ]
|
220
|
+
hParams[:public_key_file] = File.join(hKeys[:keypair_path], hKeys[:public_key_name])
|
221
|
+
else
|
222
|
+
PrcLib.fatal(1, "Public key file is not found. Please run 'forj setup %s'" % config[:account_name])
|
223
|
+
end
|
224
|
+
|
225
|
+
PrcLib.state("Searching for keypair '%s'" % [sKeypair_name] )
|
226
|
+
|
227
|
+
hParams
|
228
|
+
end
|
229
|
+
|
230
|
+
# Check if 2 keypair objects are coherent (Same public key)
|
231
|
+
# Parameters:
|
232
|
+
# - +hLocalKeypair+ : Keypair structure representing local files existence. see keypair_detect
|
233
|
+
# - +keypair+ : Keypair object to check.
|
234
|
+
#
|
235
|
+
# return:
|
236
|
+
# - coherent : Boolean. True if same public key.
|
237
|
+
def coherent_keypair?(hLocalKeypair, keypair)
|
238
|
+
#send keypairs by parameter
|
239
|
+
|
240
|
+
sKeypair_name = hLocalKeypair[:keypair_name]
|
241
|
+
bCoherent = false
|
242
|
+
|
243
|
+
# Check the public key with the one found here, locally.
|
244
|
+
if not keypair[:public_key].nil? and keypair[:public_key] != ""
|
245
|
+
begin
|
246
|
+
local_pub_key = File.read(File.join(hLocalKeypair[:keypair_path], hLocalKeypair[:public_key_name]))
|
247
|
+
rescue => e
|
248
|
+
PrcLib.error("Unable to read '%s'.\n%s" % [hLocalKeypair[:public_key_file], e.message] )
|
249
|
+
else
|
250
|
+
if local_pub_key.split(' ')[1].strip == keypair[:public_key].split(' ')[1].strip
|
251
|
+
PrcLib.info("keypair '%s' local files are coherent with keypair in your cloud service. You will be able to connect to your box over SSH." % sKeypair_name)
|
252
|
+
bCoherent = true
|
253
|
+
else
|
254
|
+
PrcLib.warning("Your local keypair file '%s' are incoherent with public key '%s' found in your cloud. You won't be able to access your box with this keypair.\nPublic key found in the cloud:\n%s" % [hLocalKeypair[:public_key_file], sKeypair_name, keypair[:public_key]])
|
255
|
+
end
|
256
|
+
end
|
257
|
+
else
|
258
|
+
PrcLib.warning("Unable to verify keypair coherence with your local SSH keys. No public key (:public_key) provided.")
|
259
|
+
end
|
260
|
+
bCoherent
|
261
|
+
|
262
|
+
end
|
191
263
|
end
|
192
264
|
|
193
265
|
# ---------------------------------------------------------------------------
|
@@ -199,12 +271,12 @@ class CloudProcess
|
|
199
271
|
# CloudProcess predefines some values. Consult CloudProcess.rb for details
|
200
272
|
def forj_get_or_create_flavor(sCloudObj, hParams)
|
201
273
|
sFlavor_name = hParams[:flavor_name]
|
202
|
-
|
274
|
+
PrcLib.state("Searching for flavor '%s'" % [sFlavor_name] )
|
203
275
|
|
204
276
|
flavors = query_flavor(sCloudObj, {:name => sFlavor_name}, hParams)
|
205
277
|
if flavors.length == 0
|
206
278
|
if not hParams[:create]
|
207
|
-
|
279
|
+
PrcLib.error("Unable to create %s '%s'. Creation is not supported." % [sCloudObj, sFlavor_name])
|
208
280
|
ForjLib::Data.new.set(nil, sCloudObj)
|
209
281
|
else
|
210
282
|
create_flavor(sCloudObj,hParams)
|
@@ -226,7 +298,7 @@ class CloudProcess
|
|
226
298
|
sFlavor_name = hParams[:flavor_name]
|
227
299
|
oSSLError = SSLErrorMgt.new
|
228
300
|
begin
|
229
|
-
oList =
|
301
|
+
oList = controller_query(sCloudObj, sQuery)
|
230
302
|
rescue => e
|
231
303
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
232
304
|
retry
|
@@ -239,10 +311,10 @@ end
|
|
239
311
|
# ---------------------------------------------------------------------------
|
240
312
|
# Image management
|
241
313
|
# ---------------------------------------------------------------------------
|
242
|
-
class CloudProcess
|
314
|
+
class CloudProcess
|
243
315
|
def forj_get_or_create_image(sCloudObj, hParams)
|
244
316
|
sImage_name = hParams[:image_name]
|
245
|
-
|
317
|
+
PrcLib.state("Searching for image '%s'" % [sImage_name] )
|
246
318
|
|
247
319
|
search_the_image(sCloudObj, {:name => sImage_name}, hParams)
|
248
320
|
# No creation possible.
|
@@ -253,10 +325,15 @@ class CloudProcess < BaseProcess
|
|
253
325
|
images = forj_query_image(sCloudObj, sQuery, hParams)
|
254
326
|
case images.length()
|
255
327
|
when 0
|
256
|
-
|
328
|
+
PrcLib.info("No image '%s' found" % [ image_name ] )
|
257
329
|
nil
|
330
|
+
when 1
|
331
|
+
PrcLib.info("Found image '%s'." % [ image_name ])
|
332
|
+
images[0, :ssh_user] = ssh_user(images[0, :name])
|
333
|
+
images[0]
|
258
334
|
else
|
259
|
-
|
335
|
+
PrcLib.info("Found several images '%s'. Selecting the first one '%s'" % [ image_name, images[0, :name] ])
|
336
|
+
images[0, :ssh_user] = ssh_user(images[0, :name])
|
260
337
|
images[0]
|
261
338
|
end
|
262
339
|
end
|
@@ -264,23 +341,33 @@ class CloudProcess < BaseProcess
|
|
264
341
|
def forj_query_image(sCloudObj, sQuery, hParams)
|
265
342
|
oSSLError = SSLErrorMgt.new
|
266
343
|
begin
|
267
|
-
|
344
|
+
images = controller_query(sCloudObj, sQuery)
|
268
345
|
rescue => e
|
269
346
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
270
347
|
retry
|
271
348
|
end
|
272
349
|
end
|
350
|
+
images.each { |image|
|
351
|
+
image[:ssh_user] = ssh_user(image[:name])
|
352
|
+
}
|
353
|
+
images
|
354
|
+
end
|
355
|
+
|
356
|
+
def ssh_user(image_name)
|
357
|
+
return "fedora" if image_name =~ /fedora/i
|
358
|
+
return "centos" if image_name =~ /centos/i
|
359
|
+
return "ubuntu"
|
273
360
|
end
|
274
361
|
end
|
275
362
|
|
276
363
|
# ---------------------------------------------------------------------------
|
277
364
|
# Server management
|
278
365
|
# ---------------------------------------------------------------------------
|
279
|
-
class CloudProcess
|
366
|
+
class CloudProcess
|
280
367
|
# Process Handler functions
|
281
368
|
def forj_get_or_create_server(sCloudObj, hParams)
|
282
369
|
sServer_name = hParams[:server_name]
|
283
|
-
|
370
|
+
PrcLib.state("Searching for server '%s'" % [sServer_name] )
|
284
371
|
servers = forj_query_server(sCloudObj, {:name => sServer_name}, hParams)
|
285
372
|
if servers.length > 0
|
286
373
|
# Get server details
|
@@ -290,13 +377,22 @@ class CloudProcess < BaseProcess
|
|
290
377
|
end
|
291
378
|
end
|
292
379
|
|
380
|
+
def forj_delete_server(sCloudObj, hParams)
|
381
|
+
oSSLError = SSLErrorMgt.new
|
382
|
+
begin
|
383
|
+
controller_delete(sCloudObj)
|
384
|
+
PrcLib.info("Server %s was destroyed " % hParams[:server][:name] )
|
385
|
+
rescue => e
|
386
|
+
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
387
|
+
retry
|
388
|
+
end
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
293
392
|
def forj_query_server(sCloudObj, sQuery, hParams)
|
294
|
-
server_name = "Undefined"
|
295
|
-
server_name = sQuery[:name] if sQuery.key?(:name)
|
296
393
|
oSSLError = SSLErrorMgt.new
|
297
394
|
begin
|
298
|
-
|
299
|
-
query_single(sCloudObj, oList, sQuery, server_name)
|
395
|
+
controller_query(sCloudObj, sQuery)
|
300
396
|
rescue => e
|
301
397
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
302
398
|
retry
|
@@ -307,7 +403,7 @@ class CloudProcess < BaseProcess
|
|
307
403
|
def forj_get_server(sCloudObj, sId, hParams)
|
308
404
|
oSSLError = SSLErrorMgt.new
|
309
405
|
begin
|
310
|
-
|
406
|
+
controller_get(sCloudObj, sId)
|
311
407
|
rescue => e
|
312
408
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
313
409
|
retry
|
@@ -319,13 +415,13 @@ class CloudProcess < BaseProcess
|
|
319
415
|
def create_server(sCloudObj, hParams)
|
320
416
|
name = hParams[:server_name]
|
321
417
|
begin
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
server =
|
326
|
-
|
418
|
+
PrcLib.info("boot: meta-data provided.") if hParams[:meta_data]
|
419
|
+
PrcLib.info("boot: user-data provided.") if hParams[:user_data]
|
420
|
+
PrcLib.state('creating server %s' % [name])
|
421
|
+
server = controller_create(sCloudObj)
|
422
|
+
PrcLib.info("%s '%s' created." % [sCloudObj, name])
|
327
423
|
rescue => e
|
328
|
-
|
424
|
+
PrcLib.fatal(1, "Unable to create server '%s'" % name, e)
|
329
425
|
end
|
330
426
|
server
|
331
427
|
end
|
@@ -333,7 +429,7 @@ class CloudProcess < BaseProcess
|
|
333
429
|
def forj_get_server_log(sCloudObj, sId, hParams)
|
334
430
|
oSSLError = SSLErrorMgt.new
|
335
431
|
begin
|
336
|
-
|
432
|
+
controller_get(sCloudObj, sId)
|
337
433
|
rescue => e
|
338
434
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
339
435
|
retry
|
@@ -344,14 +440,14 @@ end
|
|
344
440
|
# ---------------------------------------------------------------------------
|
345
441
|
# Addresses management
|
346
442
|
# ---------------------------------------------------------------------------
|
347
|
-
class CloudProcess
|
443
|
+
class CloudProcess
|
348
444
|
# Process Handler functions
|
349
445
|
def forj_get_or_assign_public_address(sCloudObj, hParams)
|
350
446
|
# Function which to assign a public IP address to a server.
|
351
447
|
sServer_name = hParams[:server, :name]
|
352
448
|
|
353
|
-
|
354
|
-
addresses =
|
449
|
+
PrcLib.state("Searching public IP for server '%s'" % [sServer_name] )
|
450
|
+
addresses = controller_query(sCloudObj, {:server_id => hParams[:server, :id]})
|
355
451
|
if addresses.length == 0
|
356
452
|
assign_address(sCloudObj, hParams)
|
357
453
|
else
|
@@ -371,7 +467,7 @@ class CloudProcess < BaseProcess
|
|
371
467
|
:more => "Found several %s. Searching for '%s'.",
|
372
468
|
:items => :public_ip
|
373
469
|
}
|
374
|
-
oList =
|
470
|
+
oList = controller_query(sCloudObj, sQuery)
|
375
471
|
query_single(sCloudObj, oList, sQuery, server_name, sInfo)
|
376
472
|
rescue => e
|
377
473
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
@@ -383,7 +479,7 @@ class CloudProcess < BaseProcess
|
|
383
479
|
def forj_get_public_address(sCloudObj, sId, hParams)
|
384
480
|
oSSLError = SSLErrorMgt.new
|
385
481
|
begin
|
386
|
-
|
482
|
+
controller_get(sCloudObj, sId)
|
387
483
|
rescue => e
|
388
484
|
if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
|
389
485
|
retry
|
@@ -395,11 +491,11 @@ class CloudProcess < BaseProcess
|
|
395
491
|
def assign_address(sCloudObj, hParams)
|
396
492
|
name = hParams[:server, :name]
|
397
493
|
begin
|
398
|
-
|
399
|
-
ip_address =
|
400
|
-
|
494
|
+
PrcLib.state('Getting public IP for server %s' % [name])
|
495
|
+
ip_address = controller_create(sCloudObj)
|
496
|
+
PrcLib.info("Public IP '%s' for server '%s' assigned." % [ip_address[:public_ip], name])
|
401
497
|
rescue => e
|
402
|
-
|
498
|
+
PrcLib.fatal(1, "Unable to assign a public IP to server '%s'" % name, e)
|
403
499
|
end
|
404
500
|
ip_address
|
405
501
|
end
|