sprinkle 0.2.3 → 0.2.4

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