vagrant-digitalocean 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/.gitignore +1 -1
  2. data/Gemfile +1 -4
  3. data/LICENSE.txt +2 -1
  4. data/README.md +114 -96
  5. data/Rakefile +8 -10
  6. data/box/digital_ocean.box +0 -0
  7. data/lib/vagrant-digitalocean.rb +12 -4
  8. data/lib/vagrant-digitalocean/actions.rb +159 -0
  9. data/lib/vagrant-digitalocean/actions/check_state.rb +19 -0
  10. data/lib/vagrant-digitalocean/actions/create.rb +36 -21
  11. data/lib/vagrant-digitalocean/actions/destroy.rb +10 -8
  12. data/lib/vagrant-digitalocean/actions/modify_provision_path.rb +15 -17
  13. data/lib/vagrant-digitalocean/actions/power_off.rb +33 -0
  14. data/lib/vagrant-digitalocean/actions/power_on.rb +34 -0
  15. data/lib/vagrant-digitalocean/actions/rebuild.rb +9 -9
  16. data/lib/vagrant-digitalocean/actions/reload.rb +31 -0
  17. data/lib/vagrant-digitalocean/actions/setup_key.rb +56 -0
  18. data/lib/vagrant-digitalocean/actions/setup_provisioner.rb +26 -15
  19. data/lib/vagrant-digitalocean/actions/setup_sudo.rb +19 -12
  20. data/lib/vagrant-digitalocean/actions/setup_user.rb +25 -27
  21. data/lib/vagrant-digitalocean/actions/sync_folders.rb +18 -17
  22. data/lib/vagrant-digitalocean/commands/rebuild.rb +2 -3
  23. data/lib/vagrant-digitalocean/config.rb +30 -33
  24. data/lib/vagrant-digitalocean/errors.rb +0 -2
  25. data/lib/vagrant-digitalocean/helpers/client.rb +13 -15
  26. data/lib/vagrant-digitalocean/plugin.rb +5 -14
  27. data/lib/vagrant-digitalocean/provider.rb +48 -34
  28. data/lib/vagrant-digitalocean/version.rb +1 -1
  29. data/locales/en.yml +32 -40
  30. data/test/Vagrantfile +37 -0
  31. data/test/cookbooks/test/recipes/default.rb +1 -1
  32. data/test/scripts/provision.sh +3 -0
  33. data/test/test.sh +14 -0
  34. metadata +15 -27
  35. data/bin/build.sh +0 -39
  36. data/bin/test_run.sh +0 -15
  37. data/box/Vagrantfile +0 -20
  38. data/box/cookbooks/foo/recipes/default.rb +0 -1
  39. data/lib/vagrant-digitalocean/action.rb +0 -105
  40. data/lib/vagrant-digitalocean/actions/check_ssh_user.rb +0 -46
  41. data/lib/vagrant-digitalocean/actions/is_active.rb +0 -16
  42. data/lib/vagrant-digitalocean/actions/message_is_active.rb +0 -18
  43. data/lib/vagrant-digitalocean/actions/read_state.rb +0 -33
  44. data/lib/vagrant-digitalocean/actions/setup_ssh_key.rb +0 -60
  45. data/lib/vagrant-digitalocean/helpers/file.rb +0 -41
  46. data/lib/vagrant-digitalocean/helpers/translator.rb +0 -20
  47. data/scripts/chef/debian.sh +0 -5
  48. data/scripts/chef/redhat.sh +0 -5
  49. data/scripts/nfs/debian.sh +0 -4
  50. data/scripts/nfs/redhat.sh +0 -11
  51. data/scripts/sudo/redhat.sh +0 -2
  52. data/test/Vagrantfile.centos +0 -19
  53. data/test/Vagrantfile.ubuntu +0 -21
  54. data/test/provision.sh +0 -3
  55. data/test/scripts/setup_user.sh +0 -18
@@ -1,46 +0,0 @@
1
- module VagrantPlugins
2
- module DigitalOcean
3
- module Actions
4
- class CheckSSHUser
5
- include Vagrant::Util::Counter
6
-
7
- def initialize(app, env)
8
- @app = app
9
- @machine = env[:machine]
10
- @translator = Helpers::Translator.new("actions.check_ssh_user")
11
- end
12
-
13
- def call(env)
14
- # return if the machine is set with the default ssh username
15
- return @app.call(env) if @machine.ssh_info()[:username] == "root"
16
-
17
- # check if ssh username account has been provisioned
18
- begin
19
- tries = @machine.config.ssh.max_tries
20
- @machine.config.ssh.max_tries = 0
21
- @machine.communicate.execute("echo")
22
- rescue Vagrant::Errors::SSHAuthenticationFailed
23
- original_username = @machine.ssh_info()[:username]
24
- @machine.provider_config.ssh_username = "root"
25
- env[:ui].info @translator.t('fallback', {
26
- :user => original_username
27
- })
28
-
29
- # TODO remove when vagrant chef provisioning defect fixed
30
- @machine.config.ssh.username = "root"
31
- end
32
-
33
- @machine.config.ssh.max_tries = tries
34
-
35
- @app.call(env)
36
-
37
- # reset ssh username
38
- @machine.provider_config.ssh_username = original_username
39
-
40
- # TODO remove when vagrant chef provisioning defect fixed
41
- @machine.config.ssh.username = original_username
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,16 +0,0 @@
1
- module VagrantPlugins
2
- module DigitalOcean
3
- module Actions
4
- class IsActive
5
- def initialize(app, env)
6
- @app = app
7
- end
8
-
9
- def call(env)
10
- env[:is_active] = env[:machine].state.id == :active
11
- @app.call(env)
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,18 +0,0 @@
1
- module VagrantPlugins
2
- module DigitalOcean
3
- module Actions
4
- class MessageIsActive
5
- def initialize(app, env)
6
- @app = app
7
- @translator = Helpers::Translator.new("actions.message_is_active")
8
- end
9
-
10
- def call(env)
11
- msg = env[:is_active] ? "active" : "not_active"
12
- env[:ui].info @translator.t(msg)
13
- @app.call(env)
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,33 +0,0 @@
1
- require "vagrant-digitalocean/helpers/client"
2
-
3
- module VagrantPlugins
4
- module DigitalOcean
5
- module Actions
6
- class ReadState
7
- include Helpers::Client
8
-
9
- def initialize(app, env)
10
- @app, @env = app, env
11
- @client = client
12
- end
13
-
14
- def call(env)
15
- # If we have a machine id ask the api what the state is
16
- if env[:machine].id
17
- droplet = @client.request("/droplets/#{env[:machine].id}")["droplet"]
18
-
19
- env[:machine_state] = droplet
20
- end
21
-
22
- # no id signals that the machine hasn't yet been created
23
- env[:machine_state] ||= {"status" => :not_created}
24
-
25
- # TODO there has to be a better way, see UP for when
26
- # :machine_just_created is set
27
- env[:machine_state][:just_created] = env[:machine_just_created]
28
- @app.call(env)
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,60 +0,0 @@
1
- require "vagrant-digitalocean/helpers/client"
2
-
3
- module VagrantPlugins
4
- module DigitalOcean
5
- module Actions
6
- class SetupSSHKey
7
- include Helpers::Client
8
-
9
- def initialize(app, env)
10
- @app, @env = app, env
11
- @client = client
12
- @translator = Helpers::Translator.new("actions.setup_ssh_key")
13
- end
14
-
15
- # TODO check the content of the key to see if it has changed
16
- def call(env)
17
- ssh_key_name = env[:machine].provider_config.ssh_key_name
18
-
19
- begin
20
- # assigns existing ssh key id to env for use by other commands
21
- env[:ssh_key_id] = @client
22
- .request("/ssh_keys/")
23
- .find_id(:ssh_keys, :name => ssh_key_name)
24
-
25
- env[:ui].info @translator.t("existing_key", { :name => ssh_key_name })
26
- rescue Errors::ResultMatchError
27
- env[:ssh_key_id] = create_ssh_key(ssh_key_name, env)
28
- end
29
-
30
- @app.call(env)
31
- end
32
-
33
- private
34
-
35
- def create_ssh_key(name, env)
36
- # assumes public key exists on the same path as private key with .pub ext
37
- path = env[:machine].provider_config.ssh_private_key_path
38
- path = env[:machine].config.ssh.private_key_path if !path
39
- path = File.expand_path("#{path}.pub", env[:machine].env.root_path)
40
-
41
- env[:ui].info @translator.t("new_key", { :name => name, :path => path })
42
- begin
43
- file = File.open(path)
44
- key = file.read
45
- file.close
46
- rescue
47
- raise Errors::PublicKeyError,
48
- :path => path
49
- end
50
-
51
- result = @client.request("/ssh_keys/new", {
52
- :name => name,
53
- :ssh_pub_key => key
54
- })
55
- result["ssh_key"]["id"]
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,41 +0,0 @@
1
-
2
-
3
- module VagrantPlugins
4
- module DigitalOcean
5
- module Helpers
6
- module File
7
- # TODO the optional exceptions are clumsy
8
- def read_file(relative_path, except = true)
9
- content = ""
10
- path = ::File.join(DigitalOcean.source_root, relative_path)
11
-
12
- begin
13
- ::File.open(path) do |file|
14
- content = file.read
15
- end
16
- rescue Errno::ENOENT => e
17
- # ignore the missing file if except is false
18
- raise(e) if except
19
- end
20
-
21
- content
22
- end
23
-
24
- # TODO the optional exceptions are clumsy
25
- # read a script and match it to the guest operating system
26
- def read_script(dir, guest, except = true)
27
- script_dir = ::File.join("scripts", dir)
28
- guest_name = guest.class.to_s
29
-
30
- if guest_name =~ /Debian/ || guest_name =~ /Ubuntu/
31
- read_file(::File.join(script_dir, "debian.sh"), except)
32
- elsif guest_name =~ /RedHat/
33
- read_file(::File.join(script_dir, "redhat.sh"), except)
34
- else
35
- raise "unsupported guest operating system" if except
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,20 +0,0 @@
1
- module VagrantPlugins
2
- module DigitalOcean
3
- module Helpers
4
- class Translator
5
- def self.plugin_namespace=(val)
6
- @@plugin_namespace = val
7
- end
8
-
9
- def initialize(namespace)
10
- @namespace = namespace
11
- end
12
-
13
- def t(keys, opts = {})
14
- value = I18n.t("#{@@plugin_namespace}.#{@namespace}.#{keys}", opts)
15
- opts[:progress] == false ? value : value + "..."
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,5 +0,0 @@
1
- # skip if chef-solo is present
2
- if (which chef-solo); then exit 0; fi
3
-
4
- # download and run the omnibus installer
5
- wget -O - http://www.opscode.com/chef/install.sh | bash
@@ -1,5 +0,0 @@
1
- # skip if chef-solo is present
2
- if (which chef-solo); then exit 0; fi
3
-
4
- # download and run the omnibus installer
5
- wget -O - http://www.opscode.com/chef/install.sh | bash
@@ -1,4 +0,0 @@
1
- # install the nfs-kernel server
2
- if !(which nfsstat); then
3
- apt-get install -y nfs-kernel-server;
4
- fi
@@ -1,11 +0,0 @@
1
- if (service --status-all | grep nfs); then exit 0; fi;
2
-
3
- # install the nfs-kernel server
4
- yum install -y nfs-utils nfs-utils-lib;
5
-
6
- # add to startup
7
- chkconfig nfs on;
8
-
9
- # make sure it's on after the install
10
- service rpcbind start;
11
- service nfs start;
@@ -1,2 +0,0 @@
1
- # fix the default sudoers file to prevent the tty requirement
2
- sed -i'.bk' -e 's/\(Defaults\s\+requiretty\)/# \1/' /etc/sudoers
@@ -1,19 +0,0 @@
1
- Vagrant.configure("2") do |config|
2
- config.vm.box = "digital_ocean"
3
- config.ssh.private_key_path = "test_id_rsa"
4
-
5
- config.vm.provider :digital_ocean do |vm|
6
- vm.client_id = ENV["DO_CLIENT_ID"]
7
- vm.api_key = ENV["DO_API_KEY"]
8
- vm.image = "CentOS 6.3 x64"
9
- vm.region = "New York 1"
10
- vm.size = "512MB"
11
- end
12
-
13
- config.vm.provision :shell, :path => "provision.sh"
14
-
15
- config.vm.provision :chef_solo do |chef|
16
- chef.cookbooks_path = "cookbooks"
17
- chef.add_recipe "test"
18
- end
19
- end
@@ -1,21 +0,0 @@
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.ssh_private_key_path = "test_id_rsa"
12
- vm.ssh_username = "tester"
13
- end
14
-
15
- config.vm.provision :shell, :path => "scripts/setup_user.sh"
16
-
17
- config.vm.provision :chef_solo do |chef|
18
- chef.cookbooks_path = "cookbooks"
19
- chef.add_recipe "test"
20
- end
21
- end
data/test/provision.sh DELETED
@@ -1,3 +0,0 @@
1
- #!/bin/bash
2
-
3
- echo "Testing 1 2 3!"
@@ -1,18 +0,0 @@
1
- #!/bin/bash
2
-
3
- if ! grep tester /etc/passwd; then
4
- useradd -m -s /bin/bash tester
5
- fi
6
-
7
- if ! grep tester /etc/sudoers; then
8
- echo "tester ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
9
- fi
10
-
11
- mkdir -p /home/tester/.ssh
12
- chown tester:tester /home/tester/.ssh
13
-
14
- pub_key="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCbFlHJ++BcXGU9b2K+jF990r16uqkKnWiK2CFS0PFvM9IJs3CoGiIlyc9UD9O4LEyeu5Rw0RdiAp9MvyUPcDUeibw3WlMCFJ53mbioAapMy5tPXmxxJH5KcN2uJKESsH/1hJv0tWfVpHQywVLcf/7HWPjDl3qEFqzwGEN+5V3XqyG+hoA4rLTLDL40G68bL/oC7ere3sz3B16U4NGdgtJZapot5gTFErFZZztql76h25Ch7isE1XAaYg6NY4z1oU8Q9Ud0sY74tDI8TF165LStb3prf1TinwaMbOyuQ1wrNU4aMzekiwazeo6LtHMnfPjweIGP01PwjZ8WkYcRF6tt digital_ocean provider test key"
15
-
16
- if ! [ -e /home/tester/.ssh/authorized_keys ]; then
17
- echo "${pub_key}" > /home/tester/.ssh/authorized_keys
18
- fi