Empact-deprec 1.99.21

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 (148) hide show
  1. data/CHANGELOG +170 -0
  2. data/COPYING +19 -0
  3. data/LICENSE +339 -0
  4. data/README +136 -0
  5. data/THANKS +5 -0
  6. data/bin/depify +133 -0
  7. data/docs/ANNOUNCE.deprec2 +47 -0
  8. data/docs/README.install +88 -0
  9. data/docs/README.nagios +28 -0
  10. data/docs/README.rails +20 -0
  11. data/docs/README.svn +31 -0
  12. data/docs/ROADMAP.txt +74 -0
  13. data/docs/deprec-1.x/deprec-1.x.quickstart +50 -0
  14. data/docs/deprec-1.x/notes.txt +12 -0
  15. data/docs/deprec_banner.gif +0 -0
  16. data/lib/deprec.rb +8 -0
  17. data/lib/deprec/capistrano_extensions.rb +378 -0
  18. data/lib/deprec/recipes.rb +40 -0
  19. data/lib/deprec/recipes/aoe.rb +117 -0
  20. data/lib/deprec/recipes/apache.rb +179 -0
  21. data/lib/deprec/recipes/ar_sendmail.rb +65 -0
  22. data/lib/deprec/recipes/canonical.rb +57 -0
  23. data/lib/deprec/recipes/deprec.rb +155 -0
  24. data/lib/deprec/recipes/deprecated.rb +71 -0
  25. data/lib/deprec/recipes/example.rb +115 -0
  26. data/lib/deprec/recipes/git.rb +168 -0
  27. data/lib/deprec/recipes/gitosis.rb +47 -0
  28. data/lib/deprec/recipes/god.rb +107 -0
  29. data/lib/deprec/recipes/heartbeat.rb +138 -0
  30. data/lib/deprec/recipes/iptables.rb +53 -0
  31. data/lib/deprec/recipes/logrotate.rb +51 -0
  32. data/lib/deprec/recipes/lvm.rb +20 -0
  33. data/lib/deprec/recipes/memcached.rb +102 -0
  34. data/lib/deprec/recipes/mongrel.rb +209 -0
  35. data/lib/deprec/recipes/monit.rb +130 -0
  36. data/lib/deprec/recipes/mysql.rb +115 -0
  37. data/lib/deprec/recipes/nagios.rb +302 -0
  38. data/lib/deprec/recipes/network.rb +84 -0
  39. data/lib/deprec/recipes/nginx.rb +154 -0
  40. data/lib/deprec/recipes/ntp.rb +96 -0
  41. data/lib/deprec/recipes/php.rb +99 -0
  42. data/lib/deprec/recipes/postfix.rb +105 -0
  43. data/lib/deprec/recipes/rails.rb +302 -0
  44. data/lib/deprec/recipes/ruby.rb +66 -0
  45. data/lib/deprec/recipes/sphinx.rb +83 -0
  46. data/lib/deprec/recipes/ssh.rb +93 -0
  47. data/lib/deprec/recipes/svn.rb +169 -0
  48. data/lib/deprec/recipes/swiftiply.rb +108 -0
  49. data/lib/deprec/recipes/thin.rb +201 -0
  50. data/lib/deprec/recipes/trac.rb +277 -0
  51. data/lib/deprec/recipes/ubuntu.rb +20 -0
  52. data/lib/deprec/recipes/users.rb +90 -0
  53. data/lib/deprec/recipes/utils.rb +39 -0
  54. data/lib/deprec/recipes/xen.rb +259 -0
  55. data/lib/deprec/templates/aoe/aoe-init +55 -0
  56. data/lib/deprec/templates/aoe/fence_aoemask +351 -0
  57. data/lib/deprec/templates/apache/httpd-vhost-app.conf.erb +144 -0
  58. data/lib/deprec/templates/apache/httpd.conf +465 -0
  59. data/lib/deprec/templates/apache/index.html.erb +37 -0
  60. data/lib/deprec/templates/apache/master.css +72 -0
  61. data/lib/deprec/templates/ar_sendmail/logrotate.conf.erb +9 -0
  62. data/lib/deprec/templates/ar_sendmail/monit.conf.erb +5 -0
  63. data/lib/deprec/templates/coraid/aoe-init +55 -0
  64. data/lib/deprec/templates/deprec/caprc.erb +14 -0
  65. data/lib/deprec/templates/god/god-init-script +71 -0
  66. data/lib/deprec/templates/god/god-notifications +0 -0
  67. data/lib/deprec/templates/god/god_mongrel.erb +81 -0
  68. data/lib/deprec/templates/god/god_mysql.erb +50 -0
  69. data/lib/deprec/templates/god/god_nginx.erb +61 -0
  70. data/lib/deprec/templates/god/god_thin.erb +80 -0
  71. data/lib/deprec/templates/heartbeat/authkeys.erb +2 -0
  72. data/lib/deprec/templates/heartbeat/ha.cf.erb +15 -0
  73. data/lib/deprec/templates/heartbeat/haresources.erb +1 -0
  74. data/lib/deprec/templates/iptables/iptables.up.erb +41 -0
  75. data/lib/deprec/templates/logrotate/logrotate.conf.erb +32 -0
  76. data/lib/deprec/templates/memcached/memcached-init-script +65 -0
  77. data/lib/deprec/templates/memcached/memcached.conf.erb +46 -0
  78. data/lib/deprec/templates/mongrel/logrotate.conf.erb +11 -0
  79. data/lib/deprec/templates/mongrel/mongrel_cluster-init-script +54 -0
  80. data/lib/deprec/templates/mongrel/mongrel_cluster.logrotate.d +14 -0
  81. data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +10 -0
  82. data/lib/deprec/templates/mongrel/monit.conf.erb +17 -0
  83. data/lib/deprec/templates/monit/monit-init-script +104 -0
  84. data/lib/deprec/templates/monit/monitrc.erb +227 -0
  85. data/lib/deprec/templates/monit/nothing +0 -0
  86. data/lib/deprec/templates/mysql/create_databases.sql +20 -0
  87. data/lib/deprec/templates/mysql/database.yml.prod +6 -0
  88. data/lib/deprec/templates/mysql/database.yml.stage +6 -0
  89. data/lib/deprec/templates/mysql/my.cnf.erb +140 -0
  90. data/lib/deprec/templates/mysql/sphinx.conf.prod +542 -0
  91. data/lib/deprec/templates/mysql/sphinx.conf.stage +542 -0
  92. data/lib/deprec/templates/nagios/cgi.cfg.erb +321 -0
  93. data/lib/deprec/templates/nagios/commands.cfg.erb +240 -0
  94. data/lib/deprec/templates/nagios/contacts.cfg.erb +75 -0
  95. data/lib/deprec/templates/nagios/hosts.cfg.erb +70 -0
  96. data/lib/deprec/templates/nagios/htpasswd.users +1 -0
  97. data/lib/deprec/templates/nagios/localhost.cfg.erb +157 -0
  98. data/lib/deprec/templates/nagios/nagios.cfg.erb +1274 -0
  99. data/lib/deprec/templates/nagios/nagios_apache_vhost.conf.erb +45 -0
  100. data/lib/deprec/templates/nagios/nrpe.cfg.erb +208 -0
  101. data/lib/deprec/templates/nagios/nrpe.xinetd.erb +16 -0
  102. data/lib/deprec/templates/nagios/resource.cfg.erb +34 -0
  103. data/lib/deprec/templates/nagios/services.cfg.erb +7 -0
  104. data/lib/deprec/templates/nagios/templates.cfg.erb +190 -0
  105. data/lib/deprec/templates/nagios/timeperiods.cfg.erb +94 -0
  106. data/lib/deprec/templates/network/hostname.erb +1 -0
  107. data/lib/deprec/templates/network/hosts.erb +2 -0
  108. data/lib/deprec/templates/network/interfaces.erb +18 -0
  109. data/lib/deprec/templates/nginx/logrotate.conf.erb +13 -0
  110. data/lib/deprec/templates/nginx/mime.types.erb +70 -0
  111. data/lib/deprec/templates/nginx/nginx-init-script +62 -0
  112. data/lib/deprec/templates/nginx/nginx.conf.erb +53 -0
  113. data/lib/deprec/templates/nginx/nginx.logrotate.d +12 -0
  114. data/lib/deprec/templates/nginx/nothing.conf +1 -0
  115. data/lib/deprec/templates/nginx/rails_nginx_vhost.conf.erb +45 -0
  116. data/lib/deprec/templates/ntp/ntp.conf.erb +42 -0
  117. data/lib/deprec/templates/postfix/aliases.erb +3 -0
  118. data/lib/deprec/templates/postfix/dynamicmaps.cf.erb +8 -0
  119. data/lib/deprec/templates/postfix/main.cf.erb +41 -0
  120. data/lib/deprec/templates/postfix/master.cf.erb +77 -0
  121. data/lib/deprec/templates/rails/database.yml.erb +6 -0
  122. data/lib/deprec/templates/sphinx/monit.conf.erb +5 -0
  123. data/lib/deprec/templates/ssh/ssh_config.erb +50 -0
  124. data/lib/deprec/templates/ssh/sshd_config.erb +78 -0
  125. data/lib/deprec/templates/subversion/svn.apache.vhost.erb +43 -0
  126. data/lib/deprec/templates/swiftiply/swiftiply-init-script +61 -0
  127. data/lib/deprec/templates/swiftiply/swiftiply.yml.erb +11 -0
  128. data/lib/deprec/templates/thin/thin-init-script +51 -0
  129. data/lib/deprec/templates/thin/thin.yml.erb +11 -0
  130. data/lib/deprec/templates/trac/apache_vhost.conf.erb +24 -0
  131. data/lib/deprec/templates/trac/nginx_vhost.conf.erb +26 -0
  132. data/lib/deprec/templates/trac/trac.ini.erb +169 -0
  133. data/lib/deprec/templates/trac/trac_deprec.png +0 -0
  134. data/lib/deprec/templates/trac/tracd-init.erb +43 -0
  135. data/lib/deprec/templates/trac/users.htdigest.erb +0 -0
  136. data/lib/deprec/templates/xen/15-disable-hwclock +40 -0
  137. data/lib/deprec/templates/xen/network-bridge-wrapper +3 -0
  138. data/lib/deprec/templates/xen/xen-tools.conf.erb +220 -0
  139. data/lib/deprec/templates/xen/xend-config.sxp.erb +195 -0
  140. data/lib/deprec/templates/xen/xend-init.erb +69 -0
  141. data/lib/deprec/templates/xen/xendomains.erb +137 -0
  142. data/lib/deprec/templates/xen/xm.tmpl.erb +85 -0
  143. data/lib/vmbuilder_plugins/all.rb +20 -0
  144. data/lib/vmbuilder_plugins/apt.rb +93 -0
  145. data/lib/vmbuilder_plugins/emerge.rb +76 -0
  146. data/lib/vmbuilder_plugins/gem.rb +90 -0
  147. data/lib/vmbuilder_plugins/std.rb +203 -0
  148. metadata +207 -0
@@ -0,0 +1,201 @@
1
+ #thin_cluster Copyright 2006-2008 by Mike Bailey. All rights reserved.
2
+ Capistrano::Configuration.instance(:must_exist).load do
3
+
4
+ namespace :deprec do
5
+ namespace :thin do
6
+
7
+ set :thin_servers, 4
8
+ set :thin_port, 9001
9
+ set :thin_address, "127.0.0.1"
10
+ # set(:thin_socket) { "#{deploy_to}/shared/thin.sock" }
11
+ set(:thin_environment) { rails_env }
12
+ set(:thin_log_dir) { "#{deploy_to}/shared/log" }
13
+ set(:thin_pid_dir) { "#{deploy_to}/shared/pids" }
14
+ set :thin_conf_dir, '/etc/thin'
15
+ set(:thin_conf) { "/etc/thin/#{application}.yml" }
16
+
17
+ set(:thin_swiftiply_conf) { "/etc/swiftiply/#{application}.yml" }
18
+ set :thin_swiftiply, true
19
+
20
+ set :thin_user_prefix, 'thin_'
21
+ set(:thin_user) { thin_user_prefix + application }
22
+ set :thin_group_prefix, 'app_'
23
+ set(:thin_group) { thin_group_prefix + application }
24
+
25
+ # Install
26
+ desc "Install thin"
27
+ task :install, :roles => :app do
28
+ gem2.install 'thin'
29
+ end
30
+
31
+
32
+ # Configure
33
+
34
+ SYSTEM_CONFIG_FILES[:thin] = [
35
+
36
+ {:template => 'thin-init-script',
37
+ :path => '/etc/init.d/thin',
38
+ :mode => 0755,
39
+ :owner => 'root:root'}
40
+
41
+ ]
42
+
43
+ PROJECT_CONFIG_FILES[:thin] = [
44
+
45
+ {:template => 'thin.yml.erb',
46
+ :path => 'thin.yml',
47
+ :mode => 0644,
48
+ :owner => 'root:root'}
49
+
50
+ ]
51
+
52
+ PROJECT_CONFIG_FILES[:swiftiply] = [
53
+
54
+ {:template => 'swiftiply.yml.erb',
55
+ :path => 'swiftiply.yml',
56
+ :mode => 0644,
57
+ :owner => 'root:root'}
58
+
59
+ ]
60
+
61
+ desc "Generate configuration file(s) for thin from template(s)"
62
+ task :config_gen do
63
+ config_gen_system
64
+ config_gen_project
65
+ end
66
+
67
+ task :config_gen_system do
68
+ SYSTEM_CONFIG_FILES[:thin].each do |file|
69
+ deprec2.render_template(:thin, file)
70
+ end
71
+ end
72
+
73
+ task :config_gen_project do
74
+ PROJECT_CONFIG_FILES[:thin].each do |file|
75
+ deprec2.render_template(:thin, file)
76
+ end
77
+ PROJECT_CONFIG_FILES[:swiftiply].each do |file|
78
+ deprec2.render_template(:thin, file)
79
+ end
80
+ end
81
+
82
+ desc 'Deploy configuration files(s) for thin'
83
+ task :config, :roles => :app do
84
+ config_system
85
+ config_project
86
+ end
87
+
88
+ task :config_system, :roles => :app do
89
+ deprec2.push_configs(:thin, SYSTEM_CONFIG_FILES[:thin])
90
+ end
91
+
92
+ task :config_project, :roles => :app do
93
+ create_thin_user_and_group
94
+ deprec2.push_configs(:thin, PROJECT_CONFIG_FILES[:thin])
95
+ deprec2.push_configs(:thin, PROJECT_CONFIG_FILES[:swiftiply])
96
+ symlink_thin_cluster
97
+ end
98
+
99
+ task :symlink_thin_cluster, :roles => :app do
100
+ deprec2.mkdir(thin_conf_dir, :via => :sudo)
101
+ sudo "ln -sf #{deploy_to}/thin/thin.yml #{thin_conf}"
102
+ sudo "ln -sf #{deploy_to}/thin/swiftiply.yml #{thin_swiftiply_conf}"
103
+ end
104
+
105
+ task :unlink_thin_cluster, :roles => :app do
106
+ deprec2.mkdir(thin_conf_dir, :via => :sudo)
107
+ sudo "test -L #{thin_conf} && unlink #{thin_conf}"
108
+ sudo "test -L #{thin_swiftiply_conf} && unlink #{thin_swiftiply_conf}"
109
+ end
110
+
111
+
112
+ # Control
113
+
114
+ desc "Start application server."
115
+ task :start, :roles => :app do
116
+ send(run_method, "thin start -C #{thin_conf}")
117
+ end
118
+
119
+ desc "Stop application server."
120
+ task :stop, :roles => :app do
121
+ send(run_method, "thin stop -C #{thin_conf}")
122
+ end
123
+
124
+ desc "Restart application server."
125
+ task :restart, :roles => :app do
126
+ send(run_method, "thin restart -C #{thin_conf}")
127
+ end
128
+
129
+ task :activate, :roles => :app do
130
+ activate_system
131
+ activate_project
132
+ end
133
+
134
+ task :activate_system, :roles => :app do
135
+ send(run_method, "update-rc.d thin defaults")
136
+ end
137
+
138
+ task :activate_project, :roles => :app do
139
+ symlink_thin_cluster
140
+ end
141
+
142
+ task :deactivate, :roles => :app do
143
+ puts
144
+ puts "******************************************************************"
145
+ puts
146
+ puts "Danger!"
147
+ puts
148
+ puts "Do you want to deactivate just this project or all thin"
149
+ puts "clusters on this server? Try a more granular command:"
150
+ puts
151
+ puts "cap deprec:thin:deactivate_system # disable all clusters"
152
+ puts "cap deprec:thin:deactivate_project # disable only this project"
153
+ puts
154
+ puts "******************************************************************"
155
+ puts
156
+ end
157
+
158
+ task :deactivate_system, :roles => :app do
159
+ send(run_method, "update-rc.d -f thin remove")
160
+ end
161
+
162
+ task :deactivate_project, :roles => :app do
163
+ unlink_thin_cluster
164
+ restart
165
+ end
166
+
167
+ task :backup, :roles => :app do
168
+ end
169
+
170
+ task :restore, :roles => :app do
171
+ end
172
+
173
+ desc "create user and group for mongel to run as"
174
+ task :create_thin_user_and_group, :roles => :app do
175
+ deprec2.groupadd(thin_group)
176
+ deprec2.useradd(thin_user, :group => thin_group, :homedir => false)
177
+ # Set the primary group for the thin user (in case user already existed
178
+ # when previous command was run)
179
+ sudo "usermod --gid #{thin_group} #{thin_user}"
180
+ end
181
+
182
+ desc "set group ownership and permissions on dirs thin needs to write to"
183
+ task :set_perms_for_thin_dirs, :roles => :app do
184
+ tmp_dir = "#{deploy_to}/current/tmp"
185
+ shared_dir = "#{deploy_to}/shared"
186
+ files = ["#{thin_log_dir}/thin.log", "#{thin_log_dir}/#{rails_env}.log"]
187
+
188
+ sudo "chgrp -R #{thin_group} #{tmp_dir} #{shared_dir}"
189
+ sudo "chmod -R g+w #{tmp_dir} #{shared_dir}"
190
+ # set owner and group of log files
191
+ files.each { |file|
192
+ sudo "touch #{file}"
193
+ sudo "chown #{thin_user} #{file}"
194
+ sudo "chgrp #{thin_group} #{file}"
195
+ sudo "chmod g+w #{file}"
196
+ }
197
+ end
198
+
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,277 @@
1
+ # Copyright 2006-2008 by Mike Bailey. All rights reserved.
2
+ Capistrano::Configuration.instance(:must_exist).load do
3
+ namespace :deprec do namespace :trac do
4
+
5
+ # Master tracd process for server
6
+ set :tracd_cmd, '/usr/bin/tracd'
7
+ set :tracd_port, '9000'
8
+ set :tracd_pidfile, '/var/run/tracd.pid'
9
+
10
+ # Settings for this projects trac instance
11
+ set(:tracd_domain_root) { domain.sub(/.*?\./,'') } # strip subdomain from domain
12
+ set(:tracd_vhost_domain) { "trac-#{application}.#{tracd_domain_root}" } # nginx will proxy this domain to tracd
13
+
14
+ set(:trac_backup_dir) { "#{backup_dir}/trac" }
15
+ set(:trac_path) { exists?(:deploy_to) ? "#{deploy_to}/trac" : Capistrano::CLI.ui.ask('path to trac config') }
16
+ set(:tracd_parent_dir) { "/etc/trac.d" }
17
+ set(:trac_password_file) { "#{trac_path}/conf/users.htdigest" }
18
+ set(:trac_account) { Capistrano::CLI.prompt('enter new trac user account name') }
19
+ set :trac_passwordfile_exists, true # hack - should check on remote system instead
20
+ set(:trac_header_logo_link) { trac_home_url }
21
+ # We will symlink each projects trac dir into this dir for tracd to find
22
+
23
+ # project
24
+ set(:trac_domain) { domain.sub(/^.*?\./, 'trac.') }
25
+ set(:trac_home_url) { "http://#{trac_domain}/" }
26
+ set(:trac_desc) { application }
27
+
28
+ # Settings only used for generating trac.ini for this project
29
+ # - notification
30
+ set :trac_always_notify_owner, false
31
+ set :trac_always_notify_reporter, false
32
+ set :trac_always_notify_updater, true
33
+ set :trac_smtp_always_bcc, ''
34
+ set :trac_smtp_always_cc, ''
35
+ set :trac_smtp_default_domain, ''
36
+ set :trac_smtp_enabled, true
37
+ set :trac_smtp_from, 'trac@localhost'
38
+ set :trac_smtp_password, ''
39
+ set :trac_smtp_port, 25
40
+ set :trac_smtp_replyto, 'trac@localhost'
41
+ set :trac_smtp_server, 'localhost'
42
+ set :trac_smtp_subject_prefix, '__default__'
43
+ set :trac_smtp_user, ''
44
+ set :trac_use_public_cc, false
45
+ set :trac_use_short_addr, false
46
+ set :trac_use_tls, false
47
+ # - other
48
+ set(:trac_base_url) { trac_home_url }
49
+
50
+ desc "Install trac on server"
51
+ task :install, :roles => :scm do
52
+ install_deps
53
+ sudo "easy_install Trac==0.11rc1"
54
+ create_pid_dir
55
+ create_parent_dir
56
+ config_gen_system
57
+ config_system
58
+ activate_system
59
+ end
60
+
61
+ task :install_deps do
62
+ apt.install( {:base => %w(sqlite3 python-setuptools python-subversion)}, :stable )
63
+ end
64
+
65
+ # The start script has a couple of config values in it.
66
+ # We may want to extract them into a config file later
67
+ # and install this script as part of the :install task.
68
+ SYSTEM_CONFIG_FILES[:trac] = [
69
+ {:template => 'tracd-init.erb',
70
+ :path => '/etc/init.d/tracd',
71
+ :mode => 0755,
72
+ :owner => 'root:root'}
73
+ ]
74
+
75
+ PROJECT_CONFIG_FILES[:trac] = [
76
+ {:template => 'users.htdigest.erb',
77
+ :path => "conf/users.htdigest",
78
+ :mode => 0644,
79
+ :owner => 'root:root'},
80
+
81
+ {:template => 'trac.ini.erb',
82
+ :path => "conf/trac.ini",
83
+ :mode => 0644,
84
+ :owner => 'root:root'},
85
+
86
+ {:template => 'nginx_vhost.conf.erb',
87
+ :path => "conf/nginx_vhost.conf",
88
+ :mode => 0644,
89
+ :owner => 'root:root'}
90
+ ]
91
+
92
+ desc "Generate config files for trac"
93
+ task :config_gen do
94
+ config_gen_system
95
+ config_gen_project
96
+ end
97
+
98
+ task :config_gen_system do
99
+ SYSTEM_CONFIG_FILES[:trac].each do |file|
100
+ deprec2.render_template(:trac, file)
101
+ end
102
+ end
103
+
104
+ task :config_gen_project do
105
+ PROJECT_CONFIG_FILES[:trac].each do |file|
106
+ deprec2.render_template(:trac, file)
107
+ end
108
+ end
109
+
110
+ desc "Push trac config files to server"
111
+ task :config, :roles => :scm do
112
+ config_system
113
+ config_project
114
+ restart
115
+ top.deprec.nginx.restart
116
+ end
117
+
118
+ task :config_system, :roles => :scm do
119
+ deprec2.push_configs(:trac, SYSTEM_CONFIG_FILES[:trac])
120
+ end
121
+
122
+ task :config_project, :roles => :scm do
123
+ deprec2.push_configs(:trac, PROJECT_CONFIG_FILES[:trac])
124
+ symlink_nginx_vhost
125
+ end
126
+
127
+ desc "Initialize the trac db for this project"
128
+ task :setup, :roles => :scm do
129
+ init
130
+ config_gen_project
131
+ config_project
132
+ activate_project
133
+ # set_default_permissions # XXX re-enable this
134
+ # create trac account for current user
135
+ set :trac_account, user
136
+ set :trac_passwordfile_exists, false # hack - should check on remote system instead
137
+ # user_add # XXX re-enable
138
+ end
139
+
140
+ task :init, :roles => :scm do
141
+ deprec2.mkdir(trac_path, :via => :sudo)
142
+ sudo "trac-admin #{trac_path} initenv #{application} sqlite:db/trac.db svn #{repos_root}"
143
+ end
144
+
145
+ task :set_default_permissions, :roles => :scm do
146
+ anonymous_disable
147
+ authenticated_enable
148
+ end
149
+
150
+ task :start, :roles => :scm do
151
+ sudo "/etc/init.d/tracd start"
152
+ end
153
+
154
+ task :stop, :roles => :scm do
155
+ sudo "/etc/init.d/tracd stop"
156
+ end
157
+
158
+ task :restart, :roles => :scm do
159
+ stop
160
+ start
161
+ end
162
+
163
+ task :activate, :roles => :scm do
164
+ activate_system
165
+ activate_project
166
+ end
167
+
168
+ task :activate_system, :roles => :scm do
169
+ sudo "update-rc.d tracd defaults"
170
+ end
171
+
172
+ task :activate_project, :roles => :scm do
173
+ symlink_project
174
+ end
175
+
176
+ task :deactivate, :roles => :scm do
177
+ deactivate_system
178
+ deactivate_project
179
+ end
180
+
181
+ task :deactivate_system, :roles => :scm do
182
+ sudo "update-rc.d -f tracd remove"
183
+ end
184
+
185
+ task :deactivate_project, :roles => :scm do
186
+ unlink_project
187
+ unlink_nginx_vhost
188
+ restart
189
+ end
190
+
191
+ desc "Create backup of trac repository"
192
+ task :backup, :roles => :web do
193
+ # http://trac.edgewall.org/wiki/TracBackup
194
+ timestamp = Time.now.utc.strftime("%Y%m%d%H%M%S")
195
+ dest_dir = File.join(trac_backup_dir, "trac_#{application}_#{timestamp}")
196
+ sudo "trac-admin #{trac_path} hotcopy #{dest_dir}"
197
+ end
198
+
199
+ desc "Restore trac repository from backup"
200
+ task :restore, :roles => :web do
201
+ # prompt user to select from list of locally stored backups
202
+ # tracd_stop
203
+ # copy out backup
204
+ end
205
+
206
+ #
207
+ # Service specific tasks for end users
208
+ #
209
+ desc "create a trac user"
210
+ task :user_add, :roles => :scm do
211
+ create_file = trac_passwordfile_exists ? '' : ' -c '
212
+ htdigest = '/usr/local/apache2/bin/htdigest'
213
+ # XXX check if htdigest file exists and add '-c' option if not
214
+ # sudo "test -f #{trac_path/conf/users.htdigest}
215
+ create_file = trac_passwordfile_exists ? '' : ' -c '
216
+ deprec2.sudo_with_input("#{htdigest} #{create_file} #{trac_path}/conf/users.htdigest #{application} #{trac_account}", /password:/)
217
+ end
218
+
219
+ desc "list trac users"
220
+ task :list_users, :roles => :scm do
221
+ sudo "cat #{trac_path}/conf/users.htdigest"
222
+ end
223
+
224
+ # desc "disable anonymous access to everything"
225
+ task :anonymous_disable, :roles => :scm do
226
+ sudo "trac-admin #{trac_path} permission remove anonymous '*'"
227
+ end
228
+
229
+ # desc "enable authenticated users access to everything"
230
+ task :authenticated_enable, :roles => :scm do
231
+ sudo "trac-admin #{trac_path} permission add authenticated TRAC_ADMIN"
232
+ end
233
+
234
+ #
235
+ # Helper tasks used by other tasks
236
+ #
237
+
238
+ # Link the trac repos for this project into the master trac repos dir
239
+ # We do this so we can use trac for multiple projects on the same server
240
+ task :symlink_project, :roles => :scm do
241
+ sudo "ln -sf #{trac_path} #{tracd_parent_dir}/#{application}"
242
+ end
243
+
244
+ task :unlink_project, :roles => :scm do
245
+ link = "#{tracd_parent_dir}/#{application}"
246
+ sudo "test -h #{link} && sudo unlink #{link} || true"
247
+ end
248
+
249
+ task :symlink_nginx_vhost, :roles => :scm do
250
+ sudo "ln -sf #{deploy_to}/trac/conf/nginx_vhost.conf #{nginx_vhost_dir}/tracd-#{application}.conf"
251
+ end
252
+
253
+ task :unlink_nginx_vhost, :roles => :scm do
254
+ link = "#{nginx_vhost_dir}/tracd-#{application}.conf"
255
+ sudo "test -h #{link} && unlink #{link} || true"
256
+ end
257
+
258
+ # task :symlink_apache_vhost, :roles => :scm do
259
+ # sudo "ln -sf #{deploy_to}/trac/conf/trac_apache_vhost.conf #{apache_vhost_dir}/#{application}-trac.conf"
260
+ # end
261
+ #
262
+ # task :unlink_apache_vhost, :roles => :scm do
263
+ # link = "#{apache_vhost_dir}/#{application}-trac.conf"
264
+ # sudo "test -h #{link} && unlink #{link} || true"
265
+ # end
266
+
267
+ task :create_pid_dir, :roles => :scm do
268
+ deprec2.mkdir(File.dirname(tracd_pidfile))
269
+ end
270
+
271
+ task :create_parent_dir, :roles => :scm do
272
+ deprec2.mkdir(tracd_parent_dir, :via => :sudo)
273
+ end
274
+
275
+ end end
276
+
277
+ end