Class: Sprinkle::Actors::Capistrano
- Defined in:
- lib/sprinkle/actors/capistrano.rb
Overview
The Capistrano actor uses Capistrano to define your roles and deliver commands to your remote servers. You’ll need the capistrano gem installed.
The only configuration option is to specify a recipe.
deployment do
delivery :capistrano do
recipe 'deploy'
recipe 'more'
end
end
Recipes is given a list of files which capistrano will include and load. These recipes are mainly to set variables such as :user, :password, and to set the app domain which will be sprinkled.
Instance Attribute Summary collapse
-
#config ⇒ Object
:nodoc:.
-
#loaded_recipes ⇒ Object
:nodoc:.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(&block) ⇒ Capistrano
constructor
:nodoc:.
-
#install(installer, roles, opts = {}) ⇒ Object
:nodoc:.
-
#process(name, commands, roles, opts = {}) ⇒ Object
:nodoc:.
-
#recipe(scripts) ⇒ Object
Defines a recipe file which will be included by capistrano.
-
#recipes(scripts) ⇒ Object
:nodoc:.
-
#servers_for_role?(roles) ⇒ Boolean
Determines if there are any servers for the given roles.
-
#sudo? ⇒ Boolean
:nodoc:.
-
#sudo_command ⇒ Object
:nodoc:.
-
#verify(verifier, roles, opts = {}) ⇒ Object
:nodoc:.
Constructor Details
#initialize(&block) ⇒ Capistrano
:nodoc:
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/sprinkle/actors/capistrano.rb', line 23 def initialize(&block) #:nodoc: @installer = nil @config = ::Capistrano::Configuration.new @config.logger.level = Sprinkle::OPTIONS[:verbose] ? ::Capistrano::Logger::INFO : ::Capistrano::Logger::IMPORTANT @config.set(:password) { ::Capistrano::CLI.password_prompt } # default sudo to false, we must turn it on @config.set(:run_method) { @config.fetch(:use_sudo, false) ? :sudo : :run } @config.set(:_sprinkle_actor, self) def @config.recipes(script) _sprinkle_actor.recipes(script) end if block @config.instance_eval(&block) else @config.load "Capfile" if File.exist?("Capfile") end end |
Instance Attribute Details
#config ⇒ Object
:nodoc:
21 22 23 |
# File 'lib/sprinkle/actors/capistrano.rb', line 21 def config @config end |
#loaded_recipes ⇒ Object
:nodoc:
21 22 23 |
# File 'lib/sprinkle/actors/capistrano.rb', line 21 def loaded_recipes @loaded_recipes end |
Class Method Details
.recipes(script) ⇒ Object
33 34 35 |
# File 'lib/sprinkle/actors/capistrano.rb', line 33 def @config.recipes(script) _sprinkle_actor.recipes(script) end |
Instance Method Details
#install(installer, roles, opts = {}) ⇒ Object
:nodoc:
83 84 85 86 87 88 89 90 |
# File 'lib/sprinkle/actors/capistrano.rb', line 83 def install(installer, roles, opts = {}) #:nodoc: @installer = installer process(installer.package.name, installer.install_sequence, roles, opts) rescue ::Capistrano::CommandError => e raise_error(e) ensure @installer = nil end |
#process(name, commands, roles, opts = {}) ⇒ Object
:nodoc:
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/sprinkle/actors/capistrano.rb', line 98 def process(name, commands, roles, opts = {}) #:nodoc: inst=@installer @log_recorder = log_recorder = Sprinkle::Utility::LogRecorder.new commands = commands.map {|x| rewrite_command(x)} define_task(name, roles) do via = fetch(:run_method) commands.each do |command| if command.is_a? Commands::Transfer upload command.source, command.destination, :via => :scp, :recursive => command.recursive? elsif command.is_a? Commands::Reconnect teardown_connections_to(sessions.keys) else # this reset the log log_recorder.reset command invoke_command(command, {:via => via}) do |ch, stream, out| ::Capistrano::Configuration.default_io_proc.call(ch, stream, out) if Sprinkle::OPTIONS[:verbose] log_recorder.log(stream, out) end end end end run_task(name, opts) end |
#recipe(scripts) ⇒ Object
Defines a recipe file which will be included by capistrano. Use these recipe files to set capistrano specific configurations. Default recipe included is “deploy.” But if any other recipe is specified, it will include that instead. Multiple recipes may be specified through multiple recipes calls, an example:
deployment do
delivery :capistrano do
recipe 'deploy'
recipes 'magic_beans', 'normal_beans'
end
end
71 72 73 74 75 76 77 |
# File 'lib/sprinkle/actors/capistrano.rb', line 71 def recipe(scripts) @loaded_recipes ||= [] Array(scripts).each do |script| @config.load script @loaded_recipes << script end end |
#recipes(scripts) ⇒ Object
:nodoc:
79 80 81 |
# File 'lib/sprinkle/actors/capistrano.rb', line 79 def recipes(scripts) #:nodoc: recipe(scripts) end |
#servers_for_role?(roles) ⇒ Boolean
Determines if there are any servers for the given roles
53 54 55 56 |
# File 'lib/sprinkle/actors/capistrano.rb', line 53 def servers_for_role?(roles) #:nodoc: roles=Array(roles) roles.any? { |r| @config.roles.keys.include?(r) } end |
#sudo? ⇒ Boolean
:nodoc:
44 45 46 |
# File 'lib/sprinkle/actors/capistrano.rb', line 44 def sudo? #:nodoc: @config.fetch(:run_method) == :sudo end |
#sudo_command ⇒ Object
:nodoc:
48 49 50 |
# File 'lib/sprinkle/actors/capistrano.rb', line 48 def sudo_command #:nodoc: @config.sudo end |
#verify(verifier, roles, opts = {}) ⇒ Object
:nodoc:
92 93 94 95 96 |
# File 'lib/sprinkle/actors/capistrano.rb', line 92 def verify(verifier, roles, opts = {}) #:nodoc: process(verifier.package.name, verifier.commands, roles) rescue ::Capistrano::CommandError return false end |