openshift-origin-controller 1.3.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of openshift-origin-controller might be problematic. Click here for more details.

Files changed (180) hide show
  1. data/COPYRIGHT +1 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +12 -0
  4. data/README.md +3 -0
  5. data/Rakefile +9 -0
  6. data/app/controllers/app_events_controller.rb +115 -0
  7. data/app/controllers/application_templates_controller.rb +19 -0
  8. data/app/controllers/applications_controller.rb +214 -0
  9. data/app/controllers/base_controller.rb +367 -0
  10. data/app/controllers/cartridges_controller.rb +48 -0
  11. data/app/controllers/descriptors_controller.rb +23 -0
  12. data/app/controllers/dns_resolvable_controller.rb +35 -0
  13. data/app/controllers/domains_controller.rb +156 -0
  14. data/app/controllers/emb_cart_controller.rb +276 -0
  15. data/app/controllers/emb_cart_events_controller.rb +52 -0
  16. data/app/controllers/environment_controller.rb +11 -0
  17. data/app/controllers/estimates_controller.rb +71 -0
  18. data/app/controllers/gear_groups_controller.rb +53 -0
  19. data/app/controllers/gears_controller.rb +70 -0
  20. data/app/controllers/keys_controller.rb +96 -0
  21. data/app/controllers/legacy_broker_controller.rb +510 -0
  22. data/app/controllers/quickstarts_controller.rb +29 -0
  23. data/app/controllers/user_controller.rb +38 -0
  24. data/app/helpers/cartridge_helper.rb +25 -0
  25. data/app/helpers/legacy_broker_helper.rb +21 -0
  26. data/app/helpers/user_action_logger.rb +38 -0
  27. data/app/models/application.rb +1718 -0
  28. data/app/models/application_template.rb +27 -0
  29. data/app/models/cartridge_cache.rb +51 -0
  30. data/app/models/cloud_user.rb +334 -0
  31. data/app/models/component_instance.rb +228 -0
  32. data/app/models/connection_endpoint.rb +10 -0
  33. data/app/models/district.rb +210 -0
  34. data/app/models/domain.rb +234 -0
  35. data/app/models/gear.rb +376 -0
  36. data/app/models/group_instance.rb +306 -0
  37. data/app/models/key.rb +20 -0
  38. data/app/models/legacy_reply.rb +15 -0
  39. data/app/models/legacy_request.rb +126 -0
  40. data/app/models/link.rb +11 -0
  41. data/app/models/message.rb +10 -0
  42. data/app/models/name_server_cache.rb +46 -0
  43. data/app/models/optional_param.rb +12 -0
  44. data/app/models/param.rb +13 -0
  45. data/app/models/remote_job.rb +57 -0
  46. data/app/models/rest_application.rb +126 -0
  47. data/app/models/rest_application10.rb +106 -0
  48. data/app/models/rest_application12.rb +124 -0
  49. data/app/models/rest_application_estimate.rb +12 -0
  50. data/app/models/rest_application_template.rb +20 -0
  51. data/app/models/rest_cartridge10.rb +41 -0
  52. data/app/models/rest_cartridge11.rb +151 -0
  53. data/app/models/rest_domain.rb +43 -0
  54. data/app/models/rest_domain10.rb +42 -0
  55. data/app/models/rest_estimates.rb +16 -0
  56. data/app/models/rest_gear.rb +14 -0
  57. data/app/models/rest_gear_group.rb +26 -0
  58. data/app/models/rest_key.rb +24 -0
  59. data/app/models/rest_reply.rb +31 -0
  60. data/app/models/rest_user.rb +43 -0
  61. data/app/models/result_io.rb +67 -0
  62. data/app/models/usage_record.rb +37 -0
  63. data/app/models/validators/app_validator.rb +30 -0
  64. data/app/models/validators/key_validator.rb +30 -0
  65. data/app/models/validators/namespace_validator.rb +18 -0
  66. data/config/routes.rb +36 -0
  67. data/lib/controller_engine.rb +7 -0
  68. data/lib/openshift-origin-controller.rb +14 -0
  69. data/lib/openshift/application_container_proxy.rb +241 -0
  70. data/lib/openshift/auth_service.rb +101 -0
  71. data/lib/openshift/data_store.rb +33 -0
  72. data/lib/openshift/dns_service.rb +41 -0
  73. data/lib/openshift/mongo_data_store.rb +671 -0
  74. data/openshift-origin-controller.gemspec +42 -0
  75. data/rubygem-openshift-origin-controller.spec +274 -0
  76. data/test/cucumber/application-estimate.feature +25 -0
  77. data/test/cucumber/cartridge-10gen-mms-agent.feature +28 -0
  78. data/test/cucumber/cartridge-cron.feature +32 -0
  79. data/test/cucumber/cartridge-haproxy.feature +31 -0
  80. data/test/cucumber/cartridge-jenkins-build.feature +12 -0
  81. data/test/cucumber/cartridge-jenkins-client.feature +10 -0
  82. data/test/cucumber/cartridge-lifecycle-diy.feature +21 -0
  83. data/test/cucumber/cartridge-lifecycle-jbossas.feature +61 -0
  84. data/test/cucumber/cartridge-lifecycle-jbosseap.feature +61 -0
  85. data/test/cucumber/cartridge-lifecycle-jbossews10.feature +61 -0
  86. data/test/cucumber/cartridge-lifecycle-jenkins.feature +41 -0
  87. data/test/cucumber/cartridge-lifecycle-nodejs.feature +59 -0
  88. data/test/cucumber/cartridge-lifecycle-perl.feature +40 -0
  89. data/test/cucumber/cartridge-lifecycle-php.feature +106 -0
  90. data/test/cucumber/cartridge-lifecycle-python.feature +40 -0
  91. data/test/cucumber/cartridge-lifecycle-ruby18.feature +49 -0
  92. data/test/cucumber/cartridge-lifecycle-ruby19.feature +41 -0
  93. data/test/cucumber/cartridge-mongodb.feature +31 -0
  94. data/test/cucumber/cartridge-mysql.feature +30 -0
  95. data/test/cucumber/cartridge-php.feature +14 -0
  96. data/test/cucumber/cartridge-phpmyadmin.feature +32 -0
  97. data/test/cucumber/cartridge-postgresql.feature +32 -0
  98. data/test/cucumber/cartridge-runtime-extended-db.feature +64 -0
  99. data/test/cucumber/cartridge-runtime-extended-jboss.feature +24 -0
  100. data/test/cucumber/cartridge-runtime-extended-nodejs.feature +21 -0
  101. data/test/cucumber/cartridge-runtime-extended-perl.feature +18 -0
  102. data/test/cucumber/cartridge-runtime-extended-php.feature +19 -0
  103. data/test/cucumber/cartridge-runtime-extended-python.feature +18 -0
  104. data/test/cucumber/cartridge-runtime-extended-ruby.feature +22 -0
  105. data/test/cucumber/cartridge-runtime-standard-diy.feature +6 -0
  106. data/test/cucumber/cartridge-runtime-standard-jbossas.feature +7 -0
  107. data/test/cucumber/cartridge-runtime-standard-jbosseap.feature +7 -0
  108. data/test/cucumber/cartridge-runtime-standard-jbossews10.feature +7 -0
  109. data/test/cucumber/cartridge-runtime-standard-jenkins.feature +8 -0
  110. data/test/cucumber/cartridge-runtime-standard-nodejs.feature +7 -0
  111. data/test/cucumber/cartridge-runtime-standard-perl.feature +6 -0
  112. data/test/cucumber/cartridge-runtime-standard-php.feature +6 -0
  113. data/test/cucumber/cartridge-runtime-standard-python.feature +6 -0
  114. data/test/cucumber/cartridge-runtime-standard-ruby.feature +19 -0
  115. data/test/cucumber/cartridge-switchyard.feature +36 -0
  116. data/test/cucumber/descriptor.feature +40 -0
  117. data/test/cucumber/embedded.feature +44 -0
  118. data/test/cucumber/idler.feature +75 -0
  119. data/test/cucumber/misc/descriptor/manifest.yml +22 -0
  120. data/test/cucumber/misc/php/db_test.php +21 -0
  121. data/test/cucumber/openshift-node.feature +21 -0
  122. data/test/cucumber/rest-application-templates.feature +31 -0
  123. data/test/cucumber/rest-applications.feature +431 -0
  124. data/test/cucumber/rest-cartridge-types.feature +16 -0
  125. data/test/cucumber/rest-domains.feature +276 -0
  126. data/test/cucumber/rest-gears.feature +38 -0
  127. data/test/cucumber/rest-keys.feature +247 -0
  128. data/test/cucumber/rest-quickstarts.feature +27 -0
  129. data/test/cucumber/rest-workflow.feature +64 -0
  130. data/test/cucumber/step_definitions/api_steps.rb +369 -0
  131. data/test/cucumber/step_definitions/application-estimate-steps.rb +51 -0
  132. data/test/cucumber/step_definitions/application_steps.rb +215 -0
  133. data/test/cucumber/step_definitions/cartridge-10gen-mms-agent_steps.rb +11 -0
  134. data/test/cucumber/step_definitions/cartridge-cron_steps.rb +51 -0
  135. data/test/cucumber/step_definitions/cartridge-haproxy_steps.rb +30 -0
  136. data/test/cucumber/step_definitions/cartridge-jenkins_steps.rb +93 -0
  137. data/test/cucumber/step_definitions/cartridge-lifecycle-nodejs_steps.rb +30 -0
  138. data/test/cucumber/step_definitions/cartridge-mongodb_steps.rb +60 -0
  139. data/test/cucumber/step_definitions/cartridge-mysql_steps.rb +56 -0
  140. data/test/cucumber/step_definitions/cartridge-php_steps.rb +72 -0
  141. data/test/cucumber/step_definitions/cartridge-postgresql_steps.rb +59 -0
  142. data/test/cucumber/step_definitions/cartridge-switchyard_steps.rb +29 -0
  143. data/test/cucumber/step_definitions/client_steps.rb +12 -0
  144. data/test/cucumber/step_definitions/descriptor_step.rb +32 -0
  145. data/test/cucumber/step_definitions/idler_steps.rb +37 -0
  146. data/test/cucumber/step_definitions/node_steps.rb +203 -0
  147. data/test/cucumber/step_definitions/runtime_steps.rb +547 -0
  148. data/test/cucumber/step_definitions/runtime_url_steps.rb +46 -0
  149. data/test/cucumber/step_definitions/trap-user-extended_steps.rb +14 -0
  150. data/test/cucumber/step_definitions/trap-user_steps.rb +58 -0
  151. data/test/cucumber/support/00_setup_helper.rb +106 -0
  152. data/test/cucumber/support/app_helper.rb +243 -0
  153. data/test/cucumber/support/assertions.rb +52 -0
  154. data/test/cucumber/support/command_helper.rb +453 -0
  155. data/test/cucumber/support/dns_helper.rb +54 -0
  156. data/test/cucumber/support/env.rb +5 -0
  157. data/test/cucumber/support/process_helper.rb +44 -0
  158. data/test/cucumber/support/runtime_support.rb +440 -0
  159. data/test/cucumber/support/unused.rb +27 -0
  160. data/test/cucumber/support/user_helper.rb +37 -0
  161. data/test/cucumber/trap-user-extended.feature +53 -0
  162. data/test/cucumber/trap-user.feature +34 -0
  163. data/test/ddns/1.168.192-rev.db.init +13 -0
  164. data/test/ddns/HOWTO.txt +207 -0
  165. data/test/ddns/Kexample.com.+157+06142.key +1 -0
  166. data/test/ddns/Kexample.com.+157+06142.private +7 -0
  167. data/test/ddns/authconfig.rb +14 -0
  168. data/test/ddns/example.com.db.init +23 -0
  169. data/test/ddns/example.com.key +4 -0
  170. data/test/ddns/named.ca +52 -0
  171. data/test/ddns/named.conf +48 -0
  172. data/test/ddns/named.empty +10 -0
  173. data/test/ddns/named.localhost +10 -0
  174. data/test/ddns/named.loopback +11 -0
  175. data/test/ddns/named.rfc1912.zones +42 -0
  176. data/test/ddns/named.root.key +5 -0
  177. data/test/ddns/named_service.rb +127 -0
  178. data/test/unit/bind_dns_service_test.rb +167 -0
  179. data/test/unit/broker_auth_test.rb +28 -0
  180. metadata +545 -0
data/app/models/key.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'validators/key_validator'
2
+
3
+ class Key < OpenShift::Model
4
+ attr_accessor :name, :type, :content
5
+ include ActiveModel::Validations
6
+
7
+ VALID_SSH_KEY_TYPES = ['ssh-rsa', 'ssh-dss', 'ecdsa-sha2-nistp256-cert-v01@openssh.com', 'ecdsa-sha2-nistp384-cert-v01@openssh.com',
8
+ 'ecdsa-sha2-nistp521-cert-v01@openssh.com', 'ssh-rsa-cert-v01@openssh.com', 'ssh-dss-cert-v01@openssh.com',
9
+ 'ssh-rsa-cert-v00@openssh.com', 'ssh-dss-cert-v00@openssh.com', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
10
+ DEFAULT_SSH_KEY_TYPE = "ssh-rsa" unless defined? DEFAULT_SSH_KEY_TYPE
11
+ DEFAULT_SSH_KEY_NAME = "default" unless defined? DEFAULT_SSH_KEY_NAME
12
+
13
+ validates_with KeyValidator
14
+
15
+ def initialize(name, type, content)
16
+ self.name = name
17
+ self.type = type
18
+ self.content = content
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ class LegacyReply < OpenShift::Model
2
+ attr_accessor :api, :api_c, :broker_c, :debug, :messages, :result, :data, :exit_code
3
+
4
+ API_VERSION = "1.1.3"
5
+ API_CAPABILITY = %w(placeholder)
6
+ C_CAPABILITY = %w(namespace rhlogin ssh app_uuid debug alter cartridge cart_type action app_name api)
7
+
8
+ def initialize
9
+ @api = API_VERSION
10
+ @api_c = API_CAPABILITY
11
+ @broker_c = C_CAPABILITY
12
+ @debug = ""
13
+ @messages = nil
14
+ end
15
+ end
@@ -0,0 +1,126 @@
1
+ class LegacyRequest < OpenShift::Model
2
+ attr_accessor :namespace, :rhlogin, :ssh, :app_uuid, :app_name, :node_profile, :debug, :alter, :delete, :cartridge, :api, :cart_type, :action, :server_alias, :api, :key_name, :key_type
3
+ attr_reader :invalid_keys
4
+
5
+ APP_MAX_LENGTH = 32
6
+ NS_MAX_LENGTH = 16
7
+
8
+ def initialize
9
+ @invalid_keys = []
10
+ end
11
+
12
+ validates_each :invalid_keys do |record, attribute, val|
13
+ val.each do |key|
14
+ record.errors.add :base, {:message => "Unknown json key found: #{key}", :exit_code => 1}
15
+ end
16
+ end
17
+
18
+ validates_each :rhlogin do |record, attribute, val|
19
+ if val =~ /["\$\^<>\|%\/;:,\\\*=~]/
20
+ record.errors.add attribute, {:message => "Invalid rhlogin: #{val}", :exit_code => 107}
21
+ end
22
+ end
23
+
24
+ validates_each :key_name, :allow_nil =>true do |record, attribute, val|
25
+ if !(val =~ /\A[A-Za-z0-9]+\z/)
26
+ record.errors.add attribute, {:message => "Invalid key name: #{val}", :exit_code => 117}
27
+ end
28
+ end
29
+
30
+ validates_each :key_type, :allow_nil =>true do |record, attribute, val|
31
+ if !Key::VALID_SSH_KEY_TYPES.include?(val)
32
+ record.errors.add attribute, {:message => "Invalid key type: #{val}", :exit_code => 116}
33
+ end
34
+ end
35
+
36
+ validates_each :namespace, :allow_nil =>true do |record, attribute, val|
37
+ if !(val =~ /\A[A-Za-z0-9]+\z/)
38
+ record.errors.add attribute, {:message => "Invalid namespace: #{val}", :exit_code => 106}
39
+ end
40
+ if val and val.length > NS_MAX_LENGTH
41
+ record.errors.add attribute, {:message => "The supplied namespace '#{val}' is longer than the allowed length of #{NS_MAX_LENGTH} characters.", :exit_code => 106}
42
+ end
43
+ end
44
+
45
+ validates_each :app_name, :allow_nil =>true do |record, attribute, val|
46
+ if !(val =~ /\A[A-Za-z0-9]+\z/)
47
+ record.errors.add attribute, {:message => "Invalid #{attribute} specified: #{val}", :exit_code => 105}
48
+ end
49
+ if val and val.length > APP_MAX_LENGTH
50
+ record.errors.add attribute, {:message => "The supplied application name '#{val}' is longer than the allowed length of #{APP_MAX_LENGTH} characters.", :exit_code => 105}
51
+ end
52
+ end
53
+
54
+ validates_each :ssh, :allow_nil =>true do |record, attribute, val|
55
+ unless (val =~ /\A[A-Za-z0-9\+\/=]+\z/)
56
+ record.errors.add attribute, {:message => "Invalid ssh key: #{val}", :exit_code => 108}
57
+ end
58
+ end
59
+
60
+ validates_each :app_uuid, :allow_nil =>true do |record, attribute, val|
61
+ if !(val =~ /\A[a-f0-9]+\z/)
62
+ record.errors.add attribute, {:message => "Invalid application uuid: #{val}", :exit_code => 1}
63
+ end
64
+ end
65
+
66
+ validates_each :node_profile, :allow_nil =>true do |record, attribute, val|
67
+ end
68
+
69
+ validates_each :debug, :alter, :delete, :allow_nil =>true do |record, attribute, val|
70
+ if val != true && val != false && !(val =~ /\A(true|false)\z/)
71
+ record.errors.add attribute, {:message => "Invalid value for #{attribute} specified: #{val}", :exit_code => 1}
72
+ end
73
+ end
74
+
75
+ validates_each :cartridge, :allow_nil =>true do |record, attribute, val|
76
+ if !(val =~ /\A[\w\-\.]+\z/)
77
+ record.errors.add attribute, {:message => "Invalid cartridge specified: #{val}", :exit_code => 1}
78
+ end
79
+ end
80
+
81
+ validates_each :api, :allow_nil =>true do |record, attribute, val|
82
+ if !(val =~ /\A\d+\.\d+\.\d+\z/)
83
+ record.errors.add attribute, {:message => "Invalid API value specified: #{val}", :exit_code => 112}
84
+ end
85
+ end
86
+
87
+ validates_each :cart_type, :allow_nil =>true do |record, attribute, val|
88
+ if !(val =~ /\A(standalone|embedded)\z/)
89
+ record.errors.add attribute, {:message => "Invalid cart_type specified: #{val}", :exit_code => 109}
90
+ end
91
+ end
92
+
93
+ validates_each :action, :allow_nil =>true do |record, attribute, val|
94
+ if !(val =~ /\A[\w\-\.]+\z/)
95
+ record.errors.add attribute, {:message => "Invalid action specified: #{val}", :exit_code => 111}
96
+ end
97
+ end
98
+
99
+ validates_each :server_alias, :allow_nil =>true do |record, attribute, val|
100
+ if !(val =~ /\A[\w\-\.]+\z/) or (val =~ /#{Rails.configuration.openshift[:domain_suffix]}$/)
101
+ record.errors.add attribute, {:message => "Invalid ServerAlias specified: #{val}", :exit_code => 105}
102
+ end
103
+ end
104
+
105
+ def alter
106
+ @alter == "true" || @alter == true
107
+ end
108
+
109
+ def debug
110
+ @debug == "true" || @debug == true
111
+ end
112
+
113
+ def delete
114
+ @delete == "true" || @delete == true
115
+ end
116
+
117
+ def attributes=(hash)
118
+ hash.each do |key,value|
119
+ begin
120
+ self.send("#{key}=",value)
121
+ rescue NoMethodError => e
122
+ @invalid_keys.push key
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,11 @@
1
+ class Link < OpenShift::Model
2
+ attr_accessor :rel, :method, :href, :required_params, :optional_params
3
+
4
+ def initialize(rel, method, href, required_params=nil, optional_params=nil)
5
+ self.rel = rel
6
+ self.method = method
7
+ self.href = href.to_s
8
+ self.required_params = required_params || Array.new
9
+ self.optional_params = optional_params || Array.new
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class Message < OpenShift::Model
2
+ attr_accessor :severity, :text, :exit_code, :field
3
+
4
+ def initialize(severity=:info, text=nil, exit_code=nil, field=nil)
5
+ self.severity = severity
6
+ self.text = text
7
+ self.exit_code = exit_code
8
+ self.field = field
9
+ end
10
+ end
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'dnsruby'
3
+
4
+ class NameServerCache
5
+
6
+ def self.get_cached(key, opts={})
7
+ unless Rails.configuration.action_controller.perform_caching
8
+ if block_given?
9
+ return yield
10
+ end
11
+ end
12
+
13
+ val = Rails.cache.read(key)
14
+ unless val
15
+ if block_given?
16
+ val = yield
17
+ if val
18
+ Rails.cache.write(key, val, opts)
19
+ end
20
+ end
21
+ end
22
+
23
+ return val
24
+ end
25
+
26
+ def self.get_name_servers
27
+ dns = Dnsruby::DNS.new()
28
+ domain = Rails.application.config.openshift[:domain_suffix]
29
+ while domain && !domain.empty?
30
+ resources = dns.getresources(domain, Dnsruby::Types.NS)
31
+ unless resources.empty?
32
+ break
33
+ else
34
+ dp = domain.partition('.')
35
+ domain = dp[2]
36
+ end
37
+ end
38
+ raise OpenShift::UserException.new("Unable to find nameservers for domain '#{Rails.application.config.openshift[:domain_suffix]}'",
39
+ 141) if resources.empty?
40
+ @nameservers = []
41
+ resources.each do |resource|
42
+ @nameservers.push(resource.domainname.to_s)
43
+ end
44
+ get_cached("name_servers", :expires_in => 1.hour) {@nameservers}
45
+ end
46
+ end
@@ -0,0 +1,12 @@
1
+ class OptionalParam < OpenShift::Model
2
+ attr_accessor :name, :type, :description, :valid_options, :default_value
3
+
4
+ def initialize(name=nil, type=nil, description=nil, valid_options=nil, default_value=nil)
5
+ self.name = name
6
+ self.type = type
7
+ self.description = description
8
+ valid_options = [valid_options] unless valid_options.kind_of?(Array)
9
+ self.valid_options = valid_options || Array.new
10
+ self.default_value = default_value
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ class Param < OpenShift::Model
2
+ attr_accessor :name, :type, :description, :valid_options, :invalid_options
3
+
4
+ def initialize(name=nil, type=nil, description=nil, valid_options=nil, invalid_options=nil)
5
+ self.name = name
6
+ self.type = type
7
+ self.description = description
8
+ self.valid_options = valid_options || Array.new
9
+ self.valid_options = [self.valid_options] unless self.valid_options.kind_of?(Array)
10
+ self.invalid_options = invalid_options || Array.new
11
+ self.invalid_options = [self.invalid_options] unless self.invalid_options.kind_of?(Array)
12
+ end
13
+ end
@@ -0,0 +1,57 @@
1
+
2
+ class RemoteJob < OpenShift::Model
3
+ attr_accessor :cartridge, :action, :args
4
+
5
+ def initialize(target, action, args)
6
+ self.cartridge = target
7
+ self.action = action
8
+ self.args = args
9
+ end
10
+
11
+
12
+ def self.create_parallel_job
13
+ return { }
14
+ end
15
+
16
+ def self.has_jobs(handle)
17
+ !handle.empty?
18
+ end
19
+
20
+ def self.run_parallel_on_gears(gears, handle, &block)
21
+ gears.each { |gear|
22
+ block.call(handle, gear)
23
+ }
24
+ # now execute
25
+ begin
26
+ OpenShift::ApplicationContainerProxy.execute_parallel_jobs(handle)
27
+ rescue Exception=>e
28
+ Rails.logger.error e.message
29
+ Rails.logger.error e.inspect
30
+ Rails.logger.error e.backtrace.inspect
31
+ raise e
32
+ end
33
+ end
34
+
35
+ def self.add_parallel_job(handle, tag, gear, rjob)
36
+ parallel_job = {
37
+ :tag => tag,
38
+ :gear => gear.uuid,
39
+ :job => { :cartridge => rjob.cartridge, :action => rjob.action, :args => rjob.args },
40
+ :result_stdout => "",
41
+ :result_stderr => "",
42
+ :result_exit_code => ""
43
+ }
44
+ job_list = handle[gear.get_proxy.id] || []
45
+ job_list << parallel_job
46
+ handle[gear.get_proxy.id] = job_list
47
+ end
48
+
49
+ def self.get_parallel_run_results(handle, &block)
50
+ handle.each { |id, job_list|
51
+ job_list.each { |parallel_job|
52
+ block.call(parallel_job[:tag], parallel_job[:gear], parallel_job[:result_stdout], parallel_job[:result_exit_code])
53
+ }
54
+ }
55
+ end
56
+
57
+ end
@@ -0,0 +1,126 @@
1
+ class RestApplication < OpenShift::Model
2
+ attr_accessor :framework, :creation_time, :uuid, :embedded, :aliases, :name, :gear_count, :links, :domain_id,
3
+ :git_url, :app_url, :ssh_url, :gear_profile, :scalable, :health_check_path, :building_with, :building_app,
4
+ :build_job_url, :initial_git_url, :cartridges
5
+ include LegacyBrokerHelper
6
+
7
+ def initialize(app, url, nolinks=false)
8
+ self.framework = app.framework
9
+ self.name = app.name
10
+ self.creation_time = app.creation_time
11
+ self.uuid = app.uuid
12
+ self.aliases = app.aliases || Array.new
13
+ self.gear_count = (app.gears.nil?) ? 0 : app.gears.length
14
+ self.embedded = app.embedded
15
+ self.domain_id = app.domain.namespace
16
+ self.gear_profile = app.node_profile
17
+ self.scalable = app.scalable
18
+ self.git_url = "ssh://#{@uuid}@#{@name}-#{@domain_id}.#{Rails.configuration.openshift[:domain_suffix]}/~/git/#{@name}.git/"
19
+ self.app_url = "http://#{@name}-#{@domain_id}.#{Rails.configuration.openshift[:domain_suffix]}/"
20
+ self.ssh_url = "ssh://#{@uuid}@#{@name}-#{@domain_id}.#{Rails.configuration.openshift[:domain_suffix]}"
21
+ self.health_check_path = app.health_check_path
22
+ self.building_with = nil
23
+ self.building_app = nil
24
+ self.build_job_url = nil
25
+ self.initial_git_url = app.init_git_url
26
+
27
+ app.embedded.each { |cname, cinfo|
28
+ cart = CartridgeCache::find_cartridge(cname)
29
+ if cart.categories.include? "ci_builder"
30
+ self.building_with = cart.name
31
+ self.build_job_url = cinfo["job_url"]
32
+ break
33
+ end
34
+ }
35
+ app.user.applications.each { |user_app|
36
+ cart = CartridgeCache::find_cartridge(user_app.framework)
37
+ if cart.categories.include? "ci"
38
+ self.building_app = user_app.name
39
+ break
40
+ end
41
+ }
42
+
43
+ cart_type = "embedded"
44
+ cache_key = "cart_list_#{cart_type}"
45
+ unless nolinks
46
+ carts = nil
47
+ if app.scalable
48
+ carts = Application::SCALABLE_EMBEDDED_CARTS
49
+ else
50
+ carts = get_cached(cache_key, :expires_in => 21600.seconds) do
51
+ Application.get_available_cartridges("embedded")
52
+ end
53
+ end
54
+ # Update carts list
55
+ # - remove already embedded carts
56
+ # - remove conflicting carts
57
+ app.embedded.keys.each do |cname|
58
+ carts -= [cname]
59
+ cinfo = CartridgeCache.find_cartridge(cname)
60
+ carts -= cinfo.conflicts_feature if defined?(cinfo.conflicts_feature)
61
+ end if !app.embedded.empty?
62
+
63
+ self.links = {
64
+ "GET" => Link.new("Get application", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}")),
65
+ "GET_DESCRIPTOR" => Link.new("Get application descriptor", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/descriptor")),
66
+ "GET_GEARS" => Link.new("Get application gears", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/gears")),
67
+ "GET_GEAR_GROUPS" => Link.new("Get application gear groups", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/gear_groups")),
68
+ "START" => Link.new("Start application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
69
+ Param.new("event", "string", "event", "start")
70
+ ]),
71
+ "STOP" => Link.new("Stop application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
72
+ Param.new("event", "string", "event", "stop")
73
+ ]),
74
+ "RESTART" => Link.new("Restart application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
75
+ Param.new("event", "string", "event", "restart")
76
+ ]),
77
+ "FORCE_STOP" => Link.new("Force stop application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
78
+ Param.new("event", "string", "event", "force-stop")
79
+ ]),
80
+ "EXPOSE_PORT" => Link.new("Expose port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
81
+ Param.new("event", "string", "event", "expose-port")
82
+ ]),
83
+ "CONCEAL_PORT" => Link.new("Conceal port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
84
+ Param.new("event", "string", "event", "conceal-port")
85
+ ]),
86
+ "SHOW_PORT" => Link.new("Show port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
87
+ Param.new("event", "string", "event", "show-port")
88
+ ]),
89
+ "ADD_ALIAS" => Link.new("Add application alias", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
90
+ Param.new("event", "string", "event", "add-alias"),
91
+ Param.new("alias", "string", "The server alias for the application")
92
+ ]),
93
+ "REMOVE_ALIAS" => Link.new("Remove application alias", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
94
+ Param.new("event", "string", "event", "remove-alias"),
95
+ Param.new("alias", "string", "The application alias to be removed")
96
+ ]),
97
+ "SCALE_UP" => Link.new("Scale up application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
98
+ Param.new("event", "string", "event", "scale-up")
99
+ ]),
100
+ "SCALE_DOWN" => Link.new("Scale down application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
101
+ Param.new("event", "string", "event", "scale-down")
102
+ ]),
103
+ "TIDY" => Link.new("Tidy the application framework", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
104
+ Param.new("event", "string", "event", "tidy")
105
+ ]),
106
+ "RELOAD" => Link.new("Reload the application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
107
+ Param.new("event", "string", "event", "reload")
108
+ ]),
109
+ "THREAD_DUMP" => Link.new("Trigger thread dump", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
110
+ Param.new("event", "string", "event", "thread-dump")
111
+ ]),
112
+ "DELETE" => Link.new("Delete application", "DELETE", URI::join(url, "domains/#{@domain_id}/applications/#{@name}")),
113
+ "ADD_CARTRIDGE" => Link.new("Add embedded cartridge", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/cartridges"),[
114
+ Param.new("cartridge", "string", "framework-type, e.g.: mongodb-2.2", carts)
115
+ ]),
116
+ "LIST_CARTRIDGES" => Link.new("List embedded cartridges", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/cartridges")),
117
+ "DNS_RESOLVABLE" => Link.new("Resolve DNS", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/dns_resolvable"))
118
+ }
119
+ end
120
+ end
121
+
122
+ def to_xml(options={})
123
+ options[:tag_name] = "application"
124
+ super(options)
125
+ end
126
+ end