vagrant-google 2.0.0 → 2.1.0

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: eccf43d878209202f6e3c5c56fca1fce2da40bc8
4
- data.tar.gz: 92c625b9931482ea306e9db65d35e88d108f458f
3
+ metadata.gz: 24b64b7282bcf810918299b7b74856bd1f75e35b
4
+ data.tar.gz: 422a89d6c2209132a5bedc7a7e2310d9145e5eae
5
5
  SHA512:
6
- metadata.gz: b369b1c094d213e24428179e9e2c759167155361e5e65d3175c36081a18b379e6ea24017cd8ac69c4db91eaa1b6107f867a0b3428f80ddda231b5abf6acd946b
7
- data.tar.gz: aff1bed584d17c22576a36fda3d2e53d0d9eb7f95506ce474df24d75679aa364815cd1c8369daa3411980186dcced74701bf4755f2d220f784730790f3d934db
6
+ metadata.gz: 1ee8f0aab047c1c96ec6bc7552aa1ee9797381bd7e53f9eba5c17ddd07585c4182a8c7bf47df22d5f4364ee45dce57c6004b8350c2d975da705b1de305a803c4
7
+ data.tar.gz: 85d96c3e2dac6f08a4dc80995165699cd2864c967c0afcdac464ee35248c052e0b7361bd20745b14495ee8406271b5f4d2a5ab0775af7d447d3264be1aa6e311
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 2.1.0 (May 2018)
2
+
3
+ * Add new configuration option `image_project_id` to allow using GCE images from other projects. [seanmalloy]
4
+ * Add new configuration option `network_project_id` to allow using GCP Shared VPC networks. [seanmalloy]
5
+ * Add new configuration option `service_account` to allow setting the IAM service account on instances. [seanmalloy]
6
+ * Deprecate configuration option `service_accounts`. Use `scopes` configuration option instead. [seanmalloy]
7
+
1
8
  # 2.0.0 (March 2018)
2
9
 
3
10
  * Update to use fog-google gem v1
data/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [gem]: https://rubygems.org/gems/vagrant-google
8
8
  [gemnasium]: https://gemnasium.com/mitchellh/vagrant-google
9
9
 
10
- This is a [Vagrant](http://www.vagrantup.com) 1.2+ plugin that adds an
10
+ This is a [Vagrant](http://www.vagrantup.com) 2.0.3+ plugin that adds an
11
11
  [Google Compute Engine](http://cloud.google.com/compute/) (GCE) provider to
12
12
  Vagrant, allowing Vagrant to control and provision instances in GCE.
13
13
 
@@ -178,6 +178,7 @@ This provider exposes quite a few provider-specific configuration options:
178
178
  * `image_family` - Specify an "image family" to pull the latest image from. For example: `centos-7`
179
179
  will pull the most recent CentOS 7 image. For more info, refer to
180
180
  [Google Image documentation](https://cloud.google.com/compute/docs/images#image_families).
181
+ * `image_project_id` - The ID of the GCP project to search for the `image` or `image_family`.
181
182
  * `instance_group` - Unmanaged instance group to add the machine to. If one
182
183
  doesn't exist it will be created.
183
184
  * `instance_ready_timeout` - The number of seconds to wait for the instance
@@ -192,6 +193,7 @@ will pull the most recent CentOS 7 image. For more info, refer to
192
193
  e.g. 10/08/2015 13:15:15 is "i-2015081013-15637fda".
193
194
  * `network` - The name of the network to use for the instance. Default is
194
195
  "default".
196
+ * `network_project_id` - The ID of the GCP project for the network and subnetwork to use for the instance. Default is `google_project_id`.
195
197
  * `subnetwork` - The name of the subnetwork to use for the instance.
196
198
  * `tags` - An array of tags to apply to this instance.
197
199
  * `labels` - Custom key/value pairs of labels to add to the instance.
@@ -202,11 +204,12 @@ will pull the most recent CentOS 7 image. For more info, refer to
202
204
  * `preemptible` - Boolean whether to enable preemptibility. Default is false.
203
205
  * `auto_restart` - Boolean whether to enable auto_restart. Default is true.
204
206
  * `on_host_maintenance` - What to do on host maintenance. Can be set to `MIGRATE` or `TERMINATE` Default is `MIGRATE`.
205
- * `service_accounts` or `scopes` - An array of OAuth2 account scopes for
207
+ * `scopes` or `service_accounts` - An array of OAuth2 account scopes for
206
208
  services that the instance will have access to. Those can be both full API
207
209
  scopes, just endpoint aliases (the part after `...auth/`), and `gcloud`
208
210
  utility aliases, for example:
209
211
  `['storage-full', 'bigquery', 'https://www.googleapis.com/auth/compute']`.
212
+ * `service_account` - The IAM service account email to use for the instance.
210
213
 
211
214
  These can be set like typical provider-specific configuration:
212
215
 
@@ -41,29 +41,32 @@ module VagrantPlugins
41
41
  zone = env[:machine].provider_config.zone
42
42
 
43
43
  # Get the configs
44
- zone_config = env[:machine].provider_config.get_zone_config(zone)
45
- image = zone_config.image
46
- image_family = zone_config.image_family
47
- instance_group = zone_config.instance_group
48
- name = zone_config.name
49
- machine_type = zone_config.machine_type
50
- disk_size = zone_config.disk_size
51
- disk_name = zone_config.disk_name
52
- disk_type = zone_config.disk_type
53
- network = zone_config.network
54
- subnetwork = zone_config.subnetwork
55
- metadata = zone_config.metadata
56
- labels = zone_config.labels
57
- tags = zone_config.tags
58
- can_ip_forward = zone_config.can_ip_forward
59
- use_private_ip = zone_config.use_private_ip
60
- external_ip = zone_config.external_ip
61
- preemptible = zone_config.preemptible
62
- auto_restart = zone_config.auto_restart
63
- on_host_maintenance = zone_config.on_host_maintenance
64
- autodelete_disk = zone_config.autodelete_disk
65
- service_accounts = zone_config.service_accounts
66
- project_id = zone_config.google_project_id
44
+ zone_config = env[:machine].provider_config.get_zone_config(zone)
45
+ image = zone_config.image
46
+ image_family = zone_config.image_family
47
+ image_project_id = zone_config.image_project_id
48
+ instance_group = zone_config.instance_group
49
+ name = zone_config.name
50
+ machine_type = zone_config.machine_type
51
+ disk_size = zone_config.disk_size
52
+ disk_name = zone_config.disk_name
53
+ disk_type = zone_config.disk_type
54
+ network = zone_config.network
55
+ network_project_id = zone_config.network_project_id
56
+ subnetwork = zone_config.subnetwork
57
+ metadata = zone_config.metadata
58
+ labels = zone_config.labels
59
+ tags = zone_config.tags
60
+ can_ip_forward = zone_config.can_ip_forward
61
+ use_private_ip = zone_config.use_private_ip
62
+ external_ip = zone_config.external_ip
63
+ preemptible = zone_config.preemptible
64
+ auto_restart = zone_config.auto_restart
65
+ on_host_maintenance = zone_config.on_host_maintenance
66
+ autodelete_disk = zone_config.autodelete_disk
67
+ service_account_scopes = zone_config.scopes
68
+ service_account = zone_config.service_account
69
+ project_id = zone_config.google_project_id
67
70
 
68
71
  # Launch!
69
72
  env[:ui].info(I18n.t("vagrant_google.launching_instance"))
@@ -75,9 +78,11 @@ module VagrantPlugins
75
78
  env[:ui].info(" -- Disk name: #{disk_name}")
76
79
  env[:ui].info(" -- Image: #{image}")
77
80
  env[:ui].info(" -- Image family: #{image_family}")
81
+ env[:ui].info(" -- Image Project: #{image_project_id}") if image_project_id
78
82
  env[:ui].info(" -- Instance Group: #{instance_group}")
79
83
  env[:ui].info(" -- Zone: #{zone}") if zone
80
84
  env[:ui].info(" -- Network: #{network}") if network
85
+ env[:ui].info(" -- Network Project: #{network_project_id}") if network_project_id
81
86
  env[:ui].info(" -- Subnetwork: #{subnetwork}") if subnetwork
82
87
  env[:ui].info(" -- Metadata: '#{metadata}'")
83
88
  env[:ui].info(" -- Labels: '#{labels}'")
@@ -89,20 +94,21 @@ module VagrantPlugins
89
94
  env[:ui].info(" -- Auto Restart: #{auto_restart}")
90
95
  env[:ui].info(" -- On Maintenance: #{on_host_maintenance}")
91
96
  env[:ui].info(" -- Autodelete Disk: #{autodelete_disk}")
92
- env[:ui].info(" -- Scopes: #{service_accounts}")
97
+ env[:ui].info(" -- Scopes: #{service_account_scopes}") if service_account_scopes
98
+ env[:ui].info(" -- Service Account: #{service_account}") if service_account
93
99
 
94
100
  # Munge image configs
95
- image = env[:google_compute].images.get(image).self_link
101
+ image = env[:google_compute].images.get(image, image_project_id).self_link
96
102
 
97
103
  # If image_family is set, get the latest image image from the family.
98
104
  unless image_family.nil?
99
- image = env[:google_compute].images.get_from_family(image_family).self_link
105
+ image = env[:google_compute].images.get_from_family(image_family, image_project_id).self_link
100
106
  end
101
107
 
102
108
  # Munge network configs
103
109
  if network != 'default'
104
- network = "projects/#{project_id}/global/networks/#{network}"
105
- subnetwork = "projects/#{project_id}/regions/#{zone.split('-')[0..1].join('-')}/subnetworks/#{subnetwork}"
110
+ network = "projects/#{network_project_id}/global/networks/#{network}"
111
+ subnetwork = "projects/#{network_project_id}/regions/#{zone.split('-')[0..1].join('-')}/subnetworks/#{subnetwork}"
106
112
  else
107
113
  network = "global/networks/default"
108
114
  end
@@ -118,7 +124,7 @@ module VagrantPlugins
118
124
  scheduling = { :automatic_restart => auto_restart, :on_host_maintenance => on_host_maintenance, :preemptible => preemptible}
119
125
 
120
126
  # Munge service_accounts / scopes config
121
- service_accounts = [ { :scopes => service_accounts } ]
127
+ service_accounts = [ { :email => service_account, :scopes => service_account_scopes } ]
122
128
 
123
129
  begin
124
130
  request_start_time = Time.now.to_i
@@ -42,6 +42,11 @@ module VagrantPlugins
42
42
  # @return [String]
43
43
  attr_accessor :image_family
44
44
 
45
+ # The name of the image_project_id
46
+ #
47
+ # @return [String]
48
+ attr_accessor :image_project_id
49
+
45
50
  # The instance group name to put the instance in.
46
51
  #
47
52
  # @return [String]
@@ -82,6 +87,11 @@ module VagrantPlugins
82
87
  # @return [String]
83
88
  attr_accessor :network
84
89
 
90
+ # The name of the network_project_id
91
+ #
92
+ # @return [String]
93
+ attr_accessor :network_project_id
94
+
85
95
  # The name of the subnetwork
86
96
  #
87
97
  # @return [String]
@@ -148,12 +158,20 @@ module VagrantPlugins
148
158
  # @return [String]
149
159
  attr_accessor :zone
150
160
 
151
- # The list of access controls for service accounts.
161
+ # The list of access scopes for instance.
162
+ #
163
+ # @return [Array]
164
+ attr_accessor :scopes
165
+
166
+ # Deprecated: the list of access scopes for instance.
152
167
  #
153
168
  # @return [Array]
154
169
  attr_accessor :service_accounts
155
- alias scopes service_accounts
156
- alias scopes= service_accounts=
170
+
171
+ # IAM service account for instance.
172
+ #
173
+ # @return [String]
174
+ attr_accessor :service_account
157
175
 
158
176
  def initialize(zone_specific=false)
159
177
  @google_client_email = UNSET_VALUE
@@ -161,6 +179,7 @@ module VagrantPlugins
161
179
  @google_project_id = UNSET_VALUE
162
180
  @image = UNSET_VALUE
163
181
  @image_family = UNSET_VALUE
182
+ @image_project_id = UNSET_VALUE
164
183
  @instance_group = UNSET_VALUE
165
184
  @machine_type = UNSET_VALUE
166
185
  @disk_size = UNSET_VALUE
@@ -169,6 +188,7 @@ module VagrantPlugins
169
188
  @metadata = {}
170
189
  @name = UNSET_VALUE
171
190
  @network = UNSET_VALUE
191
+ @network_project_id = UNSET_VALUE
172
192
  @subnetwork = UNSET_VALUE
173
193
  @tags = []
174
194
  @labels = {}
@@ -181,7 +201,9 @@ module VagrantPlugins
181
201
  @on_host_maintenance = UNSET_VALUE
182
202
  @instance_ready_timeout = UNSET_VALUE
183
203
  @zone = UNSET_VALUE
204
+ @scopes = UNSET_VALUE
184
205
  @service_accounts = UNSET_VALUE
206
+ @service_account = UNSET_VALUE
185
207
 
186
208
  # Internal state (prefix with __ so they aren't automatically
187
209
  # merged)
@@ -265,6 +287,9 @@ module VagrantPlugins
265
287
  # Default image family is nil
266
288
  @image_family = nil if @image_family == UNSET_VALUE
267
289
 
290
+ # Default image project is nil
291
+ @image_project_id = nil if @image_project_id == UNSET_VALUE
292
+
268
293
  # Default instance group name is nil
269
294
  @instance_group = nil if @instance_group == UNSET_VALUE
270
295
 
@@ -289,6 +314,9 @@ module VagrantPlugins
289
314
  # Network defaults to 'default'
290
315
  @network = "default" if @network == UNSET_VALUE
291
316
 
317
+ # Network project id defaults to project_id
318
+ @network_project_id = @google_project_id if @network_project_id == UNSET_VALUE
319
+
292
320
  # Subnetwork defaults to nil
293
321
  @subnetwork = nil if @subnetwork == UNSET_VALUE
294
322
 
@@ -319,9 +347,20 @@ module VagrantPlugins
319
347
  # Default instance_ready_timeout
320
348
  @instance_ready_timeout = 20 if @instance_ready_timeout == UNSET_VALUE
321
349
 
322
- # Default service_accounts
350
+ # Default access scopes
351
+ @scopes = nil if @scopes == UNSET_VALUE
352
+
353
+ # Default access scopes
323
354
  @service_accounts = nil if @service_accounts == UNSET_VALUE
324
355
 
356
+ # Default IAM service account
357
+ @service_account = nil if @service_account == UNSET_VALUE
358
+
359
+ # Config option service_accounts is deprecated
360
+ if @service_accounts
361
+ @scopes = @service_accounts
362
+ end
363
+
325
364
  # Compile our zone specific configurations only within
326
365
  # NON-zone-SPECIFIC configurations.
327
366
  unless @__zone_specific
@@ -382,6 +421,10 @@ module VagrantPlugins
382
421
  errors << I18n.t("vagrant_google.config.image_required") if config.image.nil? && config.image_family.nil?
383
422
  errors << I18n.t("vagrant_google.config.name_required") if @name.nil?
384
423
 
424
+ if @service_accounts
425
+ machine.env.ui.warn(I18n.t("vagrant_google.config.service_accounts_deprecaated"))
426
+ end
427
+
385
428
  { "Google Provider" => errors }
386
429
  end
387
430
 
@@ -13,6 +13,6 @@
13
13
  # limitations under the License.
14
14
  module VagrantPlugins
15
15
  module Google
16
- VERSION = "2.0.0".freeze
16
+ VERSION = "2.1.0".freeze
17
17
  end
18
18
  end
data/locales/en.yml CHANGED
@@ -75,6 +75,8 @@ en:
75
75
  instances.
76
76
  image_and_image_family_set: |-
77
77
  "image" must be unset when setting "image_family"
78
+ service_accounts_deprecaated: |-
79
+ "service_accounts is deprecated. Please use scopes instead"
78
80
  #-------------------------------------------------------------------------------
79
81
  # Translations for exception classes
80
82
  #-------------------------------------------------------------------------------
@@ -67,6 +67,7 @@ namespace :acceptance do
67
67
  reload
68
68
  scopes
69
69
  instance_groups
70
+ image_family
70
71
  synced_folder/rsync
71
72
  provisioner/shell
72
73
  provisioner/chef-solo
@@ -0,0 +1,26 @@
1
+ # This tests that an instance referenced by image family can be started properly
2
+ shared_examples 'provider/image_family' do |provider, options|
3
+ unless options[:box]
4
+ raise ArgumentError,
5
+ "box option must be specified for provider: #{provider}"
6
+ end
7
+
8
+ include_context 'acceptance'
9
+
10
+ before do
11
+ environment.skeleton('image_family')
12
+ assert_execute('vagrant', 'box', 'add', 'basic', options[:box])
13
+ assert_execute('vagrant', 'up', "--provider=#{provider}")
14
+ end
15
+
16
+ after do
17
+ assert_execute('vagrant', 'destroy', '--force')
18
+ end
19
+
20
+ it 'should bring up machine with image_family option' do
21
+ status("Test: machine is running after up")
22
+ result = execute("vagrant", "ssh", "-c", "echo foo")
23
+ expect(result).to exit_with(0)
24
+ expect(result.stdout).to match(/foo\n$/)
25
+ end
26
+ end
@@ -1,6 +1,5 @@
1
1
  # This tests that account scopes can be configured correctly
2
- # Additionally, this verifies that the 'scopes' method alias is
3
- # available and gcloud GCE aliases can be used.
2
+ # and that gcloud GCE aliases can be used.
4
3
  # (see lib/fog/google/models/compute/server.rb in fog-google)
5
4
  shared_examples 'provider/scopes' do |provider, options|
6
5
  unless options[:box]
@@ -0,0 +1,14 @@
1
+ Vagrant.configure("2") do |config|
2
+ config.vm.box = "basic"
3
+
4
+ config.vm.provider :google do |google|
5
+
6
+ google.zone = "australia-southeast1-b"
7
+
8
+ google.zone_config "australia-southeast1-b" do |zone|
9
+ zone.name = "vagrant-acceptance-preemptible-#{('a'..'z').to_a.sample(8).join}"
10
+ zone.disk_type = "pd-ssd"
11
+ zone.image_family = "centos-7"
12
+ end
13
+ end
14
+ end
@@ -32,6 +32,8 @@ describe VagrantPlugins::Google::Config do
32
32
 
33
33
  its("name") { should match "i-[0-9]{10}-[0-9a-f]{4}" }
34
34
  its("image") { should be_nil }
35
+ its("image_family") { should be_nil }
36
+ its("image_project_id") { should be_nil }
35
37
  its("instance_group") { should be_nil }
36
38
  its("zone") { should == "us-central1-f" }
37
39
  its("network") { should == "default" }
@@ -43,7 +45,7 @@ describe VagrantPlugins::Google::Config do
43
45
  its("metadata") { should == {} }
44
46
  its("tags") { should == [] }
45
47
  its("labels") { should == {} }
46
- its("service_accounts") { should == nil }
48
+ its("scopes") { should == nil }
47
49
  its("preemptible") { should be_falsey }
48
50
  its("auto_restart") { should }
49
51
  its("on_host_maintenance") { should == "MIGRATE" }
@@ -54,8 +56,8 @@ describe VagrantPlugins::Google::Config do
54
56
  # simple boilerplate test, so I cut corners here. It just sets
55
57
  # each of these attributes to "foo" in isolation, and reads the value
56
58
  # and asserts the proper result comes back out.
57
- [:name, :image, :zone, :instance_ready_timeout, :machine_type, :disk_size, :disk_name, :disk_type,
58
- :network, :metadata, :labels, :can_ip_forward, :external_ip, :autodelete_disk].each do |attribute|
59
+ [:name, :image, :image_family, :image_project_id, :zone, :instance_ready_timeout, :machine_type, :disk_size, :disk_name, :disk_type,
60
+ :network, :network_project_id, :metadata, :labels, :can_ip_forward, :external_ip, :autodelete_disk].each do |attribute|
59
61
 
60
62
  it "should not default #{attribute} if overridden" do
61
63
  instance.send("#{attribute}=".to_sym, "foo")
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.0.0
4
+ version: 2.1.0
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-03-28 00:00:00.000000000 Z
12
+ date: 2018-05-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog-google
@@ -196,6 +196,7 @@ files:
196
196
  - tasks/test.rake
197
197
  - test/acceptance/base.rb
198
198
  - test/acceptance/provider/halt_spec.rb
199
+ - test/acceptance/provider/image_family_spec.rb
199
200
  - test/acceptance/provider/instance_groups_spec.rb
200
201
  - test/acceptance/provider/multi_instance_spec.rb
201
202
  - test/acceptance/provider/preemptible_spec.rb
@@ -203,6 +204,7 @@ files:
203
204
  - test/acceptance/provider/scopes_spec.rb
204
205
  - test/acceptance/shared/context_google.rb
205
206
  - test/acceptance/skeletons/generic/Vagrantfile
207
+ - test/acceptance/skeletons/image_family/Vagrantfile
206
208
  - test/acceptance/skeletons/instance_groups/Vagrantfile
207
209
  - test/acceptance/skeletons/multi_instance/Vagrantfile
208
210
  - test/acceptance/skeletons/preemptible/Vagrantfile