cloudster 2.19.1 → 2.19.2

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 CHANGED
@@ -30,7 +30,7 @@ Create AWS resources :
30
30
  :interval => 1800
31
31
  )
32
32
 
33
- elastic_ip = Cloudster::ElasticIp.new
33
+ elastic_ip = Cloudster::ElasticIp.new(:name => 'AppServerElasticIp')
34
34
 
35
35
  chef_client.add_to(app_server)
36
36
  elastic_ip.add_to(app_server)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.19.1
1
+ 2.19.2
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.19.1"
8
+ s.version = "2.19.2"
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 = "2013-01-11"
12
+ s.date = "2013-01-18"
13
13
  s.description = "Cloudster is a Ruby gem that was born to cut the learning curve involved \n in writing your own CloudFormation templates. If you don't know what a CloudFormation template is, \n but know about the AWS Cloud offerings, you can still use cloudster to provision your stack. \n Still in infancy , cloudster can create a very basic stack like a breeze. All kinds of contribution welcome !"
14
14
  s.email = "emil.soman@gmail.com"
15
15
  s.extra_rdoc_files = [
data/lib/cloudster/ec2.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  module Cloudster
2
2
  #==Ec2 resource
3
+ #Output values : availability_zone, private_dns_name, public_dns_name, private_ip, public_ip
3
4
  class Ec2
5
+ extend Cloudster::Output
4
6
 
5
7
  attr_accessor :template, :name
6
8
  # Initialize an Ec2 instance
@@ -88,6 +90,16 @@ module Cloudster
88
90
  }
89
91
  }
90
92
  }
93
+ outputs = {
94
+ options[:name] => {
95
+ 'availablity_zone' => {'Fn::GetAtt' => [options[:name], 'AvailabilityZone']},
96
+ 'private_dns_name' => {'Fn::GetAtt' => [options[:name], 'PrivateDnsName']},
97
+ 'public_dns_name' => {'Fn::GetAtt' => [options[:name], 'PublicDnsName']},
98
+ 'private_ip' => {'Fn::GetAtt' => [options[:name], 'PrivateIp']},
99
+ 'public_ip' => {'Fn::GetAtt' => [options[:name], 'PublicIp']}
100
+ }
101
+ }
102
+ template['Outputs'] = output_template(outputs)
91
103
  return template
92
104
  end
93
105
 
data/lib/cloudster/s3.rb CHANGED
@@ -43,8 +43,7 @@ module Cloudster
43
43
  @template ||= S3.template({
44
44
  :name => @name,
45
45
  :access_control => @access_control,
46
- :website_configuration => @website_configuration,
47
- :outputs => @outputs
46
+ :website_configuration => @website_configuration
48
47
  })
49
48
  end
50
49
 
@@ -70,13 +69,6 @@ module Cloudster
70
69
  unless options[:website_configuration].nil?
71
70
  properties.merge!({"WebsiteConfiguration" => {"IndexDocument" => options[:website_configuration]["index_document"], "ErrorDocument" => options[:website_configuration]["error_document"]}})
72
71
  end
73
- outputs = {
74
- options[:name] => {
75
- 'bucket_name' => { 'Ref' => options[:name] },
76
- 'dns_name' => {'Fn::GetAtt' => [options[:name], 'DomainName']},
77
- 'website_url' => {'Fn::GetAtt' => [options[:name], 'WebsiteURL']}
78
- }
79
- }
80
72
  template = {
81
73
  'Resources' => {
82
74
  options[:name] => {
@@ -85,6 +77,13 @@ module Cloudster
85
77
  }
86
78
  }
87
79
  }
80
+ outputs = {
81
+ options[:name] => {
82
+ 'bucket_name' => { 'Ref' => options[:name] },
83
+ 'dns_name' => {'Fn::GetAtt' => [options[:name], 'DomainName']},
84
+ 'website_url' => {'Fn::GetAtt' => [options[:name], 'WebsiteURL']}
85
+ }
86
+ }
88
87
  template['Outputs'] = output_template(outputs)
89
88
  return template
90
89
  end
@@ -80,6 +80,21 @@ describe Cloudster::ChefClient do
80
80
  }
81
81
  }
82
82
  }
83
+ },
84
+ "Outputs" => {
85
+ "AppServer"=>{
86
+ "Value"=>{
87
+ "Fn::Join"=>[",",
88
+ [
89
+ {"Fn::Join"=>["|", ["availablity_zone", {"Fn::GetAtt"=>["AppServer", "AvailabilityZone"]}]]},
90
+ {"Fn::Join"=>["|", ["private_dns_name", {"Fn::GetAtt"=>["AppServer", "PrivateDnsName"]}]]},
91
+ {"Fn::Join"=>["|", ["public_dns_name", {"Fn::GetAtt"=>["AppServer", "PublicDnsName"]}]]},
92
+ {"Fn::Join"=>["|", ["private_ip", {"Fn::GetAtt"=>["AppServer", "PrivateIp"]}]]},
93
+ {"Fn::Join"=>["|", ["public_ip", {"Fn::GetAtt"=>["AppServer", "PublicIp"]}]]}
94
+ ]
95
+ ]
96
+ }
97
+ }
83
98
  }
84
99
  }
85
100
  end
data/spec/cloud_spec.rb CHANGED
@@ -11,21 +11,21 @@ describe Cloudster::Cloud do
11
11
  end
12
12
  describe '#template' do
13
13
  it "should return a ruby hash for the stack cloudformation template" do
14
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
15
- ec2_1 = Cloudster::Ec2.new(:key_name => 'testkey1', :image_id => 'image_id1', :name => 'name1')
14
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'Ec2Instance1')
15
+ ec2_1 = Cloudster::Ec2.new(:key_name => 'testkey1', :image_id => 'image_id1', :name => 'Ec2Instance2')
16
16
  rds = Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10')
17
- elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['name','name1'])
17
+ elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['Ec2Instance1','Ec2Instance2'])
18
18
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
19
19
  cloud.template(:resources => [ec2, ec2_1, rds, elb], :description => 'test template').should == {"AWSTemplateFormatVersion"=>"2010-09-09",
20
20
  "Description"=>"test template",
21
21
  "Resources"=>{
22
- "name"=>{
22
+ "Ec2Instance1"=>{
23
23
  "Type"=>"AWS::EC2::Instance",
24
24
  "Properties"=>{
25
25
  "KeyName"=>"testkey",
26
26
  "ImageId"=>"image_id"}
27
27
  },
28
- "name1"=>{
28
+ "Ec2Instance2"=>{
29
29
  "Type"=>"AWS::EC2::Instance",
30
30
  "Properties"=>{
31
31
  "KeyName"=>"testkey1",
@@ -62,7 +62,35 @@ describe Cloudster::Cloud do
62
62
  "UnhealthyThreshold" => "5",
63
63
  "Interval" => "30", "Timeout" => "5"
64
64
  },
65
- "Instances" => [{ "Ref" => "name"}, {"Ref" => "name1"}]}
65
+ "Instances" => [{ "Ref" => "Ec2Instance1"}, {"Ref" => "Ec2Instance2"}]}
66
+ }
67
+ },
68
+ "Outputs" => {
69
+ "Ec2Instance1"=> {
70
+ "Value" => {
71
+ "Fn::Join" => ["," ,
72
+ [
73
+ {"Fn::Join" => ["|", ["availablity_zone", {'Fn::GetAtt' => ['Ec2Instance1', 'AvailabilityZone']}]]},
74
+ {"Fn::Join" => ["|", ["private_dns_name", {'Fn::GetAtt' => ['Ec2Instance1', 'PrivateDnsName']}]]},
75
+ {"Fn::Join" => ["|", ["public_dns_name", {'Fn::GetAtt' => ['Ec2Instance1', 'PublicDnsName']}]]},
76
+ {"Fn::Join" => ["|", ["private_ip", {'Fn::GetAtt' => ['Ec2Instance1', 'PrivateIp']}]]},
77
+ {"Fn::Join" => ["|", ["public_ip", {'Fn::GetAtt' => ['Ec2Instance1', 'PublicIp']}]]}
78
+ ]
79
+ ]
80
+ }
81
+ },
82
+ "Ec2Instance2"=> {
83
+ "Value" => {
84
+ "Fn::Join" => ["," ,
85
+ [
86
+ {"Fn::Join" => ["|", ["availablity_zone", {'Fn::GetAtt' => ['Ec2Instance2', 'AvailabilityZone']}]]},
87
+ {"Fn::Join" => ["|", ["private_dns_name", {'Fn::GetAtt' => ['Ec2Instance2', 'PrivateDnsName']}]]},
88
+ {"Fn::Join" => ["|", ["public_dns_name", {'Fn::GetAtt' => ['Ec2Instance2', 'PublicDnsName']}]]},
89
+ {"Fn::Join" => ["|", ["private_ip", {'Fn::GetAtt' => ['Ec2Instance2', 'PrivateIp']}]]},
90
+ {"Fn::Join" => ["|", ["public_ip", {'Fn::GetAtt' => ['Ec2Instance2', 'PublicIp']}]]}
91
+ ]
92
+ ]
93
+ }
66
94
  }
67
95
  }
68
96
  }.to_json
@@ -71,15 +99,15 @@ describe Cloudster::Cloud do
71
99
 
72
100
  describe '#provision' do
73
101
  it "should raise argument error if resources not provided" do
74
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
102
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'Ec2Instance1')
75
103
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
76
104
  expect { cloud.provision(:description => 'test') }.to raise_error(ArgumentError, 'Missing required argument: resources,stack_name' )
77
105
  end
78
106
  it "should trigger stack creation" do
79
107
  cloud_formation = double('CloudFormation')
80
108
  Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test', :region => nil).and_return cloud_formation
81
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
82
- elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['name','name1'])
109
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'Ec2Instance1')
110
+ elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['Ec2Instance1','Ec2Instance2'])
83
111
  rds = Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10')
84
112
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
85
113
  cloud_formation.should_receive('create_stack').with('stack_name', 'TemplateBody' => cloud.template(:resources => [ec2, elb, rds], :description => 'testDescription'))
@@ -89,14 +117,14 @@ describe Cloudster::Cloud do
89
117
 
90
118
  describe '#update' do
91
119
  it "should raise argument error if resources not provided" do
92
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
120
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'Ec2Instance1')
93
121
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
94
122
  expect { cloud.update(:description => 'test') }.to raise_error(ArgumentError, 'Missing required argument: resources,stack_name' )
95
123
  end
96
124
  it "should trigger stack update" do
97
125
  cloud_formation = double('CloudFormation')
98
126
  Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test', :region => nil).and_return cloud_formation
99
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
127
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'Ec2Instance1')
100
128
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
101
129
  cloud_formation.should_receive('update_stack').with('stack_name', 'TemplateBody' => cloud.template(:resources => [ec2], :description => 'testDescription'))
102
130
  cloud.update(:resources => [ec2], :stack_name => 'stack_name', :description => 'testDescription')
data/spec/ec2_spec.rb CHANGED
@@ -15,7 +15,34 @@ describe Cloudster::Ec2 do
15
15
  describe '#template' do
16
16
  it "should return a ruby hash for the resource cloudformation template" do
17
17
  ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name', :instance_type => 't1.micro', :security_groups => ["testSecurityGroup1", "testSecurityGroup2"] )
18
- ec2.template.should == {'Resources' => {'name' => {'Type' => 'AWS::EC2::Instance', 'Properties' => {"KeyName" => 'testkey', "ImageId" => 'image_id', "InstanceType" => 't1.micro', "SecurityGroups" => ["testSecurityGroup1", "testSecurityGroup2"]} }}}
18
+ ec2.template.should == {
19
+ 'Resources' => {
20
+ 'name' => {
21
+ 'Type' => 'AWS::EC2::Instance',
22
+ 'Properties' => {
23
+ "KeyName" => 'testkey',
24
+ "ImageId" => 'image_id',
25
+ "InstanceType" => 't1.micro',
26
+ "SecurityGroups" => ["testSecurityGroup1", "testSecurityGroup2"]
27
+ }
28
+ }
29
+ },
30
+ "Outputs" => {
31
+ "name"=>{
32
+ "Value"=>{
33
+ "Fn::Join"=>[",",
34
+ [
35
+ {"Fn::Join"=>["|", ["availablity_zone", {"Fn::GetAtt"=>["name", "AvailabilityZone"]}]]},
36
+ {"Fn::Join"=>["|", ["private_dns_name", {"Fn::GetAtt"=>["name", "PrivateDnsName"]}]]},
37
+ {"Fn::Join"=>["|", ["public_dns_name", {"Fn::GetAtt"=>["name", "PublicDnsName"]}]]},
38
+ {"Fn::Join"=>["|", ["private_ip", {"Fn::GetAtt"=>["name", "PrivateIp"]}]]},
39
+ {"Fn::Join"=>["|", ["public_ip", {"Fn::GetAtt"=>["name", "PublicIp"]}]]}
40
+ ]
41
+ ]
42
+ }
43
+ }
44
+ }
45
+ }
19
46
  end
20
47
  end
21
48
  describe '.template' do
@@ -24,7 +51,34 @@ describe Cloudster::Ec2 do
24
51
  end
25
52
  it "should return a ruby hash for the resource cloudformation template" do
26
53
  hash = Cloudster::Ec2.template(:key_name => 'testkey', :image_id => 'image_id', :name => 'name', :instance_type => 't1.micro', :security_groups => ["testSecurityGroup1"])
27
- hash.should == {'Resources' => {'name' => {'Type' => 'AWS::EC2::Instance', 'Properties' => {"KeyName" => 'testkey', "ImageId" => 'image_id', "InstanceType" => 't1.micro', "SecurityGroups" => ["testSecurityGroup1"]} }}}
54
+ hash.should == {
55
+ 'Resources' => {
56
+ 'name' => {
57
+ 'Type' => 'AWS::EC2::Instance',
58
+ 'Properties' => {
59
+ "KeyName" => 'testkey',
60
+ "ImageId" => 'image_id',
61
+ "InstanceType" => 't1.micro',
62
+ "SecurityGroups" => ["testSecurityGroup1"]
63
+ }
64
+ }
65
+ },
66
+ "Outputs" => {
67
+ "name"=>{
68
+ "Value"=>{
69
+ "Fn::Join"=>[",",
70
+ [
71
+ {"Fn::Join"=>["|", ["availablity_zone", {"Fn::GetAtt"=>["name", "AvailabilityZone"]}]]},
72
+ {"Fn::Join"=>["|", ["private_dns_name", {"Fn::GetAtt"=>["name", "PrivateDnsName"]}]]},
73
+ {"Fn::Join"=>["|", ["public_dns_name", {"Fn::GetAtt"=>["name", "PublicDnsName"]}]]},
74
+ {"Fn::Join"=>["|", ["private_ip", {"Fn::GetAtt"=>["name", "PrivateIp"]}]]},
75
+ {"Fn::Join"=>["|", ["public_ip", {"Fn::GetAtt"=>["name", "PublicIp"]}]]}
76
+ ]
77
+ ]
78
+ }
79
+ }
80
+ }
81
+ }
28
82
  end
29
83
  end
30
84
  end
@@ -33,6 +33,21 @@ describe Cloudster::ChefClient do
33
33
  }
34
34
  }
35
35
  }
36
+ },
37
+ "Outputs" => {
38
+ "AppServer"=>{
39
+ "Value"=>{
40
+ "Fn::Join"=>[",",
41
+ [
42
+ {"Fn::Join"=>["|", ["availablity_zone", {"Fn::GetAtt"=>["AppServer", "AvailabilityZone"]}]]},
43
+ {"Fn::Join"=>["|", ["private_dns_name", {"Fn::GetAtt"=>["AppServer", "PrivateDnsName"]}]]},
44
+ {"Fn::Join"=>["|", ["public_dns_name", {"Fn::GetAtt"=>["AppServer", "PublicDnsName"]}]]},
45
+ {"Fn::Join"=>["|", ["private_ip", {"Fn::GetAtt"=>["AppServer", "PrivateIp"]}]]},
46
+ {"Fn::Join"=>["|", ["public_ip", {"Fn::GetAtt"=>["AppServer", "PublicIp"]}]]}
47
+ ]
48
+ ]
49
+ }
50
+ }
36
51
  }
37
52
  }
38
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.19.1
4
+ version: 2.19.2
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: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2013-01-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -169,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
169
  version: '0'
170
170
  segments:
171
171
  - 0
172
- hash: 565967759
172
+ hash: 773599183
173
173
  required_rubygems_version: !ruby/object:Gem::Requirement
174
174
  none: false
175
175
  requirements: