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