bosh-gen 0.8.2 → 0.9.0

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