engineyard-cloud-client 1.0.10 → 1.0.11

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog.md CHANGED
@@ -4,13 +4,18 @@
4
4
 
5
5
  *
6
6
 
7
+ ## v1.0.11 (2013-03-07)
8
+
9
+ * Supports Instance#availability\_zone in API response.
10
+ * Renames Deployment#cancel to Deployment#timeout, though still support using #cancel.
11
+
7
12
  ## v1.0.10 (2013-02-20)
8
13
 
9
- *
14
+ * Provide a test scenario for stuck deployments
10
15
 
11
16
  ## v1.0.9 (2013-02-20)
12
17
 
13
- *
18
+ * Add the ability to cancel stuck deployments
14
19
 
15
20
  ## v1.0.8 (2013-02-14)
16
21
 
@@ -51,12 +51,20 @@ module EY
51
51
  alias deployed_by user_name
52
52
  alias deployed_by= user_name=
53
53
 
54
- def created_at
55
- @created_at ||= super && Time.parse(super)
54
+ def created_at=(cat)
55
+ if String === cat
56
+ super Time.parse(cat)
57
+ else
58
+ super
59
+ end
56
60
  end
57
61
 
58
- def finished_at
59
- @finished_at ||= super && Time.parse(super)
62
+ def finished_at=(fat)
63
+ if String === fat
64
+ super Time.parse(fat)
65
+ else
66
+ super
67
+ end
60
68
  end
61
69
 
62
70
  def config
@@ -110,25 +118,24 @@ module EY
110
118
  put_to_api({:successful => successful, :output => output.read})
111
119
  end
112
120
 
113
- def cancel
121
+ def timeout
114
122
  if finished?
115
123
  raise EY::CloudClient::Error, "Previous deployment is already finished. Aborting."
116
124
  else
117
125
  current_user_name = api.current_user.name
118
126
  self.successful = false
119
- err << "!> Marked as canceled by #{current_user_name}"
127
+ err << "!> Marked as timed out by #{current_user_name}"
120
128
  finished
121
129
  end
122
130
  end
131
+ alias cancel timeout
123
132
 
124
133
  def finished?
125
134
  !finished_at.nil?
126
135
  end
127
136
 
128
137
  def update_with_response(response)
129
- response['deployment'].each do |key,val|
130
- send("#{key}=", val) if respond_to?("#{key}=")
131
- end
138
+ self.attributes = response['deployment']
132
139
  self
133
140
  end
134
141
 
@@ -2,7 +2,7 @@ require 'engineyard-cloud-client/models/api_struct'
2
2
 
3
3
  module EY
4
4
  class CloudClient
5
- class Instance < ApiStruct.new(:id, :role, :name, :status, :amazon_id, :public_hostname, :environment, :bridge)
5
+ class Instance < ApiStruct.new(:id, :role, :name, :status, :amazon_id, :public_hostname, :environment, :bridge, :availability_zone)
6
6
  alias hostname public_hostname
7
7
  alias bridge? bridge
8
8
 
@@ -3,12 +3,13 @@ require 'dm-core'
3
3
  class Instance
4
4
  include DataMapper::Resource
5
5
 
6
- property :id, Serial
7
- property :name, String
8
- property :role, String
9
- property :status, String
10
- property :amazon_id, String
11
- property :public_hostname, String
6
+ property :id, Serial
7
+ property :name, String
8
+ property :role, String
9
+ property :status, String
10
+ property :amazon_id, String
11
+ property :public_hostname, String
12
+ property :availability_zone, String, :default => 'us-east-1b'
12
13
 
13
14
  belongs_to :environment
14
15
 
@@ -1,2 +1,2 @@
1
1
  collection @instances, :root => :instances, :object_root => false
2
- attributes :id, :status, :amazon_id, :role, :bridge, :name, :public_hostname
2
+ attributes :id, :status, :amazon_id, :role, :bridge, :name, :public_hostname, :availability_zone
@@ -1,7 +1,7 @@
1
1
  # This file is maintained by a herd of rabid monkeys with Rakes.
2
2
  module EY
3
3
  class CloudClient
4
- VERSION = '1.0.10'
4
+ VERSION = '1.0.11'
5
5
  end
6
6
  end
7
7
  # Please be aware that the monkeys like tho throw poo sometimes.
@@ -38,4 +38,28 @@ describe EY::CloudClient do
38
38
  EY::CloudClient.new.authenticate!("a@b.com", "foo")
39
39
  }.should raise_error(EY::CloudClient::RequestFailed, /API is temporarily unavailable/)
40
40
  end
41
+
42
+ it "raises RequestFailed with a friendly error when the response contains a message in json" do
43
+ FakeWeb.register_uri(:post, "https://cloud.engineyard.com/api/v2/authenticate", :status => 409, :content_type => 'application/json', :body => %|{"message":"Important information regarding your failure"}|)
44
+
45
+ lambda {
46
+ EY::CloudClient.new.authenticate!("a@b.com", "foo")
47
+ }.should raise_error(EY::CloudClient::RequestFailed, /Error: Important information regarding your failure/)
48
+ end
49
+
50
+ it "raises RequestFailed with a semi-useful error message when the body is empty" do
51
+ FakeWeb.register_uri(:post, "https://cloud.engineyard.com/api/v2/authenticate", :status => 409, :content_type => 'text/plain', :body => "")
52
+
53
+ lambda {
54
+ EY::CloudClient.new.authenticate!("a@b.com", "foo")
55
+ }.should raise_error(EY::CloudClient::RequestFailed, /Error: 409 Conflict/)
56
+ end
57
+
58
+ it "raises RequestFailed with the response body when the content type is not json" do
59
+ FakeWeb.register_uri(:post, "https://cloud.engineyard.com/api/v2/authenticate", :status => 409, :content_type => 'text/plain', :body => "What a useful error message!")
60
+
61
+ lambda {
62
+ EY::CloudClient.new.authenticate!("a@b.com", "foo")
63
+ }.should raise_error(EY::CloudClient::RequestFailed, /Error: 409 Conflict What a useful error message!/)
64
+ end
41
65
  end
@@ -111,7 +111,7 @@ describe EY::CloudClient::AppEnvironment do
111
111
  end
112
112
  end
113
113
 
114
- describe "canceling" do
114
+ describe "timing out (canceling)" do
115
115
  before do
116
116
  @api = scenario_cloud_client "Stuck Deployment"
117
117
  result = EY::CloudClient::AppEnvironment.resolve(@api, 'app_name' => 'rails232app', 'environment_name' => 'giblets', 'account_name' => 'main')
@@ -122,11 +122,11 @@ describe EY::CloudClient::AppEnvironment do
122
122
  it "marks the deployment finish and unsuccessful with a message" do
123
123
  deployment = EY::CloudClient::Deployment.last(@api, @app_env)
124
124
  deployment.should_not be_finished
125
- deployment.cancel
125
+ deployment.timeout
126
126
  deployment.should be_finished
127
127
  deployment.should_not be_successful
128
128
  deployment.output.rewind
129
- deployment.output.read.should =~ /Marked as canceled by Stuck Deployment/
129
+ deployment.output.read.should =~ /Marked as timed out by Stuck Deployment/
130
130
 
131
131
  EY::CloudClient::Deployment.last(@api, @app_env).should be_finished
132
132
  end
@@ -137,7 +137,7 @@ describe EY::CloudClient::AppEnvironment do
137
137
  deployment.successful = true
138
138
  deployment.finished
139
139
  deployment.should be_finished
140
- expect { deployment.cancel }.to raise_error(EY::CloudClient::Error, "Previous deployment is already finished. Aborting.")
140
+ expect { deployment.timeout }.to raise_error(EY::CloudClient::Error, "Previous deployment is already finished. Aborting.")
141
141
  end
142
142
  end
143
143
  end
@@ -55,10 +55,4 @@ describe EY::CloudClient::App do
55
55
  app.account.name.should == "myaccount"
56
56
  end
57
57
  end
58
-
59
- describe "#destroy" do
60
- it "hits the destroy action in the API" do
61
- pending
62
- end
63
- end
64
58
  end
@@ -162,12 +162,6 @@ describe EY::CloudClient::Environment do
162
162
  end
163
163
  end
164
164
 
165
- describe "#destroy" do
166
- it "hits the destroy action in the API" do
167
- pending
168
- end
169
- end
170
-
171
165
  describe "#rebuild" do
172
166
  it "hits the rebuild action in the API" do
173
167
  env = EY::CloudClient::Environment.from_hash(cloud_client, { "id" => 46534 })
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineyard-cloud-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.11
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-02-20 00:00:00.000000000 Z
12
+ date: 2013-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -354,7 +354,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
354
354
  version: '0'
355
355
  segments:
356
356
  - 0
357
- hash: -1988218974776192980
357
+ hash: -1264950529868210162
358
358
  required_rubygems_version: !ruby/object:Gem::Requirement
359
359
  none: false
360
360
  requirements:
@@ -363,7 +363,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
363
363
  version: '0'
364
364
  segments:
365
365
  - 0
366
- hash: -1988218974776192980
366
+ hash: -1264950529868210162
367
367
  requirements: []
368
368
  rubyforge_project:
369
369
  rubygems_version: 1.8.24