rubyshift 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: df4b8a4d2f92b613847fe9c73ab70647bfa91058
4
+ data.tar.gz: 17504bb2f8647fdcd8360e30dd89d9d233e6c5ca
5
+ SHA512:
6
+ metadata.gz: 9697f930583eaac30ff54dfa29533a404f6d59b69814f9bbfb75941e206617232fb5612b450cf69f91b700e2abcf7e175d41ef013ab3b517a0efc48b72e900e6
7
+ data.tar.gz: 57b79a9bbe3bd19a9742b6373ff5609b1aa0103cdffbcf14cab3ad722c3e10f765c782c895e523e38c1568777317d92955f81f04e5d03076443d31aeb916d035
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ *.gem
2
+ .bundle
3
+ .config
4
+ Gemfile.lock
5
+ coverage
6
+ doc/
7
+ spec/reports
8
+ test/tmp
9
+ tmp
10
+ .ruby-version
11
+ .ruby-gemset
data/CHANGELOG.md ADDED
@@ -0,0 +1,4 @@
1
+ ## Changelog
2
+
3
+ ### 0.1.0
4
+ - Initial RubyShift release.
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2016 Anurag Patel <gnurag@gmail.com> All rights reserved.
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice,
7
+ this list of conditions and the following disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
14
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
17
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23
+ POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # RubyShift
2
+
3
+ RubyShift is a Ruby client for [OpenShift's REST API](https://access.redhat.com/documentation/en-US/OpenShift_Online/2.0/html/REST_API_Guide/index.html)
4
+
5
+ ## Installation
6
+
7
+ Installing from rubygems:
8
+
9
+ ```sh
10
+ gem install rubyshift
11
+ ```
12
+
13
+ Via Gemfile:
14
+
15
+ ```ruby
16
+ gem 'rubyshift', github: 'gnurag/rubyshift'
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ Configuration example:
22
+
23
+ ```ruby
24
+ require 'rubyshift'
25
+ RubyShift.configure do |config|
26
+ config.endpoint = 'https://openshift.redhat.com/broker/rest'
27
+ config.access_token = '<secret-access-token>'
28
+ # Optional config options
29
+ config.httparty = { timeout: 90 }
30
+ end
31
+ ```
32
+
33
+ Usage example:
34
+
35
+ ```ruby
36
+ RubyShift.applications
37
+ # => []
38
+
39
+ RubyShift.application_create('myapp', domain_name: 'rubyshift', cartridges: 'ruby-2.0', scale: true, gear_size: 'small')
40
+ # => #<OpenStruct aliases=[], app_url="http://myapp-rubyshift.rhcloud.com/", auto_deploy=true, build_job_url=nil, building_app=nil, building_with=nil, creation_time="2016-04-13T21:00:01Z", deployment_branch="master", deployment_type="git", domain_id="rubyshift", embedded={"haproxy-1.4"=>{}}, framework="ruby-2.0", gear_count=1, gear_profile="small", git_url="ssh://500000000000000000000001@myapp-rubyshift.rhcloud.com/~/git/myapp.git/", ha=false, health_check_path="health", id="500000000000000000000001", initial_git_url=nil, keep_deployments=1, name="myapp", scalable=true, ssh_url="ssh://500000000000000000000001@myapp-rubyshift.rhcloud.com">
41
+
42
+ RubyShift.application('500000000000000000000001')
43
+ # => #<OpenStruct aliases=[], app_url="http://myapp-rubyshift.rhcloud.com/", auto_deploy=true, build_job_url=nil, building_app=nil, building_with=nil, creation_time="2016-04-13T21:00:01Z", deployment_branch="master", deployment_type="git", domain_id="rubyshift", embedded={"haproxy-1.4"=>{}}, framework="ruby-2.0", gear_count=1, gear_profile="small", git_url="ssh://500000000000000000000001@myapp-rubyshift.rhcloud.com/~/git/myapp.git/", ha=false, health_check_path="health", id="500000000000000000000001", initial_git_url=nil, keep_deployments=1, name="myapp", scalable=true, ssh_url="ssh://500000000000000000000001@myapp-rubyshift.rhcloud.com">
44
+
45
+ RubyShift.application_restart('500000000000000000000001')
46
+ # => #<OpenStruct aliases=[], app_url="http://myapp-rubyshift.rhcloud.com/", auto_deploy=true, build_job_url=nil, building_app=nil, building_with=nil, creation_time="2016-04-13T21:00:01Z", deployment_branch="master", deployment_type="git", domain_id="rubyshift", embedded={"haproxy-1.4"=>{}}, framework="ruby-2.0", gear_count=1, gear_profile="small", git_url="ssh://500000000000000000000001@myapp-rubyshift.rhcloud.com/~/git/myapp.git/", ha=false, health_check_path="health", id="500000000000000000000001", initial_git_url=nil, keep_deployments=1, name="myapp", scalable=true, ssh_url="ssh://500000000000000000000001@myapp-rubyshift.rhcloud.com">
47
+
48
+ RubyShift.application_delete('500000000000000000000001')
49
+ # => true
50
+ ```
51
+
52
+ ## Acknowledgement
53
+
54
+ RubyShift is based on the excellent [gitlab](https://github.com/NARKOZ/gitlab) gem.
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec) do |spec|
5
+ spec.pattern = FileList['spec/**/*_spec.rb']
6
+ spec.rspec_opts = ['--color', '--format d']
7
+ end
8
+
9
+ task default: :spec
@@ -0,0 +1,16 @@
1
+ module RubyShift
2
+
3
+ class API < Request
4
+ attr_accessor(*Configuration::VALID_OPTIONS_KEYS)
5
+
6
+ # Creates a new API.
7
+ # @raise [Error:MissingCredentials]
8
+ def initialize(options={})
9
+ options = RubyShift.options.merge(options)
10
+ (Configuration::VALID_OPTIONS_KEYS + [:access_token]).each do |key|
11
+ send("#{key}=", options[key]) if options[key]
12
+ end
13
+ set_request_defaults
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,78 @@
1
+ class RubyShift::Client
2
+ module Applications
3
+ def applications(options={})
4
+ if options[:domain_name]
5
+ get("/domain/#{options[:domain_name]}/applications", query: options)
6
+ else
7
+ get("/applications", query: options)
8
+ end
9
+ end
10
+
11
+ def application(id)
12
+ get("/application/#{id}")
13
+ end
14
+
15
+ def application_resolve(id)
16
+ get("/application/#{id}/dns_resolvable")
17
+ end
18
+
19
+ def application_create(name, options={})
20
+ url = "/domain/#{options[:domain_name]}/applications"
21
+ post(url, body: {name: name }.merge(options))
22
+ end
23
+
24
+ def application_update(id, options={})
25
+ put("/application/#{id}", body: options)
26
+ end
27
+
28
+ def application_delete(id)
29
+ delete("/application/#{id}")
30
+ end
31
+
32
+ def application_enable_ha(id)
33
+ post("/application/#{id}/events", body: {event: 'make-ha'})
34
+ end
35
+
36
+ def application_disable_ha(id)
37
+ post("/application/#{id}/events", body: {event: 'disable-ha'})
38
+ end
39
+
40
+ def application_start(id)
41
+ post("/application/#{id}/events", body: {event: 'start'})
42
+ end
43
+
44
+ def application_stop(id)
45
+ post("/application/#{id}/events", body: {event: 'stop'})
46
+ end
47
+
48
+ def application_force_stop(id)
49
+ post("/application/#{id}/events", body: {event: 'force-stop'})
50
+ end
51
+
52
+ def application_restart(id)
53
+ post("/application/#{id}/events", body: {event: 'restart'})
54
+ end
55
+
56
+ def application_reload(id)
57
+ post("/application/#{id}/events", body: {event: 'reload'})
58
+ end
59
+
60
+ def application_scale_up(id)
61
+ post("/application/#{id}/events", body: {event: 'scale-up'})
62
+ end
63
+
64
+ def application_scale_up(id)
65
+ post("/application/#{id}/events", body: {event: 'scale-up'})
66
+ end
67
+
68
+ def application_scale_down(id)
69
+ post("/application/#{id}/events", body: {event: 'scale-down'})
70
+ end
71
+
72
+ def application_tidy(id)
73
+ post("/application/#{id}/events", body: {event: 'tidy'})
74
+ end
75
+
76
+
77
+ end
78
+ end
@@ -0,0 +1,4 @@
1
+ class RubyShift::Client
2
+ module Cartridges
3
+ end
4
+ end
@@ -0,0 +1,32 @@
1
+ class RubyShift::Client
2
+ module Domains
3
+ def domains
4
+ get("/domains")
5
+ end
6
+
7
+ def domains_by_owner(owner="@self")
8
+ get("/domains", body: {owner: owner})
9
+ end
10
+
11
+ def domain(name)
12
+ get("/domains/#{name}")
13
+ end
14
+
15
+ def domain_create(name, options={})
16
+ post("/domains", body: {name: name}.merge(options))
17
+ end
18
+
19
+ def domain_update(name, options={})
20
+ put("/domains/#{name}", body: options)
21
+ end
22
+
23
+ def domain_delete(name, options={})
24
+ delete("/domains/#{name}", body: options)
25
+ end
26
+
27
+ def domain_remove_self(name)
28
+ delete("/domain/#{name}/members/self")
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ module RubyShift
2
+ class Client < API
3
+ Dir[File.expand_path('../client/*.rb', __FILE__)].each { |f| require f }
4
+
5
+ include Applications
6
+ include Domains
7
+ include Cartridges
8
+ end
9
+ end
@@ -0,0 +1,61 @@
1
+ require 'json'
2
+
3
+ module RubyShift
4
+ module Configuration
5
+
6
+ VALID_OPTIONS_KEYS = [:endpoint, :username, :password, :access_token, :user_agent, :httparty].freeze
7
+
8
+ DEFAULT_ENDPOINT = 'https://openshift.redhat.com/broker/rest'
9
+ DEFAULT_USER_AGENT = "RubyShift/#{RubyShift::VERSION}".freeze
10
+
11
+ attr_accessor(*VALID_OPTIONS_KEYS)
12
+
13
+ def self.exetended(base)
14
+ base.reset
15
+ end
16
+
17
+ def configure
18
+ yield self
19
+ end
20
+
21
+ def options
22
+ VALID_OPTIONS_KEYS.inject({}) do |option, key|
23
+ option.merge!(key => send(key))
24
+ end
25
+ end
26
+
27
+ def reset
28
+ self.endpoint = ENV['RUBYSHIFT_ENDPOINT']
29
+ self.username = ENV['RUBYSHIFT_USERNAME']
30
+ self.password = ENV['RUBYSHIFT_PASSWORD']
31
+ self.access_token = ENV['RUBYSHIFT_ACCESS_TOKEN']
32
+ self.httparty = get_httparty_config(ENV['RUBYSHIFT_HTTPARTY_OPTIONS'])
33
+ self.user_agent = DEFAULT_USER_AGENT
34
+ end
35
+
36
+ private
37
+
38
+ def get_httparty_config(options)
39
+ return options if options.nil?
40
+
41
+ httparty = JSON.parse options
42
+ raise ArgumentError, "HTTParty config should be a Hash." unless httparty.is_a? Hash
43
+ symbolize_keys httparty
44
+ end
45
+
46
+ def symbolize_keys(hash)
47
+ if hash.is_a?(Hash)
48
+ hash = hash.each_with_object({}) do |(key, value), newhash|
49
+ begin
50
+ newhash[key.to_sym] = symbolize_keys(value)
51
+ rescue NoMethodError
52
+ raise "Error: cannot convert hash key to symbol: #{key}"
53
+ end
54
+ end
55
+ end
56
+
57
+ hash
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,43 @@
1
+ module RubyShift
2
+ module Error
3
+ # Custom error class for rescuing from all Gitlab errors.
4
+ class Error < StandardError; end
5
+
6
+ # Raised when API endpoint credentials not configured.
7
+ class MissingCredentials < Error; end
8
+
9
+ # Raised when impossible to parse response body.
10
+ class Parsing < Error; end
11
+
12
+ # Raised when API endpoint returns the HTTP status code 400.
13
+ class BadRequest < Error; end
14
+
15
+ # Raised when API endpoint returns the HTTP status code 401.
16
+ class Unauthorized < Error; end
17
+
18
+ # Raised when API endpoint returns the HTTP status code 403.
19
+ class Forbidden < Error; end
20
+
21
+ # Raised when API endpoint returns the HTTP status code 404.
22
+ class NotFound < Error; end
23
+
24
+ # Raised when API endpoint returns the HTTP status code 405.
25
+ class MethodNotAllowed < Error; end
26
+
27
+ # Raised when API endpoint returns the HTTP status code 409.
28
+ class Conflict < Error; end
29
+
30
+ # Raised when API endpoint returns the HTTP status code 422.
31
+ class Unprocessable < Error; end
32
+
33
+ # Raised when API endpoint returns the HTTP status code 500.
34
+ class InternalServerError < Error; end
35
+
36
+ # Raised when API endpoint returns the HTTP status code 502.
37
+ class BadGateway < Error; end
38
+
39
+ # Raised when API endpoint returns the HTTP status code 503.
40
+ class ServiceUnavailable < Error; end
41
+
42
+ end
43
+ end
@@ -0,0 +1,138 @@
1
+ require 'httparty'
2
+ require 'json'
3
+ require 'ostruct'
4
+
5
+ module RubyShift
6
+ class Request
7
+ include HTTParty
8
+ format :json
9
+ headers 'Accept' => 'application/json'
10
+ parser proc { |body, _| parse(body) }
11
+
12
+ attr_accessor :access_token, :endpoint
13
+
14
+ def self.parse(body)
15
+ data = decode(body)['data']
16
+
17
+ if data.is_a? Hash
18
+ data.delete('links')
19
+ data.delete('members')
20
+ OpenStruct.new data
21
+ elsif data.is_a? Array
22
+ data.collect! { |d|
23
+ d.delete('links')
24
+ d.delete('members')
25
+ OpenStruct.new(d)
26
+ }
27
+ elsif data
28
+ true
29
+ elsif !data
30
+ false
31
+ elsif data.nil?
32
+ false
33
+ else
34
+ raise Error::Parsing.new "Couldn't parse the response body: #{body.inspect}"
35
+ end
36
+ rescue
37
+ raise Error::Parsing.new "Couldn't parse the response body: #{body.inspect}"
38
+ end
39
+
40
+ def self.decode(response)
41
+ JSON.load response
42
+ rescue JSON::ParserError
43
+ raise Error::Parsing.new "The response is not a valid JSON"
44
+ end
45
+
46
+ def get(path, options={})
47
+ set_httparty_config(options)
48
+ set_authorization_header(options)
49
+ validate self.class.get(@endpoint + path, options)
50
+ end
51
+
52
+ def post(path, options={})
53
+ set_httparty_config(options)
54
+ set_authorization_header(options, path)
55
+ validate self.class.post(@endpoint + path, options)
56
+ end
57
+
58
+ def put(path, options={})
59
+ set_httparty_config(options)
60
+ set_authorization_header(options)
61
+ validate self.class.put(@endpoint + path, options)
62
+ end
63
+
64
+ def delete(path, options={})
65
+ set_httparty_config(options)
66
+ set_authorization_header(options)
67
+ validate self.class.delete(@endpoint + path, options)
68
+ end
69
+
70
+ # Checks the response code for common errors.
71
+ # Returns parsed response for successful requests.
72
+ def validate(response)
73
+ case response.code
74
+ when 400 then fail Error::BadRequest.new error_message(response)
75
+ when 401 then fail Error::Unauthorized.new error_message(response)
76
+ when 403 then fail Error::Forbidden.new error_message(response)
77
+ when 404 then fail Error::NotFound.new error_message(response)
78
+ when 405 then fail Error::MethodNotAllowed.new error_message(response)
79
+ when 409 then fail Error::Conflict.new error_message(response)
80
+ when 422 then fail Error::Unprocessable.new error_message(response)
81
+ when 500 then fail Error::InternalServerError.new error_message(response)
82
+ when 502 then fail Error::BadGateway.new error_message(response)
83
+ when 503 then fail Error::ServiceUnavailable.new error_message(response)
84
+ end
85
+
86
+ parsed = response.parsed_response
87
+ parsed.client = self if parsed.respond_to?(:client=)
88
+ parsed.parse_headers!(response.headers) if parsed.respond_to?(:parse_headers!)
89
+ parsed
90
+ end
91
+
92
+ # Sets default_params for requests.
93
+ # @raise [Error::MissingCredentials] if endpoint not set.
94
+ def set_request_defaults(httparty=nil)
95
+ raise Error::MissingCredentials.new("Please set an API endpoint") unless @endpoint
96
+ #self.class.default_params[:httparty] = {} if httparty.nil?
97
+ end
98
+
99
+ private
100
+
101
+ # Sets Authorization header for requests.
102
+ # @raise [Error::MissingCredentials] if access_token is not set.
103
+ def set_authorization_header(options, path=nil)
104
+ unless path and path.start_with? '/oauth'
105
+ raise Error::MissingCredentials.new("Please provide an access_token") unless @access_token
106
+ options[:headers] = { 'Authorization' => "Bearer #{@access_token}" }
107
+ end
108
+ end
109
+
110
+ # Set HTTParty configuration
111
+ # @see https://github.com/jnunemaker/httparty
112
+ def set_httparty_config(options)
113
+ options.merge!(httparty) if httparty
114
+ end
115
+
116
+ def error_message(response)
117
+ parsed_response = response.parsed_response
118
+ message = parsed_response
119
+
120
+ "Server responded with code #{response.code}, message: " \
121
+ "#{handle_error(message)}. " \
122
+ "Request URI: #{response.request.base_uri}#{response.request.path}"
123
+ end
124
+
125
+ def handle_error(message)
126
+ case message
127
+ when OpenStruct
128
+ message.to_h.sort.map do |key, val|
129
+ "'#{key}' #{(val.is_a?(Hash) ? val.sort.map { |k, v| "(#{k}: #{v.join(' ')})" } : val).join(' ')}"
130
+ end.join(', ')
131
+ when Array
132
+ message.join(' ')
133
+ else
134
+ message
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,3 @@
1
+ module RubyShift
2
+ VERSION = "0.1.0"
3
+ end
data/lib/rubyshift.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'rubyshift/version'
2
+ require 'rubyshift/configuration'
3
+ require 'rubyshift/error'
4
+ require 'rubyshift/request'
5
+ require 'rubyshift/api'
6
+ require 'rubyshift/client'
7
+
8
+ module RubyShift
9
+ extend Configuration
10
+
11
+ def self.client(options={})
12
+ RubyShift::Client.new(options)
13
+ end
14
+
15
+ # Delegate to RubyShift::Client
16
+ def self.method_missing(method, *args, &block)
17
+ return super unless client.respond_to?(method)
18
+ client.send(method, *args, &block)
19
+ end
20
+
21
+ def respond_to_missing?(method_name, include_private = false)
22
+ client.respond_to?(method_name) || super
23
+ end
24
+
25
+ # Delegate to HTTParty.http_proxy
26
+ def self.http_proxy(address=nil, port=nil, username=nil, password=nil)
27
+ RubyShift::Request.http_proxy(address, port, username, password)
28
+ end
29
+
30
+ # Return an array of available client methods
31
+ def self.actions
32
+ hidden = /endpoint|username|password|access_token|user_agent|get|post|put|\Adelete\z|validate|set_request_defaults|httparty/
33
+ (RubyShift::Client.instance_methods - Object.methods).reject { |e| e[hidden]}
34
+ end
35
+ end
data/rubyshift.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'rubyshift/version'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "rubyshift"
7
+ gem.version = RubyShift::VERSION
8
+ gem.authors = ["Anurag Patel"]
9
+ gem.email = ["gnurag@gmail.com"]
10
+ gem.description = %q{Ruby client for OpenShift REST API}
11
+ gem.summary = %q{A Ruby wrapper for the OpenShift REST API}
12
+ gem.homepage = "https://github.com/gnurag/rubyshift"
13
+
14
+ gem.files = `git ls-files`.split($/)
15
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
16
+ gem.require_paths = ["lib"]
17
+ gem.license = "BSD"
18
+
19
+ gem.add_runtime_dependency 'httparty', '~> 0.13'
20
+
21
+ gem.add_development_dependency 'pry', '~> 0.10'
22
+ gem.add_development_dependency 'rake', '~> 11.0'
23
+ gem.add_development_dependency 'rspec', '~> 3.4'
24
+ gem.add_development_dependency 'webmock', '~> 1.24'
25
+ end
@@ -0,0 +1 @@
1
+ {"api_version":1.7,"data":{"aliases":[],"app_url":"http://othello-rubyshift.rhcloud.com/","auto_deploy":true,"build_job_url":null,"building_app":null,"building_with":null,"creation_time":"2016-04-18T09:51:13Z","deployment_branch":"master","deployment_type":"git","domain_id":"rubyshift","embedded":{"haproxy-1.4":{}},"framework":"ruby-2.0","gear_count":1,"gear_profile":"small","git_url":"ssh://5714ae1189f5cf026b00002f@othello-rubyshift.rhcloud.com/~/git/othello.git/","ha":false,"health_check_path":"health","id":"5714ae1189f5cf026b00002f","initial_git_url":null,"keep_deployments":1,"links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f","method":"GET","optional_params":[],"rel":"Get application","required_params":[]},"GET_DESCRIPTOR":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/descriptor","method":"GET","optional_params":[],"rel":"Get application descriptor","required_params":[]},"GET_GEAR_GROUPS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/gear_groups","method":"GET","optional_params":[],"rel":"Get application gear groups","required_params":[]},"START":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Start application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["start"]}]},"STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["stop"]}]},"FORCE_STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Force stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["force-stop"]}]},"RESTART":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Restart application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["restart"]}]},"SCALE_UP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Scale up application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-up"]}]},"SCALE_DOWN":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Scale down application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-down"]}]},"TIDY":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Tidy the application framework","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["tidy"]}]},"RELOAD":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Reload the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["reload"]}]},"THREAD_DUMP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Trigger thread dump","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["thread-dump"]}]},"ADD_CARTRIDGE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/cartridges","method":"POST","optional_params":[{"default_value":null,"description":"The component to colocate with","name":"colocate_with","type":"string","valid_options":["haproxy-1.4","ruby-2.0"]},{"default_value":null,"description":"Minimum number of gears to run the component on.","name":"scales_from","type":"integer","valid_options":[]},{"default_value":null,"description":"Maximum number of gears to run the component on.","name":"scales_to","type":"integer","valid_options":[]},{"default_value":null,"description":"Additional GB of space to request on all gears running this component.","name":"additional_gear_storage","type":"integer","valid_options":[]},{"default_value":"small","description":"Gear size for the cartridge.","name":"gear_size","type":"string","valid_options":["small"]},{"default_value":null,"description":"A URL to a downloadable cartridge.","name":"url","type":"string","valid_options":[]},{"default_value":null,"description":"Add or Update application environment variables, e.g.:[{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}]","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add embedded cartridge","required_params":[{"description":"Name of a cartridge.","invalid_options":[],"name":"name","type":"string","valid_options":[]}]},"LIST_CARTRIDGES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/cartridges","method":"GET","optional_params":[],"rel":"List embedded cartridges","required_params":[]},"DNS_RESOLVABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/dns_resolvable","method":"GET","optional_params":[],"rel":"Resolve DNS","required_params":[]},"ADD_ALIAS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/aliases","method":"POST","optional_params":[{"default_value":null,"description":"Content of SSL Certificate","name":"ssl_certificate","type":"string","valid_options":[]},{"default_value":null,"description":"Private key for the certificate. Required if adding a certificate","name":"private_key","type":"string","valid_options":[]},{"default_value":null,"description":"Optional passphrase for the private key","name":"pass_phrase","type":"string","valid_options":[]}],"rel":"Create new alias","required_params":[{"description":"Alias for application","invalid_options":[],"name":"id","type":"string","valid_options":[]}]},"LIST_ALIASES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/aliases","method":"GET","optional_params":[],"rel":"List application aliases","required_params":[]},"LIST_MEMBERS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/members","method":"GET","optional_params":[],"rel":"List members of this application","required_params":[]},"ADD_ENVIRONMENT_VARIABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/environment-variables","method":"POST","optional_params":[],"rel":"Add an environment variable","required_params":[{"description":"Name of the environment variable","invalid_options":[],"name":"name","type":"string","valid_options":[]},{"description":"Value of the environment variable","invalid_options":[],"name":"value","type":"string","valid_options":[]}]},"SET_UNSET_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/environment-variables","method":"PATCH","optional_params":[{"default_value":null,"description":"Name of the environment variable to add/update","name":"name","type":"string","valid_options":[]},{"default_value":null,"description":"Value of the environment variable","name":"value","type":"string","valid_options":[]},{"default_value":null,"description":"Add/Update/Delete application environment variables, e.g. Add/Update: [{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}], {Delete: [{'name':'FOO'}, {'name':'BAR'}]}","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add/Update/Delete one or more environment variables","required_params":[]},"LIST_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/environment-variables","method":"GET","optional_params":[],"rel":"List all environment variables","required_params":[]},"DEPLOY":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/deployments","method":"POST","optional_params":[{"default_value":"master","description":"Git ref (tag, branch, commit id)","name":"ref","type":"string","valid_options":[]},{"default_value":null,"description":"URL where the deployment artifact can be downloaded from","name":"artifact_url","type":"string","valid_options":[]},{"default_value":false,"description":"Indicates whether this is a hot deployment","name":"hot_deploy","type":"boolean","valid_options":["true or false"]},{"default_value":false,"description":"Indicates whether a clean build should be performed","name":"force_clean_build","type":"string","valid_options":["true or false"]}],"rel":"Deploy the application","required_params":[]},"UPDATE_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/deployments","method":"POST","optional_params":[],"rel":"Update deployments (Special permissions is required to update deployments)","required_params":[{"description":"An array of deployments","invalid_options":[],"name":"deployments","type":"array","valid_options":[]}]},"ACTIVATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Activate a specific deployment of the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["activate"]},{"description":"The deployment ID to activate the application","invalid_options":[],"name":"deployment_id","type":"string","valid_options":[]}]},"LIST_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/deployments","method":"GET","optional_params":[],"rel":"List all deployments","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f","method":"PUT","optional_params":[{"default_value":null,"description":"Indicates if OpenShift should build and deploy automatically whenever the user executes git push","name":"auto_deploy","type":"boolean","valid_options":[true,false]},{"default_value":null,"description":"Indicates whether the app is setup for binary or git based deployments","name":"deployment_type","type":"string","valid_options":["git","binary"]},{"default_value":null,"description":"Indicates which branch should trigger an automatic deployment, if automatic deployment is enabled.","name":"deployment_branch","type":"string","valid_options":[]},{"default_value":null,"description":"Indicates how many total deployments to preserve. Must be greater than 0","name":"keep_deployments","type":"integer","valid_options":[]}],"rel":"Update application","required_params":[]},"MAKE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Make the application Highly Available (HA)","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["make-ha"]}]},"DISABLE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Disable Highly Available (HA) on the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["disable-ha"]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f","method":"DELETE","optional_params":[],"rel":"Delete application","required_params":[]}},"members":[{"explicit_role":null,"from":[{"type":"domain","role":"admin"}],"id":"511a77b2f2cb83597b000d32","links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/member/511a77b2f2cb83597b000d32","method":"GET","optional_params":[],"rel":"Get member","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/member/511a77b2f2cb83597b000d32","method":"PUT","optional_params":[],"rel":"Update member","required_params":[{"description":"New role for member","invalid_options":[],"name":"role","type":"string","valid_options":[]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/member/511a77b2f2cb83597b000d32","method":"DELETE","optional_params":[],"rel":"Delete member","required_params":[]}},"login":"anurag@xinh.org","owner":true,"role":"admin","type":"user"}],"name":"othello","scalable":true,"ssh_url":"ssh://5714ae1189f5cf026b00002f@othello-rubyshift.rhcloud.com"},"messages":[{"exit_code":0,"field":null,"index":null,"severity":"info","text":"Application 'othello' found"}],"status":"ok","supported_api_versions":[1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7],"type":"application","version":"1.7"}
@@ -0,0 +1 @@
1
+ {"api_version":1.7,"data":[{"aliases":[],"app_url":"http://hamlet-rubyshift.rhcloud.com/","auto_deploy":true,"build_job_url":null,"building_app":null,"building_with":null,"creation_time":"2016-04-18T10:01:49Z","deployment_branch":"master","deployment_type":"git","domain_id":"rubyshift","embedded":{"haproxy-1.4":{}},"framework":"python-3.3","gear_count":1,"gear_profile":"small","git_url":"ssh://5714b08d2d52710974000123@hamlet-rubyshift.rhcloud.com/~/git/hamlet.git/","ha":false,"health_check_path":"health","id":"5714b08d2d52710974000123","initial_git_url":null,"keep_deployments":1,"links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123","method":"GET","optional_params":[],"rel":"Get application","required_params":[]},"GET_DESCRIPTOR":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/descriptor","method":"GET","optional_params":[],"rel":"Get application descriptor","required_params":[]},"GET_GEAR_GROUPS":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/gear_groups","method":"GET","optional_params":[],"rel":"Get application gear groups","required_params":[]},"START":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Start application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["start"]}]},"STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["stop"]}]},"FORCE_STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Force stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["force-stop"]}]},"RESTART":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Restart application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["restart"]}]},"SCALE_UP":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Scale up application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-up"]}]},"SCALE_DOWN":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Scale down application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-down"]}]},"TIDY":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Tidy the application framework","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["tidy"]}]},"RELOAD":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Reload the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["reload"]}]},"THREAD_DUMP":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Trigger thread dump","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["thread-dump"]}]},"ADD_CARTRIDGE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/cartridges","method":"POST","optional_params":[{"default_value":null,"description":"The component to colocate with","name":"colocate_with","type":"string","valid_options":["haproxy-1.4","python-3.3"]},{"default_value":null,"description":"Minimum number of gears to run the component on.","name":"scales_from","type":"integer","valid_options":[]},{"default_value":null,"description":"Maximum number of gears to run the component on.","name":"scales_to","type":"integer","valid_options":[]},{"default_value":null,"description":"Additional GB of space to request on all gears running this component.","name":"additional_gear_storage","type":"integer","valid_options":[]},{"default_value":"small","description":"Gear size for the cartridge.","name":"gear_size","type":"string","valid_options":["small"]},{"default_value":null,"description":"A URL to a downloadable cartridge.","name":"url","type":"string","valid_options":[]},{"default_value":null,"description":"Add or Update application environment variables, e.g.:[{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}]","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add embedded cartridge","required_params":[{"description":"Name of a cartridge.","invalid_options":[],"name":"name","type":"string","valid_options":[]}]},"LIST_CARTRIDGES":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/cartridges","method":"GET","optional_params":[],"rel":"List embedded cartridges","required_params":[]},"DNS_RESOLVABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/dns_resolvable","method":"GET","optional_params":[],"rel":"Resolve DNS","required_params":[]},"ADD_ALIAS":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/aliases","method":"POST","optional_params":[{"default_value":null,"description":"Content of SSL Certificate","name":"ssl_certificate","type":"string","valid_options":[]},{"default_value":null,"description":"Private key for the certificate. Required if adding a certificate","name":"private_key","type":"string","valid_options":[]},{"default_value":null,"description":"Optional passphrase for the private key","name":"pass_phrase","type":"string","valid_options":[]}],"rel":"Create new alias","required_params":[{"description":"Alias for application","invalid_options":[],"name":"id","type":"string","valid_options":[]}]},"LIST_ALIASES":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/aliases","method":"GET","optional_params":[],"rel":"List application aliases","required_params":[]},"LIST_MEMBERS":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/members","method":"GET","optional_params":[],"rel":"List members of this application","required_params":[]},"ADD_ENVIRONMENT_VARIABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/environment-variables","method":"POST","optional_params":[],"rel":"Add an environment variable","required_params":[{"description":"Name of the environment variable","invalid_options":[],"name":"name","type":"string","valid_options":[]},{"description":"Value of the environment variable","invalid_options":[],"name":"value","type":"string","valid_options":[]}]},"SET_UNSET_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/environment-variables","method":"PATCH","optional_params":[{"default_value":null,"description":"Name of the environment variable to add/update","name":"name","type":"string","valid_options":[]},{"default_value":null,"description":"Value of the environment variable","name":"value","type":"string","valid_options":[]},{"default_value":null,"description":"Add/Update/Delete application environment variables, e.g. Add/Update: [{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}], {Delete: [{'name':'FOO'}, {'name':'BAR'}]}","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add/Update/Delete one or more environment variables","required_params":[]},"LIST_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/environment-variables","method":"GET","optional_params":[],"rel":"List all environment variables","required_params":[]},"DEPLOY":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/deployments","method":"POST","optional_params":[{"default_value":"master","description":"Git ref (tag, branch, commit id)","name":"ref","type":"string","valid_options":[]},{"default_value":null,"description":"URL where the deployment artifact can be downloaded from","name":"artifact_url","type":"string","valid_options":[]},{"default_value":false,"description":"Indicates whether this is a hot deployment","name":"hot_deploy","type":"boolean","valid_options":["true or false"]},{"default_value":false,"description":"Indicates whether a clean build should be performed","name":"force_clean_build","type":"string","valid_options":["true or false"]}],"rel":"Deploy the application","required_params":[]},"UPDATE_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/deployments","method":"POST","optional_params":[],"rel":"Update deployments (Special permissions is required to update deployments)","required_params":[{"description":"An array of deployments","invalid_options":[],"name":"deployments","type":"array","valid_options":[]}]},"ACTIVATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Activate a specific deployment of the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["activate"]},{"description":"The deployment ID to activate the application","invalid_options":[],"name":"deployment_id","type":"string","valid_options":[]}]},"LIST_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/deployments","method":"GET","optional_params":[],"rel":"List all deployments","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123","method":"PUT","optional_params":[{"default_value":null,"description":"Indicates if OpenShift should build and deploy automatically whenever the user executes git push","name":"auto_deploy","type":"boolean","valid_options":[true,false]},{"default_value":null,"description":"Indicates whether the app is setup for binary or git based deployments","name":"deployment_type","type":"string","valid_options":["git","binary"]},{"default_value":null,"description":"Indicates which branch should trigger an automatic deployment, if automatic deployment is enabled.","name":"deployment_branch","type":"string","valid_options":[]},{"default_value":null,"description":"Indicates how many total deployments to preserve. Must be greater than 0","name":"keep_deployments","type":"integer","valid_options":[]}],"rel":"Update application","required_params":[]},"MAKE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Make the application Highly Available (HA)","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["make-ha"]}]},"DISABLE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/events","method":"POST","optional_params":[],"rel":"Disable Highly Available (HA) on the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["disable-ha"]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123","method":"DELETE","optional_params":[],"rel":"Delete application","required_params":[]}},"members":[{"explicit_role":null,"from":[{"type":"domain","role":"admin"}],"id":"511a77b2f2cb83597b000d32","links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/member/511a77b2f2cb83597b000d32","method":"GET","optional_params":[],"rel":"Get member","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/member/511a77b2f2cb83597b000d32","method":"PUT","optional_params":[],"rel":"Update member","required_params":[{"description":"New role for member","invalid_options":[],"name":"role","type":"string","valid_options":[]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714b08d2d52710974000123/member/511a77b2f2cb83597b000d32","method":"DELETE","optional_params":[],"rel":"Delete member","required_params":[]}},"login":"anurag@xinh.org","owner":true,"role":"admin","type":"user"}],"name":"hamlet","scalable":true,"ssh_url":"ssh://5714b08d2d52710974000123@hamlet-rubyshift.rhcloud.com"},{"aliases":[],"app_url":"http://macbeth-rubyshift.rhcloud.com/","auto_deploy":true,"build_job_url":null,"building_app":null,"building_with":null,"creation_time":"2016-04-18T09:55:11Z","deployment_branch":"master","deployment_type":"git","domain_id":"rubyshift","embedded":{},"framework":"php-5.4","gear_count":1,"gear_profile":"small","git_url":"ssh://5714aeff2d5271e5300000cb@macbeth-rubyshift.rhcloud.com/~/git/macbeth.git/","ha":false,"health_check_path":"health","id":"5714aeff2d5271e5300000cb","initial_git_url":null,"keep_deployments":1,"links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb","method":"GET","optional_params":[],"rel":"Get application","required_params":[]},"GET_DESCRIPTOR":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/descriptor","method":"GET","optional_params":[],"rel":"Get application descriptor","required_params":[]},"GET_GEAR_GROUPS":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/gear_groups","method":"GET","optional_params":[],"rel":"Get application gear groups","required_params":[]},"START":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Start application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["start"]}]},"STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["stop"]}]},"FORCE_STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Force stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["force-stop"]}]},"RESTART":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Restart application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["restart"]}]},"SCALE_UP":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Scale up application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-up"]}]},"SCALE_DOWN":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Scale down application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-down"]}]},"TIDY":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Tidy the application framework","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["tidy"]}]},"RELOAD":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Reload the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["reload"]}]},"THREAD_DUMP":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Trigger thread dump","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["thread-dump"]}]},"ADD_CARTRIDGE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/cartridges","method":"POST","optional_params":[{"default_value":null,"description":"The component to colocate with","name":"colocate_with","type":"string","valid_options":["php-5.4"]},{"default_value":null,"description":"Minimum number of gears to run the component on.","name":"scales_from","type":"integer","valid_options":[]},{"default_value":null,"description":"Maximum number of gears to run the component on.","name":"scales_to","type":"integer","valid_options":[]},{"default_value":null,"description":"Additional GB of space to request on all gears running this component.","name":"additional_gear_storage","type":"integer","valid_options":[]},{"default_value":"small","description":"Gear size for the cartridge.","name":"gear_size","type":"string","valid_options":["small"]},{"default_value":null,"description":"A URL to a downloadable cartridge.","name":"url","type":"string","valid_options":[]},{"default_value":null,"description":"Add or Update application environment variables, e.g.:[{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}]","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add embedded cartridge","required_params":[{"description":"Name of a cartridge.","invalid_options":[],"name":"name","type":"string","valid_options":[]}]},"LIST_CARTRIDGES":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/cartridges","method":"GET","optional_params":[],"rel":"List embedded cartridges","required_params":[]},"DNS_RESOLVABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/dns_resolvable","method":"GET","optional_params":[],"rel":"Resolve DNS","required_params":[]},"ADD_ALIAS":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/aliases","method":"POST","optional_params":[{"default_value":null,"description":"Content of SSL Certificate","name":"ssl_certificate","type":"string","valid_options":[]},{"default_value":null,"description":"Private key for the certificate. Required if adding a certificate","name":"private_key","type":"string","valid_options":[]},{"default_value":null,"description":"Optional passphrase for the private key","name":"pass_phrase","type":"string","valid_options":[]}],"rel":"Create new alias","required_params":[{"description":"Alias for application","invalid_options":[],"name":"id","type":"string","valid_options":[]}]},"LIST_ALIASES":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/aliases","method":"GET","optional_params":[],"rel":"List application aliases","required_params":[]},"LIST_MEMBERS":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/members","method":"GET","optional_params":[],"rel":"List members of this application","required_params":[]},"ADD_ENVIRONMENT_VARIABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/environment-variables","method":"POST","optional_params":[],"rel":"Add an environment variable","required_params":[{"description":"Name of the environment variable","invalid_options":[],"name":"name","type":"string","valid_options":[]},{"description":"Value of the environment variable","invalid_options":[],"name":"value","type":"string","valid_options":[]}]},"SET_UNSET_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/environment-variables","method":"PATCH","optional_params":[{"default_value":null,"description":"Name of the environment variable to add/update","name":"name","type":"string","valid_options":[]},{"default_value":null,"description":"Value of the environment variable","name":"value","type":"string","valid_options":[]},{"default_value":null,"description":"Add/Update/Delete application environment variables, e.g. Add/Update: [{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}], {Delete: [{'name':'FOO'}, {'name':'BAR'}]}","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add/Update/Delete one or more environment variables","required_params":[]},"LIST_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/environment-variables","method":"GET","optional_params":[],"rel":"List all environment variables","required_params":[]},"DEPLOY":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/deployments","method":"POST","optional_params":[{"default_value":"master","description":"Git ref (tag, branch, commit id)","name":"ref","type":"string","valid_options":[]},{"default_value":null,"description":"URL where the deployment artifact can be downloaded from","name":"artifact_url","type":"string","valid_options":[]},{"default_value":false,"description":"Indicates whether this is a hot deployment","name":"hot_deploy","type":"boolean","valid_options":["true or false"]},{"default_value":false,"description":"Indicates whether a clean build should be performed","name":"force_clean_build","type":"string","valid_options":["true or false"]}],"rel":"Deploy the application","required_params":[]},"UPDATE_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/deployments","method":"POST","optional_params":[],"rel":"Update deployments (Special permissions is required to update deployments)","required_params":[{"description":"An array of deployments","invalid_options":[],"name":"deployments","type":"array","valid_options":[]}]},"ACTIVATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Activate a specific deployment of the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["activate"]},{"description":"The deployment ID to activate the application","invalid_options":[],"name":"deployment_id","type":"string","valid_options":[]}]},"LIST_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/deployments","method":"GET","optional_params":[],"rel":"List all deployments","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb","method":"PUT","optional_params":[{"default_value":null,"description":"Indicates if OpenShift should build and deploy automatically whenever the user executes git push","name":"auto_deploy","type":"boolean","valid_options":[true,false]},{"default_value":null,"description":"Indicates whether the app is setup for binary or git based deployments","name":"deployment_type","type":"string","valid_options":["git","binary"]},{"default_value":null,"description":"Indicates which branch should trigger an automatic deployment, if automatic deployment is enabled.","name":"deployment_branch","type":"string","valid_options":[]},{"default_value":null,"description":"Indicates how many total deployments to preserve. Must be greater than 0","name":"keep_deployments","type":"integer","valid_options":[]}],"rel":"Update application","required_params":[]},"MAKE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Make the application Highly Available (HA)","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["make-ha"]}]},"DISABLE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/events","method":"POST","optional_params":[],"rel":"Disable Highly Available (HA) on the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["disable-ha"]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb","method":"DELETE","optional_params":[],"rel":"Delete application","required_params":[]}},"members":[{"explicit_role":null,"from":[{"type":"domain","role":"admin"}],"id":"511a77b2f2cb83597b000d32","links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/member/511a77b2f2cb83597b000d32","method":"GET","optional_params":[],"rel":"Get member","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/member/511a77b2f2cb83597b000d32","method":"PUT","optional_params":[],"rel":"Update member","required_params":[{"description":"New role for member","invalid_options":[],"name":"role","type":"string","valid_options":[]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714aeff2d5271e5300000cb/member/511a77b2f2cb83597b000d32","method":"DELETE","optional_params":[],"rel":"Delete member","required_params":[]}},"login":"anurag@xinh.org","owner":true,"role":"admin","type":"user"}],"name":"macbeth","scalable":false,"ssh_url":"ssh://5714aeff2d5271e5300000cb@macbeth-rubyshift.rhcloud.com"},{"aliases":[],"app_url":"http://othello-rubyshift.rhcloud.com/","auto_deploy":true,"build_job_url":null,"building_app":null,"building_with":null,"creation_time":"2016-04-18T09:51:13Z","deployment_branch":"master","deployment_type":"git","domain_id":"rubyshift","embedded":{"haproxy-1.4":{}},"framework":"ruby-2.0","gear_count":1,"gear_profile":"small","git_url":"ssh://5714ae1189f5cf026b00002f@othello-rubyshift.rhcloud.com/~/git/othello.git/","ha":false,"health_check_path":"health","id":"5714ae1189f5cf026b00002f","initial_git_url":null,"keep_deployments":1,"links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f","method":"GET","optional_params":[],"rel":"Get application","required_params":[]},"GET_DESCRIPTOR":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/descriptor","method":"GET","optional_params":[],"rel":"Get application descriptor","required_params":[]},"GET_GEAR_GROUPS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/gear_groups","method":"GET","optional_params":[],"rel":"Get application gear groups","required_params":[]},"START":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Start application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["start"]}]},"STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["stop"]}]},"FORCE_STOP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Force stop application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["force-stop"]}]},"RESTART":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Restart application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["restart"]}]},"SCALE_UP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Scale up application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-up"]}]},"SCALE_DOWN":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Scale down application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["scale-down"]}]},"TIDY":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Tidy the application framework","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["tidy"]}]},"RELOAD":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Reload the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["reload"]}]},"THREAD_DUMP":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Trigger thread dump","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["thread-dump"]}]},"ADD_CARTRIDGE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/cartridges","method":"POST","optional_params":[{"default_value":null,"description":"The component to colocate with","name":"colocate_with","type":"string","valid_options":["haproxy-1.4","ruby-2.0"]},{"default_value":null,"description":"Minimum number of gears to run the component on.","name":"scales_from","type":"integer","valid_options":[]},{"default_value":null,"description":"Maximum number of gears to run the component on.","name":"scales_to","type":"integer","valid_options":[]},{"default_value":null,"description":"Additional GB of space to request on all gears running this component.","name":"additional_gear_storage","type":"integer","valid_options":[]},{"default_value":"small","description":"Gear size for the cartridge.","name":"gear_size","type":"string","valid_options":["small"]},{"default_value":null,"description":"A URL to a downloadable cartridge.","name":"url","type":"string","valid_options":[]},{"default_value":null,"description":"Add or Update application environment variables, e.g.:[{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}]","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add embedded cartridge","required_params":[{"description":"Name of a cartridge.","invalid_options":[],"name":"name","type":"string","valid_options":[]}]},"LIST_CARTRIDGES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/cartridges","method":"GET","optional_params":[],"rel":"List embedded cartridges","required_params":[]},"DNS_RESOLVABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/dns_resolvable","method":"GET","optional_params":[],"rel":"Resolve DNS","required_params":[]},"ADD_ALIAS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/aliases","method":"POST","optional_params":[{"default_value":null,"description":"Content of SSL Certificate","name":"ssl_certificate","type":"string","valid_options":[]},{"default_value":null,"description":"Private key for the certificate. Required if adding a certificate","name":"private_key","type":"string","valid_options":[]},{"default_value":null,"description":"Optional passphrase for the private key","name":"pass_phrase","type":"string","valid_options":[]}],"rel":"Create new alias","required_params":[{"description":"Alias for application","invalid_options":[],"name":"id","type":"string","valid_options":[]}]},"LIST_ALIASES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/aliases","method":"GET","optional_params":[],"rel":"List application aliases","required_params":[]},"LIST_MEMBERS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/members","method":"GET","optional_params":[],"rel":"List members of this application","required_params":[]},"ADD_ENVIRONMENT_VARIABLE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/environment-variables","method":"POST","optional_params":[],"rel":"Add an environment variable","required_params":[{"description":"Name of the environment variable","invalid_options":[],"name":"name","type":"string","valid_options":[]},{"description":"Value of the environment variable","invalid_options":[],"name":"value","type":"string","valid_options":[]}]},"SET_UNSET_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/environment-variables","method":"PATCH","optional_params":[{"default_value":null,"description":"Name of the environment variable to add/update","name":"name","type":"string","valid_options":[]},{"default_value":null,"description":"Value of the environment variable","name":"value","type":"string","valid_options":[]},{"default_value":null,"description":"Add/Update/Delete application environment variables, e.g. Add/Update: [{'name':'FOO', 'value':'123'}, {'name':'BAR', 'value':'abc'}], {Delete: [{'name':'FOO'}, {'name':'BAR'}]}","name":"environment_variables","type":"array","valid_options":[]}],"rel":"Add/Update/Delete one or more environment variables","required_params":[]},"LIST_ENVIRONMENT_VARIABLES":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/environment-variables","method":"GET","optional_params":[],"rel":"List all environment variables","required_params":[]},"DEPLOY":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/deployments","method":"POST","optional_params":[{"default_value":"master","description":"Git ref (tag, branch, commit id)","name":"ref","type":"string","valid_options":[]},{"default_value":null,"description":"URL where the deployment artifact can be downloaded from","name":"artifact_url","type":"string","valid_options":[]},{"default_value":false,"description":"Indicates whether this is a hot deployment","name":"hot_deploy","type":"boolean","valid_options":["true or false"]},{"default_value":false,"description":"Indicates whether a clean build should be performed","name":"force_clean_build","type":"string","valid_options":["true or false"]}],"rel":"Deploy the application","required_params":[]},"UPDATE_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/deployments","method":"POST","optional_params":[],"rel":"Update deployments (Special permissions is required to update deployments)","required_params":[{"description":"An array of deployments","invalid_options":[],"name":"deployments","type":"array","valid_options":[]}]},"ACTIVATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Activate a specific deployment of the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["activate"]},{"description":"The deployment ID to activate the application","invalid_options":[],"name":"deployment_id","type":"string","valid_options":[]}]},"LIST_DEPLOYMENTS":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/deployments","method":"GET","optional_params":[],"rel":"List all deployments","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f","method":"PUT","optional_params":[{"default_value":null,"description":"Indicates if OpenShift should build and deploy automatically whenever the user executes git push","name":"auto_deploy","type":"boolean","valid_options":[true,false]},{"default_value":null,"description":"Indicates whether the app is setup for binary or git based deployments","name":"deployment_type","type":"string","valid_options":["git","binary"]},{"default_value":null,"description":"Indicates which branch should trigger an automatic deployment, if automatic deployment is enabled.","name":"deployment_branch","type":"string","valid_options":[]},{"default_value":null,"description":"Indicates how many total deployments to preserve. Must be greater than 0","name":"keep_deployments","type":"integer","valid_options":[]}],"rel":"Update application","required_params":[]},"MAKE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Make the application Highly Available (HA)","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["make-ha"]}]},"DISABLE_HA":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/events","method":"POST","optional_params":[],"rel":"Disable Highly Available (HA) on the application","required_params":[{"description":"event","invalid_options":[],"name":"event","type":"string","valid_options":["disable-ha"]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f","method":"DELETE","optional_params":[],"rel":"Delete application","required_params":[]}},"members":[{"explicit_role":null,"from":[{"type":"domain","role":"admin"}],"id":"511a77b2f2cb83597b000d32","links":{"GET":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/member/511a77b2f2cb83597b000d32","method":"GET","optional_params":[],"rel":"Get member","required_params":[]},"UPDATE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/member/511a77b2f2cb83597b000d32","method":"PUT","optional_params":[],"rel":"Update member","required_params":[{"description":"New role for member","invalid_options":[],"name":"role","type":"string","valid_options":[]}]},"DELETE":{"href":"https://openshift.redhat.com/broker/rest/application/5714ae1189f5cf026b00002f/member/511a77b2f2cb83597b000d32","method":"DELETE","optional_params":[],"rel":"Delete member","required_params":[]}},"login":"anurag@xinh.org","owner":true,"role":"admin","type":"user"}],"name":"othello","scalable":true,"ssh_url":"ssh://5714ae1189f5cf026b00002f@othello-rubyshift.rhcloud.com"}],"messages":[{"exit_code":0,"field":null,"index":null,"severity":"info","text":"Found 3 applications."}],"status":"ok","supported_api_versions":[1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7],"type":"applications","version":"1.7"}
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyShift::Client do
4
+ it { should respond_to :applications }
5
+
6
+ describe ".applications" do
7
+ before do
8
+ stub_get("/applications", "applications")
9
+ @applications = RubyShift.applications
10
+ end
11
+
12
+ it "should get the correct resource" do
13
+ expect(a_get("/applications")).to have_been_made
14
+ end
15
+
16
+ it "should return a list of applications" do
17
+ expect(@applications).to be_an Array
18
+ expect(@applications.first.name).to eq("hamlet")
19
+ expect(@applications.first.domain_id).to eq("rubyshift")
20
+ expect(@applications.first.framework).to eq("python-3.3")
21
+ end
22
+ end
23
+
24
+ describe ".application" do
25
+ before do
26
+ stub_get("/application/5714ae1189f5cf026b00002f", "application")
27
+ @application = RubyShift.application("5714ae1189f5cf026b00002f")
28
+ end
29
+
30
+ it "should get the correct resource" do
31
+ expect(a_get("/application/5714ae1189f5cf026b00002f")).to have_been_made
32
+ end
33
+
34
+ it "should return application info json" do
35
+ expect(@application.name).to eq("othello")
36
+ expect(@application.domain_id).to eq("rubyshift")
37
+ expect(@application.framework).to eq("ruby-2.0")
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyShift::Request do
4
+ it { should respond_to :get}
5
+ it { should respond_to :post}
6
+ it { should respond_to :put}
7
+ it { should respond_to :delete}
8
+
9
+ before do
10
+ @request = RubyShift::Request.new
11
+ end
12
+
13
+ describe ".default_options" do
14
+ it "should have default values set" do
15
+ default_options = RubyShift::Request.default_options
16
+ expect(default_options).to be_a Hash
17
+ expect(default_options[:parser]).to be_a Proc
18
+ expect(default_options[:format]).to eq(:json)
19
+ expect(default_options[:headers]).to eq({'Accept' => 'application/json'})
20
+ expect(default_options[:default_params]).to be_nil
21
+ end
22
+ end
23
+
24
+ describe ".parse" do
25
+ it "should return OpenStruct object" do
26
+ body = JSON.unparse(a: 1, b: 2)
27
+ expect(RubyShift::Request.parse(body)).to be_an OpenStruct
28
+ expect(RubyShift::Request.parse("true")).to be true
29
+ expect(RubyShift::Request.parse("false")).to be false
30
+
31
+ expect { RubyShift::Request.parse("test string") }.to raise_error(RubyShift::Error::Parsing)
32
+ end
33
+ end
34
+
35
+ describe "#set_request_defaults" do
36
+ context "when endpoint is not set" do
37
+ it "should raise Error::MissingCredentials" do
38
+ @request.endpoint = nil
39
+ expect do
40
+ @request.set_request_defaults
41
+ end.to raise_error(RubyShift::Error::MissingCredentials, 'Please set an API endpoint')
42
+ end
43
+ end
44
+
45
+ context "when endpoint is set" do
46
+ before(:each) do
47
+ @request.endpoint = 'http://openshift_spec.redhat.com/broker/rest'
48
+ end
49
+
50
+ it "should allow setting default_params" do
51
+ @request.set_request_defaults
52
+ expect(RubyShift::Request.default_params).to eq(httparty: {})
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "#set_authorization_header" do
58
+ it "should raise MissingCredentials when access_token is not set" do
59
+ expect do
60
+ @request.send(:set_authorization_header, {})
61
+ end.to raise_error(RubyShift::Error::MissingCredentials)
62
+ end
63
+
64
+ it "should set Authorization header when access_token is provided" do
65
+ @request.access_token = 'Z5b5IhP1a0whYv5o6JyWcvj6WgZFbgDD3W7rZDCWMdacffBn5ZybTxtZXEFVYFUg'
66
+ expect(@request.send(:set_authorization_header, {})).to eq("Authorization" => "Bearer Z5b5IhP1a0whYv5o6JyWcvj6WgZFbgDD3W7rZDCWMdacffBn5ZybTxtZXEFVYFUg")
67
+ end
68
+ end
69
+
70
+ describe "#handle_error" do
71
+ before do
72
+ @array = ['First message.', 'Second message.']
73
+ @obj = OpenStruct.new(firstkey: ['not set'], secondkey: ['x'], nested_key: { foo: ['bar'], baz: 'bleh' })
74
+ end
75
+
76
+ context "when passed an OpenStruct" do
77
+ end
78
+
79
+ context "when passed an Array" do
80
+ it "should return a concatenated string of messages" do
81
+ expect(@request.send(:handle_error, @array)).to eq('First message. Second message.')
82
+ end
83
+ end
84
+
85
+ context "when passed a string" do
86
+ it "should return the string untouched" do
87
+ error = 'here be error string'
88
+ expect(@request.send(:handle_error, error)).to eq('here be error string')
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyShift do
4
+ after { RubyShift.reset }
5
+
6
+ describe ".client" do
7
+ it "should be RubyShift::Client" do
8
+ expect(RubyShift.client).to be_a RubyShift::Client
9
+ end
10
+
11
+ it "should not override other RubyShift::Client objects" do
12
+ client1 = RubyShift.client(endpoint: 'https://openshift1.example.com', access_token: 'hunter1')
13
+ client2 = RubyShift.client(endpoint: 'https://openshift2.example.com', access_token: 'hunter2')
14
+ expect(client1.endpoint).to eq('https://openshift1.example.com')
15
+ expect(client2.endpoint).to eq('https://openshift2.example.com')
16
+ expect(client1.access_token).to eq('hunter1')
17
+ expect(client2.access_token).to eq('hunter2')
18
+ end
19
+ end
20
+
21
+ describe ".actions" do
22
+ it "should return an array of client methods" do
23
+ actions = RubyShift.actions
24
+ expect(actions).to be_an Array
25
+ expect(actions.first).to be_a Symbol
26
+ expect(actions.sort.first).to eq(:application)
27
+ end
28
+ end
29
+
30
+ describe ".endpoint=" do
31
+ it "should set endpoint" do
32
+ RubyShift.endpoint = 'https://openshift.example.com'
33
+ expect(RubyShift.endpoint).to eq('https://openshift.example.com')
34
+ end
35
+ end
36
+
37
+ describe ".username=" do
38
+ it "should set username" do
39
+ RubyShift.username = 'openshiftuser@example.com'
40
+ expect(RubyShift.username).to eq('openshiftuser@example.com')
41
+ end
42
+ end
43
+
44
+ describe ".password=" do
45
+ it "should set password" do
46
+ RubyShift.password = 'hunter2'
47
+ expect(RubyShift.password).to eq('hunter2')
48
+ end
49
+ end
50
+
51
+ describe ".access_token=" do
52
+ it "should set access_token" do
53
+ RubyShift.access_token = 'hunter2hunter2hunter2'
54
+ expect(RubyShift.access_token).to eq('hunter2hunter2hunter2')
55
+ end
56
+ end
57
+
58
+ describe ".user_agent" do
59
+ it "should return default user_agent" do
60
+ expect(RubyShift.user_agent).to eq(RubyShift::Configuration::DEFAULT_USER_AGENT)
61
+ end
62
+ end
63
+
64
+ describe ".user_agent=" do
65
+ it "should set access_token" do
66
+ RubyShift.user_agent = 'CustomUserAgent/1.1'
67
+ expect(RubyShift.user_agent).to eq('CustomUserAgent/1.1')
68
+ end
69
+ end
70
+
71
+ describe ".configure" do
72
+ RubyShift::Configuration::VALID_OPTIONS_KEYS.each do |key|
73
+ it "should set #{key}" do
74
+ RubyShift.configure do |config|
75
+ config.send("#{key}=", key)
76
+ expect(RubyShift.send(key)).to eq(key)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ describe ".http_proxy" do
83
+ it "delegates the method to RubyShift::Request" do
84
+ RubyShift.endpoint = 'https://openshift.example.com'
85
+ request = class_spy(RubyShift::Request).as_stubbed_const
86
+
87
+ RubyShift.http_proxy('proxy.example.net', 1337, 'proxyuser', 'hunter2')
88
+ expect(request).to have_received(:http_proxy).
89
+ with('proxy.example.net', 1337, 'proxyuser', 'hunter2')
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,38 @@
1
+ require 'rspec'
2
+ require 'webmock/rspec'
3
+
4
+ require File.expand_path('../../lib/rubyshift', __FILE__)
5
+
6
+ def capture_output
7
+ out = StringIO.new
8
+ $stdout = out
9
+ $stderr = out
10
+ yield
11
+ $stdout = STDOUT
12
+ $stderr = STDERR
13
+ out.string
14
+ end
15
+
16
+ def load_fixture(name)
17
+ File.new(File.dirname(__FILE__) + "/fixtures/#{name}.json")
18
+ end
19
+
20
+
21
+ RSpec.configure do |config|
22
+ config.before(:all) do
23
+ RubyShift.endpoint = 'https://openshift.example.com/broker/rest'
24
+ RubyShift.access_token = 'hunter2'
25
+ end
26
+ end
27
+
28
+ # GET
29
+ def stub_get(path, fixture)
30
+ stub_request(:get, "#{RubyShift.endpoint}#{path}").
31
+ with(headers: { 'Authorization' => "Bearer #{RubyShift.access_token}" }).
32
+ to_return(body: load_fixture(fixture))
33
+ end
34
+
35
+ def a_get(path)
36
+ a_request(:get, "#{RubyShift.endpoint}#{path}").
37
+ with(headers: { 'Authorization' => "Bearer #{RubyShift.access_token}" })
38
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyshift
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Anurag Patel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.13'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.24'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.24'
83
+ description: Ruby client for OpenShift REST API
84
+ email:
85
+ - gnurag@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - CHANGELOG.md
92
+ - LICENSE
93
+ - README.md
94
+ - Rakefile
95
+ - lib/rubyshift.rb
96
+ - lib/rubyshift/api.rb
97
+ - lib/rubyshift/client.rb
98
+ - lib/rubyshift/client/applications.rb
99
+ - lib/rubyshift/client/cartridges.rb
100
+ - lib/rubyshift/client/domains.rb
101
+ - lib/rubyshift/configuration.rb
102
+ - lib/rubyshift/error.rb
103
+ - lib/rubyshift/request.rb
104
+ - lib/rubyshift/version.rb
105
+ - rubyshift.gemspec
106
+ - spec/fixtures/application.json
107
+ - spec/fixtures/applications.json
108
+ - spec/rubyshift/client/applications_spec.rb
109
+ - spec/rubyshift/request_spec.rb
110
+ - spec/rubyshift_spec.rb
111
+ - spec/spec_helper.rb
112
+ homepage: https://github.com/gnurag/rubyshift
113
+ licenses:
114
+ - BSD
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubyforge_project:
132
+ rubygems_version: 2.5.1
133
+ signing_key:
134
+ specification_version: 4
135
+ summary: A Ruby wrapper for the OpenShift REST API
136
+ test_files:
137
+ - spec/fixtures/application.json
138
+ - spec/fixtures/applications.json
139
+ - spec/rubyshift/client/applications_spec.rb
140
+ - spec/rubyshift/request_spec.rb
141
+ - spec/rubyshift_spec.rb
142
+ - spec/spec_helper.rb