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 CHANGED
@@ -14,4 +14,5 @@ rdoc
14
14
  spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
+ test/Vagrantfile
17
18
  tmp
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
- ## INSECURE
5
+ ## SSH Key Support
6
6
 
7
- As of this writing there is no support for custom keys on the droplets created by this provider. That means anyone with the vagrant keys and the IP of your droplet has root on your machine.
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
- *Do not use this plugin with sensitive projects*
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 wich 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.
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
@@ -0,0 +1,12 @@
1
+ function run_test_for {
2
+ cp Vagrantfile.$1 Vagrantfile
3
+ vagrant up --provider=digital_ocean
4
+ vagrant provision
5
+ vagrant destroy
6
+ }
7
+
8
+ set -e
9
+
10
+ cd test
11
+ run_test_for centos
12
+ run_test_for ubuntu
data/box/Vagrantfile CHANGED
@@ -12,4 +12,9 @@ Vagrant.configure("2") do |config|
12
12
  vm.region = "New York 1"
13
13
  vm.size = "512MB"
14
14
  end
15
+
16
+ config.vm.provision :chef_solo do |chef|
17
+ chef.cookbooks_path = "cookbooks"
18
+ chef.add_recipe "foo"
19
+ end
15
20
  end
@@ -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 = Helpers::Client.new
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's changed
23
- # TODO use the directory / vm name to qualify the key name
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 => "Vagrant Insecure")
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 => "Vagrant Insecure",
35
- :ssh_pub_key => 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(ActionDispatch.new.destroy, destroy_env)
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 = Helpers::Client.new
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
@@ -4,9 +4,11 @@ module VagrantPlugins
4
4
  module DigitalOcean
5
5
  module Actions
6
6
  class ReadState
7
+ include Helpers::Client
8
+
7
9
  def initialize(app, env)
8
10
  @app, @env = app, env
9
- @client = Helpers::Client.new
11
+ @client = client
10
12
  end
11
13
 
12
14
  def call(env)
@@ -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
- env[:nfs_host_ip] = determine_host_ip.ip_address
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
- # http://stackoverflow.com/questions/5029427/ruby-get-local-ip-nix
39
- # TODO this is currently *nix only according to the above post
41
+ # TODO not thread safe :(
42
+ # TODO google ip seems like a bad idea
40
43
  def determine_host_ip
41
- Socket.ip_address_list.detect do |intf|
42
- intf.ipv4? &&
43
- !intf.ipv4_loopback? &&
44
- !intf.ipv4_multicast? &&
45
- !intf.ipv4_private?
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 = UNSET_VALUE
8
- @api_key = UNSET_VALUE
9
- @image = UNSET_VALUE
10
- @region = UNSET_VALUE
11
- @size = UNSET_VALUE
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 = ENV["DO_CLIENT_ID"] if @client_id == UNSET_VALUE
16
- @api_key = ENV["DO_API_KEY"] if @api_key == UNSET_VALUE
17
- @image = "Ubuntu 12.04 x32 Server" if @image == UNSET_VALUE
18
- @region = "New York 1" if @region == UNSET_VALUE
19
- @size = "512MB" if @size == UNSET_VALUE
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
- class Client
9
- def initialize
10
- @client = Faraday.new(:url => "https://api.digitalocean.com/")
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
- # create the key
15
- result = @client.get(path, params = params.merge({
16
- :client_id => ENV["DO_CLIENT_ID"],
17
- :api_key => ENV["DO_API_KEY"]
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 => Vagrant.source_root + "keys/vagrant"
72
+ :private_key_path => private_key_path
65
73
  }
66
74
  end
67
75
 
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Digitalocean
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
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 API at:
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 API at:
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 key "%{key}".
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"
@@ -1,20 +1,5 @@
1
- # cargo culted from OpsCode's guide at http://wiki.opscode.com/display/chef/Installing+Chef+Client+on+Ubuntu+or+Debian
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
- # install the basics
6
- apt-get install -y wget lsb-release;
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
@@ -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
- # add the repo for ruby and other deps
6
- rpm -Uvh http://rbel.frameos.org/rbel6
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
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ echo "Testing 1 2 3!"
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.2
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-14 00:00:00.000000000 Z
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