sprinkle 0.2.3 → 0.2.4

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/CREDITS CHANGED
@@ -1,7 +1,7 @@
1
1
  = CREDITS
2
2
 
3
3
  Many thanks to the following people who have submitted ideas, patches, helped with testing
4
- and/or generally provided support to Sprinke, I really appreciate your help:
4
+ and/or generally provided support to Sprinkle, I really appreciate your help:
5
5
 
6
6
  Kristin Baumann (http://crafterm.net/kristin/blog/)
7
7
  Ben Schwarz (http://germanforblack.com/)
@@ -24,3 +24,6 @@ Jacob Harris (http://open.nytimes.com)
24
24
  Justin Pease (http://jit.nuance9.com)
25
25
  Tobias Lütke (http://blog.leetsoft.com)
26
26
  Josh Reynolds (http://github.com/jreynolds)
27
+ Jan Ulbrich (http://www.ulbrich.net)
28
+
29
+ The transfer installer contains a piece of exception reporting code copied from the Chef library (http://wiki.opscode.com/display/chef/Home)
data/Manifest.txt CHANGED
@@ -2,7 +2,7 @@ CREDITS
2
2
  History.txt
3
3
  MIT-LICENSE
4
4
  Manifest.txt
5
- README.txt
5
+ README.markdown
6
6
  Rakefile
7
7
  bin/sprinkle
8
8
  config/hoe.rb
@@ -1,12 +1,12 @@
1
- = SPRINKLE
1
+ # SPRINKLE
2
2
 
3
- http://redartisan.com/2008/5/27/sprinkle-intro
4
- http://github.com/crafterm/sprinkle
5
- http://github.com/benschwarz/passenger-stack
6
- http://www.vimeo.com/2888665
7
- http://redartisan.lighthouseapp.com/projects/25275-sprinkle/tickets
3
+ * <http://redartisan.com/2008/5/27/sprinkle-intro>
4
+ * <http://github.com/crafterm/sprinkle>
5
+ * <http://github.com/benschwarz/passenger-stack>
6
+ * <http://www.vimeo.com/2888665>
7
+ * <http://redartisan.lighthouseapp.com/projects/25275-sprinkle/tickets>
8
8
 
9
- == DESCRIPTION:
9
+ ## DESCRIPTION:
10
10
 
11
11
  Sprinkle is a software provisioning tool you can use to build remote servers with, after the base operating
12
12
  system has been installed. For example, to install a Rails or Merb stack on a brand new slice directly after
@@ -208,18 +208,18 @@ and Git (via source with dependencies from APT):
208
208
 
209
209
  end
210
210
 
211
- Please see the examples directory for more complete examples of Sprinkle deployment scripts, and also the Passenger Stack github page and video by Ben Schwarz (http://github.com/benschwarz/passenger-stack and http://www.vimeo.com/2888665 respectively).
211
+ Please see the examples directory for more complete examples of Sprinkle deployment scripts, and also the Passenger Stack github page and video by Ben Schwarz (<http://github.com/benschwarz/passenger-stack> and <http://www.vimeo.com/2888665> respectively).
212
212
 
213
213
  Sprinkle is a work in progress and I'm excited to hear if anyone finds it useful - please feel free to
214
214
  comment, ask any questions, or send in any ideas, patches, bugs. All most welcome.
215
215
 
216
216
  Marcus Crafter <crafterm@redartisan.com>
217
217
 
218
- == LICENSE:
218
+ ## LICENSE:
219
219
 
220
220
  (The MIT License)
221
221
 
222
- Copyright (c) 2008 Marcus Crafter <crafterm@redartisan.com>
222
+ Copyright (c) 2008-2009 Marcus Crafter <crafterm@redartisan.com>
223
223
 
224
224
  Permission is hereby granted, free of charge, to any person obtaining
225
225
  a copy of this software and associated documentation files (the
@@ -3,7 +3,8 @@
3
3
  package :ruby do
4
4
  description 'Ruby Virtual Machine'
5
5
  version '1.8.6'
6
- source "ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-#{version}-p111.tar.gz" # implicit :style => :gnu
6
+ patchlevel '369'
7
+ source "ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-#{version}-p#{patchlevel}.tar.gz" # implicit :style => :gnu
7
8
  requires :ruby_dependencies
8
9
  end
9
10
 
@@ -14,8 +15,8 @@ end
14
15
 
15
16
  package :rubygems do
16
17
  description 'Ruby Gems Package Management System'
17
- version '1.2.0'
18
- source "http://rubyforge.org/frs/download.php/38646/rubygems-#{version}.tgz" do
18
+ version '1.3.5'
19
+ source "http://rubyforge.org/frs/download.php/60718/rubygems-#{version}.tgz" do
19
20
  custom_install 'ruby setup.rb'
20
21
  end
21
22
  requires :ruby
@@ -24,5 +25,5 @@ end
24
25
  package :rails do
25
26
  description 'Ruby on Rails'
26
27
  gem 'rails'
27
- version '2.1.0'
28
+ version '2.3.3'
28
29
  end
@@ -1,6 +1,6 @@
1
1
  package :git, :provides => :scm do
2
2
  description 'Git Distributed Version Control'
3
- version '1.5.6.3'
3
+ version '1.6.3.3'
4
4
  source "http://kernel.org/pub/software/scm/git/git-#{version}.tar.gz"
5
5
  requires :git_dependencies
6
6
  end
@@ -1,6 +1,6 @@
1
1
  package :sphinx, :provides => :search do
2
2
  description 'MySQL full text search engine'
3
- version '0.9.8-rc2'
3
+ version '0.9.8.1'
4
4
  source "http://www.sphinxsearch.com/downloads/sphinx-#{version}.tar.gz"
5
5
  requires :mysql_dev
6
6
  end
@@ -1,7 +1,7 @@
1
1
  package :mongrel do
2
2
  description 'Mongrel Application Server'
3
3
  gem 'mongrel'
4
- version '1.1.4'
4
+ version '1.1.5'
5
5
  end
6
6
 
7
7
  package :mongrel_cluster, :provides => :appserver do
@@ -13,7 +13,7 @@ end
13
13
 
14
14
  package :apache, :provides => :webserver do
15
15
  description 'Apache 2 HTTP Server'
16
- version '2.2.9'
16
+ version '2.2.11'
17
17
  source "http://www.apache.org/dist/httpd/httpd-#{version}.tar.bz2" do
18
18
  enable %w( mods-shared=all proxy proxy-balancer proxy-http rewrite cache headers ssl deflate so )
19
19
  prefix "/opt/local/apache2-#{version}"
@@ -35,7 +35,7 @@ require 'packages/scm'
35
35
  # the user is requested to select which one to use.
36
36
 
37
37
  policy :rails, :roles => :app do
38
- requires :rails, :version => '2.1.0'
38
+ requires :rails, :version => '2.3.3'
39
39
  requires :appserver
40
40
  requires :database
41
41
  requires :webserver
@@ -44,7 +44,7 @@ module Sprinkle
44
44
 
45
45
  def install_commands #:nodoc:
46
46
  command = @options[:dependencies_only] ? 'build-dep' : 'install'
47
- "DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get -qyu #{command} #{@packages.join(' ')}"
47
+ "env DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get --force-yes -qyu #{command} #{@packages.join(' ')}"
48
48
  end
49
49
 
50
50
  end
@@ -45,7 +45,7 @@ end
45
45
 
46
46
  module Sprinkle
47
47
  module Installers
48
- # Beware, strange "installer" coming your way.
48
+ # Beware, another strange "installer" coming your way.
49
49
  #
50
50
  # = File transfer installer
51
51
  #
@@ -73,6 +73,11 @@ module Sprinkle
73
73
  # If you pass the option :render => true, this tells transfer that the source file
74
74
  # is an ERB template to be rendered locally before being transferred (you can declare
75
75
  # variables in the package scope). When render is true, recursive is turned off.
76
+ #
77
+ # package :nginx_conf do
78
+ # nginx_port = 8080
79
+ # transfer 'files/nginx.conf', '/etc/nginx.conf', :render => true
80
+ # end
76
81
  #
77
82
  # Finally, should you need to run commands before or after the file transfer (making
78
83
  # directories or changing permissions), you can use the pre/post :install directives
@@ -116,6 +116,7 @@ module Sprinkle
116
116
  @provides = metadata[:provides]
117
117
  @dependencies = []
118
118
  @recommends = []
119
+ @optional = []
119
120
  @verifications = []
120
121
  self.instance_eval &block
121
122
  end
@@ -233,12 +234,17 @@ module Sprinkle
233
234
  @recommends.flatten!
234
235
  end
235
236
 
237
+ def optional(*packages)
238
+ @optional << packages
239
+ @optional.flatten!
240
+ end
241
+
236
242
  def tree(depth = 1, &block)
237
243
  packages = []
238
244
 
239
245
  @recommends.each do |dep|
240
246
  package = PACKAGES[dep]
241
- next unless package # skip missing recommended packages as they can be optional
247
+ next unless package # skip missing recommended packages as they're allowed to not exist
242
248
  block.call(self, package, depth) if block
243
249
  packages << package.tree(depth + 1, &block)
244
250
  end
@@ -253,6 +259,15 @@ module Sprinkle
253
259
  end
254
260
 
255
261
  packages << self
262
+
263
+ @optional.each do |dep|
264
+ package = PACKAGES[dep]
265
+ next unless package # skip missing optional packages as they're allow to not exist
266
+ block.call(self, package, depth) if block
267
+ packages << package.tree(depth + 1, &block)
268
+ end
269
+
270
+ packages
256
271
  end
257
272
 
258
273
  def to_s; @name; end
@@ -31,6 +31,23 @@ module Sprinkle
31
31
  @commands << "[ -n \"`echo \\`which #{path}\\``\" ]"
32
32
  end
33
33
  end
34
+
35
+ # Same as has_executable but with checking for e certain version number.
36
+ # Last option is the parameter to append for getting the version (which
37
+ # defaults to "-v").
38
+ def has_executable_with_version(path, version, get_version = '-v')
39
+ if path.include?('/')
40
+ @commands << "[ -x #{path} -a -n \"`#{path} #{get_version} 2> /dev/null | egrep -e \\\"#{version}\\\"`\" ]"
41
+ else
42
+ @commands << "[ -n \"`echo \\`which #{path}\\``\" -a -n \"`\\`which #{path}\\` #{get_version} 2>&1 | egrep -e \\\"#{version}\\\"`\" ]"
43
+ end
44
+ end
45
+
46
+ # Same as has_executable but checking output of a certain command
47
+ # with grep.
48
+ def has_version_in_grep(cmd, version)
49
+ @commands << "[ -n \"`#{cmd} 2> /dev/null | egrep -e \\\"#{version}\\\"`\" ]"
50
+ end
34
51
  end
35
52
  end
36
53
  end
@@ -2,7 +2,7 @@ module Sprinkle #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -40,15 +40,15 @@ describe Sprinkle::Installers::Apt do
40
40
  end
41
41
 
42
42
  it 'should invoke the apt installer for all specified packages' do
43
- @install_commands.should =~ /apt-get -qyu install ruby/
43
+ @install_commands.should =~ /apt-get --force-yes -qyu install ruby/
44
44
  end
45
45
 
46
46
  it 'should specify a non interactive mode to the apt installer' do
47
- @install_commands.should =~ /DEBIAN_FRONTEND=noninteractive/
47
+ @install_commands.should =~ /env DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive/
48
48
  end
49
49
 
50
50
  it 'should automatically insert pre/post commands for the specified package' do
51
- @installer.send(:install_sequence).should == [ 'op1', %(DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get -qyu install ruby), 'op2' ]
51
+ @installer.send(:install_sequence).should == [ 'op1', %(env DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get --force-yes -qyu install ruby), 'op2' ]
52
52
  end
53
53
 
54
54
  it 'should install a specific version if defined'
@@ -63,7 +63,7 @@ describe Sprinkle::Installers::Apt do
63
63
  end
64
64
 
65
65
  it 'should invoke the apt installer with build-dep command for all specified packages' do
66
- @install_commands.should =~ /apt-get -qyu build-dep ruby/
66
+ @install_commands.should =~ /apt-get --force-yes -qyu build-dep ruby/
67
67
  end
68
68
 
69
69
  end
@@ -83,6 +83,13 @@ CODE
83
83
  pkg.recommends.should == [:webserver, :database]
84
84
  end
85
85
 
86
+ it 'should optionally accept optional dependencies' do
87
+ pkg = package @name do
88
+ optional :webserver_configuration, :database_configuration
89
+ end
90
+ pkg.optional.should == [:webserver_configuration, :database_configuration]
91
+ end
92
+
86
93
  it 'should optionally define a virtual package implementation' do
87
94
  pkg = package @name, :provides => :database do; end
88
95
  pkg.provides.should == :database
@@ -338,6 +345,7 @@ CODE
338
345
  @b = package :b do; requires :c; end
339
346
  @c = package :c do; recommends :d; end
340
347
  @d = package :d do; end
348
+ @e = package :e do; optional :d; end
341
349
  end
342
350
 
343
351
  it 'should be able to return a dependency hierarchy tree' do
@@ -345,12 +353,25 @@ CODE
345
353
  @b.tree.flatten.should == [ @d, @c, @b ]
346
354
  @c.tree.flatten.should == [ @d, @c ]
347
355
  @d.tree.flatten.should == [ @d ]
356
+ @e.tree.flatten.should == [ @e, @d ]
348
357
  end
349
358
 
350
359
  describe 'with missing recommendations' do
351
360
 
352
361
  before do
353
- @d.recommends :e
362
+ @d.recommends :z
363
+ end
364
+
365
+ it 'should ignore missing recommendations' do
366
+ @d.tree.flatten.should == [ @d ]
367
+ end
368
+
369
+ end
370
+
371
+ describe 'with missing optional packages' do
372
+
373
+ before do
374
+ @d.optional :z
354
375
  end
355
376
 
356
377
  it 'should ignore missing recommendations' do
data/sprinkle.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{sprinkle}
3
- s.version = "0.2.3"
3
+ s.version = "0.2.4"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
6
  s.authors = ["Marcus Crafter", "Mitchell Hashimoto"]
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
9
9
  s.description = %q{Ruby DSL based software provisioning tool}
10
10
  s.email = ["crafterm@redartisan.com", "mitchell.hashimoto@citrusbyte.com"]
11
11
  s.executables = ["sprinkle"]
12
- s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
13
- s.files = ["CREDITS", "History.txt", "MIT-LICENSE", "Manifest.txt", "README.txt", "Rakefile", "bin/sprinkle",
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.markdown"]
13
+ s.files = ["CREDITS", "History.txt", "MIT-LICENSE", "Manifest.txt", "README.markdown", "Rakefile", "bin/sprinkle",
14
14
  "config/hoe.rb", "config/requirements.rb", "examples/packages/build_essential.rb",
15
15
  "examples/packages/databases/mysql.rb", "examples/packages/databases/sqlite3.rb",
16
16
  "examples/packages/phusion.rb", "examples/packages/ruby/rails.rb", "examples/packages/ruby/ruby.rb",
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
42
42
  "spec/sprinkle/script_spec.rb", "spec/sprinkle/sprinkle_spec.rb", "spec/sprinkle/installers/rake_spec.rb", "spec/sprinkle/verify_spec.rb"]
43
43
  s.has_rdoc = true
44
44
  s.homepage = %q{http://sprinkle.rubyforge.org}
45
- s.rdoc_options = ["--main", "README.txt"]
45
+ s.rdoc_options = ["--main", "README.markdown"]
46
46
  s.require_paths = ["lib"]
47
47
  s.rubyforge_project = %q{sprinkle}
48
48
  s.rubygems_version = %q{1.3.0}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprinkle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcus Crafter
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-24 00:00:00 +10:00
12
+ date: 2009-07-25 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -62,13 +62,12 @@ extensions: []
62
62
  extra_rdoc_files:
63
63
  - History.txt
64
64
  - Manifest.txt
65
- - README.txt
66
65
  files:
67
66
  - CREDITS
68
67
  - History.txt
69
68
  - MIT-LICENSE
70
69
  - Manifest.txt
71
- - README.txt
70
+ - README.markdown
72
71
  - Rakefile
73
72
  - bin/sprinkle
74
73
  - config/hoe.rb