bosh-gen 0.17.1 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
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: ''