vagrant-vmpooler 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +21 -0
  3. data/Gemfile +15 -0
  4. data/LICENSE +15 -0
  5. data/README.md +143 -0
  6. data/Rakefile +22 -0
  7. data/example_box/Vagrantfile +22 -0
  8. data/example_box/dummy.box +0 -0
  9. data/example_box/metadata.json +3 -0
  10. data/example_box/readme.md +8 -0
  11. data/lib/vagrant-vmpooler.rb +53 -0
  12. data/lib/vagrant-vmpooler/action.rb +212 -0
  13. data/lib/vagrant-vmpooler/action/create_server.rb +103 -0
  14. data/lib/vagrant-vmpooler/action/delete_server.rb +50 -0
  15. data/lib/vagrant-vmpooler/action/hard_reboot_server.rb +24 -0
  16. data/lib/vagrant-vmpooler/action/is_created.rb +16 -0
  17. data/lib/vagrant-vmpooler/action/is_paused.rb +16 -0
  18. data/lib/vagrant-vmpooler/action/is_suspended.rb +16 -0
  19. data/lib/vagrant-vmpooler/action/message_already_created.rb +16 -0
  20. data/lib/vagrant-vmpooler/action/message_not_created.rb +16 -0
  21. data/lib/vagrant-vmpooler/action/message_server_running.rb +16 -0
  22. data/lib/vagrant-vmpooler/action/message_will_not_destroy.rb +16 -0
  23. data/lib/vagrant-vmpooler/action/pause_server.rb +24 -0
  24. data/lib/vagrant-vmpooler/action/read_ssh_info.rb +56 -0
  25. data/lib/vagrant-vmpooler/action/read_state.rb +41 -0
  26. data/lib/vagrant-vmpooler/action/reboot_server.rb +24 -0
  27. data/lib/vagrant-vmpooler/action/resume_server.rb +25 -0
  28. data/lib/vagrant-vmpooler/action/setup_rsync.rb +40 -0
  29. data/lib/vagrant-vmpooler/action/suspend_server.rb +24 -0
  30. data/lib/vagrant-vmpooler/action/sync_folders.rb +104 -0
  31. data/lib/vagrant-vmpooler/action/take_snapshot.rb +35 -0
  32. data/lib/vagrant-vmpooler/action/wait_for_state.rb +38 -0
  33. data/lib/vagrant-vmpooler/config.rb +100 -0
  34. data/lib/vagrant-vmpooler/errors.rb +31 -0
  35. data/lib/vagrant-vmpooler/plugin.rb +30 -0
  36. data/lib/vagrant-vmpooler/provider.rb +55 -0
  37. data/lib/vagrant-vmpooler/version.rb +5 -0
  38. data/locales/en.yml +151 -0
  39. data/spec/spec_helper.rb +0 -0
  40. data/spec/vagrant-vmpooler/config_spec.rb +44 -0
  41. data/vagrant-vmpooler.gemspec +23 -0
  42. metadata +45 -3
@@ -0,0 +1,103 @@
1
+ require "vmfloaty/pooler"
2
+ require "log4r"
3
+
4
+ require 'vagrant/util/retryable'
5
+
6
+ module VagrantPlugins
7
+ module Vmpooler
8
+ module Action
9
+ class CreateServer
10
+ include Vagrant::Util::Retryable
11
+
12
+ def initialize(app, env)
13
+ @app = app
14
+ @logger = Log4r::Logger.new("vagrant_vmpooler::action::create_server")
15
+ end
16
+
17
+ def call(env)
18
+ # Get the configs
19
+ provider_config = env[:machine].provider_config
20
+
21
+ token = provider_config.token
22
+ url = provider_config.url
23
+ os = provider_config.os
24
+ ttl = provider_config.ttl
25
+ disk = provider_config.disk
26
+ verbose = provider_config.verbose
27
+
28
+ if !url
29
+ raise Errors::NoURLError,
30
+ :message => "There was no provided url to connect to vmpooler with"
31
+ end
32
+
33
+ if !token
34
+ env[:ui].warn("There was no token provided. All vms will only last 2 hours.")
35
+ end
36
+
37
+ if !os
38
+ raise Errors::NoURLError,
39
+ :message => "There was no operatingystem provided"
40
+ end
41
+
42
+ # Output the settings we're going to use to the user
43
+ env[:ui].info(I18n.t("vagrant_vmpooler.launching_server"))
44
+ env[:ui].info(" -- Vmpooler URL: #{url}")
45
+ env[:ui].info(" -- Vmpooler Verbose Mode: #{verbose}")
46
+ env[:ui].info(" -- Image: #{os}")
47
+ env[:ui].info(" -- Additional TTL: #{ttl}") if ttl
48
+ env[:ui].info(" -- Additional Disk: #{disk}") if disk
49
+
50
+ # Create the server
51
+ os_arr = {}
52
+ os_arr[os] = 1
53
+ server = Pooler.retrieve(verbose, os_arr, token, url)
54
+
55
+ # Store the ID right away so we can track it
56
+ # in this case it's the hostname
57
+ if server['ok'] == false
58
+ raise Errors::GetVMError,
59
+ :message => "Could not retrieve vm from pooler:\n #{server}"
60
+ end
61
+
62
+ server_name = server[os]["hostname"]
63
+ env[:machine].id = server_name
64
+
65
+ if ttl
66
+ response_body = Pooler.modify(verbose, url, server_name, token, ttl, nil)
67
+ if response_body['ok'] == false
68
+ env[:ui].warn(I18n.t("vagrant_vmpooler.errors.failed_ttl"))
69
+ end
70
+ end
71
+
72
+ if disk
73
+ response_body = Pooler.disk(verbose, url, server_name, token, disk)
74
+ if response_body['ok'] == false
75
+ env[:ui].warn(I18n.t("vagrant_vmpooler.errors.failed_disk_extend"))
76
+ end
77
+ end
78
+
79
+ if !env[:interrupted]
80
+ # Clear the line one more time so the progress is removed
81
+ env[:ui].clear_line
82
+
83
+ # Wait for SSH to become available
84
+ env[:ui].info(I18n.t("vagrant_vmpooler.waiting_for_ssh"))
85
+ while true
86
+ begin
87
+ # If we're interrupted then just back out
88
+ break if env[:interrupted]
89
+ break if env[:machine].communicate.ready?
90
+ rescue Errno::ENETUNREACH, Errno::EHOSTUNREACH
91
+ end
92
+ sleep 2
93
+ end
94
+
95
+ env[:ui].info(I18n.t("vagrant_vmpooler.ready"))
96
+ end
97
+
98
+ @app.call(env)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,50 @@
1
+ require 'vagrant/util/retryable'
2
+ require 'timeout'
3
+ require 'vmfloaty/pooler'
4
+
5
+ require "log4r"
6
+
7
+ module VagrantPlugins
8
+ module Vmpooler
9
+ module Action
10
+ # This deletes the running server, if there is one.
11
+ class DeleteServer
12
+ include Vagrant::Util::Retryable
13
+
14
+ def initialize(app, env)
15
+ @app = app
16
+ @logger = Log4r::Logger.new("vagrant_vmpooler::action::delete_server")
17
+ end
18
+
19
+ def call(env)
20
+ machine = env[:machine]
21
+ id = machine.id
22
+
23
+ if id
24
+ provider_config = machine.provider_config
25
+ token = provider_config.token
26
+ url = provider_config.url
27
+ verbose = provider_config.verbose
28
+
29
+ env[:ui].info(I18n.t("vagrant_vmpooler.deleting_server"))
30
+
31
+ os = []
32
+ os.push(id)
33
+ response_body = Pooler.delete(verbose, url, os, token)
34
+
35
+ if response_body[id]['ok'] == false
36
+ env[:ui].info(I18n.t("vagrant_vmpooler.not_deleted"))
37
+ else
38
+ env[:ui].info(I18n.t("vagrant_vmpooler.deleted"))
39
+ env[:machine].id = nil
40
+ end
41
+ else
42
+ env[:ui].info(I18n.t("vagrant_vmpooler.not_created"))
43
+ end
44
+
45
+ @app.call(env)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,24 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module Vmpooler
5
+ module Action
6
+ # This hard reboots a running server, if there is one.
7
+ class HardRebootServer
8
+ def initialize(app, env)
9
+ @app = app
10
+ @logger = Log4r::Logger.new("vagrant_vmpooler::action::hard_reboot_server")
11
+ end
12
+
13
+ def call(env)
14
+ if env[:machine].id
15
+ env[:ui].info(I18n.t("vagrant_vmpooler.hard_rebooting_server"))
16
+
17
+ end
18
+
19
+ @app.call(env)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vmpooler
3
+ module Action
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 == :created
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vmpooler
3
+ module Action
4
+ class IsPaused
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:result] = env[:machine].state.id == :paused
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vmpooler
3
+ module Action
4
+ class IsSuspended
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:result] = env[:machine].state.id == :suspended
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vmpooler
3
+ module Action
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_vmpooler.already_created"))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vmpooler
3
+ module Action
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_vmpooler.not_created"))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vmpooler
3
+ module Action
4
+ class MessageServerRunning
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:ui].info(I18n.t("vagrant_vmpooler.server_running", name: env[:machine].id))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module VagrantPlugins
2
+ module Vmpooler
3
+ module Action
4
+ class MessageWillNotDestroy
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env[:ui].info(I18n.t("vagrant_vmpooler.will_not_destroy", name: env[:machine].name))
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module Vmpooler
5
+ module Action
6
+ # This pauses a running server, if there is one.
7
+ class PauseServer
8
+ def initialize(app, env)
9
+ @app = app
10
+ @logger = Log4r::Logger.new("vagrant_vmpooler::action::pause_server")
11
+ end
12
+
13
+ def call(env)
14
+ if env[:machine].id
15
+ env[:ui].info(I18n.t("vagrant_vmpooler.pausing_server"))
16
+
17
+ end
18
+
19
+ @app.call(env)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,56 @@
1
+ require "log4r"
2
+ require "ipaddr"
3
+
4
+ module VagrantPlugins
5
+ module Vmpooler
6
+ module Action
7
+ # This action reads the SSH info for the machine and puts it into the
8
+ # `:machine_ssh_info` key in the environment.
9
+ class ReadSSHInfo
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("vagrant_vmpooler::action::read_ssh_info")
13
+ end
14
+
15
+ def call(env)
16
+ env[:machine_ssh_info] = read_ssh_info(env[:machine])
17
+
18
+ @app.call(env)
19
+ end
20
+
21
+ def read_ssh_info(machine)
22
+ id = machine.id
23
+ return nil if id.nil?
24
+
25
+ provider_config = machine.provider_config
26
+ verbose = provider_config.verbose
27
+ url = provider_config.url
28
+ password = provider_config.password
29
+ os = provider_config.os
30
+
31
+ server = Pooler.query(verbose, url, id)
32
+ if server['ok'] == false
33
+ # The machine can't be found
34
+ @logger.info("Machine couldn't be found, assuming it got destroyed.")
35
+ machine.id = nil
36
+ return nil
37
+ else
38
+ if os =~ /win/i
39
+ username = 'Administrator'
40
+ else
41
+ username = 'root'
42
+ end
43
+
44
+ ssh_info = {
45
+ :host => id,
46
+ :username => username,
47
+ :password => password
48
+ }
49
+ ssh_info.merge! server[id]
50
+ return ssh_info
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,41 @@
1
+ require "log4r"
2
+ require 'vmfloaty/pooler'
3
+
4
+ module VagrantPlugins
5
+ module Vmpooler
6
+ module Action
7
+ # This action reads the state of the machine and puts it in the
8
+ # `:machine_state_id` key in the environment.
9
+ class ReadState
10
+ def initialize(app, env)
11
+ @app = app
12
+ @logger = Log4r::Logger.new("vagrant_vmpooler::action::read_state")
13
+ end
14
+
15
+ def call(env)
16
+ env[:machine_state_id] = read_state(env[:machine])
17
+ @app.call(env)
18
+ end
19
+
20
+ def read_state(machine)
21
+ id = machine.id
22
+ return :not_created if id.nil?
23
+
24
+ provider_config = machine.provider_config
25
+ verbose = provider_config.verbose
26
+ url = provider_config.url
27
+
28
+ server = Pooler.query(verbose, url, id)
29
+ if server['ok'] == false
30
+ @logger.info(I18n.t("vagrant_vmpooler.not_created"))
31
+ machine.id = nil
32
+ return :not_created
33
+ end
34
+
35
+ return :created
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,24 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module Vmpooler
5
+ module Action
6
+ # This reboots a running server, if there is one.
7
+ class RebootServer
8
+ def initialize(app, env)
9
+ @app = app
10
+ @logger = Log4r::Logger.new("vagrant_vmpooler::action::reboot_server")
11
+ end
12
+
13
+ def call(env)
14
+ if env[:machine].id
15
+ env[:ui].info(I18n.t("vagrant_vmpooler.rebooting_server"))
16
+
17
+ end
18
+
19
+ @app.call(env)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end