ACK

On Nov 16, 2010, at 1:23 PM, [email protected] wrote:

> From: Jan Provaznik <[email protected]>
> 
> ---
> src/app/controllers/image_controller.rb          |    2 +-
> src/app/controllers/instance_controller.rb       |  202 ----------------------
> src/app/controllers/instances_controller.rb      |  202 ++++++++++++++++++++++
> src/app/helpers/instance_helper.rb               |   33 ----
> src/app/helpers/instances_helper.rb              |   33 ++++
> src/app/views/dashboard/summary.haml             |    2 +-
> src/app/views/instance/_instances.haml           |   24 ---
> src/app/views/instance/configure.haml            |   23 ---
> src/app/views/instance/create.haml               |    2 -
> src/app/views/instance/delete.haml               |    2 -
> src/app/views/instance/index.haml                |  127 --------------
> src/app/views/instance/new.haml                  |   19 --
> src/app/views/instance/show.haml                 |   61 -------
> src/app/views/instances/_instances.haml          |   24 +++
> src/app/views/instances/configure.haml           |   23 +++
> src/app/views/instances/create.haml              |    2 +
> src/app/views/instances/delete.haml              |    2 +
> src/app/views/instances/index.haml               |  127 ++++++++++++++
> src/app/views/instances/new.haml                 |   19 ++
> src/app/views/instances/show.haml                |   61 +++++++
> src/app/views/pools/list.haml                    |    2 +-
> src/config/navigation.rb                         |    2 +-
> src/config/routes.rb                             |    2 +-
> src/features/step_definitions/instance.rb        |    8 +-
> src/spec/controllers/instance_controller_spec.rb |    2 +-
> 25 files changed, 503 insertions(+), 503 deletions(-)
> delete mode 100644 src/app/controllers/instance_controller.rb
> create mode 100644 src/app/controllers/instances_controller.rb
> delete mode 100644 src/app/helpers/instance_helper.rb
> create mode 100644 src/app/helpers/instances_helper.rb
> delete mode 100644 src/app/views/instance/_instances.haml
> delete mode 100644 src/app/views/instance/configure.haml
> delete mode 100644 src/app/views/instance/create.haml
> delete mode 100644 src/app/views/instance/delete.haml
> delete mode 100644 src/app/views/instance/index.haml
> delete mode 100644 src/app/views/instance/new.haml
> delete mode 100644 src/app/views/instance/show.haml
> create mode 100644 src/app/views/instances/_instances.haml
> create mode 100644 src/app/views/instances/configure.haml
> create mode 100644 src/app/views/instances/create.haml
> create mode 100644 src/app/views/instances/delete.haml
> create mode 100644 src/app/views/instances/index.haml
> create mode 100644 src/app/views/instances/new.haml
> create mode 100644 src/app/views/instances/show.haml
> 
> diff --git a/src/app/controllers/image_controller.rb 
> b/src/app/controllers/image_controller.rb
> index 6e3f932..8cd8cbe 100644
> --- a/src/app/controllers/image_controller.rb
> +++ b/src/app/controllers/image_controller.rb
> @@ -36,7 +36,7 @@ class ImageController < ApplicationController
> 
>   def show
>     if params[:create_instance]
> -      redirect_to :controller => 'instance', :action => 'new', 
> 'instance[image_id]' => (params[:ids] || []).first
> +      redirect_to :controller => 'instances', :action => 'new', 
> 'instance[image_id]' => (params[:ids] || []).first
>     end
> 
>     require_privilege(Privilege::IMAGE_VIEW)
> diff --git a/src/app/controllers/instance_controller.rb 
> b/src/app/controllers/instance_controller.rb
> deleted file mode 100644
> index 0de246d..0000000
> --- a/src/app/controllers/instance_controller.rb
> +++ /dev/null
> @@ -1,202 +0,0 @@
> -#
> -# Copyright (C) 2009 Red Hat, Inc.
> -#
> -# This program is free software; you can redistribute it and/or modify
> -# it under the terms of the GNU General Public License as published by
> -# the Free Software Foundation; version 2 of the License.
> -#
> -# This program is distributed in the hope that it will be useful,
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -# GNU General Public License for more details.
> -#
> -# You should have received a copy of the GNU General Public License
> -# along with this program; if not, write to the Free Software
> -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> -# MA  02110-1301, USA.  A copy of the GNU General Public License is
> -# also available at http://www.gnu.org/copyleft/gpl.html.
> -
> -# Filters added to this controller apply to all controllers in the 
> application.
> -# Likewise, all the methods added will be available for all controllers.
> -
> -require 'util/condormatic'
> -
> -class InstanceController < ApplicationController
> -  before_filter :require_user, :get_nav_items
> -  before_filter :instance, :only => [:show, :key]
> -  layout :layout
> -
> -  def section_id
> -    'runtime'
> -  end
> -
> -  def layout
> -    return "aggregator" unless request.xhr?
> -  end
> -
> -  def index
> -    @pools = Pool.list_for_user(@current_user, Privilege::INSTANCE_MODIFY)
> -
> -    @order_dir = params[:order_dir] == 'desc' ? 'desc' : 'asc'
> -    @order_field = params[:order_field] || 'name'
> -
> -    # we can't use pool.instances, because we need custom sorting
> -    @sorted_instances_by_pool = {}
> -    Instance.find(
> -      :all,
> -      :include => [:template, :hardware_profile, :owner, :pool],
> -      :order => @order_field + ' ' + @order_dir
> -    ).each do |inst|
> -      pool_id = inst.pool.id
> -      next unless @pools.find {|p| p.id == pool_id}
> -      (@sorted_instances_by_pool[pool_id] ||= []) << inst
> -    end
> -  end
> -
> -  def show
> -  end
> -
> -  def key
> -    unless @instance.instance_key.nil?
> -      send_data @instance.instance_key.pem,
> -                :filename => "#[email protected]_key.name}.pem",
> -                :type => "text/plain"
> -      return
> -    end
> -    flash[:warning] = "SSH Key not found for this Instance."
> -    redirect_to :action => "show", :id => @instance
> -  end
> -
> -  def new
> -    @instance = Instance.new(params[:instance])
> -    require_privilege(Privilege::INSTANCE_MODIFY, @instance.pool) if 
> @instance.pool
> -    # FIXME: we need to list only templates for particular user,
> -    # => TODO: add TEMPLATE_* permissions
> -    @templates = Template.paginate(
> -      :page => params[:page] || 1,
> -      :include => {:images => :replicated_images},
> -      :conditions => "replicated_images.uploaded = 't'"
> -    )
> -  end
> -
> -  def configure
> -    @instance = Instance.new(params[:instance])
> -    require_privilege(Privilege::INSTANCE_MODIFY, @instance.pool)
> -    # FIXME: change template.architecture to match expected HWP arch strings
> -    if (@instance.template.architecture == "64-bit")
> -      arch_value = "x86_64"
> -    else
> -      arch_value = "i386"
> -    end
> -    @hardware_profiles = HardwareProfile.find(:all, :include => 
> :architecture,
> -                                   :conditions => {:provider_id => nil,
> -                                   "hardware_profile_properties.value" => 
> arch_value})
> -  end
> -
> -  def create
> -    if params[:cancel]
> -      redirect_to :action => 'new', :instance => {:pool_id => 
> params[:instance][:pool_id]}
> -      return
> -    end
> -
> -    @instance = Instance.new(params[:instance])
> -    @instance.state = Instance::STATE_NEW
> -    @instance.owner = current_user
> -
> -    require_privilege(Privilege::INSTANCE_MODIFY,
> -                      Pool.find(@instance.pool_id))
> -    #FIXME: This should probably be in a transaction
> -    if @instance.save!
> -        @task = InstanceTask.new({:user        => current_user,
> -                                  :task_target => @instance,
> -                                  :action      => 
> InstanceTask::ACTION_CREATE})
> -        if @task.save
> -          condormatic_instance_create(@task)
> -          if Quota.can_start_instance?(@instance, nil)
> -            flash[:notice] = "Instance added."
> -          else
> -            flash[:warning] = "Quota Exceeded: Instance will not start until 
> you have free quota"
> -          end
> -        else
> -          @pool = @instance.pool
> -          render :action => 'configure'
> -        end
> -      redirect_to :action => 'index'
> -    else
> -      @hardware_profiles = HardwareProfile.all
> -      render :action => 'configure'
> -    end
> -  end
> -
> -  def instance_action
> -    params.keys.each do |param|
> -      if param =~ /^launch_instance_(\d+)$/
> -        redirect_to :action => 'new', 'instance[pool_id]' => $1
> -        return
> -      end
> -    end
> -
> -    @instance = Instance.find((params[:id] || []).first)
> -    require_privilege(Privilege::INSTANCE_CONTROL,@instance.pool)
> -
> -    if params[:instance_details]
> -      render :action => 'show'
> -      return
> -    end
> -
> -    if params[:remove_failed]
> -      action = remove_failed
> -    else
> -      # action list will be longer (restart, start, stop..)
> -      action = if params[:shutdown]
> -                 'stop'
> -               #elsif params[:restart]
> -               #  'restart'
> -               end
> -
> -      unless @instance.valid_action?(action)
> -        raise ActionError.new("'#{action}' is an invalid action.")
> -      end
> -
> -      # not sure if task is used as everything goes through condor
> -      #permissons check here
> -      @task = @instance.queue_action(@current_user, action)
> -      unless @task
> -        raise ActionError.new("#{action} cannot be performed on this 
> instance.")
> -      end
> -
> -      case action
> -        when 'stop'
> -          condormatic_instance_stop(@task)
> -        when 'destroy'
> -          condormatic_instance_destroy(@task)
> -        when 'start'
> -          condormatic_instance_create(@task)
> -        else
> -          raise ActionError.new("Sorry, action '#{action}' is currently not 
> supported by condor backend.")
> -      end
> -    end
> -
> -    flash[:notice] = "#[email protected]}: #{action} was successfully 
> queued."
> -    redirect_to :action => 'index'
> -  end
> -
> -  def delete
> -  end
> -
> -  def remove_failed
> -    action ='remove failed'
> -    raise ActionError.new("#{action} cannot be performed on this instance.") 
> unless
> -      @instance.state == Instance::STATE_ERROR
> -    condormatic_instance_reset_error(@instance)
> -    action
> -  end
> -
> -  private
> -
> -  def instance
> -    @instance = Instance.find(params[:id])
> -    require_privilege(Privilege::INSTANCE_VIEW, @instance.pool)
> -  end
> -
> -end
> diff --git a/src/app/controllers/instances_controller.rb 
> b/src/app/controllers/instances_controller.rb
> new file mode 100644
> index 0000000..3ffb287
> --- /dev/null
> +++ b/src/app/controllers/instances_controller.rb
> @@ -0,0 +1,202 @@
> +#
> +# Copyright (C) 2009 Red Hat, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> +# MA  02110-1301, USA.  A copy of the GNU General Public License is
> +# also available at http://www.gnu.org/copyleft/gpl.html.
> +
> +# Filters added to this controller apply to all controllers in the 
> application.
> +# Likewise, all the methods added will be available for all controllers.
> +
> +require 'util/condormatic'
> +
> +class InstancesController < ApplicationController
> +  before_filter :require_user, :get_nav_items
> +  before_filter :instance, :only => [:show, :key]
> +  layout :layout
> +
> +  def section_id
> +    'runtime'
> +  end
> +
> +  def layout
> +    return "aggregator" unless request.xhr?
> +  end
> +
> +  def index
> +    @pools = Pool.list_for_user(@current_user, Privilege::INSTANCE_MODIFY)
> +
> +    @order_dir = params[:order_dir] == 'desc' ? 'desc' : 'asc'
> +    @order_field = params[:order_field] || 'name'
> +
> +    # we can't use pool.instances, because we need custom sorting
> +    @sorted_instances_by_pool = {}
> +    Instance.find(
> +      :all,
> +      :include => [:template, :hardware_profile, :owner, :pool],
> +      :order => @order_field + ' ' + @order_dir
> +    ).each do |inst|
> +      pool_id = inst.pool.id
> +      next unless @pools.find {|p| p.id == pool_id}
> +      (@sorted_instances_by_pool[pool_id] ||= []) << inst
> +    end
> +  end
> +
> +  def show
> +  end
> +
> +  def key
> +    unless @instance.instance_key.nil?
> +      send_data @instance.instance_key.pem,
> +                :filename => "#[email protected]_key.name}.pem",
> +                :type => "text/plain"
> +      return
> +    end
> +    flash[:warning] = "SSH Key not found for this Instance."
> +    redirect_to :action => "show", :id => @instance
> +  end
> +
> +  def new
> +    @instance = Instance.new(params[:instance])
> +    require_privilege(Privilege::INSTANCE_MODIFY, @instance.pool) if 
> @instance.pool
> +    # FIXME: we need to list only templates for particular user,
> +    # => TODO: add TEMPLATE_* permissions
> +    @templates = Template.paginate(
> +      :page => params[:page] || 1,
> +      :include => {:images => :replicated_images},
> +      :conditions => "replicated_images.uploaded = 't'"
> +    )
> +  end
> +
> +  def configure
> +    @instance = Instance.new(params[:instance])
> +    require_privilege(Privilege::INSTANCE_MODIFY, @instance.pool)
> +    # FIXME: change template.architecture to match expected HWP arch strings
> +    if (@instance.template.architecture == "64-bit")
> +      arch_value = "x86_64"
> +    else
> +      arch_value = "i386"
> +    end
> +    @hardware_profiles = HardwareProfile.find(:all, :include => 
> :architecture,
> +                                   :conditions => {:provider_id => nil,
> +                                   "hardware_profile_properties.value" => 
> arch_value})
> +  end
> +
> +  def create
> +    if params[:cancel]
> +      redirect_to :action => 'new', :instance => {:pool_id => 
> params[:instance][:pool_id]}
> +      return
> +    end
> +
> +    @instance = Instance.new(params[:instance])
> +    @instance.state = Instance::STATE_NEW
> +    @instance.owner = current_user
> +
> +    require_privilege(Privilege::INSTANCE_MODIFY,
> +                      Pool.find(@instance.pool_id))
> +    #FIXME: This should probably be in a transaction
> +    if @instance.save!
> +        @task = InstanceTask.new({:user        => current_user,
> +                                  :task_target => @instance,
> +                                  :action      => 
> InstanceTask::ACTION_CREATE})
> +        if @task.save
> +          condormatic_instance_create(@task)
> +          if Quota.can_start_instance?(@instance, nil)
> +            flash[:notice] = "Instance added."
> +          else
> +            flash[:warning] = "Quota Exceeded: Instance will not start until 
> you have free quota"
> +          end
> +        else
> +          @pool = @instance.pool
> +          render :action => 'configure'
> +        end
> +      redirect_to :action => 'index'
> +    else
> +      @hardware_profiles = HardwareProfile.all
> +      render :action => 'configure'
> +    end
> +  end
> +
> +  def instance_action
> +    params.keys.each do |param|
> +      if param =~ /^launch_instance_(\d+)$/
> +        redirect_to :action => 'new', 'instance[pool_id]' => $1
> +        return
> +      end
> +    end
> +
> +    @instance = Instance.find((params[:id] || []).first)
> +    require_privilege(Privilege::INSTANCE_CONTROL,@instance.pool)
> +
> +    if params[:instance_details]
> +      render :action => 'show'
> +      return
> +    end
> +
> +    if params[:remove_failed]
> +      action = remove_failed
> +    else
> +      # action list will be longer (restart, start, stop..)
> +      action = if params[:shutdown]
> +                 'stop'
> +               #elsif params[:restart]
> +               #  'restart'
> +               end
> +
> +      unless @instance.valid_action?(action)
> +        raise ActionError.new("'#{action}' is an invalid action.")
> +      end
> +
> +      # not sure if task is used as everything goes through condor
> +      #permissons check here
> +      @task = @instance.queue_action(@current_user, action)
> +      unless @task
> +        raise ActionError.new("#{action} cannot be performed on this 
> instance.")
> +      end
> +
> +      case action
> +        when 'stop'
> +          condormatic_instance_stop(@task)
> +        when 'destroy'
> +          condormatic_instance_destroy(@task)
> +        when 'start'
> +          condormatic_instance_create(@task)
> +        else
> +          raise ActionError.new("Sorry, action '#{action}' is currently not 
> supported by condor backend.")
> +      end
> +    end
> +
> +    flash[:notice] = "#[email protected]}: #{action} was successfully 
> queued."
> +    redirect_to :action => 'index'
> +  end
> +
> +  def delete
> +  end
> +
> +  def remove_failed
> +    action ='remove failed'
> +    raise ActionError.new("#{action} cannot be performed on this instance.") 
> unless
> +      @instance.state == Instance::STATE_ERROR
> +    condormatic_instance_reset_error(@instance)
> +    action
> +  end
> +
> +  private
> +
> +  def instance
> +    @instance = Instance.find(params[:id])
> +    require_privilege(Privilege::INSTANCE_VIEW, @instance.pool)
> +  end
> +
> +end
> diff --git a/src/app/helpers/instance_helper.rb 
> b/src/app/helpers/instance_helper.rb
> deleted file mode 100644
> index fea3cf4..0000000
> --- a/src/app/helpers/instance_helper.rb
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -#
> -# Copyright (C) 2009 Red Hat, Inc.
> -#
> -# This program is free software; you can redistribute it and/or modify
> -# it under the terms of the GNU General Public License as published by
> -# the Free Software Foundation; version 2 of the License.
> -#
> -# This program is distributed in the hope that it will be useful,
> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> -# GNU General Public License for more details.
> -#
> -# You should have received a copy of the GNU General Public License
> -# along with this program; if not, write to the Free Software
> -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> -# MA  02110-1301, USA.  A copy of the GNU General Public License is
> -# also available at http://www.gnu.org/copyleft/gpl.html.
> -
> -# Filters added to this controller apply to all controllers in the 
> application.
> -# Likewise, all the methods added will be available for all controllers.
> -
> -module InstanceHelper
> -  def owner_name(inst)
> -    return '' unless inst.owner
> -    # if last_name is set, use full name,
> -    # else use login
> -    if inst.owner.last_name.blank?
> -      inst.owner.login
> -    else
> -      "#{inst.owner.first_name} #{inst.owner.last_name}"
> -    end
> -  end
> -end
> diff --git a/src/app/helpers/instances_helper.rb 
> b/src/app/helpers/instances_helper.rb
> new file mode 100644
> index 0000000..740b01f
> --- /dev/null
> +++ b/src/app/helpers/instances_helper.rb
> @@ -0,0 +1,33 @@
> +#
> +# Copyright (C) 2009 Red Hat, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> +# MA  02110-1301, USA.  A copy of the GNU General Public License is
> +# also available at http://www.gnu.org/copyleft/gpl.html.
> +
> +# Filters added to this controller apply to all controllers in the 
> application.
> +# Likewise, all the methods added will be available for all controllers.
> +
> +module InstancesHelper
> +  def owner_name(inst)
> +    return '' unless inst.owner
> +    # if last_name is set, use full name,
> +    # else use login
> +    if inst.owner.last_name.blank?
> +      inst.owner.login
> +    else
> +      "#{inst.owner.first_name} #{inst.owner.last_name}"
> +    end
> +  end
> +end
> diff --git a/src/app/views/dashboard/summary.haml 
> b/src/app/views/dashboard/summary.haml
> index ff116d4..5eb49a5 100644
> --- a/src/app/views/dashboard/summary.haml
> +++ b/src/app/views/dashboard/summary.haml
> @@ -35,7 +35,7 @@
>         Add a Provider
>       %a{:href => url_for(:controller => "users", :action => "new")}
>         Create a User
> -      %a{:href => url_for(:controller => "instance", :action => "index")}
> +      %a{:href => url_for(:controller => "instances", :action => "index")}
>         View Instances
>     - else
>       %a{:href => url_for(:controller => "", :action => "")}
> diff --git a/src/app/views/instance/_instances.haml 
> b/src/app/views/instance/_instances.haml
> deleted file mode 100644
> index 5af1838..0000000
> --- a/src/app/views/instance/_instances.haml
> +++ /dev/null
> @@ -1,24 +0,0 @@
> -- columns = [                                                     |
> -  {:id => 'id', :header => ''},                                   |
> -  {:header => 'Actions'},                                         |
> -  {:id => 'name', :header => 'Name', :sortable => true},          |
> -  {:header => 'Details'},                                         |
> -  {:id => 'template', :header => 'Template'},                     |
> -  {:id => 'state', :sortable => true, :header => 'State'},        |
> -  {:id => 'time_last_running', :header => 'Time last running'},   |
> -]                                                                 |
> -
> -- opts = { :order => @order,
> -  :order_dir => @order_dir,
> -  :title => "Instances for #[email protected]}",
> -  :check_all => 'id' }
> -
> -= paginated_table('instances_table', columns, @instances, opts) do |rec|
> -  %tr{:class => "#{cycle('even', 'odd')}"}
> -    %td= check_box_tag 'ids[]', rec.id
> -    %td= rec.get_action_list.map {|action| link_to action, :controller => 
> "instance", :action => "instance_action", :id => rec, :instance_action => 
> action}.join(" | ")
> -    %td= rec.name
> -    %td Details
> -    %td= rec.template.name
> -    %td= rec.state
> -    %td= rec.time_last_running
> diff --git a/src/app/views/instance/configure.haml 
> b/src/app/views/instance/configure.haml
> deleted file mode 100644
> index 809c044..0000000
> --- a/src/app/views/instance/configure.haml
> +++ /dev/null
> @@ -1,23 +0,0 @@
> -%h2 Launch instance
> -- form_for @instance, :url => {:action => 'create'} do
> -  = hidden_field :instance, :template_id
> -  = hidden_field :instance, :pool_id
> -  %ul
> -    %li
> -      = label :instance, :name
> -      = text_field :instance, :name
> -    %li
> -      = label :instance, :template
> -      = text_field_tag :template_name, @instance.template ? 
> @instance.template.name : '', :disabled => true
> -    %li
> -      = label :instance, :pool
> -      = text_field_tag :pool_name, @instance.pool ? @instance.pool.name : 
> '', :disabled => true
> -    %li
> -      = label :instance, :hardware_profile
> -      = select :instance, :hardware_profile_id, @hardware_profiles.map {|p| 
> [ p.name, p.id ]}, { :include_blank => false }
> -    %li
> -      = label :instance, :realm
> -      = select :instance, :realm_id, @instance.pool.realms.map {|r| [ 
> r.name, r.id ]}, { :include_blank => true }
> -
> -  = submit_tag 'Cancel', :name => 'cancel'
> -  = submit_tag 'Launch', :name => 'launch'
> diff --git a/src/app/views/instance/create.haml 
> b/src/app/views/instance/create.haml
> deleted file mode 100644
> index 6fd9474..0000000
> --- a/src/app/views/instance/create.haml
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -%h1 Instance#create
> -%p Find me in app/views/instance/create.html.erb
> diff --git a/src/app/views/instance/delete.haml 
> b/src/app/views/instance/delete.haml
> deleted file mode 100644
> index 63de29b..0000000
> --- a/src/app/views/instance/delete.haml
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -%h1 Instance#delete
> -%p Find me in app/views/instance/delete.html.erb
> diff --git a/src/app/views/instance/index.haml 
> b/src/app/views/instance/index.haml
> deleted file mode 100644
> index 83690b7..0000000
> --- a/src/app/views/instance/index.haml
> +++ /dev/null
> @@ -1,127 +0,0 @@
> -- columns = [                                                     |
> -  {:name => '', :sortable => false},                              |
> -  {:name => 'STATUS', :sortable => false},                        |
> -  {:name => 'VM NAME', :sort_attr => 'name'},                     |
> -  {:name => 'TYPE', :sort_attr => 'hardware_profiles.name'},      |
> -  {:name => 'TEMPLATE', :sort_attr => 'templates.name'},          |
> -  {:name => 'PUBLIC ADDRESS', :sort_attr => 'public_addresses'},  |
> -  {:name => 'PROVIDER', :sortable => false},                      |
> -  {:name => 'CREATED BY', :sort_attr => 'users.last_name'},       |
> -]                                                                 |
> -
> -- pool_columns = [                                                           
>      |
> -  { :name => "Pool name", :sort_attr => :name },                             
>      |
> -  { :name => "Alerts", :sortable => false },                                 
>      |
> -  { :name => "Capacity", :sortable => false },                               
>      |
> -  { :name => "Zone", :sort_attr => "zones.name" }                            
>      |
> -]                                                                            
>      |
> -
> -
> -- form_tag(:action => 'instance_action') do
> -  .actionsidebar.grid_3
> -    %dl
> -      %dt Actions
> -      %dd
> -        %h5 Control Instances
> -        %ul
> -          %li.start.disabled
> -            %span
> -            = submit_tag "Start", :name => "start", :class => "icon", 
> :disabled => true
> -          %li.stop.disabled
> -            %span
> -            = submit_tag "Stop", :name => "stop", :class => "icon", 
> :disabled => true
> -          %li.restart.disabled
> -            %span
> -            = submit_tag "Restart", :name => "restart", :class => "icon", 
> :disabled => true
> -          %li.shutdown
> -            %span
> -            = submit_tag "Shutdown", :name => "shutdown", :class => "icon"
> -          %li.console.disabled
> -            %span
> -            = submit_tag "Console Access", :name => "console_access", :class 
> => "icon", :disabled => true
> -          %li.VD.disabled
> -            %span
> -            = submit_tag "Virtual Desktop", :name => "vd", :class => "icon", 
> :disabled => true
> -          %li.delete
> -            %span
> -            = submit_tag "Remove Failed", :name => "remove_failed", :class 
> => "icon"
> -      %dd
> -        %h5 Manage Instances
> -        %ul
> -          %li.snapshot.disabled
> -            %span
> -            = submit_tag "Create Snapshot", :name => "snapshot", :class => 
> "icon", :disabled => true
> -          %li.grantaccess.disabled
> -            %span
> -            = submit_tag "Grant Access", :name => "grantaccess", :class => 
> "icon", :disabled => true
> -          %li.info
> -            %span
> -            = submit_tag "Instance Details", :name => "instance_details", 
> :class => "icon"
> -          %li.request_help.disabled
> -            %span
> -            = submit_tag "Request Help", :name => "request_help", :class => 
> "icon", :disabled => true
> -
> -  .grid_5
> -    %h2 My Quota
> -    %table
> -      %thead
> -        %tr
> -          %th % Quota Used
> -          %th
> -            Quota
> -            %span.small (Instances)
> -      %tbody
> -        %tr
> -          - quota = current_user.quota.maximum_running_instances
> -          %td
> -            - if quota.respond_to? '>' and quota > 0
> -              = "%.2f" % ((current_user.quota.running_instances / 
> quota.to_f) * 100)
> -            - else
> -              = 0
> -          %td
> -            = quota or "unlimited"
> -  .grid_8
> -    %h2 Pool Status
> -    %table
> -      =sortable_table_header pool_columns
> -      - @pools.each do |pool|
> -        %tr
> -          %td
> -            = pool.name
> -          %td N/A
> -          %td.capacity
> -            %span.good
> -          %td
> -            =pool.zone.name
> -  .grid_13
> -    %h2 Instances by Pool
> -    - @pools.each do |pool|
> -      .grid_6.alpha.poolname
> -        %h4= pool.name
> -        = link_to image_tag("blnk.png", :border=>0) + "Launch Instance", 
> {:controller => "instance", :action => "new", 'instance[pool_id]' => 
> pool.id}, :class => "button iconbutton fr"
> -
> -      .grid_4.poolfilter
> -        %input{:type => "radio", :id => "all_" + pool.id.to_s, :name => 
> "filter_" + pool.id.to_s}
> -        %label{:for => "all_" + pool.id.to_s} Show All
> -        %input{:type => "radio", :id => "summary_" + pool.id.to_s, :name => 
> "filter_" + pool.id.to_s}
> -        %label{:for => "summary_" + pool.id.to_s} Summary View
> -      .search.grid_3.omega
> -        %input{:type => "search", :placeholder => "Search Instance"}
> -        %button.action Search
> -      %table.gap
> -        = sortable_table_header(columns)
> -        %tbody
> -          - if not instances = @sorted_instances_by_pool[pool.id] or 
> instances.empty?
> -            %tr
> -              %td{:colspan => 8} No Instances
> -          - else
> -            - instances.each do |inst|
> -              %tr
> -                %td= radio_button_tag 'id[]', inst.id
> -                %td= inst.state
> -                %td= inst.name
> -                %td= inst.hardware_profile.name
> -                %td= inst.template.name
> -                %td= inst.public_addresses
> -                %td= inst.cloud_account ? inst.cloud_account.provider.name : 
> ''
> -                %td= owner_name(inst)
> diff --git a/src/app/views/instance/new.haml b/src/app/views/instance/new.haml
> deleted file mode 100644
> index 8038a2b..0000000
> --- a/src/app/views/instance/new.haml
> +++ /dev/null
> @@ -1,19 +0,0 @@
> -%h3 Show Templates
> -%hr
> -%ul
> -  - @templates.each do |tpl|
> -    %li
> -      - form_tag(:action => 'configure') do
> -        = hidden_field :instance, :template_id, :value => tpl.id
> -        = hidden_field :instance, :pool_id, :value => @instance.pool.id
> -        = image_tag "platform_#{tpl.platform}.png", :size => "32x32", :alt 
> => tpl.platform
> -        %h3= tpl.name
> -        %p= tpl.summary
> -        %p
> -          %label Group:
> -          System
> -          %label Version:
> -          2.5
> -        = submit_tag 'Launch', :name => 'launch'
> -= will_paginate(@templates)
> -= page_entries_info(@templates)
> diff --git a/src/app/views/instance/show.haml 
> b/src/app/views/instance/show.haml
> deleted file mode 100644
> index cb34dde..0000000
> --- a/src/app/views/instance/show.haml
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -%h2 Instance Details
> -- form_tag(:action => 'index') do
> -  %ul
> -    %li
> -      = label_tag :name, 'Name'
> -      %span= @instance.name
> -    %li
> -      = label_tag :status, 'Status'
> -      %span= @instance.state
> -    %li
> -      = label_tag :public_addresses, 'Public Addresses'
> -      %span= @instance.public_addresses
> -    %li
> -      = label_tag :private_addresses, 'Private Addresses'
> -      %span= @instance.private_addresses
> -    %li
> -      = label_tag :operating_system, 'Operating system'
> -      %span= "#[email protected]} 
> #[email protected]_version}"
> -    %li
> -      = label_tag :provider, 'Provider'
> -      %span= @instance.cloud_account.provider.name if @instance.cloud_account
> -    %li
> -      = label_tag :base_template, 'Base Template'
> -      %span= @instance.template.name
> -    %li
> -      = label_tag :architecture, 'Architecture'
> -      %span= @instance.hardware_profile.architecture.value
> -    %li
> -      = label_tag :memory, 'Memory'
> -      %span= @instance.hardware_profile.memory.value
> -    %li
> -      = label_tag :storage, 'Storage'
> -      %span= @instance.hardware_profile.storage.value
> -    %li
> -      = label_tag :instantiation_time, 'Instantiation Time'
> -      %span= @instance.created_at.strftime("%d-%b-%Y %H:%M:%S")
> -    %li
> -      = label_tag :uptime, 'Uptime'
> -      %span= @instance.total_state_time(@instance.state)
> -    %li
> -      = label_tag :current_alerts, 'Current Alerts'
> -      %span= 0
> -    %li
> -      = label_tag :console_connection, 'Console Connection'
> -      %span= 'via SSH'
> -    - unless @instance.instance_key_id.nil?
> -      %li
> -        = label_tag :instance_key, 'SSH key'
> -        %span= link_to("Download", { :controller => "instance", :action => 
> "key", :id => @instance })
> -    %li
> -      = label_tag :owner, 'Owner'
> -      %span= "#[email protected]_name} #[email protected]_name}"
> -    %li
> -      = label_tag :shared_to, 'Shared to'
> -      %span= "N/A"
> -    - if @instance.state == Instance::STATE_ERROR
> -      %li
> -        = label_tag :error, 'Error'
> -        %span= @instance.last_error
> -
> -  = submit_tag 'Back', :name => 'back'
> diff --git a/src/app/views/instances/_instances.haml 
> b/src/app/views/instances/_instances.haml
> new file mode 100644
> index 0000000..5dbca9f
> --- /dev/null
> +++ b/src/app/views/instances/_instances.haml
> @@ -0,0 +1,24 @@
> +- columns = [                                                     |
> +  {:id => 'id', :header => ''},                                   |
> +  {:header => 'Actions'},                                         |
> +  {:id => 'name', :header => 'Name', :sortable => true},          |
> +  {:header => 'Details'},                                         |
> +  {:id => 'template', :header => 'Template'},                     |
> +  {:id => 'state', :sortable => true, :header => 'State'},        |
> +  {:id => 'time_last_running', :header => 'Time last running'},   |
> +]                                                                 |
> +
> +- opts = { :order => @order,
> +  :order_dir => @order_dir,
> +  :title => "Instances for #[email protected]}",
> +  :check_all => 'id' }
> +
> += paginated_table('instances_table', columns, @instances, opts) do |rec|
> +  %tr{:class => "#{cycle('even', 'odd')}"}
> +    %td= check_box_tag 'ids[]', rec.id
> +    %td= rec.get_action_list.map {|action| link_to action, :controller => 
> "instances", :action => "instance_action", :id => rec, :instance_action => 
> action}.join(" | ")
> +    %td= rec.name
> +    %td Details
> +    %td= rec.template.name
> +    %td= rec.state
> +    %td= rec.time_last_running
> diff --git a/src/app/views/instances/configure.haml 
> b/src/app/views/instances/configure.haml
> new file mode 100644
> index 0000000..809c044
> --- /dev/null
> +++ b/src/app/views/instances/configure.haml
> @@ -0,0 +1,23 @@
> +%h2 Launch instance
> +- form_for @instance, :url => {:action => 'create'} do
> +  = hidden_field :instance, :template_id
> +  = hidden_field :instance, :pool_id
> +  %ul
> +    %li
> +      = label :instance, :name
> +      = text_field :instance, :name
> +    %li
> +      = label :instance, :template
> +      = text_field_tag :template_name, @instance.template ? 
> @instance.template.name : '', :disabled => true
> +    %li
> +      = label :instance, :pool
> +      = text_field_tag :pool_name, @instance.pool ? @instance.pool.name : 
> '', :disabled => true
> +    %li
> +      = label :instance, :hardware_profile
> +      = select :instance, :hardware_profile_id, @hardware_profiles.map {|p| 
> [ p.name, p.id ]}, { :include_blank => false }
> +    %li
> +      = label :instance, :realm
> +      = select :instance, :realm_id, @instance.pool.realms.map {|r| [ 
> r.name, r.id ]}, { :include_blank => true }
> +
> +  = submit_tag 'Cancel', :name => 'cancel'
> +  = submit_tag 'Launch', :name => 'launch'
> diff --git a/src/app/views/instances/create.haml 
> b/src/app/views/instances/create.haml
> new file mode 100644
> index 0000000..6fd9474
> --- /dev/null
> +++ b/src/app/views/instances/create.haml
> @@ -0,0 +1,2 @@
> +%h1 Instance#create
> +%p Find me in app/views/instance/create.html.erb
> diff --git a/src/app/views/instances/delete.haml 
> b/src/app/views/instances/delete.haml
> new file mode 100644
> index 0000000..63de29b
> --- /dev/null
> +++ b/src/app/views/instances/delete.haml
> @@ -0,0 +1,2 @@
> +%h1 Instance#delete
> +%p Find me in app/views/instance/delete.html.erb
> diff --git a/src/app/views/instances/index.haml 
> b/src/app/views/instances/index.haml
> new file mode 100644
> index 0000000..9c2efb8
> --- /dev/null
> +++ b/src/app/views/instances/index.haml
> @@ -0,0 +1,127 @@
> +- columns = [                                                     |
> +  {:name => '', :sortable => false},                              |
> +  {:name => 'STATUS', :sortable => false},                        |
> +  {:name => 'VM NAME', :sort_attr => 'name'},                     |
> +  {:name => 'TYPE', :sort_attr => 'hardware_profiles.name'},      |
> +  {:name => 'TEMPLATE', :sort_attr => 'templates.name'},          |
> +  {:name => 'PUBLIC ADDRESS', :sort_attr => 'public_addresses'},  |
> +  {:name => 'PROVIDER', :sortable => false},                      |
> +  {:name => 'CREATED BY', :sort_attr => 'users.last_name'},       |
> +]                                                                 |
> +
> +- pool_columns = [                                                           
>      |
> +  { :name => "Pool name", :sort_attr => :name },                             
>      |
> +  { :name => "Alerts", :sortable => false },                                 
>      |
> +  { :name => "Capacity", :sortable => false },                               
>      |
> +  { :name => "Zone", :sort_attr => "zones.name" }                            
>      |
> +]                                                                            
>      |
> +
> +
> +- form_tag(:action => 'instance_action') do
> +  .actionsidebar.grid_3
> +    %dl
> +      %dt Actions
> +      %dd
> +        %h5 Control Instances
> +        %ul
> +          %li.start.disabled
> +            %span
> +            = submit_tag "Start", :name => "start", :class => "icon", 
> :disabled => true
> +          %li.stop.disabled
> +            %span
> +            = submit_tag "Stop", :name => "stop", :class => "icon", 
> :disabled => true
> +          %li.restart.disabled
> +            %span
> +            = submit_tag "Restart", :name => "restart", :class => "icon", 
> :disabled => true
> +          %li.shutdown
> +            %span
> +            = submit_tag "Shutdown", :name => "shutdown", :class => "icon"
> +          %li.console.disabled
> +            %span
> +            = submit_tag "Console Access", :name => "console_access", :class 
> => "icon", :disabled => true
> +          %li.VD.disabled
> +            %span
> +            = submit_tag "Virtual Desktop", :name => "vd", :class => "icon", 
> :disabled => true
> +          %li.delete
> +            %span
> +            = submit_tag "Remove Failed", :name => "remove_failed", :class 
> => "icon"
> +      %dd
> +        %h5 Manage Instances
> +        %ul
> +          %li.snapshot.disabled
> +            %span
> +            = submit_tag "Create Snapshot", :name => "snapshot", :class => 
> "icon", :disabled => true
> +          %li.grantaccess.disabled
> +            %span
> +            = submit_tag "Grant Access", :name => "grantaccess", :class => 
> "icon", :disabled => true
> +          %li.info
> +            %span
> +            = submit_tag "Instance Details", :name => "instance_details", 
> :class => "icon"
> +          %li.request_help.disabled
> +            %span
> +            = submit_tag "Request Help", :name => "request_help", :class => 
> "icon", :disabled => true
> +
> +  .grid_5
> +    %h2 My Quota
> +    %table
> +      %thead
> +        %tr
> +          %th % Quota Used
> +          %th
> +            Quota
> +            %span.small (Instances)
> +      %tbody
> +        %tr
> +          - quota = current_user.quota.maximum_running_instances
> +          %td
> +            - if quota.respond_to? '>' and quota > 0
> +              = "%.2f" % ((current_user.quota.running_instances / 
> quota.to_f) * 100)
> +            - else
> +              = 0
> +          %td
> +            = quota or "unlimited"
> +  .grid_8
> +    %h2 Pool Status
> +    %table
> +      =sortable_table_header pool_columns
> +      - @pools.each do |pool|
> +        %tr
> +          %td
> +            = pool.name
> +          %td N/A
> +          %td.capacity
> +            %span.good
> +          %td
> +            =pool.zone.name
> +  .grid_13
> +    %h2 Instances by Pool
> +    - @pools.each do |pool|
> +      .grid_6.alpha.poolname
> +        %h4= pool.name
> +        = link_to image_tag("blnk.png", :border=>0) + "Launch Instance", 
> {:controller => "instances", :action => "new", 'instance[pool_id]' => 
> pool.id}, :class => "button iconbutton fr"
> +
> +      .grid_4.poolfilter
> +        %input{:type => "radio", :id => "all_" + pool.id.to_s, :name => 
> "filter_" + pool.id.to_s}
> +        %label{:for => "all_" + pool.id.to_s} Show All
> +        %input{:type => "radio", :id => "summary_" + pool.id.to_s, :name => 
> "filter_" + pool.id.to_s}
> +        %label{:for => "summary_" + pool.id.to_s} Summary View
> +      .search.grid_3.omega
> +        %input{:type => "search", :placeholder => "Search Instance"}
> +        %button.action Search
> +      %table.gap
> +        = sortable_table_header(columns)
> +        %tbody
> +          - if not instances = @sorted_instances_by_pool[pool.id] or 
> instances.empty?
> +            %tr
> +              %td{:colspan => 8} No Instances
> +          - else
> +            - instances.each do |inst|
> +              %tr
> +                %td= radio_button_tag 'id[]', inst.id
> +                %td= inst.state
> +                %td= inst.name
> +                %td= inst.hardware_profile.name
> +                %td= inst.template.name
> +                %td= inst.public_addresses
> +                %td= inst.cloud_account ? inst.cloud_account.provider.name : 
> ''
> +                %td= owner_name(inst)
> diff --git a/src/app/views/instances/new.haml 
> b/src/app/views/instances/new.haml
> new file mode 100644
> index 0000000..8038a2b
> --- /dev/null
> +++ b/src/app/views/instances/new.haml
> @@ -0,0 +1,19 @@
> +%h3 Show Templates
> +%hr
> +%ul
> +  - @templates.each do |tpl|
> +    %li
> +      - form_tag(:action => 'configure') do
> +        = hidden_field :instance, :template_id, :value => tpl.id
> +        = hidden_field :instance, :pool_id, :value => @instance.pool.id
> +        = image_tag "platform_#{tpl.platform}.png", :size => "32x32", :alt 
> => tpl.platform
> +        %h3= tpl.name
> +        %p= tpl.summary
> +        %p
> +          %label Group:
> +          System
> +          %label Version:
> +          2.5
> +        = submit_tag 'Launch', :name => 'launch'
> += will_paginate(@templates)
> += page_entries_info(@templates)
> diff --git a/src/app/views/instances/show.haml 
> b/src/app/views/instances/show.haml
> new file mode 100644
> index 0000000..33b2897
> --- /dev/null
> +++ b/src/app/views/instances/show.haml
> @@ -0,0 +1,61 @@
> +%h2 Instance Details
> +- form_tag(:action => 'index') do
> +  %ul
> +    %li
> +      = label_tag :name, 'Name'
> +      %span= @instance.name
> +    %li
> +      = label_tag :status, 'Status'
> +      %span= @instance.state
> +    %li
> +      = label_tag :public_addresses, 'Public Addresses'
> +      %span= @instance.public_addresses
> +    %li
> +      = label_tag :private_addresses, 'Private Addresses'
> +      %span= @instance.private_addresses
> +    %li
> +      = label_tag :operating_system, 'Operating system'
> +      %span= "#[email protected]} 
> #[email protected]_version}"
> +    %li
> +      = label_tag :provider, 'Provider'
> +      %span= @instance.cloud_account.provider.name if @instance.cloud_account
> +    %li
> +      = label_tag :base_template, 'Base Template'
> +      %span= @instance.template.name
> +    %li
> +      = label_tag :architecture, 'Architecture'
> +      %span= @instance.hardware_profile.architecture.value
> +    %li
> +      = label_tag :memory, 'Memory'
> +      %span= @instance.hardware_profile.memory.value
> +    %li
> +      = label_tag :storage, 'Storage'
> +      %span= @instance.hardware_profile.storage.value
> +    %li
> +      = label_tag :instantiation_time, 'Instantiation Time'
> +      %span= @instance.created_at.strftime("%d-%b-%Y %H:%M:%S")
> +    %li
> +      = label_tag :uptime, 'Uptime'
> +      %span= @instance.total_state_time(@instance.state)
> +    %li
> +      = label_tag :current_alerts, 'Current Alerts'
> +      %span= 0
> +    %li
> +      = label_tag :console_connection, 'Console Connection'
> +      %span= 'via SSH'
> +    - unless @instance.instance_key_id.nil?
> +      %li
> +        = label_tag :instance_key, 'SSH key'
> +        %span= link_to("Download", { :controller => "instances", :action => 
> "key", :id => @instance })
> +    %li
> +      = label_tag :owner, 'Owner'
> +      %span= "#[email protected]_name} #[email protected]_name}"
> +    %li
> +      = label_tag :shared_to, 'Shared to'
> +      %span= "N/A"
> +    - if @instance.state == Instance::STATE_ERROR
> +      %li
> +        = label_tag :error, 'Error'
> +        %span= @instance.last_error
> +
> +  = submit_tag 'Back', :name => 'back'
> diff --git a/src/app/views/pools/list.haml b/src/app/views/pools/list.haml
> index 2014ed9..675891d 100644
> --- a/src/app/views/pools/list.haml
> +++ b/src/app/views/pools/list.haml
> @@ -1,3 +1,3 @@
> = render :partial => "instance/instances"
> 
> -= link_to "Add a new instance", {:controller => "instance", :action => 
> "new", "instance[pool_id]" => @pool}, :class=>"actionlink"
> += link_to "Add a new instance", {:controller => "instances", :action => 
> "new", "instance[pool_id]" => @pool}, :class=>"actionlink"
> diff --git a/src/config/navigation.rb b/src/config/navigation.rb
> index fbc4fab..c29b9c9 100644
> --- a/src/config/navigation.rb
> +++ b/src/config/navigation.rb
> @@ -37,7 +37,7 @@ SimpleNavigation::Configuration.run do |navigation|
>       second_level.item :images, t(:images), '#', :class => 'disabled'
>     end
>     first_level.item :runtime, t(:runtime), '#', :class => 'runtime' do 
> |second_level|
> -      second_level.item :instance_management, t(:instance_management), 
> :controller => 'instance'
> +      second_level.item :instance_management, t(:instance_management), 
> :controller => 'instances'
>     end
>     first_level.item :help, t(:help), '#', :id => 'help', :class => "disabled"
>   end
> diff --git a/src/config/routes.rb b/src/config/routes.rb
> index d736b93..8afbb6a 100644
> --- a/src/config/routes.rb
> +++ b/src/config/routes.rb
> @@ -45,7 +45,7 @@ ActionController::Routing::Routes.draw do |map|
>   map.resources :users
> 
>   map.dashboard '/dashboard', :controller => 'dashboard'
> -  map.instance '/instance', :controller => 'instance'
> +  map.instance '/instances', :controller => 'instances'
>   map.templates '/templates', :controller => 'templates'
>   map.settings '/settings', :controller => 'settings'
>   map.root  :dashboard
> diff --git a/src/features/step_definitions/instance.rb 
> b/src/features/step_definitions/instance.rb
> index 725f75c..a708fd1 100644
> --- a/src/features/step_definitions/instance.rb
> +++ b/src/features/step_definitions/instance.rb
> @@ -15,17 +15,17 @@ Given /^a mock pending instance exists$/ do
> end
> 
> Given /^I am viewing the mock instance detail$/ do
> -  visit url_for :action => 'show', :controller => 'instance',
> +  visit url_for :action => 'show', :controller => 'instances',
>     :id => mock_instance
> end
> 
> When /^I am viewing the pending instance detail$/ do
> -  visit url_for :action => 'show', :controller => 'instance',
> +  visit url_for :action => 'show', :controller => 'instances',
>     :id => pending_instance
> end
> 
> When /^I manually go to the key action for this instance$/ do
> -   visit url_for :action => 'key', :controller => 'instance',
> +   visit url_for :action => 'key', :controller => 'instances',
>     :id => pending_instance
> end
> 
> @@ -36,4 +36,4 @@ end
> Then /^I should see the Save dialog for a (.+) file$/ do |filetype|
>   response.headers["Content-Disposition"].should
>   match(/^attachment;\sfilename=.*#{filetype}$/)
> -end
> \ No newline at end of file
> +end
> diff --git a/src/spec/controllers/instance_controller_spec.rb 
> b/src/spec/controllers/instance_controller_spec.rb
> index 3df886a..241c05b 100644
> --- a/src/spec/controllers/instance_controller_spec.rb
> +++ b/src/spec/controllers/instance_controller_spec.rb
> @@ -1,6 +1,6 @@
> require 'spec_helper'
> 
> -describe InstanceController do
> +describe InstancesController do
>   fixtures :all
>   before(:each) do
>     @admin_permission = Factory :admin_permission
> -- 
> 1.7.2.3
> 
> _______________________________________________
> deltacloud-devel mailing list
> [email protected]
> https://fedorahosted.org/mailman/listinfo/deltacloud-devel

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

Reply via email to