cloudster 2.3.0 → 2.4.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.
- data/README.md +8 -0
- data/VERSION +1 -1
- data/cloudster.gemspec +4 -2
- data/lib/cloudster.rb +1 -0
- data/lib/cloudster/cloud.rb +21 -0
- data/lib/cloudster/rds.rb +114 -0
- data/spec/cloud_spec.rb +30 -4
- data/spec/rds_spec.rb +53 -0
- metadata +5 -3
data/README.md
CHANGED
@@ -44,10 +44,18 @@ Now you can do stuff like :
|
|
44
44
|
|
45
45
|
stack.provision(:resources => [app_server, app_server_2, load_balancer], :stack_name => 'TestStack', :description => 'Description of the stack')
|
46
46
|
|
47
|
+
- Update the stack :
|
48
|
+
|
49
|
+
stack.update(:resources => [app_server, app_server_2], :stack_name => 'TestStack', :description => 'Description of the stack')
|
50
|
+
|
47
51
|
- You can get the events of a stack using :
|
48
52
|
|
49
53
|
stack.events(:stack_name => 'TestStack')
|
50
54
|
|
55
|
+
- You can delete the stack and it's attached resources :
|
56
|
+
|
57
|
+
stack.delete(:stack_name => 'TestStack')
|
58
|
+
|
51
59
|
|
52
60
|
##License
|
53
61
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.4.0
|
data/cloudster.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cloudster"
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Emil Soman"]
|
12
|
-
s.date = "2012-10-
|
12
|
+
s.date = "2012-10-31"
|
13
13
|
s.description = "Cloudster uses the AWS APIs to provision stacks on Amazon Cloud."
|
14
14
|
s.email = "emil.soman@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -31,9 +31,11 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/cloudster/ec2.rb",
|
32
32
|
"lib/cloudster/elb.rb",
|
33
33
|
"lib/cloudster/options_manager.rb",
|
34
|
+
"lib/cloudster/rds.rb",
|
34
35
|
"spec/cloud_spec.rb",
|
35
36
|
"spec/ec2_spec.rb",
|
36
37
|
"spec/elb_spec.rb",
|
38
|
+
"spec/rds_spec.rb",
|
37
39
|
"spec/spec_helper.rb"
|
38
40
|
]
|
39
41
|
s.homepage = "http://github.com/emilsoman/cloudster"
|
data/lib/cloudster.rb
CHANGED
data/lib/cloudster/cloud.rb
CHANGED
@@ -143,5 +143,26 @@ module Cloudster
|
|
143
143
|
return @cloud_formation.describe_stack_events(options[:stack_name])
|
144
144
|
end
|
145
145
|
|
146
|
+
# Deletes a stack and the attached resources
|
147
|
+
#
|
148
|
+
# ==== Examples
|
149
|
+
# cloud = Cloudster::Cloud.new(
|
150
|
+
# :access_key_id => 'aws_access_key_id'
|
151
|
+
# :secret_access_key => 'aws_secret_access_key',
|
152
|
+
# )
|
153
|
+
# cloud.delete(:stack_name => 'ShittyStack')
|
154
|
+
#
|
155
|
+
# ==== Parameters
|
156
|
+
# * options<~Hash>
|
157
|
+
# * :stack_name : A string which will contain the name of the stack for which will be deleted
|
158
|
+
#
|
159
|
+
# ==== Returns
|
160
|
+
# * response<~Excon::Response>:
|
161
|
+
# * body<~Hash>:
|
162
|
+
def delete(options = {})
|
163
|
+
require_options(options, [:stack_name])
|
164
|
+
return @cloud_formation.delete_stack(options[:stack_name])
|
165
|
+
end
|
166
|
+
|
146
167
|
end
|
147
168
|
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module Cloudster
|
2
|
+
#==Rds resource
|
3
|
+
class Rds
|
4
|
+
|
5
|
+
# Initialize an Rds instance
|
6
|
+
#
|
7
|
+
# ==== Notes
|
8
|
+
# options parameter must include values for :name, :storage_size
|
9
|
+
#
|
10
|
+
# ==== Examples
|
11
|
+
# rds = Cloudster::Rds.new(
|
12
|
+
# :name => 'MySqlDB',
|
13
|
+
# :instance_class => 'db.t1.micro',
|
14
|
+
# :storage_class => '100',
|
15
|
+
# :username => 'admin',
|
16
|
+
# :password => 'admin123',
|
17
|
+
# :engine => 'MySQL'
|
18
|
+
# )
|
19
|
+
#
|
20
|
+
# ==== Parameters
|
21
|
+
# * options<~Hash> -
|
22
|
+
# *Keys:
|
23
|
+
# * :name: String containing the name for the Rds resource. Mandatory option.
|
24
|
+
# * :instance_class: String containing the name of the compute and memory capacity class of the DB instance. Default: 'db.t1.micro'
|
25
|
+
# * :storage_size: String containing the allocated storage size specified in gigabytes. Mandatory option.
|
26
|
+
# * :username: String containing the master username for the DB instance. Default: 'root'
|
27
|
+
# * :password: String containing the master password for the DB instance. Default: 'root'
|
28
|
+
# * :engine: String containing the name of the database engine to be used for this DB instance. Default: 'MySQL'
|
29
|
+
# Valid values : MySQL | oracle-se1 | oracle-se | oracle-ee | sqlserver-ee | sqlserver-se | sqlserver-ex | sqlserver-web
|
30
|
+
def initialize(options = {})
|
31
|
+
require_options(options, [:name, :storage_size])
|
32
|
+
options[:username] ||= 'root'
|
33
|
+
options[:password] ||= 'root'
|
34
|
+
options[:engine] ||= 'MySQL'
|
35
|
+
options[:instance_class] ||= 'db.t1.micro'
|
36
|
+
@name = options[:name]
|
37
|
+
@storage_size = options[:storage_size]
|
38
|
+
@username = options[:username]
|
39
|
+
@password = options[:password]
|
40
|
+
@engine = options[:engine]
|
41
|
+
@instance_class = options[:instance_class]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns a Ruby hash version of the Cloud Formation template for the resource instance
|
45
|
+
#
|
46
|
+
# ==== Examples
|
47
|
+
# rds = Cloudster::Rds.new(
|
48
|
+
# :name => 'MySqlDB',
|
49
|
+
# :instance_class => 'db.t1.micro',
|
50
|
+
# :storage_class => '100',
|
51
|
+
# :username => 'admin',
|
52
|
+
# :password => 'admin123',
|
53
|
+
# :engine => 'MySQL'
|
54
|
+
# )
|
55
|
+
# rds.template
|
56
|
+
#
|
57
|
+
# ==== Returns
|
58
|
+
# * Ruby hash version of the Cloud Formation template for the resource instance
|
59
|
+
def template
|
60
|
+
Rds.template({:name =>@name, :instance_class => @instance_class, :storage_size => @storage_size, :username => @username, :password => @password, :engine => @engine})
|
61
|
+
end
|
62
|
+
|
63
|
+
# Class method that returns a Ruby hash version of the Cloud Formation template
|
64
|
+
#
|
65
|
+
# ==== Notes
|
66
|
+
# options parameter must include values for :name, :storage_size
|
67
|
+
#
|
68
|
+
# ==== Examples
|
69
|
+
# template = Cloudster::Rds.template(
|
70
|
+
# :name => 'MySqlDB',
|
71
|
+
# :instance_class => 'db.t1.micro',
|
72
|
+
# :storage_class => '100',
|
73
|
+
# :username => 'admin',
|
74
|
+
# :password => 'admin123',
|
75
|
+
# :engine => 'MySQL'
|
76
|
+
# )
|
77
|
+
#
|
78
|
+
# ==== Parameters
|
79
|
+
# * options<~Hash> -
|
80
|
+
# *Keys:
|
81
|
+
# * :name: String containing the name for the Rds resource. Mandatory option.
|
82
|
+
# * :instance_class: String containing the name of the compute and memory capacity class of the DB instance. Default: 'db.t1.micro'
|
83
|
+
# * :storage_size: String containing the allocated storage size specified in gigabytes. Mandatory option.
|
84
|
+
# * :username: String containing the master username for the DB instance. Default: 'root'
|
85
|
+
# * :password: String containing the master password for the DB instance. Default: 'root'
|
86
|
+
# * :engine: String containing the name of the database engine to be used for this DB instance. Default: 'MySQL'
|
87
|
+
# Valid values : MySQL | oracle-se1 | oracle-se | oracle-ee | sqlserver-ee | sqlserver-se | sqlserver-ex | sqlserver-web
|
88
|
+
#
|
89
|
+
# ==== Returns
|
90
|
+
# * Ruby hash version of the Cloud Formation template
|
91
|
+
def self.template(options = {})
|
92
|
+
require_options(options, [:name, :storage_size])
|
93
|
+
options[:username] ||= 'root'
|
94
|
+
options[:password] ||= 'root'
|
95
|
+
options[:engine] ||= 'MySQL'
|
96
|
+
options[:instance_class] ||= 'db.t1.micro'
|
97
|
+
template = {'Resources' => {
|
98
|
+
options[:name] => {
|
99
|
+
"Type" => "AWS::RDS::DBInstance",
|
100
|
+
"Properties" => {
|
101
|
+
"Engine" => options[:engine],
|
102
|
+
"MasterUsername" => options[:username],
|
103
|
+
"MasterUserPassword" => options[:password],
|
104
|
+
"DBInstanceClass" => options[:instance_class],
|
105
|
+
"AllocatedStorage" => options[:storage_size]
|
106
|
+
}
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
return template
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
data/spec/cloud_spec.rb
CHANGED
@@ -13,9 +13,10 @@ describe Cloudster::Cloud do
|
|
13
13
|
it "should return a ruby hash for the stack cloudformation template" do
|
14
14
|
ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
|
15
15
|
ec2_1 = Cloudster::Ec2.new(:key_name => 'testkey1', :image_id => 'image_id1', name: 'name1')
|
16
|
+
rds = Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10')
|
16
17
|
elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['name','name1'])
|
17
18
|
cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
|
18
|
-
cloud.template(:resources => [ec2, ec2_1, elb], :description => 'test template').should == {"AWSTemplateFormatVersion"=>"2010-09-09",
|
19
|
+
cloud.template(:resources => [ec2, ec2_1, rds, elb], :description => 'test template').should == {"AWSTemplateFormatVersion"=>"2010-09-09",
|
19
20
|
"Description"=>"test template",
|
20
21
|
"Resources"=>{
|
21
22
|
"name"=>{
|
@@ -31,6 +32,16 @@ describe Cloudster::Cloud do
|
|
31
32
|
"ImageId"=>"image_id1"
|
32
33
|
}
|
33
34
|
},
|
35
|
+
'MySqlDB' => {
|
36
|
+
"Type" => "AWS::RDS::DBInstance",
|
37
|
+
"Properties" => {
|
38
|
+
"Engine" => 'MySQL',
|
39
|
+
"MasterUsername" => 'root',
|
40
|
+
"MasterUserPassword" => 'root',
|
41
|
+
"DBInstanceClass" => 'db.t1.micro',
|
42
|
+
"AllocatedStorage" => '10'
|
43
|
+
}
|
44
|
+
},
|
34
45
|
"ELB" => {
|
35
46
|
"Type" => "AWS::ElasticLoadBalancing::LoadBalancer",
|
36
47
|
"Properties" => {
|
@@ -68,9 +79,10 @@ describe Cloudster::Cloud do
|
|
68
79
|
Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test').and_return cloud_formation
|
69
80
|
ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
|
70
81
|
elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['name','name1'])
|
82
|
+
rds = Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10')
|
71
83
|
cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
|
72
|
-
cloud_formation.should_receive('create_stack').with('stack_name', 'TemplateBody' => cloud.template(:resources => [ec2, elb], :description => 'testDescription'))
|
73
|
-
cloud.provision(:resources => [ec2, elb], :stack_name => 'stack_name', :description => 'testDescription')
|
84
|
+
cloud_formation.should_receive('create_stack').with('stack_name', 'TemplateBody' => cloud.template(:resources => [ec2, elb, rds], :description => 'testDescription'))
|
85
|
+
cloud.provision(:resources => [ec2, elb, rds], :stack_name => 'stack_name', :description => 'testDescription')
|
74
86
|
end
|
75
87
|
end
|
76
88
|
|
@@ -80,7 +92,7 @@ describe Cloudster::Cloud do
|
|
80
92
|
cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
|
81
93
|
expect { cloud.update(:description => 'test') }.to raise_error(ArgumentError, 'Missing required argument: resources,stack_name' )
|
82
94
|
end
|
83
|
-
it "should trigger stack
|
95
|
+
it "should trigger stack update" do
|
84
96
|
cloud_formation = double('CloudFormation')
|
85
97
|
Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test').and_return cloud_formation
|
86
98
|
ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
|
@@ -99,4 +111,18 @@ describe Cloudster::Cloud do
|
|
99
111
|
cloud.events(:stack_name => 'stack_name')
|
100
112
|
end
|
101
113
|
end
|
114
|
+
|
115
|
+
describe '#delete' do
|
116
|
+
it "should raise argument error if resources not provided" do
|
117
|
+
cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
|
118
|
+
expect { cloud.delete() }.to raise_error(ArgumentError, 'Missing required argument: stack_name')
|
119
|
+
end
|
120
|
+
it "should trigger 'delete stack' request" do
|
121
|
+
cloud_formation = double('CloudFormation')
|
122
|
+
Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test').and_return cloud_formation
|
123
|
+
cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
|
124
|
+
cloud_formation.should_receive('delete_stack').with('stack_name')
|
125
|
+
cloud.delete(:stack_name => 'stack_name')
|
126
|
+
end
|
127
|
+
end
|
102
128
|
end
|
data/spec/rds_spec.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cloudster::Rds do
|
4
|
+
describe 'initialize' do
|
5
|
+
it "should raise argument error if no argument is not provided" do
|
6
|
+
expect { Cloudster::Rds.new() }.to raise_error(ArgumentError, 'Missing required argument: name,storage_size')
|
7
|
+
end
|
8
|
+
it "should not raise argument error if all arguments are provided" do
|
9
|
+
expect { Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10') }.to_not raise_error
|
10
|
+
end
|
11
|
+
end
|
12
|
+
describe '#template' do
|
13
|
+
it "should return a ruby hash for the resource cloudformation template" do
|
14
|
+
rds = Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10')
|
15
|
+
template = {'Resources' => {
|
16
|
+
'MySqlDB' => {
|
17
|
+
"Type" => "AWS::RDS::DBInstance",
|
18
|
+
"Properties" => {
|
19
|
+
"Engine" => 'MySQL',
|
20
|
+
"MasterUsername" => 'root',
|
21
|
+
"MasterUserPassword" => 'root',
|
22
|
+
"DBInstanceClass" => 'db.t1.micro',
|
23
|
+
"AllocatedStorage" => '10'
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
rds.template.should == template
|
29
|
+
end
|
30
|
+
end
|
31
|
+
describe '.template' do
|
32
|
+
it "should raise argument error if no argument is not provided" do
|
33
|
+
expect { Cloudster::Rds.template() }.to raise_error(ArgumentError, 'Missing required argument: name,storage_size')
|
34
|
+
end
|
35
|
+
it "should return a ruby hash for the resource cloudformation template" do
|
36
|
+
hash = Cloudster::Rds.template(:name => 'MySqlDB', :storage_size => '10')
|
37
|
+
template = {'Resources' => {
|
38
|
+
'MySqlDB' => {
|
39
|
+
"Type" => "AWS::RDS::DBInstance",
|
40
|
+
"Properties" => {
|
41
|
+
"Engine" => 'MySQL',
|
42
|
+
"MasterUsername" => 'root',
|
43
|
+
"MasterUserPassword" => 'root',
|
44
|
+
"DBInstanceClass" => 'db.t1.micro',
|
45
|
+
"AllocatedStorage" => '10'
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
hash.should == template
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fog
|
@@ -145,9 +145,11 @@ files:
|
|
145
145
|
- lib/cloudster/ec2.rb
|
146
146
|
- lib/cloudster/elb.rb
|
147
147
|
- lib/cloudster/options_manager.rb
|
148
|
+
- lib/cloudster/rds.rb
|
148
149
|
- spec/cloud_spec.rb
|
149
150
|
- spec/ec2_spec.rb
|
150
151
|
- spec/elb_spec.rb
|
152
|
+
- spec/rds_spec.rb
|
151
153
|
- spec/spec_helper.rb
|
152
154
|
homepage: http://github.com/emilsoman/cloudster
|
153
155
|
licenses:
|
@@ -164,7 +166,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
166
|
version: '0'
|
165
167
|
segments:
|
166
168
|
- 0
|
167
|
-
hash: -
|
169
|
+
hash: -380344941
|
168
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
171
|
none: false
|
170
172
|
requirements:
|