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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f6a24078529505e8667be68f0766004862f4186
4
- data.tar.gz: 705b30102c4003e94ef8b8fb79be081fcd48f7a0
3
+ metadata.gz: b72c1a8cce152a6258010041b1a445d307ad3034
4
+ data.tar.gz: 35431d8ea009e67585e824f53dac01b7e9aad3cd
5
5
  SHA512:
6
- metadata.gz: 8ae7c0d5fbfb34636ab27d41d18725421324d049845ef97acdd22e27dd951c3d107e3c13bc381ae514114679319350989c41493eaf1a7c5852f85825ccf7b880
7
- data.tar.gz: 58877b8912cdf22004c79edaa2b2da551450088612e21a7d71f47786f76ff2abae6fde2d9d9bf2c6929411d3a92724afa245c9c24a70e14a38661eac64e98f01
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
- To do...
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
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_development_dependency "bundler", "~> 1.10"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency 'minitest', '~> 0'
24
+ spec.add_development_dependency 'minitest'
25
25
 
26
26
  end
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Exoscale
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.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-10 00:00:00.000000000 Z
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: