fog-sakuracloud 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.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +65 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +9 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +35 -0
  8. data/Rakefile +113 -0
  9. data/fog-sakuracloud.gemspec +41 -0
  10. data/gemfiles/Gemfile.1.8.7 +6 -0
  11. data/lib/fog/sakuracloud.rb +16 -0
  12. data/lib/fog/sakuracloud/compute.rb +65 -0
  13. data/lib/fog/sakuracloud/models/compute/plan.rb +15 -0
  14. data/lib/fog/sakuracloud/models/compute/plans.rb +22 -0
  15. data/lib/fog/sakuracloud/models/compute/server.rb +40 -0
  16. data/lib/fog/sakuracloud/models/compute/servers.rb +63 -0
  17. data/lib/fog/sakuracloud/models/compute/ssh_key.rb +13 -0
  18. data/lib/fog/sakuracloud/models/compute/ssh_keys.rb +22 -0
  19. data/lib/fog/sakuracloud/models/compute/zone.rb +13 -0
  20. data/lib/fog/sakuracloud/models/compute/zones.rb +22 -0
  21. data/lib/fog/sakuracloud/models/volume/archive.rb +14 -0
  22. data/lib/fog/sakuracloud/models/volume/archives.rb +22 -0
  23. data/lib/fog/sakuracloud/models/volume/disk.rb +37 -0
  24. data/lib/fog/sakuracloud/models/volume/disks.rb +27 -0
  25. data/lib/fog/sakuracloud/models/volume/plan.rb +12 -0
  26. data/lib/fog/sakuracloud/models/volume/plans.rb +22 -0
  27. data/lib/fog/sakuracloud/requests/compute/boot_server.rb +31 -0
  28. data/lib/fog/sakuracloud/requests/compute/create_server.rb +41 -0
  29. data/lib/fog/sakuracloud/requests/compute/delete_server.rb +33 -0
  30. data/lib/fog/sakuracloud/requests/compute/list_plans.rb +46 -0
  31. data/lib/fog/sakuracloud/requests/compute/list_servers.rb +44 -0
  32. data/lib/fog/sakuracloud/requests/compute/list_ssh_keys.rb +40 -0
  33. data/lib/fog/sakuracloud/requests/compute/list_zones.rb +40 -0
  34. data/lib/fog/sakuracloud/requests/compute/stop_server.rb +37 -0
  35. data/lib/fog/sakuracloud/requests/volume/attach_disk.rb +30 -0
  36. data/lib/fog/sakuracloud/requests/volume/configure_disk.rb +35 -0
  37. data/lib/fog/sakuracloud/requests/volume/create_disk.rb +43 -0
  38. data/lib/fog/sakuracloud/requests/volume/delete_disk.rb +30 -0
  39. data/lib/fog/sakuracloud/requests/volume/list_archives.rb +46 -0
  40. data/lib/fog/sakuracloud/requests/volume/list_disks.rb +50 -0
  41. data/lib/fog/sakuracloud/requests/volume/list_plans.rb +40 -0
  42. data/lib/fog/sakuracloud/version.rb +5 -0
  43. data/lib/fog/sakuracloud/volume.rb +88 -0
  44. data/tests/helper.rb +8 -0
  45. data/tests/sakuracloud/helper.rb +7 -0
  46. data/tests/sakuracloud/requests/compute/plans_tests.rb +32 -0
  47. data/tests/sakuracloud/requests/compute/servers_tests.rb +46 -0
  48. data/tests/sakuracloud/requests/compute/ssh_keys_tests.rb +30 -0
  49. data/tests/sakuracloud/requests/compute/zones_tests.rb +30 -0
  50. data/tests/sakuracloud/requests/volume/archives_tests.rb +31 -0
  51. data/tests/sakuracloud/requests/volume/disks_tests.rb +47 -0
  52. data/tests/sakuracloud/requests/volume/plans_tests.rb +30 -0
  53. metadata +326 -0
@@ -0,0 +1,44 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Compute
5
+ class SakuraCloud
6
+ class Real
7
+ def list_servers(options = {})
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :method => 'GET',
13
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/server"
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def list_servers(options = {})
20
+ response = Excon::Response.new
21
+ response.status = 200
22
+ response.body = {
23
+ "Servers" =>
24
+ [
25
+ {"Index" => 0,
26
+ "ID"=>112600055376,
27
+ "Name"=>"foober1",
28
+ "ServerPlan"=> {},
29
+ "Instance"=> {},
30
+ "Disks"=> []},
31
+ {"Index" => 1,
32
+ "ID"=>112600055377,
33
+ "Name"=>"foober2",
34
+ "ServerPlan"=> {},
35
+ "Instance"=> {},
36
+ "Disks"=> []}
37
+ ]
38
+ }
39
+ response
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Compute
5
+ class SakuraCloud
6
+ class Real
7
+ def list_ssh_keys(options = {})
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :method => 'GET',
13
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/sshkey"
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def list_ssh_keys(options = {})
20
+ response = Excon::Response.new
21
+ response.status = 200
22
+ response.body = {
23
+ "SSHKeys"=>
24
+ [
25
+ {"Index"=>0,
26
+ "ID"=>"888888888888",
27
+ "Name"=>"foobar1",
28
+ "PublicKey"=>"ssh-rsa dummy"},
29
+ {"Index"=>1,
30
+ "ID"=>"999999999999",
31
+ "Name"=>"foobar2",
32
+ "PublicKey"=>"ssh-rsa dummy"}
33
+ ]
34
+ }
35
+ response
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Compute
5
+ class SakuraCloud
6
+ class Real
7
+ def list_zones(options = {})
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :method => 'GET',
13
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/zone"
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def list_zones(options = {})
20
+ response = Excon::Response.new
21
+ response.status = 200
22
+ response.body = {
23
+ "Zones" =>
24
+ [
25
+ {"Index"=>0,
26
+ "ID"=>31001,
27
+ "Name"=>"is1a",
28
+ "Description"=>"石狩第1ゾーン"},
29
+ {"Index"=>1,
30
+ "ID"=>31002,
31
+ "Name"=>"is1b",
32
+ "Description"=>"石狩第2ゾーン"}
33
+ ]
34
+ }
35
+ response
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Compute
5
+ class SakuraCloud
6
+ class Real
7
+ def stop_server( id, force = false )
8
+ if force
9
+ body = { "Force" => true }
10
+ else
11
+ body = {}
12
+ end
13
+ request(
14
+ :headers => {
15
+ 'Authorization' => "Basic #{@auth_encord}"
16
+ },
17
+ :expects => [200,202],
18
+ :method => 'DELETE',
19
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/server/#{id}/power",
20
+ :body => Fog::JSON.encode(body)
21
+ )
22
+ true
23
+ end
24
+ end # Real
25
+
26
+ class Mock
27
+ def stop_server( id, force = false )
28
+ response = Excon::Response.new
29
+ response.status = 202
30
+ response.body = {
31
+ }
32
+ response
33
+ end
34
+ end
35
+ end # SakuraCloud
36
+ end # Volume
37
+ end # Fog
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def attach_disk( disk_id, server_id )
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :expects => [200],
13
+ :method => 'PUT',
14
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/disk/#{disk_id.to_s}/to/server/#{server_id.to_s}"
15
+ )
16
+ end
17
+ end # Real
18
+
19
+ class Mock
20
+ def attach_disk( disk_id, server_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 # Volume
30
+ end # Fog
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def configure_disk( disk_id, sshkey_id )
8
+ body = {
9
+ "SSHKey" => {"ID" => sshkey_id.to_s }
10
+ }
11
+
12
+ request(
13
+ :headers => {
14
+ 'Authorization' => "Basic #{@auth_encord}"
15
+ },
16
+ :expects => [200],
17
+ :method => 'PUT',
18
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/disk/#{disk_id.to_s}/config",
19
+ :body => Fog::JSON.encode(body)
20
+ )
21
+ end
22
+ end # Real
23
+
24
+ class Mock
25
+ def configure_disk( disk_id, sshkey_id )
26
+ response = Excon::Response.new
27
+ response.status = 200
28
+ response.body = {
29
+ }
30
+ response
31
+ end
32
+ end
33
+ end # SakuraCloud
34
+ end # Volume
35
+ end # Fog
@@ -0,0 +1,43 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def create_disk( name, plan, sourcearchive )
8
+ body = {
9
+ "Disk" => {
10
+ "Name" => name,
11
+ "SourceArchive" => {
12
+ "ID" => sourcearchive.to_s
13
+ },
14
+ "Plan" => {
15
+ "ID" => plan.to_i
16
+ }
17
+ }
18
+ }
19
+
20
+ request(
21
+ :headers => {
22
+ 'Authorization' => "Basic #{@auth_encord}"
23
+ },
24
+ :expects => [202],
25
+ :method => 'POST',
26
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/disk",
27
+ :body => Fog::JSON.encode(body)
28
+ )
29
+ end
30
+ end # Real
31
+
32
+ class Mock
33
+ def create_disk( name, plan, sourcearchive )
34
+ response = Excon::Response.new
35
+ response.status = 202
36
+ response.body = {
37
+ }
38
+ response
39
+ end
40
+ end
41
+ end # SakuraCloud
42
+ end # Volume
43
+ end # Fog
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def delete_disk( id )
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :expects => [200],
13
+ :method => 'DELETE',
14
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/disk/#{id}"
15
+ )
16
+ end
17
+ end # Real
18
+
19
+ class Mock
20
+ def delete_disk( 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 # Volume
30
+ end # Fog
@@ -0,0 +1,46 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def list_archives(options = {})
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :method => 'GET',
13
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/archive"
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def list_archives(options = {})
20
+ response = Excon::Response.new
21
+ response.status = 200
22
+ response.body = {
23
+ "Archives" =>
24
+ [
25
+ {"Index"=>0,
26
+ "ID"=>112500514887,
27
+ "Name"=>"CentOS 5.10 64bit (基本セット)",
28
+ "Availability"=>"available",
29
+ "SizeMB"=>20480,
30
+ "Plan"=>{"ID"=>2, "StorageClass"=>"iscsi1204", "Name"=>"標準プラン"}
31
+ },
32
+ {"Index"=>1,
33
+ "ID"=>112500571575,
34
+ "Name"=>"CentOS 6.5 64bit (基本セット)",
35
+ "Availability"=>"available",
36
+ "SizeMB"=>102400,
37
+ "Plan"=>{"ID"=>2, "StorageClass"=>"iscsi1204", "Name"=>"標準プラン"}
38
+ }
39
+ ]
40
+ }
41
+ response
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,50 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def list_disks(options = {})
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :method => 'GET',
13
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/disk"
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def list_disks(options = {})
20
+ response = Excon::Response.new
21
+ response.status = 200
22
+ response.body = {
23
+ "Disks" =>
24
+ [
25
+ {"Index" => 0,
26
+ "ID" =>112600053890,
27
+ "Name" =>"foober1",
28
+ "Connection" => "virtio",
29
+ "Availability"=>"available",
30
+ "SizeMB"=>20480,
31
+ "Plan"=> {},
32
+ "SourceDisk" => nil,
33
+ "SourceArchive" => {}},
34
+ {"Index" => 1,
35
+ "ID" =>112600053891,
36
+ "Name" =>"foober2",
37
+ "Connection" => "virtio",
38
+ "Availability"=>"available",
39
+ "SizeMB"=>20480,
40
+ "Plan"=> {},
41
+ "SourceDisk" => nil,
42
+ "SourceArchive" => {}}
43
+ ]
44
+ }
45
+ response
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+
3
+ module Fog
4
+ module Volume
5
+ class SakuraCloud
6
+ class Real
7
+ def list_plans(options = {})
8
+ request(
9
+ :headers => {
10
+ 'Authorization' => "Basic #{@auth_encord}"
11
+ },
12
+ :method => 'GET',
13
+ :path => "#{Fog::SakuraCloud::SAKURACLOUD_API_ENDPOINT}/product/disk"
14
+ )
15
+ end
16
+ end
17
+
18
+ class Mock
19
+ def list_plans(options = {})
20
+ response = Excon::Response.new
21
+ response.status = 200
22
+ response.body = {
23
+ "DiskPlans" =>
24
+ [
25
+ {"Index"=>0,
26
+ "ID"=>4,
27
+ "Name"=>"SSDプラン",
28
+ "Availability"=>"available"},
29
+ {"Index"=>1,
30
+ "ID"=>2,
31
+ "Name"=>"標準プラン",
32
+ "Availability"=>"available"}
33
+ ]
34
+ }
35
+ response
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end