From: martyntaylor <[email protected]>

---
 src/app/models/instance_observer.rb |    2 +-
 src/app/models/task_observer.rb     |    2 +-
 src/app/util/taskomatic.rb          |   16 +++++++++++-----
 src/config/environment.rb           |    4 +++-
 4 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/app/models/instance_observer.rb 
b/src/app/models/instance_observer.rb
index 283991d..fa5b3d2 100644
--- a/src/app/models/instance_observer.rb
+++ b/src/app/models/instance_observer.rb
@@ -1,6 +1,6 @@
 class InstanceObserver < ActiveRecord::Observer
 
-  def after_save(an_instance)
+  def before_save(an_instance)
     if an_instance.changed?
       change = an_instance.changes['state']
       if change
diff --git a/src/app/models/task_observer.rb b/src/app/models/task_observer.rb
index d1834c4..98252b0 100644
--- a/src/app/models/task_observer.rb
+++ b/src/app/models/task_observer.rb
@@ -2,7 +2,7 @@ class TaskObserver < ActiveRecord::Observer
 
   END_STATES = [ Task::STATE_CANCELED, Task::STATE_FAILED, 
Task::STATE_FINISHED ]
 
-  def after_save(a_task)
+  def before_save(a_task)
     if a_task.changed?
       change = a_task.changes['state']
       if change
diff --git a/src/app/util/taskomatic.rb b/src/app/util/taskomatic.rb
index e66bb62..22328dc 100644
--- a/src/app/util/taskomatic.rb
+++ b/src/app/util/taskomatic.rb
@@ -45,8 +45,6 @@ class Taskomatic
 
   def instance_create
 
-    @task.time_started = Time.now
-
     begin
       client = @task.instance.cloud_account.connect
       realm = @task.instance.realm.external_key rescue nil
@@ -55,9 +53,13 @@ class Taskomatic
       unless @task.instance.image.provider_image?
         @task.instance.image = @task.instance.image.provider_images[0]
       end
+
       unless @task.instance.hardware_profile.provider_hardware_profile?
         @task.instance.hardware_profile = 
@task.instance.hardware_profile.provider_hardware_profiles[0]
       end
+
+      @task.state = Task::STATE_PENDING
+      @task.save!
       dcloud_instance = 
client.create_instance(@task.instance.image.external_key,
                                                :flavor => 
@task.instance.hardware_profile.external_key,
                                                :realm => realm,
@@ -65,6 +67,11 @@ class Taskomatic
       if dcloud_instance.class == Net::HTTPInternalServerError
         @task.instance.state = Instance::STATE_CREATE_FAILED
         raise "Error creating dcloud instance, returned internal server error."
+        @task.state = TASK::STATE_FAILED
+        @task.failure_code = Task::FAILURE_PROVIDER_CONTACT_FAILED
+      else
+        @task.state = Task::STATE_RUNNING
+        @task.save!
       end
 
       @logger.info "Task instance create completed with key 
#{dcloud_instance.id} and state #{dcloud_instance.state}"
@@ -77,7 +84,7 @@ class Taskomatic
     else
       @task.state = Task::STATE_FINISHED
     end
-    @task.time_ended = Time.now
+
     @task.save!
   end
 
@@ -153,5 +160,4 @@ class Taskomatic
       end
     end
   end
-end
-
+end
\ No newline at end of file
diff --git a/src/config/environment.rb b/src/config/environment.rb
index 141642b..1721126 100644
--- a/src/config/environment.rb
+++ b/src/config/environment.rb
@@ -40,13 +40,14 @@ Rails::Initializer.run do |config|
   # config.gem "bj"
   # config.gem "hpricot", :version => '0.6', :source => 
"http://code.whytheluckystiff.net";
   # config.gem "aws-s3", :lib => "aws/s3"
-  config.gem "gettext", :lib => "gettext_rails"
+  config.gem "gettext",     :lib => "gettext_rails"
   config.gem "gettext", :lib => "gettext_activerecord"
   config.gem "authlogic"
   config.gem "deltacloud-client", :lib => "deltacloud"
   config.gem "haml"
   config.gem "will_paginate"
 
+  config.active_record.observers = :instance_observer, :task_observer
   # Only load the plugins named here, in the order given. By default, all 
plugins
   # in vendor/plugins are loaded in alphabetical order.
   # :all can be used as a placeholder for all plugins not explicitly named
@@ -75,4 +76,5 @@ Rails::Initializer.run do |config|
   # The default locale is :en and all translations from 
config/locales/*.rb,yml are auto loaded.
   # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', 
'*.{rb,yml}')]
   # config.i18n.default_locale = :de
+
 end
-- 
1.6.6.1

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to