vagrant_filoo 0.0.2

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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +61 -0
  3. data/Gemfile +14 -0
  4. data/LICENSE +22 -0
  5. data/README.md +207 -0
  6. data/Rakefile +5 -0
  7. data/doc/img_res/filoo_logo.png +0 -0
  8. data/doc/img_res/filoo_wolke.png +0 -0
  9. data/example_box/README.md +13 -0
  10. data/example_box/metadata.json +3 -0
  11. data/filoo.box +0 -0
  12. data/lib/vagrant_filoo/action/create_server.rb +51 -0
  13. data/lib/vagrant_filoo/action/get_images.rb +21 -0
  14. data/lib/vagrant_filoo/action/is_created.rb +22 -0
  15. data/lib/vagrant_filoo/action/is_stopped.rb +18 -0
  16. data/lib/vagrant_filoo/action/message_already_created.rb +16 -0
  17. data/lib/vagrant_filoo/action/message_not_created.rb +16 -0
  18. data/lib/vagrant_filoo/action/read_ssh_info.rb +40 -0
  19. data/lib/vagrant_filoo/action/read_state.rb +65 -0
  20. data/lib/vagrant_filoo/action/start_instance.rb +48 -0
  21. data/lib/vagrant_filoo/action/stop_instance.rb +31 -0
  22. data/lib/vagrant_filoo/action/terminate_instance.rb +24 -0
  23. data/lib/vagrant_filoo/action/test.rb +2 -0
  24. data/lib/vagrant_filoo/action.rb +184 -0
  25. data/lib/vagrant_filoo/cloud_compute.rb +629 -0
  26. data/lib/vagrant_filoo/config.rb +54 -0
  27. data/lib/vagrant_filoo/errors.rb +81 -0
  28. data/lib/vagrant_filoo/plugin.rb +73 -0
  29. data/lib/vagrant_filoo/provider.rb +52 -0
  30. data/lib/vagrant_filoo/util/timer.rb +17 -0
  31. data/lib/vagrant_filoo/version.rb +5 -0
  32. data/lib/vagrant_filoo.rb +17 -0
  33. data/locales/en.yml +122 -0
  34. data/sample_config/Vagrantfile_example +23 -0
  35. data/spec/spec_helper.rb +0 -0
  36. data/spec/vagrant_filoo/config_spec.rb +70 -0
  37. data/templates/metadata.json.erb +3 -0
  38. data/templates/vagrant-filoo_package_Vagrantfile.erb +5 -0
  39. data/vagrant_filoo.gemspec +58 -0
  40. metadata +178 -0
@@ -0,0 +1,24 @@
1
+ require_relative "../cloud_compute"
2
+ module VagrantPlugins
3
+ module Filoo
4
+ module Action
5
+ # This starts a stopped instance.
6
+ class TerminateInstance
7
+ include VagrantPlugins::Filoo::CloudCompute
8
+ DELETE_SERVER_TIMEOUT = 30
9
+ def initialize(app, env)
10
+ @app = app
11
+ @baseUrl = env[:machine].provider_config.filoo_api_entry_point
12
+ @apiKey = env[:machine].provider_config.filoo_api_key
13
+ end
14
+
15
+ def call(env)
16
+ vmid = env[:machine].id
17
+ env[:result] = VagrantPlugins::Filoo::CloudCompute::deleteServer(vmid, @baseUrl, @apiKey)
18
+ env[:machine].id = nil
19
+ @app.call(env)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,2 @@
1
+ class Test
2
+ end
@@ -0,0 +1,184 @@
1
+ require "pathname"
2
+ require "vagrant/action/builder"
3
+ require_relative "action/create_server"
4
+ require_relative "action/get_images"
5
+ require_relative "action/read_state"
6
+ require_relative "action/stop_instance"
7
+ require_relative "action/terminate_instance"
8
+ require_relative "action/read_ssh_info"
9
+
10
+ module VagrantPlugins
11
+ module Filoo
12
+ module Action
13
+
14
+ # This action is called to read the SSH info of the machine. The
15
+ # resulting state is expected to be put into the `:machine_ssh_info`
16
+ # key.
17
+ def self.action_read_ssh_info
18
+ Vagrant::Action::Builder.new.tap do |b|
19
+ b.use ConfigValidate
20
+ b.use ReadSSHInfo
21
+ end
22
+ end
23
+
24
+ # This action is called to halt the remote machine.
25
+ def self.action_halt
26
+ Vagrant::Action::Builder.new.tap do |b|
27
+ b.use ConfigValidate
28
+ b.use Call, IsCreated do |env, b2|
29
+ unless env[:result]
30
+ b2.use MessageNotCreated
31
+ next
32
+ end
33
+ b2.use StopInstance
34
+ end
35
+ end
36
+ end
37
+
38
+ # This action is called to terminate the remote machine.
39
+ def self.action_destroy
40
+ Vagrant::Action::Builder.new.tap do |b|
41
+ b.use Call, DestroyConfirm do |env, b2|
42
+ if env[:result]
43
+ b2.use ConfigValidate
44
+ b2.use Call, IsCreated do |env2, b3|
45
+ unless env2[:result]
46
+ b3.use MessageNotCreated
47
+ next
48
+ end
49
+ b3.use TerminateInstance
50
+ b3.use ProvisionerCleanup if defined?(ProvisionerCleanup)
51
+ end
52
+ else
53
+ b2.use MessageWillNotDestroy
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ # This action is called when `vagrant provision` is called.
60
+ def self.action_provision
61
+ Vagrant::Action::Builder.new.tap do |b|
62
+ b.use ConfigValidate
63
+ b.use Call, IsCreated do |env, b2|
64
+ unless env[:result]
65
+ b2.use MessageNotCreated
66
+ next
67
+ end
68
+
69
+ b2.use Provision
70
+ # b2.use SyncedFolders
71
+ end
72
+ end
73
+ end
74
+
75
+
76
+ # This action is called to bring the box up from nothing.
77
+ include Vagrant::Action::Builtin
78
+ def self.action_up
79
+ Vagrant::Action::Builder.new.tap do |b|
80
+ b.use HandleBox
81
+ b.use ConfigValidate
82
+ b.use BoxCheckOutdated
83
+ b.use Call, IsCreated do |env1, b1|
84
+ if env1[:result]
85
+ b1.use Call, IsStopped do |env2, b1|
86
+ if env2[:result]
87
+ b1.use StartInstance # restart this instance
88
+ else
89
+ b1.use MessageAlreadyCreated # TODO: write a better message
90
+ end
91
+ end
92
+ else
93
+ # b1.use Provision
94
+ # b1.use SyncedFolders
95
+ b1.use GetImages
96
+ b1.use CreateServer do |env2, b2|
97
+ if env2[:result]["vmstatus"] == "stopped"
98
+ b2.use StartInstance # launch a new instance
99
+ elseif env2[:result]["vmstatus"] != "running"
100
+ raise VagrantPlugins::Filoo::Errors::UnexpectedStateError,
101
+ resource: "/vserver/status",
102
+ state: {"vmstatus" => env1[:result]["vmstatus"]},
103
+ message: "Unexpected vmstatus after create Server done, vmstatus " + env1[:result]["vmstatus"],
104
+ description: "Server with vmid #{env1[:result]['vmid']} should be running or stopped "
105
+ end
106
+ end
107
+ b1.use WaitForCommunicator
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ # This action is called to SSH into the machine.
114
+ def self.action_ssh
115
+ Vagrant::Action::Builder.new.tap do |b|
116
+ b.use ConfigValidate
117
+ b.use Call, IsCreated do |env, b2|
118
+ unless env[:result]
119
+ b2.use MessageNotCreated
120
+ next
121
+ end
122
+
123
+ b2.use SSHExec
124
+ end
125
+ end
126
+ end
127
+
128
+
129
+ def self.action_ssh_run
130
+ Vagrant::Action::Builder.new.tap do |b|
131
+ b.use ConfigValidate
132
+ b.use Call, IsCreated do |env, b2|
133
+ unless env[:result]
134
+ b2.use MessageNotCreated
135
+ next
136
+ end
137
+
138
+ b2.use SSHRun
139
+ end
140
+ end
141
+ end
142
+
143
+ # This action is called to read the state of the machine. The
144
+ # resulting state is expected to be put into the `:machine_state_id`
145
+ # key.
146
+ def self.action_read_state
147
+ Vagrant::Action::Builder.new.tap do |b|
148
+ b.use ConfigValidate
149
+ b.use ReadState
150
+ end
151
+ end
152
+
153
+
154
+ def self.action_reload
155
+ Vagrant::Action::Builder.new.tap do |b|
156
+ b.use ConfigValidate
157
+ b.use Call, IsCreated do |env, b2|
158
+ unless env[:result]
159
+ b2.use MessageNotCreated
160
+ next
161
+ end
162
+ b2.use action_halt
163
+ b2.use action_up
164
+ end
165
+ end
166
+ end
167
+
168
+ # The autoload farm
169
+ action_root = Pathname.new(File.expand_path("../action", __FILE__))
170
+ autoload :IsCreated, action_root.join("is_created")
171
+ autoload :IsStopped, action_root.join("is_stopped")
172
+ autoload :MessageAlreadyCreated, action_root.join("message_already_created")
173
+ autoload :MessageNotCreated, action_root.join("message_not_created")
174
+ autoload :ReadSSHInfo, action_root.join("read_ssh_info")
175
+ autoload :ReadState, action_root.join("read_state")
176
+ autoload :CreateServer, action_root.join("create_server")
177
+ autoload :GetImages, action_root.join("get_images")
178
+ autoload :StartInstance, action_root.join("start_instance")
179
+ autoload :StopInstance, action_root.join("stop_instance")
180
+ autoload :TerminateInstance, action_root.join("terminate_instance")
181
+ autoload :Wait, action_root.join("wait")
182
+ end
183
+ end
184
+ end