vagrant-digitalocean 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +29 -5
- data/Rakefile +17 -0
- data/bin/test_run.sh +12 -0
- data/box/Vagrantfile +5 -0
- data/box/cookbooks/foo/recipes/default.rb +1 -0
- data/lib/vagrant-digitalocean/action.rb +6 -6
- data/lib/vagrant-digitalocean/actions/create.rb +22 -10
- data/lib/vagrant-digitalocean/actions/destroy.rb +3 -2
- data/lib/vagrant-digitalocean/actions/read_state.rb +3 -1
- data/lib/vagrant-digitalocean/actions/setup_nfs.rb +14 -8
- data/lib/vagrant-digitalocean/config.rb +18 -11
- data/lib/vagrant-digitalocean/errors.rb +8 -0
- data/lib/vagrant-digitalocean/helpers/client.rb +30 -8
- data/lib/vagrant-digitalocean/provider.rb +9 -1
- data/lib/vagrant-digitalocean/version.rb +1 -1
- data/locales/en.yml +24 -4
- data/scripts/chef/debian.sh +3 -18
- data/scripts/chef/redhat.sh +2 -18
- data/test/Vagrantfile.centos +18 -0
- data/test/Vagrantfile.ubuntu +20 -0
- data/test/cookbooks/test/recipes/default.rb +1 -0
- data/test/provision.sh +3 -0
- data/test/test_id_rsa +27 -0
- data/test/test_id_rsa.pub +1 -0
- metadata +18 -3
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -2,11 +2,20 @@
|
|
2
2
|
|
3
3
|
`vagrant-digitalocean` is a provider plugin for Vagrant that allows the management of [Digital Ocean](https://www.digitalocean.com/) droplets (instances).
|
4
4
|
|
5
|
-
##
|
5
|
+
## SSH Key Support
|
6
6
|
|
7
|
-
|
7
|
+
By default the provider will use the *insecure* vagrant key for SSH access. That means anyone with the vagrant key and the IP of your droplet has root on your machine. To ovvrride this behavior, define your SSH key name and public key path within the provider configuration:
|
8
8
|
|
9
|
-
|
9
|
+
```ruby
|
10
|
+
config.vm.provider :digital_ocean do |provider|
|
11
|
+
provider.ssh_key_name = "My Laptop"
|
12
|
+
provider.pub_ssh_key_path = "~/.ssh/id_rsa.pub"
|
13
|
+
|
14
|
+
# additional configuration here
|
15
|
+
end
|
16
|
+
```
|
17
|
+
|
18
|
+
The provider will assume the private key path is identical to the public key path without the *.pub* extention. If this is not the case, define the private key path using `config.ssh.private_key_path`. If an SSH key name is not set, it will default to *Vagrant*.
|
10
19
|
|
11
20
|
## Status
|
12
21
|
|
@@ -14,7 +23,7 @@ As of this writing the provider implementation is geared entirely toward a devel
|
|
14
23
|
|
15
24
|
## Supported Guests/Hosts
|
16
25
|
|
17
|
-
This project is primarily to support my workflow
|
26
|
+
This project is primarily to support my workflow which currently only involves Ubuntu and CentOS. It's likely that any unix host will work but I've not tested it. Guests require porting of the nfs, chef, and sudo setup scripts.
|
18
27
|
|
19
28
|
Hosts:
|
20
29
|
|
@@ -57,11 +66,26 @@ Vagrant.configure("2") do |config|
|
|
57
66
|
vm.image = "Ubuntu 12.04 x32 Server"
|
58
67
|
vm.region = "New York 1"
|
59
68
|
vm.size = "512MB"
|
69
|
+
vm.ssh_key_name = "My Key"
|
70
|
+
vm.pub_ssh_key_path = "~/.ssh/id_rsa"
|
71
|
+
|
72
|
+
# optional config for SSL cert on OSX and others
|
73
|
+
vm.ca_path = "/usr/local/etc/openssl/ca-bundle.crt"
|
60
74
|
end
|
61
75
|
end
|
62
76
|
```
|
63
77
|
|
64
|
-
Note that the example contains the default value. The client identifier and API key are pulled from the environment and the other values are the string representations of the droplet configuration options as provided by the [Digital Ocean API](https://www.digitalocean.com/api).
|
78
|
+
Note that the example contains the default value. The client identifier and API key are pulled from the environment and the other values are the string representations of the droplet configuration options as provided by the [Digital Ocean API](https://www.digitalocean.com/api). The ca_path configuration option may be necessary depending on your system setup.
|
79
|
+
|
80
|
+
## Tests
|
81
|
+
|
82
|
+
Testing is very simple initially. There is no guaranteed cleanup. That is, if you are testing using `rake test` **you** are responsible for making sure that there aren't large numbers of test machines left on your Digital Ocean account.
|
83
|
+
|
84
|
+
```bash
|
85
|
+
rake test # and wait ...
|
86
|
+
```
|
87
|
+
|
88
|
+
Cleanup will be added eventually but will have to be specified explicitly because of the risk of machine deletetion.
|
65
89
|
|
66
90
|
## Contributing
|
67
91
|
|
data/Rakefile
CHANGED
@@ -5,3 +5,20 @@ namespace "dev" do
|
|
5
5
|
system "bash bin/build.sh"
|
6
6
|
end
|
7
7
|
end
|
8
|
+
|
9
|
+
task "test" do
|
10
|
+
result = system("bash bin/test_run.sh")
|
11
|
+
|
12
|
+
if result
|
13
|
+
puts "Success!"
|
14
|
+
else
|
15
|
+
puts "Failure!"
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def env
|
21
|
+
['DO_CLIENT_ID', 'DO_API_KEY', 'VAGRANT_LOG'].inject("") do |acc, key|
|
22
|
+
acc += "#{key}=#{ENV[key] || 'error'} "
|
23
|
+
end
|
24
|
+
end
|
data/bin/test_run.sh
ADDED
data/box/Vagrantfile
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
log "Foo!"
|
@@ -52,6 +52,12 @@ module VagrantPlugins
|
|
52
52
|
|
53
53
|
# setup provisioners, comes after Provision to force nfs folders
|
54
54
|
builder.use Actions::SetupProvisioner
|
55
|
+
|
56
|
+
# set the host and remote ips for NFS
|
57
|
+
builder.use Actions::SetupNFS
|
58
|
+
|
59
|
+
# mount the nfs folders which should be all shared folders
|
60
|
+
builder.use NFS
|
55
61
|
end
|
56
62
|
end
|
57
63
|
|
@@ -64,12 +70,6 @@ module VagrantPlugins
|
|
64
70
|
builder.use Actions::Create
|
65
71
|
|
66
72
|
builder.use provision
|
67
|
-
|
68
|
-
# set the host and remote ips for NFS
|
69
|
-
builder.use Actions::SetupNFS
|
70
|
-
|
71
|
-
# mount the nfs folders which should be all shared folders
|
72
|
-
builder.use NFS
|
73
73
|
end
|
74
74
|
end
|
75
75
|
end
|
@@ -5,10 +5,11 @@ module VagrantPlugins
|
|
5
5
|
module Actions
|
6
6
|
class Create
|
7
7
|
include Vagrant::Util::Retryable
|
8
|
+
include Helpers::Client
|
8
9
|
|
9
10
|
def initialize(app, env)
|
10
11
|
@app, @env = app, env
|
11
|
-
@client =
|
12
|
+
@client = client
|
12
13
|
@translator = Helpers::Translator.new("actions.create")
|
13
14
|
end
|
14
15
|
|
@@ -19,20 +20,18 @@ module VagrantPlugins
|
|
19
20
|
return @app.call(env)
|
20
21
|
end
|
21
22
|
|
22
|
-
# TODO check the content of the key to see if it
|
23
|
-
|
23
|
+
# TODO check the content of the key to see if it has changed
|
24
|
+
ssh_key_name = env[:machine].provider_config.ssh_key_name
|
24
25
|
begin
|
25
26
|
ssh_key_id = @client
|
26
27
|
.request("/ssh_keys/")
|
27
|
-
.find_id(:ssh_keys, :name =>
|
28
|
+
.find_id(:ssh_keys, :name => ssh_key_name)
|
28
29
|
rescue Errors::ResultMatchError
|
29
30
|
env[:ui].info @translator.t("create_key")
|
30
31
|
|
31
|
-
key = DigitalOcean.vagrant_key
|
32
|
-
|
33
32
|
result = @client.request("/ssh_keys/new", {
|
34
|
-
:name =>
|
35
|
-
:ssh_pub_key =>
|
33
|
+
:name => ssh_key_name,
|
34
|
+
:ssh_pub_key => pub_ssh_key(env)
|
36
35
|
})
|
37
36
|
|
38
37
|
ssh_key_id = result["ssh_key"]["id"]
|
@@ -62,7 +61,7 @@ module VagrantPlugins
|
|
62
61
|
})
|
63
62
|
|
64
63
|
# assign the machine id for reference in other commands
|
65
|
-
env[:machine].id = result["droplet"]["id"]
|
64
|
+
env[:machine].id = result["droplet"]["id"].to_s
|
66
65
|
|
67
66
|
env[:ui].info @translator.t("wait_active")
|
68
67
|
|
@@ -95,8 +94,21 @@ module VagrantPlugins
|
|
95
94
|
destroy_env.delete(:interrupted)
|
96
95
|
destroy_env[:config_validate] = false
|
97
96
|
destroy_env[:force_confirm_destroy] = true
|
98
|
-
env[:action_runner].run(
|
97
|
+
env[:action_runner].run(Action.new.destroy, destroy_env)
|
99
98
|
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def pub_ssh_key(env)
|
103
|
+
path = env[:machine].provider_config.pub_ssh_key_path
|
104
|
+
file = File.open(File.expand_path(path))
|
105
|
+
key = file.read
|
106
|
+
file.close
|
107
|
+
key
|
108
|
+
rescue
|
109
|
+
env[:ui].info @translator.t("key_not_found")
|
110
|
+
DigitalOcean.vagrant_key
|
111
|
+
end
|
100
112
|
end
|
101
113
|
end
|
102
114
|
end
|
@@ -5,10 +5,11 @@ module VagrantPlugins
|
|
5
5
|
module Actions
|
6
6
|
class Destroy
|
7
7
|
include Vagrant::Util::Retryable
|
8
|
+
include Helpers::Client
|
8
9
|
|
9
10
|
def initialize(app, env)
|
10
11
|
@app, @env = app, env
|
11
|
-
@client =
|
12
|
+
@client = client
|
12
13
|
@translator = Helpers::Translator.new("actions.destroy")
|
13
14
|
end
|
14
15
|
|
@@ -34,7 +35,7 @@ module VagrantPlugins
|
|
34
35
|
# make sure to remove the export when the machine is destroyed
|
35
36
|
# private in some hosts and requires a send
|
36
37
|
env[:ui].info @translator.t("clean_nfs")
|
37
|
-
env[:host].send(:nfs_cleanup, env[:machine].id)
|
38
|
+
env[:host].send(:nfs_cleanup, env[:machine].id.to_s)
|
38
39
|
|
39
40
|
@app.call(env)
|
40
41
|
end
|
@@ -17,7 +17,10 @@ module VagrantPlugins
|
|
17
17
|
env[:ui].info @translator.t("machine_ip", :ip => env[:nfs_machine_ip])
|
18
18
|
|
19
19
|
# get the host ip from the local adapters
|
20
|
-
|
20
|
+
raise Errors::LocalIPError if !(host_ip = determine_host_ip)
|
21
|
+
|
22
|
+
env[:nfs_host_ip] = host_ip
|
23
|
+
|
21
24
|
env[:ui].info @translator.t("host_ip", :ip => env[:nfs_host_ip])
|
22
25
|
|
23
26
|
# make sure the nfs server is setup
|
@@ -35,15 +38,18 @@ module VagrantPlugins
|
|
35
38
|
@app.call(env)
|
36
39
|
end
|
37
40
|
|
38
|
-
#
|
39
|
-
# TODO
|
41
|
+
# TODO not thread safe :(
|
42
|
+
# TODO google ip seems like a bad idea
|
40
43
|
def determine_host_ip
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
# turn off reverse DNS resolution temporarily
|
45
|
+
orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true
|
46
|
+
|
47
|
+
UDPSocket.open do |s|
|
48
|
+
s.connect '64.233.187.99', 1
|
49
|
+
s.addr.last
|
46
50
|
end
|
51
|
+
ensure
|
52
|
+
Socket.do_not_reverse_lookup = orig
|
47
53
|
end
|
48
54
|
|
49
55
|
def nfs_install(guest)
|
@@ -1,22 +1,29 @@
|
|
1
1
|
module VagrantPlugins
|
2
2
|
module DigitalOcean
|
3
3
|
class Config < Vagrant.plugin("2", :config)
|
4
|
-
attr_accessor :client_id, :api_key, :image, :region, :size
|
4
|
+
attr_accessor :client_id, :api_key, :image, :region, :size, :ca_path,
|
5
|
+
:ssh_key_name, :pub_ssh_key_path
|
5
6
|
|
6
7
|
def initialize
|
7
|
-
@client_id
|
8
|
-
@api_key
|
9
|
-
@image
|
10
|
-
@region
|
11
|
-
@size
|
8
|
+
@client_id = UNSET_VALUE
|
9
|
+
@api_key = UNSET_VALUE
|
10
|
+
@image = UNSET_VALUE
|
11
|
+
@region = UNSET_VALUE
|
12
|
+
@size = UNSET_VALUE
|
13
|
+
@ca_path = UNSET_VALUE
|
14
|
+
@ssh_key_name = UNSET_VALUE
|
15
|
+
@pub_ssh_key_path = UNSET_VALUE
|
12
16
|
end
|
13
17
|
|
14
18
|
def finalize!
|
15
|
-
@client_id
|
16
|
-
@api_key
|
17
|
-
@image
|
18
|
-
@region
|
19
|
-
@size
|
19
|
+
@client_id = ENV["DO_CLIENT_ID"] if @client_id == UNSET_VALUE
|
20
|
+
@api_key = ENV["DO_API_KEY"] if @api_key == UNSET_VALUE
|
21
|
+
@image = "Ubuntu 12.04 x32 Server" if @image == UNSET_VALUE
|
22
|
+
@region = "New York 1" if @region == UNSET_VALUE
|
23
|
+
@size = "512MB" if @size == UNSET_VALUE
|
24
|
+
@ca_path = nil if @ca_path == UNSET_VALUE
|
25
|
+
@ssh_key_name = "Vagrant" if @ssh_key_name == UNSET_VALUE
|
26
|
+
@pub_ssh_key_path = nil if @pub_ssh_key_path == UNSET_VALUE
|
20
27
|
end
|
21
28
|
|
22
29
|
def validate(machine)
|
@@ -18,6 +18,14 @@ module VagrantPlugins
|
|
18
18
|
class ResultMatchError < DigitalOceanError
|
19
19
|
error_key(:result_match)
|
20
20
|
end
|
21
|
+
|
22
|
+
class CertificateError < DigitalOceanError
|
23
|
+
error_key(:certificate)
|
24
|
+
end
|
25
|
+
|
26
|
+
class LocalIPError < DigitalOceanError
|
27
|
+
error_key(:local_ip)
|
28
|
+
end
|
21
29
|
end
|
22
30
|
end
|
23
31
|
end
|
@@ -5,17 +5,39 @@ require "json"
|
|
5
5
|
module VagrantPlugins
|
6
6
|
module DigitalOcean
|
7
7
|
module Helpers
|
8
|
-
|
9
|
-
def
|
10
|
-
@client
|
8
|
+
module Client
|
9
|
+
def client
|
10
|
+
@client ||= ApiClient.new(@env[:machine].provider_config)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ApiClient
|
15
|
+
def initialize(config)
|
16
|
+
@config = config
|
17
|
+
@client = Faraday.new({
|
18
|
+
:url => "https://api.digitalocean.com/",
|
19
|
+
:ssl => {
|
20
|
+
:ca_file => config.ca_path
|
21
|
+
}
|
22
|
+
})
|
11
23
|
end
|
12
24
|
|
13
25
|
def request(path, params = {})
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
26
|
+
begin
|
27
|
+
result = @client.get(path, params = params.merge({
|
28
|
+
:client_id => @config.client_id,
|
29
|
+
:api_key => @config.api_key
|
30
|
+
}))
|
31
|
+
rescue Faraday::Error::ConnectionFailed => e
|
32
|
+
# TODO this is suspect but because farady wraps the exception
|
33
|
+
# in something generic there doesn't appear to be another
|
34
|
+
# way to distinguish different connection errors :(
|
35
|
+
if e.message =~ /certificate verify failed/
|
36
|
+
raise Errors::CertificateError
|
37
|
+
end
|
38
|
+
|
39
|
+
raise e
|
40
|
+
end
|
19
41
|
|
20
42
|
# remove the api key in case an error gets dumped to the console
|
21
43
|
params[:api_key] = "REMOVED"
|
@@ -57,11 +57,19 @@ module VagrantPlugins
|
|
57
57
|
|
58
58
|
return nil if state["status"] == :not_created
|
59
59
|
|
60
|
+
if @machine.config.ssh.private_key_path
|
61
|
+
private_key_path = @machine.config.ssh.private_key_path
|
62
|
+
elsif @machine.provider_config.pub_ssh_key_path
|
63
|
+
private_key_path = @machine.provider_config.pub_ssh_key_path.chomp(".pub")
|
64
|
+
else
|
65
|
+
private_key_path = Vagrant.source_root + "keys/vagrant"
|
66
|
+
end
|
67
|
+
|
60
68
|
return {
|
61
69
|
:host => state["ip_address"],
|
62
70
|
:port => "22",
|
63
71
|
:username => "root",
|
64
|
-
:private_key_path =>
|
72
|
+
:private_key_path => private_key_path
|
65
73
|
}
|
66
74
|
end
|
67
75
|
|
data/locales/en.yml
CHANGED
@@ -2,7 +2,8 @@ en:
|
|
2
2
|
vagrant_digital_ocean:
|
3
3
|
errors:
|
4
4
|
api_status: |-
|
5
|
-
There was an issue with the request made to the Digital Ocean
|
5
|
+
There was an issue with the request made to the Digital Ocean
|
6
|
+
API at:
|
6
7
|
|
7
8
|
Path: %{path}
|
8
9
|
URI Params: %{params}
|
@@ -12,7 +13,8 @@ en:
|
|
12
13
|
Status: %{status}
|
13
14
|
Response: %{response}
|
14
15
|
:json: |-
|
15
|
-
There was an issue with the JSON response from the Digital Ocean
|
16
|
+
There was an issue with the JSON response from the Digital Ocean
|
17
|
+
API at:
|
16
18
|
|
17
19
|
Path: %{path}
|
18
20
|
URI Params: %{params}
|
@@ -25,14 +27,32 @@ en:
|
|
25
27
|
|
26
28
|
%{sub_obj}
|
27
29
|
|
28
|
-
Contained no object with the value "%{value}" for the the
|
30
|
+
Contained no object with the value "%{value}" for the the
|
31
|
+
key "%{key}".
|
32
|
+
|
29
33
|
Please ensure that the configured value exists in the collection.
|
34
|
+
:certificate: |-
|
35
|
+
The secure connection to the Digital Ocean API has failed. Please
|
36
|
+
ensure that your local certificates directory is defined in the
|
37
|
+
provider config.
|
38
|
+
|
39
|
+
config.vm.provider :digital_ocean do |vm|
|
40
|
+
vm.ca_path = "/path/to/ssl/ca/cert.crt"
|
41
|
+
end
|
42
|
+
|
43
|
+
This is generally caused by the OpenSSL configuration associated
|
44
|
+
with the Ruby install being unaware of the system specific ca
|
45
|
+
certs.
|
46
|
+
:local_ip: |-
|
47
|
+
The Digital Ocean provider was unable to determine the host's IP.
|
48
|
+
|
30
49
|
actions:
|
31
50
|
create:
|
32
51
|
skip: "Droplet is active, skipping creation"
|
33
52
|
create_key: "Adding key client account"
|
34
53
|
create_droplet: "Creating the droplet"
|
35
54
|
wait_active: "Waiting for the droplet to become active (>= 1 min)"
|
55
|
+
key_not_found: "Public SSH key not provided, using insecure Vagrant key"
|
36
56
|
destroy:
|
37
57
|
destroying: "Destroying droplet"
|
38
58
|
not_active_or_new: "Droplet not in the `active` or `new` state"
|
@@ -50,4 +70,4 @@ en:
|
|
50
70
|
setup_user:
|
51
71
|
create: "Creating user '%{user}' and setting password"
|
52
72
|
sudo: "Enabling sudo for user '%{user}'"
|
53
|
-
key: "Adding public key to authorized_keys"
|
73
|
+
key: "Adding public key to authorized_keys"
|
data/scripts/chef/debian.sh
CHANGED
@@ -1,20 +1,5 @@
|
|
1
|
-
#
|
2
|
-
# skip if the keys are present
|
1
|
+
# skip if chef-solo is present
|
3
2
|
if (which chef-solo); then exit 0; fi
|
4
3
|
|
5
|
-
#
|
6
|
-
|
7
|
-
|
8
|
-
# add the opscode repo to the sources
|
9
|
-
echo "deb http://apt.opscode.com/ `lsb_release -cs`-0.10 main" | sudo tee /etc/apt/sources.list.d/opscode.list;
|
10
|
-
|
11
|
-
# setup the gpg key
|
12
|
-
mkdir -p /etc/apt/trusted.gpg.d;
|
13
|
-
gpg --keyserver keys.gnupg.net --recv-keys 83EF826A;
|
14
|
-
gpg --export packages@opscode.com | sudo tee /etc/apt/trusted.gpg.d/opscode-keyring.gpg > /dev/null;
|
15
|
-
|
16
|
-
# update the repo to make sure that the package is available from the repo
|
17
|
-
apt-get update;
|
18
|
-
|
19
|
-
# avoid server url popup
|
20
|
-
echo "chef chef/chef_server_url string https://api.opscode.com/organizations/vagrant" | debconf-set-selections && apt-get install chef -y;
|
4
|
+
# download and run the omnibus installer
|
5
|
+
wget -O - http://www.opscode.com/chef/install.sh | bash
|
data/scripts/chef/redhat.sh
CHANGED
@@ -1,21 +1,5 @@
|
|
1
|
-
# cargo culted from OpsCode's guide at http://wiki.opscode.com/display/chef/Installing+Chef+Client+on+CentOS
|
2
1
|
# skip if chef-solo is present
|
3
2
|
if (which chef-solo); then exit 0; fi
|
4
3
|
|
5
|
-
#
|
6
|
-
|
7
|
-
|
8
|
-
# install the pre-reqs
|
9
|
-
yum install -y ruby ruby-devel ruby-ri ruby-rdoc ruby-shadow gcc gcc-c++ automake autoconf make curl dmidecode
|
10
|
-
|
11
|
-
# install rubygems
|
12
|
-
if ! (which gem); then
|
13
|
-
cd /tmp
|
14
|
-
curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz
|
15
|
-
tar zxf rubygems-1.8.10.tgz
|
16
|
-
cd rubygems-1.8.10
|
17
|
-
ruby setup.rb --no-format-executable
|
18
|
-
fi
|
19
|
-
|
20
|
-
# install chef via rubygems
|
21
|
-
gem install chef --no-ri --no-rdoc
|
4
|
+
# download and run the omnibus installer
|
5
|
+
wget -O - http://www.opscode.com/chef/install.sh | bash
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Vagrant.configure("2") do |config|
|
2
|
+
config.vm.box = "digital_ocean"
|
3
|
+
|
4
|
+
config.vm.provider :digital_ocean do |vm|
|
5
|
+
vm.client_id = ENV["DO_CLIENT_ID"]
|
6
|
+
vm.api_key = ENV["DO_API_KEY"]
|
7
|
+
vm.image = "CentOS 6.3 x64"
|
8
|
+
vm.region = "New York 1"
|
9
|
+
vm.size = "512MB"
|
10
|
+
end
|
11
|
+
|
12
|
+
config.vm.provision :shell, :path => "provision.sh"
|
13
|
+
|
14
|
+
config.vm.provision :chef_solo do |chef|
|
15
|
+
chef.cookbooks_path = "cookbooks"
|
16
|
+
chef.add_recipe "test"
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Vagrant.configure("2") do |config|
|
2
|
+
config.vm.box = "digital_ocean"
|
3
|
+
|
4
|
+
config.vm.provider :digital_ocean do |vm|
|
5
|
+
vm.client_id = ENV["DO_CLIENT_ID"]
|
6
|
+
vm.api_key = ENV["DO_API_KEY"]
|
7
|
+
vm.image = "Ubuntu 12.04 x32 Server"
|
8
|
+
vm.region = "New York 1"
|
9
|
+
vm.size = "512MB"
|
10
|
+
vm.ssh_key_name = "Test Key"
|
11
|
+
vm.pub_ssh_key_path = "test_id_rsa.pub"
|
12
|
+
end
|
13
|
+
|
14
|
+
config.vm.provision :shell, :path => "provision.sh"
|
15
|
+
|
16
|
+
config.vm.provision :chef_solo do |chef|
|
17
|
+
chef.cookbooks_path = "cookbooks"
|
18
|
+
chef.add_recipe "test"
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
log "Testing 1 2 3!"
|
data/test/provision.sh
ADDED
data/test/test_id_rsa
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEowIBAAKCAQEAmxZRyfvgXFxlPW9ivoxffdK9erqpCp1oitghUtDxbzPSCbNw
|
3
|
+
qBoiJcnPVA/TuCxMnruUcNEXYgKfTL8lD3A1Hom8N1pTAhSed5m4qAGqTMubT15s
|
4
|
+
cSR+SnDdriShErB/9YSb9LVn1aR0MsFS3H/+x1j4w5d6hBas8BhDfuVd16shvoaA
|
5
|
+
OKy0ywy+NBuvGy/6Au3q3t7M9wdelODRnYLSWWqaLeYExRKxWWc7ape+oduQoe4r
|
6
|
+
BNVwGmIOjWOM9aFPEPVHdLGO+LQyPExdeuS0rW96a39U4p8GjGzsrkNcKzVOGjM3
|
7
|
+
pIsGs3qOi7RzJ3z48HiBj9NT8I2fFpGHERerbQIDAQABAoIBABXsIcObhyuHJAh7
|
8
|
+
JkopLZZro70lhZ+qgIyf4JYEUxyVBqu4YcRhbVJKJLSNSDBQksQdX+5SoCuKk1oV
|
9
|
+
6vcztU6Lyb9JVVKF96CQajnVgm04msutXUbhEbkUG0Hyi5JIwM3D4QfGXNcmWAaU
|
10
|
+
rVHeBfXH7eI4F2l0ix2lUGUvpwRFRDq9HgpOjXzyc57B4jeF7na/UTnt+Uoi4hzZ
|
11
|
+
FjjQ7nSLqEJLXtQBqt4EnAZu6/9JlAApunyMOX2oTqRNn8XGmD0Rc+AouipHM+Mc
|
12
|
+
9/fN9oqVxxXw2MdJA6S/sEFLEDrbifmyyHOereuZtOjdWLqsCdZwewYl8nuBnYEU
|
13
|
+
GjVzYgECgYEAx+efis7xma28HWqtW9GLvjBcFAD/f+MDDeqX9TKFwf+91tUq0QZi
|
14
|
+
SqXvmIvCnpsO8I70WEskT+pPwJWReAbZBrCbCVDbH34KEkAHywH9sK6chWnB8OpU
|
15
|
+
0mp0gH89A4bq/tedKVHCQ2sAbKgbIc1zf3zpmMQiV+smMDQXU1fTg/kCgYEAxpst
|
16
|
+
BD2cYftFjxFZE1v8fx6t6oHtzYRtNNFTYzfxzzRBaTTRRzdhSfh0tLFueyg/fcKR
|
17
|
+
oCXUxbfCYRLk+zHP2p/AyyN9R5p2AMAc6lOZPpBj7u9kjjDVnk76DYnLDqP3Da2s
|
18
|
+
i7b0DNYxm2gt1VSZfOuJHv7z85SLcJQsg+3ymBUCgYBrOpFX0d3Cw3COjvRitiox
|
19
|
+
YJtjl411uf2fb2EHg4xAHcBlBn8rFDOROyUkPIOutBn1a5kh61yVCWiyMwiOy42K
|
20
|
+
ixz+iEKhx+f7FiGYAX9lUKRg4/PGGMxa+gN4EchWpf5TqLCCw3pi03is0BeNsDjt
|
21
|
+
/8EF0t9hLZ+UZ7zDVe79cQKBgGTPi5AlfeW2V96BHcfX31jfR8RLY1v4pj4zKrKo
|
22
|
+
SRO2IKW4a6pMkBOuC/9UORJGocPCKY0y5sfduMrxfk2LQUhl4sS6JPNdkhxbZ9IB
|
23
|
+
0T2SqUc1OMN8QlJzIDYTBYFO9S56Q6U/nq2NY+zQesNYh/iCzj1viIDRm93vOJFX
|
24
|
+
DNbpAoGBALlQvzzMsT3/fPYn8moQiUCJ9XRZ4X2qwYy5Q8J8QvutI+j9o9+pJBhc
|
25
|
+
3zSlB8HHa7asf27GUbYtv7oFDpqqcC6EFtvfp1OCiX/OjBIJA1YXTFG3YWC5ngC4
|
26
|
+
JPxyTn4MdoX0enm8PRDg7CSZwa4AK1MIYetbiuJgWJ2wKXDFxuGH
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1 @@
|
|
1
|
+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCbFlHJ++BcXGU9b2K+jF990r16uqkKnWiK2CFS0PFvM9IJs3CoGiIlyc9UD9O4LEyeu5Rw0RdiAp9MvyUPcDUeibw3WlMCFJ53mbioAapMy5tPXmxxJH5KcN2uJKESsH/1hJv0tWfVpHQywVLcf/7HWPjDl3qEFqzwGEN+5V3XqyG+hoA4rLTLDL40G68bL/oC7ere3sz3B16U4NGdgtJZapot5gTFErFZZztql76h25Ch7isE1XAaYg6NY4z1oU8Q9Ud0sY74tDI8TF165LStb3prf1TinwaMbOyuQ1wrNU4aMzekiwazeo6LtHMnfPjweIGP01PwjZ8WkYcRF6tt digital_ocean provider test key
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-digitalocean
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
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-03-
|
12
|
+
date: 2013-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -64,6 +64,7 @@ email:
|
|
64
64
|
- john.m.bender@gmail.com
|
65
65
|
executables:
|
66
66
|
- build.sh
|
67
|
+
- test_run.sh
|
67
68
|
extensions: []
|
68
69
|
extra_rdoc_files: []
|
69
70
|
files:
|
@@ -73,7 +74,9 @@ files:
|
|
73
74
|
- README.md
|
74
75
|
- Rakefile
|
75
76
|
- bin/build.sh
|
77
|
+
- bin/test_run.sh
|
76
78
|
- box/Vagrantfile
|
79
|
+
- box/cookbooks/foo/recipes/default.rb
|
77
80
|
- box/digital_ocean.box
|
78
81
|
- box/metadata.json
|
79
82
|
- lib/vagrant-digitalocean.rb
|
@@ -100,6 +103,12 @@ files:
|
|
100
103
|
- scripts/nfs/debian.sh
|
101
104
|
- scripts/nfs/redhat.sh
|
102
105
|
- scripts/sudo/redhat.sh
|
106
|
+
- test/Vagrantfile.centos
|
107
|
+
- test/Vagrantfile.ubuntu
|
108
|
+
- test/cookbooks/test/recipes/default.rb
|
109
|
+
- test/provision.sh
|
110
|
+
- test/test_id_rsa
|
111
|
+
- test/test_id_rsa.pub
|
103
112
|
- vagrant-digitalocean.gemspec
|
104
113
|
homepage:
|
105
114
|
licenses: []
|
@@ -125,4 +134,10 @@ rubygems_version: 1.8.23
|
|
125
134
|
signing_key:
|
126
135
|
specification_version: 3
|
127
136
|
summary: Enables Vagrant to manage Digital Ocean droplets
|
128
|
-
test_files:
|
137
|
+
test_files:
|
138
|
+
- test/Vagrantfile.centos
|
139
|
+
- test/Vagrantfile.ubuntu
|
140
|
+
- test/cookbooks/test/recipes/default.rb
|
141
|
+
- test/provision.sh
|
142
|
+
- test/test_id_rsa
|
143
|
+
- test/test_id_rsa.pub
|