bosh-gen 0.14.0 → 0.15.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
- 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 %>: {}