jnewland-capsize 0.5.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.
@@ -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
+ }