vagrant-google 2.5.0 → 2.6.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
- SHA1:
3
- metadata.gz: ed6ee3d8610c741c80fb0a023922309c396ba06f
4
- data.tar.gz: e5110f3de87fad8d872150e38e371f560e65993c
2
+ SHA256:
3
+ metadata.gz: 22135d118cd7749f09bab503e584dce947d56ce3dbe1fe7d43624be1d8edd9bf
4
+ data.tar.gz: 4d4e3e45565c5a3ce26494ba5942000d404791a46045a990b866ebd401cb4d1a
5
5
  SHA512:
6
- metadata.gz: caa68543e38fa5432182179df747283e5182fd303edca1dae9f1c3581805182c4d46711d438a13c2d68e090774b10eae95e544ad181e9d29e793d448dcb8e17d
7
- data.tar.gz: 4c8e2dac09fa2c02ee3dba1f9cc9e74ca4c89488d85221e6d682ebb5044711f303c5031eff61c2e74506c2316d7bbfbbfebbe797758a78ba75ea9e6a3f36b94f
6
+ metadata.gz: ed1cb603bd11da1e6d402490e3a92cc683e2c1060a7982c2809b39fa86200ec62a5921791df6c954e45482918b84531d4df8437c3da368b99df717ac2dfac03f
7
+ data.tar.gz: fbe0d8f7cb29a6d386cb7d501c3057acf426f390c93146c6acfe23274cc83a422c44a09bf1119c8295f0b92547e79d2e9477cca3e0a9aab1ba3543aa093bbb15
@@ -1,5 +1,4 @@
1
- # Importing TODO list to sanely lint new submissions.
2
- inherit_from: .rubocop_todo.yml
1
+ require: rubocop-performance
3
2
 
4
3
  # Custom project config
5
4
  AllCops:
@@ -7,11 +6,20 @@ AllCops:
7
6
  - './Vagrantfile'
8
7
  - './vagrant-google.gemspec'
9
8
 
10
- Style/EmptyLinesAroundBlockBody:
9
+ Layout/EmptyLinesAroundBlockBody:
11
10
  Enabled: false
12
11
 
13
12
  Style/StringLiterals:
14
13
  Enabled: false
15
14
 
16
15
  Style/IfUnlessModifier:
17
- Enabled: false
16
+ Enabled: false
17
+
18
+ Metrics/LineLength:
19
+ Max: 120
20
+
21
+ Layout/HashAlignment:
22
+ EnforcedHashRocketStyle: table
23
+
24
+ Style/HashSyntax:
25
+ EnforcedStyle: no_mixed_keys
@@ -1,2 +1,2 @@
1
- 2.4.3
2
- # Tracking Vagrant 2.0.3
1
+ 2.6.6
2
+ # Tracking Vagrant 2.2.9
@@ -2,6 +2,34 @@
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
+ ## Next
6
+
7
+
8
+ ### User-facing
9
+
10
+ #### Added
11
+
12
+ - \#248 Add support for modifying the configuration of Shielded VM [lcy0321]
13
+ - \#244 Add accelerator (GPU) configuration [johanvdhaegen]
14
+ - \#216 Add support for Windows hosts through WinRM [dvanbrug]
15
+
16
+ #### Fixed
17
+
18
+ - \#246 Fix config override during metadata merge [mavin]
19
+ - \#249 Fix shielded API failures on non-shielded VM's [temikus]
20
+ - \#227 Fix additional disks being auto-deleted unless a disk type is specified [chrisgavin]
21
+
22
+ ### Development
23
+
24
+ #### Fixed
25
+
26
+ - \#247 chore: Update Gemfile with new `vagrant-spec` branch name [mavin]
27
+ - \#241 Fix unfortunate CI `on:` trigger typo [temikus]
28
+ - \#240 Update development environment, add CI functionality [Temikus]
29
+ - \#239 Remove old fixup in Gemfile [Temikus]
30
+ - \#237 Bump image size for test skeleton [Temikus]
31
+
32
+
5
33
  ## 2.5.0 (September 2019)
6
34
 
7
35
  ### User-facing
data/Gemfile CHANGED
@@ -24,8 +24,6 @@ group :development do
24
24
  # gem dependency because we expect to be installed within the
25
25
  # Vagrant environment itself using `vagrant plugin`.
26
26
 
27
- # TODO(temikus): remove to 2.2.4 tag lock when
28
- # https://github.com/hashicorp/vagrant/pull/10945 is resolved
29
- gem 'vagrant', git: "https://github.com/hashicorp/vagrant.git", :tag => 'v2.2.4'
30
- gem 'vagrant-spec', git: "https://github.com/hashicorp/vagrant-spec.git"
27
+ gem 'vagrant', git: "https://github.com/hashicorp/vagrant.git"
28
+ gem 'vagrant-spec', git: "https://github.com/hashicorp/vagrant-spec.git", branch: "main"
31
29
  end
data/README.md CHANGED
@@ -16,7 +16,7 @@ The maintainers for this plugin are @temikus(primary), @erjohnso(backup).
16
16
  * Boot Google Compute Engine instances.
17
17
  * SSH into the instances.
18
18
  * Provision the instances with any built-in Vagrant provisioner.
19
- * Synced folder support via Vagrant's
19
+ * Synced folder support via Vagrant's
20
20
  [rsync action](https://www.vagrantup.com/docs/synced-folders/rsync.html).
21
21
  * Define zone-specific configurations so Vagrant can manage machines in
22
22
  multiple zones.
@@ -73,8 +73,8 @@ Service Account for API Access.
73
73
  ## Quick Start
74
74
 
75
75
  After installing the plugin (instructions above), the quickest way to get
76
- started is to actually use a dummy Google box from Atlas and specify all the
77
- details manually within a `config.vm.provider` block.
76
+ started is to actually use a dummy Google box from Atlas and specify all the
77
+ details manually within a `config.vm.provider` block.
78
78
 
79
79
  So first, make a Vagrantfile that looks like the following, filling in
80
80
  your information where necessary:
@@ -86,9 +86,9 @@ Vagrant.configure("2") do |config|
86
86
  config.vm.provider :google do |google, override|
87
87
  google.google_project_id = "YOUR_GOOGLE_CLOUD_PROJECT_ID"
88
88
  google.google_json_key_location = "/path/to/your/private-key.json"
89
-
89
+
90
90
  google.image_family = 'ubuntu-1604-lts'
91
-
91
+
92
92
  override.ssh.username = "USERNAME"
93
93
  override.ssh.private_key_path = "~/.ssh/id_rsa"
94
94
  #override.ssh.private_key_path = "~/.ssh/google_compute_engine"
@@ -99,10 +99,10 @@ end
99
99
 
100
100
  And then run `vagrant up --provider=google`.
101
101
 
102
- This will start a latest version of Ubuntu 16.04 LTS instance in the
103
- `us-central1-f` zone, with an `n1-standard-1` machine, and the `"default"`
104
- network within your project. And assuming your SSH information (see below) was
105
- filled in properly within your Vagrantfile, SSH and provisioning will work as
102
+ This will start a latest version of Ubuntu 16.04 LTS instance in the
103
+ `us-central1-f` zone, with an `n1-standard-1` machine, and the `"default"`
104
+ network within your project. And assuming your SSH information (see below) was
105
+ filled in properly within your Vagrantfile, SSH and provisioning will work as
106
106
  well.
107
107
 
108
108
  Note that normally a lot of this boilerplate is encoded within the box file,
@@ -165,13 +165,13 @@ configuration for this provider.
165
165
  This provider exposes quite a few provider-specific configuration options:
166
166
 
167
167
  * `google_json_key_location` - The location of the JSON private key file matching your
168
- Service Account.
168
+ Service Account.
169
169
  (Can also be configured with `GOOGLE_JSON_KEY_LOCATION` environment variable.)
170
- * `google_project_id` - The Project ID for your Google Cloud Platform account.
170
+ * `google_project_id` - The Project ID for your Google Cloud Platform account.
171
171
  (Can also be configured with `GOOGLE_PROJECT_ID` environment variable.)
172
172
  * `image` - The image name to use when booting your instance.
173
- * `image_family` - Specify an "image family" to pull the latest image from. For example: `centos-7`
174
- will pull the most recent CentOS 7 image. For more info, refer to
173
+ * `image_family` - Specify an "image family" to pull the latest image from. For example: `centos-7`
174
+ will pull the most recent CentOS 7 image. For more info, refer to
175
175
  [Google Image documentation](https://cloud.google.com/compute/docs/images#image_families).
176
176
  * `image_project_id` - The ID of the GCP project to search for the `image` or `image_family`.
177
177
  * `instance_group` - Unmanaged instance group to add the machine to. If one
@@ -206,20 +206,36 @@ will pull the most recent CentOS 7 image. For more info, refer to
206
206
  utility aliases, for example:
207
207
  `['storage-full', 'bigquery', 'https://www.googleapis.com/auth/compute']`.
208
208
  * `service_account` - The IAM service account email to use for the instance.
209
- * `additional_disks` - An array of additional disk configurations. `disk_size` is default to `10`GB;
210
- `disk_name` is default to `name` + "-additional-disk-#{index}"; `disk_type` is default to `pd-standard`;
209
+ * `additional_disks` - An array of additional disk configurations. `disk_size` is default to `10`GB;
210
+ `disk_name` is default to `name` + "-additional-disk-#{index}"; `disk_type` is default to `pd-standard`;
211
211
  `autodelete_disk` is default to `true`. Here is an example of configuration.
212
- ```ruby
213
- [{
214
- :image_family => "google-image-family",
215
- :image => nil,
216
- :image_project_id => "google-project-id",
217
- :disk_size => 20,
218
- :disk_name => "google-additional-disk-0",
219
- :disk_type => "pd-standard",
220
- :autodelete_disk => true
212
+ ```ruby
213
+ [{
214
+ :image_family => "google-image-family",
215
+ :image => nil,
216
+ :image_project_id => "google-project-id",
217
+ :disk_size => 20,
218
+ :disk_name => "google-additional-disk-0",
219
+ :disk_type => "pd-standard",
220
+ :autodelete_disk => true
221
+ }]
222
+ ```
223
+ * `accelerators` - An array of accelerator configurations. `type` is the
224
+ accelerator type (e.g. `nvidia-tesla-k80`); `count` is the number of
225
+ accelerators and defaults to 1. Note that only `TERMINATE` is supported for
226
+ `on_host_maintenance`; this should be set explicitly, since the default is
227
+ `MIGRATE`.
228
+ ```ruby
229
+ google.accelerators = [{
230
+ :type => "nvidia-tesla-k80",
231
+ :count => 2
221
232
  }]
222
- ```
233
+
234
+ google.on_host_maintenance = "TERMINATE"
235
+ ```
236
+ * `enable_secure_boot` - For [Shielded VM](https://cloud.google.com/security/shielded-cloud/shielded-vm), whether to enable Secure Boot.
237
+ * `enable_vtpm` - For [Shielded VM](https://cloud.google.com/security/shielded-cloud/shielded-vm), whether to enable vTPM.
238
+ * `enable_integrity_monitoring` - For [Shielded VM](https://cloud.google.com/security/shielded-cloud/shielded-vm), whether to enable Integrity monitoring.
223
239
 
224
240
  These can be set like typical provider-specific configuration:
225
241
 
@@ -280,7 +296,7 @@ emit a warning, but will otherwise boot the GCE machine.
280
296
  ## Synced Folders
281
297
 
282
298
  Since plugin version 2.0, this is implemented via built-in `SyncedFolders` action.
283
- See Vagrant's [rsync action](https://www.vagrantup.com/docs/synced-folders/rsync.html)
299
+ See Vagrant's [rsync action](https://www.vagrantup.com/docs/synced-folders/rsync.html)
284
300
  documentation for more info.
285
301
 
286
302
  ## Development
@@ -82,6 +82,15 @@ module VagrantPlugins
82
82
  end
83
83
  end
84
84
 
85
+ # This action is called to setup the Windows user/password on the machine.
86
+ def self.action_setup_winrm_password
87
+ Vagrant::Action::Builder.new.tap do |b|
88
+ b.use ConfigValidate
89
+ b.use ConnectGoogle
90
+ b.use SetupWinrmPassword
91
+ end
92
+ end
93
+
85
94
  # This action is called to read the state of the machine. The
86
95
  # resulting state is expected to be put into the `:machine_state_id`
87
96
  # key.
@@ -182,6 +191,7 @@ module VagrantPlugins
182
191
  autoload :MessageNotCreated, action_root.join("message_not_created")
183
192
  autoload :MessageWillNotDestroy, action_root.join("message_will_not_destroy")
184
193
  autoload :ReadSSHInfo, action_root.join("read_ssh_info")
194
+ autoload :SetupWinrmPassword, action_root.join('setup_winrm_password')
185
195
  autoload :ReadState, action_root.join("read_state")
186
196
  autoload :RunInstance, action_root.join("run_instance")
187
197
  autoload :StartInstance, action_root.join("start_instance")
@@ -14,6 +14,7 @@
14
14
  require "log4r"
15
15
  require 'vagrant/util/retryable'
16
16
  require 'vagrant-google/util/timer'
17
+ require 'vagrant-google/action/setup_winrm_password'
17
18
 
18
19
  module VagrantPlugins
19
20
  module Google
@@ -41,65 +42,73 @@ module VagrantPlugins
41
42
  zone = env[:machine].provider_config.zone
42
43
 
43
44
  # 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
- 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
- network_ip = zone_config.network_ip
64
- preemptible = zone_config.preemptible
65
- auto_restart = zone_config.auto_restart
66
- on_host_maintenance = zone_config.on_host_maintenance
67
- autodelete_disk = zone_config.autodelete_disk
68
- service_account_scopes = zone_config.scopes
69
- service_account = zone_config.service_account
70
- project_id = zone_config.google_project_id
71
- additional_disks = zone_config.additional_disks
45
+ zone_config = env[:machine].provider_config.get_zone_config(zone)
46
+ image = zone_config.image
47
+ image_family = zone_config.image_family
48
+ image_project_id = zone_config.image_project_id
49
+ instance_group = zone_config.instance_group
50
+ name = zone_config.name
51
+ machine_type = zone_config.machine_type
52
+ disk_size = zone_config.disk_size
53
+ disk_name = zone_config.disk_name
54
+ disk_type = zone_config.disk_type
55
+ network = zone_config.network
56
+ network_project_id = zone_config.network_project_id
57
+ subnetwork = zone_config.subnetwork
58
+ metadata = zone_config.metadata
59
+ labels = zone_config.labels
60
+ tags = zone_config.tags
61
+ can_ip_forward = zone_config.can_ip_forward
62
+ use_private_ip = zone_config.use_private_ip
63
+ external_ip = zone_config.external_ip
64
+ network_ip = zone_config.network_ip
65
+ preemptible = zone_config.preemptible
66
+ auto_restart = zone_config.auto_restart
67
+ on_host_maintenance = zone_config.on_host_maintenance
68
+ autodelete_disk = zone_config.autodelete_disk
69
+ service_account_scopes = zone_config.scopes
70
+ service_account = zone_config.service_account
71
+ project_id = zone_config.google_project_id
72
+ additional_disks = zone_config.additional_disks
73
+ accelerators = zone_config.accelerators
74
+ enable_secure_boot = zone_config.enable_secure_boot
75
+ enable_vtpm = zone_config.enable_vtpm
76
+ enable_integrity_monitoring = zone_config.enable_integrity_monitoring
72
77
 
73
78
  # Launch!
74
79
  env[:ui].info(I18n.t("vagrant_google.launching_instance"))
75
- env[:ui].info(" -- Name: #{name}")
76
- env[:ui].info(" -- Project: #{project_id}")
77
- env[:ui].info(" -- Type: #{machine_type}")
78
- env[:ui].info(" -- Disk type: #{disk_type}")
79
- env[:ui].info(" -- Disk size: #{disk_size} GB")
80
- env[:ui].info(" -- Disk name: #{disk_name}")
81
- env[:ui].info(" -- Image: #{image}")
82
- env[:ui].info(" -- Image family: #{image_family}")
83
- env[:ui].info(" -- Image Project: #{image_project_id}") if image_project_id
84
- env[:ui].info(" -- Instance Group: #{instance_group}")
85
- env[:ui].info(" -- Zone: #{zone}") if zone
86
- env[:ui].info(" -- Network: #{network}") if network
87
- env[:ui].info(" -- Network Project: #{network_project_id}") if network_project_id
88
- env[:ui].info(" -- Subnetwork: #{subnetwork}") if subnetwork
89
- env[:ui].info(" -- Metadata: '#{metadata}'")
90
- env[:ui].info(" -- Labels: '#{labels}'")
91
- env[:ui].info(" -- Network tags: '#{tags}'")
92
- env[:ui].info(" -- IP Forward: #{can_ip_forward}")
93
- env[:ui].info(" -- Use private IP: #{use_private_ip}")
94
- env[:ui].info(" -- External IP: #{external_ip}")
95
- env[:ui].info(" -- Network IP: #{network_ip}")
96
- env[:ui].info(" -- Preemptible: #{preemptible}")
97
- env[:ui].info(" -- Auto Restart: #{auto_restart}")
98
- env[:ui].info(" -- On Maintenance: #{on_host_maintenance}")
99
- env[:ui].info(" -- Autodelete Disk: #{autodelete_disk}")
100
- env[:ui].info(" -- Scopes: #{service_account_scopes}") if service_account_scopes
101
- env[:ui].info(" -- Service Account: #{service_account}") if service_account
102
- env[:ui].info(" -- Additional Disks:#{additional_disks}")
80
+ env[:ui].info(" -- Name: #{name}")
81
+ env[:ui].info(" -- Project: #{project_id}")
82
+ env[:ui].info(" -- Type: #{machine_type}")
83
+ env[:ui].info(" -- Disk type: #{disk_type}")
84
+ env[:ui].info(" -- Disk size: #{disk_size} GB")
85
+ env[:ui].info(" -- Disk name: #{disk_name}")
86
+ env[:ui].info(" -- Image: #{image}")
87
+ env[:ui].info(" -- Image family: #{image_family}")
88
+ env[:ui].info(" -- Image Project: #{image_project_id}") if image_project_id
89
+ env[:ui].info(" -- Instance Group: #{instance_group}")
90
+ env[:ui].info(" -- Zone: #{zone}") if zone
91
+ env[:ui].info(" -- Network: #{network}") if network
92
+ env[:ui].info(" -- Network Project: #{network_project_id}") if network_project_id
93
+ env[:ui].info(" -- Subnetwork: #{subnetwork}") if subnetwork
94
+ env[:ui].info(" -- Metadata: '#{metadata}'")
95
+ env[:ui].info(" -- Labels: '#{labels}'")
96
+ env[:ui].info(" -- Network tags: '#{tags}'")
97
+ env[:ui].info(" -- IP Forward: #{can_ip_forward}")
98
+ env[:ui].info(" -- Use private IP: #{use_private_ip}")
99
+ env[:ui].info(" -- External IP: #{external_ip}")
100
+ env[:ui].info(" -- Network IP: #{network_ip}")
101
+ env[:ui].info(" -- Preemptible: #{preemptible}")
102
+ env[:ui].info(" -- Auto Restart: #{auto_restart}")
103
+ env[:ui].info(" -- On Maintenance: #{on_host_maintenance}")
104
+ env[:ui].info(" -- Autodelete Disk: #{autodelete_disk}")
105
+ env[:ui].info(" -- Scopes: #{service_account_scopes}") if service_account_scopes
106
+ env[:ui].info(" -- Service Account: #{service_account}") if service_account
107
+ env[:ui].info(" -- Additional Disks: #{additional_disks}")
108
+ env[:ui].info(" -- Accelerators: #{accelerators}")
109
+ env[:ui].info(" -- Secure Boot: #{enable_secure_boot}") if enable_secure_boot
110
+ env[:ui].info(" -- vTPM: #{enable_vtpm}") if enable_vtpm
111
+ env[:ui].info(" -- Integrity Monitoring: #{enable_integrity_monitoring}") if enable_integrity_monitoring
103
112
 
104
113
  # Munge image config
105
114
  if image_family
@@ -129,6 +138,21 @@ module VagrantPlugins
129
138
  # Munge service_accounts / scopes config
130
139
  service_accounts = [ { :email => service_account, :scopes => service_account_scopes } ]
131
140
 
141
+ # Construct accelerator URLs
142
+ accelerators_url = []
143
+ accelerators.each do |accelerator|
144
+ unless accelerator.key?(:type)
145
+ next
146
+ end
147
+ accelerator_type = "https://compute.googleapis.com/compute/v1/projects/#{project_id}/zones/#{zone}/acceleratorTypes/#{accelerator[:type]}"
148
+ accelerator_count = accelerator.fetch(:count, 1)
149
+ accelerators_url.push({ :accelerator_type => accelerator_type,
150
+ :accelerator_count => accelerator_count })
151
+ end
152
+
153
+ # Munge shieldedInstance config
154
+ shielded_instance_config = { :enable_secure_boot => enable_secure_boot, :enable_vtpm => enable_vtpm, :enable_integrity_monitoring => enable_integrity_monitoring }
155
+
132
156
  begin
133
157
  request_start_time = Time.now.to_i
134
158
  disk = nil
@@ -201,7 +225,7 @@ module VagrantPlugins
201
225
 
202
226
  # Get additional disk auto delete
203
227
  additional_disk_auto_delete = nil
204
- if disk_config[:disk_type].nil?
228
+ if disk_config[:autodelete_disk].nil?
205
229
  # Default auto delete to true
206
230
  additional_disk_auto_delete = true
207
231
  else
@@ -243,24 +267,33 @@ module VagrantPlugins
243
267
  end
244
268
 
245
269
  defaults = {
246
- :name => name,
247
- :zone => zone,
248
- :machine_type => machine_type,
249
- :disk_size => disk_size,
250
- :disk_type => disk_type,
251
- :image => image,
252
- :network_interfaces => network_interfaces,
253
- :metadata => { :items => metadata.each.map { |k, v| {:key => k.to_s, :value => v.to_s} } },
254
- :labels => labels,
255
- :tags => { :items => tags },
256
- :can_ip_forward => can_ip_forward,
257
- :use_private_ip => use_private_ip,
258
- :external_ip => external_ip,
259
- :network_ip => network_ip,
260
- :disks => disks,
261
- :scheduling => scheduling,
262
- :service_accounts => service_accounts
270
+ :name => name,
271
+ :zone => zone,
272
+ :machine_type => machine_type,
273
+ :disk_size => disk_size,
274
+ :disk_type => disk_type,
275
+ :image => image,
276
+ :network_interfaces => network_interfaces,
277
+ :metadata => { :items => metadata.each.map { |k, v| { :key => k.to_s, :value => v.to_s } } },
278
+ :labels => labels,
279
+ :tags => { :items => tags },
280
+ :can_ip_forward => can_ip_forward,
281
+ :use_private_ip => use_private_ip,
282
+ :external_ip => external_ip,
283
+ :network_ip => network_ip,
284
+ :disks => disks,
285
+ :scheduling => scheduling,
286
+ :service_accounts => service_accounts,
287
+ :guest_accelerators => accelerators_url
263
288
  }
289
+
290
+ # XXX HACK - only add of the parameters are set in :shielded_instance_config we need to drop the field from
291
+ # the API call otherwise we'll error out with Google::Apis::ClientError
292
+ # TODO(temikus): Remove if the API changes, see internal GOOG ref: b/175063371
293
+ if shielded_instance_config.has_value?(true)
294
+ defaults[:shielded_instance_config] = shielded_instance_config
295
+ end
296
+
264
297
  server = env[:google_compute].servers.create(defaults)
265
298
  @logger.info("Machine '#{zone}:#{name}' created.")
266
299
  rescue *FOG_ERRORS => e
@@ -287,10 +320,26 @@ module VagrantPlugins
287
320
  env[:interrupted] = true
288
321
  end
289
322
 
323
+ # Parse out the image project in case it was not set
324
+ # and check if it is part of a public windows project
325
+ img_project = image.split("/")[6]
326
+ is_windows_image = img_project.eql?("windows-cloud") || img_project.eql?("windows-sql-cloud")
327
+
328
+ # Reset the password if a windows image unless flag overrides
329
+ setup_winrm_password = zone_config.setup_winrm_password
330
+ if setup_winrm_password.nil? && is_windows_image
331
+ setup_winrm_password = true
332
+ end
333
+
334
+ if setup_winrm_password
335
+ env[:ui].info("Setting up WinRM Password")
336
+ env[:action_runner].run(Action.action_setup_winrm_password, env)
337
+ end
338
+
290
339
  unless env[:terminated]
291
- env[:metrics]["instance_ssh_time"] = Util::Timer.time do
292
- # Wait for SSH to be ready.
293
- env[:ui].info(I18n.t("vagrant_google.waiting_for_ssh"))
340
+ env[:metrics]["instance_comm_time"] = Util::Timer.time do
341
+ # Wait for Comms to be ready.
342
+ env[:ui].info(I18n.t("vagrant_google.waiting_for_comm"))
294
343
  while true
295
344
  # If we're interrupted just back out
296
345
  break if env[:interrupted]
@@ -298,8 +347,8 @@ module VagrantPlugins
298
347
  sleep 2
299
348
  end
300
349
  end
301
- @logger.info("Time for SSH ready: #{env[:metrics]["instance_ssh_time"]}")
302
- env[:ui].info(I18n.t("vagrant_google.ready_ssh")) unless env[:interrupted]
350
+ @logger.info("Time for Comms ready: #{env[:metrics]["instance_comm_time"]}")
351
+ env[:ui].info(I18n.t("vagrant_google.ready_comm")) unless env[:interrupted]
303
352
  end
304
353
 
305
354
  # Terminate the instance if we were interrupted