dhill-sprinkle 0.3.3.1

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.
Files changed (118) hide show
  1. data/.gitignore +3 -0
  2. data/CREDITS +33 -0
  3. data/Gemfile +4 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.markdown +242 -0
  6. data/Rakefile +2 -0
  7. data/VERSION +1 -0
  8. data/bin/sprinkle +95 -0
  9. data/examples/packages/build_essential.rb +9 -0
  10. data/examples/packages/databases/mysql.rb +13 -0
  11. data/examples/packages/databases/sqlite3.rb +16 -0
  12. data/examples/packages/phusion.rb +55 -0
  13. data/examples/packages/ruby/rails.rb +9 -0
  14. data/examples/packages/ruby/ruby.rb +17 -0
  15. data/examples/packages/ruby/rubygems.rb +17 -0
  16. data/examples/packages/scm/git.rb +11 -0
  17. data/examples/packages/scm/subversion.rb +4 -0
  18. data/examples/packages/servers/apache.rb +15 -0
  19. data/examples/rails/README +15 -0
  20. data/examples/rails/deploy.rb +2 -0
  21. data/examples/rails/packages/database.rb +9 -0
  22. data/examples/rails/packages/essential.rb +9 -0
  23. data/examples/rails/packages/rails.rb +29 -0
  24. data/examples/rails/packages/scm.rb +11 -0
  25. data/examples/rails/packages/search.rb +11 -0
  26. data/examples/rails/packages/server.rb +28 -0
  27. data/examples/rails/rails.rb +73 -0
  28. data/examples/sprinkle/sprinkle.rb +38 -0
  29. data/lib/sprinkle.rb +3 -0
  30. data/lib/sprinkle/actors/actors.rb +17 -0
  31. data/lib/sprinkle/actors/capistrano.rb +146 -0
  32. data/lib/sprinkle/actors/local.rb +37 -0
  33. data/lib/sprinkle/actors/ssh.rb +177 -0
  34. data/lib/sprinkle/actors/vlad.rb +83 -0
  35. data/lib/sprinkle/configurable.rb +31 -0
  36. data/lib/sprinkle/deployment.rb +73 -0
  37. data/lib/sprinkle/extensions/arbitrary_options.rb +10 -0
  38. data/lib/sprinkle/extensions/array.rb +5 -0
  39. data/lib/sprinkle/extensions/blank_slate.rb +5 -0
  40. data/lib/sprinkle/extensions/dsl_accessor.rb +15 -0
  41. data/lib/sprinkle/extensions/string.rb +10 -0
  42. data/lib/sprinkle/extensions/symbol.rb +7 -0
  43. data/lib/sprinkle/installers/apt.rb +52 -0
  44. data/lib/sprinkle/installers/binary.rb +46 -0
  45. data/lib/sprinkle/installers/bsd_port.rb +33 -0
  46. data/lib/sprinkle/installers/deb.rb +41 -0
  47. data/lib/sprinkle/installers/freebsd_pkg.rb +37 -0
  48. data/lib/sprinkle/installers/freebsd_portinstall.rb +36 -0
  49. data/lib/sprinkle/installers/gem.rb +64 -0
  50. data/lib/sprinkle/installers/install_package.rb +79 -0
  51. data/lib/sprinkle/installers/installer.rb +123 -0
  52. data/lib/sprinkle/installers/mac_port.rb +38 -0
  53. data/lib/sprinkle/installers/noop.rb +20 -0
  54. data/lib/sprinkle/installers/openbsd_pkg.rb +47 -0
  55. data/lib/sprinkle/installers/opensolaris_pkg.rb +43 -0
  56. data/lib/sprinkle/installers/push_text.rb +45 -0
  57. data/lib/sprinkle/installers/rake.rb +37 -0
  58. data/lib/sprinkle/installers/replace_text.rb +45 -0
  59. data/lib/sprinkle/installers/rpm.rb +37 -0
  60. data/lib/sprinkle/installers/runner.rb +18 -0
  61. data/lib/sprinkle/installers/smart.rb +29 -0
  62. data/lib/sprinkle/installers/source.rb +201 -0
  63. data/lib/sprinkle/installers/transfer.rb +178 -0
  64. data/lib/sprinkle/installers/user.rb +15 -0
  65. data/lib/sprinkle/installers/yum.rb +37 -0
  66. data/lib/sprinkle/installers/zypper.rb +43 -0
  67. data/lib/sprinkle/package.rb +326 -0
  68. data/lib/sprinkle/policy.rb +125 -0
  69. data/lib/sprinkle/script.rb +23 -0
  70. data/lib/sprinkle/verifiers/apt.rb +21 -0
  71. data/lib/sprinkle/verifiers/directory.rb +16 -0
  72. data/lib/sprinkle/verifiers/executable.rb +53 -0
  73. data/lib/sprinkle/verifiers/file.rb +34 -0
  74. data/lib/sprinkle/verifiers/package.rb +26 -0
  75. data/lib/sprinkle/verifiers/process.rb +21 -0
  76. data/lib/sprinkle/verifiers/rpm.rb +21 -0
  77. data/lib/sprinkle/verifiers/ruby.rb +25 -0
  78. data/lib/sprinkle/verifiers/symlink.rb +30 -0
  79. data/lib/sprinkle/verify.rb +114 -0
  80. data/lib/sprinkle/version.rb +3 -0
  81. data/script/console +8 -0
  82. data/script/destroy +14 -0
  83. data/script/generate +14 -0
  84. data/spec/spec.opts +1 -0
  85. data/spec/spec_helper.rb +17 -0
  86. data/spec/sprinkle/actors/capistrano_spec.rb +265 -0
  87. data/spec/sprinkle/actors/local_spec.rb +29 -0
  88. data/spec/sprinkle/configurable_spec.rb +46 -0
  89. data/spec/sprinkle/deployment_spec.rb +80 -0
  90. data/spec/sprinkle/extensions/array_spec.rb +19 -0
  91. data/spec/sprinkle/extensions/string_spec.rb +21 -0
  92. data/spec/sprinkle/installers/apt_spec.rb +70 -0
  93. data/spec/sprinkle/installers/bsd_port_spec.rb +42 -0
  94. data/spec/sprinkle/installers/freebsd_pkg_spec.rb +49 -0
  95. data/spec/sprinkle/installers/freebsd_portinstall_spec.rb +42 -0
  96. data/spec/sprinkle/installers/gem_spec.rb +107 -0
  97. data/spec/sprinkle/installers/installer_spec.rb +151 -0
  98. data/spec/sprinkle/installers/mac_port_spec.rb +42 -0
  99. data/spec/sprinkle/installers/noop_spec.rb +23 -0
  100. data/spec/sprinkle/installers/openbsd_pkg_spec.rb +49 -0
  101. data/spec/sprinkle/installers/opensolaris_pkg_spec.rb +49 -0
  102. data/spec/sprinkle/installers/push_text_spec.rb +66 -0
  103. data/spec/sprinkle/installers/rake_spec.rb +29 -0
  104. data/spec/sprinkle/installers/replace_text_spec.rb +45 -0
  105. data/spec/sprinkle/installers/rpm_spec.rb +50 -0
  106. data/spec/sprinkle/installers/runner_spec.rb +31 -0
  107. data/spec/sprinkle/installers/source_spec.rb +371 -0
  108. data/spec/sprinkle/installers/transfer_spec.rb +98 -0
  109. data/spec/sprinkle/installers/yum_spec.rb +49 -0
  110. data/spec/sprinkle/installers/zypper_spec.rb +49 -0
  111. data/spec/sprinkle/package_spec.rb +474 -0
  112. data/spec/sprinkle/policy_spec.rb +126 -0
  113. data/spec/sprinkle/script_spec.rb +51 -0
  114. data/spec/sprinkle/sprinkle_spec.rb +25 -0
  115. data/spec/sprinkle/verify_spec.rb +173 -0
  116. data/sprinkle-0.3.3.1.gem +0 -0
  117. data/sprinkle.gemspec +26 -0
  118. metadata +281 -0
@@ -0,0 +1,55 @@
1
+ # Contains software created by Phusion.nl which is Ruby Enterprise Edition
2
+ # and mod_rails
3
+
4
+ package :ruby_enterprise do
5
+ description 'Ruby Enterprise Edition'
6
+ version '1.8.6-20080810'
7
+ source 'http://rubyforge.org/frs/download.php/41040/ruby-enterprise-1.8.6-20080810.tar.gz' do
8
+ custom_install 'echo -en "\n\n\n\n" | ./installer'
9
+
10
+ # Modify the passenger conf file to point to REE
11
+ post :install, 'sed -i "s|^PassengerRuby [/a-zA-Z0-9.]*$|PassengerRuby /opt/ruby-enterprise-1.8.6-20080810/bin/ruby|" /etc/apache2/extras/passenger.conf'
12
+
13
+ # Restart apache
14
+ post :install, '/etc/init.d/apache2 restart'
15
+ end
16
+
17
+ verify do
18
+ has_directory '/opt/ruby-enterprise-1.8.6-20080810'
19
+ has_executable '/opt/ruby-enterprise-1.8.6-20080810/bin/ruby'
20
+ end
21
+
22
+ requires :apache
23
+ requires :passenger
24
+ end
25
+
26
+ package :passenger, :provides => :appserver do
27
+ description 'Phusion Passenger (mod_rails)'
28
+ gem 'passenger' do
29
+ post :install, 'echo -en "\n\n\n\n" | passenger-install-apache2-module'
30
+
31
+ # Create the passenger conf file
32
+ post :install, 'mkdir /etc/apache2/extras'
33
+ post :install, 'touch /etc/apache2/extras/passenger.conf'
34
+ post :install, "echo 'Include /etc/apache2/extras/passenger.conf' >> /etc/apache2/apache2.conf"
35
+
36
+ [%q(LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so),
37
+ %q(PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3),
38
+ %q(PassengerRuby /usr/bin/ruby1.8),
39
+ %q(RailsEnv development)].each do |line|
40
+ post :install, "echo '#{line}' >> /etc/apache2/extras/passenger.conf"
41
+ end
42
+
43
+ # Restart apache to note changes
44
+ post :install, '/etc/init.d/apache2 restart'
45
+ end
46
+
47
+ verify do
48
+ has_file '/etc/apache2/extras/passenger.conf'
49
+ has_file '/usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so'
50
+ has_directory '/usr/lib/ruby/gems/1.8/gems/passenger-2.0.3'
51
+ end
52
+
53
+ requires :apache
54
+ requires :apache2_prefork_dev
55
+ end
@@ -0,0 +1,9 @@
1
+ package :rails do
2
+ description 'Ruby on Rails'
3
+ gem 'rails'
4
+ version '2.1.0'
5
+
6
+ verify do
7
+ has_executable 'rails'
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ package :ruby do
2
+ description 'Ruby Virtual Machine'
3
+ version '1.8.6'
4
+ apt %q(ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby) do
5
+ post :install, [%q(ln -s /usr/bin/ruby1.8 /usr/bin/ruby),
6
+ %q(ln -s /usr/bin/ri1.8 /usr/bin/ri),
7
+ %q(ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc),
8
+ %q(ln -s /usr/bin/irb1.8 /usr/bin/irb)]
9
+ end
10
+
11
+ verify 'binaries' do
12
+ has_file '/usr/bin/ruby1.8'
13
+ has_file '/usr/bin/ri1.8'
14
+ has_file '/usr/bin/rdoc1.8'
15
+ has_file '/usr/bin/irb1.8'
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ package :rubygems do
2
+ description 'Ruby Gems Package Management System'
3
+ version '1.2.0'
4
+ source "http://rubyforge.org/frs/download.php/38646/rubygems-#{version}.tgz" do
5
+ custom_install 'ruby setup.rb'
6
+ post :install, 'ln -s /usr/bin/gem1.8 /usr/bin/gem'
7
+ post :install, 'gem update'
8
+ post :install, 'gem update --system'
9
+ end
10
+
11
+ verify 'binary' do
12
+ has_file '/usr/bin/gem1.8'
13
+ has_symlink '/usr/bin/gem', '/usr/bin/gem1.8'
14
+ end
15
+
16
+ requires :ruby
17
+ end
@@ -0,0 +1,11 @@
1
+ package :git, :provides => :scm do
2
+ description 'Git Distributed Version Control'
3
+ version '1.5.6.3'
4
+ source "http://kernel.org/pub/software/scm/git/git-#{version}.tar.gz"
5
+ requires :git_dependencies
6
+ end
7
+
8
+ package :git_dependencies do
9
+ description 'Git Build Dependencies'
10
+ apt 'git', :dependencies_only => true
11
+ end
@@ -0,0 +1,4 @@
1
+ package :subversion, :provides => :scm do
2
+ description 'Subversion Version Control'
3
+ apt 'subversion'
4
+ end
@@ -0,0 +1,15 @@
1
+ package :apache, :provides => :webserver do
2
+ description 'Apache2 web server.'
3
+ apt 'apache2 apache2.2-common apache2-mpm-prefork apache2-utils libexpat1 ssl-cert' do
4
+ post :install, 'a2enmod rewrite'
5
+ end
6
+
7
+ verify do
8
+ has_process 'apache2'
9
+ end
10
+ end
11
+
12
+ package :apache2_prefork_dev do
13
+ description 'A dependency required by some packages.'
14
+ apt 'apache2-prefork-dev'
15
+ end
@@ -0,0 +1,15 @@
1
+ = Example Rails Sprinkle Deployment Script
2
+
3
+ The following example shows how you can provision Rails and associated packages onto a remote server (or set of servers).
4
+
5
+ == Usage:
6
+
7
+ $> sprinkle -s rails.rb
8
+
9
+ or in test mode:
10
+
11
+ $> sprinkle -t -s rails.rb
12
+
13
+ == Information
14
+
15
+ For more information, please see: http://github.com/crafterm/sprinkle/tree/master/README.markdown
@@ -0,0 +1,2 @@
1
+ set :user, 'root'
2
+ role :app, 'yourhost.com', :primary => true
@@ -0,0 +1,9 @@
1
+ package :mysql, :provides => :database do
2
+ description 'MySQL Database'
3
+ apt %w( mysql-server mysql-client )
4
+ end
5
+
6
+ package :mysql_driver do
7
+ description 'Ruby MySQL database driver'
8
+ gem 'mysql'
9
+ end
@@ -0,0 +1,9 @@
1
+ ## Special package, anything that defines a 'source' package means build-essential should be installed for Ubuntu
2
+
3
+ package :build_essential do
4
+ description 'Build tools'
5
+ apt 'build-essential' do
6
+ # Update the sources and upgrade the lists before we build essentials
7
+ pre :install, 'apt-get update'
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ ## Defines available packages
2
+
3
+ package :ruby do
4
+ description 'Ruby Virtual Machine'
5
+ version '1.8.6'
6
+ patchlevel '369'
7
+ source "ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-#{version}-p#{patchlevel}.tar.gz" # implicit :style => :gnu
8
+ requires :ruby_dependencies
9
+ end
10
+
11
+ package :ruby_dependencies do
12
+ description 'Ruby Virtual Machine Build Dependencies'
13
+ apt %w( bison zlib1g-dev libssl-dev libreadline5-dev libncurses5-dev file )
14
+ end
15
+
16
+ package :rubygems do
17
+ description 'Ruby Gems Package Management System'
18
+ version '1.3.5'
19
+ source "http://rubyforge.org/frs/download.php/60718/rubygems-#{version}.tgz" do
20
+ custom_install 'ruby setup.rb'
21
+ end
22
+ requires :ruby
23
+ end
24
+
25
+ package :rails do
26
+ description 'Ruby on Rails'
27
+ gem 'rails'
28
+ version '2.3.3'
29
+ end
@@ -0,0 +1,11 @@
1
+ package :git, :provides => :scm do
2
+ description 'Git Distributed Version Control'
3
+ version '1.6.3.3'
4
+ source "http://kernel.org/pub/software/scm/git/git-#{version}.tar.gz"
5
+ requires :git_dependencies
6
+ end
7
+
8
+ package :git_dependencies do
9
+ description 'Git Build Dependencies'
10
+ apt 'git', :dependencies_only => true
11
+ end
@@ -0,0 +1,11 @@
1
+ package :sphinx, :provides => :search do
2
+ description 'MySQL full text search engine'
3
+ version '0.9.8.1'
4
+ source "http://www.sphinxsearch.com/downloads/sphinx-#{version}.tar.gz"
5
+ requires :mysql_dev
6
+ end
7
+
8
+ package :mysql_dev do
9
+ description 'MySQL Database development package'
10
+ apt %w( libmysqlclient15-dev )
11
+ end
@@ -0,0 +1,28 @@
1
+ package :mongrel do
2
+ description 'Mongrel Application Server'
3
+ gem 'mongrel'
4
+ version '1.1.5'
5
+ end
6
+
7
+ package :mongrel_cluster, :provides => :appserver do
8
+ description 'Cluster Management for Mongrel'
9
+ gem 'mongrel_cluster'
10
+ version '1.0.5'
11
+ requires :mongrel
12
+ end
13
+
14
+ package :apache, :provides => :webserver do
15
+ description 'Apache 2 HTTP Server'
16
+ version '2.2.11'
17
+ source "http://www.apache.org/dist/httpd/httpd-#{version}.tar.bz2" do
18
+ enable %w( mods-shared=all proxy proxy-balancer proxy-http rewrite cache headers ssl deflate so )
19
+ prefix "/opt/local/apache2-#{version}"
20
+ post :install, 'install -m 755 support/apachectl /etc/init.d/apache2', 'update-rc.d -f apache2 defaults'
21
+ end
22
+ requires :apache_dependencies
23
+ end
24
+
25
+ package :apache_dependencies do
26
+ description 'Apache 2 HTTP Server Build Dependencies'
27
+ apt %w( openssl libtool mawk zlib1g-dev libssl-dev )
28
+ end
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env sprinkle -s
2
+
3
+ # Annotated Example Sprinkle Rails deployment script
4
+ #
5
+ # This is an example Sprinkle script configured to install Rails from gems, Apache, Ruby,
6
+ # Sphinx and Git from source, and mysql and Git dependencies from apt on an Ubuntu system.
7
+ #
8
+ # Installation is configured to run via capistrano (and an accompanying deploy.rb recipe script).
9
+ # Source based packages are downloaded and built into /usr/local on the remote system.
10
+ #
11
+ # A sprinkle script is separated into 3 different sections. Packages, policies and deployment:
12
+
13
+
14
+ # Packages (separate files for brevity)
15
+ #
16
+ # Defines the world of packages as we know it. Each package has a name and
17
+ # set of metadata including its installer type (eg. apt, source, gem, etc). Packages can have
18
+ # relationships to each other via dependencies.
19
+
20
+ require 'packages/essential'
21
+ require 'packages/rails'
22
+ require 'packages/database'
23
+ require 'packages/server'
24
+ require 'packages/search'
25
+ require 'packages/scm'
26
+
27
+
28
+ # Policies
29
+ #
30
+ # Names a group of packages (optionally with versions) that apply to a particular set of roles:
31
+ #
32
+ # Associates the rails policy to the application servers. Contains rails, and surrounding
33
+ # packages. Note, appserver, database, webserver and search are all virtual packages defined above.
34
+ # If there's only one implementation of a virtual package, it's selected automatically, otherwise
35
+ # the user is requested to select which one to use.
36
+
37
+ policy :rails, :roles => :app do
38
+ requires :rails, :version => '2.3.3'
39
+ requires :appserver
40
+ requires :database
41
+ requires :webserver
42
+ requires :search
43
+ requires :scm
44
+ end
45
+
46
+
47
+ # Deployment
48
+ #
49
+ # Defines script wide settings such as a delivery mechanism for executing commands on the target
50
+ # system (eg. capistrano), and installer defaults (eg. build locations, etc):
51
+ #
52
+ # Configures spinkle to use capistrano for delivery of commands to the remote machines (via
53
+ # the named 'deploy' recipe). Also configures 'source' installer defaults to put package gear
54
+ # in /usr/local
55
+
56
+ deployment do
57
+
58
+ # mechanism for deployment
59
+ delivery :capistrano do
60
+ recipes 'deploy'
61
+ end
62
+
63
+ # source based package installer defaults
64
+ source do
65
+ prefix '/usr/local'
66
+ archives '/usr/local/sources'
67
+ builds '/usr/local/build'
68
+ end
69
+
70
+ end
71
+
72
+ # End of script, given the above information, Spinkle will apply the defined policy on all roles using the
73
+ # deployment settings specified.
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env sprinkle -c -s
2
+
3
+ # Example of the simplest Sprinkle script to install a single gem on a remote host. This
4
+ # particular script assumes that rubygems (and ruby, etc) are already installed on the remote
5
+ # host. To see a larger example of installing an entire ruby, rubygems, gem stack from source,
6
+ # please see the rails example.
7
+
8
+ # Packages, only sprinkle is defined in this world
9
+
10
+ package :sprinkle do
11
+ description 'Sprinkle Provisioning Tool'
12
+ gem 'crafterm-sprinkle' do
13
+ source 'http://gems.github.com' # use alternate gem server
14
+ #repository '/opt/local/gems' # specify an alternate local gem repository
15
+ end
16
+ end
17
+
18
+
19
+ # Policies, sprinkle policy requires only the sprinkle gem
20
+
21
+ policy :sprinkle, :roles => :app do
22
+ requires :sprinkle
23
+ end
24
+
25
+
26
+ # Deployment settings
27
+
28
+ deployment do
29
+
30
+ # use vlad for deployment
31
+ delivery :vlad do
32
+ role :app, 'yourhost.com'
33
+ end
34
+
35
+ end
36
+
37
+ # End of script, given the above information, Spinkle will apply the defined policy on all roles using the
38
+ # deployment settings specified.
@@ -0,0 +1,3 @@
1
+ module Sprinkle
2
+ # Your code goes here...
3
+ end
@@ -0,0 +1,17 @@
1
+ #--
2
+ # The only point of this file is to give RDoc a definition for
3
+ # Sprinkle::Actors. This file in production is never actually included
4
+ # since ActiveSupport only on-demand loads classes which are needed
5
+ # and this module is never explicitly needed.
6
+ #++
7
+
8
+ module Sprinkle
9
+ # An actor is a method of command delivery to a remote machine. It is the
10
+ # layer between sprinkle and the SSH connection to run commands. This gives
11
+ # you the flexibility to define custom actors, for whatever purpose you need.
12
+ #
13
+ # 99% of the time, however, the two built-in actors Sprinkle::Actors::Capistrano
14
+ # and Sprinkle::Actors::Vlad will be enough.
15
+ module Actors
16
+ end
17
+ end
@@ -0,0 +1,146 @@
1
+ require 'capistrano/cli'
2
+
3
+ module Sprinkle
4
+ module Actors
5
+ # = Capistrano Delivery Method
6
+ #
7
+ # Capistrano is one of the delivery method options available out of the
8
+ # box with Sprinkle. If you have the capistrano gem install, you may use
9
+ # this delivery. The only configuration option available, and which is
10
+ # mandatory to include is +recipes+. An example:
11
+ #
12
+ # deployment do
13
+ # delivery :capistrano do
14
+ # recipes 'deploy'
15
+ # end
16
+ # end
17
+ #
18
+ # Recipes is given a list of files which capistrano will include and load.
19
+ # These recipes are mainly to set variables such as :user, :password, and to
20
+ # set the app domain which will be sprinkled.
21
+ class Capistrano
22
+ attr_accessor :config, :loaded_recipes #:nodoc:
23
+
24
+ def initialize(&block) #:nodoc:
25
+ @config = ::Capistrano::Configuration.new
26
+ @config.logger.level = Sprinkle::OPTIONS[:verbose] ? ::Capistrano::Logger::INFO : ::Capistrano::Logger::IMPORTANT
27
+ @config.set(:password) { ::Capistrano::CLI.password_prompt }
28
+
29
+ @config.set(:_sprinkle_actor, self)
30
+
31
+ def @config.recipes(script)
32
+ _sprinkle_actor.recipes(script)
33
+ end
34
+
35
+ if block
36
+ @config.instance_eval &block
37
+ else
38
+ @config.load 'deploy' # normally in the config directory for rails
39
+ end
40
+ end
41
+
42
+ # Defines a recipe file which will be included by capistrano. Use these
43
+ # recipe files to set capistrano specific configurations. Default recipe
44
+ # included is "deploy." But if any other recipe is specified, it will
45
+ # include that instead. Multiple recipes may be specified through multiple
46
+ # recipes calls, an example:
47
+ #
48
+ # deployment do
49
+ # delivery :capistrano do
50
+ # recipes 'deploy'
51
+ # recipes 'magic_beans'
52
+ # end
53
+ # end
54
+ def recipes(script)
55
+ @loaded_recipes ||= []
56
+ @config.load script
57
+ @loaded_recipes << script
58
+ end
59
+
60
+ def process(name, commands, roles, suppress_and_return_failures = false) #:nodoc:
61
+ define_task(name, roles) do
62
+ via = fetch(:run_method, :sudo)
63
+ # DWH 20110407 - output command sent to server for better status and debugging
64
+ puts ""
65
+ commands.each do |command|
66
+ # DWH 20110407 - output command sent to server for better status and debugging
67
+ puts " #{command.inspect}"
68
+ invoke_command command, :via => via
69
+ end
70
+ # DWH 20110407 - output command sent to server for better status and debugging
71
+ puts ""
72
+ end
73
+
74
+ begin
75
+ run(name)
76
+ return true
77
+ rescue ::Capistrano::CommandError => e
78
+ return false if suppress_and_return_failures
79
+
80
+ # Reraise error if we're not suppressing it
81
+ raise
82
+ end
83
+ end
84
+
85
+ def transfer(name, source, destination, roles, recursive = true, suppress_and_return_failures = false)
86
+ define_task(name, roles) do
87
+ upload source, destination, :via => :scp, :recursive => recursive
88
+ end
89
+
90
+ begin
91
+ run(name)
92
+ return true
93
+ rescue ::Capistrano::CommandError => e
94
+ return false if suppress_and_return_failures
95
+
96
+ # Reraise error if we're not suppressing it
97
+ raise
98
+ end
99
+ end
100
+
101
+ private
102
+
103
+ # REVISIT: can we set the description somehow?
104
+ def define_task(name, roles, &block)
105
+ @config.task task_sym(name), :roles => roles, &block
106
+ end
107
+
108
+ def run(task)
109
+ @config.send task_sym(task)
110
+ end
111
+
112
+ def task_sym(name)
113
+ "install_#{name.to_task_name}".to_sym
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ =begin
121
+
122
+ # channel: the SSH channel object used for this response
123
+ # stream: either :err or :out, for stderr or stdout responses
124
+ # output: the text that the server is sending, might be in chunks
125
+ run "apt-get update" do |channel, stream, output|
126
+ if output =~ /Are you sure?/
127
+ answer = Capistrano::CLI.ui.ask("Are you sure: ")
128
+ channel.send_data(answer + "\n")
129
+ else
130
+ # allow the default callback to be processed
131
+ Capistrano::Configuration.default_io_proc.call[channel, stream, output]
132
+ end
133
+ end
134
+
135
+
136
+
137
+ You can tell subversion to use a different username+password by
138
+ setting a couple variables:
139
+ set :svn_username, "my svn username"
140
+ set :svn_password, "my svn password"
141
+ If you don't want to set the password explicitly in your recipe like
142
+ that, you can make capistrano prompt you for it like this:
143
+ set(:svn_password) { Capistrano::CLI.password_prompt("Subversion
144
+ password: ") }
145
+ - Jamis
146
+ =end