From: Tomas Sedovic <[email protected]>

---
 .../admin/provider_accounts_controller.rb          |  126 ++++++++++++++++++++
 src/app/controllers/cloud_accounts_controller.rb   |    4 +-
 .../admin/provider_accounts/_credentials.haml      |    3 +
 src/app/views/admin/provider_accounts/_form.haml   |   52 ++++++++
 .../views/admin/provider_accounts/_history.haml    |    3 +
 src/app/views/admin/provider_accounts/_list.haml   |   18 +++
 .../admin/provider_accounts/_permissions.haml      |    3 +
 .../views/admin/provider_accounts/_properties.haml |    5 +
 src/app/views/admin/provider_accounts/edit.haml    |   13 ++
 src/app/views/admin/provider_accounts/index.haml   |    3 +-
 src/app/views/admin/provider_accounts/new.haml     |   16 +++
 src/app/views/admin/provider_accounts/show.haml    |    5 +
 src/config/routes.rb                               |    3 +-
 13 files changed, 250 insertions(+), 4 deletions(-)
 create mode 100644 src/app/views/admin/provider_accounts/_credentials.haml
 create mode 100644 src/app/views/admin/provider_accounts/_form.haml
 create mode 100644 src/app/views/admin/provider_accounts/_history.haml
 create mode 100644 src/app/views/admin/provider_accounts/_list.haml
 create mode 100644 src/app/views/admin/provider_accounts/_permissions.haml
 create mode 100644 src/app/views/admin/provider_accounts/_properties.haml
 create mode 100644 src/app/views/admin/provider_accounts/edit.haml
 create mode 100644 src/app/views/admin/provider_accounts/new.haml
 create mode 100644 src/app/views/admin/provider_accounts/show.haml

diff --git a/src/app/controllers/admin/provider_accounts_controller.rb 
b/src/app/controllers/admin/provider_accounts_controller.rb
index dda74ae..25ed002 100644
--- a/src/app/controllers/admin/provider_accounts_controller.rb
+++ b/src/app/controllers/admin/provider_accounts_controller.rb
@@ -1,6 +1,132 @@
 class Admin::ProviderAccountsController < ApplicationController
   before_filter :require_user
+  before_filter :load_accounts, :only => [:index, :show]
 
   def index
   end
+
+  def show
+    @tab_captions = ['Properties', 'Credentials', 'History', 'Permissions']
+    @account = CloudAccount.find(params[:id])
+    @details_tab = params[:details_tab].blank? ? 'properties' : 
params[:details_tab]
+
+    if params.delete :test_account
+      test_account(@account)
+      render :action => 'show' and return
+    end
+
+    respond_to do |format|
+      format.js do
+        if @url_params.delete :details_pane
+          render :partial => 'layouts/details_pane' and return
+        end
+        render :partial => @details_tab and return
+      end
+      format.html { render :action => 'show'}
+    end
+  end
+
+  def new
+    @cloud_account = CloudAccount.new
+    @quota = Quota.new
+    @providers = Provider.all
+  end
+
+  def create
+    @provider = Provider.find(params[:provider_id])
+    require_privilege(Privilege::ACCOUNT_MODIFY, @provider)
+
+    @providers = Provider.all
+    @cloud_account = CloudAccount.new(params[:cloud_account])
+    @cloud_account.provider = @provider
+    @cloud_account.quota = @quota = Quota.new
+
+    if params.delete :test_account
+      test_account(@cloud_account)
+      render :action => 'new' and return
+    end
+
+    limit = params[:quota][:maximum_running_instances] if params[:quota]
+    @cloud_account.quota.set_maximum_running_instances(limit)
+
+    if @cloud_account.invalid?
+      if not @cloud_account.valid_credentials?
+        flash.now[:error] = "The entered credential information is incorrect"
+      elsif @cloud_account.errors.on(:username)
+        flash.now[:error] = "The access key 
'#{params[:cloud_account][:username]}' has already been taken."
+      else
+        flash.now[:error] = "You must fill in all the required fields"
+      end
+      render :action => 'new' and return
+    end
+
+    @cloud_account.zones << Zone.default
+    @cloud_account.save!
+    if @cloud_account.populate_realms
+      flash[:notice] = "Provider account added."
+    end
+    redirect_to admin_provider_account_path(@cloud_account)
+    kick_condor
+  end
+
+  def edit
+    @cloud_account = CloudAccount.find(params[:id])
+    @quota = @cloud_account.quota
+    @provider = @cloud_account.provider
+    require_privilege(Privilege::ACCOUNT_MODIFY,@provider)
+  end
+
+  def update
+    @cloud_account = CloudAccount.find(params[:id])
+    @provider = @cloud_account.provider
+    require_privilege(Privilege::ACCOUNT_MODIFY, @provider)
+    @quota = @cloud_account.quota
+
+    if params.delete :test_account
+      test_account(@cloud_account)
+      render :action => 'new' and return
+    end
+
+    limit = params[:quota][:maximum_running_instances] if params[:quota]
+    @cloud_account.quota.set_maximum_running_instances(limit)
+    if @cloud_account.update_attributes(params[:cloud_account])
+      flash[:notice] = "Cloud Account updated!"
+      redirect_to admin_provider_account_path(@cloud_account)
+    else
+      render :action => :edit
+    end
+  end
+
+  def multi_destroy
+    if (not params[:accounts_selected]) or (params[:accounts_selected].length 
== 0)
+      flash[:notice] = "You must select some accounts first."
+    else
+      CloudAccount.destroy(params[:accounts_selected])
+    end
+    redirect_to admin_provider_accounts_url
+  end
+
+  protected
+
+  def test_account(account)
+    if account.valid_credentials?
+      flash.now[:notice] = "Test Connection Success: Valid Account Details"
+    else
+      flash.now[:error] = "Test Connection Failed: Invalid Account Details"
+    end
+  rescue
+    flash.now[:error] = "Test Connection Failed: Could not connect to provider"
+  end
+
+  def load_accounts
+    @header = [
+      { :name => "Name", :sort_attr => :name },
+      { :name => "Username", :sort_attr => :username},
+    ]
+    @accounts = CloudAccount.paginate(:all,
+      :page => params[:page] || 1,
+      :order => (params[:order_field] || 'label') +' '+ (params[:order_dir] || 
'asc')
+    )
+    @url_params = params
+  end
 end
diff --git a/src/app/controllers/cloud_accounts_controller.rb 
b/src/app/controllers/cloud_accounts_controller.rb
index ae0a224..d21d532 100644
--- a/src/app/controllers/cloud_accounts_controller.rb
+++ b/src/app/controllers/cloud_accounts_controller.rb
@@ -48,9 +48,9 @@ class CloudAccountsController < ApplicationController
     @cloud_account.provider = @provider
     @cloud_account.quota = @quota = Quota.new
 
-    if params[:test_account]
+    if params.delete :test_account
       test_account(@cloud_account)
-      render :action => 'new' and return
+      redirect_to admin_provider_account_path(@cloud_account) and return
     end
 
     limit = params[:quota][:maximum_running_instances] if params[:quota]
diff --git a/src/app/views/admin/provider_accounts/_credentials.haml 
b/src/app/views/admin/provider_accounts/_credentials.haml
new file mode 100644
index 0000000..9d31c8d
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/_credentials.haml
@@ -0,0 +1,3 @@
+%h3
+  Credentials for
+  = @account.name
diff --git a/src/app/views/admin/provider_accounts/_form.haml 
b/src/app/views/admin/provider_accounts/_form.haml
new file mode 100644
index 0000000..853d348
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/_form.haml
@@ -0,0 +1,52 @@
+= error_messages_for 'cloud_account'
+%fieldset.clearfix.nomargin
+  %label.grid_4.la.alpha
+    = t('cloud_accounts.form.account_name')
+    %span.required *
+  %label.grid_3.la
+    = t('cloud_accounts.form.user_name')
+    %span.required *
+  %label.grid_3.la
+    = t('cloud_accounts.form.password')
+    %span.required *
+  %label.grid_3.la.omega
+    = t('cloud_accounts.form.quota_instances')
+    %span.required *
+%fieldset.nomargin.clearfix
+  = f.text_field :label, :title => t('cloud_accounts.form.account_name'), 
:class => "grid_4 alpha"
+  = f.text_field :username, :title => t('cloud_accounts.form.user_name'), 
:class => "grid_3"
+  = f.password_field :password, :title => t('cloud_accounts.form.password'), 
:class => "grid_3"
+  = text_field "quota", :maximum_running_instances, :title => 
t('cloud_accounts.form.quota_instances'), :value => 
@quota.maximum_running_instances || "unlimited", :id => "quota_instances", 
:class => "grid_3 omega"
+%fieldset.nomargin.clearfix
+  .grid_3.prefix_10.alpha.omega
+    (
+    %button.linkbutton.nospace{ :type => 'button', :onclick => 
"set_unlimited_quota(\"quota_instances\");" }<>
+      = t('cloud_accounts.form.unlimited_quota')
+    )
+%fieldset.clearfix.nomargin
+  %label.grid_4.la.alpha
+    = t('cloud_accounts.form.account_number')
+    %span.required *
+  %label.grid_3.la
+    = t('cloud_accounts.form.account_private_cert')
+    %span.required *
+  %label.grid_3.la
+    = t('cloud_accounts.form.account_public_cert')
+    %span.required *
+  .grid_3.omega
+%fieldset.clearfix.nomargin
+  = f.text_field :account_number, :title => 
t('cloud_accounts.form.account_number'), :class => "grid_4 alpha"
+  .grid_3
+    = f.file_field :x509_cert_priv_file, :title => 
t('cloud_accounts.form.account_private_cert')
+  .grid_3
+    = f.file_field :x509_cert_pub_file, :title => 
t('cloud_accounts.form.account_public_cert')
+  .grid_3.omega
+    (
+    %button.linkbutton.nospace{ :type => 'submit', :value => 
t('cloud_accounts.form.test_account'), :name => 'test_account', :id => 
'test_account' }<>
+      = t('cloud_accounts.form.test_account')
+    )
+
+:javascript
+  function set_unlimited_quota(elem_id) {
+    $("#" + elem_id)[0].value = "unlimited";
+  }
diff --git a/src/app/views/admin/provider_accounts/_history.haml 
b/src/app/views/admin/provider_accounts/_history.haml
new file mode 100644
index 0000000..429320a
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/_history.haml
@@ -0,0 +1,3 @@
+%h3
+  History for
+  = @account.name
diff --git a/src/app/views/admin/provider_accounts/_list.haml 
b/src/app/views/admin/provider_accounts/_list.haml
new file mode 100644
index 0000000..17c982f
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/_list.haml
@@ -0,0 +1,18 @@
+- form_tag do
+  = link_to "New Account", new_admin_provider_account_path, :class => 'button'
+  = restful_submit_tag "Delete", "delete", 
multi_destroy_admin_provider_accounts_path, 'DELETE'
+  %p
+    Select:&nbsp;
+    = link_to "All", @url_params.merge(:select => 'all')
+    %span> ,&nbsp;
+    = link_to "None", @url_params.merge(:select => 'none')
+  %table
+    = sortable_table_header @header
+    - @accounts.each do |account|
+      %tr
+        %td
+          - selected = @url_params[:select] == 'all'
+          %input{:name => 'accounts_selected[]', :type => 'checkbox', :value 
=> account.id, :id => "account_checkbox_#{account.id}", :checked => selected }
+          = link_to account.name, admin_provider_account_path(account)
+        %td
+          =account.username
diff --git a/src/app/views/admin/provider_accounts/_permissions.haml 
b/src/app/views/admin/provider_accounts/_permissions.haml
new file mode 100644
index 0000000..92ad7a5
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/_permissions.haml
@@ -0,0 +1,3 @@
+%h3
+  Permissions for
+  = @account.name
diff --git a/src/app/views/admin/provider_accounts/_properties.haml 
b/src/app/views/admin/provider_accounts/_properties.haml
new file mode 100644
index 0000000..6371968
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/_properties.haml
@@ -0,0 +1,5 @@
+%h3
+  Properties for
+  = @account.name
+= link_to "Edit", edit_admin_provider_account_path(@account), { :class => 
'button' }
+= link_to "Test", admin_provider_account_path(@account, {:test_account => 
true}), { :class => 'button' }
diff --git a/src/app/views/admin/provider_accounts/edit.haml 
b/src/app/views/admin/provider_accounts/edit.haml
new file mode 100644
index 0000000..9a55d84
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/edit.haml
@@ -0,0 +1,13 @@
+#details.grid_13
+  %h2
+    = t('cloud_accounts.edit.edit_provider_account')
+  - form_for @cloud_account, :url => admin_provider_account_path, :html => { 
:method => :put, :multipart => true } do |f|
+    = render :partial => 'form', :locals => { :f => f }
+    %fieldset.clearfix
+      .grid_13.alpha.omega
+        = submit_tag t(:edit), :class => "ra nomargin dialogbutton"
+    %section
+      %p.requirement
+        %span.required *
+        \-
+        = t('cloud_accounts.edit.required_field')
diff --git a/src/app/views/admin/provider_accounts/index.haml 
b/src/app/views/admin/provider_accounts/index.haml
index 72c0ee2..62ccbc6 100644
--- a/src/app/views/admin/provider_accounts/index.haml
+++ b/src/app/views/admin/provider_accounts/index.haml
@@ -1 +1,2 @@
-admin/provider_accounts/index.haml
+- content_for :list do
+  = render :partial => 'list'
diff --git a/src/app/views/admin/provider_accounts/new.haml 
b/src/app/views/admin/provider_accounts/new.haml
new file mode 100644
index 0000000..e567bce
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/new.haml
@@ -0,0 +1,16 @@
+#details.grid_13
+  %h2
+    = t('cloud_accounts.new.new_provider_account')
+  - form_for @cloud_account, :url => admin_provider_accounts_path, :html => { 
:multipart => true } do |f|
+    %label{ :for => :provider_id }
+      Provider
+    = select_tag :provider_id, options_for_select(@providers.map{ |p| [p.name, 
p.id] })
+    = render :partial => 'form', :locals => { :f => f }
+    %fieldset.clearfix
+      .grid_13.alpha.omega
+        = submit_tag t(:add), :class => "ra nomargin dialogbutton"
+    %section
+      %p.requirement
+        %span.required *
+        \-
+        = t('cloud_accounts.new.required_field')
diff --git a/src/app/views/admin/provider_accounts/show.haml 
b/src/app/views/admin/provider_accounts/show.haml
new file mode 100644
index 0000000..05eeedd
--- /dev/null
+++ b/src/app/views/admin/provider_accounts/show.haml
@@ -0,0 +1,5 @@
+- content_for :list do
+  = render :partial => 'list'
+
+- content_for :details do
+  = render :partial => 'layouts/details_pane'
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 99af504..3344058 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -44,8 +44,9 @@ ActionController::Routing::Routes.draw do |map|
   map.connect '/set_layout', :controller => 'application', :action => 
'set_layout'
 
   map.namespace 'admin' do |r|
-    r.resources :hardware_profiles, :pool_families, :providers, 
:provider_accounts, :realms, :roles, :settings
+    r.resources :hardware_profiles, :pool_families, :providers, :realms, 
:roles, :settings
     r.resources :users, :collection => { :multi_destroy => :delete }
+    r.resources :provider_accounts, :collection => { :multi_destroy => :delete 
}
   end
 
   map.resources :pools
-- 
1.7.3.3

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

Reply via email to