bosh-gen 0.3.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/ChangeLog.md +8 -0
- data/lib/bosh/gen/cli.rb +5 -2
- data/lib/bosh/gen/generators/deployment_manifest_generator.rb +1 -0
- data/lib/bosh/gen/generators/job_generator.rb +10 -1
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/templates/%job_name%_ctl.tt +31 -4
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/TODO.md.tt +0 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/monit.tt +5 -0
- data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/templates/%job_name%_ctl.tt +64 -0
- data/lib/bosh/gen/generators/new_release_generator.rb +4 -0
- data/lib/bosh/gen/generators/new_release_generator/templates/Rakefile +15 -0
- data/lib/bosh/gen/models/deployment_manifest.rb +3 -0
- data/lib/bosh/gen/version.rb +1 -1
- metadata +8 -4
data/.gitignore
CHANGED
data/ChangeLog.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## v0.4
|
4
|
+
|
5
|
+
* `job` - added --ruby flag to include a ruby/rack-specifc ctl script
|
6
|
+
* releases include a rake task to document what properties are required
|
7
|
+
* `manifest` - has a --disk/-d flag to assign a persistent disk to all VMs (common pool)
|
8
|
+
* `job` - export some variables in ctl scripts so they are available to application
|
9
|
+
* `job` - ctl script has logs/tail/clearlogs commands
|
10
|
+
|
3
11
|
## v0.3
|
4
12
|
|
5
13
|
Added:
|
data/lib/bosh/gen/cli.rb
CHANGED
@@ -48,10 +48,12 @@ module Bosh
|
|
48
48
|
|
49
49
|
desc "job NAME", "Create a new job"
|
50
50
|
method_option :dependencies, :aliases => ['-d'], :type => :array, :desc => "List of package dependencies"
|
51
|
+
method_option :ruby, :type => :boolean, :desc => "Use templates for running Ruby/Rack process"
|
51
52
|
def job(name)
|
53
|
+
flags = { :ruby => options["ruby"] || false }
|
52
54
|
dependencies = options[:dependencies] || []
|
53
55
|
require 'bosh/gen/generators/job_generator'
|
54
|
-
Bosh::Gen::Generators::JobGenerator.start([name, dependencies])
|
56
|
+
Bosh::Gen::Generators::JobGenerator.start([name, dependencies, flags])
|
55
57
|
end
|
56
58
|
|
57
59
|
desc "template JOB FILE_PATH", "Add a Job template (example FILE_PATH: config/httpd.conf)"
|
@@ -63,10 +65,11 @@ module Bosh
|
|
63
65
|
desc "manifest NAME PATH UUID", "Creates a deployment manifest based on the release located at PATH"
|
64
66
|
method_option :force, :type => :boolean, :desc => "Force override existing target manifest file"
|
65
67
|
method_option :addresses, :aliases => ['-a'], :type => :array, :desc => "List of IP addresses available for jobs"
|
68
|
+
method_option :disk, :aliases => ['-d'], :type => :string, :desc => "Attach persistent disks to VMs of specific size, e.g. 8196"
|
66
69
|
def manifest(name, release_path, uuid)
|
67
70
|
release_path = File.expand_path(release_path)
|
68
71
|
ip_addresses = options["addresses"] || []
|
69
|
-
flags = { :force => options["force"] || false }
|
72
|
+
flags = { :force => options["force"] || false, :disk => options[:disk] }
|
70
73
|
require 'bosh/gen/generators/deployment_manifest_generator'
|
71
74
|
Bosh::Gen::Generators::DeploymentManifestGenerator.start([name, release_path, uuid, ip_addresses, flags])
|
72
75
|
end
|
@@ -26,6 +26,7 @@ module Bosh::Gen
|
|
26
26
|
# Create a deployment manifest (initially for AWS only)
|
27
27
|
def create_deployment_manifest
|
28
28
|
cloud_properties = { "instance_type" => "m1.small", "availability_zone" => "us-east-1e" }
|
29
|
+
cloud_properties[:persistent_disk] = flags[:disk] if flags[:disk]
|
29
30
|
manifest = Bosh::Gen::Models::DeploymentManifest.new(name, director_uuid, release_properties, cloud_properties)
|
30
31
|
manifest.jobs = job_manifests(ip_addresses)
|
31
32
|
create_file manifest_file_name, manifest.to_yaml, :force => flags[:force]
|
@@ -8,6 +8,7 @@ module Bosh::Gen
|
|
8
8
|
|
9
9
|
argument :job_name
|
10
10
|
argument :dependencies, :type => :array
|
11
|
+
argument :flags, :type => :hash
|
11
12
|
|
12
13
|
def self.source_root
|
13
14
|
File.join(File.dirname(__FILE__), "job_generator", "templates")
|
@@ -33,7 +34,11 @@ module Bosh::Gen
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def template_files
|
36
|
-
|
37
|
+
if ruby?
|
38
|
+
directory "jobs/%job_name%_rubyrack", "jobs/#{job_name}"
|
39
|
+
else
|
40
|
+
directory "jobs/%job_name%"
|
41
|
+
end
|
37
42
|
@template_files = { "#{job_name}_ctl" => "bin/#{job_name}_ctl" }
|
38
43
|
end
|
39
44
|
|
@@ -59,6 +64,10 @@ module Bosh::Gen
|
|
59
64
|
File.join("jobs", job_name, path)
|
60
65
|
end
|
61
66
|
|
67
|
+
def ruby?
|
68
|
+
flags[:ruby]
|
69
|
+
end
|
70
|
+
|
62
71
|
# Run a command in git.
|
63
72
|
#
|
64
73
|
# ==== Examples
|
data/lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/templates/%job_name%_ctl.tt
CHANGED
@@ -1,15 +1,30 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
-
# Control script to start/stop <%= job_name %> job on a BOSH controlled VM
|
3
|
+
# Control script to start/stop ruby/rack <%= job_name %> job on a BOSH controlled VM
|
4
4
|
#
|
5
|
+
# In local development, this script can be run manually. Examples below assume you are in the root of this release project.
|
6
|
+
#
|
7
|
+
# Start process example:
|
8
|
+
# APP_DIR=/path/to/<%= job_name %> RACK_ENV=development COMMAND=shotgun PORT=9393 jobs/<%= job_name %>/templates/<%= job_name %>_ctl start
|
9
|
+
#
|
10
|
+
# View STDOUT/STDERR logs:
|
11
|
+
# jobs/<%= job_name %>/templates/<%= job_name %>_ctl logs
|
12
|
+
#
|
13
|
+
# Clear logs:
|
14
|
+
# jobs/<%= job_name %>/templates/<%= job_name %>_ctl clearlogs
|
15
|
+
|
5
16
|
# TODO - change "EXECUTABLE_SERVER" to the command to run
|
6
|
-
# TODO - ensure executable stores PID in $PIDFILE
|
7
17
|
|
8
18
|
RUN_DIR=/var/vcap/sys/run/<%= job_name %>
|
9
19
|
LOG_DIR=/var/vcap/sys/log/<%= job_name %>
|
10
20
|
STORE=/var/vcap/store/<%= job_name %>
|
11
21
|
PIDFILE=$RUN_DIR/<%= job_name %>.pid
|
12
22
|
|
23
|
+
export PATH=/var/vcap/packages/ruby/bin:$PATH
|
24
|
+
|
25
|
+
COMMAND=${COMMAND:-/var/vcap/packages/<%= job_name %>/bin/EXECUTABLE_SERVER}
|
26
|
+
HOME=${HOME:-/home/vcap}
|
27
|
+
|
13
28
|
case $1 in
|
14
29
|
|
15
30
|
start)
|
@@ -19,7 +34,7 @@ case $1 in
|
|
19
34
|
|
20
35
|
echo $$ > $PIDFILE
|
21
36
|
|
22
|
-
exec
|
37
|
+
exec $COMMAND >>$LOG_DIR/<%= job_name %>.stdout.log 2>>$LOG_DIR/<%= job_name %>.stderr.log
|
23
38
|
;;
|
24
39
|
|
25
40
|
stop)
|
@@ -29,7 +44,19 @@ case $1 in
|
|
29
44
|
rm -f $PIDFILE
|
30
45
|
;;
|
31
46
|
|
47
|
+
logs)
|
48
|
+
cat $LOG_DIR/*
|
49
|
+
;;
|
50
|
+
|
51
|
+
tail)
|
52
|
+
tail -f $LOG_DIR/*
|
53
|
+
;;
|
54
|
+
|
55
|
+
clearlogs)
|
56
|
+
rm $LOG_DIR/*
|
57
|
+
;;
|
58
|
+
|
32
59
|
*)
|
33
|
-
echo "Usage: <%= job_name %>_ctl {start|stop}" ;;
|
60
|
+
echo "Usage: <%= job_name %>_ctl {start|stop|logs|tail|clearlogs}" ;;
|
34
61
|
esac
|
35
62
|
exit 0
|
File without changes
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# Control script to start/stop ruby/rack <%= job_name %> job on a BOSH controlled VM
|
4
|
+
#
|
5
|
+
# In local development, this script can be run manually. Examples below assume you are in the root of this release project.
|
6
|
+
#
|
7
|
+
# Start process example:
|
8
|
+
# APP_DIR=/path/to/<%= job_name %> RACK_ENV=development COMMAND=shotgun PORT=9393 jobs/<%= job_name %>/templates/<%= job_name %>_ctl start
|
9
|
+
#
|
10
|
+
# View STDOUT/STDERR logs:
|
11
|
+
# jobs/<%= job_name %>/templates/<%= job_name %>_ctl logs
|
12
|
+
#
|
13
|
+
# Clear logs:
|
14
|
+
# jobs/<%= job_name %>/templates/<%= job_name %>_ctl clearlogs
|
15
|
+
|
16
|
+
RUN_DIR=/var/vcap/sys/run/<%= job_name %>
|
17
|
+
LOG_DIR=/var/vcap/sys/log/<%= job_name %>
|
18
|
+
STORE=/var/vcap/store/<%= job_name %>
|
19
|
+
PIDFILE=$RUN_DIR/<%= job_name %>.pid
|
20
|
+
|
21
|
+
export PATH=/var/vcap/packages/ruby/bin:$PATH
|
22
|
+
|
23
|
+
COMMAND=${COMMAND:-/var/vcap/packages/ruby/bin/bundle exec rackup}
|
24
|
+
APP_DIR=${APP_DIR:-/var/vcap/packages/<%= job_name %>/}
|
25
|
+
PORT=${PORT:-5000}
|
26
|
+
RACK_ENV=${RACK_ENV:-production}
|
27
|
+
HOME=${HOME:-/home/vcap}
|
28
|
+
|
29
|
+
case $1 in
|
30
|
+
|
31
|
+
start)
|
32
|
+
mkdir -p $RUN_DIR
|
33
|
+
mkdir -p $LOG_DIR
|
34
|
+
mkdir -p $STORE
|
35
|
+
|
36
|
+
echo $$ > $PIDFILE
|
37
|
+
|
38
|
+
cd $APP_DIR
|
39
|
+
exec ${COMMAND} -p $PORT -E $RACK_ENV >>$LOG_DIR/<%= job_name %>.stdout.log 2>>$LOG_DIR/<%= job_name %>.stderr.log
|
40
|
+
;;
|
41
|
+
|
42
|
+
stop)
|
43
|
+
PID=$(head -1 $PIDFILE)
|
44
|
+
kill $PID
|
45
|
+
while [ -e /proc/$PID ]; do sleep 0.1; done
|
46
|
+
rm -f $PIDFILE
|
47
|
+
;;
|
48
|
+
|
49
|
+
logs)
|
50
|
+
cat $LOG_DIR/*
|
51
|
+
;;
|
52
|
+
|
53
|
+
tail)
|
54
|
+
tail -f $LOG_DIR/*
|
55
|
+
;;
|
56
|
+
|
57
|
+
clearlogs)
|
58
|
+
rm $LOG_DIR/*
|
59
|
+
;;
|
60
|
+
|
61
|
+
*)
|
62
|
+
echo "Usage: <%= job_name %>_ctl {start|stop|logs|tail|clearlogs}" ;;
|
63
|
+
esac
|
64
|
+
exit 0
|
@@ -0,0 +1,15 @@
|
|
1
|
+
desc "Generates a properties file for each job based on properties.X.Y used in templates"
|
2
|
+
task :job_properties do
|
3
|
+
require "fileutils"
|
4
|
+
Dir["jobs/*"].each do |path|
|
5
|
+
puts "Searching job #{File.basename(path)}..."
|
6
|
+
FileUtils.chdir(path) do
|
7
|
+
properties = []
|
8
|
+
Dir["templates/*.erb"].each do |template_path|
|
9
|
+
properties |= File.read(template_path).scan(/\bproperties\.[\w\.]*\b/)
|
10
|
+
puts properties.join("\n")
|
11
|
+
File.open("properties", "w") { |file| file << properties.join("\n") }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -10,6 +10,8 @@ module Bosh::Gen::Models
|
|
10
10
|
@security_groups = ["default"]
|
11
11
|
@stemcell_version = "0.5.1"
|
12
12
|
@stemcell = { "name" => "bosh-stemcell", "version" => @stemcell_version }
|
13
|
+
@persistent_disk = cloud_properties.delete(:persistent_disk)
|
14
|
+
|
13
15
|
manifest["name"] = name
|
14
16
|
manifest["director_uuid"] = director_uuid
|
15
17
|
manifest["release"] = release_properties.dup
|
@@ -46,6 +48,7 @@ module Bosh::Gen::Models
|
|
46
48
|
"cloud_properties" => cloud_properties.dup
|
47
49
|
}
|
48
50
|
]
|
51
|
+
manifest["resource_pools"].first["persistent_disk"] = @persistent_disk if @persistent_disk
|
49
52
|
manifest["jobs"] = []
|
50
53
|
manifest["properties"] = {}
|
51
54
|
end
|
data/lib/bosh/gen/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -132,9 +132,13 @@ files:
|
|
132
132
|
- lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/TODO.md.tt
|
133
133
|
- lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/monit.tt
|
134
134
|
- lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%/templates/%job_name%_ctl.tt
|
135
|
+
- lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/TODO.md.tt
|
136
|
+
- lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/monit.tt
|
137
|
+
- lib/bosh/gen/generators/job_generator/templates/jobs/%job_name%_rubyrack/templates/%job_name%_ctl.tt
|
135
138
|
- lib/bosh/gen/generators/job_template_generator.rb
|
136
139
|
- lib/bosh/gen/generators/new_release_generator.rb
|
137
140
|
- lib/bosh/gen/generators/new_release_generator/templates/README.md.tt
|
141
|
+
- lib/bosh/gen/generators/new_release_generator/templates/Rakefile
|
138
142
|
- lib/bosh/gen/generators/new_release_generator/templates/blobs/.gitkeep
|
139
143
|
- lib/bosh/gen/generators/new_release_generator/templates/jobs/.gitkeep
|
140
144
|
- lib/bosh/gen/generators/new_release_generator/templates/packages/.gitkeep
|
@@ -168,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
172
|
version: '0'
|
169
173
|
segments:
|
170
174
|
- 0
|
171
|
-
hash:
|
175
|
+
hash: -3504528361068900288
|
172
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
177
|
none: false
|
174
178
|
requirements:
|
@@ -177,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
181
|
version: '0'
|
178
182
|
segments:
|
179
183
|
- 0
|
180
|
-
hash:
|
184
|
+
hash: -3504528361068900288
|
181
185
|
requirements: []
|
182
186
|
rubyforge_project:
|
183
187
|
rubygems_version: 1.8.23
|