vagrant-aws 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -0
- data/README.md +10 -8
- data/lib/vagrant-aws/action/connect_aws.rb +6 -2
- data/lib/vagrant-aws/action/run_instance.rb +16 -5
- data/lib/vagrant-aws/action.rb +14 -0
- data/lib/vagrant-aws/config.rb +26 -4
- data/lib/vagrant-aws/errors.rb +4 -0
- data/lib/vagrant-aws/plugin.rb +2 -2
- data/lib/vagrant-aws/version.rb +1 -1
- data/locales/en.yml +5 -0
- data/spec/vagrant-aws/config_spec.rb +6 -3
- metadata +3 -3
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 0.2.0 (April 16, 2013)
|
2
|
+
|
3
|
+
* Add support for `vagrant ssh -c` [GH-42]
|
4
|
+
* Ability to specify a timeout for waiting for instances to become ready. [GH-44]
|
5
|
+
* Better error message if instance didn't become ready in time.
|
6
|
+
* Connection can now be done using IAM profiles. [GH-41]
|
7
|
+
|
1
8
|
# 0.1.3 (April 9, 2013)
|
2
9
|
|
3
10
|
* The `AWS_ACCESS_KEY` and `AWS_SECRET_KEY` will be used if available
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Vagrant AWS Provider
|
2
2
|
|
3
|
-
This is a [Vagrant](http://www.vagrantup.com) 1.
|
3
|
+
This is a [Vagrant](http://www.vagrantup.com) 1.2+ plugin that adds an [AWS](http://aws.amazon.com)
|
4
4
|
provider to Vagrant, allowing Vagrant to control and provision machines in
|
5
5
|
EC2 and VPC.
|
6
6
|
|
7
|
-
**NOTE:** This plugin requires Vagrant 1.
|
7
|
+
**NOTE:** This plugin requires Vagrant 1.2+,
|
8
8
|
|
9
9
|
## Features
|
10
10
|
|
@@ -50,14 +50,15 @@ your information where necessary.
|
|
50
50
|
Vagrant.configure("2") do |config|
|
51
51
|
config.vm.box = "dummy"
|
52
52
|
|
53
|
-
config.vm.provider :aws do |aws|
|
53
|
+
config.vm.provider :aws do |aws, override|
|
54
54
|
aws.access_key_id = "YOUR KEY"
|
55
55
|
aws.secret_access_key = "YOUR SECRET KEY"
|
56
56
|
aws.keypair_name = "KEYPAIR NAME"
|
57
|
-
aws.ssh_private_key_path = "PATH TO YOUR PRIVATE KEY"
|
58
57
|
|
59
58
|
aws.ami = "ami-7747d01e"
|
60
|
-
|
59
|
+
|
60
|
+
override.ssh.username = "ubuntu"
|
61
|
+
override.ssh.private_key_path = "PATH TO YOUR PRIVATE KEY"
|
61
62
|
end
|
62
63
|
end
|
63
64
|
```
|
@@ -94,6 +95,8 @@ This provider exposes quite a few provider-specific configuration options:
|
|
94
95
|
* `ami` - The AMI id to boot, such as "ami-12345678"
|
95
96
|
* `availability_zone` - The availability zone within the region to launch
|
96
97
|
the instance. If nil, it will use the default set by Amazon.
|
98
|
+
* `instance_ready_timeout` - The number of seconds to wait for the instance
|
99
|
+
to become "ready" in AWS. Defaults to 120 seconds.
|
97
100
|
* `instance_type` - The type of instance, such as "m1.small". The default
|
98
101
|
value of this if not specified is "m1.small".
|
99
102
|
* `keypair_name` - The name of the keypair to use to bootstrap AMIs
|
@@ -102,14 +105,13 @@ This provider exposes quite a few provider-specific configuration options:
|
|
102
105
|
within a [VPC](http://aws.amazon.com/vpc/)
|
103
106
|
* `region` - The region to start the instance in, such as "us-east-1"
|
104
107
|
* `secret_access_key` - The secret access key for accessing AWS
|
105
|
-
* `ssh_private_key_path` - The path to the SSH private key. This overrides
|
106
|
-
`config.ssh.private_key_path`.
|
107
|
-
* `ssh_username` - The SSH username, which overrides `config.ssh.username`.
|
108
108
|
* `security_groups` - An array of security groups for the instance. If this
|
109
109
|
instance will be launched in VPC, this must be a list of security group
|
110
110
|
IDs.
|
111
111
|
* `subnet_id` - The subnet to boot the instance into, for VPC.
|
112
112
|
* `tags` - A hash of tags to set on the machine.
|
113
|
+
* `use_iam_profile` - If true, will use [IAM profiles](http://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)
|
114
|
+
for credentials.
|
113
115
|
|
114
116
|
These can be set like typical provider-specific configuration:
|
115
117
|
|
@@ -23,10 +23,14 @@ module VagrantPlugins
|
|
23
23
|
# Build the fog config
|
24
24
|
fog_config = {
|
25
25
|
:provider => :aws,
|
26
|
-
:aws_access_key_id => region_config.access_key_id,
|
27
|
-
:aws_secret_access_key => region_config.secret_access_key,
|
28
26
|
:region => region
|
29
27
|
}
|
28
|
+
if region_config.use_iam_profile
|
29
|
+
fog_config[:use_iam_profile] = True
|
30
|
+
else
|
31
|
+
fog_config[:aws_access_key_id] = region_config.access_key_id
|
32
|
+
fog_config[:aws_secret_access_key] = region_config.secret_access_key
|
33
|
+
end
|
30
34
|
|
31
35
|
fog_config[:endpoint] = region_config.endpoint if region_config.endpoint
|
32
36
|
fog_config[:version] = region_config.version if region_config.version
|
@@ -95,13 +95,24 @@ module VagrantPlugins
|
|
95
95
|
|
96
96
|
# Wait for the instance to be ready first
|
97
97
|
env[:metrics]["instance_ready_time"] = Util::Timer.time do
|
98
|
+
tries = region_config.instance_ready_timeout / 2
|
99
|
+
|
98
100
|
env[:ui].info(I18n.t("vagrant_aws.waiting_for_ready"))
|
99
|
-
|
100
|
-
|
101
|
-
|
101
|
+
begin
|
102
|
+
retryable(:on => Fog::Errors::TimeoutError, :tries => tries) do
|
103
|
+
# If we're interrupted don't worry about waiting
|
104
|
+
next if env[:interrupted]
|
105
|
+
|
106
|
+
# Wait for the server to be ready
|
107
|
+
server.wait_for(2) { ready? }
|
108
|
+
end
|
109
|
+
rescue Fog::Errors::TimeoutError
|
110
|
+
# Delete the instance
|
111
|
+
terminate(env)
|
102
112
|
|
103
|
-
#
|
104
|
-
|
113
|
+
# Notify the user
|
114
|
+
raise Errors::InstanceReadyTimeout,
|
115
|
+
timeout: region_config.instance_ready_timeout
|
105
116
|
end
|
106
117
|
end
|
107
118
|
|
data/lib/vagrant-aws/action.rb
CHANGED
@@ -70,6 +70,20 @@ module VagrantPlugins
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
def self.action_ssh_run
|
74
|
+
Vagrant::Action::Builder.new.tap do |b|
|
75
|
+
b.use ConfigValidate
|
76
|
+
b.use Call, IsCreated do |env, b2|
|
77
|
+
if !env[:result]
|
78
|
+
b2.use MessageNotCreated
|
79
|
+
next
|
80
|
+
end
|
81
|
+
|
82
|
+
b2.use SSHRun
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
73
87
|
# This action is called to bring the box up from nothing.
|
74
88
|
def self.action_up
|
75
89
|
Vagrant::Action::Builder.new.tap do |b|
|
data/lib/vagrant-aws/config.rb
CHANGED
@@ -19,6 +19,11 @@ module VagrantPlugins
|
|
19
19
|
# @return [String]
|
20
20
|
attr_accessor :availability_zone
|
21
21
|
|
22
|
+
# The timeout to wait for an instance to become ready.
|
23
|
+
#
|
24
|
+
# @return [Fixnum]
|
25
|
+
attr_accessor :instance_ready_timeout
|
26
|
+
|
22
27
|
# The type of instance to launch, such as "m1.small"
|
23
28
|
#
|
24
29
|
# @return [String]
|
@@ -87,6 +92,12 @@ module VagrantPlugins
|
|
87
92
|
# @return [Hash<String, String>]
|
88
93
|
attr_accessor :tags
|
89
94
|
|
95
|
+
# Use IAM Instance Role for authentication to AWS instead of an
|
96
|
+
# explicit access_id and secret_access_key
|
97
|
+
#
|
98
|
+
# @return [Boolean]
|
99
|
+
attr_accessor :use_iam_profile
|
100
|
+
|
90
101
|
# The user data string
|
91
102
|
#
|
92
103
|
# @return [String]
|
@@ -96,6 +107,7 @@ module VagrantPlugins
|
|
96
107
|
@access_key_id = UNSET_VALUE
|
97
108
|
@ami = UNSET_VALUE
|
98
109
|
@availability_zone = UNSET_VALUE
|
110
|
+
@instance_ready_timeout = UNSET_VALUE
|
99
111
|
@instance_type = UNSET_VALUE
|
100
112
|
@keypair_name = UNSET_VALUE
|
101
113
|
@private_ip_address = UNSET_VALUE
|
@@ -110,6 +122,7 @@ module VagrantPlugins
|
|
110
122
|
@subnet_id = UNSET_VALUE
|
111
123
|
@tags = {}
|
112
124
|
@user_data = UNSET_VALUE
|
125
|
+
@use_iam_profile = UNSET_VALUE
|
113
126
|
|
114
127
|
# Internal state (prefix with __ so they aren't automatically
|
115
128
|
# merged)
|
@@ -188,6 +201,9 @@ module VagrantPlugins
|
|
188
201
|
# AMI must be nil, since we can't default that
|
189
202
|
@ami = nil if @ami == UNSET_VALUE
|
190
203
|
|
204
|
+
# Set the default timeout for waiting for an instance to be ready
|
205
|
+
@instance_ready_timeout = 120 if @instance_ready_timeout == UNSET_VALUE
|
206
|
+
|
191
207
|
# Default instance type is an m1.small
|
192
208
|
@instance_type = "m1.small" if @instance_type == UNSET_VALUE
|
193
209
|
|
@@ -217,6 +233,9 @@ module VagrantPlugins
|
|
217
233
|
# Subnet is nil by default otherwise we'd launch into VPC.
|
218
234
|
@subnet_id = nil if @subnet_id == UNSET_VALUE
|
219
235
|
|
236
|
+
# By default we don't use an IAM profile
|
237
|
+
@use_iam_profile = false if @use_iam_profile == UNSET_VALUE
|
238
|
+
|
220
239
|
# User Data is nil by default
|
221
240
|
@user_data = nil if @user_data == UNSET_VALUE
|
222
241
|
|
@@ -255,10 +274,13 @@ module VagrantPlugins
|
|
255
274
|
# that region.
|
256
275
|
config = get_region_config(@region)
|
257
276
|
|
258
|
-
|
259
|
-
config.
|
260
|
-
|
261
|
-
config.
|
277
|
+
if !config.use_iam_profile
|
278
|
+
errors << I18n.t("vagrant_aws.config.access_key_id_required") if \
|
279
|
+
config.access_key_id.nil?
|
280
|
+
errors << I18n.t("vagrant_aws.config.secret_access_key_required") if \
|
281
|
+
config.secret_access_key.nil?
|
282
|
+
end
|
283
|
+
|
262
284
|
errors << I18n.t("vagrant_aws.config.ami_required") if config.ami.nil?
|
263
285
|
|
264
286
|
if config.ssh_private_key_path && \
|
data/lib/vagrant-aws/errors.rb
CHANGED
data/lib/vagrant-aws/plugin.rb
CHANGED
@@ -6,8 +6,8 @@ end
|
|
6
6
|
|
7
7
|
# This is a sanity check to make sure no one is attempting to install
|
8
8
|
# this into an early Vagrant version.
|
9
|
-
if Vagrant::VERSION < "1.
|
10
|
-
raise "The Vagrant AWS plugin is only compatible with Vagrant 1.
|
9
|
+
if Vagrant::VERSION < "1.2.0"
|
10
|
+
raise "The Vagrant AWS plugin is only compatible with Vagrant 1.2+"
|
11
11
|
end
|
12
12
|
|
13
13
|
module VagrantPlugins
|
data/lib/vagrant-aws/version.rb
CHANGED
data/locales/en.yml
CHANGED
@@ -47,6 +47,11 @@ en:
|
|
47
47
|
below:
|
48
48
|
|
49
49
|
%{message}
|
50
|
+
instance_ready_timeout: |-
|
51
|
+
The instance never became "ready" in AWS. The timeout currently
|
52
|
+
set waiting for the instance to become ready is %{timeout} seconds.
|
53
|
+
Please verify that the machine properly boots. If you need more time
|
54
|
+
set the `instance_ready_timeout` configuration on the AWS provider.
|
50
55
|
rsync_error: |-
|
51
56
|
There was an error when attemping to rsync a share folder.
|
52
57
|
Please inspect the error message below for more info.
|
@@ -18,6 +18,7 @@ describe VagrantPlugins::AWS::Config do
|
|
18
18
|
its("access_key_id") { should be_nil }
|
19
19
|
its("ami") { should be_nil }
|
20
20
|
its("availability_zone") { should be_nil }
|
21
|
+
its("instance_ready_timeout") { should == 120 }
|
21
22
|
its("instance_type") { should == "m1.small" }
|
22
23
|
its("keypair_name") { should be_nil }
|
23
24
|
its("private_ip_address") { should be_nil }
|
@@ -29,6 +30,7 @@ describe VagrantPlugins::AWS::Config do
|
|
29
30
|
its("subnet_id") { should be_nil }
|
30
31
|
its("tags") { should == {} }
|
31
32
|
its("user_data") { should be_nil }
|
33
|
+
its("use_iam_profile") { should be_false }
|
32
34
|
end
|
33
35
|
|
34
36
|
describe "overriding defaults" do
|
@@ -36,10 +38,11 @@ describe VagrantPlugins::AWS::Config do
|
|
36
38
|
# simple boilerplate test, so I cut corners here. It just sets
|
37
39
|
# each of these attributes to "foo" in isolation, and reads the value
|
38
40
|
# and asserts the proper result comes back out.
|
39
|
-
[:access_key_id, :ami, :availability_zone, :
|
40
|
-
:keypair_name,
|
41
|
+
[:access_key_id, :ami, :availability_zone, :instance_ready_timeout,
|
42
|
+
:instance_type, :keypair_name,
|
41
43
|
:region, :secret_access_key, :security_groups,
|
42
|
-
:ssh_private_key_path, :ssh_username, :subnet_id, :tags
|
44
|
+
:ssh_private_key_path, :ssh_username, :subnet_id, :tags,
|
45
|
+
:use_iam_profile, :user_data].each do |attribute|
|
43
46
|
|
44
47
|
it "should not default #{attribute} if overridden" do
|
45
48
|
instance.send("#{attribute}=".to_sym, "foo")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fog
|
@@ -142,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
142
|
version: '0'
|
143
143
|
segments:
|
144
144
|
- 0
|
145
|
-
hash:
|
145
|
+
hash: 1824347495740521097
|
146
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
147
|
none: false
|
148
148
|
requirements:
|