bosh-gen 0.8.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/ChangeLog.md +13 -0
  2. data/lib/bosh/gen/cli.rb +45 -29
  3. data/lib/bosh/gen/generators/deployment_manifest_generator.rb +7 -3
  4. data/lib/bosh/gen/generators/extract_job_generator.rb +37 -6
  5. data/lib/bosh/gen/generators/extract_package_generator.rb +23 -5
  6. data/lib/bosh/gen/generators/job_generator.rb +34 -16
  7. data/lib/bosh/gen/generators/job_generator/templates/examples/%job_name%_nginx_rack/nginx_puma_migrate.yml +14 -0
  8. data/lib/bosh/gen/generators/job_generator/templates/examples/%job_name%_nginx_rack/nginx_rackup.yml.tt +8 -0
  9. data/lib/bosh/gen/generators/job_generator/templates/examples/%job_name%_simple/default.yml +2 -0
  10. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/monit.tt +13 -0
  11. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/%job_name%_rack_ctl.tt +59 -0
  12. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_db_utils.sh.erb +54 -0
  13. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_nginx.sh.erb +17 -0
  14. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_redis_utils.sh.erb +18 -0
  15. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_setup.sh.erb +48 -0
  16. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_start.sh.erb +59 -0
  17. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/ctl_utils.sh +148 -0
  18. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/monit_debugger +13 -0
  19. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/nginx_ctl.tt +41 -0
  20. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/bin/rails_ctl_setup.sh.erb +40 -0
  21. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/database.yml.erb +17 -0
  22. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/mime.types +73 -0
  23. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/nginx.conf.erb +150 -0
  24. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/nginx_proxy.conf +11 -0
  25. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_nginx_rack/templates/config/redis.yml.erb +6 -0
  26. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/monit.tt +5 -0
  27. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/bin/%job_name%_ctl.tt +36 -0
  28. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/bin/monit_debugger +13 -0
  29. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/data/properties.sh.erb +10 -0
  30. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/helpers/ctl_setup.sh +81 -0
  31. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_simple/templates/helpers/ctl_utils.sh +156 -0
  32. data/lib/bosh/gen/generators/package_generator.rb +56 -10
  33. data/lib/bosh/gen/models.rb +1 -0
  34. data/lib/bosh/gen/models/bosh_config.rb +15 -0
  35. data/lib/bosh/gen/models/deployment_manifest.rb +5 -0
  36. data/lib/bosh/gen/version.rb +1 -1
  37. data/spec/fixtures/bosh_config/multiple_boshes.yml +34 -0
  38. data/spec/fixtures/deployment_manifests/2_jobs_1_ip_8196_disk.yml +2 -2
  39. data/spec/fixtures/deployment_manifests/2_jobs_2_ips_no_disk.yml +2 -2
  40. data/spec/generators/generator_spec_helper.rb +102 -0
  41. data/spec/generators/jobs/webapp_job_generator_spec.rb +68 -0
  42. data/spec/models/bosh_config_spec.rb +11 -0
  43. metadata +38 -8
  44. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/monit.tt +0 -5
  45. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/templates/%job_name%_ctl.tt +0 -62
  46. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/monit.tt +0 -5
  47. data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/templates/%job_name%_ctl.tt +0 -64
@@ -1,5 +1,18 @@
1
1
  # Change Log
2
2
 
3
+ ## v0.9.0
4
+
5
+ Major news
6
+
7
+ * `job` - more powerful initial scripts; templates nested in folders; scripts are much cleaner to read; scripts in bin/ & helpers/ do not have ERb; only data/properties.sh.erb & config/ are for ERb.
8
+
9
+ Other changes:
10
+
11
+ * `package` - detects .zip files (in addition to .tar.gz) and includes useful default unpacking script in `packaging`; describe available env vars in `packaging` script
12
+ * `manifest` - auto-detects current BOSH UUID
13
+ * `extract-pkg` - now a single argument - the path of the source package folder
14
+ * `extract-job` - now a single argument - the path of the source job folder
15
+
3
16
  ## v0.8.0
4
17
 
5
18
  Changed:
@@ -13,8 +13,10 @@ module Bosh
13
13
  include Thor::Actions
14
14
 
15
15
  desc "new PATH", "Creates a new BOSH release"
16
- method_option :s3, :alias => ["--aws"], :type => :boolean, :desc => "Use AWS S3 bucket for blobstore"
17
- method_option :atmos, :type => :boolean, :desc => "Use EMC ATMOS for blobstore"
16
+ method_option :s3, :alias => ["--aws"], :type => :boolean,
17
+ :desc => "Use AWS S3 bucket for blobstore"
18
+ method_option :atmos, :type => :boolean,
19
+ :desc => "Use EMC ATMOS for blobstore"
18
20
  def new(path)
19
21
  flags = { :aws => options["s3"], :atmos => options["atmos"] }
20
22
 
@@ -23,17 +25,21 @@ module Bosh
23
25
  end
24
26
 
25
27
  desc "package NAME", "Create a new package"
26
- method_option :dependencies, :aliases => ['-d'], :type => :array, :desc => "List of package dependencies"
27
- method_option :files, :aliases => ['-f', '--src'], :type => :array, :desc => "List of files copy into release"
28
+ method_option :dependencies, :aliases => ['-d'], :type => :array,
29
+ :desc => "List of package dependencies"
30
+ method_option :files, :aliases => ['-f', '--src'], :type => :array,
31
+ :desc => "List of files copy into release"
28
32
  def package(name)
29
33
  dependencies = options[:dependencies] || []
30
34
  files = options[:files] || []
31
35
  require 'bosh/gen/generators/package_generator'
32
- Bosh::Gen::Generators::PackageGenerator.start([name, dependencies, files])
36
+ Bosh::Gen::Generators::PackageGenerator.start(
37
+ [name, dependencies, files])
33
38
  end
34
39
 
35
40
  desc "source NAME", "Downloads a source item into the named project"
36
- method_option :blob, :aliases => ['-b'], :type => :boolean, :desc => "Store file in blobstore"
41
+ method_option :blob, :aliases => ['-b'], :type => :boolean,
42
+ :desc => "Store file in blobstore"
37
43
  def source(name, uri)
38
44
  flags = { :blob => options[:blob] || false }
39
45
  dir = Dir.mktmpdir
@@ -49,49 +55,59 @@ module Bosh
49
55
  end
50
56
 
51
57
  require 'bosh/gen/generators/package_source_generator'
52
- Bosh::Gen::Generators::PackageSourceGenerator.start([name, files, flags])
58
+ Bosh::Gen::Generators::PackageSourceGenerator.start(
59
+ [name, files, flags])
53
60
  end
54
61
 
55
- desc "job NAME COMMAND", "Create a new job to run 'COMMAND' to launch the process"
56
- method_option :dependencies, :aliases => ['-d'], :type => :array, :desc => "List of package dependencies"
57
- method_option :ruby, :type => :boolean, :desc => "Use templates for running Ruby/Rack process"
58
- def job(name, command=nil)
59
- command ||= 'EXECUTABLE_SERVER'
60
- flags = { :ruby => options["ruby"] || false }
61
- dependencies = options[:dependencies] || []
62
+ desc "job NAME", "Create a new job"
63
+ method_option :dependencies, :aliases => ['-d'], :type => :array,
64
+ :desc => "List of package dependencies"
65
+ def job(name)
66
+ dependencies = options[:dependencies] || []
62
67
  require 'bosh/gen/generators/job_generator'
63
- Bosh::Gen::Generators::JobGenerator.start([name, command, dependencies, flags])
68
+ Bosh::Gen::Generators::JobGenerator.start([name, dependencies, 'simple'])
64
69
  end
65
70
 
66
- desc "template JOB FILE_PATH", "Add a Job template (example FILE_PATH: config/httpd.conf)"
71
+ desc "template JOB FILE_PATH",
72
+ "Add a Job template (example FILE_PATH: config/httpd.conf)"
67
73
  def template(job_name, file_path)
68
74
  require 'bosh/gen/generators/job_template_generator'
69
75
  Bosh::Gen::Generators::JobTemplateGenerator.start([job_name, file_path])
70
76
  end
71
77
 
72
- desc "extract-job SOURCE_RELEASE_PATH SOURCE_JOB_NAME [JOB_NAME]", "Extracts a job from another release and all its dependent packages and source"
73
- def extract_job(source_release_path, source_job_name, target_job_name=nil)
74
- target_job_name ||= source_job_name
78
+ desc "extract-job SOURCE_PACKAGE_PATH",
79
+ "Extracts a job from another release and all its " +
80
+ "dependent packages and source"
81
+ def extract_job(source_package_path)
82
+ source_package_path = File.expand_path(source_package_path)
75
83
  require 'bosh/gen/generators/extract_job_generator'
76
- Bosh::Gen::Generators::ExtractJobGenerator.start([source_release_path, source_job_name, target_job_name])
84
+ Bosh::Gen::Generators::ExtractJobGenerator.start([source_package_path])
77
85
  end
78
86
 
79
- desc "extract-pkg SOURCE_RELEASE_PATH SOURCE_PACKAGE_NAME", "Extracts a package from another release and all its dependent packages and sources"
80
- def extract_pkg(source_release_path, source_package_name)
87
+ desc "extract-pkg SOURCE_PACKAGE_PATH",
88
+ "Extracts a package from another release and all its " +
89
+ "dependent packages and sources"
90
+ def extract_pkg(source_package_path)
91
+ source_package_path = File.expand_path(source_package_path)
81
92
  require 'bosh/gen/generators/extract_package_generator'
82
- Bosh::Gen::Generators::ExtractPackageGenerator.start([source_release_path, source_package_name])
93
+ Bosh::Gen::Generators::ExtractPackageGenerator.start([source_package_path])
83
94
  end
84
95
 
85
- desc "manifest NAME PATH UUID", "Creates a deployment manifest based on the release located at PATH"
86
- method_option :force, :type => :boolean, :desc => "Force override existing target manifest file"
87
- method_option :addresses, :aliases => ['-a'], :type => :array, :desc => "List of IP addresses available for jobs"
88
- method_option :disk, :aliases => ['-d'], :type => :string, :desc => "Attach persistent disks to VMs of specific size, e.g. 8196"
89
- def manifest(name, release_path, uuid)
96
+ desc "manifest NAME PATH",
97
+ "Creates a deployment manifest based on the release located at PATH"
98
+ method_option :force, :type => :boolean,
99
+ :desc => "Force override existing target manifest file"
100
+ method_option :addresses, :aliases => ['-a'], :type => :array,
101
+ :desc => "List of IP addresses available for jobs"
102
+ method_option :disk, :aliases => ['-d'], :type => :string,
103
+ :desc => "Attach persistent disks to VMs of specific size, e.g. 8196"
104
+ def manifest(name, release_path)
90
105
  release_path = File.expand_path(release_path)
91
106
  ip_addresses = options["addresses"] || []
92
107
  flags = { :force => options["force"] || false, :disk => options[:disk] }
93
108
  require 'bosh/gen/generators/deployment_manifest_generator'
94
- Bosh::Gen::Generators::DeploymentManifestGenerator.start([name, release_path, uuid, ip_addresses, flags])
109
+ Bosh::Gen::Generators::DeploymentManifestGenerator.start(
110
+ [name, release_path, ip_addresses, flags])
95
111
  end
96
112
 
97
113
  no_tasks do
@@ -8,7 +8,6 @@ module Bosh::Gen
8
8
 
9
9
  argument :name
10
10
  argument :release_path
11
- argument :director_uuid
12
11
  argument :ip_addresses
13
12
  argument :flags, :type => :hash
14
13
 
@@ -31,10 +30,15 @@ module Bosh::Gen
31
30
 
32
31
  # Create a deployment manifest (initially for AWS only)
33
32
  def create_deployment_manifest
34
- cloud_properties = { "instance_type" => "m1.small", "availability_zone" => "us-east-1e" }
33
+ cloud_properties = {
34
+ "instance_type" => "m1.small",
35
+ "availability_zone" => "us-east-1e"
36
+ }
35
37
  cloud_properties["persistent_disk"] = flags[:disk] if flags[:disk]
36
38
  cloud_properties["static_ips"] = ip_addresses
37
- manifest = Bosh::Gen::Models::DeploymentManifest.new(name, director_uuid, release_properties, cloud_properties)
39
+ director_uuid = Bosh::Gen::Models::BoshConfig.new.target_uuid
40
+ manifest = Bosh::Gen::Models::DeploymentManifest.new(
41
+ name, director_uuid, release_properties, cloud_properties)
38
42
  manifest.jobs = job_manifests
39
43
  create_file manifest_file_name, manifest.to_yaml, :force => flags[:force]
40
44
  end
@@ -6,22 +6,41 @@ module Bosh::Gen
6
6
  class ExtractJobGenerator < Thor::Group
7
7
  include Thor::Actions
8
8
 
9
- argument :source_release_path
10
- argument :source_job_name
11
- argument :job_name
12
-
9
+ argument :source_job_path
10
+
13
11
  def check_root_is_release
14
12
  unless File.exist?("jobs") && File.exist?("packages")
15
13
  raise Thor::Error.new("run inside a BOSH release project")
16
14
  end
17
15
  end
18
16
 
17
+ def check_job_path_is_valid
18
+ unless File.exist?(source_job_path)
19
+ raise Thor::Error.new("source job path does not exist")
20
+ end
21
+ end
22
+
23
+ def check_job_path_is_a_job
24
+ parent_dir = File.basename(File.dirname(source_job_path))
25
+ unless parent_dir == "jobs"
26
+ raise Thor::Error.new("source jobs path is not a BOSH job")
27
+ end
28
+ end
29
+
30
+ def check_job_path_within_release
31
+ FileUtils.chdir(source_release_path) do
32
+ unless File.exist?("jobs") && File.exist?("packages")
33
+ raise Thor::Error.new("source job path is not within a BOSH release project")
34
+ end
35
+ end
36
+ end
37
+
19
38
  def using_source_release_for_templates
20
39
  source_paths << File.join(source_release_path)
21
40
  end
22
41
 
23
42
  def copy_job_dir
24
- directory "jobs/#{source_job_name}", "jobs/#{job_name}"
43
+ directory "jobs/#{source_job_name}", "jobs/#{target_job_name}"
25
44
  end
26
45
 
27
46
  def detect_dependent_packages
@@ -56,8 +75,20 @@ module Bosh::Gen
56
75
  end
57
76
 
58
77
  private
78
+ def source_release_path
79
+ File.expand_path(File.join(source_job_path, "..", ".."))
80
+ end
81
+
82
+ def source_job_name
83
+ File.basename(source_job_path)
84
+ end
85
+
86
+ def target_job_name
87
+ source_job_name
88
+ end
89
+
59
90
  def job_dir(path="")
60
- File.join("jobs", job_name, path)
91
+ File.join("jobs", target_job_name, path)
61
92
  end
62
93
 
63
94
  def source_file(*path)
@@ -6,8 +6,7 @@ module Bosh::Gen
6
6
  class ExtractPackageGenerator < Thor::Group
7
7
  include Thor::Actions
8
8
 
9
- argument :source_release_path
10
- argument :source_package_name
9
+ argument :source_package_path
11
10
 
12
11
  def check_root_is_release
13
12
  unless File.exist?("jobs") && File.exist?("packages")
@@ -15,6 +14,21 @@ module Bosh::Gen
15
14
  end
16
15
  end
17
16
 
17
+ def check_package_path_within_release
18
+ FileUtils.chdir(source_release_path) do
19
+ unless File.exist?("jobs") && File.exist?("packages")
20
+ raise Thor::Error.new("source package path is not within a BOSH release project")
21
+ end
22
+ end
23
+ end
24
+
25
+ def check_package_path_is_a_package
26
+ parent_dir = File.basename(File.dirname(source_package_path))
27
+ unless parent_dir == "packages"
28
+ raise Thor::Error.new("source package path is not a BOSH package")
29
+ end
30
+ end
31
+
18
32
  def using_source_release_for_templates
19
33
  source_paths << File.join(source_release_path)
20
34
  end
@@ -22,7 +36,7 @@ module Bosh::Gen
22
36
  # Extract target package and all its dependencies
23
37
  def detect_dependent_packages
24
38
  spec = YAML.load_file(source_package_dir("spec"))
25
- @packages = [target_package_name]
39
+ @packages = [source_package_name]
26
40
  @packages << spec["packages"] if spec["packages"]
27
41
  end
28
42
 
@@ -54,8 +68,12 @@ module Bosh::Gen
54
68
  end
55
69
 
56
70
  private
57
- def target_package_name
58
- source_package_name
71
+ def source_release_path
72
+ File.expand_path(File.join(source_package_path, "..", ".."))
73
+ end
74
+
75
+ def source_package_name
76
+ File.basename(source_package_path)
59
77
  end
60
78
 
61
79
  def package_dir(path="")
@@ -7,9 +7,8 @@ module Bosh::Gen
7
7
  include Thor::Actions
8
8
 
9
9
  argument :job_name
10
- argument :command
11
10
  argument :dependencies, :type => :array
12
- argument :flags, :type => :hash
11
+ argument :purpose
13
12
 
14
13
  def self.source_root
15
14
  File.join(File.dirname(__FILE__), "job_generator", "templates")
@@ -22,29 +21,44 @@ module Bosh::Gen
22
21
  end
23
22
 
24
23
  def check_name
25
- raise Thor::Error.new("'#{job_name}' is not a vaild BOSH id") unless job_name.bosh_valid_id?
24
+ raise Thor::Error.new("'#{job_name}' is not a valid BOSH id") unless job_name.bosh_valid_id?
26
25
  end
27
-
26
+
27
+ def check_purpose
28
+ unless valid_purposes.include?(purpose)
29
+ raise Thor::Error.new("'#{purpose}' is not a valid job purpose of #{valid_purposes.inspect}")
30
+ end
31
+ end
32
+
28
33
  def warn_missing_dependencies
29
34
  dependencies.each do |d|
30
- raise Thor::Error.new("dependency '#{d}' is not a vaild BOSH id") unless d.bosh_valid_id?
35
+ raise Thor::Error.new("dependency '#{d}' is not a valid BOSH id") unless d.bosh_valid_id?
31
36
  unless File.exist?(File.join("packages", d))
32
37
  say_status "warning", "missing dependency '#{d}'", :yellow
33
38
  end
34
39
  end
35
40
  end
36
41
 
42
+ # copy the thor template files into the bosh release to be bosh templates
43
+ # that's right, templates (.tt) can become templates (.erb)
37
44
  def template_files
38
- if ruby?
39
- directory "jobs/%job_name%_rubyrack", "jobs/#{job_name}"
40
- else
41
- directory "jobs/%job_name%"
45
+ generator_job_templates_path = File.join(self.class.source_root, "jobs/%job_name%_#{purpose}")
46
+ directory "jobs/%job_name%_#{purpose}", "jobs/#{job_name}"
47
+
48
+ # build a hash of { 'bin/webapp_ctl.erb' => 'bin/webapp_ctl', ...} used in spec
49
+ # TODO: do I need to flatten it to { 'webapp_ctl' => 'bin/webapp_ctl' }?
50
+ @template_files = {}
51
+ FileUtils.chdir(File.join(generator_job_templates_path, "templates")) do
52
+ `ls */*`.split("\n").each do |template_file|
53
+ # clean up thor name convention
54
+ template_file.gsub!("%job_name%", job_name)
55
+ template_file.gsub!(".tt", "")
56
+ # strip erb from target file
57
+ target_template_file = template_file.gsub(/.erb/, '')
58
+
59
+ @template_files[template_file] = target_template_file
60
+ end
42
61
  end
43
- @template_files = { "#{job_name}_ctl" => "bin/#{job_name}_ctl" }
44
- end
45
-
46
- def ctl_executable
47
- chmod "jobs/#{job_name}/templates/#{job_name}_ctl", 0755
48
62
  end
49
63
 
50
64
  def job_specification
@@ -52,6 +66,10 @@ module Bosh::Gen
52
66
  create_file job_dir("spec"), YAML.dump(config)
53
67
  end
54
68
 
69
+ def example
70
+ directory "examples/%job_name%_#{purpose}"
71
+ end
72
+
55
73
  private
56
74
  def filenames
57
75
  files.map {|f| File.basename(f) }
@@ -61,8 +79,8 @@ module Bosh::Gen
61
79
  File.join("jobs", job_name, path)
62
80
  end
63
81
 
64
- def ruby?
65
- flags[:ruby]
82
+ def valid_purposes
83
+ %w[simple]
66
84
  end
67
85
 
68
86
  # Run a command in git.
@@ -0,0 +1,14 @@
1
+ ---
2
+ jobs:
3
+ - <%= job_name %>
4
+ properties:
5
+ webapp:
6
+ package: rackapp
7
+ use_nginx: 1
8
+ appstack: puma
9
+ puma:
10
+ threads:
11
+ min: 0
12
+ max: 20
13
+ migrate: 1
14
+ migration_command: rake db:migrate
@@ -0,0 +1,8 @@
1
+ ---
2
+ jobs:
3
+ - <%= job_name %>
4
+ properties:
5
+ webapp:
6
+ package: rackapp
7
+ appstack: rackup
8
+ use_nginx: 1
@@ -0,0 +1,13 @@
1
+ check process <%= job_name %>
2
+ with pidfile /var/vcap/sys/run/<%= job_name %>/<%= job_name %>.pid
3
+ start program "/var/vcap/jobs/<%= job_name %>/bin/monit_debugger <%= job_name %>_ctl '/var/vcap/jobs/<%= job_name %>/bin/<%= job_name %>_rack_ctl start'"
4
+ stop program "/var/vcap/jobs/<%= job_name %>/bin/monit_debugger <%= job_name %>_ctl '/var/vcap/jobs/<%= job_name %>/bin/<%= job_name %>_rack_ctl stop'"
5
+ group vcap
6
+
7
+ <%% if properties.<%= job_name %> && properties.<%= job_name %>.use_nginx %>
8
+ check process nginx
9
+ with pidfile /var/vcap/sys/run/<%= job_name %>/nginx.pid
10
+ start program "/var/vcap/jobs/<%= job_name %>/bin/monit_debugger nginx_ctl '/var/vcap/jobs/<%= job_name %>/bin/nginx_ctl start'"
11
+ stop program "/var/vcap/jobs/<%= job_name %>/bin/monit_debugger nginx_ctl '/var/vcap/jobs/<%= job_name %>/bin/nginx_ctl stop'"
12
+ group vcap
13
+ <%% end %>
@@ -0,0 +1,59 @@
1
+ #!/bin/bash
2
+
3
+ set -e # exit immediately if a simple command exits with a non-zero status
4
+ set -u # report the usage of uninitialized variables
5
+
6
+ # Setup env vars and folders for the webapp_ctl script
7
+ source /var/vcap/jobs/<%= job_name %>/bin/ctl_setup.sh
8
+
9
+ export PORT=${PORT:-5000}
10
+ export LANG=en_US.UTF-8
11
+
12
+ # Setup HTTP_PROXY, HTTPS_PROXY, NO_PROXY as necessary
13
+ source $JOB_DIR/bin/ctl_nginx.sh
14
+
15
+ # Setup for Rails application
16
+ source $JOB_DIR/bin/rails_ctl_setup.sh
17
+
18
+ # Helpers for PostgresDB
19
+ source $JOB_DIR/bin/ctl_db_utils.sh
20
+
21
+ # Helpers for Redis
22
+ source $JOB_DIR/bin/ctl_redis_utils.sh
23
+
24
+ case $1 in
25
+
26
+ start)
27
+ pid_guard $PIDFILE $JOB_NAME
28
+
29
+ cd $WEBAPP_DIR
30
+
31
+ # link database.yml config to application
32
+ link_sql_db_config
33
+
34
+ # if redis enabled, link it to application
35
+ link_redis_config yaml config/redis.yml
36
+
37
+ # Migrations, if requested
38
+ run_migrations $WEBAPP_DIR
39
+
40
+ # TODO what is 'ulimit -c unlimited' for; when not to use it?
41
+ ulimit -c unlimited
42
+
43
+ # Start the rack app using requested appstack
44
+ source $JOB_DIR/bin/ctl_start.sh
45
+
46
+ echo "Running $JOB_NAME on $PORT"
47
+ ;;
48
+
49
+ stop)
50
+ kill_and_wait $PIDFILE
51
+
52
+ ;;
53
+ *)
54
+ echo "Usage: <%= job_name %>_rack_ctl {start|stop}"
55
+
56
+ ;;
57
+
58
+ esac
59
+ exit 0