bosh-gen 0.2.0 → 0.3.0

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