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
data/Manifest ADDED
@@ -0,0 +1,39 @@
1
+ Manifest
2
+ README
3
+ Rakefile
4
+ lib/backgroundrb/backgroundrb.rb
5
+ lib/chrisrec.rb
6
+ lib/console/console.rb
7
+ lib/daemon/daemon.rb
8
+ lib/gitosis/gitosis.rb
9
+ lib/memcached/memcached.rb
10
+ lib/munin/munin.rb
11
+ lib/mysql/mysql.rake
12
+ lib/mysql/mysql.rb
13
+ lib/rake/rake.rb
14
+ lib/rakecron/rakecron.rb
15
+ lib/starling/starling.rb
16
+ lib/tomcat/tomcat.rb
17
+ lib/workling/workling.rb
18
+ template/daemon/daemon-init-script.erb
19
+ template/daemon/monit.conf.erb
20
+ template/memcached/memcached-conf.erb
21
+ template/memcached/memcached.erb
22
+ template/memcached/monit.conf.erb
23
+ template/memcached/start-memcached.erb
24
+ template/munin/httpd-vhost-munin.conf.erb
25
+ template/munin/munin.conf.erb
26
+ template/munin/munin_nginx_vhost.conf.erb
27
+ template/rakecron/rakecron.erb
28
+ template/starling/monit.conf.erb
29
+ template/starling/starling-init-script.erb
30
+ template/tomcat/conf/server.xml.erb
31
+ template/tomcat/conf/web.xml
32
+ template/tomcat/logs/empty.txt
33
+ template/tomcat/monit.conf.erb
34
+ template/tomcat/temp/empty.txt
35
+ template/tomcat/tomcat.erb
36
+ template/tomcat/webapps/empty.txt
37
+ template/tomcat/work/empty.txt
38
+ template/workling/monit.conf.erb
39
+ template/workling/workling-init-script.erb
data/README ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ # Rakefile
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'echoe'
5
+
6
+ Echoe.new('chrisrec', '0.1.0') do |p|
7
+ p.description = "Extend Deprec with other recipies."
8
+ p.url = "http://github.com/dougochris/chrisrec"
9
+ p.author = "Chris Douglas"
10
+ p.email = "dougo.chris@gmail.com"
11
+ p.ignore_pattern = ["tmp/*", "script/*"]
12
+ p.development_dependencies = []
13
+ end
14
+
15
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
data/chrisrec.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{chrisrec}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Chris Douglas"]
9
+ s.date = %q{2010-02-22}
10
+ s.description = %q{Extend Deprec with other recipies.}
11
+ s.email = %q{dougo.chris@gmail.com}
12
+ s.extra_rdoc_files = ["README", "lib/backgroundrb/backgroundrb.rb", "lib/chrisrec.rb", "lib/console/console.rb", "lib/daemon/daemon.rb", "lib/gitosis/gitosis.rb", "lib/memcached/memcached.rb", "lib/munin/munin.rb", "lib/mysql/mysql.rake", "lib/mysql/mysql.rb", "lib/rake/rake.rb", "lib/rakecron/rakecron.rb", "lib/starling/starling.rb", "lib/tomcat/tomcat.rb", "lib/workling/workling.rb"]
13
+ s.files = ["Manifest", "README", "Rakefile", "lib/backgroundrb/backgroundrb.rb", "lib/chrisrec.rb", "lib/console/console.rb", "lib/daemon/daemon.rb", "lib/gitosis/gitosis.rb", "lib/memcached/memcached.rb", "lib/munin/munin.rb", "lib/mysql/mysql.rake", "lib/mysql/mysql.rb", "lib/rake/rake.rb", "lib/rakecron/rakecron.rb", "lib/starling/starling.rb", "lib/tomcat/tomcat.rb", "lib/workling/workling.rb", "template/daemon/daemon-init-script.erb", "template/daemon/monit.conf.erb", "template/memcached/memcached-conf.erb", "template/memcached/memcached.erb", "template/memcached/monit.conf.erb", "template/memcached/start-memcached.erb", "template/munin/httpd-vhost-munin.conf.erb", "template/munin/munin.conf.erb", "template/munin/munin_nginx_vhost.conf.erb", "template/rakecron/rakecron.erb", "template/starling/monit.conf.erb", "template/starling/starling-init-script.erb", "template/tomcat/conf/server.xml.erb", "template/tomcat/conf/web.xml", "template/tomcat/logs/empty.txt", "template/tomcat/monit.conf.erb", "template/tomcat/temp/empty.txt", "template/tomcat/tomcat.erb", "template/tomcat/webapps/empty.txt", "template/tomcat/work/empty.txt", "template/workling/monit.conf.erb", "template/workling/workling-init-script.erb", "chrisrec.gemspec"]
14
+ s.homepage = %q{http://github.com/dougochris/chrisrec}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Chrisrec", "--main", "README"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{chrisrec}
18
+ s.rubygems_version = %q{1.3.6}
19
+ s.summary = %q{Extend Deprec with other recipies.}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
26
+ else
27
+ end
28
+ else
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ namespace :backgroundrb do
4
+
5
+ desc "Stop the backgroundrb server"
6
+ task :stop , :roles => :app do
7
+ run "cd #{current_path} && PATH=/opt/ruby-enterprise/bin:$PATH RAILS_ENV=production ./script/backgroundrb stop"
8
+ end
9
+
10
+ desc "Start the backgroundrb server"
11
+ task :start , :roles => :app do
12
+ run "cd #{current_path} && PATH=/opt/ruby-enterprise/bin:$PATH RAILS_ENV=production ./script/backgroundrb start"
13
+ end
14
+
15
+ desc "Start the backgroundrb server"
16
+ task :restart, :roles => :app do
17
+ stop
18
+ start
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/chrisrec.rb ADDED
@@ -0,0 +1,12 @@
1
+ require "#{File.dirname(__FILE__)}/gitosis/gitosis.rb"
2
+ require "#{File.dirname(__FILE__)}/munin/munin.rb"
3
+ require "#{File.dirname(__FILE__)}/rakecron/rakecron.rb"
4
+ require "#{File.dirname(__FILE__)}/backgroundrb/backgroundrb.rb"
5
+ require "#{File.dirname(__FILE__)}/workling/workling.rb"
6
+ require "#{File.dirname(__FILE__)}/starling/starling.rb"
7
+ require "#{File.dirname(__FILE__)}/rake/rake.rb"
8
+ require "#{File.dirname(__FILE__)}/mysql/mysql.rb"
9
+ require "#{File.dirname(__FILE__)}/memcached/memcached.rb"
10
+ require "#{File.dirname(__FILE__)}/daemon/daemon.rb"
11
+ require "#{File.dirname(__FILE__)}/tomcat/tomcat.rb"
12
+ require "#{File.dirname(__FILE__)}/console/console.rb"
@@ -0,0 +1,19 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ namespace :script do
4
+ def interactive_ssh(cmd)
5
+ system %Q{ssh #{user}@#{roles[:app].servers.first.host} -t '#{cmd}'}
6
+ end
7
+
8
+ desc 'run the rails console on the app-server of the current stage'
9
+ task :console, :roles => :app do
10
+ interactive_ssh "cd #{deploy_to}/current && script/console #{rails_env}"
11
+ end
12
+
13
+ desc 'open a SSH prompt in the currently deployed rails app'
14
+ task :ssh, :roles => :app do
15
+ interactive_ssh "cd #{deploy_to}/current && bash"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,134 @@
1
+ # chrisrec:daemon:deploy:setup
2
+ # chrisrec:daemon:install
3
+
4
+ # chrisrec:daemon:config_gen
5
+ # chrisrec:daemon:config
6
+ # chrisrec:daemon:restart
7
+
8
+ # chrisrec:daemon:deploy
9
+ # chrisrec:daemon:rollback
10
+
11
+ Capistrano::Configuration.instance(:must_exist).load do
12
+ namespace :chrisrec do
13
+ namespace :daemon do
14
+
15
+ # set :daemon, "TODO"
16
+ # set :daemon_name, "TODO"
17
+ # set :daemon_pid, "TODO"
18
+
19
+ set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
20
+
21
+ SYSTEM_CONFIG_FILES[:daemon] = [
22
+ {:template => 'daemon-init-script.erb',
23
+ :path => 'daemon/etc/init.d/daemon',
24
+ :mode => 0755,
25
+ :owner => 'root:root'},
26
+
27
+ {:template => 'monit.conf.erb',
28
+ :path => "daemon/etc/monit.d/monit_daemon.conf",
29
+ :mode => 0600,
30
+ :owner => 'root:root'}
31
+ ]
32
+
33
+ # Generating Configuration Files
34
+ desc "install any required gems"
35
+ task :install do
36
+ if gems_for_project
37
+ gems_for_project.each { |gem| gem2.install(gem) }
38
+ end
39
+ end
40
+
41
+ # Generating Configuration Files
42
+ desc "Generate configuration file(s) for daemon from template(s)"
43
+ task :config_gen do
44
+ SYSTEM_CONFIG_FILES[:daemon].each do |file|
45
+ deprec2.render_template(:daemon, file)
46
+ end
47
+ end
48
+
49
+ desc 'Deploy configuration files(s) for daemon'
50
+ task :config, :roles => :app do
51
+ deprec2.push_configs(:daemon, SYSTEM_CONFIG_FILES[:daemon])
52
+ symlink_init_d
53
+ symlink_monit_d
54
+
55
+ activate
56
+ end
57
+
58
+ desc "Stop daemon"
59
+ task :stop , :roles => :app do
60
+ sudo "/etc/init.d/#{daemon_name} stop"
61
+ end
62
+
63
+ desc "Start daemon"
64
+ task :start , :roles => :app do
65
+ sudo "/etc/init.d/#{daemon_name} start"
66
+ end
67
+
68
+ desc "Start the daemon server"
69
+ task :restart, :roles => :app do
70
+ stop
71
+ sleep(2)
72
+ start
73
+ end
74
+
75
+ task :activate, :roles => :app do
76
+ send(run_method, "update-rc.d #{daemon_name} defaults")
77
+ end
78
+
79
+ task :deactivate, :roles => :app do
80
+ send(run_method, "update-rc.d -f #{daemon_name} remove")
81
+ end
82
+
83
+ task :symlink_init_d do
84
+ sudo "ln -fs #{deploy_to}/daemon/daemon/etc/init.d/daemon /etc/init.d/#{daemon_name}"
85
+ end
86
+
87
+ task :symlink_monit_d do
88
+ sudo "ln -fs #{deploy_to}/daemon/daemon/etc/monit.d/monit_daemon.conf /etc/monit.d/monit_daemon_#{daemon_name}.conf"
89
+ end
90
+
91
+ namespace :deploy do
92
+ desc 'deploy'
93
+ task :default do
94
+ strategy.deploy!
95
+
96
+ run "rm -f #{current_path} && ln -s #{latest_release} #{current_path}"
97
+
98
+ # mkdir -p is making sure that the directories are there for some SCM's that don't
99
+ # save empty folders
100
+ run <<-CMD
101
+ rm -rf #{latest_release}/log #{latest_release}/tmp/pids &&
102
+ mkdir -p #{latest_release}/tmp &&
103
+ ln -s #{shared_path}/log #{latest_release}/log &&
104
+ ln -s #{shared_path}/pids #{latest_release}/tmp/pids
105
+ CMD
106
+
107
+ top.chrisrec.daemon.restart
108
+ end
109
+
110
+ desc 'setup'
111
+ task :setup do
112
+ dirs = [deploy_to, releases_path, shared_path]
113
+ dirs += shared_children.map { |d| File.join(shared_path, d) }
114
+ sudo "mkdir -p #{dirs.join(' ')}"
115
+ sudo "chgrp -R #{group} #{dirs.join(' ')}"
116
+ sudo "chmod g+w #{dirs.join(' ')}"
117
+ end
118
+
119
+ desc 'rollback'
120
+ task :rollback do
121
+ if previous_release
122
+ run "rm #{current_path}; ln -s #{previous_release} #{current_path}"
123
+ else
124
+ abort "could not rollback the code because there is no prior release"
125
+ end
126
+
127
+ run "if [ `readlink #{current_path}` != #{current_release} ]; then rm -rf #{current_release}; fi"
128
+
129
+ top.chrisrec.daemon.restart
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,131 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ namespace :gitosis do
4
+
5
+ desc "Sets up the remote user's public key on remote git user"
6
+ task :create_remote_user_key, :roles => :scm do
7
+ default(:target_user) {
8
+ Capistrano::CLI.ui.ask "Setup keys for which user?" do |q|
9
+ q.default = user
10
+ end
11
+ }
12
+
13
+ set (:git_ip) {
14
+ Capistrano::CLI.ui.ask "Enter git ip address" do |q|
15
+ q.default = repository.scan(/@(.*):/).flatten.to_s
16
+ end
17
+ }
18
+
19
+ FileUtils.rm_rf("config/_gitosis_temp_#{domain}") if File.directory?("config/_gitosis_temp_#{domain}")
20
+ FileUtils.mkdir_p("config/_gitosis_temp_#{domain}") if !File.directory?("config/_gitosis_temp_#{domain}")
21
+ system("git clone git@#{git_ip}:gitosis-admin.git config/_gitosis_temp_#{domain}/gitosis-admin.git") if !File.exists?("config/_gitosis_temp_#{domain}/gitosis-admin.git")
22
+
23
+ # create key pair if it doesn't exist, and fetch public key
24
+ run "sh -c 'test -f /home/#{target_user}/.ssh/id_rsa.pub || /usr/bin/ssh-keygen -q -t rsa -N \"\" -f /home/#{target_user}/.ssh/id_rsa'"
25
+
26
+ get("/home/#{target_user}/.ssh/id_rsa.pub", "config/_gitosis_temp_#{domain}/#{target_user}.pub")
27
+ gitosis_server = File.open("config/_gitosis_temp_#{domain}/#{target_user}.pub", "r") do |line|
28
+ line.gets.split(" ").last
29
+ end
30
+ system("mv config/_gitosis_temp_#{domain}/#{target_user}.pub config/_gitosis_temp_#{domain}/gitosis-admin.git/keydir/#{gitosis_server}.pub")
31
+ system "cd config/_gitosis_temp_#{domain}/gitosis-admin.git && git add . && git commit -m \"Added write permission to new user\" && git push"
32
+ FileUtils.rm_rf("config/_gitosis_temp_#{domain}") if File.directory?("config/_gitosis_temp_#{domain}")
33
+ end
34
+
35
+ desc "Create the gitosis settings for remote repository"
36
+ task :config_gen, :roles => :scm do
37
+ set (:git_ip) {
38
+ Capistrano::CLI.ui.ask "Enter git ip address" do |q|
39
+ q.default = repository.scan(/@(.*):/).flatten.to_s
40
+ end
41
+ }
42
+
43
+ FileUtils.rm_rf("config/_gitosis_temp_") if File.directory?("config/_gitosis_temp_")
44
+ FileUtils.mkdir_p("config/_gitosis_temp_")
45
+ system("git clone git@#{git_ip}:gitosis-admin.git config/_gitosis_temp_/gitosis-admin.git")
46
+
47
+ puts "[group #{application}]"
48
+ puts "writable = #{application}"
49
+ puts "members = user1 user2 ..."
50
+ puts ""
51
+ puts "See config/_gitosis_temp_/gitosis-admin.git/keydir for available users"
52
+ puts ""
53
+ end
54
+
55
+ desc "Push the gitosis settings for remote repository"
56
+ task :config, :roles => :scm do
57
+ system "cd config/_gitosis_temp_/gitosis-admin.git && git add . && git commit -m \"Added repository #{application} and write permission to users\" && git push"
58
+ FileUtils.rm_rf("config/_gitosis_temp_") if File.directory?("config/_gitosis_temp_")
59
+ end
60
+
61
+ desc "Create remote git repository and import project into it"
62
+ task :setup_repo, :roles => :scm do
63
+ create_local_repos
64
+ push_local_repo
65
+ end
66
+
67
+ # Create git repository in local project
68
+ task :create_local_repos do
69
+ unless File.exists?(".git")
70
+ system("git init")
71
+ system("git remote add origin git@#{domain}:#{application}.git")
72
+ system("git add .")
73
+ system("git commit -a -m 'Initial import'")
74
+ end
75
+ end
76
+
77
+ # Import project into git repository.
78
+ task :push_local_repo, :roles => :scm do
79
+ add_ignores
80
+ set (:git_ip) {
81
+ Capistrano::CLI.ui.ask "Enter git ip address" do |q|
82
+ q.default = repository.scan(/@(.*):/).flatten.to_s
83
+ end
84
+ }
85
+
86
+ puts "Importing application."
87
+ system "git push git@#{git_ip}:#{application}.git master:refs/heads/master"
88
+ system "git config --add branch.master.remote origin"
89
+ system "git config --add branch.master.merge refs/heads/master"
90
+ puts "Your repository is: git@#{git_ip}:#{application}.git"
91
+ end
92
+
93
+ # Ignore log files, tmp, sqlite3
94
+ task :add_ignores, :roles => :scm do
95
+ ignore = <<-FILE
96
+ .DS_Store
97
+ log/*.log
98
+ tmp/**/*
99
+ db/*.sqlite3
100
+ FILE
101
+ ["log", "tmp/cache", "tmp/pids", "tmp/sessions", "tmp/sockets"].each do |dir|
102
+ system("touch #{dir}/.gitignore")
103
+ end
104
+ File.open(".gitignore", "w") { |f| f.write(ignore.strip.gsub(/^#{ignore[/\A\s*/]}/, "")) }
105
+ system "find . -type d -empty | xargs -I {} touch {}/.gitignore"
106
+ system "git add ."
107
+ system "git commit -a -m 'Touched .gitignore to emtpy folders, ignored log files, tmp, sqlite3 db'"
108
+ end
109
+
110
+ desc 'Tag deployment in git repository'
111
+ task :tag_deploy do
112
+ transaction do
113
+ tag_name = ['deployed', fetch(:stage,nil), release_name].compact.join('-')
114
+ `git tag #{tag_name} && git push --tags`
115
+ on_rollback do
116
+ `git tag -d #{tag_name} && git push #{git_remote} :#{tag_name}`
117
+ end
118
+ end
119
+ end
120
+
121
+ task :confirm do
122
+ message = "You are deploying to PRODUCTION. continue(y/n):"
123
+ answer = Capistrano::CLI.ui.ask(message)
124
+ abort "deployment to production was stopped" unless answer == 'y'
125
+
126
+ chrisrec.gitosis.tag_deploy # tag the production release
127
+ end
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,140 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :chrisrec do
3
+ namespace :memcached do
4
+
5
+ # role :cache, 'ADDRESS TO CACHE'
6
+
7
+ set :memcached_port, 11211
8
+ set :memcached_address, '127.0.0.1'
9
+ set :memcached_memory, 256
10
+ set :memcached_user, "memcached"
11
+ set :memcached_group, "memcached"
12
+ set :memcached_run_dir, "/var/run"
13
+ set :memcached_log_dir, "/var/log"
14
+
15
+ set :local_template_dir, "#{File.dirname(__FILE__)}/../../template"
16
+
17
+ desc "Install memcached"
18
+ task :install, :roles => :cache do
19
+ version = 'memcached-1.4.0'
20
+ set :src_package, {
21
+ :file => version + '.tar.gz',
22
+ # :md5sum => 'a08851f7fa7b15e92ee6320b7a79c321 memcached-1.2.2.tar.gz',
23
+ :dir => version,
24
+ :url => "http://www.danga.com/memcached/dist/#{version}.tar.gz",
25
+ :unpack => "tar zxf #{version}.tar.gz;",
26
+ :configure => %w{
27
+ ./configure
28
+ --prefix=/usr/local
29
+ ;
30
+ }.reject{|arg| arg.match '#'}.join(' '),
31
+ :make => 'make;',
32
+ :install => 'make install;'
33
+ }
34
+ apt.install( {:base => %w(libevent-dev)}, :stable )
35
+ deprec2.download_src(src_package, src_dir)
36
+ deprec2.install_from_src(src_package, src_dir)
37
+
38
+ # deprec2.mkdir(memcached_run_dir, :via => :sudo)
39
+ # deprec2.mkdir(memcached_log_dir, :via => :sudo)
40
+
41
+ create_memcached_user_and_group
42
+ set_perms_for_memcached_dirs
43
+ end
44
+
45
+ # Configure
46
+ SYSTEM_CONFIG_FILES[:memcached] = [
47
+ {:template => 'memcached.erb',
48
+ :path => 'memcached/etc/init.d/memcached',
49
+ :mode => 0755,
50
+ :owner => 'root:root'},
51
+
52
+ {:template => 'memcached-conf.erb',
53
+ :path => 'memcached/etc/init.d/memcached.conf',
54
+ :mode => 0755,
55
+ :owner => 'root:root'},
56
+
57
+ {:template => 'start-memcached.erb',
58
+ :path => 'memcached/etc/init.d/start-memcached',
59
+ :mode => 0755,
60
+ :owner => 'root:root'},
61
+
62
+ {:template => 'monit.conf.erb',
63
+ :path => "memcached/etc/monit.d/monit_memcached.conf",
64
+ :mode => 0600,
65
+ :owner => 'root:root'}
66
+ ]
67
+
68
+ # Generating Configuration Files
69
+ desc "Generate configuration file(s) for memcached from template(s)"
70
+ task :config_gen do
71
+ SYSTEM_CONFIG_FILES[:memcached].each do |file|
72
+ deprec2.render_template(:memcached, file)
73
+ end
74
+ end
75
+
76
+ desc 'Deploy configuration files(s) for memcached'
77
+ task :config, :roles => :cache do
78
+
79
+ deprec2.push_configs(:memcached, SYSTEM_CONFIG_FILES[:memcached])
80
+ symlink_init_d
81
+ symlink_monit_d
82
+
83
+ activate
84
+ end
85
+
86
+ desc "Stop memcached"
87
+ task :stop , :roles => :cache do
88
+ sudo "/etc/init.d/memcached_#{memcached_port} stop"
89
+ end
90
+
91
+ desc "Start memcached"
92
+ task :start , :roles => :cache do
93
+ sudo "/etc/init.d/memcached_#{memcached_port} start"
94
+ end
95
+
96
+ desc "Start the memcached server"
97
+ task :restart, :roles => :cache do
98
+ stop
99
+ sleep(2)
100
+ start
101
+ end
102
+
103
+ task :activate, :roles => :cache do
104
+ send(run_method, "update-rc.d memcached_#{memcached_port} defaults")
105
+ end
106
+
107
+ task :deactivate, :roles => :cache do
108
+ send(run_method, "update-rc.d -f memcached_#{memcached_port} remove")
109
+ end
110
+
111
+ # User/Group creation & permission assignment
112
+ # These were based off the tasks used in the mongrel recipe -
113
+ # as this was probably the nicest way to ensure these tasks
114
+ # were doing the right thing.
115
+ desc "create user and group for memcached to run as"
116
+ task :create_memcached_user_and_group, :roles => :cache do
117
+ deprec2.groupadd(memcached_group)
118
+ deprec2.useradd(memcached_user, :group => memcached_group, :homedir => false)
119
+ # Set the primary group for the memcached user (in case user already existed
120
+ # when previous command was run)
121
+ sudo "usermod --gid #{memcached_group} #{memcached_user}"
122
+ end
123
+
124
+ desc "set group ownership and permissions on dirs memcached needs to write to"
125
+ task :set_perms_for_memcached_dirs, :roles => :cache do
126
+ # sudo "chgrp -R #{memcached_group} #{memcached_run_dir}"
127
+ # sudo "chmod -R g+w #{memcached_run_dir}"
128
+ end
129
+
130
+ task :symlink_init_d, :roles => :cache do
131
+ sudo "ln -fs #{deploy_to}/memcached/memcached/etc/init.d/memcached /etc/init.d/memcached_#{memcached_port}"
132
+ end
133
+
134
+ task :symlink_monit_d, :roles => :cache do
135
+ sudo "ln -fs #{deploy_to}/memcached/memcached/etc/monit.d/monit_memcached.conf /etc/monit.d/monit_memcached_#{memcached_port}.conf"
136
+ end
137
+
138
+ end
139
+ end
140
+ end