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
@@ -0,0 +1,106 @@
1
+ class RestApplication10 < OpenShift::Model
2
+ attr_accessor :framework, :creation_time, :uuid, :embedded, :aliases, :name, :gear_count, :links, :domain_id, :git_url,
3
+ :app_url, :ssh_url, :gear_profile, :scalable, :health_check_path, :scale_min, :scale_max, :cartridges
4
+ include LegacyBrokerHelper
5
+
6
+ def initialize(app, url, nolinks=false)
7
+ self.framework = app.framework
8
+ self.name = app.name
9
+ self.creation_time = app.creation_time
10
+ self.uuid = app.uuid
11
+ self.aliases = app.aliases || Array.new
12
+ self.gear_count = (app.gears.nil?) ? 0 : app.gears.length
13
+ self.embedded = app.embedded
14
+ self.domain_id = app.domain.namespace
15
+ self.gear_profile = app.node_profile
16
+ self.scalable = app.scalable
17
+ self.scale_min,self.scale_max = app.scaling_limits
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
+ cart_type = "embedded"
23
+ cache_key = "cart_list_#{cart_type}"
24
+
25
+ unless nolinks
26
+ carts = nil
27
+ if app.scalable
28
+ carts = Application::SCALABLE_EMBEDDED_CARTS
29
+ else
30
+ carts = get_cached(cache_key, :expires_in => 21600.seconds) do
31
+ Application.get_available_cartridges("embedded")
32
+ end
33
+ end
34
+ # Update carts list
35
+ # - remove already embedded carts
36
+ # - remove conflicting carts
37
+ app.embedded.keys.each do |cname|
38
+ carts -= [cname]
39
+ cinfo = CartridgeCache.find_cartridge(cname)
40
+ carts -= cinfo.conflicts_feature if defined?(cinfo.conflicts_feature)
41
+ end if !app.embedded.empty?
42
+
43
+ self.links = {
44
+ "GET" => Link.new("Get application", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}")),
45
+ "GET_DESCRIPTOR" => Link.new("Get application descriptor", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/descriptor")),
46
+ "GET_GEARS" => Link.new("Get application gears", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/gears")),
47
+ "GET_GEAR_GROUPS" => Link.new("Get application gear groups", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/gear_groups")),
48
+ "START" => Link.new("Start application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
49
+ Param.new("event", "string", "event", "start")
50
+ ]),
51
+ "STOP" => Link.new("Stop application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
52
+ Param.new("event", "string", "event", "stop")
53
+ ]),
54
+ "RESTART" => Link.new("Restart application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
55
+ Param.new("event", "string", "event", "restart")
56
+ ]),
57
+ "FORCE_STOP" => Link.new("Force stop application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
58
+ Param.new("event", "string", "event", "force-stop")
59
+ ]),
60
+ "EXPOSE_PORT" => Link.new("Expose port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
61
+ Param.new("event", "string", "event", "expose-port")
62
+ ]),
63
+ "CONCEAL_PORT" => Link.new("Conceal port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
64
+ Param.new("event", "string", "event", "conceal-port")
65
+ ]),
66
+ "SHOW_PORT" => Link.new("Show port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
67
+ Param.new("event", "string", "event", "show-port")
68
+ ]),
69
+ "ADD_ALIAS" => Link.new("Add application alias", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
70
+ Param.new("event", "string", "event", "add-alias"),
71
+ Param.new("alias", "string", "The server alias for the application")
72
+ ]),
73
+ "REMOVE_ALIAS" => Link.new("Remove application alias", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
74
+ Param.new("event", "string", "event", "remove-alias"),
75
+ Param.new("alias", "string", "The application alias to be removed")
76
+ ]),
77
+ "SCALE_UP" => Link.new("Scale up application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
78
+ Param.new("event", "string", "event", "scale-up")
79
+ ]),
80
+ "SCALE_DOWN" => Link.new("Scale down application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
81
+ Param.new("event", "string", "event", "scale-down")
82
+ ]),
83
+ "TIDY" => Link.new("Tidy the application framework", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
84
+ Param.new("event", "string", "event", "tidy")
85
+ ]),
86
+ "RELOAD" => Link.new("Reload the application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
87
+ Param.new("event", "string", "event", "reload")
88
+ ]),
89
+ "THREAD_DUMP" => Link.new("Trigger thread dump", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
90
+ Param.new("event", "string", "event", "thread-dump")
91
+ ]),
92
+ "DELETE" => Link.new("Delete application", "DELETE", URI::join(url, "domains/#{@domain_id}/applications/#{@name}")),
93
+ "ADD_CARTRIDGE" => Link.new("Add embedded cartridge", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/cartridges"),[
94
+ Param.new("cartridge", "string", "framework-type, e.g.: mongodb-2.2", carts)
95
+ ]),
96
+ "LIST_CARTRIDGES" => Link.new("List embedded cartridges", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/cartridges")),
97
+ "DNS_RESOLVABLE" => Link.new("Resolve DNS", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/dns_resolvable"))
98
+ }
99
+ end
100
+ end
101
+
102
+ def to_xml(options={})
103
+ options[:tag_name] = "application"
104
+ super(options)
105
+ end
106
+ end
@@ -0,0 +1,124 @@
1
+ class RestApplication12 < OpenShift::Model
2
+ attr_accessor :framework, :creation_time, :uuid, :embedded, :aliases, :name, :gear_count, :links, :domain_id, :git_url, :app_url,
3
+ :ssh_url, :gear_profile, :scalable, :health_check_path, :building_with, :building_app, :build_job_url, :cartridges
4
+ include LegacyBrokerHelper
5
+
6
+ def initialize(app, url, nolinks=false)
7
+ self.framework = app.framework
8
+ self.name = app.name
9
+ self.creation_time = app.creation_time
10
+ self.uuid = app.uuid
11
+ self.aliases = app.aliases || Array.new
12
+ self.gear_count = (app.gears.nil?) ? 0 : app.gears.length
13
+ self.embedded = app.embedded
14
+ self.domain_id = app.domain.namespace
15
+ self.gear_profile = app.node_profile
16
+ self.scalable = app.scalable
17
+ self.git_url = "ssh://#{@uuid}@#{@name}-#{@domain_id}.#{Rails.configuration.openshift[:domain_suffix]}/~/git/#{@name}.git/"
18
+ self.app_url = "http://#{@name}-#{@domain_id}.#{Rails.configuration.openshift[:domain_suffix]}/"
19
+ self.ssh_url = "ssh://#{@uuid}@#{@name}-#{@domain_id}.#{Rails.configuration.openshift[:domain_suffix]}"
20
+ self.health_check_path = app.health_check_path
21
+ self.building_with = nil
22
+ self.building_app = nil
23
+ self.build_job_url = nil
24
+
25
+ app.embedded.each { |cname, cinfo|
26
+ cart = CartridgeCache::find_cartridge(cname)
27
+ if cart.categories.include? "ci_builder"
28
+ self.building_with = cart.name
29
+ self.build_job_url = cinfo["job_url"]
30
+ break
31
+ end
32
+ }
33
+ app.user.applications.each { |user_app|
34
+ cart = CartridgeCache::find_cartridge(user_app.framework)
35
+ if cart.categories.include? "ci"
36
+ self.building_app = user_app.name
37
+ break
38
+ end
39
+ }
40
+
41
+ cart_type = "embedded"
42
+ cache_key = "cart_list_#{cart_type}"
43
+ unless nolinks
44
+ carts = nil
45
+ if app.scalable
46
+ carts = Application::SCALABLE_EMBEDDED_CARTS
47
+ else
48
+ carts = get_cached(cache_key, :expires_in => 21600.seconds) do
49
+ Application.get_available_cartridges("embedded")
50
+ end
51
+ end
52
+ # Update carts list
53
+ # - remove already embedded carts
54
+ # - remove conflicting carts
55
+ app.embedded.keys.each do |cname|
56
+ carts -= [cname]
57
+ cinfo = CartridgeCache.find_cartridge(cname)
58
+ carts -= cinfo.conflicts_feature if defined?(cinfo.conflicts_feature)
59
+ end if !app.embedded.empty?
60
+
61
+ self.links = {
62
+ "GET" => Link.new("Get application", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}")),
63
+ "GET_DESCRIPTOR" => Link.new("Get application descriptor", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/descriptor")),
64
+ "GET_GEARS" => Link.new("Get application gears", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/gears")),
65
+ "GET_GEAR_GROUPS" => Link.new("Get application gear groups", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/gear_groups")),
66
+ "START" => Link.new("Start application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
67
+ Param.new("event", "string", "event", "start")
68
+ ]),
69
+ "STOP" => Link.new("Stop application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
70
+ Param.new("event", "string", "event", "stop")
71
+ ]),
72
+ "RESTART" => Link.new("Restart application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
73
+ Param.new("event", "string", "event", "restart")
74
+ ]),
75
+ "FORCE_STOP" => Link.new("Force stop application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
76
+ Param.new("event", "string", "event", "force-stop")
77
+ ]),
78
+ "EXPOSE_PORT" => Link.new("Expose port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
79
+ Param.new("event", "string", "event", "expose-port")
80
+ ]),
81
+ "CONCEAL_PORT" => Link.new("Conceal port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
82
+ Param.new("event", "string", "event", "conceal-port")
83
+ ]),
84
+ "SHOW_PORT" => Link.new("Show port", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
85
+ Param.new("event", "string", "event", "show-port")
86
+ ]),
87
+ "ADD_ALIAS" => Link.new("Add application alias", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
88
+ Param.new("event", "string", "event", "add-alias"),
89
+ Param.new("alias", "string", "The server alias for the application")
90
+ ]),
91
+ "REMOVE_ALIAS" => Link.new("Remove application alias", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
92
+ Param.new("event", "string", "event", "remove-alias"),
93
+ Param.new("alias", "string", "The application alias to be removed")
94
+ ]),
95
+ "SCALE_UP" => Link.new("Scale up application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
96
+ Param.new("event", "string", "event", "scale-up")
97
+ ]),
98
+ "SCALE_DOWN" => Link.new("Scale down application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
99
+ Param.new("event", "string", "event", "scale-down")
100
+ ]),
101
+ "TIDY" => Link.new("Tidy the application framework", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
102
+ Param.new("event", "string", "event", "tidy")
103
+ ]),
104
+ "RELOAD" => Link.new("Reload the application", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
105
+ Param.new("event", "string", "event", "reload")
106
+ ]),
107
+ "THREAD_DUMP" => Link.new("Trigger thread dump", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/events"), [
108
+ Param.new("event", "string", "event", "thread-dump")
109
+ ]),
110
+ "DELETE" => Link.new("Delete application", "DELETE", URI::join(url, "domains/#{@domain_id}/applications/#{@name}")),
111
+ "ADD_CARTRIDGE" => Link.new("Add embedded cartridge", "POST", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/cartridges"),[
112
+ Param.new("cartridge", "string", "framework-type, e.g.: mongodb-2.2", carts)
113
+ ]),
114
+ "LIST_CARTRIDGES" => Link.new("List embedded cartridges", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/cartridges")),
115
+ "DNS_RESOLVABLE" => Link.new("Resolve DNS", "GET", URI::join(url, "domains/#{@domain_id}/applications/#{@name}/dns_resolvable"))
116
+ }
117
+ end
118
+ end
119
+
120
+ def to_xml(options={})
121
+ options[:tag_name] = "application"
122
+ super(options)
123
+ end
124
+ end
@@ -0,0 +1,12 @@
1
+ class RestApplicationEstimate < OpenShift::Model
2
+ attr_accessor :components
3
+
4
+ def initialize(components)
5
+ self.components = components
6
+ end
7
+
8
+ def to_xml(options={})
9
+ options[:tag_name] = "gear"
10
+ super(options)
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ class RestApplicationTemplate < OpenShift::Model
2
+ attr_accessor :uuid, :display_name, :descriptor_yaml, :git_url, :tags, :gear_cost, :metadata, :links
3
+
4
+ def initialize(template, url, nolinks=false)
5
+ @uuid, @display_name, @descriptor_yaml, @git_url, @tags, @gear_cost, @metadata =
6
+ template.uuid, template.display_name, template.descriptor_yaml, template.git_url, template.tags,
7
+ template.gear_cost, template.metadata
8
+
9
+ self.links = {
10
+ "GET_TEMPLATE" => Link.new("Get specific template", "GET", URI::join(url, "application_templates/#{@uuid}")),
11
+ "LIST_TEMPLATES" => Link.new("Get specific template", "GET", URI::join(url, "application_templates")),
12
+ "LIST_TEMPLATES_BY_TAG" => Link.new("Get specific template", "GET", URI::join(url, "application_templates/TAG"))
13
+ } unless nolinks
14
+ end
15
+
16
+ def to_xml(options={})
17
+ options[:tag_name] = "template"
18
+ super(options)
19
+ end
20
+ end
@@ -0,0 +1,41 @@
1
+ class RestCartridge10 < OpenShift::Model
2
+ attr_accessor :type, :name, :links, :properties, :status_messages
3
+
4
+ def initialize(type, name, app, url, status_messages, nolinks=false)
5
+ self.name = name
6
+ self.type = type
7
+ self.properties = {}
8
+ self.status_messages = status_messages
9
+
10
+ if app and !nolinks
11
+ self.properties = app.embedded[name]
12
+ domain_id = app.domain.namespace
13
+ app_id = app.name
14
+ if not app_id.nil? and not domain_id.nil?
15
+ self.links = {
16
+ "GET" => Link.new("Get embedded cartridge", "GET", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"))
17
+ }
18
+ self.links.merge!({
19
+ "START" => Link.new("Start embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
20
+ Param.new("event", "string", "event", "start")
21
+ ]),
22
+ "STOP" => Link.new("Stop embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
23
+ Param.new("event", "string", "event", "stop")
24
+ ]),
25
+ "RESTART" => Link.new("Restart embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
26
+ Param.new("event", "string", "event", "restart")
27
+ ]),
28
+ "RELOAD" => Link.new("Reload embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
29
+ Param.new("event", "string", "event", "reload")
30
+ ]),
31
+ "DELETE" => Link.new("Delete embedded cartridge", "DELETE", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"))
32
+ }) if type == "embedded"
33
+ end
34
+ end
35
+ end
36
+
37
+ def to_xml(options={})
38
+ options[:tag_name] = "cartridge"
39
+ super(options)
40
+ end
41
+ end
@@ -0,0 +1,151 @@
1
+ class RestCartridge11 < OpenShift::Model
2
+ attr_accessor :type, :name, :version, :display_name, :description, :license, :license_url, :supported_scales_from, :supported_scales_to,
3
+ :tags, :website, :help_topics, :links, :properties, :status_messages, :collocated_with, :gear_profile,
4
+ :current_scale, :scales_with, :scales_from, :scales_to, :base_gear_storage, :additional_gear_storage
5
+
6
+ def initialize(type, name, app, url, status_messages, nolinks=false)
7
+ self.name = name
8
+ self.type = type
9
+ self.scales_from = 0
10
+ self.scales_to = nil
11
+ self.supported_scales_from = 0
12
+ self.supported_scales_to = nil
13
+ self.scales_with = nil
14
+ self.gear_profile = nil
15
+ self.current_scale = 0
16
+ self.collocated_with = []
17
+ self.status_messages = status_messages
18
+ prop_values = nil
19
+ cart = CartridgeCache.find_cartridge(name)
20
+ if app
21
+ if CartridgeCache.cartridge_names('standalone').include? name
22
+ app.comp_instance_map.each { |cname, cinst|
23
+ next if cinst.parent_cart_name!=name
24
+ prop_values = cinst.cart_properties
25
+ break
26
+ }
27
+ else
28
+ prop_values = app.embedded[name]
29
+ end
30
+ group_component_map = {}
31
+ app.comp_instance_map.each { |ci_name, ci|
32
+ if ci.parent_cart_name==name
33
+ group_component_map[ci.group_instance_name] = ci
34
+ end
35
+ }
36
+ group_component_map.each { |group_name, component|
37
+ gi = app.group_instance_map[group_name]
38
+ set_scaling_info(component, gi, cart)
39
+ }
40
+ else
41
+ set_scaling_info(nil, nil, cart)
42
+ end
43
+ self.version = cart.version
44
+ self.display_name = cart.display_name
45
+ self.description = cart.description
46
+ self.license = cart.license
47
+ self.license_url = cart.license_url
48
+ self.tags = cart.categories
49
+ self.website = cart.website
50
+ # self.suggests = cart.suggests_feature
51
+ # self.requires = cart.requires_feature
52
+ # self.depends = cart.profiles.map { |p| p.components.map { |c| c.depends_service }.flatten }.flatten.uniq
53
+ # self.conflicts = cart.conflicts_feature
54
+ self.help_topics = cart.help_topics
55
+
56
+ self.properties = []
57
+ cart.cart_data_def.each do |data_def|
58
+ property = {}
59
+ property["name"] = data_def["Key"]
60
+ property["type"] = data_def["Type"]
61
+ property["description"] = data_def["Description"]
62
+ property["value"] = prop_values[data_def["Key"]] unless prop_values.nil? or prop_values[data_def["Key"]].nil?
63
+ self.properties << property
64
+ end
65
+
66
+ if app and !nolinks
67
+ domain_id = app.domain.namespace
68
+ app_id = app.name
69
+ if not app_id.nil? and not domain_id.nil?
70
+ self.links = {
71
+ "GET" => Link.new("Get cartridge", "GET", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}")),
72
+ "UPDATE" => Link.new("Update cartridge configuration", "PUT", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"), nil, [
73
+ OptionalParam.new("additional_gear_storage", "integer", "Additional filesystem storage in gigabytes on each gear having cartridge #{name}"),
74
+ OptionalParam.new("scales_from", "integer", "Minimum number of gears having cartridge #{name}"),
75
+ OptionalParam.new("scales_to", "integer", "Maximum number of gears having cartridge #{name}")
76
+ ])
77
+ }
78
+ self.links.merge!({
79
+ "START" => Link.new("Start embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
80
+ Param.new("event", "string", "event", "start")
81
+ ]),
82
+ "STOP" => Link.new("Stop embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
83
+ Param.new("event", "string", "event", "stop")
84
+ ]),
85
+ "RESTART" => Link.new("Restart embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
86
+ Param.new("event", "string", "event", "restart")
87
+ ]),
88
+ "RELOAD" => Link.new("Reload embedded cartridge", "POST", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}/events"), [
89
+ Param.new("event", "string", "event", "reload")
90
+ ]),
91
+ "DELETE" => Link.new("Delete embedded cartridge", "DELETE", URI::join(url, "domains/#{domain_id}/applications/#{app_id}/cartridges/#{name}"))
92
+ }) if type == "embedded"
93
+ end
94
+ end
95
+ end
96
+
97
+
98
+ def set_scaling_info(comp_instance, group_instance, cartridge)
99
+ if group_instance and comp_instance
100
+ app = group_instance.app
101
+ self.current_scale += group_instance.gears.length
102
+ if self.scales_with.nil?
103
+ app.embedded.each { |cart_name, cart_info|
104
+ cart = CartridgeCache::find_cartridge(cart_name)
105
+ if cart.categories.include? "scales"
106
+ self.scales_with = cart.name
107
+ break
108
+ end
109
+ }
110
+ end
111
+ sup_max = group_instance.supported_max
112
+ self.supported_scales_from += group_instance.supported_min
113
+ if self.supported_scales_to.nil? or sup_max==-1
114
+ self.supported_scales_to = sup_max
115
+ else
116
+ self.supported_scales_to += sup_max unless self.supported_scales_to==-1
117
+ end
118
+ self.scales_from += group_instance.min
119
+ if self.scales_to.nil? or group_instance.max == -1
120
+ self.scales_to = group_instance.max
121
+ else
122
+ self.scales_to += group_instance.max unless self.scales_to==-1
123
+ end
124
+ self.base_gear_storage = group_instance.get_cached_min_storage_in_gb
125
+ self.additional_gear_storage = comp_instance.addtl_fs_gb
126
+ self.gear_profile = group_instance.node_profile
127
+
128
+ group_instance.component_instances.each { |cname|
129
+ cinst = app.comp_instance_map[cname]
130
+ if cinst.parent_cart_name!=cartridge.name and cinst.parent_cart_name != app.name
131
+ collocated_with << cinst.parent_cart_name unless collocated_with.include? cinst.parent_cart_name
132
+ end
133
+ }
134
+ else
135
+ prof = cartridge.profiles(cartridge.default_profile)
136
+ group = prof.groups()[0]
137
+ self.current_scale = 0
138
+ scaling_cart = CartridgeCache::cartridges.find { |cart| ( cart.categories.include? "scales" and cart.name!=cartridge.name ) }
139
+ self.scales_with = scaling_cart.name unless scaling_cart.nil?
140
+ self.supported_scales_from = group.scaling.min
141
+ self.scales_from = group.scaling.min
142
+ self.supported_scales_to = group.scaling.max
143
+ self.scales_to = group.scaling.max
144
+ end
145
+ end
146
+
147
+ def to_xml(options={})
148
+ options[:tag_name] = "cartridge"
149
+ super(options)
150
+ end
151
+ end