jnewland-capsize 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,156 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ namespace :ec2 do
4
+
5
+ namespace :setup do
6
+
7
+ desc <<-DESC
8
+ Initialize Capsize config.
9
+ You can run this command as often as you like.
10
+ It will not overwrite config files on multiple runs.
11
+ - Create :capsize_config_dir
12
+ - Create :capsize_secure_config_dir
13
+ - Copy capsize.yml.template to :capsize_config_dir/capsize.yml unless it already exists
14
+ - Automatically generate :capsize_secure_config_dir/secure.yml unless it already exists
15
+ - Instruct user to test configuration with "cap ec2:images:describe"
16
+ - Instruct user how to create a new keypair
17
+ - Instruct user how to setup a new security group.
18
+ DESC
19
+ task :default do
20
+
21
+ # Make the standard config dir if it doesn't exist already
22
+ unless File.exists?(fetch(:capsize_config_dir))
23
+ FileUtils.mkdir fetch(:capsize_config_dir)
24
+ end
25
+
26
+ # Make the secure config dir if it doesn't exist already
27
+ unless File.exists?(fetch(:capsize_secure_config_dir))
28
+ FileUtils.mkdir fetch(:capsize_secure_config_dir)
29
+ end
30
+
31
+ # copy the standard config file template, unless the dest file alread exists
32
+ unless File.exists?("#{fetch(:capsize_secure_config_dir)}/#{fetch(:capsize_secure_config_file_name)}")
33
+ puts "Please enter your EC2 account information."
34
+ puts "We'll then write it to a config file at #{fetch(:capsize_secure_config_dir)}/#{fetch(:capsize_secure_config_file_name)}"
35
+
36
+ require "yaml"
37
+ set :aws_access_key_id, proc { Capistrano::CLI.ui.ask("AWS Access Key ID : ") }
38
+ set :aws_secret_access_key, proc { Capistrano::CLI.ui.ask("AWS Secret Access Key : ") }
39
+
40
+ yaml = {}
41
+
42
+ # Populate production element
43
+ yaml['common'] = {}
44
+ yaml['common']['aws_access_key_id'] = aws_access_key_id
45
+ yaml['common']['aws_secret_access_key'] = aws_secret_access_key
46
+
47
+ yaml = YAML::dump(yaml).split("\n").collect { |line| line == "common: " ? line += "&common" : line }.join("\n")
48
+
49
+ env_config =<<EOF
50
+
51
+
52
+ development:
53
+ <<: *common
54
+
55
+ # Uncomment and I only apply to the dev environment
56
+ # or overwrite a common value
57
+ #foo: 'bar'
58
+
59
+ test:
60
+ <<: *common
61
+
62
+ staging:
63
+ <<: *common
64
+
65
+ production:
66
+ <<: *common
67
+
68
+ # Uncomment and I only apply to the production environment
69
+ # or overwrite a common value
70
+ #foo: 'baz'
71
+ EOF
72
+
73
+ yaml += env_config
74
+
75
+ File.open("#{fetch(:capsize_secure_config_dir)}/#{fetch(:capsize_secure_config_file_name)}", 'w') do |file|
76
+ file.write(yaml)
77
+ end
78
+ File.chmod 0664, "#{fetch(:capsize_secure_config_dir)}/#{fetch(:capsize_secure_config_file_name)}"
79
+ else
80
+ puts "Warning : The following file was not copied over since it already exists: " + "#{fetch(:capsize_secure_config_dir)}/#{fetch(:capsize_secure_config_file_name)}"
81
+ end
82
+
83
+ unless File.exists?("#{fetch(:capsize_config_dir)}/#{fetch(:capsize_config_file_name)}")
84
+ FileUtils.cp("#{fetch(:capsize_examples_dir)}/capsize.yml.template", "#{fetch(:capsize_config_dir)}/#{fetch(:capsize_config_file_name)}", :verbose => true)
85
+ else
86
+ puts "Warning : The following file was not copied over since it already exists: " + "#{fetch(:capsize_config_dir)}/#{fetch(:capsize_config_file_name)}"
87
+ end
88
+
89
+ check
90
+
91
+ ec2.keypairs.create
92
+
93
+ ec2.security_groups.create_with_standard_ports
94
+
95
+ message = <<-MESSAGE
96
+
97
+ Next up: Pick an Amazon Machine Image and Run it!
98
+
99
+ Now you need to select an Amazon EC2 image ID that you want to start as a new
100
+ instance. The easiest way to do that is to get a list of available images from EC2.
101
+
102
+ # Show ALL registered images
103
+ cap ec2:images:show
104
+
105
+ # Show MY registered images
106
+ cap ec2:images:show OWNER_ID='self'
107
+
108
+ # Show the AMAZON registered images
109
+ cap ec2:images:show OWNER_ID='amazon'
110
+
111
+ Select an 'imageId' from the results, and run it:
112
+
113
+ cap ec2:instances:run IMAGE_ID='ami-2bb65342'
114
+
115
+ You should see some progress information scroll by and finally you should see
116
+ a description of the key attributes of your running intance (dnsName and instanceId
117
+ are likely most important).
118
+
119
+ Now lets connect to it with SSH (this may take a few tries, sometimes it takes a
120
+ minute for the new instance to respond to SSH):
121
+
122
+ cap ec2:instances:ssh INSTANCE_ID='i-xxxxxx'
123
+
124
+ If you want to terminate your instance...
125
+
126
+ cap ec2:instances:terminate INSTANCE_ID='i-xxxxxx'
127
+
128
+ Enjoy Capsize!
129
+
130
+ MESSAGE
131
+
132
+ puts message
133
+
134
+ end
135
+
136
+ desc <<-DESC
137
+ Test your Capsize config.
138
+ Run a simple test which will validate that your Capsize config
139
+ is setup and working properly when querying the Amazon EC2 servers.
140
+ DESC
141
+ task :check do
142
+
143
+ begin
144
+ capsize_ec2.describe_images(:owner_id => "amazon")
145
+ puts "Congratulations! Your credentials are verified and you are communicating properly with Amazon's EC2 service."
146
+ rescue Exception => e
147
+ puts "The test of your Capsize config failed with the following error: " + e
148
+ end
149
+
150
+ end
151
+
152
+ end
153
+
154
+ end
155
+
156
+ end
@@ -0,0 +1,57 @@
1
+ Capistrano::Configuration.instance.load do
2
+
3
+ namespace :sqs do
4
+
5
+ namespace :messages do
6
+
7
+ task :receive do
8
+ message = capsize_sqs.receive_message
9
+ unless message.nil?
10
+ puts message.body
11
+ else
12
+ puts "No Message"
13
+ end
14
+ end
15
+
16
+ task :send_message do
17
+ raise Exception, "message required" if capsize.get(:message).nil? || capsize.get(:message).empty?
18
+ begin
19
+ capsize_sqs.send_message(capsize.get(:message))
20
+ rescue Exception => e
21
+ raise e
22
+ else
23
+ puts "Message sent to #{capsize.get(:queue_name)} Queue"
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ namespace :queue do
30
+
31
+ task :delete do
32
+ begin
33
+ raise Exception unless capsize_sqs.delete
34
+ rescue Exception => e
35
+ puts "Queue #{queue_name} not deleted"
36
+ raise e
37
+ else
38
+ puts "Queue #{queue_name} deleted"
39
+ end
40
+ end
41
+
42
+ task :delete! do
43
+ begin
44
+ raise Exception unless capsize_sqs.delete!
45
+ rescue Exception => e
46
+ puts "Queue #{queue_name} not deleted"
47
+ raise e
48
+ else
49
+ puts "Queue #{queue_name} deleted"
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
@@ -0,0 +1,128 @@
1
+ module Capsize
2
+ module CapsizeSQS
3
+ include Capsize
4
+
5
+ #Creqte the XML for our CapQueue messages
6
+ def build_xml
7
+ body = ""
8
+ xml = Builder::XmlMarkup.new(:target => body, :indent => 2)
9
+ xml.command do
10
+ xml.hosts do
11
+ get(:hosts).split(/,/).each do |host|
12
+ xml.host host
13
+ end unless get(:hosts).nil?
14
+ end
15
+ xml.environment do
16
+ get(:environment).split(/,/).each do |keyvar|
17
+ xml.variable do
18
+ key, var = keyvar.split(/=/,2)
19
+ var.gsub!(/("|')/,'')
20
+ xml.key key
21
+ xml.var var
22
+ end
23
+ end unless get(:environment).nil?
24
+ end
25
+ xml.variables do
26
+ get(:variables).split(/,/).each do |keyvar|
27
+ xml.variable do
28
+ key, var = keyvar.split(/=/,2)
29
+ var.gsub!(/("|')/,'')
30
+ xml.key key
31
+ xml.var var
32
+ end
33
+ end unless get(:variables).nil?
34
+ end
35
+ xml.task get(:task)
36
+ end
37
+ body
38
+ end
39
+
40
+ #returns an instance of SQS::Queue
41
+ def connect
42
+ set :aws_access_key_id, get(:aws_access_key_id)
43
+ set :aws_secret_access_key, get(:aws_secret_access_key)
44
+
45
+ raise Exception, "You must have an :aws_access_key_id defined in your config." if fetch(:aws_access_key_id).nil? || fetch(:aws_access_key_id).empty?
46
+ raise Exception, "You must have an :aws_secret_access_key defined in your config." if fetch(:aws_secret_access_key).nil? || fetch(:aws_secret_access_key).empty?
47
+
48
+ SQS.access_key_id = fetch(:aws_access_key_id)
49
+ SQS.secret_access_key = fetch(:aws_secret_access_key)
50
+
51
+ queue = nil
52
+ begin
53
+ queue = SQS.get_queue queue_name
54
+ rescue
55
+ queue = SQS.create_queue queue_name
56
+ ensure
57
+ return queue
58
+ end
59
+ end
60
+
61
+ def delete( options=nil )
62
+ queue = connect()
63
+ queue.delete(options)
64
+ end
65
+
66
+ def delete!
67
+ queue = connect()
68
+ queue.delete!
69
+ end
70
+
71
+ def send_message( m )
72
+ queue = connect()
73
+ queue.send_message(m)
74
+ end
75
+
76
+ def get_queue_attributes( force=false )
77
+ queue = connect()
78
+ queue.get_queue_attributes(force)
79
+ end
80
+
81
+ def set_queue_attributes( atts={} )
82
+ queue = connect()
83
+ queue.set_queue_attributes(atts)
84
+ end
85
+
86
+ def empty?
87
+ queue = connect()
88
+ queue.empty?
89
+ end
90
+
91
+ def peek_message
92
+ queue = connect()
93
+ queue.peek_message
94
+ end
95
+
96
+ def peek_messages( options={} )
97
+ queue = connect()
98
+ queue.peek_messages(options)
99
+ end
100
+
101
+ def receive_message
102
+ queue = connect()
103
+ queue.receive_message
104
+ end
105
+
106
+ def receive_messages( options={} )
107
+ queue = connect()
108
+ queue.receive_messages(options)
109
+ end
110
+
111
+ def add_grant( options={} )
112
+ queue = connect()
113
+ queue.add_grant(options)
114
+ end
115
+
116
+ def remove_grant( options={} )
117
+ queue = connect()
118
+ queue.remove_grant(options)
119
+ end
120
+
121
+ def list_grants
122
+ queue = connect()
123
+ queue.list_grants
124
+ end
125
+
126
+ end
127
+ end
128
+ Capistrano.plugin :capsize_sqs, Capsize::CapsizeSQS
@@ -0,0 +1,9 @@
1
+ module Capsize #:nodoc:
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 5
5
+ TINY = 0
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
data/lib/capsize.rb ADDED
@@ -0,0 +1,26 @@
1
+ # Require all necessary libraries
2
+ %w[
3
+ rubygems
4
+ ostruct
5
+ yaml
6
+ fileutils
7
+ builder
8
+ capistrano
9
+ EC2
10
+ sqs
11
+ capsize/version
12
+ capsize/capsize.rb
13
+ capsize/meta_tasks
14
+ capsize/ec2
15
+ capsize/ec2_plugin
16
+ capsize/sqs
17
+ capsize/sqs_plugin
18
+ capsize/configuration
19
+ ].each { |lib|
20
+ begin
21
+ require lib
22
+ rescue Exception => e
23
+ puts "The loading of '#{lib}' failed in capsize.rb with message : " + e
24
+ exit
25
+ end
26
+ }