exoscale 0.1.0 → 0.2.0
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/README.md +9 -1
- data/exoscale.gemspec +1 -1
- data/lib/exoscale.rb +2 -1
- data/lib/exoscale/dns.rb +138 -0
- data/lib/exoscale/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b72c1a8cce152a6258010041b1a445d307ad3034
|
|
4
|
+
data.tar.gz: 35431d8ea009e67585e824f53dac01b7e9aad3cd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a127dc47a67fb6fd682c7c82eb1019a07997af895d5ef26dc4724a45ae48fd218fd3a64811f635f80b4f9c6ba8ff41990939b67215923c46b9e3daa80e256404
|
|
7
|
+
data.tar.gz: 7151eebbd89f115fb287230a12ff2af3f38ef6b8885f3a0093b4e7a12a767cb3a0f5174d6e6cf793fdf6b09bd79af8a4c3d35e16586d8f37727368624a6c86b0
|
data/README.md
CHANGED
|
@@ -35,7 +35,15 @@ puts exo.list_virtual_machines
|
|
|
35
35
|
|
|
36
36
|
### DNS
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
```
|
|
39
|
+
require 'exoscale'
|
|
40
|
+
exo = Exoscale::Compute.new(ENV['EXO_API_KEY'], ENV['EXO_API_SECRET_KEY'])
|
|
41
|
+
puts exo.list_domains
|
|
42
|
+
puts exo.create_domain('example.com')
|
|
43
|
+
puts exo.create_record('example.com', 'www', 'A', '1.2.3.4')
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
|
|
39
47
|
|
|
40
48
|
### Apps
|
|
41
49
|
|
data/exoscale.gemspec
CHANGED
data/lib/exoscale.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
require "exoscale/version"
|
|
2
2
|
require "exoscale/compute"
|
|
3
|
+
require "exoscale/dns"
|
|
3
4
|
|
|
4
5
|
module Exoscale
|
|
5
6
|
COMPUTE_ENDPOINT = "https://api.exoscale.ch:443/compute"
|
|
6
|
-
DNS_ENDPOINT = "https://api.exoscale.ch/dns"
|
|
7
|
+
DNS_ENDPOINT = "https://api.exoscale.ch/dns/v1"
|
|
7
8
|
APP_ENDPOINT = "https://api.app.exo.io:443"
|
|
8
9
|
end
|
data/lib/exoscale/dns.rb
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
require "base64"
|
|
2
|
+
require "cgi"
|
|
3
|
+
require "uri"
|
|
4
|
+
require "openssl"
|
|
5
|
+
require 'net/https'
|
|
6
|
+
require 'json'
|
|
7
|
+
|
|
8
|
+
module Exoscale
|
|
9
|
+
|
|
10
|
+
class Dns
|
|
11
|
+
attr_accessor :api_key, :api_secret, :api_endpoint, :x_dns_token
|
|
12
|
+
|
|
13
|
+
@@digest = OpenSSL::Digest.new('sha1')
|
|
14
|
+
|
|
15
|
+
def initialize(api_key, api_secret)
|
|
16
|
+
# Use something like: e = Exoscale::Dns.new(ENV['EXO_API_KEY'], ENV['EXO_SECRET_KEY'])
|
|
17
|
+
@api_key = api_key
|
|
18
|
+
@api_secret = api_secret
|
|
19
|
+
@api_endpoint = DNS_ENDPOINT
|
|
20
|
+
@x_dns_token = "#{@api_key}:#{@api_secret}"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def execute_request(method, path, data=nil, headers={})
|
|
24
|
+
init_headers = {'Accept' => 'application/json', 'X-DNS-Token' => @x_dns_token }
|
|
25
|
+
init_headers.merge!(headers)
|
|
26
|
+
uri = URI(@api_endpoint+path)
|
|
27
|
+
|
|
28
|
+
case method
|
|
29
|
+
when 'get'
|
|
30
|
+
request = Net::HTTP::Get.new(uri, initheader = init_headers)
|
|
31
|
+
when 'post'
|
|
32
|
+
request = Net::HTTP::Post.new(uri, initheader = init_headers)
|
|
33
|
+
request.body = data.to_json unless data.nil?
|
|
34
|
+
when 'delete'
|
|
35
|
+
request = Net::HTTP::Delete.new(uri, initheader = init_headers)
|
|
36
|
+
when 'put'
|
|
37
|
+
request = Net::HTTP::Put.new(uri, initheader = init_headers)
|
|
38
|
+
request.body = data.to_json unless data.nil?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
puts uri
|
|
42
|
+
puts request.to_s
|
|
43
|
+
response = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') {|http|
|
|
44
|
+
http.request(request)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return JSON.parse(response.body)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def list_domains
|
|
51
|
+
self.execute_request('get', "/domains")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def domain(domain_name)
|
|
55
|
+
uri = "/domains/" + domain_name.to_s
|
|
56
|
+
self.execute_request('get', uri)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def create_domain(domain_name)
|
|
60
|
+
params = {
|
|
61
|
+
domain: {
|
|
62
|
+
name: domain_name
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
self.execute_request('post', "/domains", params, {'Content-Type' => 'application/json'})
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def delete_domain(domain_name)
|
|
69
|
+
uri = "/domains/" + domain_name.to_s
|
|
70
|
+
self.execute_request('delete', uri)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def reset_domain_token(domain_name)
|
|
74
|
+
uri = "/domains/" + domain_name.to_s + "/token"
|
|
75
|
+
self.execute_request('post', uri)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def list_records(domain_name)
|
|
79
|
+
uri = "/domains/" + domain_name.to_s + "/records"
|
|
80
|
+
self.execute_request('get', uri)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def create_record(domain_name, record_name, record_type, record_content, record_ttl=nil, record_prio=nil)
|
|
84
|
+
params = {
|
|
85
|
+
record: {
|
|
86
|
+
name: record_name,
|
|
87
|
+
record_type: record_type,
|
|
88
|
+
content: record_content
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if !record_ttl.nil?
|
|
92
|
+
params[:record][:ttl] = record_ttl
|
|
93
|
+
end
|
|
94
|
+
if !record_prio.nil?
|
|
95
|
+
params[:record][:prio] = record_prio
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
uri = "/domains/" + domain_name.to_s + "/records"
|
|
99
|
+
self.execute_request('post', uri, params, {'Content-Type' => 'application/json'})
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def record(domain_name, record_id)
|
|
103
|
+
uri = "/domains/" + domain_name.to_s + "/records/" + record_id.to_s
|
|
104
|
+
self.execute_request('get', uri)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def update_record(domain_name, record_id, record_name=nil, record_content=nil, record_ttl=nil, record_prio=nil)
|
|
108
|
+
params = {
|
|
109
|
+
record: {}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if !record_name.nil?
|
|
113
|
+
params[:record][:name] = record_name
|
|
114
|
+
end
|
|
115
|
+
if !record_content.nil?
|
|
116
|
+
params[:record][:content] = record_content
|
|
117
|
+
end
|
|
118
|
+
if !record_ttl.nil?
|
|
119
|
+
params[:record][:ttl] = record_ttl
|
|
120
|
+
end
|
|
121
|
+
if !record_prio.nil?
|
|
122
|
+
params[:record][:prio] = record_prio
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
if record_name.nil? && record_content.nil?
|
|
126
|
+
raise "Record name and content can be both nil"
|
|
127
|
+
else
|
|
128
|
+
uri = "/domains/" + domain_name.to_s + "/records/" + record_id.to_s
|
|
129
|
+
self.execute_request('put', uri, params, {'Content-Type' => 'application/json'})
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def delete_record(domain_name, record_id)
|
|
134
|
+
uri = "/domains/" + domain_name.to_s + "/records/" + record_id.to_s
|
|
135
|
+
self.execute_request('delete', uri)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
data/lib/exoscale/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: exoscale
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nicolas Brechet
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-12-
|
|
11
|
+
date: 2015-12-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -42,14 +42,14 @@ dependencies:
|
|
|
42
42
|
name: minitest
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
description: Simple Ruby gem to access Exoscale API
|
|
@@ -71,6 +71,7 @@ files:
|
|
|
71
71
|
- exoscale.gemspec
|
|
72
72
|
- lib/exoscale.rb
|
|
73
73
|
- lib/exoscale/compute.rb
|
|
74
|
+
- lib/exoscale/dns.rb
|
|
74
75
|
- lib/exoscale/version.rb
|
|
75
76
|
homepage: https://github.com/nicolasbrechet/ruby-exoscale
|
|
76
77
|
licenses:
|