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.
- checksums.yaml +7 -0
- data/.gitignore +61 -0
- data/Gemfile +14 -0
- data/LICENSE +22 -0
- data/README.md +207 -0
- data/Rakefile +5 -0
- data/doc/img_res/filoo_logo.png +0 -0
- data/doc/img_res/filoo_wolke.png +0 -0
- data/example_box/README.md +13 -0
- data/example_box/metadata.json +3 -0
- data/filoo.box +0 -0
- data/lib/vagrant_filoo/action/create_server.rb +51 -0
- data/lib/vagrant_filoo/action/get_images.rb +21 -0
- data/lib/vagrant_filoo/action/is_created.rb +22 -0
- data/lib/vagrant_filoo/action/is_stopped.rb +18 -0
- data/lib/vagrant_filoo/action/message_already_created.rb +16 -0
- data/lib/vagrant_filoo/action/message_not_created.rb +16 -0
- data/lib/vagrant_filoo/action/read_ssh_info.rb +40 -0
- data/lib/vagrant_filoo/action/read_state.rb +65 -0
- data/lib/vagrant_filoo/action/start_instance.rb +48 -0
- data/lib/vagrant_filoo/action/stop_instance.rb +31 -0
- data/lib/vagrant_filoo/action/terminate_instance.rb +24 -0
- data/lib/vagrant_filoo/action/test.rb +2 -0
- data/lib/vagrant_filoo/action.rb +184 -0
- data/lib/vagrant_filoo/cloud_compute.rb +629 -0
- data/lib/vagrant_filoo/config.rb +54 -0
- data/lib/vagrant_filoo/errors.rb +81 -0
- data/lib/vagrant_filoo/plugin.rb +73 -0
- data/lib/vagrant_filoo/provider.rb +52 -0
- data/lib/vagrant_filoo/util/timer.rb +17 -0
- data/lib/vagrant_filoo/version.rb +5 -0
- data/lib/vagrant_filoo.rb +17 -0
- data/locales/en.yml +122 -0
- data/sample_config/Vagrantfile_example +23 -0
- data/spec/spec_helper.rb +0 -0
- data/spec/vagrant_filoo/config_spec.rb +70 -0
- data/templates/metadata.json.erb +3 -0
- data/templates/vagrant-filoo_package_Vagrantfile.erb +5 -0
- data/vagrant_filoo.gemspec +58 -0
- metadata +178 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c9b0385a665c31b877a060d18231e12bc264b1a9
|
4
|
+
data.tar.gz: 5d9de96e77ef02d20f5736c816099d10ee669bd0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 61964f5d18997c8ecd44ea7d4c7e53c325e8cdec0506dcdeeef55d028d5a6d7fd7c4d87771a8a71806dde8ac8356cc49c2f7fefb5f91f45f7967d6c71dbb35bd
|
7
|
+
data.tar.gz: f5e5a0125cddf965b1ba302e1fed58cc74027a009ca09c1000cdf2ef56634d6e0d494ceaa4a9ddc34be21d3221416e2ef3f2058af5f787fafccccc21d452ac0c
|
data/.gitignore
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.bundle
|
5
|
+
pkg/*
|
6
|
+
tags
|
7
|
+
Gemfile.lock
|
8
|
+
|
9
|
+
.buildpath
|
10
|
+
.project
|
11
|
+
|
12
|
+
/.config
|
13
|
+
/coverage/
|
14
|
+
/InstalledFiles
|
15
|
+
/pkg/
|
16
|
+
/spec/reports/
|
17
|
+
/test/tmp/
|
18
|
+
/test/version_tmp/
|
19
|
+
/tmp/
|
20
|
+
|
21
|
+
## Specific to RubyMotion:
|
22
|
+
.dat*
|
23
|
+
.repl_history
|
24
|
+
build/
|
25
|
+
|
26
|
+
# RVM files for gemset/ruby setting
|
27
|
+
.ruby-*
|
28
|
+
.rvmrc
|
29
|
+
|
30
|
+
## Documentation cache and generated files:
|
31
|
+
/.yardoc/
|
32
|
+
/_yardoc/
|
33
|
+
/doc/
|
34
|
+
/rdoc/
|
35
|
+
|
36
|
+
## Environment normalisation:
|
37
|
+
/.bundle/
|
38
|
+
/vendor/bundle
|
39
|
+
/lib/bundler/man/
|
40
|
+
|
41
|
+
# for a library or gem, you might want to ignore these files since the code is
|
42
|
+
# intended to run in multiple environments; otherwise, check them in:
|
43
|
+
# Gemfile.lock
|
44
|
+
# .ruby-version
|
45
|
+
# .ruby-gemset
|
46
|
+
|
47
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
48
|
+
.rvmrc
|
49
|
+
|
50
|
+
tmp
|
51
|
+
*.bundle
|
52
|
+
*.so
|
53
|
+
*.o
|
54
|
+
*.a
|
55
|
+
mkmf.log
|
56
|
+
.idea
|
57
|
+
|
58
|
+
# Vagrant
|
59
|
+
.vagrant
|
60
|
+
Vagrantfile
|
61
|
+
!example_box/Vagrantfile
|
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :development do
|
6
|
+
# We depend on Vagrant for development, but we don't add it as a
|
7
|
+
# gem dependency because we expect to be installed within the
|
8
|
+
# Vagrant environment itself using `vagrant plugin`.
|
9
|
+
gem "vagrant", :git => "https://github.com/mitchellh/vagrant.git"
|
10
|
+
end
|
11
|
+
|
12
|
+
group :plugins do
|
13
|
+
gem 'vagrant_filoo', path: "."
|
14
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Huf Secure Mobile
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.md
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
# vagrant_filoo 0.0.2
|
2
|
+
Vagrant filoo provisioner
|
3
|
+
|
4
|
+
This is a Vagrant 1.7x plugin that adds an provider for filoo hosting to Vagrant, allowing Vagrant to control and provision machines within the filoo public and private cloud.
|
5
|
+
|
6
|
+
|
7
|
+

|
8
|
+
|
9
|
+
htps://www.filoo.de/vserver.html
|
10
|
+
|
11
|
+
**NOTE:** This plugin requires Vagrant 1.7x
|
12
|
+
|
13
|
+
#TODO
|
14
|
+
- set servername 4.1.16 vserver/setcustomname
|
15
|
+
- Publish to public gem repository
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
Install using standard Vagrant 1.1+ plugin installation methods. After installing, `vagrant up` and specify the `filoo` provider. An example is shown below. dummy
|
20
|
+
|
21
|
+
```
|
22
|
+
$ vagrant plugin install vagrant-filoo
|
23
|
+
...
|
24
|
+
$ vagrant up --provider=filoo
|
25
|
+
...
|
26
|
+
```
|
27
|
+
|
28
|
+
Of course prior to doing this, you'll need to obtain an Filoo-compatible box file for Vagrant.
|
29
|
+
|
30
|
+
## Quick Start
|
31
|
+
|
32
|
+
After installing the plugin (instructions above), the quickest way to get started is to actually use a dummy Filoo box and specify all the details manually within a `config.vm.provider` block. So first, add the dummy box using any name you want:
|
33
|
+
|
34
|
+
```
|
35
|
+
$ vagrant box add filoo <url to filoo box>
|
36
|
+
...
|
37
|
+
```
|
38
|
+
|
39
|
+
And then make a Vagrantfile that looks like the following, filling in your information where necessary.
|
40
|
+
|
41
|
+
It is good practice to access the filoo api key via system environment variable. To use environment variable FILOO_API_KEY add following line in the Vagrantfile
|
42
|
+
```
|
43
|
+
filoo.filoo_api_key = ENV['FILOO_API_KEY']
|
44
|
+
```
|
45
|
+
|
46
|
+
as seen in the commented line of config beneath.
|
47
|
+
|
48
|
+
```
|
49
|
+
Vagrant.configure("2") do |config|
|
50
|
+
config.vm.box = "filoo"
|
51
|
+
|
52
|
+
config.vm.provider :filoo do |filoo, override|
|
53
|
+
filoo.filoo_api_key = "your filoo api access key"
|
54
|
+
# or to use environment variable uncomment this
|
55
|
+
#filoo.filoo_api_key = ENV['FILOO_API_KEY']
|
56
|
+
|
57
|
+
filoo.filoo_api_entry_point = "https://api.filoo.de/api/v1"
|
58
|
+
filoo.cd_image_name = "Debian 7.7 - 64bit"
|
59
|
+
filoo.type = "dynamic"
|
60
|
+
filoo.cpu = 1
|
61
|
+
filoo.ram = 128
|
62
|
+
filoo.hdd = 10
|
63
|
+
filoo.additional_nic = true # defaults to false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
And then run 'vagrant up --provider=filoo'.
|
69
|
+
|
70
|
+
This will start an Debian 6.0 - 64bit instance in the Filoo infrastructure
|
71
|
+
|
72
|
+
Note that normally a lot of this boilerplate is encoded within the box
|
73
|
+
file, but the box file used for the quick start, the "dummy" box, has
|
74
|
+
no preconfigured defaults.
|
75
|
+
|
76
|
+
|
77
|
+
## Box Format
|
78
|
+
|
79
|
+
Every provider in Vagrant must introduce a custom box format. This
|
80
|
+
provider introduces `filoo` boxes. You can view an example box in
|
81
|
+
the [example_box/ directory](<path to repository>/example_box).
|
82
|
+
That directory also contains instructions on how to build a box.
|
83
|
+
|
84
|
+
The box format is basically just the required `metadata.json` file
|
85
|
+
along with a `Vagrantfile` that does default settings for the
|
86
|
+
provider-specific configuration for this provider.
|
87
|
+
|
88
|
+
## Configuration
|
89
|
+
|
90
|
+
This provider exposes quite a few provider-specific configuration options:
|
91
|
+
|
92
|
+
* `filoo_api_key` - The api key for accessing Filoo
|
93
|
+
* `cd_image_name` - The Filoo omage name to boot, such as ""Debian 6.0 - 64bit"
|
94
|
+
* `filoo_api_entry_point` - The base url to the api "https://api.filoo.de/api/v1"
|
95
|
+
|
96
|
+
These can be set like typical provider-specific configuration:
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
Vagrant.configure("2") do |config|
|
100
|
+
# ... other stuff
|
101
|
+
|
102
|
+
config.vm.provider :filoo do |filoo|
|
103
|
+
filoo.filoo_api_key = "foo"
|
104
|
+
filoo.filoo_api_entry_point = "bar"
|
105
|
+
filoo.cd_image_name = "foo-bar"
|
106
|
+
end
|
107
|
+
end
|
108
|
+
```
|
109
|
+
|
110
|
+
## Networks
|
111
|
+
|
112
|
+
Networking features in the form of `config.vm.network` are not
|
113
|
+
supported with `vagrant-filoo`, currently. If any of these are
|
114
|
+
specified, Vagrant will emit a warning, but will otherwise boot
|
115
|
+
the filoo machine.
|
116
|
+
|
117
|
+
## Synced Folders
|
118
|
+
|
119
|
+
Shared folders are not supported at the current state.
|
120
|
+
|
121
|
+
Linux and Windows clients optionally can use sshfs to mount a folder on the network or to connect a network drive. While the Linux implementation via fuse is quite stable the windows variant is not. We have successfully tested under Windows 7. Under Windows the re-connect after a network cut-off sometimes fails.
|
122
|
+
|
123
|
+
General Information: https://de.wikipedia.org/wiki/SSHFS
|
124
|
+
Windows build: https://code.google.com/p/win-sshfs/
|
125
|
+
|
126
|
+
See [Vagrant Synced folders: rsync](https://docs.vagrantup.com/v2/synced-folders/rsync.html)
|
127
|
+
|
128
|
+
|
129
|
+
## Other Examples
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
## Development
|
134
|
+
|
135
|
+
The easiest way to setup the environment is to install ruby with the Rails Installer (http://railsinstaller.org). Also you have to install vagrant on your machine to develop the plugin
|
136
|
+
|
137
|
+
To work on the `vagrant-filoo` plugin, clone this repository out, and use
|
138
|
+
[Bundler](http://gembundler.com) to get the dependencies:
|
139
|
+
|
140
|
+
or run from your "command prompt with ruby and rails"
|
141
|
+
|
142
|
+
```
|
143
|
+
$ gem install bundler
|
144
|
+
```
|
145
|
+
|
146
|
+
in the project folder run from your "command prompt with ruby and rails"
|
147
|
+
|
148
|
+
```
|
149
|
+
$ bundle
|
150
|
+
```
|
151
|
+
|
152
|
+
If you get an ssl error follow instructions on https://gist.github.com/luislavena/f064211759ee0f806c88
|
153
|
+
|
154
|
+
Once you have the dependencies, verify the unit tests pass with `rake`:
|
155
|
+
|
156
|
+
```
|
157
|
+
$ bundle exec rake
|
158
|
+
```
|
159
|
+
|
160
|
+
If those pass, you're ready to start developing the plugin. You can test
|
161
|
+
the plugin without installing it into your Vagrant environment by just
|
162
|
+
creating a `Vagrantfile` in the top level of this directory (it is gitignored)
|
163
|
+
and add the following line to your `Vagrantfile`
|
164
|
+
```ruby
|
165
|
+
Vagrant.require_plugin "vagrant_filoo"
|
166
|
+
```
|
167
|
+
|
168
|
+
create a box
|
169
|
+
|
170
|
+
```
|
171
|
+
$ cd example_box
|
172
|
+
$ tar cvzf filoo.box ./metadata.json ./Vagrantfile
|
173
|
+
$ mv filoo.box ../filoo.box
|
174
|
+
$ cd ..
|
175
|
+
```
|
176
|
+
|
177
|
+
Use vagrant to add the box
|
178
|
+
|
179
|
+
```
|
180
|
+
$ vagrant box add filoo.box
|
181
|
+
```
|
182
|
+
|
183
|
+
Copy the example Vagrantfile
|
184
|
+
|
185
|
+
```
|
186
|
+
cp example_config/Vagrantfile_example Vagrantfile
|
187
|
+
```
|
188
|
+
|
189
|
+
Edit your filoo api key in Vagrantfile or access Api Key via Environment Variable
|
190
|
+
|
191
|
+
```
|
192
|
+
filoo.filoo_api_key = "your filoo api access key"
|
193
|
+
# or to use environment variable uncomment this
|
194
|
+
#filoo.filoo_api_key = ENV['FILOO_API_KEY']
|
195
|
+
```
|
196
|
+
|
197
|
+
Use bundler to execute Vagrant:
|
198
|
+
```
|
199
|
+
$ bundle exec vagrant up --provider=filoo
|
200
|
+
```
|
201
|
+
|
202
|
+
Package and publish the plugin (see https://www.noppanit.com/create-simple-vagrant-plugin/)
|
203
|
+
|
204
|
+
```
|
205
|
+
$ rake build
|
206
|
+
$ gem push pkg/vagrant_filoo-0.0.1.gem
|
207
|
+
```
|
data/Rakefile
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Vagrant FILOO Example Box
|
2
|
+
|
3
|
+
Vagrant providers each require a custom provider-specific box format.
|
4
|
+
This folder shows the example contents of a box for the `filoo` provider.
|
5
|
+
To turn this into a box:
|
6
|
+
|
7
|
+
```
|
8
|
+
$ tar cvzf filoo.box ./metadata.json ./Vagrantfile
|
9
|
+
```
|
10
|
+
|
11
|
+
This box works by using Vagrant's built-in Vagrantfile merging to setup
|
12
|
+
defaults for Filoo. These defaults can easily be overwritten by higher-level
|
13
|
+
Vagrantfiles (such as project root Vagrantfiles).
|
data/filoo.box
ADDED
Binary file
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative "../cloud_compute"
|
2
|
+
require_relative '../errors'
|
3
|
+
require 'vagrant_filoo/util/timer'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Filoo
|
7
|
+
module Action
|
8
|
+
class CreateServer
|
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
|
+
|
17
|
+
if (env[:images].nil?)
|
18
|
+
raise Errors::ImagesNotLoaded
|
19
|
+
end
|
20
|
+
config = env[:machine].provider_config
|
21
|
+
if env[:images][config.cd_image_name].nil?
|
22
|
+
raise VagrantPlugins::Filoo::Errors::ConfigError,
|
23
|
+
message: "Filoo Configuration parameter 'cd_image_name' with value #{config.cd_image_name} references not a filoo image that has autoinstall flag set. Please use one of the folowing image names #{env[:images].keys.join(' | ')}"
|
24
|
+
end
|
25
|
+
|
26
|
+
imageId = "#{env[:images][config.cd_image_name]}".to_i
|
27
|
+
|
28
|
+
params = {
|
29
|
+
:type => config.type,
|
30
|
+
:cpu => config.cpu,
|
31
|
+
:ram => config.ram,
|
32
|
+
:hdd => config.hdd,
|
33
|
+
:cd_imageid => imageId
|
34
|
+
}
|
35
|
+
|
36
|
+
env[:ui].info("vagrant_filoo creating_instance")
|
37
|
+
env[:ui].info(" -- Type: #{config.type}")
|
38
|
+
env[:ui].info(" -- CPUs: #{config.cpu}")
|
39
|
+
env[:ui].info(" -- Ram: #{config.ram}")
|
40
|
+
env[:ui].info(" -- Image Id: #{imageId}")
|
41
|
+
env[:ui].info(" -- Image Name: #{config.cd_image_name}")
|
42
|
+
env[:result] = VagrantPlugins::Filoo::CloudCompute::createServer(params, @baseUrl, @apiKey)
|
43
|
+
env[:machine].id = env[:result]["vmid"]
|
44
|
+
#env[:machine].name = env[:result]["custom_vmname"]
|
45
|
+
env[:ui].info(" -- Server created, server state #{env[:result]}")
|
46
|
+
@app.call(env)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../errors'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Filoo
|
5
|
+
module Action
|
6
|
+
class GetImages
|
7
|
+
|
8
|
+
def initialize(app, env)
|
9
|
+
@app = app
|
10
|
+
@baseUrl =env[:machine].provider_config.filoo_api_entry_point()
|
11
|
+
@apiKey = env[:machine].provider_config.filoo_api_key()
|
12
|
+
end
|
13
|
+
def call(env)
|
14
|
+
env[:images]= VagrantPlugins::Filoo::CloudCompute::getAutoInstallImages(@baseUrl, @apiKey)
|
15
|
+
env[:result] = env[:images]
|
16
|
+
@app.call(env)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Filoo
|
3
|
+
module Action
|
4
|
+
class IsCreated
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
env[:result] = true
|
11
|
+
if env[:machine].state.id == :not_created
|
12
|
+
env[:result] = false
|
13
|
+
end
|
14
|
+
if env[:machine].state.id == :deleted
|
15
|
+
env[:result] = false
|
16
|
+
end
|
17
|
+
@app.call(env)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Filoo
|
3
|
+
module Action
|
4
|
+
# This can be used with "Call" built-in to check if the machine
|
5
|
+
# is stopped and branch in the middleware.
|
6
|
+
class IsStopped
|
7
|
+
def initialize(app, env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
env[:result] = env[:machine].state.id == :stopped
|
13
|
+
@app.call(env)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Filoo
|
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_filoo.already_created", :id => 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 Filoo
|
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_filoo.not_created"))
|
11
|
+
@app.call(env)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'json'
|
2
|
+
require_relative "../cloud_compute"
|
3
|
+
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Filoo
|
7
|
+
module Action
|
8
|
+
class ReadSSHInfo
|
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
|
+
def call(env)
|
15
|
+
vmid = vmid = env[:machine].id
|
16
|
+
serverStatus = VagrantPlugins::Filoo::CloudCompute::getServerStatus(vmid, @baseUrl, @apiKey)
|
17
|
+
if serverStatus["network_settings"].nil?
|
18
|
+
raise VagrantPlugins::Filoo::Errors::UnexpectedStateError,
|
19
|
+
resource: VagrantPlugins::Filoo::CloudCompute::SERVERSTATUS_RESOURCE,
|
20
|
+
state: serverStatus,
|
21
|
+
message: "Unexpected State of server status " + serverList.to_json,
|
22
|
+
description: "Server with vmid #{vmid} should have server status with field network_settings present"
|
23
|
+
end
|
24
|
+
|
25
|
+
if serverStatus["network_settings"].length < 1 or serverStatus["network_settings"][0]["ipadress"].nil?
|
26
|
+
raise VagrantPlugins::Filoo::Errors::UnexpectedStateError,
|
27
|
+
resource: VagrantPlugins::Filoo::CloudCompute::SERVERSTATUS_RESOURCE,
|
28
|
+
state: serverStatus,
|
29
|
+
description: "Server with vmid #{vmid} should have server status with subfield field ipadress network_settings present"
|
30
|
+
end
|
31
|
+
env[:machine_ssh_info] = { :host => serverStatus["network_settings"][0]["ipadress"],
|
32
|
+
:port => 22 ,
|
33
|
+
:username => "root"
|
34
|
+
}
|
35
|
+
@app.call(env)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative "../cloud_compute"
|
2
|
+
require "vagrant/machine_state"
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Filoo
|
7
|
+
module Action
|
8
|
+
class ReadState
|
9
|
+
include VagrantPlugins::Filoo::CloudCompute
|
10
|
+
SERVERSTATUS_RESOURCE = '/vserver/status'
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@baseUrl ="#{env[:machine].provider_config.filoo_api_entry_point}"
|
14
|
+
@apiKey = env[:machine].provider_config.filoo_api_key()
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(env)
|
18
|
+
if env[:machine].nil? or env[:machine].id.nil?
|
19
|
+
env[:machine_state_id] = :not_created
|
20
|
+
else
|
21
|
+
vmid = env[:machine].id
|
22
|
+
begin
|
23
|
+
serverStatus = VagrantPlugins::Filoo::CloudCompute::getServerStatus(vmid, @baseUrl, @apiKey)
|
24
|
+
env[:machine_state_id] = machineStateIdFromState(serverStatus)
|
25
|
+
rescue VagrantPlugins::Filoo::Errors::FilooApiError => e
|
26
|
+
errorCode = nil;
|
27
|
+
begin
|
28
|
+
errorCode = JSON.parse(e.message)["code"]
|
29
|
+
rescue JSON::ParserError => jsonErr
|
30
|
+
raise e
|
31
|
+
end
|
32
|
+
if errorCode == 403
|
33
|
+
env[:machine_state_id] = :not_created
|
34
|
+
else
|
35
|
+
raise e
|
36
|
+
end
|
37
|
+
en
|
38
|
+
end
|
39
|
+
end
|
40
|
+
@app.call(env)
|
41
|
+
end
|
42
|
+
|
43
|
+
def machineStateIdFromState(serverStatus)
|
44
|
+
case serverStatus["vmstatus"]
|
45
|
+
when "running"
|
46
|
+
return :running
|
47
|
+
when "stopped"
|
48
|
+
return :stopped
|
49
|
+
when "processing_autoinstall"
|
50
|
+
return :processing_autoinstall
|
51
|
+
when "disabled"
|
52
|
+
return :disabled
|
53
|
+
when "activated"
|
54
|
+
return :activated
|
55
|
+
when "deleted"
|
56
|
+
return :deleted
|
57
|
+
when "unknown"
|
58
|
+
return :unknown
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require_relative "../cloud_compute"
|
3
|
+
require 'vagrant_filoo/util/timer'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module Filoo
|
7
|
+
module Action
|
8
|
+
class StartInstance
|
9
|
+
include VagrantPlugins::Filoo::CloudCompute
|
10
|
+
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@baseUrl =env[:machine].provider_config.filoo_api_entry_point
|
14
|
+
@apiKey = env[:machine].provider_config.filoo_api_key
|
15
|
+
@filooConfig = env[:machine].provider_config
|
16
|
+
@logger = Log4r::Logger.new("vagrant_filoo::action::start_instance")
|
17
|
+
end
|
18
|
+
|
19
|
+
def call(env)
|
20
|
+
env[:metrics] ||= {}
|
21
|
+
vmid = env[:machine].id
|
22
|
+
env[:result] = VagrantPlugins::Filoo::CloudCompute::startInstance(vmid, @baseUrl, @apiKey, @filooConfig)
|
23
|
+
env[:ui].info("Machine #{vmid} successfully started, state #{env[:result].to_json}")
|
24
|
+
@logger.info("Time to instance ready: #{env[:metrics]["instance_ready_time"]}")
|
25
|
+
|
26
|
+
if !env[:interrupted]
|
27
|
+
env[:metrics]["instance_ssh_time"] = Util::Timer.time do
|
28
|
+
# Wait for SSH to be ready.
|
29
|
+
env[:ui].info(I18n.t("vagrant_filoo.waiting_for_ssh"))
|
30
|
+
while true
|
31
|
+
# If we're interrupted then just back out
|
32
|
+
break if env[:interrupted]
|
33
|
+
break if env[:machine].communicate.ready?
|
34
|
+
sleep 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
@logger.info("Time for SSH ready: #{env[:metrics]["instance_ssh_time"]}")
|
39
|
+
|
40
|
+
# Ready and booted!
|
41
|
+
env[:ui].info(I18n.t("vagrant_filoo.ready"))
|
42
|
+
end
|
43
|
+
@app.call(env)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "../cloud_compute"
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Filoo
|
5
|
+
module Action
|
6
|
+
# This starts a stopped instance.
|
7
|
+
class StopInstance
|
8
|
+
STOP_RESOURCE = "/vserver/stop"
|
9
|
+
STOP_INSTANCE_TIMEOUT = 60
|
10
|
+
def initialize(app, env)
|
11
|
+
@app = app
|
12
|
+
@baseUrl =env[:machine].provider_config.filoo_api_entry_point
|
13
|
+
@apiKey = env[:machine].provider_config.filoo_api_key
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
if env[:machine].state.id == :stopped
|
18
|
+
env[:ui].info(I18n.t("vagrant_filoo.already_status", :status => env[:machine].state.id))
|
19
|
+
else
|
20
|
+
vmid = env[:machine].id
|
21
|
+
env[:ui].info("Halt machine #{vmid}")
|
22
|
+
env[:result] = VagrantPlugins::Filoo::CloudCompute::stopInstance vmid, @baseUrl, @apiKey
|
23
|
+
env[:ui].info("Machine #{vmid} successfully halted, state #{env[:result].to_json}")
|
24
|
+
end
|
25
|
+
@app.call(env)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|