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:&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
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

Reply via email to