rhc 0.90.7 → 0.91.11

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.
@@ -0,0 +1,159 @@
1
+ require 'rubygems'
2
+ require 'rest-client'
3
+ require 'logger'
4
+ require 'json'
5
+ require 'rhc-rest/exceptions/exceptions'
6
+ require 'rhc-rest/application'
7
+ require 'rhc-rest/cartridge'
8
+ require 'rhc-rest/client'
9
+ require 'rhc-rest/domain'
10
+ require 'rhc-rest/key'
11
+ require 'rhc-rest/user'
12
+
13
+ @@end_point = ""
14
+ @@headers = {:accept => :json}
15
+
16
+ module Rhc
17
+ module Rest
18
+ def logger
19
+ if defined?Rails.logger
20
+ Rails.logger
21
+ else
22
+ Logger.new(STDOUT)
23
+ end
24
+ end
25
+
26
+ def parse_response(response)
27
+ result = JSON.parse(response)
28
+ type = result['type']
29
+ data = result['data']
30
+ case type
31
+ when 'domains'
32
+ domains = Array.new
33
+ data.each do |domain_json|
34
+ domains.push(Domain.new(domain_json))
35
+ end
36
+ return domains
37
+ when 'domain'
38
+ return Domain.new(data)
39
+ when 'applications'
40
+ apps = Array.new
41
+ data.each do |app_json|
42
+ apps.push(Application.new(app_json))
43
+ end
44
+ return apps
45
+ when 'application'
46
+ return Application.new(data)
47
+ when 'cartridges'
48
+ carts = Array.new
49
+ data.each do |cart_json|
50
+ carts.push(Cartridge.new(cart_json))
51
+ end
52
+ return carts
53
+ when 'cartridge'
54
+ return Cartridge.new(data)
55
+ when 'user'
56
+ return User.new(data)
57
+ when 'keys'
58
+ keys = Array.new
59
+ data.each do |key_json|
60
+ keys.push(Key.new(key_json))
61
+ end
62
+ return keys
63
+ when 'key'
64
+ return Key.new(data)
65
+ else
66
+ data
67
+ end
68
+ end
69
+
70
+ def send(request)
71
+ begin
72
+ #puts request.headers
73
+ response = request.execute
74
+ #set cookie
75
+ rh_sso = response.cookies['rh_sso']
76
+ #puts response.cookies
77
+ if not rh_sso.nil?
78
+ @@headers["cookie"] = "rh_sso=#{rh_sso}"
79
+ end
80
+ #puts "#{response}"
81
+ return parse_response(response) unless response.nil? or response.code == 204
82
+ rescue RestClient::RequestTimeout, RestClient::ServerBrokeConnection, RestClient::SSLCertificateNotVerified => e
83
+ raise ResourceAccessException.new("Failed to access resource: #{e.message}")
84
+ rescue RestClient::ExceptionWithResponse => e
85
+ #puts "#{e.response}"
86
+ process_error_response(e.response)
87
+ rescue Exception => e
88
+ raise ResourceAccessException.new("Failed to access resource: #{e.message}")
89
+ end
90
+ end
91
+
92
+ def process_error_response(response)
93
+ messages = Array.new
94
+ begin
95
+ result = JSON.parse(response)
96
+ messages = result['messages']
97
+ rescue Exception => e
98
+ logger.debug "Response did not include a message from server" if @mydebug
99
+ #puts response
100
+ end
101
+ case response.code
102
+ when 401
103
+ raise UnAuthorizedException.new("Not authenticated")
104
+ when 403
105
+ messages.each do |message|
106
+ if message['severity'].upcase == "ERROR"
107
+ raise RequestDeniedException.new(message['text'])
108
+ end
109
+ end
110
+ when 404
111
+ messages.each do |message|
112
+ if message['severity'].upcase == "ERROR"
113
+ raise ResourceNotFoundException.new(message['text'])
114
+ end
115
+ end
116
+ when 409
117
+ messages.each do |message|
118
+ if message['severity'] and message['severity'].upcase == "ERROR"
119
+ raise ValidationException.new(message['text'])
120
+ end
121
+ end
122
+ when 422
123
+ #puts response
124
+ e = nil
125
+ messages.each do |message|
126
+ if message["field"]
127
+ if e and e.field ==message["field"]
128
+ e.message << " #{message["text"]}"
129
+ else
130
+ e = ValidationException.new(message["text"], message["field"])
131
+ end
132
+ end
133
+ end
134
+ raise e
135
+ when 400
136
+ messages.each do |message|
137
+ if message['severity'].upcase == "ERROR"
138
+ raise ClientErrorException.new(message['text'])
139
+ end
140
+ end
141
+ when 500
142
+ messages.each do |message|
143
+ if message['severity'].upcase == "ERROR"
144
+ raise ServerErrorException.new(message['text'])
145
+ end
146
+ end
147
+ when 503
148
+ messages.each do |message|
149
+ if message['severity'].upcase == "ERROR"
150
+ raise ServiceUnavailableException.new(message['text'])
151
+ end
152
+ end
153
+ else
154
+ raise ResourceAccessException.new("Server returned error code with no output: #{response.code}")
155
+ end
156
+
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,82 @@
1
+
2
+ module Rhc
3
+ module Rest
4
+ class Application
5
+ include Rest
6
+ attr_reader :domain_id, :name, :creation_time, :uuid, :aliases, :git_url, :app_url, :node_profile, :framework, :scalable, :health_check_path, :embedded
7
+ def initialize(args)
8
+ #logger.debug args
9
+ @domain_id = args[:domain_id] || args["domain_id"]
10
+ @name = args[:name] || args["name"]
11
+ @creation_time = args[:creation_time] || args["creation_time"]
12
+ @uuid = args[:uuid] || args["uuid"]
13
+ @aliases = args[:aliases] || args["aliases"]
14
+ @server_identity = args[:server_identity] || args["server_identity"]
15
+ @links = args[:links] || args["links"]
16
+ end
17
+
18
+ #Add Cartridge
19
+ def add_cartridge(name)
20
+ logger.debug "Adding cartridge #{name}" if @mydebug
21
+ url = @links['ADD_CARTRIDGE']['href']
22
+ method = @links['ADD_CARTRIDGE']['method']
23
+ payload = {:name => name}
24
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
25
+ return send(request)
26
+ end
27
+
28
+ #Get all Cartridge for this applications
29
+ def cartridges
30
+ logger.debug "Getting all cartridges for application #{self.name}" if @mydebug
31
+ url = @links['LIST_CARTRIDGES']['href']
32
+ method = @links['LIST_CARTRIDGES']['method']
33
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers)
34
+ return send(request)
35
+ end
36
+
37
+ #Start Application
38
+ def start
39
+ logger.debug "Starting application #{self.name}" if @mydebug
40
+ url = @links['START']['href']
41
+ method = @links['START']['method']
42
+ payload = {:event=> "start"}
43
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
44
+ return send(request)
45
+ end
46
+
47
+ #Stop Application
48
+ def stop(force=false)
49
+ logger.debug "Stopping application #{self.name} force-#{force}" if @mydebug
50
+ url = @links['STOP']['href']
51
+ method = @links['STOP']['method']
52
+ if force
53
+ payload = {:event=> "force-stop"}
54
+ else
55
+ payload = {:event=> "stop"}
56
+ end
57
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
58
+ return send(request)
59
+ end
60
+
61
+ #Restart Application
62
+ def restart
63
+ logger.debug "Restarting application #{self.name}" if @mydebug
64
+ url = @links['RESTART']['href']
65
+ method = @links['RESTART']['method']
66
+ payload = {:event=> "restart"}
67
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
68
+ return send(request)
69
+ end
70
+
71
+ #Delete Application
72
+ def destroy
73
+ logger.debug "Deleting application #{self.name}" if @mydebug
74
+ url = @links['DELETE']['href']
75
+ method = @links['DELETE']['method']
76
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers)
77
+ return send(request)
78
+ end
79
+ alias :delete :destroy
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,64 @@
1
+ module Rhc
2
+ module Rest
3
+ class Cartridge
4
+ include Rest
5
+ attr_reader :type, :name
6
+ def initialize(args)
7
+ @name = args[:name] || args["name"]
8
+ @type = args[:type] || args["type"]
9
+ @links = args[:links] || args["links"]
10
+ end
11
+
12
+ #Start Cartridge
13
+ def start
14
+ logger.debug "Starting cartridge #{self.name}" if @mydebug
15
+ url = @links['START']['href']
16
+ method = @links['START']['method']
17
+ payload = {:event=> "start"}
18
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
19
+ return send(request)
20
+ end
21
+
22
+ #Stop Cartridge
23
+ def stop()
24
+ logger.debug "Stopping cartridge #{self.name}" if @mydebug
25
+ url = @links['STOP']['href']
26
+ method = @links['STOP']['method']
27
+ payload = {:event=> "stop"}
28
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
29
+ return send(request)
30
+ end
31
+
32
+ #Restart Cartridge
33
+ def restart
34
+ logger.debug "Restarting cartridge #{self.name}" if @mydebug
35
+ url = @links['RESTART']['href']
36
+ method = @links['RESTART']['method']
37
+ payload = {:event=> "restart"}
38
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
39
+ return send(request)
40
+ end
41
+
42
+ #Reload Cartridge
43
+ def reload
44
+ logger.debug "Reloading cartridge #{self.name}" if @mydebug
45
+ url = @links['RESTART']['href']
46
+ method = @links['RESTART']['method']
47
+ payload = {:event=> "reload"}
48
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
49
+ return send(request)
50
+ end
51
+
52
+ #Delete Cartridge
53
+ def destroy
54
+ logger.debug "Deleting cartridge #{self.name}" if @mydebug
55
+ url = @links['DELETE']['href']
56
+ method = @links['DELETE']['method']
57
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers)
58
+ return send(request)
59
+ end
60
+ alias :delete :destroy
61
+ alias :delete :destroy
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,123 @@
1
+ require 'base64'
2
+
3
+ module Rhc
4
+ module Rest
5
+ class Client
6
+ include Rest
7
+ def initialize(end_point, username, password)
8
+ logger.debug "Connecting to #{end_point}" if @mydebug
9
+ credentials = Base64.encode64("#{username}:#{password}")
10
+ @@headers["Authorization"] = "Basic #{credentials}"
11
+ #first get the API
12
+ RestClient.proxy = ENV['http_proxy']
13
+ request = RestClient::Request.new(:url => end_point, :method => :get, :headers => @@headers)
14
+ begin
15
+ response = request.execute
16
+ result = JSON.parse(response)
17
+ @links = send(request)
18
+ rescue RestClient::ExceptionWithResponse => e
19
+ logger.error "Failed to get API #{e.response}"
20
+ rescue Exception => e
21
+ raise ResourceAccessException.new("Resource could not be accessed:#{e.message}")
22
+ end
23
+ end
24
+
25
+ #Add Domain
26
+ def add_domain(id)
27
+ logger.debug "Adding domain #{id}" if @mydebug
28
+ url = @links['ADD_DOMAIN']['href']
29
+ method = @links['ADD_DOMAIN']['method']
30
+ payload = {:id => id}
31
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
32
+ return send(request)
33
+ end
34
+
35
+ #Get all Domain
36
+ def domains
37
+ logger.debug "Getting all domains" if @mydebug
38
+ url = @links['LIST_DOMAINS']['href']
39
+ method = @links['LIST_DOMAINS']['method']
40
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers)
41
+ return send(request)
42
+ end
43
+
44
+ #Find Domain by namesapce
45
+ def find_domain(id)
46
+ logger.debug "Finding domain #{id}" if @mydebug
47
+ filtered = Array.new
48
+ domains.each do |domain|
49
+ #TODO do a regex caomparison
50
+ if domain.id == id
51
+ filtered.push(domain)
52
+ end
53
+ end
54
+ return filtered
55
+ end
56
+
57
+ #Find Application by name
58
+ def find_application(name)
59
+ logger.debug "Finding application #{name}" if @mydebug
60
+ filtered = Array.new
61
+ domains.each do |domain|
62
+ #TODO do a regex caomparison
63
+ domain.applications.each do |app|
64
+ if app.name == name
65
+ filtered.push(app)
66
+ end
67
+ end
68
+ end
69
+ return filtered
70
+ end
71
+
72
+ #Get all Cartridge
73
+ def cartridges
74
+ logger.debug "Getting all cartridges" if @mydebug
75
+ url = @links['LIST_CARTRIDGES']['href']
76
+ method = @links['LIST_CARTRIDGES']['method']
77
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers)
78
+ return send(request)
79
+ end
80
+
81
+ #Find Cartridge by name
82
+ def find_cartridge(name)
83
+ logger.debug "Finding cartridge #{name}" if @mydebug
84
+ filtered = Array.new
85
+ cartridges.each do |cart|
86
+ #TODO do a regex caomparison
87
+ if cart.name == name
88
+ filtered.push(cart)
89
+ end
90
+ end
91
+ return filtered
92
+ end
93
+
94
+ #Get User info
95
+ def user
96
+ url = @links['GET_USER']['href']
97
+ method = @links['GET_USER']['method']
98
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers)
99
+ return send(request)
100
+ end
101
+
102
+ #find Key by name
103
+ def find_key(name)
104
+ logger.debug "Finding key #{name}" if @mydebug
105
+ filtered = Array.new
106
+ user.keys.each do |key|
107
+ #TODO do a regex caomparison
108
+ if key.name == name
109
+ filtered.push(key)
110
+ end
111
+ end
112
+ return filtered
113
+ end
114
+
115
+ def logout
116
+ #TODO logout
117
+ logger.debug "Logout/Close client" if @mydebug
118
+ end
119
+ alias :close :logout
120
+ end
121
+
122
+ end
123
+ end
@@ -0,0 +1,65 @@
1
+ module Rhc
2
+ module Rest
3
+ class Domain
4
+ include Rest
5
+ attr_reader :id
6
+ def initialize(args)
7
+ @id = args[:id] || args["id"]
8
+ @links = args[:links] || args["links"]
9
+ end
10
+
11
+ #Add Application to this domain
12
+ # options
13
+ # cartrdige
14
+ # template
15
+ # scale
16
+ # node_profile
17
+ def add_application(name, options)
18
+ logger.debug "Adding application #{name} to domain #{self.id}" if @mydebug
19
+ url = @links['ADD_APPLICATION']['href']
20
+ method = @links['ADD_APPLICATION']['method']
21
+ payload = {:name => name}
22
+ options.each do |key, value|
23
+ payload[key] = value
24
+ end
25
+ timeout = nil
26
+ if options[:scale]
27
+ timeout = 180 # 3 minute timeout for scalable app
28
+ end
29
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload, :timeout => timeout)
30
+ return send(request)
31
+ end
32
+
33
+ #Get all Application for this domain
34
+ def applications
35
+ logger.debug "Getting all applications for domain #{self.id}" if @mydebug
36
+ url = @links['LIST_APPLICATIONS']['href']
37
+ method = @links['LIST_APPLICATIONS']['method']
38
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers)
39
+ return send(request)
40
+ end
41
+
42
+ #Update Domain
43
+ def update(new_id)
44
+ logger.debug "Updating domain #{self.id} to #{new_id}" if @mydebug
45
+ url = @links['UPDATE']['href']
46
+ method = @links['UPDATE']['method']
47
+ payload = {:id => new_id}
48
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
49
+ return send(request)
50
+ end
51
+ alias :save :update
52
+
53
+ #Delete Domain
54
+ def destroy(force=false)
55
+ logger.debug "Deleting domain #{self.id}" if @mydebug
56
+ url = @links['DELETE']['href']
57
+ method = @links['DELETE']['method']
58
+ payload = {:force => force}
59
+ request = RestClient::Request.new(:url => url, :method => method, :headers => @@headers, :payload => payload)
60
+ return send(request)
61
+ end
62
+ alias :delete :destroy
63
+ end
64
+ end
65
+ end