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,46 @@
1
+ Then /^the web console for the metrics\-([\d\.]+) cartridge is( not)? accessible$/ do |version, negate|
2
+ steps %Q{
3
+ Then the web console for the metrics-#{version} cartridge at /read.php is#{negate} accessible
4
+ }
5
+ end
6
+
7
+ Then /^the web console for the rockmongo\-([\d\.]+) cartridge is( not)? accessible$/ do |version, negate|
8
+ steps %Q{
9
+ Then the web console for the rockmongo-#{version} cartridge at /js/collection.js is#{negate} accessible
10
+ }
11
+ end
12
+
13
+ Then /^the web console for the phpmyadmin\-([\d\.]+) cartridge is( not)? accessible$/ do |version, negate|
14
+ steps %Q{
15
+ Then the web console for the phpmyadmin-#{version} cartridge at /js/sql.js is#{negate} accessible
16
+ }
17
+ end
18
+
19
+ When /^I run the health\-check for the ([^ ]+) cartridge$/ do | type |
20
+ host = "#{@app.name}-#{@account.domain}.dev.rhcloud.com"
21
+
22
+ url = case type
23
+ when 'perl-5.10'
24
+ "health_check.pl"
25
+ when 'php-5.3'
26
+ "health_check.php"
27
+ else
28
+ "health"
29
+ end
30
+
31
+ # Use curl to hit the app, causing restorer to turn it back on.
32
+ command = "/usr/bin/curl -k -H 'Host: #{host}' -s http://localhost/#{url}"
33
+ output = run_stdout command
34
+ output.chomp!
35
+
36
+ OpenShift::timeout(60) do
37
+ while output != '1'
38
+ output = run_stdout command
39
+ output.chomp!
40
+ $logger.info("Idler waiting for httpd graceful to finish. #{host}")
41
+ sleep 1
42
+ end
43
+ end
44
+
45
+ output.should == '1'
46
+ end
@@ -0,0 +1,14 @@
1
+ When /^I (start|stop) the application using ctl_all via rhcsh$/ do |action|
2
+ cmd = case action
3
+ when 'start'
4
+ ssh_command("rhcsh ctl_all start")
5
+ when 'stop'
6
+ ssh_command("rhcsh ctl_all stop")
7
+ end
8
+
9
+ $logger.debug "Running #{cmd}"
10
+
11
+ output = `#{cmd}`
12
+
13
+ $logger.debug "Output: #{output}"
14
+ end
@@ -0,0 +1,58 @@
1
+ require 'pty'
2
+ require 'digest/md5'
3
+
4
+ def ssh_command(command)
5
+ "ssh 2>&1 -o BatchMode=yes -o StrictHostKeyChecking=no -t #{@gear.uuid}@#{@app.name}-#{@account.domain}.dev.rhcloud.com " + command
6
+ end
7
+
8
+ Then /^I can run "([^\"]*)" with exit code: (\d+)$/ do |cmd, code|
9
+ command = ssh_command("rhcsh #{cmd}")
10
+
11
+ $logger.debug "Running #{command}"
12
+
13
+ output = `#{command}`
14
+
15
+ $logger.debug "Output: #{output}"
16
+
17
+ assert_equal code.to_i, $?.exitstatus
18
+ end
19
+
20
+ When /^I tail the logs via ssh$/ do
21
+ ssh_cmd = ssh_command("tail -f */logs/\\*")
22
+ stdout, stdin, pid = PTY.spawn ssh_cmd
23
+
24
+ @ssh_cmd = {
25
+ :pid => pid,
26
+ :stdin => stdin,
27
+ :stdout => stdout,
28
+ }
29
+ end
30
+
31
+ When /^I stop tailing the logs$/ do
32
+ begin
33
+ Process.kill('KILL', @ssh_cmd[:pid])
34
+ exit_code = -1
35
+
36
+ # Don't let a command run more than 1 minute
37
+ Timeout::timeout(60) do
38
+ ignored, status = Process::waitpid2 @ssh_cmd[:pid]
39
+ exit_code = status.exitstatus
40
+ end
41
+ rescue PTY::ChildExited
42
+ # Completed as expected
43
+ end
44
+ end
45
+
46
+ Then /^I can obtain disk quota information via SSH$/ do
47
+ cmd = ssh_command('/usr/bin/quota')
48
+
49
+ $logger.debug "Running: #{cmd}"
50
+
51
+ out = `#{cmd}`
52
+
53
+ $logger.debug "Output: #{out}"
54
+
55
+ if out.index("Disk quotas for user ").nil?
56
+ raise "Could not obtain disk quota information"
57
+ end
58
+ end
@@ -0,0 +1,106 @@
1
+ require 'fileutils'
2
+ require 'logger'
3
+ require 'etc'
4
+
5
+ #
6
+ # Define global variables
7
+ #
8
+ $temp = "/tmp/rhc"
9
+
10
+ $client_config = "/etc/openshift/express.conf"
11
+
12
+
13
+ # Use the domain from the rails application configuration
14
+ $domain = "example.com"
15
+
16
+ # Set the dns helper module
17
+ $dns_helper_module = File.dirname(__FILE__) + "/dns_helper.rb"
18
+ $bind_keyvalue=""
19
+
20
+ # oddjob service name and selinux context (specify nil if no alternate context is being used)
21
+ $gear_update_plugin_service = "oddjobd"
22
+ $selinux_user = "unconfined_u"
23
+ $selinux_role = "system_r"
24
+ $selinux_type = "openshift_initrc_t"
25
+
26
+ # User registration flag and script
27
+ $registration_required = true
28
+ if File.exists?("/etc/openshift/plugins.d/openshift-origin-auth-mongo.conf")
29
+ $user_register_script_format = "/usr/bin/oo-register-user -l admin -p admin --username %s --userpass %s"
30
+ elsif File.exists?("/etc/openshift/plugins.d/openshift-origin-auth-remote-user.conf")
31
+ $user_register_script_format = "/usr/bin/htpasswd -b /etc/openshift/htpasswd %s %s"
32
+ end
33
+
34
+ # Alternatie domain suffix for use in alias commands
35
+ $alias_domain = "foobar.com"
36
+
37
+ # Submodule repo directory for testing submodule addition test case
38
+ $submodule_repo_dir = "#{Etc.getpwuid.dir}/submodule_test_repo"
39
+
40
+ #
41
+ # Old RHC Client scripts
42
+ #
43
+ $create_app_script = "/usr/bin/rhc-create-app"
44
+ $create_domain_script = "/usr/bin/rhc-create-domain"
45
+ $ctl_app_script = "/usr/bin/rhc-ctl-app"
46
+ $user_info_script = "/usr/bin/rhc-domain-info"
47
+ $snapshot_script = "/usr/bin/rhc-snapshot"
48
+
49
+ #
50
+ # New RHC Client scripts
51
+ #
52
+ $rhc_script = '/usr/bin/rhc'
53
+
54
+ # RSA Key constants
55
+ $test_pub_key = File.expand_path("~/.ssh/id_rsa.pub")
56
+ $test_priv_key = File.expand_path("~/.ssh/id_rsa")
57
+
58
+ module SetupHelper
59
+ def self.setup
60
+ # Create the temporary space
61
+ FileUtils.mkdir_p $temp
62
+
63
+ # Remove all temporary data
64
+ #FileUtils.rm_rf Dir.glob(File.join($temp, "*"))
65
+
66
+ # Setup the logger
67
+ $logger = Logger.new(File.join($temp, "cucumber.log"))
68
+ $logger.level = Logger::DEBUG
69
+ $logger.formatter = proc do |severity, datetime, progname, msg|
70
+ "#{$$} #{severity} #{datetime}: #{msg}\n"
71
+ end
72
+
73
+ # Setup performance monitor logger
74
+ $perfmon_logger = Logger.new(File.join($temp, "perfmon.log"))
75
+ $perfmon_logger.level = Logger::INFO
76
+ $perfmon_logger.formatter = proc do |severity, datetime, progname, msg|
77
+ "#{$$} #{datetime}: #{msg}\n"
78
+ end
79
+
80
+ # If the default ssh key is not present, create one
81
+ `ssh-keygen -q -f #{$test_priv_key} -P ''` if !File.exists?($test_priv_key)
82
+ FileUtils.chmod 0600, $test_priv_key
83
+
84
+ # create a submodule repo for the tests
85
+ if !File.exists?($submodule_repo_dir)
86
+ `git init #{$submodule_repo_dir}`
87
+ Dir.chdir($submodule_repo_dir) do
88
+ `echo Submodule > index`
89
+ `git add index`
90
+ `git commit -m 'test'`
91
+ end
92
+ end
93
+
94
+ # set the bind keyvalue from the installed plugin config
95
+ if File.exists?("/etc/openshift/plugins.d/openshift-origin-dns-bind.conf")
96
+ $bind_keyvalue = `cat /var/named/example.com.key | grep -i secret | gawk -F ' ' '{ print $2 }'`
97
+ end
98
+
99
+ # Create the ~/.ssh directory and ~/.ssh/config file and set the correct permissions
100
+ `mkdir -m 700 -p ~/.ssh`
101
+ `touch ~/.ssh/config`
102
+ `chmod 600 ~/.ssh/config`
103
+
104
+ end
105
+ end
106
+ World(SetupHelper)
@@ -0,0 +1,243 @@
1
+ require 'active_support'
2
+ require $dns_helper_module
3
+
4
+ module AppHelper
5
+ class TestApp
6
+ include ActiveSupport::JSON
7
+ include DnsHelper
8
+
9
+ # The regex to parse the ssh output from the create app results
10
+ SSH_OUTPUT_PATTERN = %r|ssh://([^@]+)@([^/]+)|
11
+
12
+ # Default password
13
+ DEFPASSWD = "xyz123"
14
+
15
+ # attributes to represent the general information of the application
16
+ attr_accessor :name, :namespace, :login, :password, :type, :hostname, :repo, :file, :embed, :snapshot, :uid, :git_url, :owner
17
+
18
+ # attributes to represent the state of the rhc_create_* commands
19
+ attr_accessor :create_domain_code, :create_app_code
20
+
21
+ # attributes that contain statistics based on calls to connect
22
+ attr_accessor :response_code, :response_time
23
+
24
+ # mysql connection information
25
+ attr_accessor :mysql_hostname, :mysql_user, :mysql_password, :mysql_database
26
+
27
+ # jenkins connection information
28
+ attr_accessor :jenkins_url, :jenkins_job_url, :jenkins_user, :jenkins_password, :jenkins_build
29
+
30
+ # Create the data structure for a test application
31
+ def initialize(namespace, login, type, name, password, owner)
32
+ @name, @namespace, @login, @type, @password, @owner = name, namespace, login, type, password, owner
33
+ @hostname = "#{name}-#{namespace}.#{$domain}"
34
+ @repo = "#{$temp}/#{namespace}_#{name}_repo"
35
+ @file = "#{$temp}/#{namespace}.json"
36
+ @embed = []
37
+ end
38
+
39
+ def self.create_unique(type, name="test")
40
+ loop do
41
+ # Generate a random username
42
+ chars = ("1".."9").to_a
43
+ namespace = "ci" + Array.new(8, '').collect{chars[rand(chars.size)]}.join
44
+ login = "cucumber-test_#{namespace}@example.com"
45
+ app = TestApp.new(namespace, login, type, name, DEFPASSWD, Process.pid)
46
+ unless app.reserved?
47
+ app.persist
48
+ return app
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.find_on_fs
54
+ Dir.glob("#{$temp}/*.json").collect {|f| TestApp.from_file(f)}.select { |app| ( ( app.owner == Process.pid ) or app.owner.nil? ) }
55
+ end
56
+
57
+ def self.from_file(filename)
58
+ TestApp.from_json(ActiveSupport::JSON.decode(File.open(filename, "r") {|f| f.readlines}[0]))
59
+ end
60
+
61
+ def self.from_json(json)
62
+ app = TestApp.new(json['namespace'], json['login'], json['type'], json['name'], json['password'], json['owner'])
63
+ app.embed = json['embed']
64
+ app.mysql_user = json['mysql_user']
65
+ app.mysql_password = json['mysql_password']
66
+ app.mysql_hostname = json['mysql_hostname']
67
+ app.uid = json['uid']
68
+ return app
69
+ end
70
+
71
+ def update_jenkins_info
72
+ @jenkins_user = `source /var/lib/openshift/#{@uid}/.env/JENKINS_USERNAME;echo $JENKINS_USERNAME`.chomp!
73
+ @jenkins_password = `source /var/lib/openshift/#{@uid}/.env/JENKINS_PASSWORD;echo $JENKINS_PASSWORD`.chomp!
74
+ @jenkins_url = `source /var/lib/openshift/#{@uid}/.env/JENKINS_URL;echo $JENKINS_URL`.chomp!
75
+
76
+ @jenkins_job_url = "#{@jenkins_url}job/#{@name}-build/"
77
+ @jenkins_build = "curl -ksS -X GET #{@jenkins_job_url}api/json --user '#{@jenkins_user}:#{@jenkins_password}'"
78
+
79
+ $logger.debug %Q{
80
+ jenkins_url = #{@jenkins_url}
81
+ jenkins_user = #{@jenkins_user}
82
+ jenkins_password = #{@jenkins_password}
83
+ jenkins_build = #{@jenkins_build}
84
+ }
85
+ end
86
+
87
+ def update_uid(std_output)
88
+ begin
89
+ match = std_output.lines.map {|line| line.match(SSH_OUTPUT_PATTERN)}.compact[0]
90
+ @uid = match[1]
91
+ rescue => e
92
+ $logger.error "update_uid failed: #{e.message}\n#{std_output}"
93
+ end
94
+ end
95
+
96
+ def update_git_url(std_output)
97
+ match = std_output.map {|line| line.match(%r|git url: (.*)|)}
98
+ @git_url = match.compact.first[1] if not match.nil?
99
+ end
100
+
101
+ def get_log(prefix)
102
+ "#{$temp}/#{prefix}_#{@name}-#{@namespace}.log"
103
+ end
104
+
105
+ def persist
106
+ # Because the system I/O is high during testing, this doesn't always
107
+ # succeed right away.
108
+ 5.times do
109
+ begin
110
+ File.open(@file, "w") {|f| f.puts self.to_json}
111
+ break
112
+ rescue Errno::ENOENT
113
+ $logger.debug("Retrying file write for #{@file}")
114
+ end
115
+ end
116
+ end
117
+
118
+ def reserved?
119
+ return (!namespace_available?(@namespace) or File.exists?(@file))
120
+ end
121
+
122
+ def has_domain?
123
+ return create_domain_code == 0
124
+ end
125
+
126
+ def get_index_file
127
+ case @type
128
+ when "php-5.3" then "php/index.php"
129
+ when "ruby-1.8" then "config.ru"
130
+ when "ruby-1.9" then "config.ru"
131
+ when "python-2.6" then "wsgi/application"
132
+ when "perl-5.10" then "perl/index.pl"
133
+ when "jbossas-7" then "src/main/webapp/index.html"
134
+ when "jbosseap-6.0" then "src/main/webapp/index.html"
135
+ when "jbossews-1.0" then "src/main/webapp/index.html"
136
+ when "nodejs-0.6" then "index.html"
137
+ end
138
+ end
139
+
140
+ def get_mysql_file
141
+ case @type
142
+ when "php-5.3" then File.expand_path("../misc/php/db_test.php", File.expand_path(File.dirname(__FILE__)))
143
+ end
144
+ end
145
+
146
+ def get_stop_string
147
+ "stopped"
148
+ end
149
+
150
+ def curl(url, timeout=30)
151
+ body = `curl --insecure -s --max-time #{timeout} #{url}`
152
+ exit_code = $?.exitstatus
153
+
154
+ return exit_code, body
155
+ end
156
+
157
+ def curl_head_success?(url, host=nil, http_code=200)
158
+ response_code = curl_head(url, host)
159
+ is_http = url.start_with?('http://')
160
+ if (is_http && response_code.to_i == 301)
161
+ url = "https://#{url[7..-1]}"
162
+ response_code = curl_head(url, host)
163
+ end
164
+ return response_code.to_i == http_code
165
+ end
166
+
167
+ def curl_head(url, host=nil)
168
+ auth = "--user #{@jenkins_user}:#{@jenkins_password}" if @jenkins_user
169
+ host = "-H 'Host: #{host}'" if host
170
+ `curl -w %{http_code} --output /dev/null --insecure -s --head --max-time 30 #{auth} #{host} #{url}`
171
+ end
172
+
173
+ def is_inaccessible?(max_retries=60)
174
+ max_retries.times do |i|
175
+ if !curl_head_success?("http://#{hostname}")
176
+ return true
177
+ else
178
+ $logger.info("Connection still accessible / retry #{i} of #{max_tries} / #{hostname}")
179
+ sleep 1
180
+ end
181
+ end
182
+ return false
183
+ end
184
+
185
+ # Host is for the host header
186
+ def is_accessible?(use_https=false, max_retries=120, host=nil)
187
+ prefix = use_https ? "https://" : "http://"
188
+ url = prefix + hostname
189
+
190
+ max_retries.times do |i|
191
+ if curl_head_success?(url, host)
192
+ return true
193
+ else
194
+ $logger.info("Connection still inaccessible / retry #{i} / #{url}")
195
+ sleep 1
196
+ end
197
+ end
198
+
199
+ return false
200
+ end
201
+
202
+ def is_temporarily_unavailable?(use_https=false, host=nil)
203
+ prefix = use_https ? "https://" : "http://"
204
+ url = prefix + hostname
205
+
206
+ if curl_head_success?(url, host, 503)
207
+ return true
208
+ else
209
+ return false
210
+ end
211
+ end
212
+
213
+ def last_access_file_present?
214
+ File.exists? "/var/lib/openshift/.last_access/#{uid}"
215
+ end
216
+
217
+ def connect(use_https=false, max_retries=30)
218
+ prefix = use_https ? "https://" : "http://"
219
+ url = prefix + hostname
220
+
221
+ $logger.info("Connecting to #{url}")
222
+ beginning_time = Time.now
223
+
224
+ max_retries.times do |i|
225
+ code, body = curl(url, 1)
226
+
227
+ if code == 0
228
+ @response_code = code.to_i
229
+ @response_time = Time.now - beginning_time
230
+ $logger.info("Connection result = #{code} / #{url}")
231
+ $logger.info("Connection response time = #{@response_time} / #{url}")
232
+ return body
233
+ else
234
+ $logger.info("Connection failed / retry #{i} of #{max_retries} / #{url}")
235
+ sleep 1
236
+ end
237
+ end
238
+
239
+ return nil
240
+ end
241
+ end
242
+ end
243
+ World(AppHelper)