qingcloudserver 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,3 @@
1
+ MIT License
2
+
3
+ Enjoy
@@ -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
@@ -0,0 +1,3 @@
1
+ require_relative 'client/service_foudation'
2
+ require_relative 'client/service'
3
+ require_relative 'client/connector'
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module QingCloudServer
2
+ VERSION = '0.0.1'
3
+ end
@@ -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
@@ -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: