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