beaker-google 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,18 +17,34 @@ module Beaker
17
17
  BASE_URL = "https://www.googleapis.com/compute/#{API_VERSION}/projects/"
18
18
  CENTOS_PROJECT = 'centos-cloud'
19
19
  DEBIAN_PROJECT = 'debian-cloud'
20
+ RHEL_PROJECT = 'rhel-cloud'
21
+ SLES_PROJECT = 'sles-cloud'
20
22
  DEFAULT_ZONE_NAME = 'us-central1-a'
21
23
  DEFAULT_MACHINE_TYPE = 'n1-highmem-2'
22
24
  DEFAULT_DISK_SIZE = 25
23
25
 
24
- #Create a new instance of the Google Compute Engine helper object
25
- #@param [Hash{Symbol=>String}] options The options hash containing configuration values
26
- #@option options [String] :gce_project The Google Compute Project name to connect to
27
- #@option options [String] :gce_keyfile The location of the Google Compute service account keyfile
28
- #@option options [String] :gce_password The password for the Google Compute service account key
29
- #@option options [String] :gce_email The email address for the Google Compute service account
30
- #@option options [String] :gce_machine_type A Google Compute machine type used to create instances, defaults to n1-highmem-2
31
- #@option options [Integer] :timeout The amount of time to attempt execution before quiting and exiting with failure
26
+ # Create a new instance of the Google Compute Engine helper object
27
+ #
28
+ # @param [Hash{Symbol=>String}] options The options hash containing
29
+ # configuration values
30
+ #
31
+ # @option options [String] :gce_project The Google Compute Project name to
32
+ # connect to
33
+ #
34
+ # @option options [String] :gce_keyfile The location of the Google Compute
35
+ # service account keyfile
36
+ #
37
+ # @option options [String] :gce_password The password for the Google Compute
38
+ # service account key
39
+ #
40
+ # @option options [String] :gce_email The email address for the Google
41
+ # Compute service account
42
+ #
43
+ # @option options [String] :gce_machine_type A Google Compute machine type
44
+ # used to create instances, defaults to n1-highmem-2
45
+ #
46
+ # @option options [Integer] :timeout The amount of time to attempt execution
47
+ # before quiting and exiting with failure
32
48
  def initialize(options)
33
49
  @options = options
34
50
  @logger = options[:logger]
@@ -39,54 +55,91 @@ module Beaker
39
55
  set_client(Beaker::Version::STRING)
40
56
  set_compute_api(API_VERSION, start, attempts)
41
57
 
58
+ @options[:gce_project] = ENV['BEAKER_gce_project'] if ENV['BEAKER_gce_project']
59
+ @options[:gce_keyfile] = ENV['BEAKER_gce_keyfile'] if ENV['BEAKER_gce_keyfile']
60
+
61
+ unless (@options[:gce_keyfile] && File.exist?(@options[:gce_keyfile]))
62
+ @options[:gce_keyfile] = File.join(ENV['HOME'], '.beaker', 'gce', %(#{@options[:gce_project]}.p12))
63
+ end
64
+
65
+ @options[:gce_password] = ENV['BEAKER_gce_password'] if ENV['BEAKER_gce_password']
66
+ # This is the GCE default so there's usually not a reason to specify it
67
+ @options[:gce_password] = 'notasecret' unless @options[:gce_password]
68
+
69
+ @options[:gce_email] = ENV['BEAKER_gce_email'] if ENV['BEAKER_gce_email']
70
+
42
71
  raise 'You must specify a gce_project for Google Compute Engine instances!' unless @options[:gce_project]
43
- raise 'You must specify a gce_keyfile for Google Compute Engine instances!' unless @options[:gce_keyfile]
44
- raise 'You must specify a gce_password for Google Compute Engine instances!' unless @options[:gce_password]
72
+
73
+ raise "Could not find gce_keyfile for Google Compute Engine at '#{@options[:gce_keyfile]}'!" unless File.exist?(@options[:gce_keyfile])
74
+
45
75
  raise 'You must specify a gce_email for Google Compute Engine instances!' unless @options[:gce_email]
46
76
 
47
77
  authenticate(@options[:gce_keyfile], @options[:gce_password], @options[:gce_email], start, attempts)
48
78
  end
49
79
 
50
- #Determines the default Google Compute zone based upon options and defaults
51
- #@return The full URL to the default zone in which Google Compute requests will be sent
80
+ # Determines the default Google Compute zone based upon options and
81
+ # defaults
82
+ #
83
+ # @return The full URL to the default zone in which Google Compute requests
84
+ # will be sent
52
85
  def default_zone
53
86
  BASE_URL + @options[:gce_project] + '/global/zones/' + DEFAULT_ZONE_NAME
54
87
  end
55
88
 
56
- #Determines the default Google Compute network based upon defaults and options
57
- #@return The full URL to the default network in which Google Compute instances will operate
89
+ # Determines the default Google Compute network based upon defaults and
90
+ # options
91
+ #
92
+ # @return The full URL to the default network in which Google Compute
93
+ # instances will operate
58
94
  def default_network
59
95
  BASE_URL + @options[:gce_project] + '/global/networks/default'
60
96
  end
61
97
 
62
- #Determines the Google Compute project which contains bases instances of type name
63
- #@param [String] name The platform type to search for
64
- #@return The Google Compute project name
65
- #@raise [Exception] If the provided platform type name is unsupported
98
+ # Determines the Google Compute project which contains bases instances of
99
+ # type name
100
+ #
101
+ # @param [String] name The platform type to search for
102
+ #
103
+ # @return The Google Compute project name
104
+ #
105
+ # @raise [Exception] If the provided platform type name is unsupported
66
106
  def get_platform_project(name)
67
107
  if name =~ /debian/
68
108
  return DEBIAN_PROJECT
69
109
  elsif name =~ /centos/
70
110
  return CENTOS_PROJECT
111
+ elsif name =~ /rhel/
112
+ return RHEL_PROJECT
113
+ elsif name =~ /sles/
114
+ return SLES_PROJECT
71
115
  else
72
116
  raise "Unsupported platform for Google Compute Engine: #{name}"
73
117
  end
74
118
  end
75
119
 
76
- #Create the Google APIClient object which will be used for accessing the Google Compute API
77
- #@param version The version number of Beaker currently running
120
+ # Create the Google APIClient object which will be used for accessing the
121
+ # Google Compute API
122
+ #
123
+ # @param version The version number of Beaker currently running
78
124
  def set_client(version)
79
- @client = Google::APIClient.new({:application_name => "Beaker", :application_version => version})
80
- end
81
-
82
- #Discover the currently active Google Compute API
83
- #@param [String] version The version of the Google Compute API to discover
84
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
85
- # further code execution attempts remain
86
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
87
- #@raise [Exception] Raised if we fail to discover the Google Compute API, either through errors or running out of attempts
125
+ @client = ::Google::APIClient.new({:application_name => "Beaker", :application_version => version})
126
+ end
127
+
128
+ # Discover the currently active Google Compute API
129
+ #
130
+ # @param [String] version The version of the Google Compute API to discover
131
+ #
132
+ # @param [Integer] start The time when we started code execution, it is
133
+ # compared to Time.now to determine how many further code execution
134
+ # attempts remain
135
+ #
136
+ # @param [Integer] attempts The total amount of attempts to execute that we
137
+ # are willing to allow
138
+ #
139
+ # @raise [Exception] Raised if we fail to discover the Google Compute API,
140
+ # either through errors or running out of attempts
88
141
  def set_compute_api version, start, attempts
89
- try = (Time.now - start) / SLEEPWAIT
142
+ try = (Time.now - start)/SLEEPWAIT
90
143
  while try <= attempts
91
144
  begin
92
145
  @compute = @client.discovered_api('compute', version)
@@ -102,18 +155,31 @@ module Beaker
102
155
  end
103
156
  end
104
157
 
105
- #Creates an authenticated connection to the Google Compute Engine API
106
- #@param [String] keyfile The location of the Google Compute Service Account keyfile to use for authentication
107
- #@param [String] password The password for the provided Google Compute Service Account key
108
- #@param [String] email The email address of the Google Compute Service Account we are using to connect
109
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
110
- # further code execution attempts remain
111
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
112
- #@raise [Exception] Raised if we fail to create an authenticated connection to the Google Compute API, either through errors or running out of attempts
158
+ # Creates an authenticated connection to the Google Compute Engine API
159
+ #
160
+ # @param [String] keyfile The location of the Google Compute Service
161
+ # Account keyfile to use for authentication
162
+ #
163
+ # @param [String] password The password for the provided Google Compute
164
+ # Service Account key
165
+ #
166
+ # @param [String] email The email address of the Google Compute Service
167
+ # Account we are using to connect
168
+ #
169
+ # @param [Integer] start The time when we started code execution, it is
170
+ # compared to Time.now to determine how many further code execution
171
+ # attempts remain
172
+ #
173
+ # @param [Integer] attempts The total amount of attempts to execute that we
174
+ # are willing to allow
175
+ #
176
+ # @raise [Exception] Raised if we fail to create an authenticated
177
+ # connection to the Google Compute API, either through errors or running
178
+ # out of attempts
113
179
  def authenticate(keyfile, password, email, start, attempts)
114
180
  # OAuth authentication, using the service account
115
- key = Google::APIClient::PKCS12.load_key(keyfile, password)
116
- service_account = Google::APIClient::JWTAsserter.new(
181
+ key = ::Google::APIClient::PKCS12.load_key(keyfile, password)
182
+ service_account = ::Google::APIClient::JWTAsserter.new(
117
183
  email,
118
184
  AUTH_URL,
119
185
  key)
@@ -133,12 +199,19 @@ module Beaker
133
199
  end
134
200
  end
135
201
 
136
- #Executes a provided Google Compute request using a previously configured and authenticated Google Compute client connection
137
- #@param [Hash] req A correctly formatted Google Compute request object
138
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
139
- # further code execution attempts remain
140
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
141
- #@raise [Exception] Raised if we fail to execute the request, either through errors or running out of attempts
202
+ # Executes a provided Google Compute request using a previously configured
203
+ # and authenticated Google Compute client connection
204
+ #
205
+ # @param [Hash] req A correctly formatted Google Compute request object
206
+ #
207
+ # @param [Integer] start The time when we started code execution, it is
208
+ # compared to Time.now to determine how many further code execution
209
+ # attempts remain
210
+ # @param [Integer] attempts The total amount of attempts to execute that we
211
+ # are willing to allow
212
+ #
213
+ # @raise [Exception] Raised if we fail to execute the request, either
214
+ # through errors or running out of attempts
142
215
  def execute req, start, attempts
143
216
  last_error = parsed = nil
144
217
  try = (Time.now - start) / SLEEPWAIT
@@ -157,32 +230,42 @@ module Beaker
157
230
  end
158
231
  end
159
232
  return parsed
160
- #retry errors
233
+ # retry errors
161
234
  rescue Faraday::Error::ConnectionFailed => e
162
235
  @logger.debug "ConnectionFailed attempting Google Compute execute command"
163
236
  try += 1
164
237
  last_error = e
165
238
  end
166
239
  end
167
- #we only get down here if we've used up all our tries
240
+ # we only get down here if we've used up all our tries
168
241
  raise last_error
169
242
  end
170
243
 
171
- #Determines the latest image available for the provided platform name. We currently only support debian-7 and centos-6 platforms.
172
- #@param [String] platform The platform type to search for an instance of, must be one of /debian-7-.*/ or /centos-6-.*/
173
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
174
- # further code execution attempts remain
175
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
176
- #@return [Hash] The image hash of the latest, non-deprecated image for the provided platform
177
- #@raise [Exception] Raised if we fail to execute the request, either through errors or running out of attempts
244
+ # Determines the latest image available for the provided platform name.
245
+ #
246
+ # Only images of the form (platform)-(version)-(version) are currently supported
247
+ #
248
+ # @param [String] platform The platform type to search for an instance of.
249
+ #
250
+ # @param [Integer] start The time when we started code execution, it is
251
+ # compared to Time.now to determine how many further code execution
252
+ # attempts remain
253
+ #
254
+ # @param [Integer] attempts The total amount of attempts to execute that we
255
+ # are willing to allow
256
+ #
257
+ # @return [Hash] The image hash of the latest, non-deprecated image for the
258
+ # provided platform
259
+ #
260
+ # @raise [Exception] Raised if we fail to execute the request, either
261
+ # through errors or running out of attempts
178
262
  def get_latest_image(platform, start, attempts)
179
- #use the platform version numbers instead of codenames
180
- platform = platform.with_version_number
181
263
  #break up my platform for information
182
264
  platform_name, platform_version, platform_extra_info = platform.split('-', 3)
183
265
  #find latest image to use
184
266
  result = execute( image_list_req(get_platform_project(platform_name)), start, attempts )
185
267
  images = result["items"]
268
+
186
269
  #reject images of the wrong version of the given platform
187
270
  images.delete_if { |image| image['name'] !~ /^#{platform_name}-#{platform_version}/}
188
271
  #reject deprecated images
@@ -194,54 +277,89 @@ module Beaker
194
277
  images[0]
195
278
  end
196
279
 
197
- #Determines the Google Compute machineType object based upon the selected gce_machine_type option
198
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
199
- # further code execution attempts remain
200
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
201
- #@return [Hash] The machineType hash
202
- #@raise [Exception] Raised if we fail get the machineType, either through errors or running out of attempts
280
+ # Determines the Google Compute machineType object based upon the selected
281
+ # gce_machine_type option
282
+ #
283
+ # @param [Integer] start The time when we started code execution, it is
284
+ # compared to Time.now to determine how many further code execution
285
+ # attempts remain
286
+ #
287
+ # @param [Integer] attempts The total amount of attempts to execute that we
288
+ # are willing to allow
289
+ #
290
+ # @return [Hash] The machineType hash
291
+ #
292
+ # @raise [Exception] Raised if we fail get the machineType, either through
293
+ # errors or running out of attempts
203
294
  def get_machineType(start, attempts)
204
295
  execute( machineType_get_req, start, attempts )
205
296
  end
206
297
 
207
- #Determines the Google Compute network object in use for the current connection
208
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
209
- # further code execution attempts remain
210
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
211
- #@return [Hash] The network hash
212
- #@raise [Exception] Raised if we fail get the network, either through errors or running out of attempts
298
+ # Determines the Google Compute network object in use for the current connection
299
+ # @param [Integer] start The time when we started code execution, it is
300
+ # compared to Time.now to determine how many further code execution
301
+ # attempts remain
302
+ #
303
+ # @param [Integer] attempts The total amount of attempts to execute that we
304
+ # are willing to allow
305
+ #
306
+ # @return [Hash] The network hash
307
+ #
308
+ # @raise [Exception] Raised if we fail get the network, either through
309
+ # errors or running out of attempts
213
310
  def get_network(start, attempts)
214
311
  execute( network_get_req, start, attempts)
215
312
  end
216
313
 
217
- #Determines a list of existing Google Compute instances
218
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
219
- # further code execution attempts remain
220
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
221
- #@return [Array[Hash]] The instances array of hashes
222
- #@raise [Exception] Raised if we fail determine the list of existing instances, either through errors or running out of attempts
314
+ # Determines a list of existing Google Compute instances
315
+ #
316
+ # @param [Integer] start The time when we started code execution, it is
317
+ # compared to Time.now to determine how many further code execution
318
+ # attempts remain
319
+ #
320
+ # @param [Integer] attempts The total amount of attempts to execute that we
321
+ # are willing to allow
322
+ #
323
+ # @return [Array[Hash]] The instances array of hashes
324
+ #
325
+ # @raise [Exception] Raised if we fail determine the list of existing
326
+ # instances, either through errors or running out of attempts
223
327
  def list_instances(start, attempts)
224
328
  instances = execute( instance_list_req(), start, attempts )
225
329
  instances["items"]
226
330
  end
227
331
 
228
- #Determines a list of existing Google Compute disks
229
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
230
- # further code execution attempts remain
231
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
232
- #@return [Array[Hash]] The disks array of hashes
233
- #@raise [Exception] Raised if we fail determine the list of existing disks, either through errors or running out of attempts
332
+ # Determines a list of existing Google Compute disks
333
+ #
334
+ # @param [Integer] start The time when we started code execution, it is
335
+ # compared to Time.now to determine how many further code execution
336
+ # attempts remain
337
+ #
338
+ # @param [Integer] attempts The total amount of attempts to execute that we
339
+ # are willing to allow
340
+ #
341
+ # @return [Array[Hash]] The disks array of hashes
342
+ #
343
+ # @raise [Exception] Raised if we fail determine the list of existing
344
+ # disks, either through errors or running out of attempts
234
345
  def list_disks(start, attempts)
235
346
  disks = execute( disk_list_req(), start, attempts )
236
347
  disks["items"]
237
348
  end
238
349
 
239
- #Determines a list of existing Google Compute firewalls
240
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
241
- # further code execution attempts remain
242
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
243
- #@return [Array[Hash]] The firewalls array of hashes
244
- #@raise [Exception] Raised if we fail determine the list of existing firewalls, either through errors or running out of attempts
350
+ # Determines a list of existing Google Compute firewalls
351
+ #
352
+ # @param [Integer] start The time when we started code execution, it is
353
+ # compared to Time.now to determine how many further code execution
354
+ # attempts remain
355
+ #
356
+ # @param [Integer] attempts The total amount of attempts to execute that we
357
+ # are willing to allow
358
+ #
359
+ # @return [Array[Hash]] The firewalls array of hashes
360
+ #
361
+ # @raise [Exception] Raised if we fail determine the list of existing
362
+ # firewalls, either through errors or running out of attempts
245
363
  def list_firewalls(start, attempts)
246
364
  result = execute( firewall_list_req(), start, attempts )
247
365
  firewalls = result["items"]
@@ -249,24 +367,41 @@ module Beaker
249
367
  firewalls
250
368
  end
251
369
 
252
- #Create a Google Compute firewall on the current connection
253
- #@param [String] name The name of the firewall to create
254
- #@param [Hash] network The Google Compute network hash in which to create the firewall
255
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
256
- # further code execution attempts remain
257
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
258
- #@raise [Exception] Raised if we fail create the firewall, either through errors or running out of attempts
370
+ # Create a Google Compute firewall on the current connection
371
+ #
372
+ # @param [String] name The name of the firewall to create
373
+ #
374
+ # @param [Hash] network The Google Compute network hash in which to create
375
+ # the firewall
376
+ #
377
+ # @param [Integer] start The time when we started code execution, it is
378
+ # compared to Time.now to determine how many further code execution
379
+ # attempts remain
380
+ #
381
+ # @param [Integer] attempts The total amount of attempts to execute that we
382
+ # are willing to allow
383
+ #
384
+ # @raise [Exception] Raised if we fail create the firewall, either through
385
+ # errors or running out of attempts
259
386
  def create_firewall(name, network, start, attempts)
260
387
  execute( firewall_insert_req( name, network['selfLink'] ), start, attempts )
261
388
  end
262
389
 
263
- #Create a Google Compute disk on the current connection
264
- #@param [String] name The name of the disk to create
265
- #@param [Hash] img The Google Compute image to use for instance creation
266
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
267
- # further code execution attempts remain
268
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
269
- #@raise [Exception] Raised if we fail create the disk, either through errors or running out of attempts
390
+ # Create a Google Compute disk on the current connection
391
+ #
392
+ # @param [String] name The name of the disk to create
393
+ #
394
+ # @param [Hash] img The Google Compute image to use for instance creation
395
+ #
396
+ # @param [Integer] start The time when we started code execution, it is
397
+ # compared to Time.now to determine how many further code execution
398
+ # attempts remain
399
+ #
400
+ # @param [Integer] attempts The total amount of attempts to execute that we
401
+ # are willing to allow
402
+ #
403
+ # @raise [Exception] Raised if we fail create the disk, either through
404
+ # errors or running out of attempts
270
405
  def create_disk(name, img, start, attempts)
271
406
  #create a new boot disk for this instance
272
407
  disk = execute( disk_insert_req( name, img['selfLink'] ), start, attempts )
@@ -289,15 +424,26 @@ module Beaker
289
424
  disk
290
425
  end
291
426
 
292
- #Create a Google Compute instance on the current connection
293
- #@param [String] name The name of the instance to create
294
- #@param [Hash] img The Google Compute image to use for instance creation
295
- #@param [Hash] machineType The Google Compute machineType
296
- #@param [Hash] disk The Google Compute disk to attach to the newly created instance
297
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
298
- # further code execution attempts remain
299
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
300
- #@raise [Exception] Raised if we fail create the instance, either through errors or running out of attempts
427
+ # Create a Google Compute instance on the current connection
428
+ #
429
+ # @param [String] name The name of the instance to create
430
+ #
431
+ # @param [Hash] img The Google Compute image to use for instance creation
432
+ #
433
+ # @param [Hash] machineType The Google Compute machineType
434
+ #
435
+ # @param [Hash] disk The Google Compute disk to attach to the newly created
436
+ # instance
437
+ #
438
+ # @param [Integer] start The time when we started code execution, it is
439
+ # compared to Time.now to determine how many further code execution
440
+ # attempts remain
441
+ #
442
+ # @param [Integer] attempts The total amount of attempts to execute that we
443
+ # are willing to allow
444
+ #
445
+ # @raise [Exception] Raised if we fail create the instance, either through
446
+ # errors or running out of attempts
301
447
  def create_instance(name, img, machineType, disk, start, attempts)
302
448
  #add a new instance of the image
303
449
  instance = execute( instance_insert_req( name, img['selfLink'], machineType['selfLink'], disk['selfLink'] ), start, attempts)
@@ -319,14 +465,26 @@ module Beaker
319
465
  instance
320
466
  end
321
467
 
322
- #Add key/value pairs to a Google Compute instance on the current connection
323
- #@param [String] name The name of the instance to add metadata to
324
- #@param [String] fingerprint A hash of the metadata's contents of the given instance
325
- #@param [Array<Hash>] data An array of hashes. Each hash should have a key and a value.
326
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
327
- # further code execution attempts remain
328
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
329
- #@raise [Exception] Raised if we fail to add metadata, either through errors or running out of attempts
468
+ # Add key/value pairs to a Google Compute instance on the current
469
+ # connection
470
+ #
471
+ # @param [String] name The name of the instance to add metadata to
472
+ #
473
+ # @param [String] fingerprint A hash of the metadata's contents of the
474
+ # given instance
475
+ #
476
+ # @param [Array<Hash>] data An array of hashes. Each hash should have a
477
+ # key and a value.
478
+ #
479
+ # @param [Integer] start The time when we started code execution, it is
480
+ # compared to Time.now to determine how many further code execution
481
+ # attempts remain
482
+ #
483
+ # @param [Integer] attempts The total amount of attempts to execute that we
484
+ # are willing to allow
485
+ #
486
+ # @raise [Exception] Raised if we fail to add metadata, either through
487
+ # errors or running out of attempts
330
488
  def setMetadata_on_instance(name, fingerprint, data, start, attempts)
331
489
  zone_operation = execute( instance_setMetadata_req( name, fingerprint, data), start, attempts )
332
490
  status = ''
@@ -347,15 +505,23 @@ module Beaker
347
505
  zone_operation
348
506
  end
349
507
 
350
- #Delete a Google Compute instance on the current connection
351
- #@param [String] name The name of the instance to delete
352
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
353
- # further code execution attempts remain
354
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
355
- #@raise [Exception] Raised if we fail delete the instance, either through errors or running out of attempts
508
+ # Delete a Google Compute instance on the current connection
509
+ #
510
+ # @param [String] name The name of the instance to delete
511
+ #
512
+ # @param [Integer] start The time when we started code execution, it is
513
+ # compared to Time.now to determine how many further code execution
514
+ # attempts remain
515
+ #
516
+ # @param [Integer] attempts The total amount of attempts to execute that we
517
+ # are willing to allow
518
+ #
519
+ # @raise [Exception] Raised if we fail delete the instance, either through
520
+ # errors or running out of attempts
356
521
  def delete_instance(name, start, attempts)
357
522
  result = execute( instance_delete_req( name ), start, attempts )
358
- #ensure deletion of instance
523
+
524
+ # Ensure deletion of instance
359
525
  try = (Time.now - start) / SLEEPWAIT
360
526
  while try <= attempts
361
527
  begin
@@ -371,15 +537,23 @@ module Beaker
371
537
  @logger.debug("#{name} instance was not removed before timeout, may still exist")
372
538
  end
373
539
 
374
- #Delete a Google Compute disk on the current connection
375
- #@param [String] name The name of the disk to delete
376
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
377
- # further code execution attempts remain
378
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
379
- #@raise [Exception] Raised if we fail delete the disk, either through errors or running out of attempts
540
+ # Delete a Google Compute disk on the current connection
541
+ #
542
+ # @param [String] name The name of the disk to delete
543
+ #
544
+ # @param [Integer] start The time when we started code execution, it is
545
+ # compared to Time.now to determine how many further code execution
546
+ # attempts remain
547
+ #
548
+ # @param [Integer] attempts The total amount of attempts to execute that we
549
+ # are willing to allow
550
+ #
551
+ # @raise [Exception] Raised if we fail delete the disk, either through
552
+ # errors or running out of attempts
380
553
  def delete_disk(name, start, attempts)
381
554
  result = execute( disk_delete_req( name ), start, attempts )
382
- #ensure deletion of disk
555
+
556
+ # Ensure deletion of disk
383
557
  try = (Time.now - start) / SLEEPWAIT
384
558
  while try <= attempts
385
559
  begin
@@ -395,12 +569,19 @@ module Beaker
395
569
  @logger.debug("#{name} disk was not removed before timeout, may still exist")
396
570
  end
397
571
 
398
- #Delete a Google Compute firewall on the current connection
399
- #@param [String] name The name of the firewall to delete
400
- #@param [Integer] start The time when we started code execution, it is compared to Time.now to determine how many
401
- # further code execution attempts remain
402
- #@param [Integer] attempts The total amount of attempts to execute that we are willing to allow
403
- #@raise [Exception] Raised if we fail delete the firewall, either through errors or running out of attempts
572
+ # Delete a Google Compute firewall on the current connection
573
+ #
574
+ # @param [String] name The name of the firewall to delete
575
+ #
576
+ # @param [Integer] start The time when we started code execution, it is
577
+ # compared to Time.now to determine how many further code execution
578
+ # attempts remain
579
+ #
580
+ # @param [Integer] attempts The total amount of attempts to execute that we
581
+ # are willing to allow
582
+ #
583
+ # @raise [Exception] Raised if we fail delete the firewall, either through
584
+ # errors or running out of attempts
404
585
  def delete_firewall(name, start, attempts)
405
586
  result = execute( firewall_delete_req( name ), start, attempts )
406
587
  #ensure deletion of disk
@@ -419,60 +600,78 @@ module Beaker
419
600
  @logger.debug("#{name} firewall was not removed before timeout, may still exist")
420
601
  end
421
602
 
422
-
423
- #Create a Google Compute list all images request
424
- #@param [String] name The Google Compute project name to query
425
- #@return [Hash] A correctly formatted Google Compute request hash
603
+ # Create a Google Compute list all images request
604
+ #
605
+ # @param [String] name The Google Compute project name to query
606
+ #
607
+ # @return [Hash] A correctly formatted Google Compute request hash
426
608
  def image_list_req(name)
427
609
  { :api_method => @compute.images.list,
428
610
  :parameters => { 'project' => name } }
429
611
  end
430
612
 
431
- #Create a Google Compute list all disks request
432
- #@return [Hash] A correctly formatted Google Compute request hash
613
+ # Create a Google Compute list all disks request
614
+ #
615
+ # @return [Hash] A correctly formatted Google Compute request hash
433
616
  def disk_list_req
434
617
  { :api_method => @compute.disks.list,
435
618
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME } }
436
619
  end
437
620
 
438
- #Create a Google Compute get disk request
439
- #@param [String] name The name of the disk to query for
440
- #@return [Hash] A correctly formatted Google Compute request hash
621
+ # Create a Google Compute get disk request
622
+ #
623
+ # @param [String] name The name of the disk to query for
624
+ #
625
+ # @return [Hash] A correctly formatted Google Compute request hash
441
626
  def disk_get_req(name)
442
627
  { :api_method => @compute.disks.get,
443
628
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'disk' => name } }
444
629
  end
445
630
 
446
- #Create a Google Compute disk delete request
447
- #@param [String] name The name of the disk delete
448
- #@return [Hash] A correctly formatted Google Compute request hash
631
+ # Create a Google Compute disk delete request
632
+ #
633
+ # @param [String] name The name of the disk delete
634
+ #
635
+ # @return [Hash] A correctly formatted Google Compute request hash
449
636
  def disk_delete_req(name)
450
637
  { :api_method => @compute.disks.delete,
451
638
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'disk' => name } }
452
639
  end
453
640
 
454
- #Create a Google Compute disk create request
455
- #@param [String] name The name of the disk to create
456
- #@param [String] source The link to a Google Compute image to base the disk creation on
457
- #@return [Hash] A correctly formatted Google Compute request hash
641
+ # Create a Google Compute disk create request
642
+ #
643
+ # @param [String] name The name of the disk to create
644
+ #
645
+ # @param [String] source The link to a Google Compute image to base the
646
+ # disk creation on
647
+ #
648
+ # @return [Hash] A correctly formatted Google Compute request hash
649
+ #
458
650
  def disk_insert_req(name, source)
459
651
  { :api_method => @compute.disks.insert,
460
652
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'sourceImage' => source },
461
653
  :body_object => { 'name' => name, 'sizeGb' => DEFAULT_DISK_SIZE } }
462
654
  end
463
655
 
464
- #Create a Google Compute get firewall request
465
- #@param [String] name The name of the firewall to query fo
466
- #@return [Hash] A correctly formatted Google Compute request hash
656
+ # Create a Google Compute get firewall request
657
+ #
658
+ # @param [String] name The name of the firewall to query for
659
+ #
660
+ # @return [Hash] A correctly formatted Google Compute request hash
467
661
  def firewall_get_req(name)
468
662
  { :api_method => @compute.firewalls.get,
469
663
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'firewall' => name } }
470
664
  end
471
665
 
472
- #Create a Google Compute insert firewall request, open ports 443, 8140 and 61613
473
- #@param [String] name The name of the firewall to create
474
- #@param [String] network The link to the Google Compute network to attach this firewall to
475
- #@return [Hash] A correctly formatted Google Compute request hash
666
+ # Create a Google Compute insert firewall request, open ports 443, 8140 and
667
+ # 61613
668
+ #
669
+ # @param [String] name The name of the firewall to create
670
+ #
671
+ # @param [String] network The link to the Google Compute network to attach
672
+ # this firewall to
673
+ #
674
+ # @return [Hash] A correctly formatted Google Compute request hash
476
675
  def firewall_insert_req(name, network)
477
676
  { :api_method => @compute.firewalls.insert,
478
677
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME },
@@ -482,39 +681,48 @@ module Beaker
482
681
  'sourceRanges' => [ "0.0.0.0/0" ] } }
483
682
  end
484
683
 
485
- #Create a Google Compute delete firewall request
486
- #@param [String] name The name of the firewall to delete
487
- #@return [Hash] A correctly formatted Google Compute request hash
684
+ # Create a Google Compute delete firewall request
685
+ #
686
+ # @param [String] name The name of the firewall to delete
687
+ #
688
+ # @return [Hash] A correctly formatted Google Compute request hash
488
689
  def firewall_delete_req(name)
489
690
  { :api_method => @compute.firewalls.delete,
490
691
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'firewall' => name } }
491
692
  end
492
693
 
493
- #Create a Google Compute list firewall request
494
- #@return [Hash] A correctly formatted Google Compute request hash
694
+ # Create a Google Compute list firewall request
695
+ #
696
+ # @return [Hash] A correctly formatted Google Compute request hash
495
697
  def firewall_list_req()
496
698
  { :api_method => @compute.firewalls.list,
497
699
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME } }
498
700
  end
499
701
 
500
- #Create a Google Compute get network request
501
- #@param [String] name (default) The name of the network to access information about
502
- #@return [Hash] A correctly formatted Google Compute request hash
702
+ # Create a Google Compute get network request
703
+ #
704
+ # @param [String] name (default) The name of the network to access
705
+ # information about
706
+ #
707
+ # @return [Hash] A correctly formatted Google Compute request hash
503
708
  def network_get_req(name = 'default')
504
709
  { :api_method => @compute.networks.get,
505
710
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'network' => name } }
506
711
  end
507
712
 
508
- #Create a Google Compute zone operation request
509
- #@return [Hash] A correctly formatted Google Compute request hash
713
+ # Create a Google Compute zone operation request
714
+ #
715
+ # @return [Hash] A correctly formatted Google Compute request hash
510
716
  def operation_get_req(name)
511
717
  { :api_method => @compute.zone_operations.get,
512
718
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'operation' => name } }
513
719
  end
514
720
 
515
- #Set tags on a Google Compute instance
516
- #@param [Array<String>] data An array of tags to be added to an instance
517
- #@return [Hash] A correctly formatted Google Compute request hash
721
+ # Set tags on a Google Compute instance
722
+ #
723
+ # @param [Array<String>] data An array of tags to be added to an instance
724
+ #
725
+ # @return [Hash] A correctly formatted Google Compute request hash
518
726
  def instance_setMetadata_req(name, fingerprint, data)
519
727
  { :api_method => @compute.instances.set_metadata,
520
728
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'instance' => name },
@@ -524,35 +732,47 @@ module Beaker
524
732
  }
525
733
  end
526
734
 
527
- #Create a Google Compute list instance request
528
- #@return [Hash] A correctly formatted Google Compute request hash
735
+ # Create a Google Compute list instance request
736
+ #
737
+ # @return [Hash] A correctly formatted Google Compute request hash
529
738
  def instance_list_req
530
739
  { :api_method => @compute.instances.list,
531
740
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME } }
532
741
  end
533
742
 
534
- #Create a Google Compute get instance request
535
- #@param [String] name The name of the instance to query for
536
- #@return [Hash] A correctly formatted Google Compute request hash
743
+ # Create a Google Compute get instance request
744
+ #
745
+ # @param [String] name The name of the instance to query for
746
+ #
747
+ # @return [Hash] A correctly formatted Google Compute request hash
537
748
  def instance_get_req(name)
538
749
  { :api_method => @compute.instances.get,
539
750
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'instance' => name } }
540
751
  end
541
752
 
542
- #Create a Google Compute instance delete request
543
- #@param [String] name The name of the instance to delete
544
- #@return [Hash] A correctly formatted Google Compute request hash
753
+ # Create a Google Compute instance delete request
754
+ #
755
+ # @param [String] name The name of the instance to delete
756
+ #
757
+ # @return [Hash] A correctly formatted Google Compute request hash
545
758
  def instance_delete_req(name)
546
759
  { :api_method => @compute.instances.delete,
547
760
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'instance' => name } }
548
761
  end
549
762
 
550
- #Create a Google Compute instance create request
551
- #@param [String] name The name of the instance to create
552
- #@param [String] image The link to the image to use for instance create
553
- #@param [String] machineType The link to the type of Google Compute instance to create (indicates cpus and memory size)
554
- #@param [String] disk The link to the disk to be used by the newly created instance
555
- #@return [Hash] A correctly formatted Google Compute request hash
763
+ # Create a Google Compute instance create request
764
+ #
765
+ # @param [String] name The name of the instance to create
766
+ #
767
+ # @param [String] image The link to the image to use for instance create
768
+ #
769
+ # @param [String] machineType The link to the type of Google Compute
770
+ # instance to create (indicates cpus and memory size)
771
+ #
772
+ # @param [String] disk The link to the disk to be used by the newly created
773
+ # instance
774
+ #
775
+ # @return [Hash] A correctly formatted Google Compute request hash
556
776
  def instance_insert_req(name, image, machineType, disk)
557
777
  { :api_method => @compute.instances.insert,
558
778
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME },
@@ -566,12 +786,12 @@ module Beaker
566
786
  'network' => default_network } ] } }
567
787
  end
568
788
 
569
- #Create a Google Compute machineType get request
570
- #@return [Hash] A correctly formatted Google Compute request hash
789
+ # Create a Google Compute machineType get request
790
+ #
791
+ # @return [Hash] A correctly formatted Google Compute request hash
571
792
  def machineType_get_req()
572
793
  { :api_method => @compute.machine_types.get,
573
794
  :parameters => { 'project' => @options[:gce_project], 'zone' => DEFAULT_ZONE_NAME, 'machineType' => @options[:gce_machine_type] || DEFAULT_MACHINE_TYPE } }
574
795
  end
575
-
576
796
  end
577
797
  end