kitchen-google-as 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +11 -0
- data/.travis.yml +9 -0
- data/CHANGELOG.md +97 -0
- data/Gemfile +6 -0
- data/LICENSE +15 -0
- data/README.md +345 -0
- data/Rakefile +14 -0
- data/kitchen-google-as.gemspec +28 -0
- data/lib/kitchen/driver/gce_as.rb +543 -0
- data/lib/kitchen/driver/gce_as_version.rb +23 -0
- data/spec/kitchen/driver/gce_as_spec.rb +1061 -0
- data/spec/spec_helper.rb +21 -0
- metadata +172 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7d476089e5f81028413e311b43c4d3be73567a72
|
4
|
+
data.tar.gz: 3d65ff6b6e53edf47c57caf483eae25ae39ff659
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 081fa3dd780ac6441cc54288fe2666353816f585397ffb9087b0efba6f41488b8154ac7d3f12326864f5576f7b0aaa44660c1541b089e7aba1a1615dcc1dde75
|
7
|
+
data.tar.gz: 1b394323b49b9841b2cb47ffdf76630661b8c63a5a10ca0f496bcd98fdf2ac653c514d4612fab1dc1969dc6ea4b91ecdcea398145c8be0f1f0ba26301e3164cb
|
data/.rubocop.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# This configuration was generated by `rubocop --auto-gen-config`
|
2
|
+
# on 2014-09-20 08:00:47 -0700 using RuboCop version 0.26.0.
|
3
|
+
# The point is for the user to remove these configuration records
|
4
|
+
# one by one as the offenses are removed from the code base.
|
5
|
+
# Note that changes in the inspected code, or installation of new
|
6
|
+
# versions of RuboCop, may require this file to be generated again.
|
7
|
+
|
8
|
+
# Offense count: 1
|
9
|
+
# Configuration parameters: CountComments.
|
10
|
+
Metrics/ClassLength:
|
11
|
+
Max: 102
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
## 1.1.0 / 2016-03-17
|
2
|
+
|
3
|
+
* #32: Rubocop and Rake fixes to address Travis test issues
|
4
|
+
* #33: Automatically disable auto-restart and auto-migrate when using preemptible instances
|
5
|
+
* #34: Support for using subnetworks
|
6
|
+
* #35: Support for gcloud-style image aliases (i.e. "centos-7" will get you the latest CentOS image)
|
7
|
+
|
8
|
+
## 1.0.0 / 2016-03-10
|
9
|
+
|
10
|
+
### New Features
|
11
|
+
|
12
|
+
* #30: use of gcloud authentication files instead of requiring new service accounts
|
13
|
+
* #30: support for service account scope aliases in addition to regular full names/URLs
|
14
|
+
* #30: support for automated public project searching for well-known disk images
|
15
|
+
|
16
|
+
### Improvements
|
17
|
+
|
18
|
+
* #30: rewrite using the google-api-client
|
19
|
+
* #30: use of the new Test Kitchen 1.4+ transport plugins
|
20
|
+
* #30: additional user feedback during API interactions
|
21
|
+
|
22
|
+
## 0.3.0 / 2016-01-23
|
23
|
+
|
24
|
+
### New Features
|
25
|
+
|
26
|
+
* #14: Support service_accounts option in Fog
|
27
|
+
* #22: Add JSON credential file and Preemptible VM support
|
28
|
+
|
29
|
+
### Improvements
|
30
|
+
|
31
|
+
* Move to test-kitchen GitHub org
|
32
|
+
* Fixes to tests
|
33
|
+
|
34
|
+
## 0.2.0 / 2014-09-20
|
35
|
+
|
36
|
+
### Improvements
|
37
|
+
|
38
|
+
* #10: Deprecate "area" in configuration for "region"
|
39
|
+
* #11: Fix name length, via @pdunnavant
|
40
|
+
* #12: Generate instance names that are valid for GCE
|
41
|
+
|
42
|
+
## 0.1.2 / 2014-04-16
|
43
|
+
|
44
|
+
### New Features
|
45
|
+
|
46
|
+
* Add documentation for new asia-east1 region.
|
47
|
+
|
48
|
+
### Improvements
|
49
|
+
|
50
|
+
* #9: Dependency updates: Remove faraday version constraint; require newer
|
51
|
+
ridley gem.
|
52
|
+
|
53
|
+
## 0.1.0 / 2014-03-29
|
54
|
+
|
55
|
+
### New Features
|
56
|
+
|
57
|
+
* PR #7: Add support for specifying SSH keys in public_key_path, via @someara
|
58
|
+
* Add support for setting username
|
59
|
+
* Support GCE v1 API, including persistent disks.
|
60
|
+
|
61
|
+
### Improvements
|
62
|
+
|
63
|
+
* Add rspec tests and Travis support.
|
64
|
+
|
65
|
+
## 0.0.6 / 2014-02-23:
|
66
|
+
|
67
|
+
* Require Ruby 1.9 or greater.
|
68
|
+
|
69
|
+
### Improvements
|
70
|
+
|
71
|
+
* Add support for specifying GCE network and tags.
|
72
|
+
|
73
|
+
### Bug fixes
|
74
|
+
|
75
|
+
* Temporarily pin Fog version to 1.19.0 until 1.20.0 support is added.
|
76
|
+
* Require Faraday Gem version to be ~> 0.8.9; 0.9.0 breaks test-kitchen.
|
77
|
+
|
78
|
+
## 0.0.4 / 2013-12-28
|
79
|
+
|
80
|
+
### Bug fixes
|
81
|
+
|
82
|
+
* In GCE, instance names must be unique; derive by default from
|
83
|
+
`<suite>-<platform>` and a UUID.
|
84
|
+
* Fix bug where running `kitchen create` multiple times would create
|
85
|
+
duplicate instances.
|
86
|
+
* Require version of Fog with exponential backoff in GCE API queries.
|
87
|
+
|
88
|
+
### Improvements
|
89
|
+
|
90
|
+
* README formatting and clarity fixes.
|
91
|
+
* Add concept of an "area" (us, europe, any) to automatically select
|
92
|
+
an availability zone from those that are up within the requested
|
93
|
+
area for each instance.
|
94
|
+
|
95
|
+
## 0.0.1 / 2013-10-20
|
96
|
+
|
97
|
+
### Initial release
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Author:: Andrew Leonard (<andy@hurricane-ridge.com>)
|
2
|
+
|
3
|
+
Copyright (C) 2013-2014, Andrew Leonard
|
4
|
+
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
you may not use this file except in compliance with the License.
|
7
|
+
You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,345 @@
|
|
1
|
+
# Kitchen::Gce - A Test Kitchen Driver for Google Compute Engine
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/test-kitchen/kitchen-google.png?branch=master)](https://travis-ci.org/test-kitchen/kitchen-google)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/test-kitchen/kitchen-google.png)](https://codeclimate.com/github/test-kitchen/kitchen-google)
|
5
|
+
|
6
|
+
This is a [Test Kitchen](https://github.com/opscode/test-kitchen/)
|
7
|
+
driver for Google Compute Engine. While similar to EC2 and other IaaS
|
8
|
+
providers, GCE has a couple of advantages for Chef cookbook testing:
|
9
|
+
|
10
|
+
* (Subjectively) faster instance launch times; and
|
11
|
+
* Sub-hour billing.
|
12
|
+
|
13
|
+
## Requirements
|
14
|
+
|
15
|
+
### Ruby Version
|
16
|
+
|
17
|
+
Ruby 2.0 or greater.
|
18
|
+
|
19
|
+
### Google Cloud Platform (GCP) Project
|
20
|
+
A [Google Cloud Platform](https://cloud.google.com) account is
|
21
|
+
required. If you do not already have an appropriate "project" in
|
22
|
+
which to run your test-kitchen instances, create one, noting the
|
23
|
+
"project id".
|
24
|
+
|
25
|
+
### Authentication and Authorization
|
26
|
+
|
27
|
+
The [underlying API](https://github.com/google/google-api-ruby-client) this plugin uses relies on the
|
28
|
+
[Google Auth Library](https://github.com/google/google-auth-library-ruby) to handle authentication to the
|
29
|
+
Google Cloud API. The auth library expects that there is a JSON credentials file located at:
|
30
|
+
|
31
|
+
`~/.config/gcloud/application_default_credentials.json`
|
32
|
+
|
33
|
+
The easiest way to create this is to download and install the [Google Cloud SDK](https://cloud.google.com/sdk/) and run the
|
34
|
+
`gcloud auth login` command which will create the credentials file for you.
|
35
|
+
|
36
|
+
If you already have a file you'd like to use that is in a different location, set the
|
37
|
+
`GOOGLE_APPLICATION_CREDENTIALS` environment variable with the full path to that file.
|
38
|
+
|
39
|
+
### SSH Keys
|
40
|
+
|
41
|
+
In order to bootstrap Linux nodes, you will first need to ensure your SSH
|
42
|
+
keys are set up correctly. Ensure your SSH public key is properly entered
|
43
|
+
into your project's Metadata tab in the GCP Console. GCE will add your key
|
44
|
+
to the appropriate user's `~/.ssh/authorized_keys` file when Chef first
|
45
|
+
connects to perform the bootstrap process.
|
46
|
+
|
47
|
+
* If you don't have one, create a key using `ssh-keygen`
|
48
|
+
* Log in to the GCP console, select your project, go to Compute Engine, and go to the Metadata tab.
|
49
|
+
* Select the "SSH Keys" tab.
|
50
|
+
* Add a new item, and paste in your public key.
|
51
|
+
* Note: to change the username automatically detected for the key, prefix your key with the username
|
52
|
+
you plan to use to connect to a new instance. For example, if you plan to connect
|
53
|
+
as "chefuser", your key should look like: `chefuser:ssh-rsa AAAAB3N...`
|
54
|
+
* Click "Save".
|
55
|
+
|
56
|
+
Alternatively, the Google Cloud SDK (a.k.a. `gcloud`) will create a SSH key
|
57
|
+
for you when you create and access your first instance:
|
58
|
+
|
59
|
+
1. Create a small test instance:
|
60
|
+
`gcloud compute instances create instance1 --zone us-central1-f --image debian-8 --machine-type g1-small`
|
61
|
+
1. Ensure your SSH keys allow access to the new instance
|
62
|
+
`gcloud compute ssh instance1 --zone us-central1-f`
|
63
|
+
1. Log out and delete the instance
|
64
|
+
`gcloud compute instances delete instance1 --zone us-central1-f`
|
65
|
+
|
66
|
+
You will now have a local SSH keypair, `~/.ssh/google_compute_engine[.pub]` that
|
67
|
+
will be used for connecting to your GCE Linux instances for this local username
|
68
|
+
when you use the `gcloud compute ssh` command. You can tell Test Kitchen to use
|
69
|
+
this key by adding it to the transport section of your .kitchen.yml:
|
70
|
+
|
71
|
+
```yaml
|
72
|
+
transport:
|
73
|
+
ssh_key:
|
74
|
+
- ~/.ssh/google_compute_engine
|
75
|
+
```
|
76
|
+
|
77
|
+
You can find [more information on configuring SSH keys](https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys) in
|
78
|
+
the Google Compute Engine documentation.
|
79
|
+
|
80
|
+
## Installation
|
81
|
+
|
82
|
+
Install the gem with:
|
83
|
+
|
84
|
+
```sh
|
85
|
+
gem install kitchen-google
|
86
|
+
```
|
87
|
+
|
88
|
+
Or, even better, if you're using the ChefDK:
|
89
|
+
|
90
|
+
```sh
|
91
|
+
chef gem install kitchen-google
|
92
|
+
```
|
93
|
+
|
94
|
+
If you're using Bundler, simply add it to your Gemfile:
|
95
|
+
|
96
|
+
```ruby
|
97
|
+
gem "kitchen-google", "~> 1.0"
|
98
|
+
```
|
99
|
+
|
100
|
+
... and then run `bundle install`.
|
101
|
+
|
102
|
+
|
103
|
+
## Configuration
|
104
|
+
|
105
|
+
### `project`
|
106
|
+
|
107
|
+
**Required**. The project ID of the GCP project into which Test Kitchen
|
108
|
+
instances will be launched. This can be found on the "Manage All Projects"
|
109
|
+
screen, found under the "Select a Project" drop-down at the top of the
|
110
|
+
GCP console.
|
111
|
+
|
112
|
+
Note that this parameter requires the "Project ID", not the "Project Name."
|
113
|
+
|
114
|
+
Example: "funky-penguin-12345"
|
115
|
+
|
116
|
+
### `image_project`
|
117
|
+
|
118
|
+
The project ID of the GCP project to search for the configured image or image
|
119
|
+
family. This must be specified to find either public images or your own images
|
120
|
+
that exist in another project.
|
121
|
+
|
122
|
+
Example: "ubuntu-os-cloud"
|
123
|
+
|
124
|
+
### `image_family`
|
125
|
+
|
126
|
+
The family of the image to initialize your boot disk from, the latest
|
127
|
+
non-deprecated image will be used.
|
128
|
+
|
129
|
+
Note that this parameter will be ignored if `image_name` is also specified.
|
130
|
+
|
131
|
+
Example: "ubuntu-1604-lts"
|
132
|
+
|
133
|
+
### `image_name`
|
134
|
+
|
135
|
+
The name of the disk image to use as the source image for the boot disk.
|
136
|
+
|
137
|
+
Example: `centos-7-v20170124`
|
138
|
+
|
139
|
+
This parameter will override `image_family` if they are both specified.
|
140
|
+
|
141
|
+
If `image_project` is not specified, only the GCP project specified in `project`
|
142
|
+
will be searched.
|
143
|
+
|
144
|
+
### `zone`
|
145
|
+
|
146
|
+
**Required if `region` is left blank.** The name of the GCE zone in which to
|
147
|
+
launch your instances.
|
148
|
+
|
149
|
+
Example: `us-east1-b`
|
150
|
+
|
151
|
+
### `region`
|
152
|
+
|
153
|
+
**Required if zone is left blank.** The name of the region in which to
|
154
|
+
launch your instances. A zone in the region will be randomly selected.
|
155
|
+
|
156
|
+
Example: `us-central1`
|
157
|
+
|
158
|
+
This parameter will be ignored if `zone` is specified.
|
159
|
+
|
160
|
+
### `autodelete_disk`
|
161
|
+
|
162
|
+
Boolean specifying whether or not to automatically delete boot disk
|
163
|
+
for test instance. Default: `true`
|
164
|
+
|
165
|
+
NOTE: If you set this to false, once Test Kitchen destroys your instance,
|
166
|
+
the boot disk used will remain in your project. You will need to manually delete it to
|
167
|
+
avoid consuming unused resources by either using the `gcloud compute disks delete`
|
168
|
+
command in the GCP SDK or by using `knife google disk delete` from
|
169
|
+
[knife-google](https://github.com/chef/knife-google).
|
170
|
+
|
171
|
+
### `auto_migrate`
|
172
|
+
|
173
|
+
Boolean specifying whether or not to automatically migrate the instance
|
174
|
+
to a host in the event of host maintenance. Default: `false`
|
175
|
+
|
176
|
+
### `disk_size`
|
177
|
+
|
178
|
+
Size, in gigabytes, of boot disk. Default: `10`.
|
179
|
+
|
180
|
+
Some images, such as windows images, have a larger source image size
|
181
|
+
and require the disk_size to be the same size or larger than the source.
|
182
|
+
An error message will be displayed to you indicating this requirement
|
183
|
+
if necessary.
|
184
|
+
|
185
|
+
### `email`
|
186
|
+
|
187
|
+
**Required for Windows instances.** The email address of the
|
188
|
+
currently-logged-in GCP user.
|
189
|
+
|
190
|
+
While the credentials file specified in the Authentication and Authorization
|
191
|
+
section is used for all API interactions, the email address is required when
|
192
|
+
performing the necessary password reset prior to bootstrapping the instance.
|
193
|
+
|
194
|
+
### `machine_type`
|
195
|
+
|
196
|
+
GCE instance type (size) to launch; default: `n1-standard-1`
|
197
|
+
|
198
|
+
### `network`
|
199
|
+
|
200
|
+
GCE network that instance will be attached to; default: `default`
|
201
|
+
|
202
|
+
### `subnet`
|
203
|
+
|
204
|
+
GCE subnetwork that instance will be attached to. Only applies to custom networks.
|
205
|
+
|
206
|
+
### `preemptible`
|
207
|
+
|
208
|
+
If set to `true`, GCE instance will be brought up as a [preemptible](https://cloud.google.com/compute/docs/instances/preemptible) virtual machine,
|
209
|
+
that runs at a much lower price than normal instances. However, Compute
|
210
|
+
Engine might terminate (preempt) these instances if it requires access
|
211
|
+
to those resources for other tasks; default: `false`
|
212
|
+
|
213
|
+
### `service_account_name`
|
214
|
+
|
215
|
+
The name of the service account to use when enabling account scopes. This
|
216
|
+
is usually an email-formatted service account name created via the "Permissions"
|
217
|
+
tab of the GCP console.
|
218
|
+
|
219
|
+
This is ignored unless you specify any `service_account_scopes`.
|
220
|
+
|
221
|
+
Default: "default"
|
222
|
+
|
223
|
+
### `service_account_scopes`
|
224
|
+
|
225
|
+
An array of scopes to add to the instance, used to grant additional permissions
|
226
|
+
within GCP.
|
227
|
+
|
228
|
+
The scopes can either be a full URL (i.e. `https://www.googleapis.com/auth/devstorage.read_write`),
|
229
|
+
the short-name (i.e. `devstorage.read_write`), or a gcloud alias (i.e. `storage-rw`).
|
230
|
+
|
231
|
+
See the output of `gcloud compute instances create --help` for a full list of scopes.
|
232
|
+
|
233
|
+
### `tags`
|
234
|
+
|
235
|
+
Array of tags to associate with instance; default: `[]`
|
236
|
+
|
237
|
+
### `use_private_ip`
|
238
|
+
|
239
|
+
Boolean indicating whether or not to connect to the instance using its
|
240
|
+
private IP address. If `true`, kitchen-google will also not provision
|
241
|
+
a public IP for this instance. Default: `false`
|
242
|
+
|
243
|
+
### `wait_time`
|
244
|
+
|
245
|
+
Amount of time, in seconds, to wait for any API interactions. Default: 600
|
246
|
+
|
247
|
+
### `refresh_rate`
|
248
|
+
|
249
|
+
Amount of time, in seconds, to refresh the status of an API interaction. Default: 2
|
250
|
+
|
251
|
+
### Transport Settings
|
252
|
+
|
253
|
+
Beginning with Test Kitchen 1.4, settings related to the transport (i.e. how to connect
|
254
|
+
to the instance) have been moved to the `transport` section of the config, such as the
|
255
|
+
username, password, SSH key path, etc.
|
256
|
+
|
257
|
+
Therefore, you will need to update the transport section with the username configured
|
258
|
+
for the SSH Key you imported into your project metadata as described in the "SSH Keys"
|
259
|
+
section above. For example, if you are connecting as the "chefuser", your .kitchen.yml
|
260
|
+
might have a section like this:
|
261
|
+
|
262
|
+
```yaml
|
263
|
+
transport:
|
264
|
+
username: chefuser
|
265
|
+
```
|
266
|
+
|
267
|
+
Additionally, if you do not wish to use the standard default SSH key (`~/.ssh/id_rsa`),
|
268
|
+
you can set the `ssh_key` parameter in the `transport` section of your .kitchen.yml.
|
269
|
+
For example, if you want to use the SSH key auto-generated by the GCP SDK:
|
270
|
+
|
271
|
+
```yaml
|
272
|
+
transport:
|
273
|
+
ssh_key:
|
274
|
+
- ~/.ssh/google_compute_engine
|
275
|
+
```
|
276
|
+
|
277
|
+
## Example .kitchen.yml
|
278
|
+
|
279
|
+
```yaml
|
280
|
+
---
|
281
|
+
driver:
|
282
|
+
name: gce
|
283
|
+
project: mycompany-test
|
284
|
+
zone: us-east1-c
|
285
|
+
email: me@mycompany.com
|
286
|
+
tags:
|
287
|
+
- devteam
|
288
|
+
- test-kitchen
|
289
|
+
service_account_scopes:
|
290
|
+
- devstorage.read_write
|
291
|
+
- userinfo.email
|
292
|
+
|
293
|
+
provisioner:
|
294
|
+
name: chef_zero
|
295
|
+
|
296
|
+
transport:
|
297
|
+
username: chefuser
|
298
|
+
|
299
|
+
platforms:
|
300
|
+
- name: centos-7
|
301
|
+
driver:
|
302
|
+
image_project: centos-cloud
|
303
|
+
image_name: centos-7-v20170124
|
304
|
+
- name: ubuntu-16.04
|
305
|
+
driver:
|
306
|
+
image_project: ubuntu-os-cloud
|
307
|
+
image_family: ubuntu-1604-lts
|
308
|
+
- name: windows
|
309
|
+
driver:
|
310
|
+
image_project: windows-cloud
|
311
|
+
image_name: windows-server-2012-r2-dc-v20170117
|
312
|
+
disk_size: 50
|
313
|
+
|
314
|
+
suites:
|
315
|
+
- name: default
|
316
|
+
run_list:
|
317
|
+
- recipe[gcetest::default]
|
318
|
+
attributes:
|
319
|
+
```
|
320
|
+
|
321
|
+
## Development
|
322
|
+
|
323
|
+
Source is hosted on [GitHub](https://github.com/test-kitchen/kitchen-google).
|
324
|
+
|
325
|
+
* Pull requests are welcome, using topic branches if possible:
|
326
|
+
|
327
|
+
1. Fork the repo.
|
328
|
+
2. Create a feature branch, commit changes to it and push them.
|
329
|
+
3. Submit a pull request.
|
330
|
+
|
331
|
+
* Report issues or submit feature requests on [GitHub](https://github.com/test-kitchen/kitchen-google/issues)
|
332
|
+
|
333
|
+
## Author, Acknowledgements, Etc.
|
334
|
+
|
335
|
+
Created and maintained by [Andrew Leonard](http://andyleonard.com)
|
336
|
+
([andy@hurricane-ridge.com](mailto:andy@hurricane-ridge.com)).
|
337
|
+
|
338
|
+
The initial release drew heavily on the
|
339
|
+
[kitchen-ec2](https://github.com/opscode/kitchen-ec2/) gem for both
|
340
|
+
inspiration and implementation details. Any bugs, however, are solely
|
341
|
+
the author's own doing.
|
342
|
+
|
343
|
+
## License
|
344
|
+
|
345
|
+
Licensed under Apache 2.0.
|