bosh-gen 0.2.0 → 0.3.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.
data/ChangeLog.md CHANGED
@@ -1,11 +1,18 @@
1
1
  # Change Log
2
2
 
3
+ ## v0.3
4
+
5
+ Added:
6
+
7
+ * `template` - add a template/file to a job
8
+ * `source` - download and add a source file/tarball to a package
9
+
3
10
  ## v0.2
4
11
 
5
12
  Added:
6
13
 
7
- * `package`
8
- * `job`
14
+ * `package` - create package scaffold, including source files
15
+ * `job` - create job scaffold
9
16
 
10
17
  ## v0.1
11
18
 
data/README.md CHANGED
@@ -52,6 +52,13 @@ $ bosh upload blobs
52
52
  $ bosh create release
53
53
  ```
54
54
 
55
+ Your job may need additional configuration files or executables installed.
56
+
57
+ ```
58
+ $ bosh-gen template some-ruby-job config/some-config.ini
59
+ create jobs/some-ruby-job/templates/some-config.ini.erb
60
+ force jobs/some-ruby-job/spec
61
+ ```
55
62
 
56
63
 
57
64
 
data/lib/bosh/gen/cli.rb CHANGED
@@ -31,6 +31,20 @@ module Bosh
31
31
  Bosh::Gen::Generators::PackageGenerator.start([name, dependencies, files])
32
32
  end
33
33
 
34
+ desc "source NAME", "Downloads a source item into the named project"
35
+ def source(name, uri)
36
+ dir = Dir.mktmpdir
37
+ files = []
38
+ say "Downloading #{uri}..."
39
+ FileUtils.chdir(dir) do
40
+ `wget '#{uri}'`
41
+ files = Dir['*'].map {|f| File.expand_path(f)}
42
+ end
43
+
44
+ require 'bosh/gen/generators/package_source_generator'
45
+ Bosh::Gen::Generators::PackageSourceGenerator.start([name, files])
46
+ end
47
+
34
48
  desc "job NAME", "Create a new job"
35
49
  method_option :dependencies, :aliases => ['-d'], :type => :array, :desc => "List of package dependencies"
36
50
  def job(name)
@@ -38,7 +52,13 @@ module Bosh
38
52
  require 'bosh/gen/generators/job_generator'
39
53
  Bosh::Gen::Generators::JobGenerator.start([name, dependencies])
40
54
  end
41
-
55
+
56
+ desc "template JOB FILE_PATH", "Add a Job template (example FILE_PATH: config/httpd.conf)"
57
+ def template(job_name, file_path)
58
+ require 'bosh/gen/generators/job_template_generator'
59
+ Bosh::Gen::Generators::JobTemplateGenerator.start([job_name, file_path])
60
+ end
61
+
42
62
  no_tasks do
43
63
  def cyan; "\033[36m" end
44
64
  def clear; "\033[0m" end
@@ -33,7 +33,7 @@ module Bosh::Gen
33
33
  end
34
34
 
35
35
  def templates
36
- empty_directory job_dir("template")
36
+ empty_directory job_dir("templates")
37
37
  end
38
38
 
39
39
  def monit
@@ -0,0 +1,56 @@
1
+ require 'yaml'
2
+ require 'thor/group'
3
+
4
+ module Bosh::Gen
5
+ module Generators
6
+ class JobTemplateGenerator < Thor::Group
7
+ include Thor::Actions
8
+
9
+ argument :job_name
10
+ argument :file_path
11
+
12
+ def check_root_is_release
13
+ unless File.exist?("jobs") && File.exist?("packages")
14
+ raise Thor::Error.new("run inside a BOSH release project")
15
+ end
16
+ end
17
+
18
+ def check_job
19
+ raise Thor::Error.new("'#{job_name}' job does not yet exist; either create or fix spelling") unless File.exist?(job_dir(""))
20
+ raise Thor::Error.new("'jobs/#{job_name}/spec' is missing") unless File.exist?(job_dir("spec"))
21
+ end
22
+
23
+ def check_file_path
24
+ raise Thor::Error.new("'#{file_path}' must be a relative path, such as 'config/httpd.conf'") if file_path[0] == "/"
25
+ end
26
+
27
+ def touch_template_erb
28
+ create_file job_template_dir(template_name)
29
+ end
30
+
31
+ def add_template_to_spec
32
+ current_spec = YAML.load_file(job_dir("spec"))
33
+ current_spec["templates"] ||= {}
34
+ current_spec["templates"][template_name] = file_path
35
+ create_file job_dir("spec"), YAML.dump(current_spec), :force => true
36
+ end
37
+
38
+ private
39
+ def file_name
40
+ File.basename(file_path)
41
+ end
42
+
43
+ def template_name
44
+ "#{file_name}.erb"
45
+ end
46
+
47
+ def job_dir(path)
48
+ File.join("jobs", job_name, path)
49
+ end
50
+
51
+ def job_template_dir(path)
52
+ File.join("jobs", job_name, "templates", path)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -19,6 +19,10 @@ module Bosh::Gen
19
19
  FileUtils.cd(destination_root) unless options[:pretend]
20
20
  end
21
21
 
22
+ def readme
23
+ template "README.md.tt", "README.md"
24
+ end
25
+
22
26
  def directories
23
27
  %w[jobs packages src blobs].each do |dir|
24
28
  directory dir
@@ -0,0 +1,4 @@
1
+ # <%= name %> - BOSH Release
2
+
3
+ This project is a BOSH release for `<%= name %>`.
4
+
@@ -0,0 +1,49 @@
1
+ require 'yaml'
2
+ require 'thor/group'
3
+
4
+ module Bosh::Gen
5
+ module Generators
6
+ class PackageSourceGenerator < Thor::Group
7
+ include Thor::Actions
8
+
9
+ argument :package_name
10
+ argument :file_paths
11
+
12
+ def check_root_is_release
13
+ unless File.exist?("jobs") && File.exist?("packages")
14
+ raise Thor::Error.new("run inside a BOSH release project")
15
+ end
16
+ end
17
+
18
+ def check_package
19
+ raise Thor::Error.new("'#{package_name}' package does not yet exist; either create or fix spelling") unless File.exist?(package_dir(""))
20
+ raise Thor::Error.new("'packages/#{package_name}/spec' is missing") unless File.exist?(package_dir("spec"))
21
+ end
22
+
23
+ def add_filenames_to_spec
24
+ current_spec = YAML.load_file(package_dir("spec"))
25
+ current_spec["files"] ||= []
26
+ file_paths.each do |path|
27
+ current_spec["files"] << File.join(package_name, File.basename(path))
28
+ end
29
+ create_file package_dir("spec"), YAML.dump(current_spec), :force => true
30
+ end
31
+
32
+ def copy_files
33
+ source_paths << File.dirname(file_paths.first) # file_paths all in same folder
34
+ file_paths.each do |path|
35
+ copy_file path, source_dir(File.basename(path))
36
+ end
37
+ end
38
+
39
+ private
40
+ def package_dir(path)
41
+ File.join("packages", package_name, path)
42
+ end
43
+
44
+ def source_dir(path)
45
+ File.join("src", package_name, path)
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Gen
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
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.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-27 00:00:00.000000000 Z
12
+ date: 2012-05-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &70119538265220 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70119538265220
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bosh_cli
27
- requirement: &70119538264800 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70119538264800
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rake
38
- requirement: &70119538264380 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70119538264380
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  description: Generators for creating BOSH releases
48
63
  email:
49
64
  - drnicwilliams@gmail.com
@@ -64,13 +79,16 @@ files:
64
79
  - lib/bosh/gen/cli.rb
65
80
  - lib/bosh/gen/generators/job_generator.rb
66
81
  - lib/bosh/gen/generators/job_generator/templates/.gitkeep
82
+ - lib/bosh/gen/generators/job_template_generator.rb
67
83
  - lib/bosh/gen/generators/new_release_generator.rb
84
+ - lib/bosh/gen/generators/new_release_generator/templates/README.md.tt
68
85
  - lib/bosh/gen/generators/new_release_generator/templates/blobs/.gitkeep
69
86
  - lib/bosh/gen/generators/new_release_generator/templates/jobs/.gitkeep
70
87
  - lib/bosh/gen/generators/new_release_generator/templates/packages/.gitkeep
71
88
  - lib/bosh/gen/generators/new_release_generator/templates/src/.gitkeep
72
89
  - lib/bosh/gen/generators/package_generator.rb
73
90
  - lib/bosh/gen/generators/package_generator/templates/.gitkeep
91
+ - lib/bosh/gen/generators/package_source_generator.rb
74
92
  - lib/bosh/gen/version.rb
75
93
  homepage: https://github.com/drnic/bosh-gen
76
94
  licenses: []
@@ -86,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
104
  version: '0'
87
105
  segments:
88
106
  - 0
89
- hash: 1548629976559305744
107
+ hash: -3342967338916077757
90
108
  required_rubygems_version: !ruby/object:Gem::Requirement
91
109
  none: false
92
110
  requirements:
@@ -95,10 +113,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
113
  version: '0'
96
114
  segments:
97
115
  - 0
98
- hash: 1548629976559305744
116
+ hash: -3342967338916077757
99
117
  requirements: []
100
118
  rubyforge_project:
101
- rubygems_version: 1.8.17
119
+ rubygems_version: 1.8.23
102
120
  signing_key:
103
121
  specification_version: 3
104
122
  summary: ''