On 09/05/2012 02:24 PM, Tomáš Hrčka wrote:
DC-api returns state 'stopping' instead of 'shutting_down' since version 1.0.
This patch adds new state mapping and method to check api version.
---
  src/app/models/instance.rb      |  1 +
  src/app/models/instance_task.rb | 12 +++++++++++-
  src/app/util/taskomatic.rb      |  2 ++
  3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
index d354f23..0b20183 100644
--- a/src/app/models/instance.rb
+++ b/src/app/models/instance.rb
@@ -113,6 +113,7 @@ class Instance < ActiveRecord::Base
    STATE_RUNNING        = "running"
    STATE_SHUTTING_DOWN  = "shutting_down"
    STATE_STOPPED        = "stopped"
+  STATE_STOPPING       = "stopping"
    STATE_CREATE_FAILED  = "create_failed"
    STATE_ERROR          = "error"
    STATE_VANISHED       = "vanished"
diff --git a/src/app/models/instance_task.rb b/src/app/models/instance_task.rb
index d28e0e6..dee62ae 100644
--- a/src/app/models/instance_task.rb
+++ b/src/app/models/instance_task.rb
@@ -67,7 +67,7 @@ class InstanceTask < Task
      # FIXME: cloud_account won't always be set here, but we're requiring
      #        front end realm for now.
      if cloud_account = instance.provider_account and
-      conn = cloud_account.connect and c_state = conn.instance_state(state)
+      conn = cloud_account.connect and c_state = 
conn.instance_state(dc_version_compatible_state(con,state))

s/con/conn/:
it should be "dc_version_compatible_state(conn, state)"

          transitions = c_state.transitions
          transitions.each do |transition|
            # FIXME if we allow actions based on the expected state after
@@ -81,6 +81,16 @@ class InstanceTask < Task
      actions
    end

+  #this method translate states so they are compatible with 0.5.x and 1.x 
version of dc-core
+  #v0.5.x use state shutting_down, v1.x changed the state to stopping
+  def self.dc_version_compatible_state(con,state)
+    if state == Instance::STATE_SHUTTING_DOWN && con.api_version.to_i >= 1
+      Instance::STATE_STOPPING
+    else
+      state
+    end
+  end
+
    def self.action_label(action)
      return ACTIONS[action][:label]
    end
diff --git a/src/app/util/taskomatic.rb b/src/app/util/taskomatic.rb
index 1708970..44f6707 100644
--- a/src/app/util/taskomatic.rb
+++ b/src/app/util/taskomatic.rb
@@ -116,6 +116,8 @@ module Taskomatic
        return Instance::STATE_STOPPED
      when 'SHUTTING_DOWN'
        return Instance::STATE_SHUTTING_DOWN
+    when 'STOPPING'
+      return Instance::STATE_SHUTTING_DOWN
      else
        return Instance::STATE_PENDING
      end


COndictional ACK, one note inline

Reply via email to