cloudster 2.4.0 → 2.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,12 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem install nokogiri -- --with-cflags='--std=gnu99'
4
+ rvm:
5
+ - 1.9.3
6
+ - 1.9.2
7
+ - rbx-18mode
8
+ - rbx-19mode
9
+ - ruby-head
10
+ - jruby-head
11
+ - 1.8.7
12
+ - ree
data/Gemfile CHANGED
@@ -12,5 +12,4 @@ group :development do
12
12
  gem "rdoc", "~> 3.12"
13
13
  gem "bundler"
14
14
  gem "jeweler", "~> 1.8.4"
15
- gem "debugger"
16
15
  end
@@ -2,14 +2,6 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
4
  builder (3.1.4)
5
- columnize (0.3.6)
6
- debugger (1.2.0)
7
- columnize (>= 0.3.1)
8
- debugger-linecache (~> 1.1.1)
9
- debugger-ruby_core_source (~> 1.1.3)
10
- debugger-linecache (1.1.2)
11
- debugger-ruby_core_source (>= 1.1.1)
12
- debugger-ruby_core_source (1.1.3)
13
5
  diff-lcs (1.1.3)
14
6
  excon (0.14.2)
15
7
  fog (1.4.0)
@@ -54,7 +46,6 @@ PLATFORMS
54
46
 
55
47
  DEPENDENCIES
56
48
  bundler
57
- debugger
58
49
  fog
59
50
  jeweler (~> 1.8.4)
60
51
  json
data/README.md CHANGED
@@ -3,58 +3,74 @@
3
3
  Cloudster exposes simple helper methods to provision your AWS cloud.
4
4
  Cloudster uses the AWS APIs to provision stacks on Amazon Cloud.
5
5
 
6
-
7
- - This gem is under active development. Currently supports only a basic EC2 resource .
8
-
9
6
  ##Installation
10
7
 
11
8
  gem install cloudster
12
9
 
13
10
  ## Usage
14
11
 
15
- Create AWS EC2 resources as shown here:
12
+ Create AWS resources as shown here:
16
13
 
17
14
  app_server = Cloudster::Ec2.new(:name => 'AppServer',
18
15
  :key_name => 'mykey',
19
16
  :image_id => 'ami_image_id',
20
17
  :instance_type => 't1.micro'
21
18
  )
19
+
20
+ chef_client = Cloudster::ChefClient.new(
21
+ :validation_key => 'asd3e33880889098asdnmnnasd8900890a8sdmasdjna9s880808asdnmnasd90-a',
22
+ :server_url => 'http://10.50.60.70:4000',
23
+ :node_name => 'project.environment.appserver_1'
24
+ )
25
+
26
+ chef_client.add_to(app_server)
27
+
22
28
  app_server_2 = Cloudster::Ec2.new(:name => 'AppServer2',
23
29
  :key_name => 'mykey',
24
30
  :image_id => 'ami_image_id'
25
31
  )
32
+
33
+ #Add your app servers to the ElasticLoadBalancer
26
34
  load_balancer = Cloudster::Elb.new(:name => 'LoadBalancer',
27
35
  :instance_names => ['AppServer', 'AppServer2']
28
36
  )
29
37
 
30
- Create a stack out of the resources :
38
+ database = Cloudster::Rds.new(
39
+ :name => 'MySqlDB',
40
+ :instance_class => 'db.t1.micro',
41
+ :storage_class => '100',
42
+ :username => 'admin',
43
+ :password => 'admin123',
44
+ :engine => 'MySQL'
45
+ )
31
46
 
32
- stack = Cloudster::Cloud.new(:access_key_id => 'accesskeyid',
33
- :secret_access_key => 'topsecretaccesskey')
34
- Now you can do stuff like :
47
+ Make a cloud :
48
+
49
+ cloud = Cloudster::Cloud.new(:access_key_id => 'accesskeyid', :secret_access_key => 'topsecretaccesskey')
35
50
 
36
51
  - Get the CloudFormation template for a resource in Ruby Hash :
37
52
 
38
53
  app_server.template
39
54
  - Get the CloudFormation template for the stack :
40
55
 
41
- stack.template(:resources => [app_server, app_server_2, load_balancer], :description => 'Description of the stack')
56
+ cloud.template(:resources => [app_server, app_server_2, load_balancer, database], :description => 'Description of the stack')
42
57
 
43
58
  - Provision the stack :
44
59
 
45
- stack.provision(:resources => [app_server, app_server_2, load_balancer], :stack_name => 'TestStack', :description => 'Description of the stack')
60
+ cloud.provision(:resources => [app_server, app_server_2, load_balancer, database], :stack_name => 'TestStack', :description => 'Description of the stack')
46
61
 
47
62
  - Update the stack :
48
63
 
49
- stack.update(:resources => [app_server, app_server_2], :stack_name => 'TestStack', :description => 'Description of the stack')
64
+ cloud.update(:resources => [app_server, app_server_2], :stack_name => 'TestStack', :description => 'Description of the stack')
65
+
66
+ - Delete the stack and it's attached resources :
50
67
 
51
- - You can get the events of a stack using :
68
+ cloud.delete(:stack_name => 'TestStack')
52
69
 
53
- stack.events(:stack_name => 'TestStack')
70
+ - Describe the events of a stack using :
54
71
 
55
- - You can delete the stack and it's attached resources :
72
+ cloud.events(:stack_name => 'TestStack')
56
73
 
57
- stack.delete(:stack_name => 'TestStack')
58
74
 
59
75
 
60
76
  ##License
@@ -62,3 +78,4 @@ Now you can do stuff like :
62
78
  MIT
63
79
 
64
80
  *Free Software, Forever . YEAH !*
81
+ [![githalytics.com alpha](https://cruel-carlota.pagodabox.com/eafd00c3c74c7362ed850f6a50120c30 "githalytics.com")](http://githalytics.com/emilsoman/cloudster)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.4.0
1
+ 2.5.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "cloudster"
8
- s.version = "2.4.0"
8
+ s.version = "2.5.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-31"
12
+ s.date = "2012-11-09"
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 = [
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".rspec",
22
+ ".travis.yml",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
24
25
  "LICENSE.txt",
@@ -27,11 +28,14 @@ Gem::Specification.new do |s|
27
28
  "VERSION",
28
29
  "cloudster.gemspec",
29
30
  "lib/cloudster.rb",
31
+ "lib/cloudster/chef_client.rb",
30
32
  "lib/cloudster/cloud.rb",
33
+ "lib/cloudster/deep_merge.rb",
31
34
  "lib/cloudster/ec2.rb",
32
35
  "lib/cloudster/elb.rb",
33
36
  "lib/cloudster/options_manager.rb",
34
37
  "lib/cloudster/rds.rb",
38
+ "spec/chef_client_spec.rb",
35
39
  "spec/cloud_spec.rb",
36
40
  "spec/ec2_spec.rb",
37
41
  "spec/elb_spec.rb",
@@ -54,7 +58,6 @@ Gem::Specification.new do |s|
54
58
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
55
59
  s.add_development_dependency(%q<bundler>, [">= 0"])
56
60
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
57
- s.add_development_dependency(%q<debugger>, [">= 0"])
58
61
  else
59
62
  s.add_dependency(%q<fog>, [">= 0"])
60
63
  s.add_dependency(%q<json>, [">= 0"])
@@ -62,7 +65,6 @@ Gem::Specification.new do |s|
62
65
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
63
66
  s.add_dependency(%q<bundler>, [">= 0"])
64
67
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
65
- s.add_dependency(%q<debugger>, [">= 0"])
66
68
  end
67
69
  else
68
70
  s.add_dependency(%q<fog>, [">= 0"])
@@ -71,7 +73,6 @@ Gem::Specification.new do |s|
71
73
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
72
74
  s.add_dependency(%q<bundler>, [">= 0"])
73
75
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
74
- s.add_dependency(%q<debugger>, [">= 0"])
75
76
  end
76
77
  end
77
78
 
@@ -3,8 +3,10 @@
3
3
  require 'json'
4
4
  require 'fog'
5
5
  require 'cloudster/options_manager'
6
+ require 'cloudster/deep_merge'
6
7
  include OptionsManager
7
8
  require 'cloudster/ec2'
8
9
  require 'cloudster/elb'
9
10
  require 'cloudster/rds'
10
11
  require 'cloudster/cloud'
12
+ require 'cloudster/chef_client'
@@ -0,0 +1,126 @@
1
+ module Cloudster
2
+ #==UserData for Chef Client bootstrap
3
+ class ChefClient
4
+
5
+ # Initialize an ChefClient configuration
6
+ #
7
+ # ==== Notes
8
+ # options parameter must include values for :instance_name, :validation_key, :server_url and :node_name
9
+ #
10
+ # ==== Examples
11
+ # chef_client = Cloudster::ChefClient.new(
12
+ # :instance_name => 'AppServer',
13
+ # :validation_key => 'asd3e33880889098asdnmnnasd8900890a8sdmasdjna9s880808asdnmnasd90-a',
14
+ # :server_url => 'http://10.50.60.70:4000',
15
+ # :node_name => 'project.environment.appserver_1'
16
+ # )
17
+ #
18
+ # ==== Parameters
19
+ # * options<~Hash> -
20
+ # * :instance_name: String containing the name of EC2 element on which chef-client is to be bootstrapped. Mandatory field
21
+ # * :validation_key: String containing the key used for validating this client with the server. This can be taken from the chef-server validation.pem file. Mandatory field
22
+ # * :server_url: String containing the fully qualified domain name of the chef-server. Mandatory field
23
+ # * :node_name: String containing the name for the chef node. It has to be unique across all nodes in the particular chef client-server ecosystem. Mandatory field
24
+ def initialize(options = {})
25
+ require_options(options, [:validation_key, :server_url, :node_name])
26
+ @validation_key = options[:validation_key]
27
+ @server_url = options[:server_url]
28
+ @node_name = options[:node_name]
29
+ end
30
+
31
+ # Merges the required CloudFormation template for installing the Chef Client to the template of the EC2 instance
32
+ #
33
+ #
34
+ # ==== Examples
35
+ # chef_client = Cloudster::ChefClient.new(
36
+ # :instance_name => 'AppServer',
37
+ # :validation_key => 'asd3e33880889098asdnmnnasd8900890a8sdmasdjna9s880808asdnmnasd90-a',
38
+ # :server_url => 'http://10.50.60.70:4000',
39
+ # :node_name => 'project.environment.appserver_1'
40
+ # )
41
+ # ec2 = Cloudster::Ec2.new(
42
+ # :name => 'AppServer',
43
+ # :key_name => 'mykey',
44
+ # :image_id => 'ami_image_id',
45
+ # :instance_type => 't1.micro'
46
+ # )
47
+ #
48
+ # chef_client.add_to ec2
49
+ #
50
+ # ==== Parameters
51
+ # * instance of EC2
52
+ def add_to(ec2)
53
+ ec2_template = ec2.template
54
+ @instance_name = ec2.name
55
+ chef_client_template = template
56
+ ec2.template.deep_merge(chef_client_template)
57
+ end
58
+
59
+ private
60
+
61
+ def template
62
+ return "Resources" => {
63
+ @instance_name => {
64
+ "Metadata" => {
65
+ "AWS::CloudFormation::Init" => {
66
+ "config" => {
67
+ "packages" => {
68
+ "rubygems" => {
69
+ "chef" => [],
70
+ "ohai" => []
71
+ },
72
+ "apt" => {
73
+ "ruby" => [],
74
+ "ruby-dev" => [],
75
+ "libopenssl-ruby" => [],
76
+ "rdoc" => [],
77
+ "ri" => [],
78
+ "irb" => [],
79
+ "build-essential" => [],
80
+ "wget" => [],
81
+ "ssl-cert" => [],
82
+ "rubygems" => []
83
+ }
84
+ }
85
+ }
86
+ }
87
+ },
88
+ "Properties"=> {
89
+ "UserData" => { "Fn::Base64" => { "Fn::Join" => ["", [
90
+ "#!/bin/bash -v\n",
91
+ "function error_exit\n",
92
+ "{\n",
93
+ " exit 1\n",
94
+ "}\n",
95
+
96
+ "mkdir /etc/chef\n",
97
+ "cat << EOF > /etc/chef/solo.rb\n",
98
+ "file_cache_path \"/tmp/chef-solo\"\n",
99
+ "cookbook_path \"/tmp/chef-solo/cookbooks\"\n",
100
+ "EOF\n",
101
+ "cat << EOF > /etc/chef/chef.json\n",
102
+ "{\n",
103
+ "\"chef_server\": {\n",
104
+ " \"server_url\": \"http://localhost:4000\",\n",
105
+ " \"webui_enabled\": true,\n",
106
+ " \"node_name\": \"#{@node_name}\"\n",
107
+ "},\n",
108
+ "\"run_list\": [\"recipe[chef-client::config]\", \"recipe[chef-client]\"]\n",
109
+ "}\n",
110
+ "EOF\n",
111
+
112
+ "# Bootstrap chef\n",
113
+ "chef-solo -c /etc/chef/solo.rb -j /etc/chef/chef.json -r http://s3.amazonaws.com/chef-solo/bootstrap-latest.tar.gz > /tmp/chef_solo.log 2>&1 || error_exit 'Failed to bootstrap chef client'\n",
114
+
115
+ "# Fixup the server URL in client.rb\n",
116
+ "echo \"#{@validation_key}\" > /etc/chef/validation.pem 2>&1 || error_exit 'Failed to get Chef Server validation key'\n",
117
+ "sed -i 's|http://localhost:4000|", @server_url , "|g' /etc/chef/client.rb\n",
118
+ "chef-client -i 20 > /tmp/chef_client.log 2>&1 || error_exit 'Failed to initialize host via chef client' \n"
119
+ ]]}}
120
+ }
121
+ }
122
+ }
123
+ end
124
+
125
+ end
126
+ end
@@ -0,0 +1,10 @@
1
+ # Stolen shamelessly from here http://apidock.com/rails/Hash/deep_merge!
2
+ class Hash
3
+ def deep_merge(other_hash)
4
+ other_hash.each_pair do |k,v|
5
+ tv = self[k]
6
+ self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
7
+ end
8
+ self
9
+ end
10
+ end
@@ -2,6 +2,7 @@ module Cloudster
2
2
  #==Ec2 resource
3
3
  class Ec2
4
4
 
5
+ attr_accessor :template, :name
5
6
  # Initialize an Ec2 instance
6
7
  #
7
8
  # ==== Notes
@@ -43,7 +44,7 @@ module Cloudster
43
44
  # ==== Returns
44
45
  # * Ruby hash version of the Cloud Formation template for the resource instance
45
46
  def template
46
- Ec2.template({:name =>@name, :key_name => @key_name, :image_id => @image_id, :instance_type => @instance_type})
47
+ @template ||= Ec2.template({:name =>@name, :key_name => @key_name, :image_id => @image_id, :instance_type => @instance_type})
47
48
  end
48
49
 
49
50
  # Class method that returns a Ruby hash version of the Cloud Formation template
@@ -1,5 +1,5 @@
1
1
  module OptionsManager
2
- def require_options(options = {}, required_params)
2
+ def require_options(options, required_params)
3
3
  missing_args = []
4
4
  required_params.each do |param|
5
5
  missing_args << param.to_s if options[param].nil?
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cloudster::ChefClient do
4
+ describe 'initialize' do
5
+ it "should raise argument error if no argument is not provided" do
6
+ expect { Cloudster::ChefClient.new() }.to raise_error(ArgumentError, 'Missing required argument: validation_key,server_url,node_name')
7
+ end
8
+ it "should not raise argument error if all arguments are provided" do
9
+ expect { Cloudster::ChefClient.new(:validation_key => 'somekey', :server_url => 'testurl', :node_name => 'uniquename') }.to_not raise_error
10
+ end
11
+ end
12
+ describe '#add_to' do
13
+ it "should add chef client configuration to ec2 template" do
14
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'AppServer', :instance_type => 't1.micro' )
15
+ chef_client = Cloudster::ChefClient.new(:validation_key => 'somekey', :server_url => 'testurl', :node_name => 'uniquename')
16
+ chef_client.add_to ec2
17
+ ec2.template.should ==
18
+ {
19
+ "Resources"=>{
20
+ "AppServer"=>{
21
+ "Type"=>"AWS::EC2::Instance",
22
+ "Properties"=>{
23
+ "KeyName"=>"testkey",
24
+ "ImageId"=>"image_id",
25
+ "InstanceType"=>"t1.micro",
26
+ "UserData"=>{
27
+ "Fn::Base64"=>{
28
+ "Fn::Join"=>["", [
29
+ "#!/bin/bash -v\n",
30
+ "function error_exit\n",
31
+ "{\n", " exit 1\n", "}\n",
32
+ "mkdir /etc/chef\n",
33
+ "cat << EOF > /etc/chef/solo.rb\n",
34
+ "file_cache_path \"/tmp/chef-solo\"\n",
35
+ "cookbook_path \"/tmp/chef-solo/cookbooks\"\n",
36
+ "EOF\n", "cat << EOF > /etc/chef/chef.json\n",
37
+ "{\n", "\"chef_server\": {\n",
38
+ " \"server_url\": \"http://localhost:4000\",\n",
39
+ " \"webui_enabled\": true,\n",
40
+ " \"node_name\": \"uniquename\"\n",
41
+ "},\n",
42
+ "\"run_list\": [\"recipe[chef-client::config]\", \"recipe[chef-client]\"]\n",
43
+ "}\n",
44
+ "EOF\n",
45
+ "# Bootstrap chef\n",
46
+ "chef-solo -c /etc/chef/solo.rb -j /etc/chef/chef.json -r http://s3.amazonaws.com/chef-solo/bootstrap-latest.tar.gz > /tmp/chef_solo.log 2>&1 || error_exit 'Failed to bootstrap chef client'\n",
47
+ "# Fixup the server URL in client.rb\n",
48
+ "echo \"somekey\" > /etc/chef/validation.pem 2>&1 || error_exit 'Failed to get Chef Server validation key'\n",
49
+ "sed -i 's|http://localhost:4000|", "testurl", "|g' /etc/chef/client.rb\n",
50
+ "chef-client -i 20 > /tmp/chef_client.log 2>&1 || error_exit 'Failed to initialize host via chef client' \n"
51
+ ]]
52
+ }
53
+ }
54
+ },
55
+ "Metadata"=>{
56
+ "AWS::CloudFormation::Init"=>{
57
+ "config"=>{
58
+ "packages"=>{
59
+ "rubygems"=>{
60
+ "chef"=>[],
61
+ "ohai"=>[]
62
+ },
63
+ "apt"=>{
64
+ "ruby"=>[],
65
+ "ruby-dev"=>[],
66
+ "libopenssl-ruby"=>[],
67
+ "rdoc"=>[],
68
+ "ri"=>[],
69
+ "irb"=>[],
70
+ "build-essential"=>[],
71
+ "wget"=>[],
72
+ "ssl-cert"=>[],
73
+ "rubygems"=>[]
74
+ }
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
82
+ end
83
+ end
84
+ end
@@ -11,8 +11,8 @@ 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 => 'name')
15
+ ec2_1 = Cloudster::Ec2.new(:key_name => 'testkey1', :image_id => 'image_id1', :name => 'name1')
16
16
  rds = Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10')
17
17
  elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['name','name1'])
18
18
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
@@ -70,14 +70,14 @@ describe Cloudster::Cloud do
70
70
 
71
71
  describe '#provision' do
72
72
  it "should raise argument error if resources not provided" do
73
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
73
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
74
74
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
75
75
  expect { cloud.provision(:description => 'test') }.to raise_error(ArgumentError, 'Missing required argument: resources,stack_name' )
76
76
  end
77
77
  it "should trigger stack creation" do
78
78
  cloud_formation = double('CloudFormation')
79
79
  Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test').and_return cloud_formation
80
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
80
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
81
81
  elb = Cloudster::Elb.new(:name => 'ELB', :instance_names => ['name','name1'])
82
82
  rds = Cloudster::Rds.new(:name => 'MySqlDB', :storage_size => '10')
83
83
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
@@ -88,14 +88,14 @@ describe Cloudster::Cloud do
88
88
 
89
89
  describe '#update' do
90
90
  it "should raise argument error if resources not provided" do
91
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
91
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
92
92
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
93
93
  expect { cloud.update(:description => 'test') }.to raise_error(ArgumentError, 'Missing required argument: resources,stack_name' )
94
94
  end
95
95
  it "should trigger stack update" do
96
96
  cloud_formation = double('CloudFormation')
97
97
  Fog::AWS::CloudFormation.should_receive(:new).with(:aws_access_key_id => 'test', :aws_secret_access_key => 'test').and_return cloud_formation
98
- ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', name: 'name')
98
+ ec2 = Cloudster::Ec2.new(:key_name => 'testkey', :image_id => 'image_id', :name => 'name')
99
99
  cloud = Cloudster::Cloud.new(:access_key_id => 'test', :secret_access_key => 'test')
100
100
  cloud_formation.should_receive('update_stack').with('stack_name', 'TemplateBody' => cloud.template(:resources => [ec2], :description => 'testDescription'))
101
101
  cloud.update(:resources => [ec2], :stack_name => 'stack_name', :description => 'testDescription')
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.0
4
+ version: 2.5.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-31 00:00:00.000000000 Z
12
+ date: 2012-11-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -107,22 +107,6 @@ dependencies:
107
107
  - - ~>
108
108
  - !ruby/object:Gem::Version
109
109
  version: 1.8.4
110
- - !ruby/object:Gem::Dependency
111
- name: debugger
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
110
  description: Cloudster uses the AWS APIs to provision stacks on Amazon Cloud.
127
111
  email: emil.soman@gmail.com
128
112
  executables: []
@@ -133,6 +117,7 @@ extra_rdoc_files:
133
117
  files:
134
118
  - .document
135
119
  - .rspec
120
+ - .travis.yml
136
121
  - Gemfile
137
122
  - Gemfile.lock
138
123
  - LICENSE.txt
@@ -141,11 +126,14 @@ files:
141
126
  - VERSION
142
127
  - cloudster.gemspec
143
128
  - lib/cloudster.rb
129
+ - lib/cloudster/chef_client.rb
144
130
  - lib/cloudster/cloud.rb
131
+ - lib/cloudster/deep_merge.rb
145
132
  - lib/cloudster/ec2.rb
146
133
  - lib/cloudster/elb.rb
147
134
  - lib/cloudster/options_manager.rb
148
135
  - lib/cloudster/rds.rb
136
+ - spec/chef_client_spec.rb
149
137
  - spec/cloud_spec.rb
150
138
  - spec/ec2_spec.rb
151
139
  - spec/elb_spec.rb
@@ -166,7 +154,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
166
154
  version: '0'
167
155
  segments:
168
156
  - 0
169
- hash: -380344941
157
+ hash: -233709777
170
158
  required_rubygems_version: !ruby/object:Gem::Requirement
171
159
  none: false
172
160
  requirements: