aliyun-api 0.0.1 → 0.0.2
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 +4 -4
- data/.gitignore +1 -0
- data/README.md +38 -3
- data/{aliyun-api.gemspec → aliyun_api.gemspec} +4 -3
- data/lib/aliyun/aliyun_error.rb +4 -0
- data/lib/aliyun/ecs.rb +76 -0
- data/lib/aliyun/version.rb +3 -0
- data/lib/aliyun.rb +24 -0
- metadata +21 -5
- data/lib/aliyun/api/version.rb +0 -5
- data/lib/aliyun/api.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65d3ac4b3cbdf248bfb914946e63c7452e677a1b
|
4
|
+
data.tar.gz: 0f88ba22119aa5a5a9b8aa265e36804acd4ab32c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4da9e60b500b9c696238cefd53cd8c01c91f007a04dba02a01f5865ac093ac4f1794c4fa90827eddc538b8c7e8ce6008d93a1a7b346ac8d7b05560efabd14a8a
|
7
|
+
data.tar.gz: b353b8388b9251d040ec0f3b846e925363aea0a3d8c33306ba4c7254108f0ef4eb57ab3cd3dafa88c53163f618d6c65c3b4ea709f17e92ddf278256c8036caa0
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# Aliyun
|
1
|
+
# Aliyun
|
2
2
|
|
3
|
-
|
3
|
+
The Aliyun ECS API Client for Ruby 是调用 [阿里云 ECS服务](http://help.aliyun.com/view/11108189_13730407.html) 的 Ruby客户端类库.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -20,7 +20,42 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
首先,需要在代码中引入类库:
|
24
|
+
|
25
|
+
```
|
26
|
+
require 'aliyun'
|
27
|
+
```
|
28
|
+
|
29
|
+
然后利用自己阿里云账号下的access_key初始化ECS对象。如果没有access_key,可以通过[阿里云用户中心](https://i.aliyun.com/access_key/)申请access_key。
|
30
|
+
|
31
|
+
```
|
32
|
+
options = {
|
33
|
+
:access_key_id => "xxxxxx",
|
34
|
+
:access_key_secret => "yyyyyy"
|
35
|
+
}
|
36
|
+
ecs = Aliyun::ECS.new options
|
37
|
+
```
|
38
|
+
|
39
|
+
这样, 你就可以根据 [阿里云弹性计算服务API参考手册](http://help.aliyun.com/view/11108189_13730407.html)初始化业务参数(除Action参数之外)为一个hash对象,并且将其作为参数传给Action方法(Action参数)。
|
40
|
+
|
41
|
+
```
|
42
|
+
parameters = {:parameter_name => parameter_value}
|
43
|
+
ecs.action parameters
|
44
|
+
```
|
45
|
+
|
46
|
+
(1) 例如查询可用地域列表,其Action参数为DescribeRegions,而没有其他参数,代码如下
|
47
|
+
|
48
|
+
```
|
49
|
+
ecs.describe_regions {}
|
50
|
+
```
|
51
|
+
|
52
|
+
(2) 再比如查询可用镜像,代码如下
|
53
|
+
|
54
|
+
```
|
55
|
+
parameters = {:RegionId => "cn-beijing", :PageNumber => 2, :RageSize => 20}
|
56
|
+
service.describe_images parameters
|
57
|
+
```
|
58
|
+
|
24
59
|
|
25
60
|
## Contributing
|
26
61
|
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'aliyun/
|
4
|
+
require 'aliyun/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "aliyun-api"
|
8
|
-
spec.version = Aliyun::
|
8
|
+
spec.version = Aliyun::VERSION
|
9
9
|
spec.authors = ["qjpcpu"]
|
10
10
|
spec.email = ["qjpcpu@gmail.com"]
|
11
11
|
spec.summary = %q{Aliyun ECS API}
|
12
12
|
spec.description = %q{Used for aliyun ecs api}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/qjpcpu/aliyun-api"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_runtime_dependency 'rest-client'
|
23
24
|
end
|
data/lib/aliyun/ecs.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'time'
|
2
|
+
require 'securerandom'
|
3
|
+
require 'uri'
|
4
|
+
require 'rest_client'
|
5
|
+
require 'base64'
|
6
|
+
require 'hmac-sha1'
|
7
|
+
require 'json'
|
8
|
+
|
9
|
+
|
10
|
+
module Aliyun
|
11
|
+
class ECS
|
12
|
+
def initialize(options={})
|
13
|
+
Aliyun.config.access_key_id ||= options[:access_key_id]
|
14
|
+
Aliyun.config.access_key_secret ||= options[:access_key_secret]
|
15
|
+
Aliyun.config.endpoint_url ||= options[:endpoint_url]
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(method_name, *args)
|
19
|
+
super if /[A-Z]/ =~ method_name.to_s
|
20
|
+
method_name = method_name.to_s.split('_').map{|w| w.capitalize }.join('').gsub '_',''
|
21
|
+
proxy_to_aliyun(method_name, args[0])
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def proxy_to_aliyun(method_name, params)
|
26
|
+
params = build_request_parameters method_name, params
|
27
|
+
begin
|
28
|
+
res = RestClient.get Aliyun.config.endpoint_url, {:params => params,:verify_ssl => OpenSSL::SSL::VERIFY_PEER }
|
29
|
+
return JSON.parse res.body if res.code == 200
|
30
|
+
rescue RestClient::Exception => rcex
|
31
|
+
raise AliyunError.new "response error code: #{rcex.response.code}\ndetails: #{rcex.response.body}\nrequest parameters: #{params}"
|
32
|
+
rescue =>e
|
33
|
+
raise AliyunError.new e.to_s
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_request_parameters(method_name, params={})
|
38
|
+
params = Aliyun.config.request_parameters.merge(params||{})
|
39
|
+
params.merge!({
|
40
|
+
:AccessKeyId => Aliyun.config.access_key_id,
|
41
|
+
:Action => method_name.to_s,
|
42
|
+
:SignatureNonce => SecureRandom.uuid,
|
43
|
+
:TimeStamp => Time.now.utc.iso8601
|
44
|
+
})
|
45
|
+
params[:Signature] = compute_signature params
|
46
|
+
params
|
47
|
+
end
|
48
|
+
|
49
|
+
def compute_signature(params)
|
50
|
+
params = params.inject({}){|memo,(k,v)| memo[k.to_sym]=v;memo}
|
51
|
+
sorted_keys = params.keys.sort
|
52
|
+
canonicalized_query_string = ""
|
53
|
+
sorted_keys.each do |key|
|
54
|
+
canonicalized_query_string << '&'
|
55
|
+
canonicalized_query_string << percent_encode(key.to_s)
|
56
|
+
canonicalized_query_string << '='
|
57
|
+
canonicalized_query_string << percent_encode(params[key])
|
58
|
+
end
|
59
|
+
length = canonicalized_query_string.length
|
60
|
+
string_to_sign = Aliyun.config.request_method + '&' + percent_encode('/') + '&' + percent_encode(canonicalized_query_string[1,length])
|
61
|
+
calculate_signature Aliyun.config.access_key_secret+"&", string_to_sign
|
62
|
+
end
|
63
|
+
|
64
|
+
def calculate_signature key, string_to_sign
|
65
|
+
hmac = HMAC::SHA1.new(key)
|
66
|
+
hmac.update(string_to_sign)
|
67
|
+
signature = Base64.encode64(hmac.digest).gsub("\n", '')
|
68
|
+
signature
|
69
|
+
end
|
70
|
+
|
71
|
+
def percent_encode value
|
72
|
+
value = URI.encode_www_form_component(value).gsub(/\+/,'%20').gsub(/\*/,'%2A').gsub(/%7E/,'~')
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
data/lib/aliyun.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "aliyun/version"
|
2
|
+
require "aliyun/aliyun_error"
|
3
|
+
require "aliyun/ecs"
|
4
|
+
require 'singleton'
|
5
|
+
|
6
|
+
module Aliyun
|
7
|
+
class Config
|
8
|
+
include Singleton
|
9
|
+
attr_accessor :request_parameters, :access_key_id, :access_key_secret, :endpoint_url, :request_method
|
10
|
+
def initialize
|
11
|
+
self.request_parameters={
|
12
|
+
:Format=>"JSON",
|
13
|
+
:Version=>"2014-05-26",
|
14
|
+
:SignatureMethod=>"HMAC-SHA1",
|
15
|
+
:SignatureVersion=>"1.0"
|
16
|
+
}
|
17
|
+
self.request_method = 'GET'
|
18
|
+
self.endpoint_url= 'https://ecs.aliyuncs.com/'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
def self.config
|
22
|
+
Config.instance
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aliyun-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- qjpcpu
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: Used for aliyun ecs api
|
42
56
|
email:
|
43
57
|
- qjpcpu@gmail.com
|
@@ -50,10 +64,12 @@ files:
|
|
50
64
|
- LICENSE.txt
|
51
65
|
- README.md
|
52
66
|
- Rakefile
|
53
|
-
-
|
54
|
-
- lib/aliyun
|
55
|
-
- lib/aliyun/
|
56
|
-
|
67
|
+
- aliyun_api.gemspec
|
68
|
+
- lib/aliyun.rb
|
69
|
+
- lib/aliyun/aliyun_error.rb
|
70
|
+
- lib/aliyun/ecs.rb
|
71
|
+
- lib/aliyun/version.rb
|
72
|
+
homepage: https://github.com/qjpcpu/aliyun-api
|
57
73
|
licenses:
|
58
74
|
- MIT
|
59
75
|
metadata: {}
|
data/lib/aliyun/api/version.rb
DELETED