vagrant-rimu 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +12 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +1170 -0
  6. data/.travis.yml +55 -0
  7. data/Gemfile +23 -0
  8. data/LICENSE +373 -0
  9. data/README.md +109 -0
  10. data/Rakefile +6 -0
  11. data/Vagrantfile +6 -0
  12. data/gemfiles/vagrant_1.5.gemfile +18 -0
  13. data/gemfiles/vagrant_1.6.gemfile +18 -0
  14. data/gemfiles/vagrant_1.7.gemfile +18 -0
  15. data/lib/vagrant-rimu/actions/billing_methods.rb +20 -0
  16. data/lib/vagrant-rimu/actions/connect_to_rimu.rb +23 -0
  17. data/lib/vagrant-rimu/actions/create.rb +91 -0
  18. data/lib/vagrant-rimu/actions/is_created.rb +16 -0
  19. data/lib/vagrant-rimu/actions/is_stopped.rb +17 -0
  20. data/lib/vagrant-rimu/actions/list_distributions.rb +20 -0
  21. data/lib/vagrant-rimu/actions/list_servers.rb +20 -0
  22. data/lib/vagrant-rimu/actions/message_already_created.rb +16 -0
  23. data/lib/vagrant-rimu/actions/message_already_off.rb +16 -0
  24. data/lib/vagrant-rimu/actions/message_not_created.rb +16 -0
  25. data/lib/vagrant-rimu/actions/message_will_not_destroy.rb +17 -0
  26. data/lib/vagrant-rimu/actions/modify_provision_path.rb +37 -0
  27. data/lib/vagrant-rimu/actions/move.rb +22 -0
  28. data/lib/vagrant-rimu/actions/read_ssh_info.rb +43 -0
  29. data/lib/vagrant-rimu/actions/read_state.rb +37 -0
  30. data/lib/vagrant-rimu/actions/rebuild.rb +52 -0
  31. data/lib/vagrant-rimu/actions/reload.rb +23 -0
  32. data/lib/vagrant-rimu/actions/setup_sudo.rb +43 -0
  33. data/lib/vagrant-rimu/actions/setup_user.rb +68 -0
  34. data/lib/vagrant-rimu/actions/start_instance.rb +29 -0
  35. data/lib/vagrant-rimu/actions/stop_instance.rb +26 -0
  36. data/lib/vagrant-rimu/actions/terminate_instance.rb +26 -0
  37. data/lib/vagrant-rimu/actions.rb +237 -0
  38. data/lib/vagrant-rimu/commands/billing_methods.rb +18 -0
  39. data/lib/vagrant-rimu/commands/distributions.rb +18 -0
  40. data/lib/vagrant-rimu/commands/list_servers.rb +18 -0
  41. data/lib/vagrant-rimu/commands/move.rb +18 -0
  42. data/lib/vagrant-rimu/commands/rebuild.rb +20 -0
  43. data/lib/vagrant-rimu/commands/root.rb +67 -0
  44. data/lib/vagrant-rimu/config.rb +190 -0
  45. data/lib/vagrant-rimu/errors.rb +21 -0
  46. data/lib/vagrant-rimu/plugin.rb +80 -0
  47. data/lib/vagrant-rimu/provider.rb +54 -0
  48. data/lib/vagrant-rimu/version.rb +5 -0
  49. data/lib/vagrant-rimu.rb +20 -0
  50. data/locales/en.yml +79 -0
  51. data/spec/spec_helper.rb +29 -0
  52. data/spec/vagrant-rimu/actions/connect_to_rimu_spec.rb +38 -0
  53. data/spec/vagrant-rimu/actions/message_already_created_spec.rb +33 -0
  54. data/spec/vagrant-rimu/actions/message_already_off_spec.rb +33 -0
  55. data/spec/vagrant-rimu/actions/message_not_created_spec.rb +33 -0
  56. data/spec/vagrant-rimu/actions/message_will_not_destroy_spec.rb +36 -0
  57. data/spec/vagrant-rimu/actions/modify_provision_path_spec.rb +81 -0
  58. data/spec/vagrant-rimu/actions/read_ssh_info_spec.rb +62 -0
  59. data/spec/vagrant-rimu/actions/read_state_spec.rb +59 -0
  60. data/spec/vagrant-rimu/actions/rebuild_spec.rb +148 -0
  61. data/spec/vagrant-rimu/actions/reload_spec.rb +42 -0
  62. data/spec/vagrant-rimu/actions/setup_sudo_spec.rb +94 -0
  63. data/spec/vagrant-rimu/actions/setup_user_spec.rb +78 -0
  64. data/spec/vagrant-rimu/actions/start_instance_spec.rb +64 -0
  65. data/spec/vagrant-rimu/actions/stop_instance_spec.rb +57 -0
  66. data/spec/vagrant-rimu/actions/terminate_instance_spec.rb +54 -0
  67. data/spec/vagrant-rimu/actions_spec.rb +22 -0
  68. data/spec/vagrant-rimu/commands/billing_methods_spec.rb +4 -0
  69. data/spec/vagrant-rimu/commands/distributions_spec.rb +4 -0
  70. data/spec/vagrant-rimu/commands/list_servers_spec.rb +4 -0
  71. data/spec/vagrant-rimu/commands/move_spec.rb +4 -0
  72. data/spec/vagrant-rimu/commands/rebuild_spec.rb +4 -0
  73. data/spec/vagrant-rimu/commands/root_spec.rb +4 -0
  74. data/spec/vagrant-rimu/config_spec.rb +162 -0
  75. data/spec/vagrant-rimu/provider_spec.rb +13 -0
  76. data/test/Vagrantfile +30 -0
  77. data/test/scripts/provision.sh +3 -0
  78. data/test/test.sh +12 -0
  79. data/test/test_rimu_id_rsa +51 -0
  80. data/test/test_rimu_id_rsa.pub +1 -0
  81. data/vagrant-rimu.gemspec +25 -0
  82. metadata +238 -0
@@ -0,0 +1,91 @@
1
+ require 'log4r'
2
+ require 'vagrant'
3
+
4
+ module VagrantPlugins
5
+ module Rimu
6
+ module Actions
7
+ class Create
8
+ include Vagrant::Util::Retryable
9
+ def initialize(app, env)
10
+ @app = app
11
+ @client = env[:rimu_api]
12
+ @machine = env[:machine]
13
+ @logger = Log4r::Logger.new('vagrant::rimu::create')
14
+ end
15
+
16
+ def call(env)
17
+ env[:ui].info I18n.t('vagrant_rimu.creating')
18
+ params = {
19
+ :billing_oid => @machine.provider_config.billing_id,
20
+ :dc_location => @machine.provider_config.data_centre,
21
+ :host_server_oid => @machine.provider_config.host_server_id,
22
+ :instantiation_options => {
23
+ :domain_name => @machine.provider_config.host_name,
24
+ :password => @machine.provider_config.root_password,
25
+ :distro => @machine.provider_config.distro_code,
26
+ :control_panel => @machine.provider_config.control_panel,
27
+ },
28
+ :instantiation_via_clone_options => {
29
+ :domain_name => @machine.provider_config.host_name,
30
+ :vps_order_oid_to_clone => @machine.provider_config.vps_to_clone,
31
+ },
32
+ :ip_request => {
33
+ :extra_ip_reason => @machine.provider_config.extra_ip_reason,
34
+ :num_ips => @machine.provider_config.num_ips,
35
+ :requested_ips => @machine.provider_config.private_ips,
36
+ },
37
+ :is_just_minimal_init => @machine.provider_config.minimal_init,
38
+ :vps_parameters => {
39
+ :disk_space_mb => @machine.provider_config.disk_space_mb,
40
+ :memory_mb => @machine.provider_config.memory_mb,
41
+ :disk_space_2_mb => @machine.provider_config.disk_space_2_mb,
42
+ },
43
+ :vps_type => @machine.provider_config.vps_type,
44
+ }
45
+ params.delete(:instantiation_via_clone_options) if @machine.provider_config.vps_to_clone.nil?
46
+ params.delete(:instantiation_options) if params.has_key?(:instantiation_via_clone_options)
47
+ if @machine.provider_config.root_password
48
+ root_pass = @machine.provider_config.root_password
49
+ else
50
+ root_pass = Digest::SHA2.new.update(@machine.provider_config.api_key).to_s
51
+ end
52
+ if params.has_key?(:instantiation_options)
53
+ params[:instantiation_options][:password] = root_pass
54
+ end
55
+ result = @client.servers.create(params)
56
+ @machine.id = result.order_oid
57
+ env[:ui].info I18n.t('vagrant_rimu.ip_address', {:ip => result.allocated_ips["primary_ip"]})
58
+ switch_user = @machine.provider_config.setup?
59
+ user = @machine.config.ssh.username
60
+ if switch_user
61
+ @machine.config.ssh.username = 'root'
62
+ @machine.config.ssh.password = root_pass
63
+ end
64
+ if params.has_key?(:instantiation_options)
65
+ retryable(:tries => 120, :sleep => 10) do
66
+ next if env[:interrupted]
67
+ raise 'not ready' if !@machine.communicate.ready?
68
+ end
69
+ end
70
+ @machine.config.ssh.username = user
71
+ @app.call(env)
72
+ end
73
+
74
+ def recover(env)
75
+ return if env['vagrant.error'].is_a?(Vagrant::Errors::VagrantError)
76
+ if @machine.state.id != :not_created
77
+ terminate(env)
78
+ end
79
+ end
80
+
81
+ def terminate(env)
82
+ destroy_env = env.dup
83
+ destroy_env.delete(:interrupted)
84
+ destroy_env[:config_validate] = false
85
+ destroy_env[:force_confirm_destroy] = true
86
+ env[:action_runner].run(Actions.destroy, destroy_env)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class IsCreated
5
+ def initialize(app, _env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:result] = env[:machine].state.id != :not_created
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class IsStopped
5
+ def initialize(app, _env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:result] = env[:machine].state.id == :stopped
11
+
12
+ @app.call(env)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class ListDistributions
5
+ def initialize(app, env)
6
+ @app = app
7
+ @client = env[:rimu_api]
8
+ end
9
+
10
+ def call(env)
11
+ env[:ui].info '%-6s %s' % ['Distro Code', 'Distro Description']
12
+ @client.distributions.each do |dist|
13
+ env[:ui].info '%-6s %s' % [dist.distro_code, dist.distro_description]
14
+ end
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class ListServers
5
+ def initialize(app, env)
6
+ @app = app
7
+ @client = env[:rimu_api]
8
+ end
9
+
10
+ def call(env)
11
+ env[:ui].info '%-8s %-30s %-20s %-10s %-9s' % ['ID', 'Hostname', 'Data Centre', 'Host Server', 'Status']
12
+ @client.orders.orders.each do |o|
13
+ env[:ui].info '%-8s %-30s %-20s %-10s %-9s' % [o.order_oid, o.domain_name, o.location["data_center_location_code"], o.host_server_oid, o.running_state]
14
+ end
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class MessageAlreadyCreated
5
+ def initialize(app, _env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:ui].info(I18n.t('vagrant_rimu.already_status', :status => 'created'))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class MessageAlreadyOff
5
+ def initialize(app, _env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:ui].info(I18n.t("vagrant_rimu.already_status", :status => :off))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class MessageNotCreated
5
+ def initialize(app, _env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:ui].info(I18n.t('vagrant_rimu.not_created'))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ module Actions
4
+ class MessageWillNotDestroy
5
+ def initialize(app, env)
6
+ @app = app
7
+ @machine = env[:machine]
8
+ end
9
+
10
+ def call(env)
11
+ env[:ui].info(I18n.t('vagrant_rimu.will_not_destroy', {:name => @machine.name}))
12
+ @app.call(env)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,37 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class ModifyProvisionPath
7
+ def initialize(app, env)
8
+ @app = app
9
+ @machine = env[:machine]
10
+ @logger = Log4r::Logger.new('vagrant::rimu::modify_provision_path')
11
+ end
12
+
13
+ def call(env)
14
+ # check if provisioning is enabled
15
+ enabled = true
16
+ enabled = env[:provision_enabled] if env.has_key?(:provision_enabled)
17
+ return @app.call(env) if !enabled
18
+
19
+ username = @machine.ssh_info()[:username]
20
+
21
+ # change ownership of the provisioning path recursively to the
22
+ # ssh user
23
+ #
24
+ @machine.config.vm.provisioners.each do |provisioner|
25
+ cfg = provisioner.config
26
+ path = cfg.upload_path if cfg.respond_to? :upload_path
27
+ path = cfg.provisioning_path if cfg.respond_to? :provisioning_path
28
+ @machine.communicate.sudo("chown -R #{username} #{path}",
29
+ :error_check => false)
30
+ end
31
+
32
+ @app.call(env)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class Move
7
+ def initialize(app, env)
8
+ @app = app
9
+ @machine = env[:machine]
10
+ @client = client
11
+ @logger = Log4r::Logger.new('vagrant::rimu::move')
12
+ end
13
+
14
+ def call(env)
15
+ env[:ui].info I18n.t('vagrant_rimu.move')
16
+ fail 'not implemented'
17
+ @app.call(env)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,43 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ # This action reads the SSH info for the machine and puts it into the
7
+ # `:machine_ssh_info` key in the environment.
8
+ class ReadSSHInfo
9
+ def initialize(app, env)
10
+ @app = app
11
+ @machine = env[:machine]
12
+ @client = env[:rimu_api]
13
+ @logger = Log4r::Logger.new("vagrant_rimu::action::read_ssh_info")
14
+ end
15
+
16
+ def call(env)
17
+ env[:machine_ssh_info] = read_ssh_info(@client, @machine)
18
+
19
+ @app.call(env)
20
+ end
21
+
22
+ def read_ssh_info(client, machine)
23
+ return nil if machine.id.nil?
24
+
25
+ # Find the machine
26
+ server = client.orders.order(machine.id.to_i)
27
+ if server.nil?
28
+ # The machine can't be found
29
+ @logger.info("Machine couldn't be found, assuming it got destroyed.")
30
+ machine.id = nil
31
+ return nil
32
+ end
33
+
34
+ return {
35
+ :host => server.allocated_ips["primary_ip"],
36
+ :port => 22,
37
+ :username => "root"
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,37 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class ReadState
7
+ def initialize(app, env)
8
+ @app = app
9
+ @machine = env[:machine]
10
+ @client = env[:rimu_api]
11
+ @logger = Log4r::Logger.new('vagrant_rimu::action::read_state')
12
+ end
13
+
14
+ def call(env)
15
+ env[:machine_state] = read_state(@client, @machine)
16
+ @logger.info "Machine state is '#{env[:machine_state]}'"
17
+ @app.call(env)
18
+ end
19
+
20
+ def read_state(client, machine)
21
+ return :not_created if machine.id.nil?
22
+ server = client.servers.status(machine.id.to_i)
23
+ return :not_created if server.nil?
24
+ status = server.running_state
25
+ return :not_created if status.nil?
26
+ states = {
27
+ 'RUNNING' => :active,
28
+ 'NOTRUNNING' => :off,
29
+ 'RESTARTING' => :shutting_down,
30
+ 'POWERCYCLING' => :shutting_down,
31
+ }
32
+ states[status.to_s]
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,52 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class Rebuild
7
+ include Vagrant::Util::Retryable
8
+
9
+ def initialize(app, env)
10
+ @app = app
11
+ @client = env[:rimu_api]
12
+ @machine = env[:machine]
13
+ @logger = Log4r::Logger.new('vagrant::rimu::rebuild')
14
+ end
15
+
16
+ def call(env)
17
+ env[:ui].info I18n.t('vagrant_rimu.rebuilding')
18
+ params = {
19
+ :instantiation_options => {
20
+ :domain_name => @machine.provider_config.host_name,
21
+ :password => @machine.provider_config.root_password,
22
+ :distro => @machine.provider_config.distro_code,
23
+ :control_panel => @machine.provider_config.control_panel,
24
+ },
25
+ :instantiation_via_clone_options => {
26
+ :domain_name => @machine.provider_config.host_name,
27
+ :vps_order_oid_to_clone => @machine.provider_config.vps_to_clone,
28
+ },
29
+ :is_just_minimal_init => @machine.provider_config.minimal_init,
30
+ :vps_parameters => {
31
+ :disk_space_mb => @machine.provider_config.disk_space_mb,
32
+ :memory_mb => @machine.provider_config.memory_mb,
33
+ :disk_space_2_mb => @machine.provider_config.disk_space_2_mb,
34
+ },
35
+ }
36
+ params.delete(:instantiation_via_clone_options) if @machine.provider_config.vps_to_clone.nil?
37
+ params.delete(:instantiation_options) if params.has_key?(:instantiation_via_clone_options)
38
+ @client.servers.reinstall(@machine.id.to_i, params)
39
+ switch_user = @machine.provider_config.setup?
40
+ user = @machine.config.ssh.username
41
+ @machine.config.ssh.username = 'root' if switch_user
42
+ retryable(:tries => 120, :sleep => 10) do
43
+ next if env[:interrupted]
44
+ raise 'not ready' if !@machine.communicate.ready?
45
+ end
46
+ @machine.config.ssh.username = user
47
+ @app.call(env)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,23 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class Reload
7
+ def initialize(app, env)
8
+ @app = app
9
+ @client = env[:rimu_api]
10
+ @machine = env[:machine]
11
+ @logger = Log4r::Logger.new('vagrant::rimu::reload')
12
+ end
13
+
14
+ def call(env)
15
+ env[:ui].info I18n.t('vagrant_rimu.reloading')
16
+ @client.servers.reboot(@machine.id.to_i)
17
+
18
+ @app.call(env)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,43 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class SetupSudo
7
+ def initialize(app, env)
8
+ @app = app
9
+ @machine = env[:machine]
10
+ @logger = Log4r::Logger.new('vagrant::rimu::setup_sudo')
11
+ end
12
+
13
+ def call(env)
14
+ # check if setup is enabled
15
+ return @app.call(env) unless @machine.provider_config.setup?
16
+
17
+ # override ssh username to root
18
+ user = @machine.config.ssh.username
19
+ @machine.config.ssh.username = 'root'
20
+
21
+ # check for guest name available in Vagrant 1.2 first
22
+ guest_name = @machine.guest.name if @machine.guest.respond_to?(:name)
23
+ guest_name ||= @machine.guest.to_s.downcase
24
+
25
+ case guest_name
26
+ when /redhat/
27
+ env[:ui].info I18n.t('vagrant_rimu.modifying_sudo')
28
+
29
+ # disable tty requirement for sudo
30
+ @machine.communicate.execute(<<-'BASH')
31
+ sed -i'.bk' -e 's/\(Defaults\s\+requiretty\)/# \1/' /etc/sudoers
32
+ BASH
33
+ end
34
+
35
+ # reset ssh username
36
+ @machine.config.ssh.username = user
37
+
38
+ @app.call(env)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,68 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class SetupUser
7
+ def initialize(app, env)
8
+ @app = app
9
+ @machine = env[:machine]
10
+ @logger = Log4r::Logger.new('vagrant::rimu::setup_user')
11
+ end
12
+
13
+ def call(env)
14
+ # check if setup is enabled
15
+ return @app.call(env) unless @machine.provider_config.setup?
16
+
17
+ # check if a username has been specified
18
+ return @app.call(env) unless @machine.config.ssh.username
19
+
20
+ # override ssh username to root temporarily
21
+ user = @machine.config.ssh.username
22
+ @machine.config.ssh.username = 'root'
23
+
24
+ env[:ui].info I18n.t('vagrant_rimu.creating_user', {
25
+ :user => user
26
+ })
27
+
28
+ # create user account
29
+ @machine.communicate.execute(<<-BASH)
30
+ if ! (grep ^#{user}: /etc/passwd); then
31
+ useradd -m -s /bin/bash #{user};
32
+ fi
33
+ BASH
34
+
35
+ # grant user sudo access with no password requirement
36
+ @machine.communicate.execute(<<-BASH)
37
+ if ! (grep #{user} /etc/sudoers); then
38
+ echo "#{user} ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers;
39
+ else
40
+ sed -i -e "/#{user}/ s/=.*/=(ALL:ALL) NOPASSWD: ALL/" /etc/sudoers;
41
+ fi
42
+ BASH
43
+
44
+ # create the .ssh directory in the users home
45
+ @machine.communicate.execute("su #{user} -c 'mkdir -p ~/.ssh'")
46
+
47
+ # add the specified key to the authorized keys file
48
+ path = @machine.config.ssh.private_key_path
49
+ path = path[0] if path.is_a?(Array)
50
+ path = File.expand_path(path, @machine.env.root_path)
51
+ pub_key = Rimu.public_key(path)
52
+ @machine.communicate.execute(<<-BASH)
53
+ if ! grep '#{pub_key}' /home/#{user}/.ssh/authorized_keys; then
54
+ echo '#{pub_key}' >> /home/#{user}/.ssh/authorized_keys;
55
+ fi
56
+
57
+ chown -R #{user} /home/#{user}/.ssh;
58
+ BASH
59
+
60
+ # reset username
61
+ @machine.config.ssh.username = user
62
+
63
+ @app.call(env)
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,29 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ class StartInstance
7
+ def initialize(app, env)
8
+ @app = app
9
+ @client = env[:rimu_api]
10
+ @machine = env[:machine]
11
+ @logger = Log4r::Logger.new("vagrant_rimu::action::start_instance")
12
+ end
13
+
14
+ def call(env)
15
+ env[:ui].info I18n.t('vagrant_rimu.starting')
16
+ begin
17
+ result = @client.servers.start(@machine.id.to_i)
18
+ raise StandardError, "No response from the API" if result.nil?
19
+ raise StandardError, "VPS is not be running" if result.running_state != 'RUNNING'
20
+ rescue StandardError => e
21
+ raise Errors::ApiError, {:stderr=>e}
22
+ end
23
+ env[:ui].info(I18n.t("vagrant_rimu.ready"))
24
+ @app.call(env)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ # This stops the running instance.
7
+ class StopInstance
8
+ def initialize(app, env)
9
+ @app = app
10
+ @client = env[:rimu_api]
11
+ @logger = Log4r::Logger.new('vagrant_rimu::action::stop_instance')
12
+ end
13
+
14
+ def call(env)
15
+ if env[:machine].state.id == :stopped
16
+ env[:ui].info(I18n.t('vagrant_rimu.already_status', :status => env[:machine].state.id))
17
+ else
18
+ env[:ui].info(I18n.t('vagrant_rimu.stopping'))
19
+ @client.servers.shutdown(env[:machine].id.to_i)
20
+ end
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require 'log4r'
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ module Actions
6
+ # This terminates the running server, if there is one.
7
+ class TerminateInstance
8
+ def initialize(app, env)
9
+ @app = app
10
+ @client = env[:rimu_api]
11
+ @logger = Log4r::Logger.new("vagrant_rimu::action::terminate_instance")
12
+ end
13
+
14
+ def call(env)
15
+ if env[:machine].id
16
+ env[:ui].info(I18n.t("vagrant_rimu.terminating"))
17
+ @client.servers.cancel(env[:machine].id.to_i)
18
+ env[:machine].id = nil
19
+ end
20
+
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end