vagrant-google 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -1
- data/.rubocop_todo.yml +34 -56
- data/README.md +18 -12
- data/lib/vagrant-google/action.rb +2 -0
- data/lib/vagrant-google/action/assign_instance_groups.rb +73 -0
- data/lib/vagrant-google/action/run_instance.rb +4 -2
- data/lib/vagrant-google/config.rb +13 -4
- data/lib/vagrant-google/version.rb +1 -1
- data/locales/en.yml +6 -0
- data/tasks/acceptance.rake +14 -4
- data/tasks/boxes.rake +20 -0
- data/test/acceptance/provider/instance_groups_spec.rb +30 -0
- data/test/acceptance/skeletons/generic/Vagrantfile +1 -1
- data/test/acceptance/skeletons/instance_groups/Vagrantfile +15 -0
- data/test/acceptance/skeletons/multi_instance/Vagrantfile +3 -3
- data/test/acceptance/skeletons/preemptible/Vagrantfile +2 -2
- data/test/acceptance/skeletons/scopes/Vagrantfile +2 -2
- data/test/unit/common/config_test.rb +1 -0
- data/vagrant-google.gemspec +1 -1
- data/vagrant-spec.config.rb +1 -1
- metadata +19 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f08596de9a161ed1f61216096b5f7692a1459d09
|
4
|
+
data.tar.gz: 1120e3b316b5d776499757f35fdf23997f4635a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59ad9e52c85be68a78cdfc65254a7a77e011907ce8bc10707eb4e2dfb083ffa1bbbd2c6af7c2ec0511a7af35aa37553d984a1af96eb19ba0807325a64a112cf7
|
7
|
+
data.tar.gz: 5ddf509702c160023f006fc0f8c47efff95aea216b49d9727c5cb258535cdb87114a0fe19d3fd37d354d63b6fc6d1399ffd94b544b956566261550ee6d3647d9
|
data/.rubocop.yml
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# Importing TODO list to sanely lint new submissions.
|
2
2
|
inherit_from: .rubocop_todo.yml
|
3
3
|
|
4
|
+
# Custom project config
|
4
5
|
AllCops:
|
5
6
|
Exclude:
|
6
7
|
- './Vagrantfile'
|
7
|
-
- './vagrant-google.gemspec'
|
8
|
+
- './vagrant-google.gemspec'
|
9
|
+
|
10
|
+
Style/EmptyLinesAroundBlockBody:
|
11
|
+
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2016-
|
3
|
+
# on 2016-03-25 19:11:49 +0100 using RuboCop version 0.38.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -17,28 +17,19 @@ Lint/NestedMethodDefinition:
|
|
17
17
|
Exclude:
|
18
18
|
- 'lib/vagrant-google/action/sync_folders.rb'
|
19
19
|
|
20
|
-
# Offense count: 3
|
21
|
-
Lint/ParenthesesAsGroupedExpression:
|
22
|
-
Exclude:
|
23
|
-
- 'tasks/acceptance.rake'
|
24
|
-
|
25
20
|
# Offense count: 1
|
26
21
|
Lint/RescueException:
|
27
22
|
Exclude:
|
28
23
|
- 'lib/vagrant-google/action/read_state.rb'
|
29
24
|
|
30
|
-
# Offense count:
|
25
|
+
# Offense count: 1
|
31
26
|
# Cop supports --auto-correct.
|
32
27
|
# Configuration parameters: IgnoreEmptyBlocks.
|
33
28
|
Lint/UnusedBlockArgument:
|
34
29
|
Exclude:
|
35
30
|
- 'lib/vagrant-google/action/sync_folders.rb'
|
36
|
-
- 'test/acceptance/skeletons/generic/Vagrantfile'
|
37
|
-
- 'test/acceptance/skeletons/multi_instance/Vagrantfile'
|
38
|
-
- 'test/acceptance/skeletons/preemptible/Vagrantfile'
|
39
|
-
- 'test/acceptance/skeletons/scopes/Vagrantfile'
|
40
31
|
|
41
|
-
# Offense count:
|
32
|
+
# Offense count: 17
|
42
33
|
# Cop supports --auto-correct.
|
43
34
|
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
|
44
35
|
Lint/UnusedMethodArgument:
|
@@ -51,30 +42,26 @@ Lint/UselessAssignment:
|
|
51
42
|
|
52
43
|
# Offense count: 11
|
53
44
|
Metrics/AbcSize:
|
54
|
-
Max:
|
55
|
-
|
56
|
-
# Offense count: 1
|
57
|
-
# Configuration parameters: CountComments.
|
58
|
-
Metrics/ClassLength:
|
59
|
-
Max: 146
|
45
|
+
Max: 54
|
60
46
|
|
61
|
-
# Offense count:
|
47
|
+
# Offense count: 4
|
62
48
|
Metrics/CyclomaticComplexity:
|
63
|
-
Max:
|
49
|
+
Max: 16
|
64
50
|
|
65
|
-
# Offense count:
|
66
|
-
# Configuration parameters: AllowURI, URISchemes.
|
51
|
+
# Offense count: 71
|
52
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
|
53
|
+
# URISchemes: http, https
|
67
54
|
Metrics/LineLength:
|
68
55
|
Max: 131
|
69
56
|
|
70
|
-
# Offense count:
|
57
|
+
# Offense count: 15
|
71
58
|
# Configuration parameters: CountComments.
|
72
59
|
Metrics/MethodLength:
|
73
60
|
Max: 35
|
74
61
|
|
75
|
-
# Offense count:
|
62
|
+
# Offense count: 3
|
76
63
|
Metrics/PerceivedComplexity:
|
77
|
-
Max:
|
64
|
+
Max: 16
|
78
65
|
|
79
66
|
# Offense count: 1
|
80
67
|
Style/AccessorMethodName:
|
@@ -84,14 +71,14 @@ Style/AccessorMethodName:
|
|
84
71
|
# Offense count: 8
|
85
72
|
# Cop supports --auto-correct.
|
86
73
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
74
|
+
# SupportedStyles: always, conditionals
|
87
75
|
Style/AndOr:
|
88
76
|
Exclude:
|
89
77
|
- 'example_boxes/gce-test/Vagrantfile'
|
90
78
|
- 'lib/vagrant-google/config.rb'
|
91
79
|
- 'test/unit/common/config_test.rb'
|
92
80
|
|
93
|
-
# Offense count:
|
94
|
-
# Configuration parameters: Exclude.
|
81
|
+
# Offense count: 18
|
95
82
|
Style/Documentation:
|
96
83
|
Exclude:
|
97
84
|
- 'spec/**/*'
|
@@ -108,31 +95,26 @@ Style/Documentation:
|
|
108
95
|
- 'lib/vagrant-google/plugin.rb'
|
109
96
|
- 'lib/vagrant-google/provider.rb'
|
110
97
|
- 'lib/vagrant-google/util/timer.rb'
|
111
|
-
- 'lib/vagrant-google/version.rb'
|
112
98
|
|
113
99
|
# Offense count: 1
|
114
100
|
# Cop supports --auto-correct.
|
115
101
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
102
|
+
# SupportedStyles: leading, trailing
|
116
103
|
Style/DotPosition:
|
117
104
|
Enabled: false
|
118
105
|
|
119
106
|
# Offense count: 9
|
120
107
|
# Cop supports --auto-correct.
|
121
108
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
109
|
+
# SupportedStyles: empty_lines, no_empty_lines
|
122
110
|
Style/EmptyLinesAroundBlockBody:
|
123
111
|
Exclude:
|
124
|
-
|
125
|
-
- 'lib/vagrant-google/action/start_instance.rb'
|
126
|
-
- 'tasks/acceptance.rake'
|
127
|
-
- 'test/acceptance/shared/context_google.rb'
|
128
|
-
- 'test/acceptance/skeletons/generic/Vagrantfile'
|
129
|
-
- 'test/acceptance/skeletons/preemptible/Vagrantfile'
|
130
|
-
- 'test/acceptance/skeletons/scopes/Vagrantfile'
|
131
|
-
- 'test/unit/common/config_test.rb'
|
112
|
+
|
132
113
|
|
133
114
|
# Offense count: 1
|
134
115
|
# Cop supports --auto-correct.
|
135
116
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
117
|
+
# SupportedStyles: empty_lines, no_empty_lines
|
136
118
|
Style/EmptyLinesAroundClassBody:
|
137
119
|
Exclude:
|
138
120
|
- 'lib/vagrant-google/action/stop_instance.rb'
|
@@ -140,12 +122,13 @@ Style/EmptyLinesAroundClassBody:
|
|
140
122
|
# Offense count: 1
|
141
123
|
# Cop supports --auto-correct.
|
142
124
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
125
|
+
# SupportedStyles: empty_lines, no_empty_lines
|
143
126
|
Style/EmptyLinesAroundModuleBody:
|
144
127
|
Exclude:
|
145
128
|
- 'lib/vagrant-google/action/stop_instance.rb'
|
146
129
|
|
147
130
|
# Offense count: 2
|
148
|
-
# Configuration parameters:
|
131
|
+
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts.
|
149
132
|
Style/FileName:
|
150
133
|
Exclude:
|
151
134
|
- 'lib/vagrant-google.rb'
|
@@ -153,12 +136,13 @@ Style/FileName:
|
|
153
136
|
|
154
137
|
# Offense count: 2
|
155
138
|
# Cop supports --auto-correct.
|
156
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
139
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
140
|
+
# SupportedStyles: consistent, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
|
157
141
|
Style/FirstParameterIndentation:
|
158
142
|
Exclude:
|
159
143
|
- 'lib/vagrant-google/action/run_instance.rb'
|
160
144
|
|
161
|
-
# Offense count:
|
145
|
+
# Offense count: 1
|
162
146
|
# Configuration parameters: MinBodyLength.
|
163
147
|
Style/GuardClause:
|
164
148
|
Exclude:
|
@@ -167,6 +151,7 @@ Style/GuardClause:
|
|
167
151
|
# Offense count: 40
|
168
152
|
# Cop supports --auto-correct.
|
169
153
|
# Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues.
|
154
|
+
# SupportedStyles: ruby19, ruby19_no_mixed_keys, hash_rockets
|
170
155
|
Style/HashSyntax:
|
171
156
|
Enabled: false
|
172
157
|
|
@@ -186,6 +171,7 @@ Style/LeadingCommentSpace:
|
|
186
171
|
# Offense count: 1
|
187
172
|
# Cop supports --auto-correct.
|
188
173
|
# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
|
174
|
+
# SupportedStyles: skip_modifier_ifs, always
|
189
175
|
Style/Next:
|
190
176
|
Exclude:
|
191
177
|
- 'lib/vagrant-google/action/sync_folders.rb'
|
@@ -219,34 +205,22 @@ Style/RedundantSelf:
|
|
219
205
|
# Offense count: 1
|
220
206
|
# Cop supports --auto-correct.
|
221
207
|
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
208
|
+
# SupportedStyles: slashes, percent_r, mixed
|
222
209
|
Style/RegexpLiteral:
|
223
210
|
Exclude:
|
224
211
|
- 'lib/vagrant-google/action/sync_folders.rb'
|
225
212
|
|
226
|
-
# Offense count: 10
|
227
|
-
# Cop supports --auto-correct.
|
228
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
229
|
-
Style/SignalException:
|
230
|
-
Exclude:
|
231
|
-
- 'lib/vagrant-google/action/run_instance.rb'
|
232
|
-
- 'lib/vagrant-google/action/sync_folders.rb'
|
233
|
-
- 'lib/vagrant-google/config.rb'
|
234
|
-
- 'lib/vagrant-google/plugin.rb'
|
235
|
-
- 'test/acceptance/provider/halt_spec.rb'
|
236
|
-
- 'test/acceptance/provider/multi_instance_spec.rb'
|
237
|
-
- 'test/acceptance/provider/preemptible_spec.rb'
|
238
|
-
- 'test/acceptance/provider/reload_spec.rb'
|
239
|
-
- 'test/acceptance/provider/scopes_spec.rb'
|
240
|
-
|
241
213
|
# Offense count: 2
|
242
214
|
# Cop supports --auto-correct.
|
243
215
|
# Configuration parameters: SupportedStyles.
|
216
|
+
# SupportedStyles: space, no_space
|
244
217
|
Style/SpaceAroundEqualsInParameterDefault:
|
245
218
|
EnforcedStyle: no_space
|
246
219
|
|
247
220
|
# Offense count: 3
|
248
221
|
# Cop supports --auto-correct.
|
249
222
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
223
|
+
# SupportedStyles: space, no_space
|
250
224
|
Style/SpaceBeforeBlockBraces:
|
251
225
|
Enabled: false
|
252
226
|
|
@@ -259,24 +233,28 @@ Style/SpaceBeforeComma:
|
|
259
233
|
# Offense count: 2
|
260
234
|
# Cop supports --auto-correct.
|
261
235
|
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
|
236
|
+
# SupportedStyles: space, no_space
|
262
237
|
Style/SpaceInsideBlockBraces:
|
263
238
|
Enabled: false
|
264
239
|
|
265
|
-
# Offense count:
|
240
|
+
# Offense count: 392
|
266
241
|
# Cop supports --auto-correct.
|
267
|
-
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
242
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles, ConsistentQuotesInMultiline.
|
243
|
+
# SupportedStyles: single_quotes, double_quotes
|
268
244
|
Style/StringLiterals:
|
269
245
|
Enabled: false
|
270
246
|
|
271
247
|
# Offense count: 7
|
272
248
|
# Cop supports --auto-correct.
|
273
249
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
250
|
+
# SupportedStyles: single_quotes, double_quotes
|
274
251
|
Style/StringLiteralsInInterpolation:
|
275
252
|
Enabled: false
|
276
253
|
|
277
254
|
# Offense count: 4
|
278
255
|
# Cop supports --auto-correct.
|
279
256
|
# Configuration parameters: IgnoredMethods.
|
257
|
+
# IgnoredMethods: respond_to
|
280
258
|
Style/SymbolProc:
|
281
259
|
Exclude:
|
282
260
|
- 'test/unit/common/config_test.rb'
|
data/README.md
CHANGED
@@ -52,16 +52,15 @@ Service Account for API Access.
|
|
52
52
|
1. Next, visit the [Developers Console](https://console.developers.google.com)
|
53
53
|
make sure to enable the `Google Compute Engine` service for your project
|
54
54
|
If prompted, review and agree to the terms of service.
|
55
|
-
1. While still in the Developers Console, go to `
|
56
|
-
section and click the `Create
|
57
|
-
|
58
|
-
|
59
|
-
1. Make sure to download the *P12 private key* and save this file in a secure
|
55
|
+
1. While still in the Developers Console, go to `Permissions`, `Service Accounts`
|
56
|
+
section and click the `Create service account` button. In the pop-up dialog,
|
57
|
+
click the `Furnish a new private key` box.
|
58
|
+
1. Download the JSON private key and save this file in a secure
|
60
59
|
and reliable location. This key file will be used to authorize all API
|
61
60
|
requests to Google Compute Engine.
|
62
|
-
1. Still on the same page, find the
|
63
|
-
|
64
|
-
with
|
61
|
+
1. Still on the same page, find the
|
62
|
+
`Email address` (it should end
|
63
|
+
with `gserviceaccount.com`) associated with the new Service
|
65
64
|
Account you just created. You will need this email address and the
|
66
65
|
location of the private key file to properly configure this Vagrant plugin.
|
67
66
|
1. Add the SSH key you're going to use to GCE Metadata in `Compute` ->
|
@@ -167,18 +166,25 @@ configuration for this provider.
|
|
167
166
|
|
168
167
|
This provider exposes quite a few provider-specific configuration options:
|
169
168
|
|
170
|
-
* `google_client_email` - The Client Email address for your Service Account.
|
169
|
+
* `google_client_email` - The Client Email address for your Service Account.
|
170
|
+
(Can also be configured with `GOOGLE_CLIENT_EMAIL` environment variable.)
|
171
171
|
* `google_key_location` - The location of the P12 private key file matching your
|
172
|
-
Service Account.
|
172
|
+
Service Account.
|
173
|
+
(Can also be configured with `GOOGLE_KEY_LOCATION` environment variable.)
|
173
174
|
* `google_json_key_location` - The location of the JSON private key file matching your
|
174
|
-
Service Account.
|
175
|
-
|
175
|
+
Service Account.
|
176
|
+
(Can also be configured with `GOOGLE_JSON_KEY_LOCATION` environment variable.)
|
177
|
+
* `google_project_id` - The Project ID for your Google Cloud Platform account.
|
178
|
+
(Can also be configured with `GOOGLE_PROJECT_ID` environment variable.)
|
176
179
|
* `image` - The image name to use when booting your instance.
|
180
|
+
* `instance_group` - Unmanaged instance group to add the machine to. If one
|
181
|
+
doesn't exist it will be created.
|
177
182
|
* `instance_ready_timeout` - The number of seconds to wait for the instance
|
178
183
|
to become "ready" in GCE. Defaults to 20 seconds.
|
179
184
|
* `machine_type` - The machine type to use. The default is "n1-standard-1".
|
180
185
|
* `disk_size` - The disk size in GB. The default is 10.
|
181
186
|
* `disk_name` - The disk name to use. If the disk exists, it will be reused, otherwise created.
|
187
|
+
* `disk_type` - Whether to use Standard disk or SSD disk. Use either `pd-ssd` or `pd-standard`.
|
182
188
|
* `metadata` - Custom key/value pairs of metadata to add to the instance.
|
183
189
|
* `name` - The name of your instance. The default is "i-yyyymmddhh-randomsd",
|
184
190
|
e.g. 10/08/2015 13:15:15 is "i-2015081013-15637fda".
|
@@ -149,6 +149,7 @@ module VagrantPlugins
|
|
149
149
|
b1.use WarnNetworks
|
150
150
|
b1.use WarnSshKeys
|
151
151
|
b1.use RunInstance
|
152
|
+
b1.use AssignInstanceGroups
|
152
153
|
end
|
153
154
|
end
|
154
155
|
end
|
@@ -173,6 +174,7 @@ module VagrantPlugins
|
|
173
174
|
|
174
175
|
# The autoload farm
|
175
176
|
action_root = Pathname.new(File.expand_path("../action", __FILE__))
|
177
|
+
autoload :AssignInstanceGroups, action_root.join("assign_instance_groups")
|
176
178
|
autoload :ConnectGoogle, action_root.join("connect_google")
|
177
179
|
autoload :IsCreated, action_root.join("is_created")
|
178
180
|
autoload :IsTerminated, action_root.join("is_terminated")
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# Copyright 2016 Google Inc. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
module VagrantPlugins
|
15
|
+
module Google
|
16
|
+
module Action
|
17
|
+
# Action to assign instance groups. Looks for the 'instance_group'
|
18
|
+
# parameter in the zone config and adds the instance to it.
|
19
|
+
# If the instance group does not exist in the specified zone, it tries to
|
20
|
+
# create one first.
|
21
|
+
#
|
22
|
+
# This action manipulates unmanaged instance groups
|
23
|
+
# https://cloud.google.com/compute/docs/instance-groups/unmanaged-groups
|
24
|
+
class AssignInstanceGroups
|
25
|
+
def initialize(app, env)
|
26
|
+
@app = app
|
27
|
+
@logger = Log4r::Logger.new(
|
28
|
+
"vagrant_google::action::assign_instance_groups")
|
29
|
+
end
|
30
|
+
|
31
|
+
def call(env)
|
32
|
+
zone = env[:machine].provider_config.zone
|
33
|
+
zone_config = env[:machine].provider_config.get_zone_config(zone)
|
34
|
+
instance_name = zone_config.name
|
35
|
+
instance_group_name = zone_config.instance_group
|
36
|
+
|
37
|
+
if instance_group_name
|
38
|
+
group = env[:google_compute].instance_groups.get(instance_group_name,
|
39
|
+
zone)
|
40
|
+
if group.nil?
|
41
|
+
# If instance group doesn't exist, attempt to create it
|
42
|
+
env[:ui].info(I18n.t("vagrant_google.instance_group_create"))
|
43
|
+
instance_group_config = {
|
44
|
+
name: instance_group_name,
|
45
|
+
zone: zone,
|
46
|
+
description: "Created by Vagrant"
|
47
|
+
}
|
48
|
+
env[:google_compute].instance_groups.create(instance_group_config)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Add the machine to instance group
|
52
|
+
env[:ui].info(I18n.t("vagrant_google.instance_group_add"))
|
53
|
+
|
54
|
+
response = env[:google_compute].instance_groups.add_instance(
|
55
|
+
group: instance_group_name,
|
56
|
+
zone: zone,
|
57
|
+
instance: instance_name
|
58
|
+
)
|
59
|
+
unless response.body["status"] == "DONE"
|
60
|
+
operation = env[:google_compute].operations.get(
|
61
|
+
operation.body["name"], zone)
|
62
|
+
env[:ui].info(I18n.t("vagrant_google.waiting_for_operation",
|
63
|
+
name: operation.body["name"]))
|
64
|
+
operation.wait_for { ready? }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
@app.call(env)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -26,14 +26,14 @@ module VagrantPlugins
|
|
26
26
|
Fog::Compute::Google::NotFound,
|
27
27
|
Fog::Compute::Google::Error,
|
28
28
|
Fog::Errors::Error
|
29
|
-
]
|
29
|
+
].freeze
|
30
30
|
|
31
31
|
def initialize(app, env)
|
32
32
|
@app = app
|
33
33
|
@logger = Log4r::Logger.new("vagrant_google::action::run_instance")
|
34
34
|
end
|
35
35
|
|
36
|
-
def call(env) # rubocop:disable Metrics/MethodLength
|
36
|
+
def call(env) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
37
37
|
# Initialize metrics if they haven't been
|
38
38
|
env[:metrics] ||= {}
|
39
39
|
|
@@ -43,6 +43,7 @@ module VagrantPlugins
|
|
43
43
|
# Get the configs
|
44
44
|
zone_config = env[:machine].provider_config.get_zone_config(zone)
|
45
45
|
image = zone_config.image
|
46
|
+
instance_group = zone_config.instance_group
|
46
47
|
name = zone_config.name
|
47
48
|
machine_type = zone_config.machine_type
|
48
49
|
disk_size = zone_config.disk_size
|
@@ -67,6 +68,7 @@ module VagrantPlugins
|
|
67
68
|
env[:ui].info(" -- Disk size: #{disk_size} GB")
|
68
69
|
env[:ui].info(" -- Disk name: #{disk_name}")
|
69
70
|
env[:ui].info(" -- Image: #{image}")
|
71
|
+
env[:ui].info(" -- Instance Group: #{instance_group}")
|
70
72
|
env[:ui].info(" -- Zone: #{zone}") if zone
|
71
73
|
env[:ui].info(" -- Network: #{network}") if network
|
72
74
|
env[:ui].info(" -- Metadata: '#{metadata}'")
|
@@ -16,7 +16,7 @@ require "securerandom"
|
|
16
16
|
|
17
17
|
module VagrantPlugins
|
18
18
|
module Google
|
19
|
-
class Config < Vagrant.plugin("2", :config)
|
19
|
+
class Config < Vagrant.plugin("2", :config) # rubocop:disable Metrics/ClassLength
|
20
20
|
# The Service Account Client ID Email address
|
21
21
|
#
|
22
22
|
# @return [String]
|
@@ -42,6 +42,11 @@ module VagrantPlugins
|
|
42
42
|
# @return [String]
|
43
43
|
attr_accessor :image
|
44
44
|
|
45
|
+
# The instance group name to put the instance in.
|
46
|
+
#
|
47
|
+
# @return [String]
|
48
|
+
attr_accessor :instance_group
|
49
|
+
|
45
50
|
# The type of machine to launch, such as "n1-standard-1"
|
46
51
|
#
|
47
52
|
# @return [String]
|
@@ -132,8 +137,8 @@ module VagrantPlugins
|
|
132
137
|
#
|
133
138
|
# @return [Array]
|
134
139
|
attr_accessor :service_accounts
|
135
|
-
|
136
|
-
|
140
|
+
alias scopes service_accounts
|
141
|
+
alias scopes= service_accounts=
|
137
142
|
|
138
143
|
def initialize(zone_specific=false)
|
139
144
|
@google_client_email = UNSET_VALUE
|
@@ -141,6 +146,7 @@ module VagrantPlugins
|
|
141
146
|
@google_json_key_location = UNSET_VALUE
|
142
147
|
@google_project_id = UNSET_VALUE
|
143
148
|
@image = UNSET_VALUE
|
149
|
+
@instance_group = UNSET_VALUE
|
144
150
|
@machine_type = UNSET_VALUE
|
145
151
|
@disk_size = UNSET_VALUE
|
146
152
|
@disk_name = UNSET_VALUE
|
@@ -227,7 +233,7 @@ module VagrantPlugins
|
|
227
233
|
end
|
228
234
|
end
|
229
235
|
|
230
|
-
def finalize!
|
236
|
+
def finalize! # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
231
237
|
# Try to get access keys from standard Google environment variables; they
|
232
238
|
# will default to nil if the environment variables are not present.
|
233
239
|
@google_client_email = ENV['GOOGLE_CLIENT_EMAIL'] if @google_client_email == UNSET_VALUE
|
@@ -238,6 +244,9 @@ module VagrantPlugins
|
|
238
244
|
# Image must be nil, since we can't default that
|
239
245
|
@image = "debian-7-wheezy-v20150127" if @image == UNSET_VALUE
|
240
246
|
|
247
|
+
# Default instance group name is nil
|
248
|
+
@instance_group = nil if @instance_group == UNSET_VALUE
|
249
|
+
|
241
250
|
# Default instance type is an n1-standard-1
|
242
251
|
@machine_type = "n1-standard-1" if @machine_type == UNSET_VALUE
|
243
252
|
|
data/locales/en.yml
CHANGED
@@ -4,6 +4,10 @@ en:
|
|
4
4
|
The machine is already created.
|
5
5
|
already_status: |-
|
6
6
|
The machine is already in %{status} status.
|
7
|
+
instance_group_create: |-
|
8
|
+
Instance group doesn't exist, trying to create...
|
9
|
+
instance_group_add: |-
|
10
|
+
Adding machine to the instance group...
|
7
11
|
launching_instance: |-
|
8
12
|
Launching an instance with the following settings...
|
9
13
|
not_created: |-
|
@@ -23,6 +27,8 @@ en:
|
|
23
27
|
Stopping the instance...
|
24
28
|
terminating: |-
|
25
29
|
Terminating the instance...
|
30
|
+
waiting_for_operation: |-
|
31
|
+
Waiting for GCP operation '%{name}' to finish...
|
26
32
|
waiting_for_ready: |-
|
27
33
|
Waiting for instance to become "ready"...
|
28
34
|
waiting_for_ssh: |-
|
data/tasks/acceptance.rake
CHANGED
@@ -30,19 +30,28 @@ namespace :acceptance do
|
|
30
30
|
yellow "NOTE: For acceptance tests to be functional, correct ssh key needs to be added to GCE metadata."
|
31
31
|
|
32
32
|
if !ENV["GOOGLE_JSON_KEY_LOCATION"] && !ENV["GOOGLE_KEY_LOCATION"]
|
33
|
-
abort
|
33
|
+
abort "Environment variables GOOGLE_JSON_KEY_LOCATION or GOOGLE_KEY_LOCATION are not set. Aborting."
|
34
34
|
end
|
35
35
|
|
36
36
|
unless ENV["GOOGLE_PROJECT_ID"]
|
37
|
-
abort
|
37
|
+
abort "Environment variable GOOGLE_PROJECT_ID is not set. Aborting."
|
38
38
|
end
|
39
39
|
|
40
40
|
unless ENV["GOOGLE_CLIENT_EMAIL"]
|
41
|
-
abort
|
41
|
+
abort "Environment variable GOOGLE_CLIENT_EMAIL is not set. Aborting."
|
42
42
|
end
|
43
43
|
|
44
44
|
unless ENV["GOOGLE_SSH_USER"]
|
45
|
-
|
45
|
+
yellow "WARNING: GOOGLE_SSH_USER variable is not set. Will try to start tests using insecure Vagrant private key."
|
46
|
+
end
|
47
|
+
|
48
|
+
if ENV["GOOGLE_SSH_KEY_LOCATION"]
|
49
|
+
if File.read(ENV["GOOGLE_SSH_KEY_LOCATION"]).include?('ENCRYPTED')
|
50
|
+
unless `ssh-add -L`.include?(ENV["GOOGLE_SSH_KEY_LOCATION"])
|
51
|
+
yellow "WARNING: It looks like ssh key is encrypted and ssh-agent doesn't contain any identities."
|
52
|
+
yellow "This will likely cause the connection to the machine to fail."
|
53
|
+
end
|
54
|
+
end
|
46
55
|
end
|
47
56
|
end
|
48
57
|
|
@@ -53,6 +62,7 @@ namespace :acceptance do
|
|
53
62
|
preemptible
|
54
63
|
reload
|
55
64
|
scopes
|
65
|
+
instance_groups
|
56
66
|
provisioner/shell
|
57
67
|
provisioner/chef-solo
|
58
68
|
).map{ |s| "provider/google/#{s}" }
|
data/tasks/boxes.rake
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Boxes maintenance tasks
|
2
|
+
namespace :boxes do
|
3
|
+
task :update => [:repack_main, :repack_testing]
|
4
|
+
|
5
|
+
task :repack_main do
|
6
|
+
boxes_dir = File.expand_path("../../example_boxes", __FILE__)
|
7
|
+
Dir.chdir(boxes_dir)
|
8
|
+
|
9
|
+
puts "Repacking main box"
|
10
|
+
system('tar cvzf ../google.box -C ./gce ./metadata.json ./Vagrantfile')
|
11
|
+
end
|
12
|
+
|
13
|
+
task :repack_testing do
|
14
|
+
boxes_dir = File.expand_path("../../example_boxes", __FILE__)
|
15
|
+
Dir.chdir(boxes_dir)
|
16
|
+
|
17
|
+
puts "Repacking test box"
|
18
|
+
system('tar cvzf ../google-test.box -C ./gce-test ./metadata.json ./Vagrantfile')
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# This test check that the instance groups logic doesn't break the provisioning
|
2
|
+
# process.
|
3
|
+
#
|
4
|
+
# TODO: Reach out using Fog credentials and verify group existence.
|
5
|
+
# TODO: Clean up the created instance groups automatically
|
6
|
+
shared_examples 'provider/instance_groups' do |provider, options|
|
7
|
+
unless options[:box]
|
8
|
+
raise ArgumentError,
|
9
|
+
"box option must be specified for provider: #{provider}"
|
10
|
+
end
|
11
|
+
|
12
|
+
include_context 'acceptance'
|
13
|
+
|
14
|
+
before do
|
15
|
+
environment.skeleton('instance_groups')
|
16
|
+
assert_execute('vagrant', 'box', 'add', 'basic', options[:box])
|
17
|
+
assert_execute('vagrant', 'up', "--provider=#{provider}")
|
18
|
+
end
|
19
|
+
|
20
|
+
after do
|
21
|
+
assert_execute('vagrant', 'destroy', '--force')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should bring up machine with an instance group' do
|
25
|
+
status("Test: machine is running after up")
|
26
|
+
result = execute("vagrant", "ssh", "-c", "echo foo")
|
27
|
+
expect(result).to exit_with(0)
|
28
|
+
expect(result.stdout).to match(/foo\n$/)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Vagrant.configure("2") do |config|
|
2
|
+
config.vm.box = "basic"
|
3
|
+
|
4
|
+
config.vm.provider :google do |google|
|
5
|
+
|
6
|
+
google.zone = "europe-west1-d"
|
7
|
+
|
8
|
+
google.zone_config "europe-west1-d" do |zone1d|
|
9
|
+
zone1d.name = "vagrant-acceptance-instance-groups"
|
10
|
+
zone1d.instance_group = "vagrant-acceptance-#{('a'..'z').to_a.sample(8).join}"
|
11
|
+
zone1d.image = "debian-7-wheezy-v20150603"
|
12
|
+
zone1d.zone = "europe-west1-d"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -2,11 +2,11 @@ Vagrant.configure("2") do |config|
|
|
2
2
|
config.vm.box = "basic"
|
3
3
|
|
4
4
|
config.vm.define :z1a do |z1a|
|
5
|
-
z1a.vm.provider :google do |google
|
5
|
+
z1a.vm.provider :google do |google|
|
6
6
|
google.zone = "europe-west1-c"
|
7
7
|
|
8
8
|
google.zone_config "europe-west1-c" do |z1a_zone|
|
9
|
-
z1a_zone.name = "vagrant-
|
9
|
+
z1a_zone.name = "vagrant-acceptance-multi-z1a"
|
10
10
|
z1a_zone.image = "debian-7-wheezy-v20150603"
|
11
11
|
z1a_zone.machine_type = "n1-standard-1"
|
12
12
|
z1a_zone.zone = "europe-west1-c"
|
@@ -15,7 +15,7 @@ Vagrant.configure("2") do |config|
|
|
15
15
|
end
|
16
16
|
|
17
17
|
config.vm.define :z1b do |z1b|
|
18
|
-
z1b.vm.provider :google do |google
|
18
|
+
z1b.vm.provider :google do |google|
|
19
19
|
google.zone = "europe-west1-d"
|
20
20
|
|
21
21
|
google.zone_config "europe-west1-d" do |z1b_zone|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
Vagrant.configure("2") do |config|
|
2
2
|
config.vm.box = "basic"
|
3
3
|
|
4
|
-
config.vm.provider :google do |google
|
4
|
+
config.vm.provider :google do |google|
|
5
5
|
|
6
6
|
google.zone = "europe-west1-d"
|
7
7
|
|
8
8
|
google.zone_config "europe-west1-d" do |zone1d|
|
9
|
-
zone1d.name = "vagrant-
|
9
|
+
zone1d.name = "vagrant-acceptance-preemptible"
|
10
10
|
zone1d.image = "debian-7-wheezy-v20150603"
|
11
11
|
zone1d.zone = "europe-west1-d"
|
12
12
|
zone1d.preemptible = true
|
@@ -1,12 +1,12 @@
|
|
1
1
|
Vagrant.configure("2") do |config|
|
2
2
|
config.vm.box = "basic"
|
3
3
|
|
4
|
-
config.vm.provider :google do |google
|
4
|
+
config.vm.provider :google do |google|
|
5
5
|
|
6
6
|
google.zone = "europe-west1-d"
|
7
7
|
|
8
8
|
google.zone_config "europe-west1-d" do |zone1d|
|
9
|
-
zone1d.name = "vagrant-
|
9
|
+
zone1d.name = "vagrant-acceptance-scopes"
|
10
10
|
zone1d.scopes = ['sql-admin',
|
11
11
|
'bigquery',
|
12
12
|
'https://www.googleapis.com/auth/compute'
|
@@ -32,6 +32,7 @@ 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 == "debian-7-wheezy-v20150127" }
|
35
|
+
its("instance_group") { should be_nil }
|
35
36
|
its("zone") { should == "us-central1-f" }
|
36
37
|
its("network") { should == "default" }
|
37
38
|
its("machine_type") { should == "n1-standard-1" }
|
data/vagrant-google.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.required_rubygems_version = ">= 1.3.6"
|
29
29
|
s.rubyforge_project = "vagrant-google"
|
30
30
|
|
31
|
-
s.add_runtime_dependency "fog-google", "~> 0.0
|
31
|
+
s.add_runtime_dependency "fog-google", "~> 0.2.0"
|
32
32
|
s.add_runtime_dependency "google-api-client", "< 0.9", ">= 0.6.2"
|
33
33
|
|
34
34
|
s.add_development_dependency "pry"
|
data/vagrant-spec.config.rb
CHANGED
@@ -5,6 +5,6 @@ Vagrant::Spec::Acceptance.configure do |c|
|
|
5
5
|
c.skeleton_paths << File.expand_path("../test/acceptance/skeletons", __FILE__)
|
6
6
|
|
7
7
|
c.provider "google",
|
8
|
-
box: "
|
8
|
+
box: File.expand_path("../google-test.box", __FILE__),
|
9
9
|
contexts: ["provider-context/google"]
|
10
10
|
end
|
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: 0.2.
|
4
|
+
version: 0.2.4
|
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: 2016-
|
12
|
+
date: 2016-04-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fog-google
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ~>
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.0
|
20
|
+
version: 0.2.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.0
|
27
|
+
version: 0.2.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: google-api-client
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,19 +122,15 @@ extensions: []
|
|
122
122
|
extra_rdoc_files: []
|
123
123
|
files:
|
124
124
|
- CHANGELOG.md
|
125
|
-
- Gemfile
|
126
|
-
- LICENSE
|
127
|
-
- README.md
|
128
|
-
- Rakefile
|
129
|
-
- example_boxes/README.md
|
130
|
-
- example_boxes/gce-test/Vagrantfile
|
131
|
-
- example_boxes/gce-test/metadata.json
|
132
|
-
- example_boxes/gce/Vagrantfile
|
133
125
|
- example_boxes/gce/metadata.json
|
126
|
+
- example_boxes/gce/Vagrantfile
|
127
|
+
- example_boxes/gce-test/metadata.json
|
128
|
+
- example_boxes/gce-test/Vagrantfile
|
129
|
+
- example_boxes/README.md
|
130
|
+
- Gemfile
|
134
131
|
- google-test.box
|
135
132
|
- google.box
|
136
|
-
- lib/vagrant-google.rb
|
137
|
-
- lib/vagrant-google/action.rb
|
133
|
+
- lib/vagrant-google/action/assign_instance_groups.rb
|
138
134
|
- lib/vagrant-google/action/connect_google.rb
|
139
135
|
- lib/vagrant-google/action/is_created.rb
|
140
136
|
- lib/vagrant-google/action/is_terminated.rb
|
@@ -151,36 +147,44 @@ files:
|
|
151
147
|
- lib/vagrant-google/action/timed_provision.rb
|
152
148
|
- lib/vagrant-google/action/warn_networks.rb
|
153
149
|
- lib/vagrant-google/action/warn_ssh_keys.rb
|
150
|
+
- lib/vagrant-google/action.rb
|
154
151
|
- lib/vagrant-google/config.rb
|
155
152
|
- lib/vagrant-google/errors.rb
|
156
153
|
- lib/vagrant-google/plugin.rb
|
157
154
|
- lib/vagrant-google/provider.rb
|
158
155
|
- lib/vagrant-google/util/timer.rb
|
159
156
|
- lib/vagrant-google/version.rb
|
157
|
+
- lib/vagrant-google.rb
|
158
|
+
- LICENSE
|
160
159
|
- locales/en.yml
|
160
|
+
- Rakefile
|
161
|
+
- README.md
|
161
162
|
- tasks/acceptance.rake
|
163
|
+
- tasks/boxes.rake
|
162
164
|
- tasks/bundler.rake
|
163
165
|
- tasks/lint.rake
|
164
166
|
- tasks/test.rake
|
165
167
|
- test/acceptance/base.rb
|
166
168
|
- test/acceptance/provider/halt_spec.rb
|
169
|
+
- test/acceptance/provider/instance_groups_spec.rb
|
167
170
|
- test/acceptance/provider/multi_instance_spec.rb
|
168
171
|
- test/acceptance/provider/preemptible_spec.rb
|
169
172
|
- test/acceptance/provider/reload_spec.rb
|
170
173
|
- test/acceptance/provider/scopes_spec.rb
|
171
174
|
- test/acceptance/shared/context_google.rb
|
172
175
|
- test/acceptance/skeletons/generic/Vagrantfile
|
176
|
+
- test/acceptance/skeletons/instance_groups/Vagrantfile
|
173
177
|
- test/acceptance/skeletons/multi_instance/Vagrantfile
|
174
178
|
- test/acceptance/skeletons/preemptible/Vagrantfile
|
175
179
|
- test/acceptance/skeletons/scopes/Vagrantfile
|
176
180
|
- test/unit/base.rb
|
177
181
|
- test/unit/common/config_test.rb
|
182
|
+
- vagrant-google.gemspec
|
178
183
|
- vagrant-spec.config.rb
|
179
184
|
- vagrantfile_examples/Vagrantfile.multiple_machines
|
180
185
|
- vagrantfile_examples/Vagrantfile.provision_single
|
181
186
|
- vagrantfile_examples/Vagrantfile.simple
|
182
187
|
- vagrantfile_examples/Vagrantfile.zone_config
|
183
|
-
- vagrant-google.gemspec
|
184
188
|
- .gitignore
|
185
189
|
- .rubocop.yml
|
186
190
|
- .rubocop_todo.yml
|