On 12/22/2010 07:15 PM, [email protected] wrote: > 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 this line ^^ should be render :action => 'edit', now you will get an error > + 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(@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 It's working fine, but i've found little bug (in controller, action update, comment is inline). After remove this, you can feel free to push it. ACK.
-- Jozef Zigmund Associate Software Engineer, Deltacloud _______________________________________________ deltacloud-devel mailing list [email protected] https://fedorahosted.org/mailman/listinfo/deltacloud-devel
