fog-sakuracloud 0.0.4 → 0.1.0
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 +4 -4
- data/.gitmodules +1 -1
- data/.travis.yml +2 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile.edge +5 -0
- data/README.md +4 -1
- data/Rakefile +0 -1
- data/lib/fog/bin/sakuracloud.rb +8 -3
- data/lib/fog/sakuracloud.rb +2 -0
- data/lib/fog/sakuracloud/models/compute/server.rb +1 -1
- data/lib/fog/sakuracloud/models/compute/servers.rb +2 -1
- data/lib/fog/sakuracloud/models/network/router.rb +45 -0
- data/lib/fog/sakuracloud/models/network/routers.rb +27 -0
- data/lib/fog/sakuracloud/models/network/switch.rb +35 -0
- data/lib/fog/sakuracloud/models/network/switches.rb +27 -0
- data/lib/fog/sakuracloud/network.rb +83 -0
- data/lib/fog/sakuracloud/requests/compute/create_server.rb +16 -5
- data/lib/fog/sakuracloud/requests/network/create_router.rb +41 -0
- data/lib/fog/sakuracloud/requests/network/create_switch.rb +37 -0
- data/lib/fog/sakuracloud/requests/network/delete_router.rb +30 -0
- data/lib/fog/sakuracloud/requests/network/delete_switch.rb +30 -0
- data/lib/fog/sakuracloud/requests/network/list_routers.rb +39 -0
- data/lib/fog/sakuracloud/requests/network/list_switches.rb +74 -0
- data/lib/fog/sakuracloud/version.rb +1 -1
- data/tests/helper.rb +15 -0
- data/tests/sakuracloud/requests/compute/plans_tests.rb +1 -1
- data/tests/sakuracloud/requests/compute/servers_tests.rb +2 -2
- data/tests/sakuracloud/requests/compute/ssh_keys_tests.rb +1 -1
- data/tests/sakuracloud/requests/compute/zones_tests.rb +1 -1
- data/tests/sakuracloud/requests/network/routers_tests.rb +52 -0
- data/tests/sakuracloud/requests/network/switches_tests.rb +46 -0
- data/tests/sakuracloud/requests/volume/archives_tests.rb +1 -1
- data/tests/sakuracloud/requests/volume/disks_tests.rb +2 -2
- data/tests/sakuracloud/requests/volume/plans_tests.rb +1 -1
- metadata +16 -3
- data/tests/sakuracloud/helper.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed03013c914dcb9864ddd15863a8ea6ff53bcae8
|
4
|
+
data.tar.gz: df5058d91da52223655eeb3a7a144441a0c4b3b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d5e6e195d81ef2f071fe2e840580fab2b89add0f19954f5f68f37882364e39309bfddafbda62ab6517d444e683f0fc539bc4948c8568814dd2a885c86571b48
|
7
|
+
data.tar.gz: a16f37c56c3e38e89c205495f43f518f114be8e7f3d19bebda581fff2694b46984d09486c2b444b6af87c22a113126c55e7ecd89d1287b5dfcaa2dea6b652be8
|
data/.gitmodules
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.edge
ADDED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# Fog::Sakuracloud
|
2
2
|
|
3
|
-
[](http://badge.fury.io/rb/fog-sakuracloud)
|
4
|
+
[](https://travis-ci.org/fog/fog-sakuracloud)
|
5
|
+
[](http://waffle.io/fog/fog-sakuracloud)
|
6
|
+
[](http://waffle.io/fog/fog-sakuracloud)
|
4
7
|
|
5
8
|
This gem is a module for the fog gem that allows you to manage resources in the Sakura no Cloud.
|
6
9
|
|
data/Rakefile
CHANGED
data/lib/fog/bin/sakuracloud.rb
CHANGED
@@ -6,6 +6,8 @@ class SakuraCloud < Fog::Bin
|
|
6
6
|
Fog::Compute::SakuraCloud
|
7
7
|
when :volume
|
8
8
|
Fog::Volume::SakuraCloud
|
9
|
+
when :network
|
10
|
+
Fog::Network::SakuraCloud
|
9
11
|
else
|
10
12
|
raise ArgumentError, "Unrecognized service: #{key}"
|
11
13
|
end
|
@@ -15,11 +17,14 @@ class SakuraCloud < Fog::Bin
|
|
15
17
|
@@connections ||= Hash.new do |hash, key|
|
16
18
|
hash[key] = case key
|
17
19
|
when :compute
|
18
|
-
Fog::Logger.warning("SakuraCloud[:compute] is not recommended, use Compute[:sakuracloud] for portability")
|
20
|
+
Fog::Logger.warning("SakuraCloud[:compute] is not recommended, use Fog::Compute[:sakuracloud] for portability")
|
19
21
|
Fog::Compute.new(:provider => 'SakuraCloud')
|
20
22
|
when :volume
|
21
|
-
Fog::Logger.warning("SakuraCloud[:
|
22
|
-
Fog::
|
23
|
+
Fog::Logger.warning("SakuraCloud[:volume] is not recommended, use Fog::Volume[:sakuracloud] for portability")
|
24
|
+
Fog::Volume.new(:provider => 'SakuraCloud')
|
25
|
+
when :network
|
26
|
+
Fog::Logger.warning("SakuraCloud[:network] is not recommended, use Fog::Network[:sakuracloud] for portability")
|
27
|
+
Fog::Network.new(:provider => 'SakuraCloud')
|
23
28
|
else
|
24
29
|
raise ArgumentError, "Unrecognized service: #{key.inspect}"
|
25
30
|
end
|
data/lib/fog/sakuracloud.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'fog/core'
|
2
2
|
require 'fog/sakuracloud/compute'
|
3
3
|
require 'fog/sakuracloud/volume'
|
4
|
+
require 'fog/sakuracloud/network'
|
4
5
|
|
5
6
|
module Fog
|
6
7
|
module SakuraCloud
|
@@ -12,5 +13,6 @@ module Fog
|
|
12
13
|
|
13
14
|
service(:compute, 'Compute')
|
14
15
|
service(:volume, 'Volume')
|
16
|
+
service(:network, 'Network')
|
15
17
|
end
|
16
18
|
end
|
@@ -20,7 +20,8 @@ module Fog
|
|
20
20
|
def create(options = {})
|
21
21
|
user = options[:user] || 'root'
|
22
22
|
Fog::Logger.warning("Create Server")
|
23
|
-
|
23
|
+
name = options[:name] ? options[:name] : Fog::UUID.uuid
|
24
|
+
data = service.create_server(options).body["Server"]
|
24
25
|
server = service.servers.new
|
25
26
|
server.merge_attributes(data)
|
26
27
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Router < Fog::Model
|
7
|
+
identity :id, :aliases => 'ID'
|
8
|
+
attribute :name, :aliases => 'Name'
|
9
|
+
attribute :description, :aliases => 'Description'
|
10
|
+
attribute :server_count, :aliases => 'ServerCount'
|
11
|
+
attribute :appliance_count, :aliases => 'ApplianceCount'
|
12
|
+
attribute :subnets, :aliases => 'Subnets'
|
13
|
+
attribute :ipv6nets, :aliases => 'IPv6Nets'
|
14
|
+
attribute :internet, :aliases => 'Internet'
|
15
|
+
attribute :bridge, :aliases => 'Bridge'
|
16
|
+
attribute :networkmasklen
|
17
|
+
|
18
|
+
|
19
|
+
def delete
|
20
|
+
service.delete_router(identity)
|
21
|
+
true
|
22
|
+
end
|
23
|
+
alias_method :destroy, :delete
|
24
|
+
|
25
|
+
def save
|
26
|
+
requires :name, :networkmasklen
|
27
|
+
Fog::Logger.warning("Create Router with public subnet")
|
28
|
+
data = service.create_router(@attributes).body["Internet"]
|
29
|
+
Fog::Logger.warning("Waiting available new router...")
|
30
|
+
new_data = router_available?(service, data["ID"])
|
31
|
+
merge_attributes(new_data)
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
def router_available?(network, router_id)
|
36
|
+
until network.switches.find {|r| r.internet != nil && r.internet["ID"] == router_id}
|
37
|
+
print '.'
|
38
|
+
sleep 2
|
39
|
+
end
|
40
|
+
::JSON.parse((network.switches.find {|r| r.internet != nil && r.internet["ID"] == router_id}).to_json)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/sakuracloud/models/network/router'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Network
|
6
|
+
class SakuraCloud
|
7
|
+
class Routers < Fog::Collection
|
8
|
+
model Fog::Network::SakuraCloud::Router
|
9
|
+
|
10
|
+
def all
|
11
|
+
load service.list_routers.body['Internet']
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(id)
|
15
|
+
all.find { |f| f.id == id }
|
16
|
+
rescue Fog::Errors::NotFound
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete(id)
|
21
|
+
service.delete_router(id)
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'fog/core/model'
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Switch < Fog::Model
|
7
|
+
identity :id, :aliases => 'ID'
|
8
|
+
attribute :name, :aliases => 'Name'
|
9
|
+
attribute :description, :aliases => 'Description'
|
10
|
+
attribute :server_count, :aliases => 'ServerCount'
|
11
|
+
attribute :appliance_count, :aliases => 'ApplianceCount'
|
12
|
+
attribute :subnets, :aliases => 'Subnets'
|
13
|
+
attribute :ipv6nets, :aliases => 'IPv6Nets'
|
14
|
+
attribute :internet, :aliases => 'Internet'
|
15
|
+
attribute :bridge, :aliases => 'Bridge'
|
16
|
+
|
17
|
+
|
18
|
+
def delete
|
19
|
+
service.delete_switch(identity)
|
20
|
+
true
|
21
|
+
end
|
22
|
+
alias_method :destroy, :delete
|
23
|
+
|
24
|
+
def save
|
25
|
+
requires :name
|
26
|
+
Fog::Logger.warning("Create Switch")
|
27
|
+
data = service.create_switch(@attributes).body["Switch"]
|
28
|
+
merge_attributes(data)
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/sakuracloud/models/network/switch'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Network
|
6
|
+
class SakuraCloud
|
7
|
+
class Switches < Fog::Collection
|
8
|
+
model Fog::Network::SakuraCloud::Switch
|
9
|
+
|
10
|
+
def all
|
11
|
+
load service.list_switches.body['Switches']
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(id)
|
15
|
+
all.find { |f| f.id == id }
|
16
|
+
rescue Fog::Errors::NotFound
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete(id)
|
21
|
+
service.delete_switch(id)
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'fog/sakuracloud'
|
2
|
+
require 'fog/network'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Network
|
6
|
+
class SakuraCloud < Fog::Service
|
7
|
+
requires :sakuracloud_api_token
|
8
|
+
requires :sakuracloud_api_token_secret
|
9
|
+
|
10
|
+
recognizes :sakuracloud_api_url
|
11
|
+
|
12
|
+
model_path 'fog/sakuracloud/models/network'
|
13
|
+
model :router
|
14
|
+
collection :routers
|
15
|
+
model :switch
|
16
|
+
collection :switches
|
17
|
+
|
18
|
+
request_path 'fog/sakuracloud/requests/network'
|
19
|
+
request :list_routers
|
20
|
+
request :create_router
|
21
|
+
request :delete_router
|
22
|
+
request :list_switches
|
23
|
+
request :create_switch
|
24
|
+
request :delete_switch
|
25
|
+
|
26
|
+
class Real
|
27
|
+
def initialize(options = {})
|
28
|
+
@auth_encord = Base64.strict_encode64([
|
29
|
+
options[:sakuracloud_api_token],
|
30
|
+
options[:sakuracloud_api_token_secret]
|
31
|
+
].join(':'))
|
32
|
+
Fog.credentials[:sakuracloud_api_token] = options[:sakuracloud_api_token]
|
33
|
+
Fog.credentials[:sakuracloud_api_token_secret] = options[:sakuracloud_api_token_secret]
|
34
|
+
|
35
|
+
@sakuracloud_api_url = options[:sakuracloud_api_url] || 'https://secure.sakura.ad.jp'
|
36
|
+
|
37
|
+
@connection = Fog::Core::Connection.new(@sakuracloud_api_url)
|
38
|
+
end
|
39
|
+
|
40
|
+
def request(params)
|
41
|
+
response = parse @connection.request(params)
|
42
|
+
response
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
def parse(response)
|
47
|
+
return response if response.body.empty?
|
48
|
+
response.body = Fog::JSON.decode(response.body)
|
49
|
+
response
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class Mock
|
54
|
+
def self.data
|
55
|
+
@data ||= Hash.new do |hash, key|
|
56
|
+
hash[key] = {
|
57
|
+
:routers => []
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.reset
|
63
|
+
@data = nil
|
64
|
+
end
|
65
|
+
|
66
|
+
def initialize(options={})
|
67
|
+
@sakuracloud_api_token = options[:sakuracloud_api_token]
|
68
|
+
@sakuracloud_api_token_secret = options[:sakuracloud_api_token_secret]
|
69
|
+
end
|
70
|
+
|
71
|
+
def data
|
72
|
+
self.class.data[@sakuracloud_api_token]
|
73
|
+
self.class.data[@sakuracloud_api_token_secret]
|
74
|
+
end
|
75
|
+
|
76
|
+
def reset_data
|
77
|
+
self.class.data.delete(@sakuracloud_api_token)
|
78
|
+
self.class.data.delete(@sakuracloud_api_token_secret)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end #SakuraCloud
|
82
|
+
end #Network
|
83
|
+
end
|
@@ -4,14 +4,25 @@ module Fog
|
|
4
4
|
module Compute
|
5
5
|
class SakuraCloud
|
6
6
|
class Real
|
7
|
-
def create_server(
|
7
|
+
def create_server(options)
|
8
|
+
if options[:switch]
|
9
|
+
switchs = options[:switch].split(',')
|
10
|
+
connectedswitches = switchs.map do |sw_id|
|
11
|
+
{
|
12
|
+
"ID" => sw_id
|
13
|
+
}
|
14
|
+
end
|
15
|
+
else
|
16
|
+
connectedswitches = [{"Scope"=>"shared", "BandWidthMbps"=>100}]
|
17
|
+
end
|
18
|
+
|
8
19
|
body = {
|
9
20
|
"Server" => {
|
10
|
-
"Name" => name,
|
21
|
+
"Name" => options[:name],
|
11
22
|
"ServerPlan" => {
|
12
|
-
"ID" => serverplan.to_i
|
23
|
+
"ID" => options[:serverplan].to_i
|
13
24
|
},
|
14
|
-
"ConnectedSwitches"=>
|
25
|
+
"ConnectedSwitches" => connectedswitches
|
15
26
|
}
|
16
27
|
}
|
17
28
|
|
@@ -28,7 +39,7 @@ module Fog
|
|
28
39
|
end # Real
|
29
40
|
|
30
41
|
class Mock
|
31
|
-
def create_server(
|
42
|
+
def create_server(options)
|
32
43
|
response = Excon::Response.new
|
33
44
|
response.status = 201
|
34
45
|
response.body = {
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Real
|
7
|
+
def create_router(options)
|
8
|
+
bandwidthmbps = options[:bandwidthmbps] ? options[:bandwidthmbps].to_i : 100
|
9
|
+
|
10
|
+
body = {
|
11
|
+
"Internet" => {
|
12
|
+
"Name" => options[:name],
|
13
|
+
"NetworkMaskLen"=> options[:networkmasklen].to_i,
|
14
|
+
"BandWidthMbps"=> bandwidthmbps
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
request(
|
19
|
+
:headers => {
|
20
|
+
'Authorization' => "Basic #{@auth_encord}"
|
21
|
+
},
|
22
|
+
:expects => 202,
|
23
|
+
:method => 'POST',
|
24
|
+
:path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/internet",
|
25
|
+
:body => Fog::JSON.encode(body)
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end # Real
|
29
|
+
|
30
|
+
class Mock
|
31
|
+
def create_router(options)
|
32
|
+
response = Excon::Response.new
|
33
|
+
response.status = 202
|
34
|
+
response.body = {
|
35
|
+
}
|
36
|
+
response
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end # SakuraCloud
|
40
|
+
end # Network
|
41
|
+
end # Fog
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Real
|
7
|
+
def create_switch(options)
|
8
|
+
body = {
|
9
|
+
"Switch" => {
|
10
|
+
"Name" => options[:name]
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
request(
|
15
|
+
:headers => {
|
16
|
+
'Authorization' => "Basic #{@auth_encord}"
|
17
|
+
},
|
18
|
+
:expects => 201,
|
19
|
+
:method => 'POST',
|
20
|
+
:path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/switch",
|
21
|
+
:body => Fog::JSON.encode(body)
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end # Real
|
25
|
+
|
26
|
+
class Mock
|
27
|
+
def create_switch(options)
|
28
|
+
response = Excon::Response.new
|
29
|
+
response.status = 201
|
30
|
+
response.body = {
|
31
|
+
}
|
32
|
+
response
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end # SakuraCloud
|
36
|
+
end # Network
|
37
|
+
end # Fog
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Real
|
7
|
+
def delete_router( id )
|
8
|
+
request(
|
9
|
+
:headers => {
|
10
|
+
'Authorization' => "Basic #{@auth_encord}"
|
11
|
+
},
|
12
|
+
:expects => [200],
|
13
|
+
:method => 'DELETE',
|
14
|
+
:path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/internet/#{id}"
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end # Real
|
18
|
+
|
19
|
+
class Mock
|
20
|
+
def delete_router( id )
|
21
|
+
response = Excon::Response.new
|
22
|
+
response.status = 200
|
23
|
+
response.body = {
|
24
|
+
}
|
25
|
+
response
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end # SakuraCloud
|
29
|
+
end # Network
|
30
|
+
end # Fog
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Real
|
7
|
+
def delete_switch( id )
|
8
|
+
request(
|
9
|
+
:headers => {
|
10
|
+
'Authorization' => "Basic #{@auth_encord}"
|
11
|
+
},
|
12
|
+
:expects => [200],
|
13
|
+
:method => 'DELETE',
|
14
|
+
:path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/switch/#{id}"
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end # Real
|
18
|
+
|
19
|
+
class Mock
|
20
|
+
def delete_switch( id )
|
21
|
+
response = Excon::Response.new
|
22
|
+
response.status = 200
|
23
|
+
response.body = {
|
24
|
+
}
|
25
|
+
response
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end # SakuraCloud
|
29
|
+
end # Network
|
30
|
+
end # Fog
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Real
|
7
|
+
def list_routers(options = {})
|
8
|
+
request(
|
9
|
+
:headers => {
|
10
|
+
'Authorization' => "Basic #{@auth_encord}"
|
11
|
+
},
|
12
|
+
:method => 'GET',
|
13
|
+
:path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/internet"
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Mock
|
19
|
+
def list_routers(options = {})
|
20
|
+
response = Excon::Response.new
|
21
|
+
response.status = 200
|
22
|
+
response.body = {
|
23
|
+
"Internet"=>[
|
24
|
+
{"Index"=>0,
|
25
|
+
"ID"=>"112600707538",
|
26
|
+
"Switch"=>{
|
27
|
+
"ID"=>"112600707539",
|
28
|
+
"Name"=>"router2"
|
29
|
+
}
|
30
|
+
}
|
31
|
+
],
|
32
|
+
"is_ok"=>true
|
33
|
+
}
|
34
|
+
response
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Network
|
5
|
+
class SakuraCloud
|
6
|
+
class Real
|
7
|
+
def list_switches(options = {})
|
8
|
+
request(
|
9
|
+
:headers => {
|
10
|
+
'Authorization' => "Basic #{@auth_encord}"
|
11
|
+
},
|
12
|
+
:method => 'GET',
|
13
|
+
:path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/switch"
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Mock
|
19
|
+
def list_switches(options = {})
|
20
|
+
response = Excon::Response.new
|
21
|
+
response.status = 200
|
22
|
+
response.body = {
|
23
|
+
"Switches"=>
|
24
|
+
[{"Index"=>0,
|
25
|
+
"ID"=>"112600703732",
|
26
|
+
"Name"=>"foobar1",
|
27
|
+
"Description"=>"",
|
28
|
+
"ServerCount"=>0,
|
29
|
+
"ApplianceCount"=>0,
|
30
|
+
"HybridConnection"=>nil,
|
31
|
+
"ServiceClass"=>"cloud/switch/default",
|
32
|
+
"CreatedAt"=>"2014-09-05T16:35:41+09:00",
|
33
|
+
"Subnets"=>
|
34
|
+
[{"ID"=>nil,
|
35
|
+
"NetworkAddress"=>nil,
|
36
|
+
"NetworkMaskLen"=>nil,
|
37
|
+
"DefaultRoute"=>nil,
|
38
|
+
"NextHop"=>nil,
|
39
|
+
"StaticRoute"=>nil,
|
40
|
+
"ServiceClass"=>nil,
|
41
|
+
"IPAddresses"=>{"Min"=>nil, "Max"=>nil},
|
42
|
+
"Internet"=>{"ID"=>nil, "Name"=>nil, "BandWidthMbps"=>nil, "ServiceClass"=>nil}}],
|
43
|
+
"IPv6Nets"=>[],
|
44
|
+
"Internet"=>nil,
|
45
|
+
"Bridge"=>nil},
|
46
|
+
{"Index"=>1,
|
47
|
+
"ID"=>"112600703734",
|
48
|
+
"Name"=>"foobar2",
|
49
|
+
"Description"=>"",
|
50
|
+
"ServerCount"=>1,
|
51
|
+
"ApplianceCount"=>0,
|
52
|
+
"HybridConnection"=>nil,
|
53
|
+
"ServiceClass"=>"cloud/switch/default",
|
54
|
+
"CreatedAt"=>"2014-09-05T16:36:13+09:00",
|
55
|
+
"Subnets"=>
|
56
|
+
[{"ID"=>1036,
|
57
|
+
"NetworkAddress"=>"133.242.241.240",
|
58
|
+
"NetworkMaskLen"=>28,
|
59
|
+
"DefaultRoute"=>"133.242.241.241",
|
60
|
+
"NextHop"=>nil,
|
61
|
+
"StaticRoute"=>nil,
|
62
|
+
"ServiceClass"=>"cloud/global-ipaddress-v4/28",
|
63
|
+
"IPAddresses"=>{"Min"=>"133.242.241.244", "Max"=>"133.242.241.254"},
|
64
|
+
"Internet"=>{"ID"=>"112600703733", "Name"=>"hogehoge2", "BandWidthMbps"=>100, "ServiceClass"=>"cloud/internet/router/100m"}}],
|
65
|
+
"IPv6Nets"=>[],
|
66
|
+
"Internet"=>{"ID"=>"112600703733", "Name"=>"hogehoge2", "BandWidthMbps"=>100, "Scope"=>"user", "ServiceClass"=>"cloud/internet/router/100m"},
|
67
|
+
"Bridge"=>nil}]
|
68
|
+
}
|
69
|
+
response
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/tests/helper.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## Initialize credentials
|
2
|
+
ENV['FOG_RC'] = ENV['FOG_RC'] || File.expand_path('../.fog', __FILE__)
|
3
|
+
|
1
4
|
## From fog-core
|
2
5
|
require 'fog/test_helpers/formats_helper'
|
3
6
|
|
@@ -6,3 +9,15 @@ require File.expand_path('../../fog/tests/helper', __FILE__)
|
|
6
9
|
helpers = Dir.glob(File.expand_path('../../', __FILE__) + '/fog/tests/helpers/**/*.rb')
|
7
10
|
helpers.map {|h| load h}
|
8
11
|
|
12
|
+
## SakuraCloud Helpers
|
13
|
+
def sakuracloud_volume_service
|
14
|
+
Fog::Volume[:sakuracloud]
|
15
|
+
end
|
16
|
+
|
17
|
+
def sakuracloud_compute_service
|
18
|
+
Fog::Compute[:sakuracloud]
|
19
|
+
end
|
20
|
+
|
21
|
+
def sakuracloud_network_service
|
22
|
+
Fog::Network[:sakuracloud]
|
23
|
+
end
|
@@ -13,7 +13,7 @@ Shindo.tests('Fog::Compute[:sakuracloud] | list_plans request', ['sakuracloud',
|
|
13
13
|
tests('success') do
|
14
14
|
|
15
15
|
tests('#list_plans') do
|
16
|
-
serverplans =
|
16
|
+
serverplans = sakuracloud_compute_service.list_plans
|
17
17
|
test 'returns a Hash' do
|
18
18
|
serverplans.body.is_a? Hash
|
19
19
|
end
|
@@ -13,7 +13,7 @@ Shindo.tests('Fog::Compute[:sakuracloud] | list_servers request', ['sakuracloud'
|
|
13
13
|
tests('success') do
|
14
14
|
|
15
15
|
tests('#list_servers') do
|
16
|
-
servers =
|
16
|
+
servers = sakuracloud_compute_service.list_servers
|
17
17
|
test 'returns a Hash' do
|
18
18
|
servers.body.is_a? Hash
|
19
19
|
end
|
@@ -32,7 +32,7 @@ end
|
|
32
32
|
Shindo.tests('Fog::Compute[:sakuracloud] | create_servers request', ['sakuracloud', 'compute']) do
|
33
33
|
tests('success') do
|
34
34
|
tests('#create_servers') do
|
35
|
-
servers =
|
35
|
+
servers = sakuracloud_compute_service.create_server(:name => 'foobar', :serverplan => 2001)
|
36
36
|
test 'returns a Hash' do
|
37
37
|
servers.body.is_a? Hash
|
38
38
|
end
|
@@ -11,7 +11,7 @@ Shindo.tests('Fog::Compute[:sakuracloud] | list_ssh_keys request', ['sakuracloud
|
|
11
11
|
tests('success') do
|
12
12
|
|
13
13
|
tests('#list_ssh_keys') do
|
14
|
-
sshkeys =
|
14
|
+
sshkeys = sakuracloud_compute_service.list_ssh_keys
|
15
15
|
test 'returns a Hash' do
|
16
16
|
sshkeys.body.is_a? Hash
|
17
17
|
end
|
@@ -11,7 +11,7 @@ Shindo.tests('Fog::Compute[:sakuracloud] | list_zones request', ['sakuracloud',
|
|
11
11
|
tests('success') do
|
12
12
|
|
13
13
|
tests('#list_zones') do
|
14
|
-
zones =
|
14
|
+
zones = sakuracloud_compute_service.list_zones
|
15
15
|
test 'returns a Hash' do
|
16
16
|
zones.body.is_a? Hash
|
17
17
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
Shindo.tests('Fog::Network[:sakuracloud] | list_routers request', ['sakuracloud', 'network']) do
|
3
|
+
|
4
|
+
@routers_create_format = {
|
5
|
+
'Index' => Integer,
|
6
|
+
'ID' => String,
|
7
|
+
'Name' => String,
|
8
|
+
'ServerCount' => Integer,
|
9
|
+
'ApplianceCount' => Integer,
|
10
|
+
'Subnets' => Array
|
11
|
+
}
|
12
|
+
|
13
|
+
@routers_list_format = {
|
14
|
+
'Index' => Integer,
|
15
|
+
'ID' => String,
|
16
|
+
'Switch' => Hash
|
17
|
+
}
|
18
|
+
|
19
|
+
tests('success') do
|
20
|
+
|
21
|
+
tests('#list_routers') do
|
22
|
+
routers = sakuracloud_network_service.list_routers
|
23
|
+
test 'returns a Hash' do
|
24
|
+
routers.body.is_a? Hash
|
25
|
+
end
|
26
|
+
if Fog.mock?
|
27
|
+
tests('Routers').formats(@routers_list_format, false) do
|
28
|
+
routers.body['Internet'].first
|
29
|
+
end
|
30
|
+
else
|
31
|
+
returns(200) { routers.status }
|
32
|
+
returns(true) { routers.body.is_a? Hash }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Shindo.tests('Fog::Network[:sakuracloud] | create_router request', ['sakuracloud', 'network']) do
|
39
|
+
tests('success') do
|
40
|
+
tests('#create_router_with_internet_access') do
|
41
|
+
router = sakuracloud_network_service.create_router(:name => 'foobar', :networkmasklen => 28)
|
42
|
+
test 'returns a Hash' do
|
43
|
+
router.body.is_a? Hash
|
44
|
+
end
|
45
|
+
|
46
|
+
unless Fog.mock?
|
47
|
+
returns(202) { router.status }
|
48
|
+
returns(true) { router.body.is_a? Hash }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
Shindo.tests('Fog::Network[:sakuracloud] | list_switches request', ['sakuracloud', 'network']) do
|
3
|
+
|
4
|
+
@switches_format = {
|
5
|
+
'Index' => Integer,
|
6
|
+
'ID' => String,
|
7
|
+
'Name' => String,
|
8
|
+
'ServerCount' => Integer,
|
9
|
+
'ApplianceCount' => Integer,
|
10
|
+
'Subnets' => Array
|
11
|
+
}
|
12
|
+
|
13
|
+
tests('success') do
|
14
|
+
|
15
|
+
tests('#list_switches') do
|
16
|
+
switches = sakuracloud_network_service.list_switches
|
17
|
+
test 'returns a Hash' do
|
18
|
+
switches.body.is_a? Hash
|
19
|
+
end
|
20
|
+
if Fog.mock?
|
21
|
+
tests('Switches').formats(@switches_format, false) do
|
22
|
+
switches.body['Switches'].first
|
23
|
+
end
|
24
|
+
else
|
25
|
+
returns(200) { switches.status }
|
26
|
+
returns(true) { switches.body.is_a? Hash }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Shindo.tests('Fog::Network[:sakuracloud] | create_switch request', ['sakuracloud', 'network']) do
|
33
|
+
tests('success') do
|
34
|
+
tests('#create_simple_switch') do
|
35
|
+
switch = sakuracloud_network_service.create_switch(:name => 'foobar')
|
36
|
+
test 'returns a Hash' do
|
37
|
+
switch.body.is_a? Hash
|
38
|
+
end
|
39
|
+
|
40
|
+
unless Fog.mock?
|
41
|
+
returns(201) { switch.status }
|
42
|
+
returns(true) { switch.body.is_a? Hash }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -12,7 +12,7 @@ Shindo.tests('Fog::Volume[:sakuracloud] | list_archives request', ['sakuracloud'
|
|
12
12
|
tests('success') do
|
13
13
|
|
14
14
|
tests('#list_archives') do
|
15
|
-
archives =
|
15
|
+
archives = sakuracloud_volume_service.list_archives
|
16
16
|
test 'returns a Hash' do
|
17
17
|
archives.body.is_a? Hash
|
18
18
|
end
|
@@ -14,7 +14,7 @@ Shindo.tests('Fog::Volume[:sakuracloud] | list_disks request', ['sakuracloud', '
|
|
14
14
|
tests('success') do
|
15
15
|
|
16
16
|
tests('#list_disks') do
|
17
|
-
disks =
|
17
|
+
disks = sakuracloud_volume_service.list_disks
|
18
18
|
test 'returns a Hash' do
|
19
19
|
disks.body.is_a? Hash
|
20
20
|
end
|
@@ -33,7 +33,7 @@ end
|
|
33
33
|
Shindo.tests('Fog::Volume[:sakuracloud] | create_disks request', ['sakuracloud', 'volume']) do
|
34
34
|
tests('success') do
|
35
35
|
tests('#create_disks') do
|
36
|
-
disks =
|
36
|
+
disks = sakuracloud_volume_service.create_disk('foobar', 4, 112500463685)
|
37
37
|
test 'returns a Hash' do
|
38
38
|
disks.body.is_a? Hash
|
39
39
|
end
|
@@ -11,7 +11,7 @@ Shindo.tests('Fog::Volume[:sakuracloud] | list_plans request', ['sakuracloud', '
|
|
11
11
|
tests('success') do
|
12
12
|
|
13
13
|
tests('#list_plans') do
|
14
|
-
diskplans =
|
14
|
+
diskplans = sakuracloud_volume_service.list_plans
|
15
15
|
test 'returns a Hash' do
|
16
16
|
diskplans.body.is_a? Hash
|
17
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-sakuracloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sawanoboly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog-core
|
@@ -252,6 +252,7 @@ files:
|
|
252
252
|
- .travis.yml
|
253
253
|
- CHANGELOG.md
|
254
254
|
- Gemfile
|
255
|
+
- Gemfile.edge
|
255
256
|
- LICENSE.txt
|
256
257
|
- README.md
|
257
258
|
- Rakefile
|
@@ -268,12 +269,17 @@ files:
|
|
268
269
|
- lib/fog/sakuracloud/models/compute/ssh_keys.rb
|
269
270
|
- lib/fog/sakuracloud/models/compute/zone.rb
|
270
271
|
- lib/fog/sakuracloud/models/compute/zones.rb
|
272
|
+
- lib/fog/sakuracloud/models/network/router.rb
|
273
|
+
- lib/fog/sakuracloud/models/network/routers.rb
|
274
|
+
- lib/fog/sakuracloud/models/network/switch.rb
|
275
|
+
- lib/fog/sakuracloud/models/network/switches.rb
|
271
276
|
- lib/fog/sakuracloud/models/volume/archive.rb
|
272
277
|
- lib/fog/sakuracloud/models/volume/archives.rb
|
273
278
|
- lib/fog/sakuracloud/models/volume/disk.rb
|
274
279
|
- lib/fog/sakuracloud/models/volume/disks.rb
|
275
280
|
- lib/fog/sakuracloud/models/volume/plan.rb
|
276
281
|
- lib/fog/sakuracloud/models/volume/plans.rb
|
282
|
+
- lib/fog/sakuracloud/network.rb
|
277
283
|
- lib/fog/sakuracloud/requests/compute/boot_server.rb
|
278
284
|
- lib/fog/sakuracloud/requests/compute/create_server.rb
|
279
285
|
- lib/fog/sakuracloud/requests/compute/delete_server.rb
|
@@ -282,6 +288,12 @@ files:
|
|
282
288
|
- lib/fog/sakuracloud/requests/compute/list_ssh_keys.rb
|
283
289
|
- lib/fog/sakuracloud/requests/compute/list_zones.rb
|
284
290
|
- lib/fog/sakuracloud/requests/compute/stop_server.rb
|
291
|
+
- lib/fog/sakuracloud/requests/network/create_router.rb
|
292
|
+
- lib/fog/sakuracloud/requests/network/create_switch.rb
|
293
|
+
- lib/fog/sakuracloud/requests/network/delete_router.rb
|
294
|
+
- lib/fog/sakuracloud/requests/network/delete_switch.rb
|
295
|
+
- lib/fog/sakuracloud/requests/network/list_routers.rb
|
296
|
+
- lib/fog/sakuracloud/requests/network/list_switches.rb
|
285
297
|
- lib/fog/sakuracloud/requests/volume/attach_disk.rb
|
286
298
|
- lib/fog/sakuracloud/requests/volume/configure_disk.rb
|
287
299
|
- lib/fog/sakuracloud/requests/volume/create_disk.rb
|
@@ -292,11 +304,12 @@ files:
|
|
292
304
|
- lib/fog/sakuracloud/version.rb
|
293
305
|
- lib/fog/sakuracloud/volume.rb
|
294
306
|
- tests/helper.rb
|
295
|
-
- tests/sakuracloud/helper.rb
|
296
307
|
- tests/sakuracloud/requests/compute/plans_tests.rb
|
297
308
|
- tests/sakuracloud/requests/compute/servers_tests.rb
|
298
309
|
- tests/sakuracloud/requests/compute/ssh_keys_tests.rb
|
299
310
|
- tests/sakuracloud/requests/compute/zones_tests.rb
|
311
|
+
- tests/sakuracloud/requests/network/routers_tests.rb
|
312
|
+
- tests/sakuracloud/requests/network/switches_tests.rb
|
300
313
|
- tests/sakuracloud/requests/volume/archives_tests.rb
|
301
314
|
- tests/sakuracloud/requests/volume/disks_tests.rb
|
302
315
|
- tests/sakuracloud/requests/volume/plans_tests.rb
|