kitchen-ec2 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04327b0481d7914db71e72ee411cdcab4fd6eb9b
4
- data.tar.gz: 6fd0d5a57e11c1866e706616a7a8e61945973f72
3
+ metadata.gz: f3897a853bbce0fe66db106da6852004cc39e6bc
4
+ data.tar.gz: 804747d7bf806717e31e4b6ac946497ee3aaf935
5
5
  SHA512:
6
- metadata.gz: 1ff3b4a368e69d2fc0233b402440e1bdf8f2d39451d22486a895124d86ca84aede65187bdba92f6da1acbf18b85a2c5ecce6b635d9e70b31200368a2f7120bcf
7
- data.tar.gz: d5e7123d787c59ae27b54c2ee3f2d0c43ad6d898722c8a55f150fe440e8cfca88efd28fe77631fdeaf86997cd687000b6e8440d3bd5570853cd36005a2252efb
6
+ metadata.gz: eec29c52770a4d005cf1a2769cc131f25cd351591075108ebe745a954b2e6243d30ebdf9cd87848b03321dcca124f80cae0861cec9aa5e193ee36cabf649cdb5
7
+ data.tar.gz: b53ed98bc1d2419f90b65114fe0db08db33f036d1e222e4dbbef9e791e396e6704492b58ddf1b9da406703a47e845e88f2efacde5cab3fdf7b3717388e7709f7
data/.cane CHANGED
@@ -0,0 +1 @@
1
+ --style-measure 100
data/.tailor CHANGED
@@ -90,7 +90,7 @@ Tailor.config do |config|
90
90
  style.indentation_spaces 2, level: :error
91
91
  style.max_code_lines_in_class 300, level: :error
92
92
  style.max_code_lines_in_method 30, level: :error
93
- style.max_line_length 80, level: :error
93
+ style.max_line_length 100, level: :error
94
94
  style.spaces_after_comma 1, level: :off
95
95
  style.spaces_after_lbrace 1, level: :error
96
96
  style.spaces_after_lbracket 0, level: :error
data/CHANGELOG.md CHANGED
@@ -1,8 +1,28 @@
1
+ ## 0.8.0 / 2014-02-11
2
+
3
+ ### Bug fixes
4
+
5
+ * Pull request [#29][], pull request [#28][]: Relax Test Kitchen dependency to allow versions 1.0 and up. ([@coderanger][], [@someara][])
6
+
7
+ ## New features
8
+
9
+ * Pull request [#29][]: Add `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` fallback environment variable support. ([@coderanger][])
10
+ * Pull request [#27][], pull request [#31][]: Make EC2 endpoint configurable for services implementing the AWS APIs. ([@bozinsky][], [@spheromak][])
11
+ * Pull request [#34][]: Support AWS session tokens for use with IAM roles. ([@coderanger][])
12
+ * Pull request [#22][]: Add ebs_optimized attribute. ([@tiwilliam][])
13
+
14
+ ### Improvements
15
+
16
+ * Pull request [#20][], pull request [#21][], issue [#14][]: Add configurability around whether to use DNS name, public or private IP addresses when connecting to instances. ([@matheeeny][], [@Atalanta][], [@fnichol][])
17
+ * Pull request [#15][]: In VPC groups must be specified by setting :security_group_ids rather than :groups. ([@eherot][])
18
+ * Pull request [#23][]: README updates for badges. ([@sethvargo][], [@arangamani][])
19
+
20
+
1
21
  ## 0.7.0 / 2013-08-29
2
22
 
3
23
  ### Bug fixes
4
24
 
5
- * Pull request #13: #wait_for_ssh takes 2 arguments. (@dysinger)
25
+ * Pull request [#13][]: #wait_for_ssh takes 2 arguments. ([@dysinger][])
6
26
 
7
27
  ### Improvements
8
28
 
@@ -46,8 +66,31 @@
46
66
  [#7]: https://github.com/opscode/kitchen-ec2/issues/7
47
67
  [#8]: https://github.com/opscode/kitchen-ec2/issues/8
48
68
  [#9]: https://github.com/opscode/kitchen-ec2/issues/9
69
+ [#13]: https://github.com/opscode/kitchen-ec2/issues/13
70
+ [#14]: https://github.com/opscode/kitchen-ec2/issues/14
71
+ [#15]: https://github.com/opscode/kitchen-ec2/issues/15
72
+ [#20]: https://github.com/opscode/kitchen-ec2/issues/20
73
+ [#21]: https://github.com/opscode/kitchen-ec2/issues/21
74
+ [#22]: https://github.com/opscode/kitchen-ec2/issues/22
75
+ [#23]: https://github.com/opscode/kitchen-ec2/issues/23
76
+ [#27]: https://github.com/opscode/kitchen-ec2/issues/27
77
+ [#28]: https://github.com/opscode/kitchen-ec2/issues/28
78
+ [#29]: https://github.com/opscode/kitchen-ec2/issues/29
79
+ [#31]: https://github.com/opscode/kitchen-ec2/issues/31
80
+ [#34]: https://github.com/opscode/kitchen-ec2/issues/34
81
+ [@Atalanta]: https://github.com/Atalanta
82
+ [@arangamani]: https://github.com/arangamani
83
+ [@bozinsky]: https://github.com/bozinsky
84
+ [@coderanger]: https://github.com/coderanger
49
85
  [@dissonanz]: https://github.com/dissonanz
86
+ [@dysinger]: https://github.com/dysinger
87
+ [@eherot]: https://github.com/eherot
50
88
  [@fnichol]: https://github.com/fnichol
51
89
  [@halcyonCorsair]: https://github.com/halcyonCorsair
52
90
  [@juliandunn]: https://github.com/juliandunn
91
+ [@matheeeny]: https://github.com/matheeeny
53
92
  [@mattray]: https://github.com/mattray
93
+ [@sethvargo]: https://github.com/sethvargo
94
+ [@someara]: https://github.com/someara
95
+ [@spheromak]: https://github.com/spheromak
96
+ [@tiwilliam]: https://github.com/tiwilliam
data/Gemfile CHANGED
@@ -5,4 +5,5 @@ gemspec
5
5
 
6
6
  group :test do
7
7
  gem 'rake'
8
+ gem 'pry'
8
9
  end
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # <a name="title"></a> Kitchen::Ec2: A Test Kitchen Driver for Amazon EC2
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/kitchen-ec2.png)](http://badge.fury.io/rb/kitchen-ec2)
4
- [![Build Status](https://travis-ci.org/opscode/kitchen-ec2.png)](https://travis-ci.org/opscode/kitchen-ec2)
5
- [![Code Climate](https://codeclimate.com/github/opscode/kitchen-ec2.png)](https://codeclimate.com/github/opscode/kitchen-ec2)
4
+ [![Build Status](https://travis-ci.org/test-kitchen/kitchen-ec2.png)](https://travis-ci.org/test-kitchen/kitchen-ec2)
5
+ [![Code Climate](https://codeclimate.com/github/test-kitchen/kitchen-ec2.png)](https://codeclimate.com/github/test-kitchen/kitchen-ec2)
6
6
 
7
- A Test Kitchen Driver for Amazon EC2.
7
+ A [Test Kitchen][kitchenci] Driver for Amazon EC2.
8
8
 
9
9
  This driver uses the [fog gem][fog_gem] to provision and destroy EC2
10
10
  instances. Use Amazon's cloud for your infrastructure testing!
@@ -27,12 +27,12 @@ supported:
27
27
  ```ruby
28
28
  ---
29
29
  platforms:
30
- - name: ubuntu-10.04
31
- - name: ubuntu-12.04
32
- - name: ubuntu-12.10
33
- - name: ubuntu-13.04
34
- - name: centos-6.4
35
- - name: debian-7.1.0
30
+ - name: ubuntu-10.04
31
+ - name: ubuntu-12.04
32
+ - name: ubuntu-12.10
33
+ - name: ubuntu-13.04
34
+ - name: centos-6.4
35
+ - name: debian-7.1.0
36
36
  ```
37
37
 
38
38
  This will effectively generate a configuration similar to:
@@ -40,20 +40,20 @@ This will effectively generate a configuration similar to:
40
40
  ```ruby
41
41
  ---
42
42
  platforms:
43
- - name: ubuntu-10.04
44
- driver_config:
45
- image_id: ami-1ab3ce73
46
- username: ubuntu
47
- - name: ubuntu-12.04
48
- driver_config:
49
- image_id: ami-2f115c46
50
- username: ubuntu
51
- # ...
52
- - name: centos-6.4
53
- driver_config:
54
- image_id: ami-bf5021d6
55
- username: root
56
- # ...
43
+ - name: ubuntu-10.04
44
+ driver:
45
+ image_id: ami-1ab3ce73
46
+ username: ubuntu
47
+ - name: ubuntu-12.04
48
+ driver:
49
+ image_id: ami-2f115c46
50
+ username: ubuntu
51
+ # ...
52
+ - name: centos-6.4
53
+ driver:
54
+ image_id: ami-bf5021d6
55
+ username: root
56
+ # ...
57
57
  ```
58
58
 
59
59
  For specific default values, please consult [amis.json][amis_json].
@@ -87,15 +87,29 @@ or `nil` otherwise.
87
87
  The default will be read from the `AWS_SSH_KEY_ID` environment variable if set,
88
88
  or `nil` otherwise.
89
89
 
90
+ ### endpoint
91
+
92
+ The API endpoint for executing EC2 commands.
93
+
94
+ The default will be computed from the AWS region name for the instance.
95
+
90
96
  ### <a name="config-flavor-id"></a> flavor\_id
91
97
 
92
98
  The EC2 [instance type][instance_docs] (also known as size) to use.
93
99
 
94
100
  The default is `"m1.small"`.
95
101
 
96
- ### <a name="config-groups"></a> groups
102
+ ### <a name="config-ebs-optimized"></a> ebs\_optimized
97
103
 
98
- An Array of EC [security groups][group_docs] which will be applied to the
104
+ Option to launch EC2 instance with optimized EBS volume. See
105
+ [Amazon EC2 Instance Types](http://aws.amazon.com/ec2/instance-types/) to find
106
+ out more about instance types that can be launched as EBS-optimized instances.
107
+
108
+ The default is `false`.
109
+
110
+ ### <a name="config-security-group-ids"></a> security_group_ids
111
+
112
+ An Array of EC2 [security groups][group_docs] which will be applied to the
99
113
  instance.
100
114
 
101
115
  The default is `["default"]`.
@@ -114,27 +128,22 @@ The SSH port number to be used when communicating with the instance.
114
128
 
115
129
  The default is `22`.
116
130
 
117
- ### <a name="config-region"></a> region
131
+ ### < name="interface"></a> interface
118
132
 
119
- **Required** The AWS [region][region_docs] to use.
133
+ The place from which to derive the hostname for communicating with the instance. May be `dns`, `public` or `private`. If this is unset, the driver will derive the hostname by failing back in the following order:
120
134
 
121
- The default is `"us-east-1"`.
135
+ 1. DNS Name
136
+ 2. Public IP Address
137
+ 3. Private IP Address
122
138
 
123
- ### <a name="config-require-chef-omnibus"></a> require\_chef\_omnibus
139
+ The default is unset.
124
140
 
125
- Determines whether or not a Chef [Omnibus package][chef_omnibus_dl] will be
126
- installed. There are several different behaviors available:
127
141
 
128
- * `true` - the latest release will be installed. Subsequent converges
129
- will skip re-installing if chef is present.
130
- * `latest` - the latest release will be installed. Subsequent converges
131
- will always re-install even if chef is present.
132
- * `<VERSION_STRING>` (ex: `10.24.0`) - the desired version string will
133
- be passed the the install.sh script. Subsequent converges will skip if
134
- the installed version and the desired version match.
135
- * `false` or `nil` - no chef is installed.
142
+ ### <a name="config-region"></a> region
136
143
 
137
- The default value is unset, or `nil`.
144
+ **Required** The AWS [region][region_docs] to use.
145
+
146
+ The default is `"us-east-1"`.
138
147
 
139
148
  ### <a name="config-ssh-key"></a> ssh\_key
140
149
 
@@ -148,13 +157,6 @@ The EC2 [subnet][subnet_docs] to use.
148
157
 
149
158
  The default is unset, or `nil`.
150
159
 
151
- ### <a name="config-sudo"></a> sudo
152
-
153
- Whether or not to prefix remote system commands such as installing and
154
- running Chef with `sudo`.
155
-
156
- The default is `true`.
157
-
158
160
  ### <a name="config-tags"></a> tags
159
161
 
160
162
  The Hash of EC tag name/value pairs which will be applied to the instance.
@@ -176,26 +178,27 @@ to override default configuration.
176
178
 
177
179
  ```yaml
178
180
  ---
179
- driver_plugin: ec2
180
- driver_config:
181
+ driver:
182
+ name: ec2
181
183
  aws_access_key_id: KAS...
182
184
  aws_secret_access_key: 3UK...
183
185
  aws_ssh_key_id: id_rsa-aws
184
186
  ssh_key: /path/to/id_rsa-aws
187
+ security_group_ids: ["sg-1a2b3c4d"]
185
188
  region: us-east-1
186
189
  availability_zone: us-east-1b
187
190
  require_chef_omnibus: true
188
191
  subnet_id: subnet-6d6...
189
192
 
190
193
  platforms:
191
- - name: ubuntu-12.04
192
- driver_config:
193
- image_id: ami-fd20ad94
194
- username: ubuntu
195
- - name: centos-6.3
196
- driver_config:
197
- image_id: ami-ef5ff086
198
- username: ec2-user
194
+ - name: ubuntu-12.04
195
+ driver:
196
+ image_id: ami-fd20ad94
197
+ username: ubuntu
198
+ - name: centos-6.3
199
+ driver:
200
+ image_id: ami-ef5ff086
201
+ username: ec2-user
199
202
 
200
203
  suites:
201
204
  # ...
@@ -206,25 +209,26 @@ ERB which can help to factor out secrets and credentials. For example:
206
209
 
207
210
  ```yaml
208
211
  ---
209
- driver_plugin: ec2
210
- driver_config:
212
+ driver:
213
+ name: ec2
211
214
  aws_access_key_id: <%= ENV['AWS_ACCESS_KEY'] %>
212
215
  aws_secret_access_key: <%= ENV['AWS_SECRET_KEY'] %>
213
216
  aws_ssh_key_id: <%= ENV['AWS_SSH_KEY_ID'] %>
214
217
  ssh_key: <%= File.expand_path('~/.ssh/id_rsa') %>
218
+ security_group_ids: ["sg-1a2b3c4d"]
215
219
  region: us-east-1
216
220
  availability_zone: us-east-1b
217
221
  require_chef_omnibus: true
218
222
 
219
223
  platforms:
220
- - name: ubuntu-12.04
221
- driver_config:
222
- image_id: ami-fd20ad94
223
- username: ubuntu
224
- - name: centos-6.3
225
- driver_config:
226
- image_id: ami-ef5ff086
227
- username: ec2-user
224
+ - name: ubuntu-12.04
225
+ driver:
226
+ image_id: ami-fd20ad94
227
+ username: ubuntu
228
+ - name: centos-6.3
229
+ driver:
230
+ image_id: ami-ef5ff086
231
+ username: ec2-user
228
232
 
229
233
  suites:
230
234
  # ...
@@ -255,13 +259,13 @@ Apache 2.0 (see [LICENSE][license])
255
259
 
256
260
 
257
261
  [author]: https://github.com/fnichol
258
- [issues]: https://github.com/opscode/kitchen-ec2/issues
259
- [license]: https://github.com/opscode/kitchen-ec2/blob/master/LICENSE
260
- [repo]: https://github.com/opscode/kitchen-ec2
262
+ [issues]: https://github.com/test-kitchen/kitchen-ec2/issues
263
+ [license]: https://github.com/test-kitchen/kitchen-ec2/blob/master/LICENSE
264
+ [repo]: https://github.com/test-kitchen/kitchen-ec2
261
265
  [driver_usage]: http://docs.kitchen-ci.org/drivers/usage
262
- [chef_omnibus_dl]: http://www.opscode.com/chef/install/
266
+ [chef_omnibus_dl]: http://www.getchef.com/chef/install/
263
267
 
264
- [amis_json]: https://github.com/opscode/kitchen-ec2/blob/master/data/amis.json
268
+ [amis_json]: https://github.com/test-kitchen/kitchen-ec2/blob/master/data/amis.json
265
269
  [ami_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html
266
270
  [aws_site]: http://aws.amazon.com/
267
271
  [credentials_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/SettingUp_CommandLine.html#using-credentials-access-key
@@ -269,5 +273,6 @@ Apache 2.0 (see [LICENSE][license])
269
273
  [group_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html
270
274
  [instance_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
271
275
  [key_id_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/verifying-your-key-pair.html
276
+ [kitchenci]: http://kitchen.ci/
272
277
  [region_docs]: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
273
278
  [subnet_docs]: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html
data/kitchen-ec2.gemspec CHANGED
@@ -9,18 +9,19 @@ Gem::Specification.new do |gem|
9
9
  gem.license = 'Apache 2.0'
10
10
  gem.authors = ["Fletcher Nichol"]
11
11
  gem.email = ["fnichol@nichol.ca"]
12
- gem.description = "Kitchen::Driver::Ec2 - A Test Kitchen Driver for Ec2"
12
+ gem.description = "A Test Kitchen Driver for Amazon EC2"
13
13
  gem.summary = gem.description
14
- gem.homepage = "https://github.com/opscode/kitchen-ec2/"
14
+ gem.homepage = "http://kitchen.ci/"
15
15
 
16
16
  gem.files = `git ls-files`.split($/)
17
17
  gem.executables = []
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency 'test-kitchen', '~> 1.0.0.beta.3'
21
+ gem.add_dependency 'test-kitchen', '~> 1.0'
22
22
  gem.add_dependency 'fog'
23
23
 
24
+ gem.add_development_dependency 'rspec'
24
25
  gem.add_development_dependency 'cane'
25
26
  gem.add_development_dependency 'tailor'
26
27
  gem.add_development_dependency 'countloc'
@@ -19,7 +19,6 @@
19
19
  require 'benchmark'
20
20
  require 'json'
21
21
  require 'fog'
22
-
23
22
  require 'kitchen'
24
23
 
25
24
  module Kitchen
@@ -34,13 +33,17 @@ module Kitchen
34
33
  default_config :region, 'us-east-1'
35
34
  default_config :availability_zone, 'us-east-1b'
36
35
  default_config :flavor_id, 'm1.small'
37
- default_config :groups, ['default']
36
+ default_config :ebs_optimized, false
37
+ default_config :security_group_ids, ['default']
38
38
  default_config :tags, { 'created-by' => 'test-kitchen' }
39
39
  default_config :aws_access_key_id do |driver|
40
- ENV['AWS_ACCESS_KEY']
40
+ ENV['AWS_ACCESS_KEY'] || ENV['AWS_ACCESS_KEY_ID']
41
41
  end
42
42
  default_config :aws_secret_access_key do |driver|
43
- ENV['AWS_SECRET_KEY']
43
+ ENV['AWS_SECRET_KEY'] || ENV['AWS_SECRET_ACCESS_KEY']
44
+ end
45
+ default_config :aws_session_token do |driver|
46
+ ENV['AWS_SESSION_TOKEN'] || ENV['AWS_TOKEN']
44
47
  end
45
48
  default_config :aws_ssh_key_id do |driver|
46
49
  ENV['AWS_SSH_KEY_ID']
@@ -51,6 +54,11 @@ module Kitchen
51
54
  default_config :username do |driver|
52
55
  driver.default_username
53
56
  end
57
+ default_config :endpoint do |driver|
58
+ "https://ec2.#{driver[:region]}.amazonaws.com/"
59
+ end
60
+
61
+ default_config :interface, nil
54
62
 
55
63
  required_config :aws_access_key_id
56
64
  required_config :aws_secret_access_key
@@ -62,9 +70,11 @@ module Kitchen
62
70
  state[:server_id] = server.id
63
71
 
64
72
  info("EC2 instance <#{state[:server_id]}> created.")
65
- server.wait_for { print "."; ready? } ; print "(server ready)"
66
- state[:hostname] = server.public_ip_address || server.private_ip_address
67
- wait_for_sshd(state[:hostname], config[:username]) ; print "(ssh ready)\n"
73
+ server.wait_for { print '.'; ready? }
74
+ print '(server ready)'
75
+ state[:hostname] = hostname(server)
76
+ wait_for_sshd(state[:hostname], config[:username])
77
+ print '(ssh ready)\n'
68
78
  debug("ec2:create '#{state[:hostname]}'")
69
79
  rescue Fog::Errors::Error, Excon::Errors::Error => ex
70
80
  raise ActionFailed, ex.message
@@ -81,12 +91,12 @@ module Kitchen
81
91
  end
82
92
 
83
93
  def default_ami
84
- region = amis["regions"][config[:region]]
94
+ region = amis['regions'][config[:region]]
85
95
  region && region[instance.platform.name]
86
96
  end
87
97
 
88
98
  def default_username
89
- amis["usernames"][instance.platform.name] || "root"
99
+ amis['usernames'][instance.platform.name] || 'root'
90
100
  end
91
101
 
92
102
  private
@@ -96,7 +106,9 @@ module Kitchen
96
106
  :provider => :aws,
97
107
  :aws_access_key_id => config[:aws_access_key_id],
98
108
  :aws_secret_access_key => config[:aws_secret_access_key],
109
+ :aws_session_token => config[:aws_session_token],
99
110
  :region => config[:region],
111
+ :endpoint => config[:endpoint],
100
112
  )
101
113
  end
102
114
 
@@ -105,9 +117,10 @@ module Kitchen
105
117
 
106
118
  connection.servers.create(
107
119
  :availability_zone => config[:availability_zone],
108
- :groups => config[:groups],
120
+ :security_group_ids => config[:security_group_ids],
109
121
  :tags => config[:tags],
110
122
  :flavor_id => config[:flavor_id],
123
+ :ebs_optimized => config[:ebs_optimized],
111
124
  :image_id => config[:image_id],
112
125
  :key_name => config[:aws_ssh_key_id],
113
126
  :subnet_id => config[:subnet_id],
@@ -118,8 +131,9 @@ module Kitchen
118
131
  debug("ec2:region '#{config[:region]}'")
119
132
  debug("ec2:availability_zone '#{config[:availability_zone]}'")
120
133
  debug("ec2:flavor_id '#{config[:flavor_id]}'")
134
+ debug("ec2:ebs_optimized '#{config[:ebs_optimized]}'")
121
135
  debug("ec2:image_id '#{config[:image_id]}'")
122
- debug("ec2:groups '#{config[:groups]}'")
136
+ debug("ec2:security_group_ids '#{config[:security_group_ids]}'")
123
137
  debug("ec2:tags '#{config[:tags]}'")
124
138
  debug("ec2:key_name '#{config[:aws_ssh_key_id]}'")
125
139
  debug("ec2:subnet_id '#{config[:subnet_id]}'")
@@ -132,6 +146,25 @@ module Kitchen
132
146
  JSON.load(IO.read(json_file))
133
147
  end
134
148
  end
149
+
150
+ def interface_types
151
+ {
152
+ 'dns' => 'dns_name',
153
+ 'public' => 'public_ip_address',
154
+ 'private' => 'private_ip_address'
155
+ }
156
+ end
157
+
158
+ def hostname(server)
159
+ if config[:interface]
160
+ method = interface_types.fetch(config[:interface]) do
161
+ raise Kitchen::UserError, 'Invalid interface'
162
+ end
163
+ server.send(method)
164
+ else
165
+ server.dns_name || server.public_ip_address || server.private_ip_address
166
+ end
167
+ end
135
168
  end
136
169
  end
137
170
  end
@@ -21,6 +21,6 @@ module Kitchen
21
21
  module Driver
22
22
 
23
23
  # Version string for EC2 Test Kitchen driver
24
- EC2_VERSION = "0.7.0"
24
+ EC2_VERSION = '0.8.0'
25
25
  end
26
26
  end
@@ -0,0 +1,106 @@
1
+ require 'kitchen/driver/ec2'
2
+ require 'kitchen/provisioner/dummy'
3
+
4
+ describe Kitchen::Driver::Ec2 do
5
+
6
+ let(:config) do
7
+ {}
8
+ end
9
+
10
+ let(:state) do
11
+ {}
12
+ end
13
+
14
+ let(:server) do
15
+ double(:id => "123",
16
+ :wait_for => nil,
17
+ :dns_name => "server.example.com",
18
+ :private_ip_address => '172.13.16.11',
19
+ :public_ip_address => '213.225.123.134')
20
+ end
21
+
22
+ let(:instance) do
23
+ Kitchen::Instance.new(:platform => double(:name => "centos-6.4"),
24
+ :suite => double(:name => "default"),
25
+ :driver => driver,
26
+ :provisioner => Kitchen::Provisioner::Dummy.new({}),
27
+ :busser => double("busser"),
28
+ :state_file => double("state_file"))
29
+ end
30
+
31
+ let(:driver) do
32
+ Kitchen::Driver::Ec2.new(config)
33
+ end
34
+
35
+ before do
36
+ instance
37
+ allow(driver).to receive(:create_server).and_return(server)
38
+ allow(driver).to receive(:wait_for_sshd)
39
+ end
40
+
41
+ context 'Interface is set in config' do
42
+
43
+ it 'derives hostname from DNS when specified in the .kitchen.yml' do
44
+ config[:interface] = 'dns'
45
+ driver.create(state)
46
+ expect(state[:hostname]).to eql('server.example.com')
47
+ end
48
+
49
+ it 'derives hostname from public interface when specified in the .kitchen.yml' do
50
+ config[:interface] = 'public'
51
+ driver.create(state)
52
+ expect(state[:hostname]).to eql('213.225.123.134')
53
+ end
54
+
55
+ it 'derives hostname from private interface when specified in the .kitchen.yml' do
56
+ config[:interface] = 'private'
57
+ driver.create(state)
58
+ expect(state[:hostname]).to eql('172.13.16.11')
59
+ end
60
+
61
+ it 'throws a nice exception if the config is bogus' do
62
+ config[:interface] = 'I am an idiot'
63
+ expect { driver.create(state) }.to raise_error(Kitchen::UserError, 'Invalid interface')
64
+ end
65
+
66
+ end
67
+
68
+ context 'Interface is derived automatically' do
69
+
70
+ let(:server) do
71
+ double(:id => "123",
72
+ :wait_for => nil,
73
+ :dns_name => nil,
74
+ :private_ip_address => nil,
75
+ :public_ip_address => nil)
76
+ end
77
+
78
+ it 'sets hostname to DNS value if DNS value exists' do
79
+ allow(server).to receive(:dns_name).and_return('server.example.com')
80
+ driver.create(state)
81
+ expect(state[:hostname]).to eql('server.example.com')
82
+ end
83
+
84
+ it 'sets hostname to public value if public value exists' do
85
+ allow(server).to receive(:public_ip_address).and_return('213.225.123.134')
86
+ driver.create(state)
87
+
88
+ expect(state[:hostname]).to eql('213.225.123.134')
89
+ end
90
+
91
+ it 'sets hostname to private value if private value exists' do
92
+ allow(server).to receive(:private_ip_address).and_return('172.13.16.11')
93
+ driver.create(state)
94
+ expect(state[:hostname]).to eql('172.13.16.11')
95
+ end
96
+
97
+ it 'sets hostname to DNS if one or more Public/Private values are set' do
98
+ allow(server).to receive(:dns_name).and_return('server.example.com')
99
+ allow(server).to receive(:public_ip_address).and_return('213.225.123.134')
100
+ allow(server).to receive(:private_ip_address).and_return('172.13.16.11')
101
+ driver.create(state)
102
+ expect(state[:hostname]).to eql('server.example.com')
103
+ end
104
+
105
+ end
106
+ end
metadata CHANGED
@@ -1,96 +1,110 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen-ec2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fletcher Nichol
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-29 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-kitchen
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0.beta.3
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0.beta.3
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fog
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: cane
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - '>='
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - '>='
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: tailor
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: countloc
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - '>='
87
+ - - ">="
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - '>='
94
+ - - ">="
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
- description: Kitchen::Driver::Ec2 - A Test Kitchen Driver for Ec2
97
+ description: A Test Kitchen Driver for Amazon EC2
84
98
  email:
85
99
  - fnichol@nichol.ca
86
100
  executables: []
87
101
  extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
- - .cane
91
- - .gitignore
92
- - .tailor
93
- - .travis.yml
104
+ - ".cane"
105
+ - ".gitignore"
106
+ - ".tailor"
107
+ - ".travis.yml"
94
108
  - CHANGELOG.md
95
109
  - Gemfile
96
110
  - LICENSE
@@ -100,7 +114,8 @@ files:
100
114
  - kitchen-ec2.gemspec
101
115
  - lib/kitchen/driver/ec2.rb
102
116
  - lib/kitchen/driver/ec2_version.rb
103
- homepage: https://github.com/opscode/kitchen-ec2/
117
+ - spec/create_spec.rb
118
+ homepage: http://kitchen.ci/
104
119
  licenses:
105
120
  - Apache 2.0
106
121
  metadata: {}
@@ -110,18 +125,19 @@ require_paths:
110
125
  - lib
111
126
  required_ruby_version: !ruby/object:Gem::Requirement
112
127
  requirements:
113
- - - '>='
128
+ - - ">="
114
129
  - !ruby/object:Gem::Version
115
130
  version: '0'
116
131
  required_rubygems_version: !ruby/object:Gem::Requirement
117
132
  requirements:
118
- - - '>='
133
+ - - ">="
119
134
  - !ruby/object:Gem::Version
120
135
  version: '0'
121
136
  requirements: []
122
137
  rubyforge_project:
123
- rubygems_version: 2.0.3
138
+ rubygems_version: 2.2.0
124
139
  signing_key:
125
140
  specification_version: 4
126
- summary: Kitchen::Driver::Ec2 - A Test Kitchen Driver for Ec2
127
- test_files: []
141
+ summary: A Test Kitchen Driver for Amazon EC2
142
+ test_files:
143
+ - spec/create_spec.rb