bosh-gen 0.14.0 → 0.15.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
- ZGY3MjdjNjc4MzQ1Y2Q0MjNmZTM1Mzg4ODYxNDJlNzFjMjdmMGRiNQ==
5
- data.tar.gz: !binary |-
6
- NWE2ZWFjMGY5MmZiYWI4NTU0MjU2MmY4NGRmMDdiODc0MThkYjIxMw==
2
+ SHA1:
3
+ metadata.gz: 7e787702a0c2065e8ef109955c23c6fb02ae4afa
4
+ data.tar.gz: bf3debd3e2307c2dbfc8e4fecbaed7033078b277
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MjAxNTliZDc2M2Y4ZWFiNjA0ZTgwYjI5Zjg2NjI1ODY1NTc2ZWJkMDBkNDNk
10
- MWM4OWE0NTE3MTFhNDY1NzE3MzZkMjQxYzliOWRiMzYyZDk4MDlkMzZhZDEx
11
- MmY0OGVkNDYwMTk3MzgxYmIyOWI4NDA1MTRjNjkwNmNkZWQ0ZjY=
12
- data.tar.gz: !binary |-
13
- NWJlMzBlYzY2OTlmMjEwNGE3YTA3YWEyNzk3OTMxOWRhNDBmZDYyNzZiMzg3
14
- MjBjNTRkM2U2Y2I3ODZkMGNiOWVmYjE4NzM1NzUyZjg4NGVjNDJlNWVjZjgw
15
- ZWY4NzlhNWY3MGRlMWYxYmJiMDhjZDRiMDVmNDE1YjY1NWI0OWY=
6
+ metadata.gz: dc7c4b0d56e4c41112f888f9412a62843bf3d31b9e1e3d5606d5b151d2e2f27763e6da770a09a7a5b6c08eee191355ce8ecd04c4801c249386154529456155ca
7
+ data.tar.gz: 5798bf47c3de53926c358c089e817a13bed0b287a6e8981e9e4e52dc70e4214d1cdb6e1fe7cbf5a211e6e13a7f160e4210e14858013478aad4042cc95fbf6096
data/ChangeLog.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ## v0.15.0
4
+
5
+ * Create packages from existing Aptitude .deb packages with `package --apt`
6
+ * Assume project & job names have hyphens in templates
7
+ * Templates default to latest stemcell [Aristoteles Neto]
8
+
3
9
  ## v0.14.0
4
10
 
5
11
  * templates/make_manifest & example spiff templates generated
data/lib/bosh/gen/cli.rb CHANGED
@@ -27,6 +27,8 @@ module Bosh
27
27
  end
28
28
 
29
29
  desc "package NAME", "Create a new package"
30
+ method_option :apt, :type => :boolean,
31
+ :desc => "Create package using debian/ubuntu apt .debs"
30
32
  method_option :dependencies, :aliases => ['-d'], :type => :array,
31
33
  :desc => "List of package dependencies"
32
34
  method_option :files, :aliases => ['-f'], :type => :array,
@@ -35,11 +37,16 @@ module Bosh
35
37
  :desc => "List of existing sources to use, e.g. --src 'myapp/**/*'"
36
38
  def package(name)
37
39
  dependencies = options[:dependencies] || []
38
- files = options[:files] || []
39
- sources = options[:src] || []
40
- require 'bosh/gen/generators/package_generator'
41
- Bosh::Gen::Generators::PackageGenerator.start(
42
- [name, dependencies, files, sources])
40
+ if options[:apt]
41
+ require 'bosh/gen/generators/package_apt_generator'
42
+ Bosh::Gen::Generators::PackageAptGenerator.start([name, dependencies])
43
+ else
44
+ files = options[:files] || []
45
+ sources = options[:src] || []
46
+ require 'bosh/gen/generators/package_generator'
47
+ Bosh::Gen::Generators::PackageGenerator.start(
48
+ [name, dependencies, files, sources])
49
+ end
43
50
  end
44
51
 
45
52
  desc "source NAME", "Downloads a source item into the named project"
@@ -6,7 +6,7 @@ meta:
6
6
 
7
7
  stemcell:
8
8
  name: bosh-aws-xen-ubuntu
9
- version: 1722
9
+ version: latest
10
10
 
11
11
  jobs:
12
12
  - name: <%= project_name_underscored %>_leader_z1
@@ -4,7 +4,7 @@ meta:
4
4
 
5
5
  stemcell:
6
6
  name: bosh-warden-boshlite-ubuntu
7
- version: 24
7
+ version: latest
8
8
 
9
9
  update:
10
10
  canaries: 1
@@ -9,12 +9,12 @@ update:
9
9
 
10
10
  jobs:
11
11
  - name: <%= project_name_underscored %>_leader_z1
12
- template: <%= project_name_underscored %>
12
+ template: <%= project_name_hyphenated %>
13
13
  instances: 0
14
14
  resource_pool: small_z1
15
15
  networks: (( merge ))
16
16
  - name: <%= project_name_underscored %>_z1
17
- template: <%= project_name_underscored %>
17
+ template: <%= project_name_hyphenated %>
18
18
  instances: 0
19
19
  resource_pool: small_z1
20
20
  networks: (( merge ))
@@ -25,3 +25,5 @@ jobs:
25
25
  master: (( merge ))
26
26
 
27
27
  networks: (( merge ))
28
+
29
+ properties: {}
@@ -54,7 +54,6 @@ perl -pi -e "s/NAME/$NAME/g" $tmpdir/stub-with-uuid.yml
54
54
  spiff merge \
55
55
  $templates/deployment.yml \
56
56
  $templates/jobs.yml \
57
- $templates/properties.yml \
58
57
  $templates/infrastructure-${infrastructure}.yml \
59
58
  $tmpdir/stub-with-uuid.yml \
60
59
  $* > $tmpdir/$NAME-manifest.yml
@@ -9,5 +9,5 @@ meta:
9
9
  director_uuid: PLACEHOLDER-DIRECTOR-UUID
10
10
 
11
11
  releases:
12
- - name: <%= project_name_underscored %>
12
+ - name: <%= project_name_hyphenated %>
13
13
  version: latest
@@ -0,0 +1,107 @@
1
+ require 'yaml'
2
+ require 'thor/group'
3
+
4
+ module Bosh::Gen
5
+ module Generators
6
+ class PackageAptGenerator < Thor::Group
7
+ include Thor::Actions
8
+
9
+ argument :name
10
+ argument :dependencies, :type => :array
11
+
12
+ def self.source_root
13
+ File.join(File.dirname(__FILE__), "package_apt_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("'#{name}' is not a valid BOSH id") unless 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
+ def packaging
36
+ create_file package_dir("packaging") do
37
+ <<-SHELL.gsub(/^\s{10}/, '')
38
+ set -e # exit immediately if a simple command exits with a non-zero status
39
+ set -u # report the usage of uninitialized variables
40
+
41
+ # Available variables
42
+ # $BOSH_COMPILE_TARGET - where this package & spec'd source files are available
43
+ # $BOSH_INSTALL_TARGET - where you copy/install files to be included in package
44
+
45
+ mkdir -p $BOSH_INSTALL_TARGET/apt
46
+
47
+ for DEB in $(ls -1 apt/#{name}/*.deb); do
48
+ echo "Installing $(basename $DEB)"
49
+ dpkg -x $DEB $BOSH_INSTALL_TARGET/apt
50
+ done
51
+
52
+ cp -a apt/#{name}/profile.sh $BOSH_INSTALL_TARGET/
53
+ SHELL
54
+ end
55
+ end
56
+
57
+ def package_specification
58
+ src_files = ["apt/#{name}/profile.sh", "apt/#{name}/*.deb"]
59
+ config = { "name" => name, "dependencies" => dependencies, "files" => src_files }
60
+ create_file package_dir("spec"), YAML.dump(config)
61
+ end
62
+
63
+ def common_helpers
64
+ directory 'src/apt'
65
+ chmod 'src/apt/fetch_debs.sh', 0755
66
+ end
67
+
68
+ def vagrantfile
69
+ copy_file 'Vagrantfile'
70
+ end
71
+
72
+ def show_instructions
73
+ say "Next steps:", :green
74
+ say <<-README.gsub(/^ /, '')
75
+ 1. Edit src/apt/#{name}/aptfile to specify list of debian packages to install
76
+ 2. Provision vagrant and run script to fetch debian packages:
77
+
78
+ vagrant up
79
+ vagrant ssh -c '/vagrant/src/apt/fetch_debs.sh #{name}'
80
+ vagrant destroy
81
+
82
+ You can search for aptitude debian packages using apt-cache:
83
+
84
+ vagrant ssh -c 'apt-cache search #{name} | sort'
85
+ README
86
+ end
87
+
88
+ private
89
+ def package_dir(path)
90
+ "packages/#{name}/#{path}"
91
+ end
92
+
93
+ def src_dir(path)
94
+ "src/#{name}/#{path}"
95
+ end
96
+
97
+ def blob_dir(path)
98
+ "blobs/#{name}/#{path}"
99
+ end
100
+
101
+ def deb_package_name
102
+ name
103
+ end
104
+
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,13 @@
1
+ # Vagrant used to allow non-Ubuntu hosts to execute
2
+ # apt-get commands to fetch debian packages.
3
+ Vagrant.configure('2') do |config|
4
+
5
+ config.vm.hostname='boshrelease-builder'
6
+ config.vm.box = "lucid64"
7
+
8
+ # Need NFS enabled, and hence a private network for virtualbox
9
+ # as discussed in this project's patch
10
+ # https://github.com/reidab/citizenry/commit/590ca245b9a4fc96c55ab7bc3bbafa38583f8cda
11
+ config.vm.network "private_network", ip: "192.168.50.5"
12
+ config.vm.synced_folder ".", "/vagrant", type: "nfs"
13
+ end
@@ -0,0 +1,5 @@
1
+ export PATH="/var/vcap/packages/<%= name %>/apt/usr/bin:$PATH"
2
+ export LD_LIBRARY_PATH="/var/vcap/packages/<%= name %>/apt/usr/lib:$LD_LIBRARY_PATH"
3
+ export INCLUDE_PATH="/var/vcap/packages/<%= name %>/apt/usr/include:$INCLUDE_PATH"
4
+ export CPATH="$INCLUDE_PATH"
5
+ export CPPPATH="$INCLUDE_PATH"
@@ -0,0 +1,70 @@
1
+ set -e # exit immediately if a simple command exits with a non-zero status
2
+ set -u # report the usage of uninitialized variables
3
+ set -o pipefail # return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status
4
+
5
+ # Usage: src/common/fetch_debs.sh postgresql [src/apt/postgresql]
6
+ #
7
+ # src/common/fetch_debs.sh postgresql
8
+ # src/common/fetch_debs.sh postgresql src/apt/postgresql
9
+ #
10
+ PACKAGE_NAME=$1
11
+ RELEASE_DIR=${RELEASE_DIR:-/vagrant}
12
+ if [[ "${2:-X}" == "X" ]]; then
13
+ PACKAGE_SRC_DIR=$RELEASE_DIR/src/apt/$PACKAGE_NAME
14
+ else
15
+ PACKAGE_SRC_DIR=$RELEASE_DIR/$2
16
+ fi
17
+ APTFILE=$PACKAGE_SRC_DIR/aptfile
18
+ APT_CACHE_DIR="$RELEASE_DIR/tmp/apt/cache/$PACKAGE_NAME"
19
+ APT_STATE_DIR="$RELEASE_DIR/tmp/apt/state"
20
+ BLOBS_DIR=$RELEASE_DIR/blobs/apt/$PACKAGE_NAME
21
+
22
+ function error() {
23
+ echo " ! $*" >&2
24
+ exit 1
25
+ }
26
+
27
+ function topic() {
28
+ echo "-----> $*"
29
+ }
30
+
31
+ function indent() {
32
+ c='s/^/ /'
33
+ case $(uname) in
34
+ Darwin) sed -l "$c";;
35
+ *) sed -u "$c";;
36
+ esac
37
+ }
38
+
39
+ topic "Environment information"
40
+ echo $0 | indent
41
+ uname -a | indent
42
+ pwd | indent
43
+
44
+ # Invoke apt-get to ensure it exists
45
+ if [[ "$(which apt-get)X" == "X" ]]; then
46
+ error "Cannot find apt-get executable. Run this script within a Debian/Ubuntu environment."
47
+ fi
48
+ which apt-get | indent
49
+
50
+ echo $APTFILE | indent
51
+ if [[ ! -f $APTFILE ]]; then
52
+ error "Missing source file $APTFILE"
53
+ fi
54
+
55
+ mkdir -p "$APT_CACHE_DIR/archives/partial"
56
+ mkdir -p "$APT_STATE_DIR/lists/partial"
57
+ mkdir -p $BLOBS_DIR
58
+
59
+ APT_OPTIONS="-o debug::nolocking=true -o dir::cache=$APT_CACHE_DIR -o dir::state=$APT_STATE_DIR"
60
+
61
+ topic "Updating apt caches"
62
+ apt-get $APT_OPTIONS update | indent
63
+
64
+ for PACKAGE in $(cat $APTFILE); do
65
+ topic "Fetching .debs for $PACKAGE"
66
+ apt-get $APT_OPTIONS -y -d install $PACKAGE | indent
67
+ done
68
+
69
+ topic "Copying .debs to blobs"
70
+ cp -a $APT_CACHE_DIR/archives/*.deb $BLOBS_DIR/
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Gen
3
- VERSION = "0.14.0"
3
+ VERSION = "0.15.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,111 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.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-01-09 00:00:00.000000000 Z
11
+ date: 2014-01-27 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
42
  name: bosh_common
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: rake
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: :development
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: minitest
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '2.12'
76
76
  type: :development
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: '2.12'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: minitest-colorize
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
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: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: guard-minitest
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
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: '0'
111
111
  description: Generators for creating BOSH releases
@@ -116,7 +116,7 @@ executables:
116
116
  extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
- - .gitignore
119
+ - ".gitignore"
120
120
  - ChangeLog.md
121
121
  - Gemfile
122
122
  - Guardfile
@@ -170,8 +170,13 @@ files:
170
170
  - lib/bosh/gen/generators/new_release_generator/templates/templates/infrastructure-warden.yml.tt
171
171
  - lib/bosh/gen/generators/new_release_generator/templates/templates/jobs.yml.tt
172
172
  - lib/bosh/gen/generators/new_release_generator/templates/templates/make_manifest.tt
173
- - lib/bosh/gen/generators/new_release_generator/templates/templates/properties.yml.tt
174
173
  - lib/bosh/gen/generators/new_release_generator/templates/templates/stub.yml.tt
174
+ - lib/bosh/gen/generators/package_apt_generator.rb
175
+ - lib/bosh/gen/generators/package_apt_generator/templates/.gitkeep
176
+ - lib/bosh/gen/generators/package_apt_generator/templates/Vagrantfile
177
+ - lib/bosh/gen/generators/package_apt_generator/templates/src/apt/%name%/aptfile.tt
178
+ - lib/bosh/gen/generators/package_apt_generator/templates/src/apt/%name%/profile.sh.tt
179
+ - lib/bosh/gen/generators/package_apt_generator/templates/src/apt/fetch_debs.sh
175
180
  - lib/bosh/gen/generators/package_generator.rb
176
181
  - lib/bosh/gen/generators/package_generator/templates/.gitkeep
177
182
  - lib/bosh/gen/generators/package_source_generator.rb
@@ -239,17 +244,17 @@ require_paths:
239
244
  - lib
240
245
  required_ruby_version: !ruby/object:Gem::Requirement
241
246
  requirements:
242
- - - ! '>='
247
+ - - ">="
243
248
  - !ruby/object:Gem::Version
244
249
  version: '0'
245
250
  required_rubygems_version: !ruby/object:Gem::Requirement
246
251
  requirements:
247
- - - ! '>='
252
+ - - ">="
248
253
  - !ruby/object:Gem::Version
249
254
  version: '0'
250
255
  requirements: []
251
256
  rubyforge_project:
252
- rubygems_version: 2.1.11
257
+ rubygems_version: 2.2.0
253
258
  signing_key:
254
259
  specification_version: 4
255
260
  summary: ''
@@ -1,5 +0,0 @@
1
- properties:
2
- networks:
3
- apps: <%= project_name_underscored %>1
4
-
5
- <%= project_name_underscored %>: {}