Class: RailsPwnerer::App::Scripts

Inherits:
Object
  • Object
show all
Includes:
Base
Defined in:
lib/rails_pwnerer/app/scripts.rb

Overview

runs custom scripts on app events

Instance Method Summary collapse

Methods included from Base

_setup_unix, _setup_windows, all_packages, all_packages_without_caching, #atomic_erase, #atomic_read, #atomic_write, #best_package_matching, #check_rails_root, #control_boot_script, #cpu_cores, #current_user, #gem_exists?, #gid_for_username, #group_for_username, #hook_boot_script, #install_gem, #install_gems, #install_package, #install_package_impl, #install_package_matching, #install_packages, #kill_tree, #os_distro, #path_to_boot_script, #path_to_boot_script_defaults, #path_to_gem, #process_info, #prompt_user_for_password, #remove_package, #remove_packages, #search_packages, #uid_for_username, #unroll_collection, #update_all_packages, #update_all_packages_impl, #update_gems, #update_package_metadata, #upgrade_gem, #upgrade_gems, #upgrade_package, #upgrade_package_impl, #upgrade_packages, #with_package_source, #with_temp_dir

Instance Method Details

#control_all(action) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/rails_pwnerer/app/scripts.rb', line 72

def control_all(action)
  RailsPwnerer::Config.all_applications.each do |ai|
    run_script ai[0], ai[1], (case action
    when :pre_start then 'pre_start'
    when :post_start then 'post_start'
    when :pre_stop then 'pre_stop'
    when :post_stop then 'post_stop'
    when :pre_reset then 'pre_reset'
    when :post_reset then 'post_reset'
    end)
  end 
end

#post_reset(app_name, instance_name) ⇒ Object



68
69
70
# File 'lib/rails_pwnerer/app/scripts.rb', line 68

def post_reset(app_name, instance_name)
  run_script app_name, instance_name, 'post_reset'
end

#post_start(app_name, instance_name) ⇒ Object



56
57
58
# File 'lib/rails_pwnerer/app/scripts.rb', line 56

def post_start(app_name, instance_name)
  run_script app_name, instance_name, 'post_start'
end

#post_stop(app_name, instance_name) ⇒ Object



62
63
64
# File 'lib/rails_pwnerer/app/scripts.rb', line 62

def post_stop(app_name, instance_name)
  run_script app_name, instance_name, 'post_stop'
end

#pre_reset(app_name, instance_name) ⇒ Object



65
66
67
# File 'lib/rails_pwnerer/app/scripts.rb', line 65

def pre_reset(app_name, instance_name)
  run_script app_name, instance_name, 'pre_reset'
end

#pre_start(app_name, instance_name) ⇒ Object



53
54
55
# File 'lib/rails_pwnerer/app/scripts.rb', line 53

def pre_start(app_name, instance_name)
  run_script app_name, instance_name, 'pre_start'
end

#pre_stop(app_name, instance_name) ⇒ Object



59
60
61
# File 'lib/rails_pwnerer/app/scripts.rb', line 59

def pre_stop(app_name, instance_name)
  run_script app_name, instance_name, 'pre_stop'
end

#remove(app_name, instance_name) ⇒ Object



49
50
51
# File 'lib/rails_pwnerer/app/scripts.rb', line 49

def remove(app_name, instance_name)
  run_script app_name, instance_name, 'remove'
end

#run_script(app_name, instance_name, script_name) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/rails_pwnerer/app/scripts.rb', line 6

def run_script(app_name, instance_name, script_name)
  app_config = RailsPwnerer::Config[app_name, instance_name]    
  pwnerer_user = app_config[:pwnerer_user]
  pwnerer_uid = uid_for_username(pwnerer_user)
  pwnerer_gid = gid_for_username(pwnerer_user)
      
  return unless app_path = app_config[:app_path]  
  
  Dir.chdir app_path do
    script_file = Dir.glob(File.join('script/rails_pwnerer', script_name + '*')).first
    return if script_file.nil?
    # run as super-user if the script ends in _su or in _su.extension (e.g. _su.rb)
    su_mode = (script_file =~ /\_su$/) || (script_file =~ /\_su\.[^.]*$/)
    # make sure the script is executable
    mode = File.stat(script_file).mode
    File.chmod((mode | 0100) & 0777, script_file)
    File.chown(pwnerer_uid, pwnerer_gid, script_file)
    
    # run the script under the app's user
    pid = Process.fork do
      unless su_mode
        Process.uid = pwnerer_uid        
        Process.gid = pwnerer_gid
        Process.egid = pwnerer_gid
        Process.euid = pwnerer_uid
      end
      Dir.chdir app_path do
        script_prefix = (script_file[0] == ?/) ? '' : './'
        Kernel.system %Q|#{script_prefix}#{script_file} "#{app_name}" "#{instance_name}"|
      end
    end
    Process.wait pid
  end
end

#setup(app_name, instance_name) ⇒ Object



41
42
43
# File 'lib/rails_pwnerer/app/scripts.rb', line 41

def setup(app_name, instance_name)
  run_script app_name, instance_name, 'setup'
end

#update(app_name, instance_name) ⇒ Object



45
46
47
# File 'lib/rails_pwnerer/app/scripts.rb', line 45

def update(app_name, instance_name)
  run_script app_name, instance_name, 'update'
end