From: Jan Provaznik <[email protected]>
---
.../controllers/image_factory/builds_controller.rb | 70 ++++++++++++++++++++
.../image_factory/templates_controller.rb | 15 ++++-
src/app/views/image_factory/builds/new.haml | 55 +++++++++++++++
src/app/views/image_factory/templates/_images.haml | 20 ++++++
.../views/image_factory/templates/_properties.haml | 1 +
src/config/routes.rb | 1 +
6 files changed, 161 insertions(+), 1 deletions(-)
create mode 100644 src/app/controllers/image_factory/builds_controller.rb
create mode 100644 src/app/views/image_factory/builds/new.haml
create mode 100644 src/app/views/image_factory/templates/_images.haml
diff --git a/src/app/controllers/image_factory/builds_controller.rb
b/src/app/controllers/image_factory/builds_controller.rb
new file mode 100644
index 0000000..97bd32f
--- /dev/null
+++ b/src/app/controllers/image_factory/builds_controller.rb
@@ -0,0 +1,70 @@
+class ImageFactory::BuildsController < ApplicationController
+ before_filter [:require_user, :check_permission]
+
+ def new
+ raise "select template to build" unless id = params[:template_id]
+ @tpl = Template.find(id)
+ if @tpl.imported
+ flash[:warning] = "Build imported template is not supported"
+ redirect_to templates_path
+ end
+ @all_targets = Image.available_targets
+ end
+
+ def create
+ @tpl = Template.find(params[:template_id])
+ @all_targets = Image.available_targets
+
+ if params[:targets].blank?
+ flash.now[:warning] = 'You need to check at least one provider format'
+ render :action => 'new'
+ return
+ end
+
+ @tpl.upload unless @tpl.uploaded
+ errors = {}
+ warnings = []
+ params[:targets].each do |target|
+ begin
+ Image.build(@tpl, target)
+ rescue ImageExistsError
+ warnings << $!.message
+ rescue
+ errors[target] = $!.message
+ end
+ end
+ flash[:warning] = 'Warning: ' + warnings.join unless warnings.empty?
+ if errors.empty?
+ redirect_to image_factory_template_path(@tpl, :details_tab => 'images')
+ else
+ flash_error('Error while trying to build image', errors)
+ render :action => 'new'
+ end
+ end
+
+ def edit
+ end
+
+ def update
+ end
+
+ private
+
+ # TODO: DRY this, is used in templates controller too
+ def get_order(default)
+ @order_dir = params[:order_dir] == 'desc' ? 'desc' : 'asc'
+ @order_field = params[:order_field] || default
+ "#...@order_field} #...@order_dir}"
+ end
+
+ def flash_error(summary, errs)
+ flash.now[:error] ||= {}
+ flash.now[:error][:summary] = summary
+ flash.now[:error][:failures] ||= {}
+ flash.now[:error][:failures].merge!(errs)
+ end
+
+ def check_permission
+ require_privilege(Privilege::IMAGE_MODIFY)
+ end
+end
diff --git a/src/app/controllers/image_factory/templates_controller.rb
b/src/app/controllers/image_factory/templates_controller.rb
index 2105622..3f18764 100644
--- a/src/app/controllers/image_factory/templates_controller.rb
+++ b/src/app/controllers/image_factory/templates_controller.rb
@@ -11,8 +11,9 @@ class ImageFactory::TemplatesController <
ApplicationController
def show
@tpl = Template.find(params[:id])
@url_params = params.clone
- @tab_captions = ['Properties']
+ @tab_captions = ['Properties', 'Images']
@details_tab = params[:details_tab].blank? ? 'properties' :
params[:details_tab]
+ load_images(@tpl) if @details_tab == 'images'
respond_to do |format|
format.js do
if @url_params.delete :details_pane
@@ -164,6 +165,18 @@ class ImageFactory::TemplatesController <
ApplicationController
protected
+ def load_images(tpl)
+ @images_header = [
+ {:name => 'NAME', :sort_attr => 'templates.name'},
+ {:name => 'OS', :sort_attr => 'templates.platform'},
+ {:name => 'VERSION', :sort_attr => 'templates.platform_version'},
+ {:name => 'ARCH', :sort_attr => 'templates.architecture'},
+ {:name => 'STATUS', :sort_attr => 'status'},
+ ]
+ require_privilege(Privilege::IMAGE_VIEW)
+ @images = tpl.images
+ end
+
def load_templates
@header = [
{:name => 'NAME', :sort_attr => 'name'},
diff --git a/src/app/views/image_factory/builds/new.haml
b/src/app/views/image_factory/builds/new.haml
new file mode 100644
index 0000000..3d85f98
--- /dev/null
+++ b/src/app/views/image_factory/builds/new.haml
@@ -0,0 +1,55 @@
+%h2 Build Request
+- form_tag :action => 'create' do
+ = hidden_field_tag :template_id, @tpl.id
+ %h3 Deployment Definition
+ %fieldset.clearfix
+ = label_tag :deploy_name, 'Deployment Definition Name:', :class => 'grid_4'
+ = text_field_tag 'deploy_name', 'Deployment Name', :disabled => true,
:class => 'grid_3'
+ = text_field_tag 'deploy_description', 'Deployment Description', :disabled
=> true, :class => 'grid_3'
+ %fieldset.clearfix
+ .prefix_4.grid_6
+ = check_box_tag 'use_for_machine', 1, true, :disabled => true
+ = label_tag 'use_for_machine', 'Use for Machine Definition Name and
Description'
+ %fieldset.clearfix
+ .grid_7
+ = file_field :templates, :choose_logo, :value => 'Choose Logo',
:disabled => true
+ = text_field :templates, :logo_text, :value => 'Logo Text (5 characters)',
:disabled => true, :class => "grid_3"
+
+ %fieldset.clearfix
+ %label.grid_4{:for => :template_group}
+ Template Category:
+ .grid_3
+ = select_tag(:template_group, options_for_select([['User Private', 1]]))
+
+ %h3 Deployment Options
+ %fieldset.clearfix
+ .grid_6
+ %label OS:
+ = @tpl.platform
+ .grid_3
+ Hardware Profile
+ .grid_3.suffix_3
+ Locale
+ %fieldset.clearfix
+ .grid_3
+ %label OS Version:
+ = @tpl.platform_version
+ .grid_3.ra
+ %label Global Settings:
+ .grid_3
+ Small
+ .grid_3
+ Any
+ .grid_3
+ = submit_tag "Config", :name => "config", :disabled => true
+ %h3 Build Options
+ %label Choose Provider Format:
+ %section.clearfix.gap
+ %ul.block
+ - @all_targets.each do |target_id, target|
+ %li
+ = check_box_tag 'targets[]', target_id, false, :id => target_id
+ = label_tag target_id, target['name']
+
+ = submit_tag "Submit to Build", :name => "build"
+ = link_to 'Cancel', image_factory_templates_path, :class => 'button'
diff --git a/src/app/views/image_factory/templates/_images.haml
b/src/app/views/image_factory/templates/_images.haml
new file mode 100644
index 0000000..3fb1046
--- /dev/null
+++ b/src/app/views/image_factory/templates/_images.haml
@@ -0,0 +1,20 @@
+- form_tag :action => "" do
+ /= restful_submit_tag "Cancel Job", :name => "job_details", :disabled =>
true, :class => "icon"
+ /= restful_submit_tag "Show Job Details", :name => "job_details", :disabled
=> true, :class => "icon"
+ /= restful_submit_tag "Show Job Log", :name => "job_log", :disabled => true,
:class => "icon"
+ /= restful_submit_tag "Clear Job History", :name => "job_history", :disabled
=> true, :class => "icon"
+
+ %table
+ = sortable_table_header(@images_header)
+ %tbody
+ - if @images.empty?
+ %tr
+ %td{:colspan => 5} No Images
+ - else
+ - @images.each do |img|
+ %tr
+ %td= img.template.name
+ %td= img.template.platform
+ %td= img.template.platform_version
+ %td= img.template.architecture
+ %td= img.status
diff --git a/src/app/views/image_factory/templates/_properties.haml
b/src/app/views/image_factory/templates/_properties.haml
index 0fe33ae..e8bf757 100644
--- a/src/app/views/image_factory/templates/_properties.haml
+++ b/src/app/views/image_factory/templates/_properties.haml
@@ -2,3 +2,4 @@
Properties for
= @tpl.name
= link_to "Edit", edit_image_factory_template_path(@tpl), { :class => 'button'
}
+= link_to "Build", new_image_factory_build_path(:template_id => @tpl.id), {
:class => 'button' }
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 99ad7cb..a68bc17 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -40,6 +40,7 @@ ActionController::Routing::Routes.draw do |map|
map.namespace 'image_factory' do |r|
r.resources :assemblies, :deployables
r.resources :templates, :collection => {:collections => :get,
:add_selected => :get, :metagroup_packages => :get, :remove_package => :get}
+ r.resources :builds
end
map.connect '/set_layout', :controller => 'application', :action =>
'set_layout'
--
1.7.2.3
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel