sakura_cloud 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.
data/.autotest ADDED
@@ -0,0 +1,23 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'autotest/restart'
4
+
5
+ # Autotest.add_hook :initialize do |at|
6
+ # at.extra_files << "../some/external/dependency.rb"
7
+ #
8
+ # at.libs << ":../some/external"
9
+ #
10
+ # at.add_exception 'vendor'
11
+ #
12
+ # at.add_mapping(/dependency.rb/) do |f, _|
13
+ # at.files_matching(/test_.*rb$/)
14
+ # end
15
+ #
16
+ # %w(TestA TestB).each do |klass|
17
+ # at.extra_class_map[klass] = "test/test_misc.rb"
18
+ # end
19
+ # end
20
+
21
+ # Autotest.add_hook :run_command do |at|
22
+ # system "rake build"
23
+ # end
data/.gemtest ADDED
File without changes
data/History.txt ADDED
@@ -0,0 +1,6 @@
1
+ === 1.0.0 / 2012-01-24
2
+
3
+ * 1 major enhancement
4
+
5
+ * Birthday!
6
+
data/Manifest.txt ADDED
@@ -0,0 +1,7 @@
1
+ .autotest
2
+ History.txt
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ lib/sakura_cloud.rb
7
+ test/test_sakura_cloud.rb
data/README.txt ADDED
@@ -0,0 +1,51 @@
1
+ = sakura_cloud
2
+
3
+ * http://github.com/xibbar/sakura_cloud
4
+
5
+ == DESCRIPTION:
6
+
7
+ Sakura Cloud Ruby API
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * Later... (list of features or problems)
12
+
13
+ == SYNOPSIS:
14
+
15
+ Later... (code sample of usage)
16
+
17
+ == REQUIREMENTS:
18
+
19
+ * Ruby-1.9.2 or later
20
+ * json
21
+ * net/https
22
+ * uri
23
+
24
+ == INSTALL:
25
+
26
+ * sudo gem install sakura_cloud
27
+
28
+ == LICENSE:
29
+
30
+ (The MIT License)
31
+
32
+ Copyright (c) 2012 xibbar (xibbar@ruby-lang.org)
33
+
34
+ Permission is hereby granted, free of charge, to any person obtaining
35
+ a copy of this software and associated documentation files (the
36
+ 'Software'), to deal in the Software without restriction, including
37
+ without limitation the rights to use, copy, modify, merge, publish,
38
+ distribute, sublicense, and/or sell copies of the Software, and to
39
+ permit persons to whom the Software is furnished to do so, subject to
40
+ the following conditions:
41
+
42
+ The above copyright notice and this permission notice shall be
43
+ included in all copies or substantial portions of the Software.
44
+
45
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
46
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
47
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
48
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
49
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
50
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
51
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+
6
+ Hoe.spec 'sakura_cloud' do
7
+ developer('xibbar', 'xibbar@ruby-lang.org')
8
+
9
+ # self.rubyforge_name = 'sakura_cloudx' # if different than 'sakura_cloud'
10
+ end
11
+
12
+ # vim: syntax=ruby
@@ -0,0 +1,111 @@
1
+ require 'json'
2
+ require 'net/https'
3
+ require 'uri'
4
+ class SakuraCloud
5
+ VERSION = '0.0.1'
6
+ API_URL_BASE='https://secure.sakura.ad.jp/cloud/api/cloud/0.2'
7
+
8
+ def initialize(api_key, api_secret)
9
+ @api_key=api_key
10
+ @api_secret=api_secret
11
+ api_uri=URI.parse(API_URL_BASE)
12
+ @api_server=Net::HTTP.new(api_uri.host,api_uri.port)
13
+ Net::HTTP.version_1_2
14
+ if api_uri.scheme=="https"
15
+ @api_server.use_ssl=true
16
+ @api_server.verify_mode = OpenSSL::SSL::VERIFY_NONE
17
+ end
18
+ end
19
+ class Server
20
+ def initialize(api_key,api_secret,api_server,server_id)
21
+ @api_key=api_key
22
+ @api_secret=api_secret
23
+ @api_server=api_server
24
+ @server_id=server_id
25
+ end
26
+ def profile
27
+ response=get(@api_server,"/server/"+@server_id)
28
+ end
29
+ alias :server :profile
30
+ def plan=(plan_id)
31
+ response=put(@api_server,"/server/#{@server_id}/to/plan/#{plan_id}")
32
+ end
33
+ def status
34
+ response=get(@api_server,"/server/#{@server_id}/monitor")
35
+ end
36
+ def power
37
+ response=get(@api_server,"/server/#{@server_id}/power")
38
+ end
39
+ def turn_on
40
+ response=put(@api_server,"/server/#{@server_id}/power")
41
+ end
42
+ def turn_off
43
+ response=delete(@api_server,"/server/#{@server_id}/power")
44
+ end
45
+ def reset
46
+ response=put(@api_server,"/server/#{@server_id}/reset")
47
+ end
48
+ def keyboard(*keys) #ex keyboard(["ctrl","alt","delete"])
49
+ response=put(@api_server,"/server/#{@server_id}/keyboard","Keys"=>keys)
50
+ end
51
+ def vnc_snapshot
52
+ response=get(@api_server,"/server/#{@server_id}/vnc/snapshot.png")
53
+ end
54
+ private
55
+ def get(server,path,option={})
56
+ response=api_request(:get,server,path,option)
57
+ begin
58
+ JSON.parse(response.body)
59
+ rescue
60
+ response
61
+ end
62
+ end
63
+ def post(server,path,option={})
64
+ response=api_request(:post,server,path,option)
65
+ begin
66
+ JSON.parse(response.body)
67
+ rescue
68
+ response
69
+ end
70
+ end
71
+ def put(server,path,option={})
72
+ response=api_request(:put,server,path,option)
73
+ begin
74
+ JSON.parse(response.body)
75
+ rescue
76
+ response
77
+ end
78
+ end
79
+ def delete(server,path,option={})
80
+ response=api_request(:delete,server,path,option)
81
+ begin
82
+ JSON.parse(response.body)
83
+ rescue
84
+ response
85
+ end
86
+ end
87
+ def api_request(method,server,path,option={})
88
+ response=nil
89
+ server.start do|http|
90
+ case method
91
+ when :get
92
+ request =Net::HTTP::Get.new(API_URL_BASE+path)
93
+ when :put
94
+ request =Net::HTTP::Put.new(API_URL_BASE+path)
95
+ when :delete
96
+ request =Net::HTTP::Delete.new(API_URL_BASE+path)
97
+ when :post
98
+ request =Net::HTTP::Post.new(API_URL_BASE+path)
99
+ end
100
+ request.basic_auth @api_key, @api_secret
101
+ request.set_form_data option
102
+ response = http.request(request)
103
+ end
104
+ response
105
+ end
106
+ end
107
+ def server(server_id)
108
+ Server.new(@api_key,@api_secret,@api_server,server_id)
109
+ end
110
+ end
111
+
@@ -0,0 +1,8 @@
1
+ require "test/unit"
2
+ require "sakura_cloud"
3
+
4
+ class TestSakuraCloud < Test::Unit::TestCase
5
+ def test_sanity
6
+ # flunk "write tests or I will kneecap you"
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sakura_cloud
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - xibbar
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-01-25 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rdoc
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: "3.10"
24
+ type: :development
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: hoe
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: "2.12"
35
+ type: :development
36
+ version_requirements: *id002
37
+ description: Sakura Cloud Ruby API
38
+ email:
39
+ - xibbar@ruby-lang.org
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files:
45
+ - History.txt
46
+ - Manifest.txt
47
+ - README.txt
48
+ files:
49
+ - .autotest
50
+ - History.txt
51
+ - Manifest.txt
52
+ - README.txt
53
+ - Rakefile
54
+ - lib/sakura_cloud.rb
55
+ - test/test_sakura_cloud.rb
56
+ - .gemtest
57
+ homepage: http://github.com/xibbar/sakura_cloud
58
+ licenses: []
59
+
60
+ post_install_message:
61
+ rdoc_options:
62
+ - --main
63
+ - README.txt
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ requirements: []
79
+
80
+ rubyforge_project: sakura_cloud
81
+ rubygems_version: 1.8.15
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: Sakura Cloud Ruby API
85
+ test_files:
86
+ - test/test_sakura_cloud.rb