chrisrec 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/Manifest +39 -0
  2. data/README +0 -0
  3. data/Rakefile +15 -0
  4. data/chrisrec.gemspec +30 -0
  5. data/lib/backgroundrb/backgroundrb.rb +22 -0
  6. data/lib/chrisrec.rb +12 -0
  7. data/lib/console/console.rb +19 -0
  8. data/lib/daemon/daemon.rb +134 -0
  9. data/lib/gitosis/gitosis.rb +131 -0
  10. data/lib/memcached/memcached.rb +140 -0
  11. data/lib/munin/munin.rb +135 -0
  12. data/lib/mysql/mysql.rake +95 -0
  13. data/lib/mysql/mysql.rb +51 -0
  14. data/lib/rake/rake.rb +19 -0
  15. data/lib/rakecron/rakecron.rb +35 -0
  16. data/lib/starling/starling.rb +124 -0
  17. data/lib/tomcat/tomcat.rb +200 -0
  18. data/lib/workling/workling.rb +72 -0
  19. data/template/daemon/daemon-init-script.erb +59 -0
  20. data/template/daemon/monit.conf.erb +4 -0
  21. data/template/memcached/memcached-conf.erb +1 -0
  22. data/template/memcached/memcached.erb +59 -0
  23. data/template/memcached/monit.conf.erb +8 -0
  24. data/template/memcached/start-memcached.erb +118 -0
  25. data/template/munin/httpd-vhost-munin.conf.erb +20 -0
  26. data/template/munin/munin.conf.erb +70 -0
  27. data/template/munin/munin_nginx_vhost.conf.erb +24 -0
  28. data/template/rakecron/rakecron.erb +12 -0
  29. data/template/starling/monit.conf.erb +14 -0
  30. data/template/starling/starling-init-script.erb +69 -0
  31. data/template/tomcat/conf/server.xml.erb +33 -0
  32. data/template/tomcat/conf/web.xml +1194 -0
  33. data/template/tomcat/logs/empty.txt +1 -0
  34. data/template/tomcat/monit.conf.erb +8 -0
  35. data/template/tomcat/temp/empty.txt +1 -0
  36. data/template/tomcat/tomcat.erb +28 -0
  37. data/template/tomcat/webapps/empty.txt +1 -0
  38. data/template/tomcat/work/empty.txt +1 -0
  39. data/template/workling/monit.conf.erb +4 -0
  40. data/template/workling/workling-init-script.erb +56 -0
  41. metadata +121 -0
@@ -0,0 +1,135 @@
1
+ # Copyright 2006-2008 by Mike Bailey. All rights reserved.
2
+ Capistrano::Configuration.instance(:must_exist).load do
3
+ namespace :chrisrec do
4
+ namespace :munin do
5
+
6
+ set :use_nginx, false
7
+ set :use_apache, true
8
+ set :munin_user, 'munin'
9
+ set :munin_group, 'munin'
10
+ set :munin_webserver_auth_user, 'admin'
11
+ set :munin_webserver_auth_pass, 'XXXX'
12
+
13
+ set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
14
+
15
+ desc "Install munin"
16
+ task :install, :roles => :web do
17
+ install_deps
18
+ create_munin_user
19
+ deprec2.mkdir("#{deploy_to}/munin/html", :group => munin_group, :mode => 0775, :via => :sudo)
20
+ end
21
+
22
+ task :install_deps do
23
+ apt.install( {:base => %w(munin munin-node)}, :stable )
24
+ end
25
+
26
+ task :create_munin_user do
27
+ deprec2.groupadd(munin_group)
28
+ deprec2.useradd(munin_user, :group => munin_group, :homedir => false)
29
+ end
30
+
31
+ SYSTEM_CONFIG_FILES[:munin] = [
32
+
33
+ {:template => 'munin.conf.erb',
34
+ :path => '/etc/munin/munin.conf',
35
+ :mode => 0664,
36
+ :owner => 'root:root'}
37
+ ]
38
+
39
+ PROJECT_CONFIG_FILES[:munin_nginx] = [
40
+
41
+ {:template => 'munin_nginx_vhost.conf.erb',
42
+ :path => "conf/munin_nginx_vhost.conf",
43
+ :mode => 0644,
44
+ :owner => 'root:root'}
45
+ ]
46
+
47
+ PROJECT_CONFIG_FILES[:munin_apache] = [
48
+
49
+ {:template => "httpd-vhost-munin.conf.erb",
50
+ :path => 'conf/httpd-vhost-munin.conf',
51
+ :mode => 0755,
52
+ :owner => 'root:root'}
53
+ ]
54
+
55
+ desc "Generate configuration file(s) for munin from template(s)"
56
+ task :config_gen do
57
+ SYSTEM_CONFIG_FILES[:munin].each do |file|
58
+ deprec2.render_template(:munin, file)
59
+ end
60
+
61
+ PROJECT_CONFIG_FILES[:munin_nginx].each do |file|
62
+ deprec2.render_template(:munin, file)
63
+ end if use_nginx
64
+
65
+ PROJECT_CONFIG_FILES[:munin_apache].each do |file|
66
+ deprec2.render_template(:munin, file)
67
+ end if use_apache
68
+ end
69
+
70
+ desc 'Deploy configuration files(s) for munin'
71
+ task :config, :roles => :web do
72
+ deprec2.push_configs(:munin, SYSTEM_CONFIG_FILES[:munin])
73
+ deprec2.push_configs(:munin, PROJECT_CONFIG_FILES[:munin_nginx]) if use_nginx
74
+ deprec2.push_configs(:munin, PROJECT_CONFIG_FILES[:munin_apache]) if use_apache
75
+ symlink_nginx_vhost if use_nginx
76
+ symlink_apache_vhost if use_apache
77
+ auth_user if use_apache
78
+ end
79
+
80
+ task :symlink_nginx_vhost, :roles => :web do
81
+ return unless use_nginx
82
+ sudo "ln -sf #{deploy_to}/munin/conf/munin_nginx_vhost.conf #{nginx_vhost_dir}/munin.conf"
83
+ end
84
+
85
+ task :symlink_apache_vhost, :roles => :web do
86
+ return unless use_apache
87
+ sudo "ln -sf #{deploy_to}/munin/conf/httpd-vhost-munin.conf /etc/apache2/sites-available/munin"
88
+ sudo "ln -sf #{deploy_to}/munin/conf/httpd-vhost-munin.conf /etc/apache2/sites-enabled/munin"
89
+ end
90
+
91
+ task :auth_user, :roles => :web do
92
+ set (:munin_webserver_auth_user) {
93
+ Capistrano::CLI.ui.ask "Enter munin web user" do |q|
94
+ q.default = 'admin'
95
+ end
96
+ }
97
+
98
+ set (:munin_webserver_auth_pass) {
99
+ Capistrano::CLI.ui.ask "Enter munin web user password"
100
+ }
101
+
102
+
103
+ sudo "/usr/bin/htpasswd -c -b #{deploy_to}/munin/htpasswd.users #{munin_webserver_auth_user} #{munin_webserver_auth_pass}"
104
+ end
105
+
106
+ desc "start munin"
107
+ task :start, :roles => :web do
108
+ send(run_method, "/etc/init.d/munin-node start")
109
+ end
110
+
111
+ desc "stop munin"
112
+ task :stop, :roles => :web do
113
+ send(run_method, "/etc/init.d/munin-node stop")
114
+ end
115
+
116
+ desc "restart munin"
117
+ task :restart, :roles => :web do
118
+ send(run_method, "/etc/init.d/munin-node restart")
119
+ end
120
+
121
+ task :activate, :roles => :web do
122
+ end
123
+
124
+ task :deactivate, :roles => :web do
125
+ end
126
+
127
+ task :backup, :roles => :web do
128
+ end
129
+
130
+ task :restore, :roles => :web do
131
+ end
132
+
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,95 @@
1
+ # COPY TO YOUR lib/rake directory
2
+ require 'fileutils'
3
+ require 'active_record'
4
+ require 'erb'
5
+
6
+ namespace :mysql do
7
+ DUMP_FILENAME = [RAILS_ENV, Time.now.utc.strftime('%Y-%m-%d_%H-%M-%S')].join('_') + '.sql.bz2'
8
+ DUMP_LOCATION = File.join(RAILS_ROOT, 'db', 'dumps')
9
+
10
+ def populate_config
11
+ ActiveRecord::Base.configurations = Rails::Configuration.new.database_configuration
12
+ end
13
+
14
+ def conf
15
+ populate_config if ActiveRecord::Base.configurations.empty?
16
+ @conf ||= ActiveRecord::Base.configurations[RAILS_ENV]
17
+ end
18
+
19
+ def mysql_opts
20
+ user = conf['user'] || conf['username']
21
+ opts = []
22
+ opts << "--user=#{user}" if user
23
+ opts << "--password=#{conf['password']}" if conf['password']
24
+ opts << "--host=#{conf['host']}" if conf['host']
25
+ opts << "--port=#{conf['port']}" if conf['port']
26
+ opts << "--default-character-set=#{conf['encoding']}" if conf['encoding']
27
+ opts << "#{conf['database']}"
28
+ opts.join(' ')
29
+ end
30
+
31
+ def dump_cmd
32
+ "mysqldump --skip-lock-tables #{mysql_opts} | bzip2"
33
+ end
34
+
35
+ def load_cmd
36
+ "bunzip2 | mysql #{mysql_opts}"
37
+ end
38
+
39
+ def overwrite_db_with(file_or_io)
40
+ IO.popen(load_cmd, 'w') { |mysql| mysql << file_or_io.read }
41
+ end
42
+
43
+ task :ensure_mysql do
44
+ abort "Sorry, you have to be using MySQL locally" unless conf['adapter'] == 'mysql'
45
+ ActiveRecord::Base.establish_connection
46
+ end
47
+
48
+ desc <<-DESC
49
+ Prints out information about the charsets and collations used by the MySQL
50
+ connection of the current environment
51
+ DESC
52
+ task :charset_info => :ensure_mysql do
53
+ charset_vars = ActiveRecord::Base.connection.execute("show variables like 'character\_set\_%'")
54
+ collation_vars = ActiveRecord::Base.connection.execute("show variables like 'colla%'")
55
+ puts "ActiveRecord::Base.connection.charset: #{ActiveRecord::Base.connection.charset}"
56
+ puts "ActiveRecord::Base.connection.collation: #{ActiveRecord::Base.connection.collation}"
57
+ [charset_vars, collation_vars].each do |resultset|
58
+ resultset.each do |variable, value|
59
+ puts "#{variable}: #{value}"
60
+ end
61
+ end
62
+ end
63
+
64
+ desc 'Dumps the a mysql db of the current environment to standard out'
65
+ task :stream_dump => :ensure_mysql do
66
+ exec dump_cmd
67
+ end
68
+
69
+ desc <<-DESC
70
+ Pipes STDIN into the local MySQL DB.\
71
+ Warning! May replace current DB entirely, use with care.\
72
+ Reverse of mysql:stream_dump
73
+ DESC
74
+ task :load_dump => :dump do
75
+ overwrite_db_with $stdin
76
+ puts "loaded other database into #{conf['database']}"
77
+ end
78
+
79
+ desc 'Dump the database for the current environment into /db/dumps'
80
+ task :dump => :ensure_mysql do
81
+ FileUtils.mkdir_p DUMP_LOCATION
82
+ dumpfile = File.join(DUMP_LOCATION, DUMP_FILENAME)
83
+ puts "created #{dumpfile.gsub(RAILS_ROOT,'')}" if system "#{dump_cmd} > #{dumpfile}"
84
+ end
85
+
86
+ desc 'Loads the last dump into the DB'
87
+ task :restore => :ensure_mysql do
88
+ Dir.chdir DUMP_LOCATION do
89
+ last_filename = Dir.glob("#{RAILS_ENV}_*.sql.bz2").sort.last
90
+ abort 'Sorry, no restorable dump found' unless last_filename
91
+ File.open(last_filename, 'r') { |dumpfile| overwrite_db_with dumpfile }
92
+ puts "Restored backup #{last_filename}"
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,51 @@
1
+ require 'fileutils'
2
+
3
+ Capistrano::Configuration.instance(:must_exist).load do
4
+ namespace :chrisrec do
5
+
6
+ set :db_dump_filename do
7
+ [rails_env, release_name].join('_') + '.sql.bz2'
8
+ end
9
+
10
+ namespace :mysql do
11
+
12
+ desc 'Dump the remote database'
13
+ task :dump, :roles => :db, :only => { :primary => true } do
14
+ top.chrisrec.remote_rake 'mysql:dump'
15
+ end
16
+
17
+ desc 'Restore the latest database dump'
18
+ task :restore, :roles => :db, :only => { :primary => true } do
19
+ top.chrisrec.remote_rake 'mysql:restore'
20
+ end
21
+
22
+ desc 'Dumps the remote database and copies the dump to the shared directory'
23
+ task :backup_dump, :roles => :db, :only => { :primary => true } do
24
+ destination = fetch(:db_backup_location, File.join(deploy_to, shared_dir, 'db_dumps'))
25
+ run "mkdir -p #{destination}"
26
+ top.chrisrec.remote_rake "mysql:stream_dump > #{File.join(destination, db_dump_filename)}"
27
+ end
28
+
29
+ desc 'Creates a dump of the remote database and copies it to the local working dir'
30
+ task :fetch_dump, :roles => :db, :only => { :primary => true } do
31
+ host = roles[:db].servers.first.host
32
+ destination = fetch(:db_dump_location, File.join('db', 'dumps', host))
33
+ tempfile = File.join('tmp', db_dump_filename)
34
+ FileUtils.mkdir_p destination unless File.directory?(destination) || File.symlink?(destination)
35
+ top.chrisrec.remote_rake "mysql:stream_dump > #{tempfile}"
36
+ get File.join(deploy_to, 'current', tempfile), File.join(destination, db_dump_filename)
37
+ run "rm -f #{tempfile}" # delete tempfile # doesnt work!?!
38
+ end
39
+
40
+ desc 'Clones the remote db, replacing the local development one'
41
+ task :duplicate, :roles => :db, :only => { :primary => true } do
42
+ IO.popen('rake mysql:load_dump', 'w') do |local_mysql|
43
+ top.chrisrec.remote_rake('mysql:stream_dump', :pty => false) do |channel, stream, data|
44
+ next if stream == :err
45
+ local_mysql << data
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
data/lib/rake/rake.rb ADDED
@@ -0,0 +1,19 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ def remote_rake(task, options={}, &block)
4
+ rake = fetch(:rake, 'rake')
5
+ run("cd #{deploy_to}/current && RAILS_ENV=#{rails_env} #{rake} #{task}", options, &block)
6
+ end
7
+
8
+ desc %Q{\
9
+ Invokes rake task in currently deployed app\
10
+ specify task(s) to be in ENV variable TASK\
11
+ Example: cap rake TASK=db:migrate
12
+ }
13
+ task :rake do
14
+ task = ENV['TASK'] || ENV['TASKS']
15
+ abort 'please specify a TASK env variable' unless task
16
+ remote_rake task
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ namespace :rakecron do
4
+
5
+ # role :cron, "TODO"
6
+ set :rakecron_log_dir, "/var/log"
7
+ set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
8
+
9
+ PROJECT_CONFIG_FILES[:rakecron] = [
10
+ {:template => 'rakecron.erb',
11
+ :path => 'crontab',
12
+ :mode => 0664,
13
+ :owner => 'root:root'}
14
+ ]
15
+
16
+ desc "Generate configuration file(s) for from template(s)"
17
+ task :config_gen do
18
+ PROJECT_CONFIG_FILES[:rakecron].each do |file|
19
+ deprec2.render_template(:rakecron, file)
20
+ end
21
+ end
22
+
23
+ desc 'Deploy configuration files(s) for rakecron'
24
+ task :config, :roles => :cron do
25
+ deprec2.push_configs(:rakecron, PROJECT_CONFIG_FILES[:rakecron])
26
+ symlink_cron_job
27
+ end
28
+
29
+ task :symlink_cron_job, :roles => :cron do
30
+ sudo "ln -sf #{deploy_to}/rakecron/crontab /etc/cron.d/rakecron_#{application}"
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,124 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ namespace :starling do
4
+
5
+ set :starling_port, 15151
6
+ set :starling_address, "127.0.0.1"
7
+ set :starling_user, "starling"
8
+ set :starling_group, "starling"
9
+ set :starling_spool_dir, "/var/spool/starling"
10
+ set :starling_run_dir, "/var/run"
11
+ set :starling_log_dir, "/var/log"
12
+
13
+ set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
14
+
15
+ # Installation
16
+ desc "Installs the Starling gem"
17
+ task :install, :roles => :cache do
18
+ sudo("gem install eventmachine --no-rdoc --no-ri")
19
+ sudo("gem install starling-starling --source http://gems.github.com -v 0.9.9 --no-rdoc --no-ri")
20
+
21
+ deprec2.mkdir(starling_spool_dir, :via => :sudo)
22
+ # deprec2.mkdir(starling_run_dir, :via => :sudo)
23
+ # deprec2.mkdir(starling_log_dir, :via => :sudo)
24
+
25
+ create_starling_user_and_group
26
+ set_perms_for_starling_dirs
27
+ symlink_starling_for_rubyee if ruby_vm_type == :ree
28
+ end
29
+
30
+ # Configure
31
+
32
+ SYSTEM_CONFIG_FILES[:starling] = [
33
+ {:template => 'starling-init-script.erb',
34
+ :path => 'starling/etc/init.d/starling',
35
+ :mode => 0755,
36
+ :owner => 'root:root'},
37
+
38
+ {:template => 'monit.conf.erb',
39
+ :path => "starling/etc/monit.d/monit_starling.conf",
40
+ :mode => 0600,
41
+ :owner => 'root:root'}
42
+ ]
43
+
44
+ # Generating Configuration Files
45
+ desc "Generate configuration file(s) for Starling from template(s)"
46
+ task :config_gen do
47
+ SYSTEM_CONFIG_FILES[:starling].each do |file|
48
+ deprec2.render_template(:starling, file)
49
+ end
50
+ end
51
+
52
+ desc 'Deploy configuration files(s) for Starling'
53
+ task :config, :roles => :cache do
54
+ deprec2.push_configs(:starling, SYSTEM_CONFIG_FILES[:starling])
55
+ symlink_init_d
56
+ symlink_monit_d
57
+
58
+ activate
59
+ end
60
+
61
+ desc "Stop starling"
62
+ task :stop , :roles => :cache do
63
+ sudo "/etc/init.d/starling_#{starling_port} stop"
64
+ end
65
+
66
+ desc "Start starling"
67
+ task :start , :roles => :cache do
68
+ sudo "/etc/init.d/starling_#{starling_port} start"
69
+ end
70
+
71
+ desc "Start the starling server"
72
+ task :restart, :roles => :cache do
73
+ stop
74
+ sleep(2)
75
+ start
76
+ end
77
+
78
+ task :activate, :roles => :cache do
79
+ send(run_method, "update-rc.d starling_#{starling_port} defaults")
80
+ end
81
+
82
+ task :deactivate, :roles => :cache do
83
+ send(run_method, "update-rc.d -f starling_#{starling_port} remove")
84
+ end
85
+
86
+ # User/Group creation & permission assignment
87
+ # These were based off the tasks used in the mongrel recipe -
88
+ # as this was probably the nicest way to ensure these tasks
89
+ # were doing the right thing.
90
+ desc "create user and group for starling to run as"
91
+ task :create_starling_user_and_group, :roles => :cache do
92
+ deprec2.groupadd(starling_group)
93
+ deprec2.useradd(starling_user, :group => starling_group, :homedir => false)
94
+ # Set the primary group for the starling user (in case user already existed
95
+ # when previous command was run)
96
+ sudo "usermod --gid #{starling_group} #{starling_user}"
97
+ end
98
+
99
+ desc "set group ownership and permissions on dirs starling needs to write to"
100
+ task :set_perms_for_starling_dirs, :roles => :cache do
101
+ sudo "chgrp -R #{starling_group} #{starling_spool_dir}"
102
+ sudo "chmod -R g+w #{starling_spool_dir}"
103
+ # sudo "chgrp -R #{starling_group} #{starling_run_dir} #{starling_log_dir}"
104
+ # sudo "chmod -R g+w #{starling_run_dir} #{starling_log_dir}"
105
+ end
106
+
107
+ task :symlink_starling_for_rubyee, :roles => :cache do
108
+ # This ensures we symlink from the REE common directory, NOT the
109
+ # actual REE install directory (so when we change the REE version,
110
+ # we don't have to fuddle around again).
111
+ sudo "ln -fs #{ree_short_path}/bin/starling /usr/local/bin/starling"
112
+ end
113
+
114
+ task :symlink_init_d, :roles => :cache do
115
+ sudo "ln -fs #{deploy_to}/starling/starling/etc/init.d/starling /etc/init.d/starling_#{starling_port}"
116
+ end
117
+
118
+ task :symlink_monit_d, :roles => :cache do
119
+ sudo "ln -fs #{deploy_to}/starling/starling/etc/monit.d/monit_starling.conf /etc/monit.d/monit_starling_#{starling_port}.conf"
120
+ end
121
+
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,200 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ namespace :tomcat do
4
+
5
+ set :maven_env, "production"
6
+ set :tomcat_war, "MyAppName"
7
+
8
+ set :tomcat_address, '127.0.0.1'
9
+ set :tomcat_port, 8080
10
+ set :tomcat_shutdown_port, 8009
11
+ set :tomcat_ssl_port, 8443
12
+
13
+ set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
14
+
15
+ desc "Install tomcat"
16
+ task :install, :roles => :app do
17
+ version = 'apache-tomcat-6.0.20'
18
+ set :src_package, {
19
+ :file => version + '.tar.gz',
20
+ # :md5sum => 'a08851f7fa7b15e92ee6320b7a79c321 tomcat-1.2.2.tar.gz',
21
+ :dir => version,
22
+ :url => "http://apache.16degrees.com.au/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.tar.gz",
23
+ :unpack => "tar zxf #{version}.tar.gz;"
24
+ }
25
+
26
+ deprec2.download_src(src_package, src_dir)
27
+ deprec2.unpack_src(src_package, src_dir)
28
+
29
+ sudo "sudo mv #{src_dir}/#{version} /usr/local/tomcat"
30
+
31
+ install_java
32
+ end
33
+
34
+ task :install_java do
35
+ # puts "sudo vi /etc/apt/sources.list"
36
+ sudo "chmod 666 /etc/apt/sources.list"
37
+ sudo "grep 'multiverse$' /etc/apt/sources.list || sudo echo \"\"\n\"deb http://archive.ubuntu.com/ubuntu/ intrepid multiverse\" >> /etc/apt/sources.list"
38
+ sudo "chmod 644 /etc/apt/sources.list"
39
+
40
+ apt.update
41
+ apt.install( {:base => %w(maven2)}, :stable )
42
+
43
+ puts "*******************"
44
+ puts "*******************"
45
+ puts "******************* cannot automate the sun java install"
46
+ puts "******************* run : sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk"
47
+ puts "*******************"
48
+ puts "*******************"
49
+
50
+ end
51
+
52
+ # Configure
53
+ SYSTEM_CONFIG_FILES[:tomcat] = [
54
+ {:template => 'tomcat.erb',
55
+ :path => 'tomcat/etc/init.d/tomcat',
56
+ :mode => 0755,
57
+ :owner => 'root:root'},
58
+
59
+ {:template => 'monit.conf.erb',
60
+ :path => "tomcat/etc/monit.d/monit_tomcat.conf",
61
+ :mode => 0600,
62
+ :owner => 'root:root'},
63
+
64
+ {:template => 'conf/server.xml.erb',
65
+ :path => "conf/server.xml",
66
+ :mode => 0644,
67
+ :owner => 'root:root'},
68
+
69
+ {:template => 'conf/web.xml',
70
+ :path => "conf/web.xml",
71
+ :mode => 0644,
72
+ :owner => 'root:root'},
73
+
74
+ {:template => 'temp/empty.txt',
75
+ :path => "temp/empty.txt",
76
+ :mode => 0644,
77
+ :owner => 'root:root'},
78
+
79
+ {:template => 'logs/empty.txt',
80
+ :path => "logs/empty.txt",
81
+ :mode => 0644,
82
+ :owner => 'root:root'},
83
+
84
+ {:template => 'webapps/empty.txt',
85
+ :path => "webapps/empty.txt",
86
+ :mode => 0644,
87
+ :owner => 'root:root'},
88
+
89
+ {:template => 'work/empty.txt',
90
+ :path => "work/empty.txt",
91
+ :mode => 0644,
92
+ :owner => 'root:root'}
93
+ ]
94
+
95
+ # Generating Configuration Files
96
+ desc "Generate configuration file(s) for tomcat from template(s)"
97
+ task :config_gen do
98
+ SYSTEM_CONFIG_FILES[:tomcat].each do |file|
99
+ deprec2.render_template(:tomcat, file)
100
+ end
101
+ end
102
+
103
+ desc 'Deploy configuration files(s) for tomcat'
104
+ task :config, :roles => :app do
105
+
106
+ deprec2.push_configs(:tomcat, SYSTEM_CONFIG_FILES[:tomcat])
107
+ symlink_init_d
108
+ symlink_monit_d
109
+
110
+ activate
111
+ end
112
+
113
+ desc "Stop tomcat"
114
+ task :stop , :roles => :app do
115
+ sudo "/etc/init.d/tomcat_#{tomcat_port} stop"
116
+ end
117
+
118
+ desc "Start tomcat"
119
+ task :start , :roles => :app do
120
+ sudo "/etc/init.d/tomcat_#{tomcat_port} start"
121
+ end
122
+
123
+ desc "Start the tomcat server"
124
+ task :restart, :roles => :app do
125
+ stop
126
+ sleep(2)
127
+ start
128
+ end
129
+
130
+ task :activate, :roles => :app do
131
+ send(run_method, "update-rc.d tomcat_#{tomcat_port} defaults")
132
+ end
133
+
134
+ task :deactivate, :roles => :app do
135
+ send(run_method, "update-rc.d -f tomcat_#{tomcat_port} remove")
136
+ end
137
+
138
+ task :symlink_init_d, :roles => :app do
139
+ sudo "ln -fs #{deploy_to}/tomcat/tomcat/etc/init.d/tomcat /etc/init.d/tomcat_#{tomcat_port}"
140
+ end
141
+
142
+ task :symlink_monit_d, :roles => :app do
143
+ sudo "ln -fs #{deploy_to}/tomcat/tomcat/etc/monit.d/monit_tomcat.conf /etc/monit.d/monit_tomcat_#{tomcat_port}.conf"
144
+ end
145
+
146
+ namespace :deploy do
147
+ desc 'deploy'
148
+ task :default do
149
+ strategy.deploy!
150
+
151
+ top.chrisrec.tomcat.stop
152
+
153
+ run "rm -f #{current_path} && ln -s #{latest_release} #{current_path}"
154
+ if dependent_projects
155
+ dependent_projects.each do | project |
156
+ name = project.scan(/:(.*)/).flatten.to_s
157
+ run "git clone #{project} #{current_path}/#{name}"
158
+ run "cd #{current_path}/#{name} && mvn clean -P #{maven_env}"
159
+ run "cd #{current_path}/#{name} && mvn compile -P #{maven_env}"
160
+ run "cd #{current_path}/#{name} && mvn install -P #{maven_env}"
161
+ end
162
+ end
163
+
164
+ run "cd #{current_path} && mvn clean -P #{maven_env}"
165
+ run "cd #{current_path} && mvn compile -P #{maven_env}"
166
+ run "cd #{current_path} && mvn package -P #{maven_env}"
167
+
168
+ sudo "rm -f #{deploy_to}/tomcat/webapps/#{tomcat_war}.war"
169
+ sudo "rm -rf #{deploy_to}/tomcat/webapps/#{tomcat_war}"
170
+
171
+ sudo "cp #{current_path}/target/#{tomcat_war}.war #{deploy_to}/tomcat/webapps"
172
+
173
+ top.chrisrec.tomcat.start
174
+ end
175
+
176
+ desc 'setup'
177
+ task :setup do
178
+ dirs = [deploy_to, releases_path]
179
+ sudo "mkdir -p #{dirs.join(' ')}"
180
+ sudo "chgrp -R #{group} #{dirs.join(' ')}"
181
+ sudo "chmod g+w #{dirs.join(' ')}"
182
+ end
183
+
184
+ desc 'rollback'
185
+ task :rollback do
186
+ if previous_release
187
+ run "rm #{current_path}; ln -s #{previous_release} #{current_path}"
188
+ else
189
+ abort "could not rollback the code because there is no prior release"
190
+ end
191
+
192
+ run "if [ `readlink #{current_path}` != #{current_release} ]; then rm -rf #{current_release}; fi"
193
+
194
+ top.chrisrec.daemon.restart
195
+ end
196
+ end
197
+
198
+ end
199
+ end
200
+ end