qingcloudserver 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/README.md +3 -0
- data/lib/client/connector.rb +62 -0
- data/lib/client/service.rb +19 -0
- data/lib/client/service_foudation.rb +42 -0
- data/lib/qingcloud_server.rb +3 -0
- data/lib/version.rb +3 -0
- data/qingcloudserver.gemspec +24 -0
- data/test/server_test.rb +8 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5a203e9b54e993bdb1cca50a554af2fc3b97f736
|
4
|
+
data.tar.gz: 24821582b6e9448f26f1e01c876d118ed7c01f8c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b103de89956954b9c35448b7ab42ccfbbd9a7bbd30982597b57a26a852ffb115bc04a5021f9e859c3c60997745cd1b0af204f72cf220c68720333db298cf3639
|
7
|
+
data.tar.gz: 2effec80db67230dafbb0fdfe6da2ed6616929841bf3366ba18484eafdfcad0f8a479a8ee042b4e5de85ceb5c663b540f2ecfbbcf8ea42a8bb54a8ebae738abf
|
data/README.md
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'cgi'
|
3
|
+
require 'openssl'
|
4
|
+
require 'base64'
|
5
|
+
require 'net/http'
|
6
|
+
module QingCloudServer
|
7
|
+
module Client
|
8
|
+
class Connector
|
9
|
+
|
10
|
+
APIAddress = "https://api.qingcloud.com/iaas/?"
|
11
|
+
|
12
|
+
attr_accessor :public_key
|
13
|
+
attr_accessor :secret_key
|
14
|
+
def initialize(public_key, secret_key)
|
15
|
+
@public_key = public_key
|
16
|
+
@secret_key = secret_key
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.init(public_key, secret_key)
|
20
|
+
Connector.new(public_key, secret_key)
|
21
|
+
end
|
22
|
+
|
23
|
+
def fetch_server_condition(action, params)
|
24
|
+
# request_url = APIAddress + "&action=#{action}"
|
25
|
+
|
26
|
+
params.update(
|
27
|
+
:action => action,
|
28
|
+
:time_stamp => Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ"),
|
29
|
+
:access_key_id => self.public_key,
|
30
|
+
:version => 1,
|
31
|
+
:signature_method => "HmacSHA256",
|
32
|
+
:signature_version => 1
|
33
|
+
)
|
34
|
+
|
35
|
+
request_body = params.sort.map do |k, v| # 这里的k是symbol,要先转化成为string,然后再使用
|
36
|
+
if k.to_s.include?("_N")
|
37
|
+
key_part = k.to_s.split("_")[0]
|
38
|
+
v.map {|e| "#{CGI.escape(key_part)}.#{v.index(e) + 1}=#{CGI.escape(e)}"}
|
39
|
+
else
|
40
|
+
"#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"
|
41
|
+
end
|
42
|
+
end.join("&")
|
43
|
+
|
44
|
+
puts "request_body #{request_body.inspect}"
|
45
|
+
request_url = "GET\n/iaas/\n#{request_body}"
|
46
|
+
|
47
|
+
sha_256_digest = OpenSSL::Digest.new("sha256")
|
48
|
+
signature = OpenSSL::HMAC.digest(sha_256_digest, self.secret_key, request_url)
|
49
|
+
signature = Base64.encode64(signature).strip
|
50
|
+
puts "signature is #{signature}"
|
51
|
+
|
52
|
+
uri = URI("#{APIAddress}#{request_body}&signature=#{CGI.escape(signature)}")
|
53
|
+
# Net::HTTP.start(uri.host, uri.port, :user_ssl => uri.scheme == "https") do |http|
|
54
|
+
# req = Net::HTTP::Get.new(uri)
|
55
|
+
# res = http.request(req)
|
56
|
+
# end
|
57
|
+
response_body = Net::HTTP.get_response(uri).body
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module QingCloudServer
|
2
|
+
module Client
|
3
|
+
class Service < ServiceFoudation
|
4
|
+
|
5
|
+
def describe_instances(
|
6
|
+
instances_N: [],
|
7
|
+
image_id_N: [],
|
8
|
+
instance_type: [],
|
9
|
+
status_N: [],
|
10
|
+
search_word: nil,
|
11
|
+
verbose: nil,
|
12
|
+
offset: nil,
|
13
|
+
limit: nil,
|
14
|
+
zone:
|
15
|
+
)eval(make_action_and_params)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Array
|
2
|
+
def arr_to_hsh
|
3
|
+
hsh = {}
|
4
|
+
self.each {|e| hsh.merge!(e)}
|
5
|
+
hsh
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module QingCloudServer
|
10
|
+
module Client
|
11
|
+
|
12
|
+
class ServiceFoudation
|
13
|
+
attr_accessor :response
|
14
|
+
def initialize(connector)
|
15
|
+
@connector = connector
|
16
|
+
end
|
17
|
+
|
18
|
+
def fetch_response(action, params)
|
19
|
+
params.each do |k, v|
|
20
|
+
params.delete(k) unless (v.is_a?(Numeric)) || (v && v.length > 0)
|
21
|
+
end
|
22
|
+
|
23
|
+
self.response = @connector.fetch_server_condition(action, params)
|
24
|
+
end
|
25
|
+
|
26
|
+
def convert_arr_to_hash(arr)
|
27
|
+
hash = {}
|
28
|
+
arr.each {|h| hash.merge!(h)}
|
29
|
+
hash
|
30
|
+
end
|
31
|
+
|
32
|
+
def make_action_and_params
|
33
|
+
"
|
34
|
+
fetch_response(
|
35
|
+
__method__.to_s.split('_').map {|e| e.capitalize!}.join,
|
36
|
+
eval('convert_arr_to_hash(method(__method__).parameters.map { |_, p| {p.to_sym => eval(p.to_s)} })')
|
37
|
+
)
|
38
|
+
"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
puts lib
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
puts __FILE__
|
7
|
+
require 'version'
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = "qingcloudserver"
|
10
|
+
spec.version = QingCloudServer::VERSION
|
11
|
+
spec.authors = ["gao yuehua"]
|
12
|
+
spec.email = ["0x00evil@gmail.com"]
|
13
|
+
|
14
|
+
spec.summary = "sdk for QingCloud"
|
15
|
+
spec.description = "another sdk for QingCloud servers"
|
16
|
+
spec.homepage = "https://github.com/0x00evil/qingcloud-server-sdk"
|
17
|
+
spec.license = "MIT"
|
18
|
+
|
19
|
+
spec.files = Dir["**/**"]
|
20
|
+
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.required_ruby_version = "> 2.1.5"
|
24
|
+
end
|
data/test/server_test.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
require_relative '../lib/qingcloud_server'
|
2
|
+
|
3
|
+
connector = QingCloudServer::Client::Connector.init("NULYIYWTTUXRAGENKRQM", "SKw7I862utQqhH98jTsKaxyWMybe2jrY0cF8EgE0")
|
4
|
+
service = QingCloudServer::Client::Service.new(connector)
|
5
|
+
|
6
|
+
service.describe_instances(status_N: ["running"], zone:'pek2', offset: 10, limit: 100, verbose: 1)
|
7
|
+
|
8
|
+
puts service.response
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: qingcloudserver
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- gao yuehua
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-25 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: another sdk for QingCloud servers
|
14
|
+
email:
|
15
|
+
- 0x00evil@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- README.md
|
21
|
+
- lib/client/connector.rb
|
22
|
+
- lib/client/service.rb
|
23
|
+
- lib/client/service_foudation.rb
|
24
|
+
- lib/qingcloud_server.rb
|
25
|
+
- lib/version.rb
|
26
|
+
- qingcloudserver.gemspec
|
27
|
+
- test/server_test.rb
|
28
|
+
homepage: https://github.com/0x00evil/qingcloud-server-sdk
|
29
|
+
licenses:
|
30
|
+
- MIT
|
31
|
+
metadata: {}
|
32
|
+
post_install_message:
|
33
|
+
rdoc_options: []
|
34
|
+
require_paths:
|
35
|
+
- lib
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.1.5
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
requirements: []
|
47
|
+
rubyforge_project:
|
48
|
+
rubygems_version: 2.4.5
|
49
|
+
signing_key:
|
50
|
+
specification_version: 4
|
51
|
+
summary: sdk for QingCloud
|
52
|
+
test_files: []
|
53
|
+
has_rdoc:
|