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 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: