vagrant-sakura 0.0.1
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 +19 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +102 -0
- data/Rakefile +3 -0
- data/dummy.box +0 -0
- data/example_box/Vagrantfile +8 -0
- data/example_box/metadata.json +3 -0
- data/lib/vagrant-sakura.rb +16 -0
- data/lib/vagrant-sakura/action.rb +158 -0
- data/lib/vagrant-sakura/action/connect_sakura.rb +23 -0
- data/lib/vagrant-sakura/action/delete_server.rb +39 -0
- data/lib/vagrant-sakura/action/halt.rb +31 -0
- data/lib/vagrant-sakura/action/is_created.rb +16 -0
- data/lib/vagrant-sakura/action/message_already_created.rb +16 -0
- data/lib/vagrant-sakura/action/message_down.rb +16 -0
- data/lib/vagrant-sakura/action/message_not_created.rb +16 -0
- data/lib/vagrant-sakura/action/message_will_not_destroy.rb +17 -0
- data/lib/vagrant-sakura/action/power_on.rb +23 -0
- data/lib/vagrant-sakura/action/read_ssh_info.rb +37 -0
- data/lib/vagrant-sakura/action/read_state.rb +35 -0
- data/lib/vagrant-sakura/action/reset.rb +24 -0
- data/lib/vagrant-sakura/action/run_instance.rb +143 -0
- data/lib/vagrant-sakura/command.rb +12 -0
- data/lib/vagrant-sakura/config.rb +98 -0
- data/lib/vagrant-sakura/driver/api.rb +77 -0
- data/lib/vagrant-sakura/driver/cert.pem +76 -0
- data/lib/vagrant-sakura/errors.rb +19 -0
- data/lib/vagrant-sakura/plugin.rb +53 -0
- data/lib/vagrant-sakura/provider.rb +31 -0
- data/lib/vagrant-sakura/version.rb +5 -0
- data/locales/en.yml +39 -0
- metadata +105 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module Sakura
|
6
|
+
module Driver
|
7
|
+
APIHOST = "secure.sakura.ad.jp"
|
8
|
+
APIPREFIX = "/cloud/api/cloud/1.0"
|
9
|
+
CERTFILE = File.expand_path("../cert.pem", __FILE__)
|
10
|
+
|
11
|
+
class API
|
12
|
+
def initialize(access_token, access_token_secret)
|
13
|
+
@logger = Log4r::Logger.new("vagrant::provider::sakura")
|
14
|
+
|
15
|
+
@access_token = access_token
|
16
|
+
@access_token_secret = access_token_secret
|
17
|
+
|
18
|
+
@https = Net::HTTP.new(APIHOST, 443)
|
19
|
+
@https.use_ssl = true
|
20
|
+
@https.ca_file = CERTFILE
|
21
|
+
@https.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
22
|
+
@https.verify_depth = 2
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete(resource, data = nil)
|
26
|
+
request = Net::HTTP::Delete.new(APIPREFIX + resource)
|
27
|
+
request.body = data.to_json if data
|
28
|
+
do_request request
|
29
|
+
end
|
30
|
+
|
31
|
+
def get(resource, data = nil)
|
32
|
+
request = Net::HTTP::Get.new(APIPREFIX + resource)
|
33
|
+
request.body = data.to_json if data
|
34
|
+
do_request request
|
35
|
+
end
|
36
|
+
|
37
|
+
def post(resource, data)
|
38
|
+
request = Net::HTTP::Post.new(APIPREFIX + resource)
|
39
|
+
request.body = data.to_json
|
40
|
+
do_request request
|
41
|
+
end
|
42
|
+
|
43
|
+
def put(resource, data = nil)
|
44
|
+
request = Net::HTTP::Put.new(APIPREFIX + resource)
|
45
|
+
request.body = if data then data.to_json else '' end
|
46
|
+
do_request request
|
47
|
+
end
|
48
|
+
|
49
|
+
def do_request(request)
|
50
|
+
request.basic_auth @access_token, @access_token_secret
|
51
|
+
response = @https.request(request)
|
52
|
+
@logger.debug("#{request.method} #{request.path} #{request.body} "+
|
53
|
+
"=> #{response.code} : #{response.body}")
|
54
|
+
|
55
|
+
emsg = "#{response.code} (#{request.method} #{request.path})"
|
56
|
+
case response.code
|
57
|
+
when /2../
|
58
|
+
# Success
|
59
|
+
when "404"
|
60
|
+
raise NotFoundError, emsg
|
61
|
+
when "409"
|
62
|
+
raise ConflictError, emsg
|
63
|
+
else
|
64
|
+
raise GenericError, emsg
|
65
|
+
end
|
66
|
+
|
67
|
+
JSON.parse response.body
|
68
|
+
end
|
69
|
+
private :do_request
|
70
|
+
end
|
71
|
+
|
72
|
+
class ConflictError < RuntimeError; end
|
73
|
+
class GenericError < RuntimeError; end
|
74
|
+
class NotFoundError < RuntimeError; end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
Certificate:
|
2
|
+
Data:
|
3
|
+
Version: 3 (0x2)
|
4
|
+
Serial Number: 0 (0x0)
|
5
|
+
Signature Algorithm: sha1WithRSAEncryption
|
6
|
+
Issuer: C=JP, O=SECOM Trust.net, OU=Security Communication RootCA1
|
7
|
+
Validity
|
8
|
+
Not Before: Sep 30 04:20:49 2003 GMT
|
9
|
+
Not After : Sep 30 04:20:49 2023 GMT
|
10
|
+
Subject: C=JP, O=SECOM Trust.net, OU=Security Communication RootCA1
|
11
|
+
Subject Public Key Info:
|
12
|
+
Public Key Algorithm: rsaEncryption
|
13
|
+
RSA Public Key: (2048 bit)
|
14
|
+
Modulus (2048 bit):
|
15
|
+
00:b3:b3:fe:7f:d3:6d:b1:ef:16:7c:57:a5:0c:6d:
|
16
|
+
76:8a:2f:4b:bf:64:fb:4c:ee:8a:f0:f3:29:7c:f5:
|
17
|
+
ff:ee:2a:e0:e9:e9:ba:5b:64:22:9a:9a:6f:2c:3a:
|
18
|
+
26:69:51:05:99:26:dc:d5:1c:6a:71:c6:9a:7d:1e:
|
19
|
+
9d:dd:7c:6c:c6:8c:67:67:4a:3e:f8:71:b0:19:27:
|
20
|
+
a9:09:0c:a6:95:bf:4b:8c:0c:fa:55:98:3b:d8:e8:
|
21
|
+
22:a1:4b:71:38:79:ac:97:92:69:b3:89:7e:ea:21:
|
22
|
+
68:06:98:14:96:87:d2:61:36:bc:6d:27:56:9e:57:
|
23
|
+
ee:c0:c0:56:fd:32:cf:a4:d9:8e:c2:23:d7:8d:a8:
|
24
|
+
f3:d8:25:ac:97:e4:70:38:f4:b6:3a:b4:9d:3b:97:
|
25
|
+
26:43:a3:a1:bc:49:59:72:4c:23:30:87:01:58:f6:
|
26
|
+
4e:be:1c:68:56:66:af:cd:41:5d:c8:b3:4d:2a:55:
|
27
|
+
46:ab:1f:da:1e:e2:40:3d:db:cd:7d:b9:92:80:9c:
|
28
|
+
37:dd:0c:96:64:9d:dc:22:f7:64:8b:df:61:de:15:
|
29
|
+
94:52:15:a0:7d:52:c9:4b:a8:21:c9:c6:b1:ed:cb:
|
30
|
+
c3:95:60:d1:0f:f0:ab:70:f8:df:cb:4d:7e:ec:d6:
|
31
|
+
fa:ab:d9:bd:7f:54:f2:a5:e9:79:fa:d9:d6:76:24:
|
32
|
+
28:73
|
33
|
+
Exponent: 65537 (0x10001)
|
34
|
+
X509v3 extensions:
|
35
|
+
X509v3 Subject Key Identifier:
|
36
|
+
A0:73:49:99:68:DC:85:5B:65:E3:9B:28:2F:57:9F:BD:33:BC:07:48
|
37
|
+
X509v3 Key Usage:
|
38
|
+
Certificate Sign, CRL Sign
|
39
|
+
X509v3 Basic Constraints: critical
|
40
|
+
CA:TRUE
|
41
|
+
Signature Algorithm: sha1WithRSAEncryption
|
42
|
+
68:40:a9:a8:bb:e4:4f:5d:79:b3:05:b5:17:b3:60:13:eb:c6:
|
43
|
+
92:5d:e0:d1:d3:6a:fe:fb:be:9b:6d:bf:c7:05:6d:59:20:c4:
|
44
|
+
1c:f0:b7:da:84:58:02:63:fa:48:16:ef:4f:a5:0b:f7:4a:98:
|
45
|
+
f2:3f:9e:1b:ad:47:6b:63:ce:08:47:eb:52:3f:78:9c:af:4d:
|
46
|
+
ae:f8:d5:4f:cf:9a:98:2a:10:41:39:52:c4:dd:d9:9b:0e:ef:
|
47
|
+
93:01:ae:b2:2e:ca:68:42:24:42:6c:b0:b3:3a:3e:cd:e9:da:
|
48
|
+
48:c4:15:cb:e9:f9:07:0f:92:50:49:8a:dd:31:97:5f:c9:e9:
|
49
|
+
37:aa:3b:59:65:97:94:32:c9:b3:9f:3e:3a:62:58:c5:49:ad:
|
50
|
+
62:0e:71:a5:32:aa:2f:c6:89:76:43:40:13:13:67:3d:a2:54:
|
51
|
+
25:10:cb:f1:3a:f2:d9:fa:db:49:56:bb:a6:fe:a7:41:35:c3:
|
52
|
+
e0:88:61:c9:88:c7:df:36:10:22:98:59:ea:b0:4a:fb:56:16:
|
53
|
+
73:6e:ac:4d:f7:22:a1:4f:ad:1d:7a:2d:45:27:e5:30:c1:5e:
|
54
|
+
f2:da:13:cb:25:42:51:95:47:03:8c:6c:21:cc:74:42:ed:53:
|
55
|
+
ff:33:8b:8f:0f:57:01:16:2f:cf:a6:ee:c9:70:22:14:bd:fd:
|
56
|
+
be:6c:0b:03
|
57
|
+
-----BEGIN CERTIFICATE-----
|
58
|
+
MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
|
59
|
+
MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
|
60
|
+
dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
|
61
|
+
WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
|
62
|
+
VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
|
63
|
+
DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
|
64
|
+
9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
|
65
|
+
DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
|
66
|
+
Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
|
67
|
+
QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
|
68
|
+
xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
|
69
|
+
A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
|
70
|
+
AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
|
71
|
+
kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
|
72
|
+
Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
|
73
|
+
Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
|
74
|
+
JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
|
75
|
+
RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
|
76
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "vagrant"
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Sakura
|
5
|
+
module Errors
|
6
|
+
class VagrantSakuraError < Vagrant::Errors::VagrantError
|
7
|
+
error_namespace("vagrant_sakura.errors")
|
8
|
+
end
|
9
|
+
|
10
|
+
class InstanceReadyTimeout < VagrantSakuraError
|
11
|
+
error_key(:instance_ready_timeout)
|
12
|
+
end
|
13
|
+
|
14
|
+
class RsyncError < VagrantSakuraError
|
15
|
+
error_key(:rsync_error)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "vagrant"
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module Sakura
|
6
|
+
class Plugin < Vagrant.plugin("2")
|
7
|
+
name "Sakura"
|
8
|
+
description <<-DESC
|
9
|
+
This plugin installs a provider that allows Vagrant to manage
|
10
|
+
server instances in Sakura Cloud.
|
11
|
+
DESC
|
12
|
+
|
13
|
+
config(:sakura, :provider) do
|
14
|
+
require_relative "config"
|
15
|
+
Config
|
16
|
+
end
|
17
|
+
|
18
|
+
provider(:sakura) do
|
19
|
+
setup_i18n
|
20
|
+
setup_logging
|
21
|
+
|
22
|
+
require_relative "provider"
|
23
|
+
Provider
|
24
|
+
end
|
25
|
+
|
26
|
+
# command(:'sakura-plans') do
|
27
|
+
# require_relative "command"
|
28
|
+
# Command
|
29
|
+
# end
|
30
|
+
|
31
|
+
def self.setup_i18n
|
32
|
+
I18n.load_path << File.expand_path("locales/en.yml", Sakura.source_root)
|
33
|
+
I18n.reload!
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.setup_logging
|
37
|
+
level = nil
|
38
|
+
begin
|
39
|
+
level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
|
40
|
+
level = nil if !level.is_a?(Integer)
|
41
|
+
rescue NameError
|
42
|
+
end
|
43
|
+
|
44
|
+
if level
|
45
|
+
logger = Log4r::Logger.new("vagrant_sakura")
|
46
|
+
logger.outputters = Log4r::Outputter.stderr
|
47
|
+
logger.level = level
|
48
|
+
logger = nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "vagrant"
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module Sakura
|
6
|
+
class Provider < Vagrant.plugin("2", :provider)
|
7
|
+
def initialize(machine)
|
8
|
+
@machine = machine
|
9
|
+
end
|
10
|
+
|
11
|
+
def action(name)
|
12
|
+
action_method = "action_#{name}"
|
13
|
+
return Action.send(action_method) if Action.respond_to?(action_method)
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def ssh_info
|
18
|
+
env = @machine.action("read_ssh_info")
|
19
|
+
env[:machine_ssh_info]
|
20
|
+
end
|
21
|
+
|
22
|
+
def state
|
23
|
+
env = @machine.action("read_state")
|
24
|
+
state_id = env[:machine_state_id]
|
25
|
+
short = state_id.to_s
|
26
|
+
long = I18n.t("vagrant_sakura.state_#{short}")
|
27
|
+
Vagrant::MachineState.new(state_id.to_sym, short, long)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
en:
|
2
|
+
vagrant_sakura:
|
3
|
+
already_created: |-
|
4
|
+
The server is already created.
|
5
|
+
creating_instance: |-
|
6
|
+
Creating a server with the following settings...
|
7
|
+
down: |-
|
8
|
+
The server is down.
|
9
|
+
not_created: |-
|
10
|
+
Server is not created. Please run `vagrant up` first.
|
11
|
+
power_off: |-
|
12
|
+
Turning off power...
|
13
|
+
power_on: |-
|
14
|
+
Turning on power.
|
15
|
+
ready: |-
|
16
|
+
Server is booted and ready for use!
|
17
|
+
reset: |-
|
18
|
+
The server was reloaded.
|
19
|
+
state_cleaning: |-
|
20
|
+
The server is terminated and cleaning up.
|
21
|
+
state_down: |-
|
22
|
+
The server is down.
|
23
|
+
state_not_created: |-
|
24
|
+
The server has not been created yet, or destroyed.
|
25
|
+
state_up: |-
|
26
|
+
The server is up and running.
|
27
|
+
terminating: |-
|
28
|
+
Terminating the server...
|
29
|
+
will_not_destroy: |-
|
30
|
+
The server '%{name}' will not be destroyed, since the confirmation
|
31
|
+
was declined.
|
32
|
+
waiting_for_ssh: |-
|
33
|
+
Waiting for SSH to become available...
|
34
|
+
|
35
|
+
config:
|
36
|
+
access_token_required: |-
|
37
|
+
An access token is required via "access_token"
|
38
|
+
access_token_secret_required: |-
|
39
|
+
An access token secret is required via "access_token_secret"
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-sakura
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tomoyuki Sahara
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-10-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Enables Vagrant to manage machines in Sakura Cloud.
|
42
|
+
email:
|
43
|
+
- sahara@surt.net
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- CHANGELOG.md
|
50
|
+
- Gemfile
|
51
|
+
- LICENSE.txt
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- dummy.box
|
55
|
+
- example_box/Vagrantfile
|
56
|
+
- example_box/metadata.json
|
57
|
+
- lib/vagrant-sakura.rb
|
58
|
+
- lib/vagrant-sakura/action.rb
|
59
|
+
- lib/vagrant-sakura/action/connect_sakura.rb
|
60
|
+
- lib/vagrant-sakura/action/delete_server.rb
|
61
|
+
- lib/vagrant-sakura/action/halt.rb
|
62
|
+
- lib/vagrant-sakura/action/is_created.rb
|
63
|
+
- lib/vagrant-sakura/action/message_already_created.rb
|
64
|
+
- lib/vagrant-sakura/action/message_down.rb
|
65
|
+
- lib/vagrant-sakura/action/message_not_created.rb
|
66
|
+
- lib/vagrant-sakura/action/message_will_not_destroy.rb
|
67
|
+
- lib/vagrant-sakura/action/power_on.rb
|
68
|
+
- lib/vagrant-sakura/action/read_ssh_info.rb
|
69
|
+
- lib/vagrant-sakura/action/read_state.rb
|
70
|
+
- lib/vagrant-sakura/action/reset.rb
|
71
|
+
- lib/vagrant-sakura/action/run_instance.rb
|
72
|
+
- lib/vagrant-sakura/command.rb
|
73
|
+
- lib/vagrant-sakura/config.rb
|
74
|
+
- lib/vagrant-sakura/driver/api.rb
|
75
|
+
- lib/vagrant-sakura/driver/cert.pem
|
76
|
+
- lib/vagrant-sakura/errors.rb
|
77
|
+
- lib/vagrant-sakura/plugin.rb
|
78
|
+
- lib/vagrant-sakura/provider.rb
|
79
|
+
- lib/vagrant-sakura/version.rb
|
80
|
+
- locales/en.yml
|
81
|
+
homepage: ''
|
82
|
+
licenses:
|
83
|
+
- MIT
|
84
|
+
metadata: {}
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 2.0.3
|
102
|
+
signing_key:
|
103
|
+
specification_version: 4
|
104
|
+
summary: Enables Vagrant to manage machines in Sakura Cloud.
|
105
|
+
test_files: []
|