Skip to content

Commit 16a0a77

Browse files
author
Shirshendu Mukherjee
committed
Improve cluster model, add some detail API calls
1 parent 9df340c commit 16a0a77

5 files changed

Lines changed: 58 additions & 64 deletions

File tree

app/controllers/clusters_controller.rb

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
class ClustersController < AuthenticatedUsersController
22
get '/clusters' do
33
clusters = Tendrl::Cluster.all
4-
{ clusters: ClusterPresenter.list(clusters) }.to_json
4+
JSON.generate clusters: clusters
55
end
66

77
before '/clusters/:cluster_id/?*?' do
8-
@cluster = Tendrl::Cluster.new(params[:cluster_id])
9-
#@cluster.gd2.get("/ping")
8+
@cluster = Tendrl::Cluster.find(params[:cluster_id])
9+
raise Tendrl::HttpResponseErrorHandler.new(
10+
StandardError.new,
11+
cause: '/clusters/id',
12+
object_id: params[:cluster_id]
13+
)
1014
end
1115

1216
get '/clusters/:cluster_id' do
@@ -24,41 +28,34 @@ class ClustersController < AuthenticatedUsersController
2428
{ volumes: volumes }.to_json
2529
end
2630

31+
get '/clusters/:cluster_id/volumes/:volume_id' do
32+
volume = @cluster.gd2.volumes(params[:volume_id])
33+
{ volume: volume }.to_json
34+
end
35+
36+
get '/clusters/:cluster_id/volumes/:volume_id/bricks' do
37+
bricks = @cluster.gd2.bricks(params[:volume_id])
38+
{ bricks: bricks }.to_json
39+
end
40+
2741
post '/import' do
2842
new_endpoint = {
29-
gd2_url: parsed_body['gd2_url'],
30-
secret: parsed_body['secret']
43+
'gd2_url' => parsed_body['gd2_url'],
44+
'secret' => parsed_body['secret']
3145
}
32-
gd2 = Gd2Client.new new_endpoint
46+
gd2 = Gd2Client.new new_endpoint.symbolize_keys
3347
state = gd2.state
3448
cluster = Tendrl::Cluster.new state['cluster-id']
3549
unless cluster.endpoints.include? new_endpoint
36-
Tendrl.etcd.create_in_order(
37-
"/clusters/#{state['cluster-id']}/endpoints",
38-
value: new_endpoint.to_json
39-
)
50+
cluster.add_endpoint new_endpoint
4051
end
4152
status 201
4253
state.merge(endpoints: cluster.endpoints).to_json
4354
end
4455

4556
#get '/clusters/:cluster_id/nodes/:node_id/bricks' do
46-
#node = Tendrl::Node.find_by_cluster_id(
47-
#params[:cluster_id], params[:node_id]
48-
#)
49-
#halt 404 unless node.present?
50-
#bricks = Tendrl::Brick.find_all_by_cluster_id_and_node_fqdn(
51-
#params[:cluster_id], node['fqdn']
52-
#)
53-
#{ bricks: BrickPresenter.list(bricks) }.to_json
54-
#end
55-
56-
#get '/clusters/:cluster_id/volumes/:volume_id/bricks' do
57-
#references = Tendrl::Brick.find_refs_by_cluster_id_and_volume_id(
58-
#params[:cluster_id], params[:volume_id]
59-
#)
60-
#bricks = Tendrl::Brick.find_by_cluster_id_and_refs(params[:cluster_id], references)
61-
#{ bricks: BrickPresenter.list(bricks) }.to_json
57+
#bricks = @cluster.gd2.get("/endpoints")
58+
#{ bricks: bricks }.to_json
6259
#end
6360

6461
#get '/clusters/:cluster_id/notifications' do

app/models/cluster.rb

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,48 +7,41 @@ def initialize(cluster_id)
77
end
88

99
def endpoints
10-
Tendrl.etcd.get(
10+
@endpoints ||= Tendrl.etcd.get(
1111
"/clusters/#{@uuid}/endpoints", recursive: true
1212
).children.map(&:value).sort.uniq.map { |e| JSON.parse e }
13+
rescue Etcd::KeyNotFound
14+
[]
1315
end
1416

1517
def gd2
16-
@gd2 ||= Gd2Client.from_endpoint endpoints.sample
18+
@gd2 ||= endpoints.map { |e| Gd2Client.from_endpoint e }.find(&:ping?)
1719
end
1820

19-
class << self
20-
def exist?(cluster_id)
21-
Tendrl.etcd.get "/clusters/#{cluster_id}"
22-
rescue Etcd::KeyNotFound => e
23-
raise Tendrl::HttpResponseErrorHandler.new(
24-
e, cause: '/clusters/id', object_id: cluster_id
25-
)
26-
end
21+
def to_json(_)
22+
gd2.state.merge(endpoints: endpoints).to_json
23+
end
2724

25+
def add_endpoint(endpoint)
26+
Tendrl.etcd.create_in_order(
27+
"/clusters/#{@uuid}/endpoints",
28+
value: endpoint.to_json
29+
)
30+
@endpoints = nil
31+
end
32+
33+
class << self
2834
def find(cluster_id)
29-
attributes = {}
30-
begin
31-
attributes = Tendrl.recurse(
32-
Tendrl.etcd.get(
33-
"/clusters/#{cluster_id}", recursive: true
34-
)
35-
)[cluster_id]
36-
rescue Etcd::KeyNotFound
37-
raise Tendrl::HttpResponseErrorHandler.new(
38-
e, cause: '/clusters/id', object_id: cluster_id
39-
)
40-
end
41-
new(attributes)
35+
cluster = new(cluster_id)
36+
return nil unless cluster.gd2.present?
4237
end
4338

4439
def all
45-
begin
46-
Tendrl.etcd.get('/clusters', recursive: true).children.map do |cluster|
47-
Tendrl.recurse(cluster)
48-
end
49-
rescue Etcd::KeyNotFound
50-
[]
40+
Tendrl.etcd.get('/clusters').children.map do |etcd_node|
41+
Cluster.new File.basename(etcd_node.key)
5142
end
43+
rescue Etcd::KeyNotFound
44+
[]
5245
end
5346
end
5447
end

app/models/peer.rb

Lines changed: 0 additions & 7 deletions
This file was deleted.

lib/gd2_client.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ def volumes
5353
end
5454

5555
def volume(vol_name)
56-
get("/v1/volumes#{vol_name}")
56+
get("/v1/volumes/#{vol_name}")
57+
end
58+
59+
def bricks(vol_name)
60+
get("/v1/volumes/#{vol_name}/bricks")
61+
end
62+
63+
def ping?
64+
HTTParty.get(@gd2_url + "/ping").success?
65+
end
66+
67+
def endpoints
68+
get('/endpoints')
5769
end
5870
end

lib/tendrl.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ def unmarshall!(attrs)
153153
require './app/models/job'
154154
require './app/models/volume'
155155
require './app/models/brick'
156-
require './app/models/peer'
157156

158157
# Forms
159158
require './app/forms/user_form'

0 commit comments

Comments
 (0)