simonmenke-shuttle 0.1.07

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 (48) hide show
  1. data/app_generators/engine/engine_generator.rb +39 -0
  2. data/app_generators/engine/templates/config/routes.rb +2 -0
  3. data/app_generators/engine/templates/init.rb +1 -0
  4. data/app_generators/engine/templates/lib/engine.rb +1 -0
  5. data/app_generators/engine/templates/rails/init.rb +1 -0
  6. data/bin/shuttle +20 -0
  7. data/lib/rubygems_plugin.rb +1 -0
  8. data/lib/shuttle/actor/actions.rb +76 -0
  9. data/lib/shuttle/actor.rb +23 -0
  10. data/lib/shuttle/actors/apache_actor.rb +56 -0
  11. data/lib/shuttle/actors/base_actor.rb +276 -0
  12. data/lib/shuttle/actors/mysql_actor.rb +20 -0
  13. data/lib/shuttle/actors/passenger_actor.rb +19 -0
  14. data/lib/shuttle/actors/plesk_actor.rb +210 -0
  15. data/lib/shuttle/actors/sqlite3_actor.rb +44 -0
  16. data/lib/shuttle/app_runner.rb +118 -0
  17. data/lib/shuttle/apps/dev.rb +27 -0
  18. data/lib/shuttle/apps/engines.rb +33 -0
  19. data/lib/shuttle/apps/jobs.rb +35 -0
  20. data/lib/shuttle/apps/satellite.rb +32 -0
  21. data/lib/shuttle/apps/server.rb +70 -0
  22. data/lib/shuttle/client/auth_token.rb +98 -0
  23. data/lib/shuttle/client.rb +48 -0
  24. data/lib/shuttle/exception_handler.rb +53 -0
  25. data/lib/shuttle/extentions/rubygems_plugin.rb +27 -0
  26. data/lib/shuttle/extentions/thor_extentions.rb +32 -0
  27. data/lib/shuttle/job_queue.rb +199 -0
  28. data/lib/shuttle/satellite/actions.rb +35 -0
  29. data/lib/shuttle/satellite/dependency_loader.rb +79 -0
  30. data/lib/shuttle/satellite/persistence.rb +50 -0
  31. data/lib/shuttle/satellite.rb +49 -0
  32. data/lib/shuttle/server/daemon.rb +85 -0
  33. data/lib/shuttle/server/proxy.rb +25 -0
  34. data/lib/shuttle/server/security.rb +113 -0
  35. data/lib/shuttle/server.rb +113 -0
  36. data/lib/shuttle/system/config.rb +36 -0
  37. data/lib/shuttle/system/helper.rb +21 -0
  38. data/lib/shuttle/system/options.rb +79 -0
  39. data/lib/shuttle/system/process_user.rb +75 -0
  40. data/lib/shuttle/system/satellites.rb +44 -0
  41. data/lib/shuttle/system/shell.rb +80 -0
  42. data/lib/shuttle/system.rb +159 -0
  43. data/lib/shuttle/systems/centos_plesk_system.rb +28 -0
  44. data/lib/shuttle/systems/macports_system.rb +14 -0
  45. data/lib/shuttle.rb +82 -0
  46. data/spec/actor/actions_spec.rb +13 -0
  47. data/spec/spec_helper.rb +1 -0
  48. metadata +129 -0
@@ -0,0 +1,159 @@
1
+
2
+ module Shuttle
3
+ class System
4
+ include DRbUndumped
5
+
6
+ autoload :Shell, File.dirname(__FILE__)+'/system/shell'
7
+ autoload :Config, File.dirname(__FILE__)+'/system/config'
8
+ autoload :Helper, File.dirname(__FILE__)+'/system/helper'
9
+ autoload :Options, File.dirname(__FILE__)+'/system/options'
10
+ autoload :Satellites, File.dirname(__FILE__)+'/system/satellites'
11
+ autoload :ProcessUser, File.dirname(__FILE__)+'/system/process_user'
12
+
13
+ include Shuttle::System::Shell
14
+ include Shuttle::System::Config
15
+ include Shuttle::System::Helper
16
+ include Shuttle::System::Options
17
+ include Shuttle::System::Satellites
18
+ include Shuttle::System::ProcessUser
19
+
20
+ # get the shared system. this will also set the shared system if you pass a new system as its argument.
21
+ def self.shared(system=nil)
22
+ @system = system if system
23
+ @system
24
+ end
25
+
26
+ # load the shared system
27
+ def self.load!(root=nil)
28
+ @system = new(root)
29
+ end
30
+
31
+ def initialize(root=nil)
32
+ unless root
33
+ if get_user_name == 'root'
34
+ root = Shuttle::DEFAULT_ROOT_SYSTEM_DIR
35
+ else
36
+ root = Shuttle::DEFAULT_USER_SYSTEM_DIR
37
+ end
38
+ end
39
+
40
+ @root = File.expand_path(root)
41
+ @actors = []
42
+ @options = {}
43
+ @option_descriptors = []
44
+ @satellite_options = {}
45
+ @satellite_option_descriptors = []
46
+
47
+ system_file = self.path('system.rb')
48
+ unless File.file? system_file
49
+ Shuttle.log "No system file found (#{system_file})"
50
+ exit(1)
51
+ end
52
+
53
+ Shuttle::ExceptionHandler.setup(self.path('ServerNormal.log'), self.path('ServerError.log'))
54
+
55
+ use :BaseActor
56
+ self.instance_eval File.read(system_file)
57
+ self.resolve_options!
58
+ end
59
+
60
+ attr_accessor :current_satellite, :root
61
+
62
+ def queue
63
+ @queue ||= Shuttle::JobQueue.new
64
+ end
65
+
66
+ def path(*args)
67
+ File.join(@root, *args)
68
+ end
69
+
70
+ def install_satellite(domain)
71
+ self.queue.enqueue("install new satellite #{domain}", :domain => domain) do |options|
72
+ satellite = Shuttle::Satellite.new(options[:domain])
73
+
74
+ run_action_on :install_satellite, satellite
75
+ run_action_on :link_satellite, satellite
76
+ save_satellite! satellite
77
+ end
78
+ end
79
+
80
+ def uninstall_satellite(satellite)
81
+ if satellite
82
+ self.queue.enqueue("uninstall #{satellite.domain}", :satellite => satellite) do |options|
83
+ run_action_on :uninstall_satellite, options[:satellite]
84
+ destroy_satellite! options[:satellite]
85
+ end
86
+ else
87
+ false
88
+ end
89
+ end
90
+
91
+ def install_engine(satellite, name, options={})
92
+ if satellite
93
+ self.queue.enqueue("install #{satellite.domain}: #{name} #{options.inspect}",
94
+ :satellite => satellite, :name => name, :options => options) do |options|
95
+
96
+ satellite, name, options = options[:satellite], options[:name], options[:options]
97
+ ensure_presence_of_gem(name, options)
98
+ if satellite.add_engine(name, options)
99
+ run_action_on :install_engine, satellite
100
+ run_action_on :link_satellite, satellite
101
+ save_satellite! satellite
102
+ end
103
+
104
+ end
105
+ else
106
+ false
107
+ end
108
+ end
109
+
110
+ def update_engine(satellite, name, options={})
111
+ if satellite
112
+ self.queue.enqueue("update #{satellite.domain}: #{name} #{options.inspect}",
113
+ :satellite => satellite, :name => name, :options => options) do |options|
114
+
115
+ satellite, name, options = options[:satellite], options[:name], options[:options]
116
+ ensure_presence_of_gem(name, options)
117
+ if satellite.update_engine(name, options)
118
+ run_action_on :update_engine, satellite
119
+ run_action_on :link_satellite, satellite
120
+ save_satellite! satellite
121
+ end
122
+
123
+ end
124
+ else
125
+ false
126
+ end
127
+ end
128
+
129
+ def uninstall_engine(satellite, name)
130
+ if satellite
131
+ self.queue.enqueue("uninstall #{satellite.domain}: #{name}",
132
+ :satellite => satellite, :name => name) do |options|
133
+
134
+ satellite, name = options[:satellite], options[:name]
135
+ if satellite.remove_engine(name)
136
+ run_action_on :uninstall_engine, satellite
137
+ run_action_on :link_satellite, satellite
138
+ save_satellite! satellite
139
+ end
140
+
141
+ end
142
+ else
143
+ false
144
+ end
145
+ end
146
+
147
+ private
148
+
149
+ def run_action_on(action, satellite)
150
+ resolve_options_with satellite do
151
+ actors = @actors.collect { |actor_klass| actor_klass.new(self, satellite) }
152
+ actors.each { |actor| actor.run_callbacks_in_fase! action, :before }
153
+ actors.each { |actor| actor.run_callbacks_in_fase! action, :on }
154
+ actors.each { |actor| actor.run_callbacks_in_fase! action, :after }
155
+ end
156
+ end
157
+
158
+ end
159
+ end
@@ -0,0 +1,28 @@
1
+ use :PassengerActor
2
+ use :PleskActor
3
+
4
+ apachectl_path { '/opt/local/apache2/bin/apachectl' }
5
+ ruby_path { '/usr/bin/ruby' }
6
+ gem_path { '/usr/bin/gem' }
7
+ plesk_path { '/usr/bin/gem' }
8
+
9
+ web_user { |s| s.domain.gsub(/[^a-zA-Z0-9]+/, '_') }
10
+ web_group { 'psacln' }
11
+
12
+ plesk_root { |s| "/var/www/vhost" }
13
+
14
+ satellite_root do |s|
15
+ if s.subdomain?
16
+ "#{plesk_root}/#{s.basedomain}/subdomains/#{s.subdomain}/satellite"
17
+ else
18
+ "#{plesk_root}/#{s.domain}/satellite"
19
+ end
20
+ end
21
+
22
+ shared_root do |s|
23
+ if s.subdomain?
24
+ "#{plesk_root}/#{s.basedomain}/subdomains/#{s.subdomain}/shared"
25
+ else
26
+ "#{plesk_root}/#{s.domain}/shared"
27
+ end
28
+ end
@@ -0,0 +1,14 @@
1
+ use :PassengerActor
2
+ use :ApacheActor
3
+ use :MysqlActor
4
+
5
+ apachectl_path { '/opt/local/apache2/bin/apachectl' }
6
+ ruby_path { '/opt/local/bin/ruby' }
7
+ gem_path { '/opt/local/bin/gem' }
8
+
9
+
10
+ web_user { 'www' }
11
+ web_group { 'www' }
12
+
13
+ satellite_root { |s| "/opt/local/var/www/#{s.domain}/satellite" }
14
+ shared_root { |s| "/opt/local/var/www/#{s.domain}/shared" }
data/lib/shuttle.rb ADDED
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+
3
+ require File.dirname(__FILE__)+'/shuttle/extentions/rubygems_plugin'
4
+
5
+ autoload :DRbUndumped, 'drb'
6
+ autoload :FileUtils, 'fileutils'
7
+
8
+ module Shuttle
9
+ base = File.expand_path(File.dirname(__FILE__))
10
+
11
+ autoload :Actor, (base+'/shuttle/actor')
12
+ autoload :Server, (base+'/shuttle/server')
13
+ autoload :Client, (base+'/shuttle/client')
14
+ autoload :System, (base+'/shuttle/system')
15
+ autoload :JobQueue, (base+'/shuttle/job_queue')
16
+ autoload :Satellite, (base+'/shuttle/satellite')
17
+ autoload :AppRunner, (base+'/shuttle/app_runner')
18
+ autoload :ExceptionHandler, (base+'/shuttle/exception_handler')
19
+
20
+ module Actors
21
+ base = File.expand_path(File.dirname(__FILE__))
22
+
23
+ autoload :BaseActor, (base+'/shuttle/actors/base_actor')
24
+ autoload :MysqlActor, (base+'/shuttle/actors/mysql_actor')
25
+ autoload :PleskActor, (base+'/shuttle/actors/plesk_actor')
26
+ autoload :ApacheActor, (base+'/shuttle/actors/apache_actor')
27
+ autoload :Sqlite3Actor, (base+'/shuttle/actors/sqlite3_actor')
28
+ autoload :PassengerActor, (base+'/shuttle/actors/passenger_actor')
29
+ end
30
+
31
+ module Apps
32
+ base = File.expand_path(File.dirname(__FILE__))
33
+
34
+ autoload :Dev, (base+'/shuttle/apps/dev')
35
+ autoload :Jobs, (base+'/shuttle/apps/jobs')
36
+ autoload :Server, (base+'/shuttle/apps/server')
37
+ autoload :Engines, (base+'/shuttle/apps/engines')
38
+ autoload :Satellite, (base+'/shuttle/apps/satellite')
39
+ end
40
+
41
+ DEFAULT_ROOT_SYSTEM_DIR = '/var/shuttle'
42
+ DEFAULT_USER_SYSTEM_DIR = '~/.shuttle'
43
+ STOP_STATUS = 101
44
+ RESTART_STATUS = 102
45
+ RELOAD_STATUS = 103
46
+ QUICK_CERT = "http://segment7.net/projects/ruby/QuickCert/QuickCert-1.0.2.tar.gz"
47
+
48
+ Shuttle::ExceptionHandler.setup
49
+ extend ExceptionHandler
50
+
51
+ def self.client(token=nil)
52
+ unless @client
53
+ @client = Shuttle::Client.current(token)
54
+ unless @client
55
+ puts "Failed to connect to the shuttle!"
56
+ exit(1)
57
+ end
58
+ end
59
+ @client
60
+ end
61
+
62
+ def self.system
63
+ @system ||= Shuttle::System.shared
64
+ end
65
+
66
+ def self.version
67
+ unless @version
68
+ if __FILE__ =~ /\/shuttle-([^\/]+)\//
69
+ @version = $1
70
+ else
71
+ @version = 'edge'
72
+ end
73
+ end
74
+ @version
75
+ end
76
+
77
+ def self.server?(value=nil)
78
+ @is_server = value unless value.nil?
79
+ @is_server
80
+ end
81
+
82
+ end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe 'Actor::Actions' do
4
+
5
+ before do
6
+ @actor = Class.new('Actor')
7
+ end
8
+
9
+ it "should description" do
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__)+'/../lib/shuttle'
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simonmenke-shuttle
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.07
5
+ platform: ruby
6
+ authors:
7
+ - Simon Menke
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-02 00:00:00 -07:00
13
+ default_executable: shuttle
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: thor
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.9
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rubigen
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.5.2
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: simple-daemon
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.1.2
44
+ version:
45
+ description: Manage satellites
46
+ email: simon.menke@gmail.com
47
+ executables:
48
+ - shuttle
49
+ extensions: []
50
+
51
+ extra_rdoc_files: []
52
+
53
+ files:
54
+ - spec/actor/actions_spec.rb
55
+ - spec/spec_helper.rb
56
+ - bin/shuttle
57
+ - lib/rubygems_plugin.rb
58
+ - lib/shuttle/actor/actions.rb
59
+ - lib/shuttle/actor.rb
60
+ - lib/shuttle/actors/apache_actor.rb
61
+ - lib/shuttle/actors/base_actor.rb
62
+ - lib/shuttle/actors/mysql_actor.rb
63
+ - lib/shuttle/actors/passenger_actor.rb
64
+ - lib/shuttle/actors/plesk_actor.rb
65
+ - lib/shuttle/actors/sqlite3_actor.rb
66
+ - lib/shuttle/app_runner.rb
67
+ - lib/shuttle/apps/dev.rb
68
+ - lib/shuttle/apps/engines.rb
69
+ - lib/shuttle/apps/jobs.rb
70
+ - lib/shuttle/apps/satellite.rb
71
+ - lib/shuttle/apps/server.rb
72
+ - lib/shuttle/client/auth_token.rb
73
+ - lib/shuttle/client.rb
74
+ - lib/shuttle/exception_handler.rb
75
+ - lib/shuttle/extentions/rubygems_plugin.rb
76
+ - lib/shuttle/extentions/thor_extentions.rb
77
+ - lib/shuttle/job_queue.rb
78
+ - lib/shuttle/satellite/actions.rb
79
+ - lib/shuttle/satellite/dependency_loader.rb
80
+ - lib/shuttle/satellite/persistence.rb
81
+ - lib/shuttle/satellite.rb
82
+ - lib/shuttle/server/daemon.rb
83
+ - lib/shuttle/server/proxy.rb
84
+ - lib/shuttle/server/security.rb
85
+ - lib/shuttle/server.rb
86
+ - lib/shuttle/system/config.rb
87
+ - lib/shuttle/system/helper.rb
88
+ - lib/shuttle/system/options.rb
89
+ - lib/shuttle/system/process_user.rb
90
+ - lib/shuttle/system/satellites.rb
91
+ - lib/shuttle/system/shell.rb
92
+ - lib/shuttle/system.rb
93
+ - lib/shuttle/systems/centos_plesk_system.rb
94
+ - lib/shuttle/systems/macports_system.rb
95
+ - lib/shuttle.rb
96
+ - app_generators/engine/engine_generator.rb
97
+ - app_generators/engine/templates/config/routes.rb
98
+ - app_generators/engine/templates/init.rb
99
+ - app_generators/engine/templates/lib/engine.rb
100
+ - app_generators/engine/templates/rails/init.rb
101
+ has_rdoc: false
102
+ homepage: http://github.com/simonmenke/shuttle
103
+ post_install_message:
104
+ rdoc_options: []
105
+
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ version:
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: "0"
119
+ version:
120
+ requirements: []
121
+
122
+ rubyforge_project:
123
+ rubygems_version: 1.2.0
124
+ signing_key:
125
+ specification_version: 3
126
+ summary: Manage satellites
127
+ test_files:
128
+ - spec/actor/actions_spec.rb
129
+ - spec/spec_helper.rb