madeira 0.0.1
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.
- data/README.md +8 -0
- data/Rakefile +6 -0
- data/lib/madeira.rb +2 -0
- data/lib/madeira/provisioner.rb +7 -0
- data/lib/madeira/provisioner/ec2.rb +72 -0
- data/lib/madeira/tasks.rb +27 -0
- metadata +82 -0
data/README.md
ADDED
data/Rakefile
ADDED
data/lib/madeira.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'fog'
|
2
|
+
require 'capistrano'
|
3
|
+
|
4
|
+
module Madeira
|
5
|
+
module Provisioner
|
6
|
+
module EC2
|
7
|
+
|
8
|
+
# create a new ec2 instance
|
9
|
+
#
|
10
|
+
def self.create(options={})
|
11
|
+
# connect to ec2
|
12
|
+
#
|
13
|
+
connect(options)
|
14
|
+
|
15
|
+
# create an instance
|
16
|
+
#
|
17
|
+
server = @fog.servers.create(
|
18
|
+
:image_id => options[:image_id],
|
19
|
+
:flavor_id => options[:flavor_id],
|
20
|
+
:key_name => options[:key_name]
|
21
|
+
)
|
22
|
+
|
23
|
+
# print progress as dots whilst waiting for it to get online
|
24
|
+
#
|
25
|
+
server.wait_for { print "."; ready? }
|
26
|
+
puts "instance started as #{server.dns_name}"
|
27
|
+
ec2_address(server.dns_name)
|
28
|
+
end
|
29
|
+
|
30
|
+
# terminate ec2 instance
|
31
|
+
#
|
32
|
+
def self.terminate(options={})
|
33
|
+
# connect to ec2
|
34
|
+
#
|
35
|
+
connect(options)
|
36
|
+
|
37
|
+
if server = @fog.servers.detect{ |s| s.dns_name == ec2_address }
|
38
|
+
puts "Terminating #{server.dns_name}"
|
39
|
+
server.destroy
|
40
|
+
else
|
41
|
+
puts "Appliance not found or not running"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# create connection to AWS
|
48
|
+
# returns @fog object.
|
49
|
+
#
|
50
|
+
def self.connect(options={})
|
51
|
+
@fog ||= Fog::Compute.new(
|
52
|
+
:provider => options[:provider] || 'AWS',
|
53
|
+
:region => options[:region],
|
54
|
+
:aws_access_key_id => options[:aws_access_key_id],
|
55
|
+
:aws_secret_access_key => options[:aws_secret_access_key]
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
# write out the ec2 address to a local file
|
61
|
+
#
|
62
|
+
def self.ec2_address(input='get')
|
63
|
+
file = 'ec2.hostname'
|
64
|
+
if input == 'get'
|
65
|
+
(File.read(file) rescue 'NO-SERVER').strip
|
66
|
+
else
|
67
|
+
File.open(file,'w'){|f|f.write(input)}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :instance do
|
3
|
+
namespace :ec2 do
|
4
|
+
desc 'provision a new ec2 instance'
|
5
|
+
task :create do
|
6
|
+
server = Madeira::Provisioner::EC2.create(
|
7
|
+
:image_id => image_id,
|
8
|
+
:flavor_id => flavor_id,
|
9
|
+
:key_name => key_name,
|
10
|
+
:region => region,
|
11
|
+
:aws_access_key_id => aws_access_key_id,
|
12
|
+
:aws_secret_access_key => aws_secret_access_key
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'terminate your t1.micro at ec2'
|
17
|
+
task :terminate do
|
18
|
+
Madeira::Provisioner::EC2.terminate(
|
19
|
+
:key_name => key_name,
|
20
|
+
:region => region,
|
21
|
+
:aws_access_key_id => aws_access_key_id,
|
22
|
+
:aws_secret_access_key => aws_secret_access_key
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: madeira
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Mick Pollard
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capistrano
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.5.21
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.5.21
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: See http://github.com/aussielunix/madeira
|
47
|
+
email: aussielunix@gmail.com
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- lib/madeira.rb
|
55
|
+
- lib/madeira/provisioner/ec2.rb
|
56
|
+
- lib/madeira/provisioner.rb
|
57
|
+
- lib/madeira/tasks.rb
|
58
|
+
homepage: http://github.com/aussielunix/madeira
|
59
|
+
licenses: []
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.8.23
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: ec2 appliance building capistrano lib + tasks
|
82
|
+
test_files: []
|