On Thu, Dec 23, 2010 at 01:25:34PM +0100, Tomas Sedovic wrote:
On 12/22/2010 09:18 PM, steve linabery wrote:
>On Wed, Dec 22, 2010 at 07:15:29PM +0100, tsedovic(a)redhat.com wrote:
>>From: Tomas Sedovic<tsedovic(a)redhat.com>
>>
>>---
>> .../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:
>>+ = link_to "All", @url_params.merge(:select => 'all')
>>+ %span> ,
>>+ = 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((a)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
>>deltacloud-devel(a)lists.fedorahosted.org
>>https://fedorahosted.org/mailman/listinfo/deltacloud-devel
>
>While testing this, I notice that on the 'new' form the columns and text
fields are not nicely arranged. I don't know if this is due to a flawed local setup on
my part or not. Please advise?
>
>Thanks,
>Steve
Hey Steve,
That is a remnant of the old design -- I didn't get to fixing the
CSS yet and the current styling breaks with the new layout.
I'll fix it asap, but right now the patch is more about the
functionality. Sorry, I should have mentioned it sooner.
Thomas
Not a problem; I just wanted to be sure it wasn't a problem with my setup.
Thanks
Steve