openshift-origin-controller 1.3.2

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.
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