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.
- data/COPYRIGHT +1 -0
- data/Gemfile +4 -0
- data/LICENSE +12 -0
- data/README.md +3 -0
- data/Rakefile +9 -0
- data/app/controllers/app_events_controller.rb +115 -0
- data/app/controllers/application_templates_controller.rb +19 -0
- data/app/controllers/applications_controller.rb +214 -0
- data/app/controllers/base_controller.rb +367 -0
- data/app/controllers/cartridges_controller.rb +48 -0
- data/app/controllers/descriptors_controller.rb +23 -0
- data/app/controllers/dns_resolvable_controller.rb +35 -0
- data/app/controllers/domains_controller.rb +156 -0
- data/app/controllers/emb_cart_controller.rb +276 -0
- data/app/controllers/emb_cart_events_controller.rb +52 -0
- data/app/controllers/environment_controller.rb +11 -0
- data/app/controllers/estimates_controller.rb +71 -0
- data/app/controllers/gear_groups_controller.rb +53 -0
- data/app/controllers/gears_controller.rb +70 -0
- data/app/controllers/keys_controller.rb +96 -0
- data/app/controllers/legacy_broker_controller.rb +510 -0
- data/app/controllers/quickstarts_controller.rb +29 -0
- data/app/controllers/user_controller.rb +38 -0
- data/app/helpers/cartridge_helper.rb +25 -0
- data/app/helpers/legacy_broker_helper.rb +21 -0
- data/app/helpers/user_action_logger.rb +38 -0
- data/app/models/application.rb +1718 -0
- data/app/models/application_template.rb +27 -0
- data/app/models/cartridge_cache.rb +51 -0
- data/app/models/cloud_user.rb +334 -0
- data/app/models/component_instance.rb +228 -0
- data/app/models/connection_endpoint.rb +10 -0
- data/app/models/district.rb +210 -0
- data/app/models/domain.rb +234 -0
- data/app/models/gear.rb +376 -0
- data/app/models/group_instance.rb +306 -0
- data/app/models/key.rb +20 -0
- data/app/models/legacy_reply.rb +15 -0
- data/app/models/legacy_request.rb +126 -0
- data/app/models/link.rb +11 -0
- data/app/models/message.rb +10 -0
- data/app/models/name_server_cache.rb +46 -0
- data/app/models/optional_param.rb +12 -0
- data/app/models/param.rb +13 -0
- data/app/models/remote_job.rb +57 -0
- data/app/models/rest_application.rb +126 -0
- data/app/models/rest_application10.rb +106 -0
- data/app/models/rest_application12.rb +124 -0
- data/app/models/rest_application_estimate.rb +12 -0
- data/app/models/rest_application_template.rb +20 -0
- data/app/models/rest_cartridge10.rb +41 -0
- data/app/models/rest_cartridge11.rb +151 -0
- data/app/models/rest_domain.rb +43 -0
- data/app/models/rest_domain10.rb +42 -0
- data/app/models/rest_estimates.rb +16 -0
- data/app/models/rest_gear.rb +14 -0
- data/app/models/rest_gear_group.rb +26 -0
- data/app/models/rest_key.rb +24 -0
- data/app/models/rest_reply.rb +31 -0
- data/app/models/rest_user.rb +43 -0
- data/app/models/result_io.rb +67 -0
- data/app/models/usage_record.rb +37 -0
- data/app/models/validators/app_validator.rb +30 -0
- data/app/models/validators/key_validator.rb +30 -0
- data/app/models/validators/namespace_validator.rb +18 -0
- data/config/routes.rb +36 -0
- data/lib/controller_engine.rb +7 -0
- data/lib/openshift-origin-controller.rb +14 -0
- data/lib/openshift/application_container_proxy.rb +241 -0
- data/lib/openshift/auth_service.rb +101 -0
- data/lib/openshift/data_store.rb +33 -0
- data/lib/openshift/dns_service.rb +41 -0
- data/lib/openshift/mongo_data_store.rb +671 -0
- data/openshift-origin-controller.gemspec +42 -0
- data/rubygem-openshift-origin-controller.spec +274 -0
- data/test/cucumber/application-estimate.feature +25 -0
- data/test/cucumber/cartridge-10gen-mms-agent.feature +28 -0
- data/test/cucumber/cartridge-cron.feature +32 -0
- data/test/cucumber/cartridge-haproxy.feature +31 -0
- data/test/cucumber/cartridge-jenkins-build.feature +12 -0
- data/test/cucumber/cartridge-jenkins-client.feature +10 -0
- data/test/cucumber/cartridge-lifecycle-diy.feature +21 -0
- data/test/cucumber/cartridge-lifecycle-jbossas.feature +61 -0
- data/test/cucumber/cartridge-lifecycle-jbosseap.feature +61 -0
- data/test/cucumber/cartridge-lifecycle-jbossews10.feature +61 -0
- data/test/cucumber/cartridge-lifecycle-jenkins.feature +41 -0
- data/test/cucumber/cartridge-lifecycle-nodejs.feature +59 -0
- data/test/cucumber/cartridge-lifecycle-perl.feature +40 -0
- data/test/cucumber/cartridge-lifecycle-php.feature +106 -0
- data/test/cucumber/cartridge-lifecycle-python.feature +40 -0
- data/test/cucumber/cartridge-lifecycle-ruby18.feature +49 -0
- data/test/cucumber/cartridge-lifecycle-ruby19.feature +41 -0
- data/test/cucumber/cartridge-mongodb.feature +31 -0
- data/test/cucumber/cartridge-mysql.feature +30 -0
- data/test/cucumber/cartridge-php.feature +14 -0
- data/test/cucumber/cartridge-phpmyadmin.feature +32 -0
- data/test/cucumber/cartridge-postgresql.feature +32 -0
- data/test/cucumber/cartridge-runtime-extended-db.feature +64 -0
- data/test/cucumber/cartridge-runtime-extended-jboss.feature +24 -0
- data/test/cucumber/cartridge-runtime-extended-nodejs.feature +21 -0
- data/test/cucumber/cartridge-runtime-extended-perl.feature +18 -0
- data/test/cucumber/cartridge-runtime-extended-php.feature +19 -0
- data/test/cucumber/cartridge-runtime-extended-python.feature +18 -0
- data/test/cucumber/cartridge-runtime-extended-ruby.feature +22 -0
- data/test/cucumber/cartridge-runtime-standard-diy.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-jbossas.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-jbosseap.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-jbossews10.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-jenkins.feature +8 -0
- data/test/cucumber/cartridge-runtime-standard-nodejs.feature +7 -0
- data/test/cucumber/cartridge-runtime-standard-perl.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-php.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-python.feature +6 -0
- data/test/cucumber/cartridge-runtime-standard-ruby.feature +19 -0
- data/test/cucumber/cartridge-switchyard.feature +36 -0
- data/test/cucumber/descriptor.feature +40 -0
- data/test/cucumber/embedded.feature +44 -0
- data/test/cucumber/idler.feature +75 -0
- data/test/cucumber/misc/descriptor/manifest.yml +22 -0
- data/test/cucumber/misc/php/db_test.php +21 -0
- data/test/cucumber/openshift-node.feature +21 -0
- data/test/cucumber/rest-application-templates.feature +31 -0
- data/test/cucumber/rest-applications.feature +431 -0
- data/test/cucumber/rest-cartridge-types.feature +16 -0
- data/test/cucumber/rest-domains.feature +276 -0
- data/test/cucumber/rest-gears.feature +38 -0
- data/test/cucumber/rest-keys.feature +247 -0
- data/test/cucumber/rest-quickstarts.feature +27 -0
- data/test/cucumber/rest-workflow.feature +64 -0
- data/test/cucumber/step_definitions/api_steps.rb +369 -0
- data/test/cucumber/step_definitions/application-estimate-steps.rb +51 -0
- data/test/cucumber/step_definitions/application_steps.rb +215 -0
- data/test/cucumber/step_definitions/cartridge-10gen-mms-agent_steps.rb +11 -0
- data/test/cucumber/step_definitions/cartridge-cron_steps.rb +51 -0
- data/test/cucumber/step_definitions/cartridge-haproxy_steps.rb +30 -0
- data/test/cucumber/step_definitions/cartridge-jenkins_steps.rb +93 -0
- data/test/cucumber/step_definitions/cartridge-lifecycle-nodejs_steps.rb +30 -0
- data/test/cucumber/step_definitions/cartridge-mongodb_steps.rb +60 -0
- data/test/cucumber/step_definitions/cartridge-mysql_steps.rb +56 -0
- data/test/cucumber/step_definitions/cartridge-php_steps.rb +72 -0
- data/test/cucumber/step_definitions/cartridge-postgresql_steps.rb +59 -0
- data/test/cucumber/step_definitions/cartridge-switchyard_steps.rb +29 -0
- data/test/cucumber/step_definitions/client_steps.rb +12 -0
- data/test/cucumber/step_definitions/descriptor_step.rb +32 -0
- data/test/cucumber/step_definitions/idler_steps.rb +37 -0
- data/test/cucumber/step_definitions/node_steps.rb +203 -0
- data/test/cucumber/step_definitions/runtime_steps.rb +547 -0
- data/test/cucumber/step_definitions/runtime_url_steps.rb +46 -0
- data/test/cucumber/step_definitions/trap-user-extended_steps.rb +14 -0
- data/test/cucumber/step_definitions/trap-user_steps.rb +58 -0
- data/test/cucumber/support/00_setup_helper.rb +106 -0
- data/test/cucumber/support/app_helper.rb +243 -0
- data/test/cucumber/support/assertions.rb +52 -0
- data/test/cucumber/support/command_helper.rb +453 -0
- data/test/cucumber/support/dns_helper.rb +54 -0
- data/test/cucumber/support/env.rb +5 -0
- data/test/cucumber/support/process_helper.rb +44 -0
- data/test/cucumber/support/runtime_support.rb +440 -0
- data/test/cucumber/support/unused.rb +27 -0
- data/test/cucumber/support/user_helper.rb +37 -0
- data/test/cucumber/trap-user-extended.feature +53 -0
- data/test/cucumber/trap-user.feature +34 -0
- data/test/ddns/1.168.192-rev.db.init +13 -0
- data/test/ddns/HOWTO.txt +207 -0
- data/test/ddns/Kexample.com.+157+06142.key +1 -0
- data/test/ddns/Kexample.com.+157+06142.private +7 -0
- data/test/ddns/authconfig.rb +14 -0
- data/test/ddns/example.com.db.init +23 -0
- data/test/ddns/example.com.key +4 -0
- data/test/ddns/named.ca +52 -0
- data/test/ddns/named.conf +48 -0
- data/test/ddns/named.empty +10 -0
- data/test/ddns/named.localhost +10 -0
- data/test/ddns/named.loopback +11 -0
- data/test/ddns/named.rfc1912.zones +42 -0
- data/test/ddns/named.root.key +5 -0
- data/test/ddns/named_service.rb +127 -0
- data/test/unit/bind_dns_service_test.rb +167 -0
- data/test/unit/broker_auth_test.rb +28 -0
- 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,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
|