vagrant-google 2.2.1 → 2.3.0.rc0

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: ff7fc355aac3b30b66f83ee7dc0032c64060a0dc
4
- data.tar.gz: aa90cafdd81a4815b3b4f9676827bb7e2403fb16
3
+ metadata.gz: '08471e3d05bc8414569638e5fdc304ee522d743f'
4
+ data.tar.gz: a91555ed68b59ce5e1b84d1bab7b681ebb1ce890
5
5
  SHA512:
6
- metadata.gz: 3bb5325a938bdf66b431ef25490c90948fc81e0a873e09b4eb862a46cfcfec78d5685077d5dbe83c58b724e8482ceb0b95e0b3d2db4c64f0eebd22084eb44da7
7
- data.tar.gz: dd90bd55eb16fcd40645a55ca306542586e4e581a1989123f639db5a3715498d9ea35822f6b66e2fc7c9cdb0491c5890687800dfdb07b2c8c373f81bf3ea649f
6
+ metadata.gz: 91a2d9310f63eb4eb3755d5a7d7d68c19bfc1975b5ba77521bbebcfc87089f07bf7f790e5f474c390bae626324fa7b7fde3c1e85eef8432f5e31f6efae6f6331
7
+ data.tar.gz: 1f666a0801fc61431bbe3c970483a5b09672de88441d5671631ef4f988a67db9bfbe145900d636bd2488a5bfee4df73e0844b9f4cc2c31cc3abfb0023210e4f1
data/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## 2.3.0 (February 2019)
6
+
7
+ ### User-facing
8
+
9
+ - \#210 Allow adding additional disks to the instances. [whynick1]
10
+
11
+ ### Development
12
+
13
+ - \#211 Rspec-its is now explicitly required for unit tests. [temikus]
14
+
5
15
  ## 2.2.1 (October 2018)
6
16
 
7
17
  ### User-facing
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Vagrant Google Compute Engine (GCE) Provider
2
2
 
3
-
4
- [![Gem Version](https://badge.fury.io/rb/vagrant-google.png)][gem]
5
- [![Dependency Status](https://gemnasium.com/mitchellh/vagrant-google.png)][gemnasium]
3
+ [![Gem Version](https://badge.fury.io/rb/vagrant-google.svg)](https://badge.fury.io/rb/vagrant-google)
6
4
 
7
5
  [gem]: https://rubygems.org/gems/vagrant-google
8
6
  [gemnasium]: https://gemnasium.com/mitchellh/vagrant-google
@@ -210,6 +208,20 @@ will pull the most recent CentOS 7 image. For more info, refer to
210
208
  utility aliases, for example:
211
209
  `['storage-full', 'bigquery', 'https://www.googleapis.com/auth/compute']`.
212
210
  * `service_account` - The IAM service account email to use for the instance.
211
+ * `additional_disks` - An array of additional disk configurations. `disk_size` is default to `10`GB;
212
+ `disk_name` is default to `name` + "-additional-disk-#{index}"; `disk_type` is default to `pd-standard`;
213
+ `autodelete_disk` is default to `true`. Here is an example of configuration.
214
+ ```ruby
215
+ [{
216
+ :image_family => "google-image-family",
217
+ :image => nil,
218
+ :image_project_id => "google-project-id",
219
+ :disk_size => 20,
220
+ :disk_name => "google-additional-disk-0",
221
+ :disk_type => "pd-standard",
222
+ :autodelete_disk => true
223
+ }]
224
+ ```
213
225
 
214
226
  These can be set like typical provider-specific configuration:
215
227
 
@@ -67,6 +67,7 @@ module VagrantPlugins
67
67
  service_account_scopes = zone_config.scopes
68
68
  service_account = zone_config.service_account
69
69
  project_id = zone_config.google_project_id
70
+ additional_disks = zone_config.additional_disks
70
71
 
71
72
  # Launch!
72
73
  env[:ui].info(I18n.t("vagrant_google.launching_instance"))
@@ -96,6 +97,7 @@ module VagrantPlugins
96
97
  env[:ui].info(" -- Autodelete Disk: #{autodelete_disk}")
97
98
  env[:ui].info(" -- Scopes: #{service_account_scopes}") if service_account_scopes
98
99
  env[:ui].info(" -- Service Account: #{service_account}") if service_account
100
+ env[:ui].info(" -- Additional Disks:#{additional_disks}")
99
101
 
100
102
  # Munge image config
101
103
  if image_family
@@ -127,7 +129,7 @@ module VagrantPlugins
127
129
 
128
130
  begin
129
131
  request_start_time = Time.now.to_i
130
-
132
+ disk = nil
131
133
  # Check if specified external ip is available
132
134
  external_ip = get_external_ip(env, external_ip) if external_ip
133
135
  # Check if disk type is available in the zone and set the proper resource link
@@ -161,6 +163,83 @@ module VagrantPlugins
161
163
  end
162
164
  end
163
165
 
166
+ # Add boot disk to the instance
167
+ disks = [disk.get_as_boot_disk(true, autodelete_disk)]
168
+
169
+ # Configure additional disks
170
+ additional_disks.each_with_index do |disk_config, index|
171
+ additional_disk = nil
172
+
173
+ # Get additional disk image
174
+ # Create a blank disk if neither image nor additional_disk_image is provided
175
+ additional_disk_image = nil
176
+ if disk_config[:image_family]
177
+ additional_disk_image = env[:google_compute].images.get_from_family(disk_config[:image_family], disk_config[:image_project_id]).self_link
178
+ elsif disk_config[:image]
179
+ additional_disk_image = env[:google_compute].images.get(disk_config[:image], disk_config[:image_project_id]).self_link
180
+ end
181
+
182
+ # Get additional disk size
183
+ additional_disk_size = nil
184
+ if disk_config[:disk_size].nil?
185
+ # Default disk size is 10 GB
186
+ additional_disk_size = 10
187
+ else
188
+ additional_disk_size = disk_config[:disk_size]
189
+ end
190
+
191
+ # Get additional disk type
192
+ additional_disk_type = nil
193
+ if disk_config[:disk_type].nil?
194
+ # Default disk type is pd-standard
195
+ additional_disk_type = get_disk_type(env, "pd-standard", zone)
196
+ else
197
+ additional_disk_type = get_disk_type(env, disk_config[:disk_type], zone)
198
+ end
199
+
200
+ # Get additional disk auto delete
201
+ additional_disk_auto_delete = nil
202
+ if disk_config[:disk_type].nil?
203
+ # Default auto delete to true
204
+ additional_disk_auto_delete = true
205
+ else
206
+ additional_disk_auto_delete = disk_config[:autodelete_disk]
207
+ end
208
+
209
+ # Get additional disk name
210
+ additional_disk_name = nil
211
+ if disk_config[:disk_name].nil?
212
+ # no disk_name... disk_name defaults to instance (name + "-additional-disk-#{index}"
213
+ additional_disk_name = name + "-additional-disk-#{index}"
214
+ additional_disk = env[:google_compute].disks.create(
215
+ name: additional_disk_name,
216
+ size_gb: additional_disk_size,
217
+ type: additional_disk_type,
218
+ zone_name: zone,
219
+ source_image: additional_disk_image
220
+ )
221
+ else
222
+ # additional_disk_name set in disk_config
223
+ additional_disk_name = disk_config[:disk_name]
224
+
225
+ additional_disk = env[:google_compute].disks.get(additional_disk_name, zone)
226
+ if additional_disk.nil?
227
+ # disk not found... create it with name
228
+ additional_disk = env[:google_compute].disks.create(
229
+ name: additional_disk_name,
230
+ size_gb: additional_disk_size,
231
+ type: additional_disk_type,
232
+ zone_name: zone,
233
+ source_image: additional_disk_image
234
+ )
235
+ additional_disk.wait_for { additional_disk.ready? }
236
+ end
237
+ end
238
+
239
+ # Add additional disk to the instance
240
+ disks.push(additional_disk.attached_disk_obj(boot:false, writable:true, auto_delete:additional_disk_auto_delete))
241
+ end
242
+
164
243
  defaults = {
165
244
  :name => name,
166
245
  :zone => zone,
@@ -175,7 +254,7 @@ module VagrantPlugins
175
254
  :can_ip_forward => can_ip_forward,
176
255
  :use_private_ip => use_private_ip,
177
256
  :external_ip => external_ip,
178
- :disks => [disk.get_as_boot_disk(true, autodelete_disk)],
257
+ :disks => disks,
179
258
  :scheduling => scheduling,
180
259
  :service_accounts => service_accounts
181
260
  }
@@ -185,7 +264,9 @@ module VagrantPlugins
185
264
  # TODO: Cleanup the Fog catch-all once Fog implements better exceptions
186
265
  # There is a chance Google has failed to create an instance, so we need
187
266
  # to clean up the created disk.
188
- cleanup_disk(disk.name, env) if disk && disk_created_by_vagrant
267
+ disks.each do |disk|
268
+ cleanup_disk(disk.name, env) if disk && disk_created_by_vagrant
269
+ end
189
270
  raise Errors::FogError, :message => e.message
190
271
  end
191
272
 
@@ -173,6 +173,11 @@ module VagrantPlugins
173
173
  # @return [String]
174
174
  attr_accessor :service_account
175
175
 
176
+ # The configuration for additional disks.
177
+ #
178
+ # @return [Array<Hash>]
179
+ attr_accessor :additional_disks
180
+
176
181
  def initialize(zone_specific=false)
177
182
  @google_client_email = UNSET_VALUE
178
183
  @google_json_key_location = UNSET_VALUE
@@ -204,6 +209,7 @@ module VagrantPlugins
204
209
  @scopes = UNSET_VALUE
205
210
  @service_accounts = UNSET_VALUE
206
211
  @service_account = UNSET_VALUE
212
+ @additional_disks = []
207
213
 
208
214
  # Internal state (prefix with __ so they aren't automatically
209
215
  # merged)
@@ -13,6 +13,6 @@
13
13
  # limitations under the License.
14
14
  module VagrantPlugins
15
15
  module Google
16
- VERSION = "2.2.1".freeze
16
+ VERSION = "2.3.0.rc0".freeze
17
17
  end
18
18
  end
data/test/unit/base.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "rubygems"
2
+ require "rspec/its"
2
3
 
3
4
  # Set vagrant env to avoid "Encoded files can't be read" error.
4
5
  ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"] = File.expand_path("../../../", __FILE__)
@@ -46,6 +46,7 @@ describe VagrantPlugins::Google::Config do
46
46
  its("tags") { should == [] }
47
47
  its("labels") { should == {} }
48
48
  its("scopes") { should == nil }
49
+ its("additional_disks") { should == [] }
49
50
  its("preemptible") { should be_falsey }
50
51
  its("auto_restart") { should }
51
52
  its("on_host_maintenance") { should == "MIGRATE" }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-google
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1
4
+ version: 2.3.0.rc0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Johnson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-10-06 00:00:00.000000000 Z
12
+ date: 2019-02-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog-google