cloudster 0.0.2 → 1.0.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 CHANGED
@@ -25,7 +25,8 @@ Create AWS EC2 resources as shown here:
25
25
 
26
26
  Create a stack out of the resources :
27
27
 
28
- stack = Cloudster::Cloud.new(:resources => [app_server, app_server_2])
28
+ stack = Cloudster::Cloud.new(:access_key_id => 'accesskeyid',
29
+ :secret_access_key => 'topsecretaccesskey')
29
30
  Now you can do stuff like :
30
31
 
31
32
  - Get the CloudFormation template for a resource in Ruby Hash :
@@ -33,16 +34,13 @@ Now you can do stuff like :
33
34
  app_server.template
34
35
  - Get the CloudFormation template for the stack :
35
36
 
36
- stack.template(:description => 'Description of the stack')
37
+ stack.template(:resources => [app_server, app_server_2], :description => 'Description of the stack')
37
38
 
38
39
  And most importantly :
39
40
 
40
41
  - Provision the stack :
41
42
 
42
- stack.provision(:stack_name => 'Shitty stack',
43
- :access_key_id => 'accesskeyid',
44
- :secret_access_key => 'topsecretaccesskey')
45
-
43
+ stack.provision(:resources => [app_server, app_server_2], :stack_name => 'TestStack', :description => 'Description of the stack')
46
44
 
47
45
 
48
46
  ##License
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 1.0.0
data/cloudster.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "cloudster"
8
- s.version = "0.0.2"
8
+ s.version = "1.0.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"]
@@ -5,41 +5,52 @@ module Cloudster
5
5
  # Initialize a Cloud instance
6
6
  #
7
7
  # ==== Notes
8
- # options parameter must include values for :resources
8
+ # options parameter must include values for :access_key_id and
9
+ # :secret_access_key in order to create a connection
10
+ #
11
+ # ==== Parameters
12
+ # * options<~Hash>
13
+ # * :access_key_id : A string containing the AWS access key ID.
14
+ # * :secret_access_key : A string containing the AWS secret access key.
9
15
  #
10
16
  # ==== Examples
11
17
  # cloud = Cloudster::Cloud.new(
12
- # :resources => [
13
- # #Cloudster resource instances ..
14
- # ]
18
+ # :access_key_id => 'aws_access_key_id'
19
+ # :secret_access_key => 'aws_secret_access_key',
15
20
  # )
16
- #
17
- # ==== Parameters
18
- # * options<~Hash> - :resources : An array of Cloudster resource instances. Defaults to {}.
19
21
  def initialize(options = {})
20
- require_options(options, [:resources])
21
- @resources = options[:resources]
22
+ require_options(options, [:access_key_id, :secret_access_key])
23
+ access_key_id = options[:access_key_id]
24
+ secret_access_key = options[:secret_access_key]
25
+ @cloud_formation = Fog::AWS::CloudFormation.new(:aws_access_key_id => access_key_id, :aws_secret_access_key => secret_access_key)
22
26
  end
23
27
 
24
28
  # Generates CloudFormation Template for the stack
25
29
  #
26
30
  # ==== Examples
27
31
  # cloud = Cloudster::Cloud.new(
28
- # :resources => [
29
- # #Cloudster resource instances ..
30
- # ]
32
+ # :access_key_id => 'aws_access_key_id'
33
+ # :secret_access_key => 'aws_secret_access_key',
31
34
  # )
32
- # cloud.template(:description => 'This is the description for the stack template')
35
+ #
36
+ # cloud.template(:resources => [<AWS RESOURCES ARRAY>], :description => 'This is the description for the stack template')
37
+ #
38
+ # ==== Notes
39
+ # options parameter must include values for :resources
33
40
  #
34
41
  # ==== Parameters
35
- # * options<~Hash> - :description : A string which will be used as the Description of the CloudFormation template.
42
+ # * options<~Hash> -
43
+ # * :resources : An array of Cloudster resource instances. Defaults to {}.
44
+ # * :description : A string which will be used as the Description of the CloudFormation template.
36
45
  #
37
46
  # ==== Returns
38
47
  # * JSON cloud formation template
39
48
  def template(options = {})
49
+ require_options(options, [:resources])
50
+ resources = options[:resources]
40
51
  description = options[:description] || 'This stack is created by Cloudster'
41
52
  resource_template = {}
42
- @resources.each do |resource|
53
+ resources.each do |resource|
43
54
  resource_template.merge!(resource.template['Resources'])
44
55
  end
45
56
 
@@ -54,27 +65,51 @@ module Cloudster
54
65
  #
55
66
  # ==== Examples
56
67
  # cloud = Cloudster::Cloud.new(
57
- # :resources => [
58
- # #Cloudster resource instances ..
59
- # ]
68
+ # :access_key_id => 'aws_access_key_id'
69
+ # :secret_access_key => 'aws_secret_access_key',
60
70
  # )
61
- # cloud.template(:description => 'This is the description for the stack template')
71
+ #
72
+ # cloud.provision(:resources => [<AWS RESOURCES ARRRAY>],
73
+ # :stack_name => 'Shitty Stack',
74
+ # :description => 'This is the description for the stack template')
62
75
  #
63
76
  # ==== Notes
64
- # options parameter must include values for :stack_name for naming the stack , :access_key_id and
65
- # :secret_access_key in order to create a connection
77
+ # options parameter must include values for :resources and :stack_name
66
78
  #
67
79
  # ==== Parameters
68
- # * options<~Hash> - :description : A string which will be used as the Description of the CloudFormation template.
80
+ # * options<~Hash>
81
+ # * :resources : An array of Cloudster resource instances. Defaults to {}.
82
+ # * :stack_name : A string which will be used to name the CloudFormation stack.
83
+ # * :description : A string which will be used as the Description of the CloudFormation template.
69
84
  #
70
85
  # ==== Returns
71
86
  # * response<~Excon::Response>:
72
87
  # * body<~Hash>:
73
88
  # * 'StackId'<~String> - Id of the new stack
74
89
  def provision(options = {})
75
- require_options(options, [:stack_name, :access_key_id, :secret_access_key])
76
- cloud_formation = Fog::AWS::CloudFormation.new(:aws_access_key_id => options[:access_key_id], :aws_secret_access_key => options[:secret_access_key])
77
- return cloud_formation.create_stack(options[:stack_name], 'TemplateBody' => template)
90
+ require_options(options, [:resources, :stack_name])
91
+ return @cloud_formation.create_stack(options[:stack_name], 'TemplateBody' => template(:resources => options[:resources],
92
+ :description => options[:description]))
93
+ end
94
+
95
+ # Get events related to a stack
96
+ #
97
+ # ==== Examples
98
+ # cloud = Cloudster::Cloud.new(
99
+ # :access_key_id => 'aws_access_key_id'
100
+ # :secret_access_key => 'aws_secret_access_key',
101
+ # )
102
+ # cloud.events(:stack_name => 'ShittyStack')
103
+ #
104
+ # ==== Parameters
105
+ # * options<~Hash>
106
+ # * :stack_name : A string which will contain the name of the stack for which the events will be fetched.
107
+ #
108
+ # ==== Returns
109
+ # * response<~Excon::Response>:
110
+ # * body<~Hash>:
111
+ def self.events(options = {})
112
+ return @cloud_formation.describe_stack_events(options[:stack_name])
78
113
  end
79
114
 
80
115
  end
data/lib/cloudster/ec2.rb CHANGED
@@ -16,7 +16,6 @@ module Cloudster
16
16
  #
17
17
  # ==== Parameters
18
18
  # * options<~Hash> -
19
- # *Keys:
20
19
  # * :name: String containing the name for the Ec2 resource
21
20
  # * :key_name: String containing the name of the keypair to be used for SSH
22
21
  # * :image_id: String containing the AMI image id to be used while creating the Ec2 resource
data/spec/cloud_spec.rb CHANGED
@@ -3,34 +3,34 @@ require 'spec_helper'
3
3
  describe Cloudster::Cloud do
4
4
  describe 'initialize' do
5
5
  it "should raise argument error if resources not provided" do
6
- expect { Cloudster::Cloud.new() }.to raise_error(ArgumentError, 'Missing required argument: resources')
6
+ expect { Cloudster::Cloud.new() }.to raise_error(ArgumentError, 'Missing required argument: access_key_id,secret_access_key')
7
7
  end
8
8
  it "should not raise argument error if all arguments are provided" do
9
- expect { Cloudster::Cloud.new(:resources => []) }.to_not raise_error(ArgumentError, 'Missing required argument: name')
9
+ expect { Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test') }.to_not raise_error
10
10
  end
11
11
  end
12
12
  describe '#template' 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
- cloud = Cloudster::Cloud.new(:resources => [ec2, ec2_1])
17
- cloud.template(:description => 'test template').should == {"AWSTemplateFormatVersion"=>"2010-09-09", "Description"=>"test template", "Resources"=>{"name"=>{"Type"=>"AWS::EC2::Instance", "Properties"=>{"KeyName"=>"testkey", "ImageId"=>"image_id"}}, "name1"=>{"Type"=>"AWS::EC2::Instance", "Properties"=>{"KeyName"=>"testkey1", "ImageId"=>"image_id1"}}}}.to_json
16
+ cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
17
+ cloud.template(:resources => [ec2, ec2_1], :description => 'test template').should == {"AWSTemplateFormatVersion"=>"2010-09-09", "Description"=>"test template", "Resources"=>{"name"=>{"Type"=>"AWS::EC2::Instance", "Properties"=>{"KeyName"=>"testkey", "ImageId"=>"image_id"}}, "name1"=>{"Type"=>"AWS::EC2::Instance", "Properties"=>{"KeyName"=>"testkey1", "ImageId"=>"image_id1"}}}}.to_json
18
18
  end
19
19
  end
20
20
 
21
21
  describe '#provision' do
22
22
  it "should raise argument error if resources not provided" do
23
23
  ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
24
- cloud = Cloudster::Cloud.new(:resources => [ec2])
25
- expect { cloud.provision() }.to raise_error(ArgumentError, 'Missing required argument: stack_name,access_key_id,secret_access_key' )
24
+ cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
25
+ expect { cloud.provision(:description => 'test') }.to raise_error(ArgumentError, 'Missing required argument: resources,stack_name' )
26
26
  end
27
27
  it "should create an instance of cloud formation and trigger stack creation" do
28
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
29
- cloud = Cloudster::Cloud.new(:resources => [ec2])
30
28
  cloud_formation = double('CloudFormation')
31
- cloud_formation.should_receive('create_stack').with('stack_name', 'TemplateBody' => cloud.template)
32
- Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'access_key_id', :aws_secret_access_key => 'secret_access_key').and_return cloud_formation
33
- cloud.provision(:stack_name => 'stack_name', :access_key_id => 'access_key_id', :secret_access_key => 'secret_access_key')
29
+ Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test').and_return cloud_formation
30
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
31
+ cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
32
+ cloud_formation.should_receive('create_stack').with('stack_name', 'TemplateBody' => cloud.template(:resources => [ec2], :description => 'testDescription'))
33
+ cloud.provision(:resources => [ec2], :stack_name => 'stack_name', :description => 'testDescription')
34
34
  end
35
35
  end
36
36
  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: 0.0.2
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -162,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
162
162
  version: '0'
163
163
  segments:
164
164
  - 0
165
- hash: -963662573
165
+ hash: 814811471
166
166
  required_rubygems_version: !ruby/object:Gem::Requirement
167
167
  none: false
168
168
  requirements: