vagrant-digitalocean 0.4.1 → 0.5.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.
- data/Gemfile +1 -1
- data/lib/vagrant-digitalocean/actions/destroy.rb +8 -3
- data/lib/vagrant-digitalocean/actions/rebuild.rb +13 -0
- data/lib/vagrant-digitalocean/actions/setup_key.rb +1 -0
- data/lib/vagrant-digitalocean/actions/setup_user.rb +4 -1
- data/lib/vagrant-digitalocean/actions/sync_folders.rb +4 -1
- data/lib/vagrant-digitalocean/config.rb +1 -0
- data/lib/vagrant-digitalocean/helpers/client.rb +3 -0
- data/lib/vagrant-digitalocean/version.rb +1 -1
- metadata +8 -2
data/Gemfile
CHANGED
@@ -17,9 +17,14 @@ module VagrantPlugins
|
|
17
17
|
# submit destroy droplet request
|
18
18
|
result = @client.request("/droplets/#{@machine.id}/destroy")
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
env[:ui].info I18n.t('vagrant_digital_ocean.info.destroying')
|
21
|
+
|
22
|
+
# wait for destroy request to make progress before exiting
|
23
|
+
@client.wait_for_event(env, result['event_id']) do |response|
|
24
|
+
if response['event']['percentage'] != nil
|
25
|
+
return
|
26
|
+
end
|
27
|
+
end
|
23
28
|
|
24
29
|
# set the machine id to nil to cleanup local vagrant state
|
25
30
|
@machine.id = nil
|
@@ -5,6 +5,7 @@ module VagrantPlugins
|
|
5
5
|
module Actions
|
6
6
|
class Rebuild
|
7
7
|
include Helpers::Client
|
8
|
+
include Vagrant::Util::Retryable
|
8
9
|
|
9
10
|
def initialize(app, env)
|
10
11
|
@app = app
|
@@ -31,6 +32,18 @@ module VagrantPlugins
|
|
31
32
|
# refresh droplet state with provider
|
32
33
|
Provider.droplet(@machine, :refresh => true)
|
33
34
|
|
35
|
+
# wait for ssh to be ready
|
36
|
+
switch_user = @machine.provider_config.setup?
|
37
|
+
user = @machine.config.ssh.username
|
38
|
+
@machine.config.ssh.username = 'root' if switch_user
|
39
|
+
|
40
|
+
retryable(:tries => 120, :sleep => 10) do
|
41
|
+
next if env[:interrupted]
|
42
|
+
raise 'not ready' if !@machine.communicate.ready?
|
43
|
+
end
|
44
|
+
|
45
|
+
@machine.config.ssh.username = user
|
46
|
+
|
34
47
|
@app.call(env)
|
35
48
|
end
|
36
49
|
end
|
@@ -38,6 +38,7 @@ module VagrantPlugins
|
|
38
38
|
def create_ssh_key(name, env)
|
39
39
|
# assumes public key exists on the same path as private key with .pub ext
|
40
40
|
path = @machine.config.ssh.private_key_path
|
41
|
+
path = path[0] if path.is_a?(Array)
|
41
42
|
path = File.expand_path(path, @machine.env.root_path)
|
42
43
|
pub_key = DigitalOcean.public_key(path)
|
43
44
|
|
@@ -25,7 +25,7 @@ module VagrantPlugins
|
|
25
25
|
|
26
26
|
# create user account
|
27
27
|
@machine.communicate.execute(<<-BASH)
|
28
|
-
if ! (grep
|
28
|
+
if ! (grep ^#{user}: /etc/passwd); then
|
29
29
|
useradd -m -s /bin/bash #{user};
|
30
30
|
fi
|
31
31
|
BASH
|
@@ -34,6 +34,8 @@ module VagrantPlugins
|
|
34
34
|
@machine.communicate.execute(<<-BASH)
|
35
35
|
if ! (grep #{user} /etc/sudoers); then
|
36
36
|
echo "#{user} ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers;
|
37
|
+
else
|
38
|
+
sed -i -e "/#{user}/ s/=.*/=(ALL:ALL) NOPASSWD: ALL/" /etc/sudoers;
|
37
39
|
fi
|
38
40
|
BASH
|
39
41
|
|
@@ -42,6 +44,7 @@ module VagrantPlugins
|
|
42
44
|
|
43
45
|
# add the specified key to the authorized keys file
|
44
46
|
path = @machine.config.ssh.private_key_path
|
47
|
+
path = path[0] if path.is_a?(Array)
|
45
48
|
path = File.expand_path(path, @machine.env.root_path)
|
46
49
|
pub_key = DigitalOcean.public_key(path)
|
47
50
|
@machine.communicate.execute(<<-BASH)
|
@@ -44,10 +44,13 @@ module VagrantPlugins
|
|
44
44
|
@machine.communicate.sudo(
|
45
45
|
"chown -R #{ssh_info[:username]} #{guestpath}")
|
46
46
|
|
47
|
+
key = ssh_info[:private_key_path]
|
48
|
+
key = key[0] if key.is_a?(Array)
|
49
|
+
|
47
50
|
# rsync over to the guest path using the ssh info
|
48
51
|
command = [
|
49
52
|
"rsync", "--verbose", "--archive", "-z", "--delete",
|
50
|
-
"-e", "ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no -i '#{
|
53
|
+
"-e", "ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no -i '#{key}'",
|
51
54
|
hostpath,
|
52
55
|
"#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"]
|
53
56
|
|
@@ -43,6 +43,7 @@ module VagrantPlugins
|
|
43
43
|
errors << I18n.t('vagrant_digital_ocean.config.api_key') if !@api_key
|
44
44
|
|
45
45
|
key = machine.config.ssh.private_key_path
|
46
|
+
key = key[0] if key.is_a?(Array)
|
46
47
|
if !key
|
47
48
|
errors << I18n.t('vagrant_digital_ocean.config.private_key')
|
48
49
|
elsif !File.file?(File.expand_path("#{key}.pub", machine.env.root_path))
|
@@ -15,6 +15,7 @@ module VagrantPlugins
|
|
15
15
|
include Vagrant::Util::Retryable
|
16
16
|
|
17
17
|
def initialize(machine)
|
18
|
+
@logger = Log4r::Logger.new('vagrant::digitalocean::apiclient')
|
18
19
|
@config = machine.provider_config
|
19
20
|
@client = Faraday.new({
|
20
21
|
:url => 'https://api.digitalocean.com/',
|
@@ -26,6 +27,7 @@ module VagrantPlugins
|
|
26
27
|
|
27
28
|
def request(path, params = {})
|
28
29
|
begin
|
30
|
+
@logger.info "Request: #{path}"
|
29
31
|
result = @client.get(path, params = params.merge({
|
30
32
|
:client_id => @config.client_id,
|
31
33
|
:api_key => @config.api_key
|
@@ -46,6 +48,7 @@ module VagrantPlugins
|
|
46
48
|
|
47
49
|
begin
|
48
50
|
body = JSON.parse(result.body)
|
51
|
+
@logger.info "Response: #{body}"
|
49
52
|
rescue JSON::ParserError => e
|
50
53
|
raise(Errors::JSONError, {
|
51
54
|
:message => e.message,
|
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.
|
4
|
+
version: 0.5.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-10
|
12
|
+
date: 2013-12-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -115,12 +115,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
115
|
- - ! '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
|
+
segments:
|
119
|
+
- 0
|
120
|
+
hash: -3657554704749346690
|
118
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
122
|
none: false
|
120
123
|
requirements:
|
121
124
|
- - ! '>='
|
122
125
|
- !ruby/object:Gem::Version
|
123
126
|
version: '0'
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
hash: -3657554704749346690
|
124
130
|
requirements: []
|
125
131
|
rubyforge_project:
|
126
132
|
rubygems_version: 1.8.23
|