capistrano-scalr 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in capistrano-scalr.gemspec
4
+ gemspec
data/README.markdown ADDED
@@ -0,0 +1,60 @@
1
+ ## capistrano-scalr
2
+
3
+ The capistrano-scalr gem conveniently packages modified versions of Donovan Bray's [Scalr capistrano recipes](http://groups.google.com/group/scalr-discuss/web/scalr-with-capistrano).
4
+
5
+ ## Installation and Usage
6
+
7
+ First, install the gem:
8
+
9
+ gem install capistrano-scalr
10
+
11
+ After gem installation, add the following to your deploy.rb:
12
+
13
+ set :gateway, "<gateway_host>"
14
+ role :gw, gateway, :no_release => true
15
+ set :gateway_type, "<centos|ubuntu>"
16
+ require 'capistrano-scalr'
17
+
18
+ The above will automatically connect to your scalr farm using the gateway you specify (the primary database server is a logical choice, since it usually stays pretty static), enumerate the instances in your farm, then create the following roles with the scalr hosts contained within:
19
+
20
+ - lb
21
+ - web
22
+ - app
23
+ - db
24
+ - memcached
25
+
26
+ I also recommend that you use ssh-agent on your development workstation, enable agent forwarding on your scalr hosts, and set this in deploy.rb:
27
+
28
+ set :ssh_options, { :forward_agent => true }
29
+
30
+ Once you have completed the above, you can test for proper operation by running the scalr:enum cap task:
31
+
32
+ $ cap scalr:enum
33
+ * executing `scalr:enum'
34
+ ** SCALR Hosts:
35
+ * executing "find /etc/aws/hosts | cut -d\"/\" -f5,6 | grep \"/\""
36
+ servers: ["scalrgw.domain.net"]
37
+ * establishing connection to gateway `scalrgw.domain.net'
38
+ * Creating gateway using scalrgw.domain.net
39
+ * establishing connection to `scalrgw.domain.net' via gateway
40
+ [scalrgw.domain.net] executing command
41
+ ** app/10.0.0.1
42
+ ** app/10.0.0.2
43
+ ** www/10.0.0.3
44
+ ** www/10.0.0.4
45
+ ** mysql/10.0.0.5
46
+ ** mysql/10.0.0.6
47
+ ** mysql-slave/10.0.0.5
48
+ ** mysql-master/10.0.0.6
49
+ command finished
50
+
51
+ You should now be able to deploy to your scalr farm via capistrano, and not have to worry about having to adjust your deploy.rb when instances change.
52
+
53
+ ## TODO
54
+
55
+ - Auto-detect gateway platform
56
+
57
+ ## Credits
58
+
59
+ - Thanks to [Donovan Bray](http://www.donovanbray.com), the original author of the Scalr capistrano recipes on which this gem's recipes are based
60
+ - Thanks to [Jamis Buck](http://weblog.jamisbuck.org) for the fantastic [Capistrano](http://capify.org)
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/capistrano-scalr/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "capistrano-scalr"
6
+ s.version = Capistrano::Scalr::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = []
9
+ s.email = []
10
+ s.homepage = "http://rubygems.org/gems/capistrano-scalr"
11
+ s.summary = "Capistrano recipes for deploying to Scalr"
12
+ s.description = "Capistrano recipes for deploying to Scalr"
13
+
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+ s.rubyforge_project = "capistrano-scalr"
16
+
17
+ s.add_development_dependency "bundler", ">= 1.0.0"
18
+
19
+ s.add_dependency "capistrano", ">= 2.0.0"
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
23
+ s.require_path = 'lib'
24
+ end
@@ -0,0 +1,5 @@
1
+ module Capistrano
2
+ module Scalr
3
+ VERSION = "0.5.0"
4
+ end
5
+ end
@@ -0,0 +1,81 @@
1
+ # module Capistrano
2
+ # module Scalr
3
+ # # Your code goes here...
4
+ # end
5
+ # end
6
+
7
+ unless Capistrano::Configuration.respond_to?(:instance)
8
+ abort "capistrano/scalr requires Capistrano 2"
9
+ end
10
+
11
+ Capistrano::Configuration.instance(:must_exist).load do
12
+
13
+ ###
14
+ # Code below is stolen from Jamis' capistrano-ext
15
+ def _cset(name, *args, &block)
16
+ unless exists?(name)
17
+ set(name, *args, &block)
18
+ end
19
+ end
20
+
21
+ # =========================================================================
22
+ # These variables MUST be set in the client capfiles. If they are not set,
23
+ # the deploy will fail with an error.
24
+ # =========================================================================
25
+
26
+ _cset(:gateway) { abort "Please specify the instance to use as a gateway. Example: set :gateway, 'foo'" }
27
+ _cset(:gateway_type) { abort "Please specify the type of instance for your gateway. Example: set :gateway_type, 'ubuntu'" }
28
+ ###
29
+
30
+ ###
31
+ # Modified recipes, initially taken from http://groups.google.com/group/scalr-discuss/web/scalr-with-capistrano
32
+ namespace :scalr do
33
+ desc "Enumerate SCALR hosts"
34
+ # task :enum, :roles=>[:db], :only => { :primary => true } do
35
+ task :enum, :roles=>[:gw] do
36
+ hosts = Hash.new
37
+ logger.info "SCALR Hosts:"
38
+ if (gateway_type == 'centos')
39
+ hosts_cmd = 'find /etc/scalr/private.d/hosts | cut -d"/" -f6,7 | grep "/"'
40
+ elsif (gateway_type == 'ubuntu')
41
+ hosts_cmd = 'find /etc/aws/hosts | cut -d"/" -f5,6 | grep "/"'
42
+ else
43
+ abort "You must specify a gateway type"
44
+ end
45
+ run hosts_cmd, :pty => true do |ch, stream, out|
46
+ next if out.chomp == ''
47
+ logger.info out.sub(/\//,' ')
48
+ out.split("\r\n").each do |host|
49
+ host=host.split("/")
50
+ (hosts[host[0]] ||= []) << host[1]
51
+ end
52
+ end
53
+ if hosts.has_key?('mysql')
54
+ if hosts['mysql'].size > 1
55
+ hosts['mysql'] = hosts['mysql'] - hosts['mysql-master']
56
+ end
57
+ end
58
+ set :scalr_hosts, hosts
59
+ end
60
+ end
61
+
62
+ scalr.enum
63
+
64
+ role :lb, :no_release => true do
65
+ scalr_hosts['loadbalancer']
66
+ end
67
+ role :web, :no_release => true do
68
+ scalr_hosts['www']
69
+ end
70
+ role :app do
71
+ scalr_hosts['app']
72
+ end
73
+ role :db, :no_release => true do
74
+ scalr_hosts['mysql']
75
+ end
76
+ role :memcached, :no_release => true do
77
+ scalr_hosts['memcached']
78
+ end
79
+ ###
80
+
81
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capistrano-scalr
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 5
8
+ - 0
9
+ version: 0.5.0
10
+ platform: ruby
11
+ authors: []
12
+
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-08 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: bundler
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 0
31
+ - 0
32
+ version: 1.0.0
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: capistrano
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 2
45
+ - 0
46
+ - 0
47
+ version: 2.0.0
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ description: Capistrano recipes for deploying to Scalr
51
+ email: []
52
+
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files: []
58
+
59
+ files:
60
+ - .gitignore
61
+ - Gemfile
62
+ - README.markdown
63
+ - Rakefile
64
+ - capistrano-scalr.gemspec
65
+ - lib/capistrano-scalr.rb
66
+ - lib/capistrano-scalr/version.rb
67
+ has_rdoc: true
68
+ homepage: http://rubygems.org/gems/capistrano-scalr
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options: []
73
+
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ segments:
90
+ - 1
91
+ - 3
92
+ - 6
93
+ version: 1.3.6
94
+ requirements: []
95
+
96
+ rubyforge_project: capistrano-scalr
97
+ rubygems_version: 1.3.7
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: Capistrano recipes for deploying to Scalr
101
+ test_files: []
102
+