bosh-gen 0.17.1 → 0.18.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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- N2JjZDA3YzU4NWRmYmE2YmNlZjYxZDU5YzZjNWU5NzQwODRlOWIxNA==
5
- data.tar.gz: !binary |-
6
- MjU1MGQzNDJjYTRkYjYzNjc5OTYwYTg5NGJhZTRjYjgzMDMxZGMwZQ==
2
+ SHA1:
3
+ metadata.gz: eb772775c13bd207fa2e58169dad496f87bcdbf2
4
+ data.tar.gz: 5a37c67880e8e463654d35da2e260580d6b2757f
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MTZmMDA4OTQxYWMxYjk0MDk1NzIzZDViNTUxNDQxYTI1ODI2ZWUyZTBmZTNm
10
- ZTRiYTliNWVlY2IxNDlhNWJkOWZjMWY1Y2U2YjAzN2E2NTJiZWRhNTZkNGJj
11
- ZWZmYWY0ZjUzZDJjZGQxOTRmNTMwMTM0ODhlN2MxMTg1OTE4ZWI=
12
- data.tar.gz: !binary |-
13
- MWFhMjE5ZDZjYTMwYzkyMWQ2MDQ3ZmQ4NjAwZGIwZGZjZmJlMmM2MTRkOWVk
14
- ZDY4ZjJkYTZmMTIyOTA2NWRjNWIxZWFkOTFjMGU2NGJjOTNiY2VlZTczOTdj
15
- NmE0ZmYxZDU5MmJhMTRkZWI1OGNhNjdkNWU5OTY4ZDkyOTQ3ZjI=
6
+ metadata.gz: b0b968b05d80a09a1dd75bd245a6874ab08943705176e4112e0a3515ed3c74bbd255db38da3f45e5362c77507416c7eae55b127b94155427e4e68b598ae19a57
7
+ data.tar.gz: 730fe6855982b1b5b4cab1b8bac3376aefde3402ecfe6c5a9204a0ff5e74694f1a796f5274da8baf63d44617efcdd8f19b74b9f6146cff6712c961ac3fe8324a
data/ChangeLog.md CHANGED
@@ -1,6 +1,11 @@
1
1
  Change Log
2
2
  ==========
3
3
 
4
+ v0.18.0
5
+
6
+ - `errand` - generates an errand-style job template
7
+ - `copy_property` helper now in bosh-templates gem
8
+
4
9
  v0.17.0
5
10
  -------
6
11
 
data/Gemfile CHANGED
@@ -8,6 +8,5 @@ if File.directory?("../cyoi")
8
8
  end
9
9
 
10
10
  gem 'bosh_cli', '~> 1.1750'
11
- gem 'bosh_common', '~> 1.1750'
12
11
 
13
12
  gem 'guard-rspec'
data/README.md CHANGED
@@ -14,7 +14,9 @@ Installation
14
14
 
15
15
  This application requires Ruby 1.9 or 2.0 and is installed via RubyGems:
16
16
 
17
+ ```
17
18
  $ gem install bosh-gen
19
+ ```
18
20
 
19
21
  Usage
20
22
  -----
@@ -241,6 +243,8 @@ $ bosh upload release https://my-project-boshrelease.s3.amazonaws.com/boshreleas
241
243
 
242
244
  They no longer require your BOSH release repo to access the BOSH release.
243
245
 
246
+ ![share-http-tarball](http://f.cl.ly/items/0R3A1w3k2E3h3a2d1g2U/bosh-gen-share-release.gif)
247
+
244
248
  ### BOSH community facilities
245
249
 
246
250
  You are welcome to re-use the BOSH user community facilities:
data/bosh-gen.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency "thor"
19
19
  gem.add_dependency "bosh_cli"
20
- gem.add_dependency "bosh_common"
20
+ gem.add_dependency "bosh-template"
21
21
  gem.add_dependency "progressbar"
22
22
 
23
23
  gem.add_dependency "cyoi", "~> 0.10"
@@ -30,7 +30,9 @@ module Bosh::Cli::Command
30
30
  bucket_name = raw_blobstore_client.instance_variable_get("@bucket_name")
31
31
 
32
32
  fog = fog_storage(raw_blobstore_client)
33
- dir = fog.directories.get(bucket_name)
33
+ unless dir = fog.directories.get(bucket_name)
34
+ err("S3 bucket #{bucket_name} is missing")
35
+ end
34
36
 
35
37
  say("\nUploading release...")
36
38
  if file = dir.files.new(key: upload_name, body: f)
data/lib/bosh/gen/cli.rb CHANGED
@@ -72,6 +72,15 @@ module Bosh
72
72
  Bosh::Gen::Generators::JobGenerator.start([name, dependencies, 'simple'])
73
73
  end
74
74
 
75
+ desc "errand NAME", "Create a new errand"
76
+ method_option :dependencies, :aliases => ['-d'], :type => :array,
77
+ :desc => "List of package dependencies"
78
+ def errand(name)
79
+ dependencies = options[:dependencies] || []
80
+ require 'bosh/gen/generators/errand_generator'
81
+ Bosh::Gen::Generators::ErrandGenerator.start([name, dependencies])
82
+ end
83
+
75
84
  desc "micro [JOB]", "Create a micro job - a collection of all jobs and packages"
76
85
  method_option :jobs, :aliases => ['-j'], :type => :array,
77
86
  :desc => "Ordered list of jobs to include"
@@ -1,12 +1,12 @@
1
1
  require 'yaml'
2
2
  require 'thor/group'
3
- require 'common/properties/property_helper' # bosh_common
3
+ require 'bosh/template/property_helper'
4
4
 
5
5
  module Bosh::Gen
6
6
  module Generators
7
7
  class DeploymentManifestGenerator < Thor::Group
8
8
  include Thor::Actions
9
- include Bosh::Common::PropertyHelper
9
+ include Bosh::Template::PropertyHelper
10
10
 
11
11
  argument :name
12
12
  argument :release_path
@@ -33,8 +33,8 @@ module Bosh::Gen
33
33
 
34
34
  # Create a deployment manifest (initially for AWS only)
35
35
  def create_deployment_manifest
36
- cloud_properties = {
37
- "instance_type" => "m1.small",
36
+ cloud_properties = {
37
+ "instance_type" => "m1.small",
38
38
  }
39
39
  cloud_properties["persistent_disk"] = flags[:disk] if flags[:disk]
40
40
  cloud_properties["static_ips"] = ip_addresses
@@ -54,12 +54,12 @@ module Bosh::Gen
54
54
  def release_detector
55
55
  @release_detector ||= Bosh::Gen::Models::ReleaseDetection.new(release_path)
56
56
  end
57
-
57
+
58
58
  # Whether +name+ contains .yml suffix or nor, returns a .yml filename for manifest to be generated
59
59
  def manifest_file_name
60
60
  basename = "#{name}.yml"
61
61
  end
62
-
62
+
63
63
  def job_manifests
64
64
  jobs.map do |job_name|
65
65
  {
@@ -67,7 +67,7 @@ module Bosh::Gen
67
67
  }
68
68
  end
69
69
  end
70
-
70
+
71
71
  # Return list of job names
72
72
  def detect_jobs
73
73
  release_detector.latest_dev_release_job_names
@@ -0,0 +1,94 @@
1
+ require 'yaml'
2
+ require 'thor/group'
3
+
4
+ module Bosh::Gen
5
+ module Generators
6
+ class ErrandGenerator < Thor::Group
7
+ include Thor::Actions
8
+
9
+ argument :job_name
10
+ argument :dependencies, :type => :array
11
+
12
+ def self.source_root
13
+ File.join(File.dirname(__FILE__), "errand_generator", "templates")
14
+ end
15
+
16
+ def check_root_is_release
17
+ unless File.exist?("jobs") && File.exist?("packages")
18
+ raise Thor::Error.new("run inside a BOSH release project")
19
+ end
20
+ end
21
+
22
+ def check_name
23
+ raise Thor::Error.new("'#{job_name}' is not a valid BOSH id") unless job_name.bosh_valid_id?
24
+ end
25
+
26
+ def warn_missing_dependencies
27
+ dependencies.each do |d|
28
+ raise Thor::Error.new("dependency '#{d}' is not a valid BOSH id") unless d.bosh_valid_id?
29
+ unless File.exist?(File.join("packages", d))
30
+ say_status "warning", "missing dependency '#{d}'", :yellow
31
+ end
32
+ end
33
+ end
34
+
35
+ # copy the thor template files into the bosh release to be bosh templates
36
+ # that's right, templates (.tt) can become templates (.erb)
37
+ def template_files
38
+ generator_job_templates_path = File.join(self.class.source_root, "jobs/%job_name%")
39
+ directory "jobs/%job_name%", "jobs/#{job_name}"
40
+
41
+ # build a hash of { 'bin/webapp_ctl.erb' => 'bin/webapp_ctl', ...} used in spec
42
+ @template_files = {}
43
+ FileUtils.chdir(File.join(generator_job_templates_path, "templates")) do
44
+ `ls */*`.split("\n").each do |template_file|
45
+ # clean up thor name convention
46
+ template_file.gsub!("%job_name%", job_name)
47
+ template_file.gsub!(".tt", "")
48
+ # strip erb from target file
49
+ target_template_file = template_file.gsub(/.erb/, '')
50
+
51
+ @template_files[template_file] = target_template_file
52
+ end
53
+ end
54
+ end
55
+
56
+ def job_specification
57
+ config = { "name" => job_name, "packages" => dependencies, "templates" => @template_files }
58
+ create_file job_dir("spec"), YAML.dump(config)
59
+ end
60
+
61
+ def readme
62
+ say_status "readme", "Add job to deploymemt manifest with lifecycle: errand"
63
+
64
+ end
65
+
66
+ private
67
+ def filenames
68
+ files.map {|f| File.basename(f) }
69
+ end
70
+
71
+ def job_dir(path)
72
+ File.join("jobs", job_name, path)
73
+ end
74
+
75
+ # Run a command in git.
76
+ #
77
+ # ==== Examples
78
+ #
79
+ # git :init
80
+ # git :add => "this.file that.rb"
81
+ # git :add => "onefile.rb", :rm => "badfile.cxx"
82
+ #
83
+ def git(commands={})
84
+ if commands.is_a?(Symbol)
85
+ run "git #{commands}"
86
+ else
87
+ commands.each do |cmd, options|
88
+ run "git #{cmd} #{options}"
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,12 @@
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 %>/helpers/ctl_setup.sh '<%= job_name %>'
8
+
9
+ EXITSTATUS=0
10
+
11
+ echo "Errand <%= job_name %> is complete; exit status $EXITSTATUS"
12
+ exit $EXITSTATUS
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # Setup env vars and folders for the ctl script
4
+ # This helps keep the ctl script as readable
5
+ # as possible
6
+
7
+ # Usage options:
8
+ # source /var/vcap/jobs/foobar/helpers/ctl_setup.sh JOB_NAME OUTPUT_LABEL
9
+ # source /var/vcap/jobs/foobar/helpers/ctl_setup.sh foobar
10
+ # source /var/vcap/jobs/foobar/helpers/ctl_setup.sh foobar foobar
11
+ # source /var/vcap/jobs/foobar/helpers/ctl_setup.sh foobar nginx
12
+
13
+ set -e # exit immediately if a simple command exits with a non-zero status
14
+ set -u # report the usage of uninitialized variables
15
+
16
+ JOB_NAME=$1
17
+ output_label=${2:-${JOB_NAME}}
18
+
19
+ export JOB_DIR=/var/vcap/jobs/$JOB_NAME
20
+ chmod 755 $JOB_DIR # to access file via symlink
21
+
22
+ # Load some bosh deployment properties into env vars
23
+ # Try to put all ERb into data/properties.sh.erb
24
+ # incl $NAME, $JOB_INDEX, $WEBAPP_DIR
25
+ source $JOB_DIR/data/properties.sh
26
+
27
+ source $JOB_DIR/helpers/ctl_utils.sh
28
+ redirect_output ${output_label}
29
+
30
+ export HOME=${HOME:-/home/vcap}
31
+
32
+ # Add all packages' /bin & /sbin into $PATH
33
+ for package_bin_dir in $(ls -d /var/vcap/packages/*/*bin)
34
+ do
35
+ export PATH=${package_bin_dir}:$PATH
36
+ done
37
+
38
+ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-''} # default to empty
39
+ for package_bin_dir in $(ls -d /var/vcap/packages/*/lib)
40
+ do
41
+ export LD_LIBRARY_PATH=${package_bin_dir}:$LD_LIBRARY_PATH
42
+ done
43
+
44
+ # Setup log, run and tmp folders
45
+
46
+ export RUN_DIR=/var/vcap/sys/run/$JOB_NAME
47
+ export LOG_DIR=/var/vcap/sys/log/$JOB_NAME
48
+ export TMP_DIR=/var/vcap/sys/tmp/$JOB_NAME
49
+ export STORE_DIR=/var/vcap/store/$JOB_NAME
50
+ for dir in $RUN_DIR $LOG_DIR $TMP_DIR $STORE_DIR
51
+ do
52
+ mkdir -p ${dir}
53
+ chown vcap:vcap ${dir}
54
+ chmod 775 ${dir}
55
+ done
56
+ export TMPDIR=$TMP_DIR
57
+
58
+ export C_INCLUDE_PATH=/var/vcap/packages/mysqlclient/include/mysql:/var/vcap/packages/sqlite/include:/var/vcap/packages/libpq/include
59
+ export LIBRARY_PATH=/var/vcap/packages/mysqlclient/lib/mysql:/var/vcap/packages/sqlite/lib:/var/vcap/packages/libpq/lib
60
+
61
+ echo '$PATH' $PATH
@@ -0,0 +1,156 @@
1
+ # Helper functions used by ctl scripts
2
+
3
+ # links a job file (probably a config file) into a package
4
+ # Example usage:
5
+ # link_job_file_to_package config/redis.yml [config/redis.yml]
6
+ # link_job_file_to_package config/wp-config.php wp-config.php
7
+ link_job_file_to_package() {
8
+ source_job_file=$1
9
+ target_package_file=${2:-$source_job_file}
10
+ full_package_file=$WEBAPP_DIR/${target_package_file}
11
+
12
+ link_job_file ${source_job_file} ${full_package_file}
13
+ }
14
+
15
+ # links a job file (probably a config file) somewhere
16
+ # Example usage:
17
+ # link_job_file config/bashrc /home/vcap/.bashrc
18
+ link_job_file() {
19
+ source_job_file=$1
20
+ target_file=$2
21
+ full_job_file=$JOB_DIR/${source_job_file}
22
+
23
+ echo link_job_file ${full_job_file} ${target_file}
24
+ if [[ ! -f ${full_job_file} ]]
25
+ then
26
+ echo "file to link ${full_job_file} does not exist"
27
+ else
28
+ # Create/recreate the symlink to current job file
29
+ # If another process is using the file, it won't be
30
+ # deleted, so don't attempt to create the symlink
31
+ mkdir -p $(dirname ${target_file})
32
+ ln -nfs ${full_job_file} ${target_file}
33
+ fi
34
+ }
35
+
36
+ # If loaded within monit ctl scripts then pipe output
37
+ # If loaded from 'source ../utils.sh' then normal STDOUT
38
+ redirect_output() {
39
+ SCRIPT=$1
40
+ mkdir -p /var/vcap/sys/log/monit
41
+ exec 1>> /var/vcap/sys/log/monit/$SCRIPT.log
42
+ exec 2>> /var/vcap/sys/log/monit/$SCRIPT.err.log
43
+ }
44
+
45
+ pid_guard() {
46
+ pidfile=$1
47
+ name=$2
48
+
49
+ if [ -f "$pidfile" ]; then
50
+ pid=$(head -1 "$pidfile")
51
+
52
+ if [ -n "$pid" ] && [ -e /proc/$pid ]; then
53
+ echo "$name is already running, please stop it first"
54
+ exit 1
55
+ fi
56
+
57
+ echo "Removing stale pidfile..."
58
+ rm $pidfile
59
+ fi
60
+ }
61
+
62
+ wait_pid() {
63
+ pid=$1
64
+ try_kill=$2
65
+ timeout=${3:-0}
66
+ force=${4:-0}
67
+ countdown=$(( $timeout * 10 ))
68
+
69
+ echo wait_pid $pid $try_kill $timeout $force $countdown
70
+ if [ -e /proc/$pid ]; then
71
+ if [ "$try_kill" = "1" ]; then
72
+ echo "Killing $pidfile: $pid "
73
+ kill $pid
74
+ fi
75
+ while [ -e /proc/$pid ]; do
76
+ sleep 0.1
77
+ [ "$countdown" != '0' -a $(( $countdown % 10 )) = '0' ] && echo -n .
78
+ if [ $timeout -gt 0 ]; then
79
+ if [ $countdown -eq 0 ]; then
80
+ if [ "$force" = "1" ]; then
81
+ echo -ne "\nKill timed out, using kill -9 on $pid... "
82
+ kill -9 $pid
83
+ sleep 0.5
84
+ fi
85
+ break
86
+ else
87
+ countdown=$(( $countdown - 1 ))
88
+ fi
89
+ fi
90
+ done
91
+ if [ -e /proc/$pid ]; then
92
+ echo "Timed Out"
93
+ else
94
+ echo "Stopped"
95
+ fi
96
+ else
97
+ echo "Process $pid is not running"
98
+ echo "Attempting to kill pid anyway..."
99
+ kill $pid
100
+ fi
101
+ }
102
+
103
+ wait_pidfile() {
104
+ pidfile=$1
105
+ try_kill=$2
106
+ timeout=${3:-0}
107
+ force=${4:-0}
108
+ countdown=$(( $timeout * 10 ))
109
+
110
+ if [ -f "$pidfile" ]; then
111
+ pid=$(head -1 "$pidfile")
112
+ if [ -z "$pid" ]; then
113
+ echo "Unable to get pid from $pidfile"
114
+ exit 1
115
+ fi
116
+
117
+ wait_pid $pid $try_kill $timeout $force
118
+
119
+ rm -f $pidfile
120
+ else
121
+ echo "Pidfile $pidfile doesn't exist"
122
+ fi
123
+ }
124
+
125
+ kill_and_wait() {
126
+ pidfile=$1
127
+ # Monit default timeout for start/stop is 30s
128
+ # Append 'with timeout {n} seconds' to monit start/stop program configs
129
+ timeout=${2:-25}
130
+ force=${3:-1}
131
+ if [[ -f ${pidfile} ]]
132
+ then
133
+ wait_pidfile $pidfile 1 $timeout $force
134
+ else
135
+ # TODO assume $1 is something to grep from 'ps ax'
136
+ pid="$(ps auwwx | grep "$1" | awk '{print $2}')"
137
+ wait_pid $pid 1 $timeout $force
138
+ fi
139
+ }
140
+
141
+ check_nfs_mount() {
142
+ opts=$1
143
+ exports=$2
144
+ mount_point=$3
145
+
146
+ if grep -qs $mount_point /proc/mounts; then
147
+ echo "Found NFS mount $mount_point"
148
+ else
149
+ echo "Mounting NFS..."
150
+ mount $opts $exports $mount_point
151
+ if [ $? != 0 ]; then
152
+ echo "Cannot mount NFS from $exports to $mount_point, exiting..."
153
+ exit 1
154
+ fi
155
+ fi
156
+ }
@@ -15,7 +15,7 @@ jobs:
15
15
  resource_pool: small_z1
16
16
  networks: (( merge ))
17
17
  persistent_disk: 0
18
- properties: ~
18
+ properties: {}
19
19
  - name: <%= project_name_underscored %>_z1
20
20
  template: <%= project_name_hyphenated %>
21
21
  instances: 0
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Gen
3
- VERSION = "0.17.1"
3
+ VERSION = "0.18.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,139 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.1
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dr Nic Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-30 00:00:00.000000000 Z
11
+ date: 2014-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bosh_cli
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: bosh_common
42
+ name: bosh-template
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: progressbar
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: cyoi
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.10'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.10'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: fog
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: '1.11'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.11'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: readwritesettings
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '3.0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec-fire
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  description: Generators for creating BOSH releases
@@ -144,9 +144,9 @@ executables:
144
144
  extensions: []
145
145
  extra_rdoc_files: []
146
146
  files:
147
- - .gitignore
148
- - .rspec
149
- - .travis.yml
147
+ - ".gitignore"
148
+ - ".rspec"
149
+ - ".travis.yml"
150
150
  - ChangeLog.md
151
151
  - Gemfile
152
152
  - Guardfile
@@ -159,6 +159,13 @@ files:
159
159
  - lib/bosh/gen.rb
160
160
  - lib/bosh/gen/cli.rb
161
161
  - lib/bosh/gen/generators/deployment_manifest_generator.rb
162
+ - lib/bosh/gen/generators/errand_generator.rb
163
+ - lib/bosh/gen/generators/errand_generator/templates/.gitkeep
164
+ - lib/bosh/gen/generators/errand_generator/templates/jobs/%job_name%/monit.tt
165
+ - lib/bosh/gen/generators/errand_generator/templates/jobs/%job_name%/templates/bin/run
166
+ - lib/bosh/gen/generators/errand_generator/templates/jobs/%job_name%/templates/config/.gitkeep
167
+ - lib/bosh/gen/generators/errand_generator/templates/jobs/%job_name%/templates/helpers/ctl_setup.sh
168
+ - lib/bosh/gen/generators/errand_generator/templates/jobs/%job_name%/templates/helpers/ctl_utils.sh
162
169
  - lib/bosh/gen/generators/extract_job_generator.rb
163
170
  - lib/bosh/gen/generators/extract_package_generator.rb
164
171
  - lib/bosh/gen/generators/job_generator.rb
@@ -311,17 +318,17 @@ require_paths:
311
318
  - lib
312
319
  required_ruby_version: !ruby/object:Gem::Requirement
313
320
  requirements:
314
- - - ! '>='
321
+ - - ">="
315
322
  - !ruby/object:Gem::Version
316
323
  version: '0'
317
324
  required_rubygems_version: !ruby/object:Gem::Requirement
318
325
  requirements:
319
- - - ! '>='
326
+ - - ">="
320
327
  - !ruby/object:Gem::Version
321
328
  version: '0'
322
329
  requirements: []
323
330
  rubyforge_project:
324
- rubygems_version: 2.2.2
331
+ rubygems_version: 2.2.1
325
332
  signing_key:
326
333
  specification_version: 4
327
334
  summary: ''