bosh-gen 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog.md ADDED
@@ -0,0 +1,12 @@
1
+ # Change Log
2
+
3
+ ## v0.2
4
+
5
+ Added:
6
+
7
+ * `package`
8
+ * `job`
9
+
10
+ ## v0.1
11
+
12
+ * `new` - create new release
data/README.md CHANGED
@@ -24,19 +24,36 @@ $ bosh-gen new my-new-project --atmos
24
24
  $ bosh-gen new my-new-project # local blobstore with a warning
25
25
 
26
26
  $ cd my-new-project
27
+ ```
28
+
29
+ **NEXT:** Edit `config/final.yml` with your S3 or ATMOS credentials
30
+
31
+ ```
32
+ $ bosh create release
33
+
34
+ $ wget -P /tmp http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
35
+ $ bosh-gen package ruby -f /tmp/ruby-1.9.3-p194.tar.gz
36
+
37
+ $ bosh-gen job some-ruby-job -d ruby
38
+
39
+ $ git add .
40
+ $ git commit -m "added a job + 3 packages"
41
+
27
42
  $ bosh create release
28
43
  ```
29
44
 
30
- TODO:
45
+ It is not ideal to include large source files, such as the 10Mb ruby tarball, in your git repository. Rather, use the blobstore for those:
31
46
 
32
47
  ```
33
- $ bosh-gen job somejob
34
- $ bosh-gen package somepackage -u somejob
35
- $ bosh-gen package anotherpackage
36
- $ bosh-gen job anotherjob -u somepackage anotherpackage
48
+ $ rm -rf src/ruby/ruby-1.9.3-p194.tar.gz
49
+ $ bosh add blob /tmp/ruby-1.9.3-p194.tar.gz ruby
50
+ $ bosh upload blobs
51
+
52
+ $ bosh create release
37
53
  ```
38
54
 
39
- This will create two jobs and two package scaffolds. Both packages will be used by `somejob`, and `anotherpackage` is used by both jobs.
55
+
56
+
40
57
 
41
58
  ## Contributing
42
59
 
data/lib/bosh/gen/cli.rb CHANGED
@@ -23,7 +23,7 @@ module Bosh
23
23
 
24
24
  desc "package NAME", "Create a new package"
25
25
  method_option :dependencies, :aliases => ['-d'], :type => :array, :desc => "List of package dependencies"
26
- method_option :files, :aliases => ['-f', '--src'], :type => :array, :desc => "List of file paths to include"
26
+ method_option :files, :aliases => ['-f', '--src'], :type => :array, :desc => "List of files copy into release"
27
27
  def package(name)
28
28
  dependencies = options[:dependencies] || []
29
29
  files = options[:files] || []
@@ -33,12 +33,10 @@ module Bosh
33
33
 
34
34
  desc "job NAME", "Create a new job"
35
35
  method_option :dependencies, :aliases => ['-d'], :type => :array, :desc => "List of package dependencies"
36
- method_option :templates, :aliases => ['-t'], :type => :array, :desc => "List of templates to use"
37
36
  def job(name)
38
37
  dependencies = options[:dependencies] || []
39
- template_files = options[:template_files] || []
40
38
  require 'bosh/gen/generators/job_generator'
41
- Bosh::Gen::Generators::JobGenerator.start([name, dependencies, template_files])
39
+ Bosh::Gen::Generators::JobGenerator.start([name, dependencies])
42
40
  end
43
41
 
44
42
  no_tasks do
@@ -8,7 +8,6 @@ module Bosh::Gen
8
8
 
9
9
  argument :name
10
10
  argument :dependencies, :type => :array
11
- argument :template_files, :type => :array
12
11
 
13
12
  def self.source_root
14
13
  File.join(File.dirname(__FILE__), "job_generator", "templates")
@@ -42,7 +41,7 @@ module Bosh::Gen
42
41
  end
43
42
 
44
43
  def job_specification
45
- config = { "name" => name, "packages" => dependencies, "templates" => template_files }
44
+ config = { "name" => name, "packages" => dependencies, "templates" => {} }
46
45
  create_file job_dir("spec"), YAML.dump(config)
47
46
  end
48
47
 
@@ -26,7 +26,7 @@ module Bosh::Gen
26
26
  end
27
27
 
28
28
  def blobs_yaml
29
- create_file "blob_index.yml", YAML.dump({})
29
+ create_file "config/blobs.yml", YAML.dump({})
30
30
  end
31
31
 
32
32
  # TODO - support other blobstores
@@ -34,28 +34,30 @@ module Bosh::Gen
34
34
  config_dev = { "dev_name" => name }
35
35
  create_file "config/dev.yml", YAML.dump(config_dev)
36
36
 
37
+ config_private = { "blobstore_secret" => 'BLOBSTORE_SECRET' }
38
+ create_file "config/private.yml", YAML.dump(config_private)
39
+
37
40
  case blobstore_type
38
41
  when :local
39
42
  say_status "warning", "config/final.yml defaulting to local blobstore /tmp/blobstore", :yellow
40
- config_private = {}
41
43
  config_final = { "blobstore" => {
42
44
  "provider" => "local",
43
45
  "options" => { "blobstore_path" => '/tmp/blobstore' }
44
46
  }
45
47
  }
46
48
  when :s3
47
- config_private = { "blobstore_secret" => 'AWS_SECRET_KEY' }
49
+ config_private = { "blobstore_secret" => 'BLOBSTORE_SECRET' }
48
50
  config_final = { "blobstore" => {
49
51
  "provider" => "s3",
50
52
  "options" => {
51
53
  "bucket_name" => "BOSH",
52
54
  "access_key_id" => "AWS_ACCESS_KEY",
55
+ "secret_access_key" => "AWS_SECRET_ACCESS_KEY",
53
56
  "encryption_key" => "PERSONAL_RANDOM_KEY",
54
57
  }
55
58
  }
56
59
  }
57
60
  when :atmos
58
- config_private = { "blobstore_secret" => 'ATMOS_SECRET_KEY' }
59
61
  config_final = { "blobstore" => {
60
62
  "provider" => "atmos",
61
63
  "options" => {
@@ -67,7 +69,6 @@ module Bosh::Gen
67
69
  }
68
70
  end
69
71
 
70
- create_file "config/private.yml", YAML.dump(config_private)
71
72
  create_file "config/final.yml", YAML.dump(config_final)
72
73
  end
73
74
 
@@ -51,14 +51,22 @@ module Bosh::Gen
51
51
  end
52
52
  end
53
53
 
54
+ # Copy the local source files into src/NAME/filename, unless filename
55
+ # already exists as a blob in blobs/NAME/filename.
54
56
  def copy_src_files
55
- files.each do |f|
56
- copy_file File.expand_path(f), src_dir(File.basename(f))
57
+ files.each do |file_path|
58
+ file_name = File.basename(file_path)
59
+ src_file = src_dir(file_name)
60
+ if File.exist? blob_dir(file_name)
61
+ say "Blob '#{file_name}' exists as a blob, skipping..."
62
+ else
63
+ copy_file File.expand_path(file_path), src_file
64
+ end
57
65
  end
58
66
  end
59
67
 
60
68
  def package_specification
61
- src_files = files.map {|f| "src/#{name}/#{File.basename(f)}"}
69
+ src_files = files.map {|f| "#{name}/#{File.basename(f)}"}
62
70
  config = { "name" => name, "dependencies" => dependencies, "files" => src_files }
63
71
  create_file package_dir("spec"), YAML.dump(config)
64
72
  end
@@ -72,6 +80,10 @@ module Bosh::Gen
72
80
  "src/#{name}/#{path}"
73
81
  end
74
82
 
83
+ def blob_dir(path)
84
+ "blobs/#{name}/#{path}"
85
+ end
86
+
75
87
  # Run a command in git.
76
88
  #
77
89
  # ==== Examples
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Gen
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.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.1.0
4
+ version: 0.2.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-22 00:00:00.000000000 Z
12
+ date: 2012-04-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &70178189586820 !ruby/object:Gem::Requirement
16
+ requirement: &70119538265220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70178189586820
24
+ version_requirements: *70119538265220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bosh_cli
27
- requirement: &70178189585400 !ruby/object:Gem::Requirement
27
+ requirement: &70119538264800 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70178189585400
35
+ version_requirements: *70119538264800
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70178189089040 !ruby/object:Gem::Requirement
38
+ requirement: &70119538264380 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70178189089040
46
+ version_requirements: *70119538264380
47
47
  description: Generators for creating BOSH releases
48
48
  email:
49
49
  - drnicwilliams@gmail.com
@@ -53,6 +53,7 @@ extensions: []
53
53
  extra_rdoc_files: []
54
54
  files:
55
55
  - .gitignore
56
+ - ChangeLog.md
56
57
  - Gemfile
57
58
  - LICENSE
58
59
  - README.md
@@ -62,20 +63,14 @@ files:
62
63
  - lib/bosh/gen.rb
63
64
  - lib/bosh/gen/cli.rb
64
65
  - lib/bosh/gen/generators/job_generator.rb
65
- - lib/bosh/gen/generators/job_generator/templates/blobs/.gitkeep
66
- - lib/bosh/gen/generators/job_generator/templates/jobs/.gitkeep
67
- - lib/bosh/gen/generators/job_generator/templates/packages/.gitkeep
68
- - lib/bosh/gen/generators/job_generator/templates/src/.gitkeep
66
+ - lib/bosh/gen/generators/job_generator/templates/.gitkeep
69
67
  - lib/bosh/gen/generators/new_release_generator.rb
70
68
  - lib/bosh/gen/generators/new_release_generator/templates/blobs/.gitkeep
71
69
  - lib/bosh/gen/generators/new_release_generator/templates/jobs/.gitkeep
72
70
  - lib/bosh/gen/generators/new_release_generator/templates/packages/.gitkeep
73
71
  - lib/bosh/gen/generators/new_release_generator/templates/src/.gitkeep
74
72
  - lib/bosh/gen/generators/package_generator.rb
75
- - lib/bosh/gen/generators/package_generator/templates/blobs/.gitkeep
76
- - lib/bosh/gen/generators/package_generator/templates/jobs/.gitkeep
77
- - lib/bosh/gen/generators/package_generator/templates/packages/.gitkeep
78
- - lib/bosh/gen/generators/package_generator/templates/src/.gitkeep
73
+ - lib/bosh/gen/generators/package_generator/templates/.gitkeep
79
74
  - lib/bosh/gen/version.rb
80
75
  homepage: https://github.com/drnic/bosh-gen
81
76
  licenses: []
@@ -91,7 +86,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
86
  version: '0'
92
87
  segments:
93
88
  - 0
94
- hash: 4165498384782219336
89
+ hash: 1548629976559305744
95
90
  required_rubygems_version: !ruby/object:Gem::Requirement
96
91
  none: false
97
92
  requirements:
@@ -100,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
95
  version: '0'
101
96
  segments:
102
97
  - 0
103
- hash: 4165498384782219336
98
+ hash: 1548629976559305744
104
99
  requirements: []
105
100
  rubyforge_project:
106
101
  rubygems_version: 1.8.17