chrisrec 0.1.0

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 (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