---
src/app/controllers/deployments_controller.rb | 5 +
src/app/models/catalog_entry.rb | 7 ++
src/app/stylesheets/layout.scss | 109 ++++++++++++++++++++
.../deployments/launch_from_catalog.html.haml | 57 ++++++++++
src/app/views/layouts/_catalog_dropdown.html.haml | 7 ++
src/app/views/pools/_pretty_list.html.haml | 1 +
src/config/routes.rb | 1 +
src/public/images/deployment-button-pressed.png | Bin 0 -> 524 bytes
src/public/images/deployment-button.png | Bin 0 -> 488 bytes
9 files changed, 187 insertions(+), 0 deletions(-)
create mode 100644 src/app/views/deployments/launch_from_catalog.html.haml
create mode 100644 src/app/views/layouts/_catalog_dropdown.html.haml
create mode 100644 src/public/images/deployment-button-pressed.png
create mode 100644 src/public/images/deployment-button.png
diff --git a/src/app/controllers/deployments_controller.rb
b/src/app/controllers/deployments_controller.rb
index 6504db1..ec39ade 100644
--- a/src/app/controllers/deployments_controller.rb
+++ b/src/app/controllers/deployments_controller.rb
@@ -284,6 +284,11 @@ class DeploymentsController < ApplicationController
render :text => deployment.nil?.to_s
end
+ def launch_from_catalog
+ @catalog = Catalog.find(params[:catalog_id])
+ @catalog_entries = @catalog.catalog_entries.paginate(:page => params[:page] || 1,
:per_page => 6)
+ require_privilege(Privilege::VIEW, @catalog)
+ end
private
def load_deployments
@deployments = Deployment.paginate(:page => params[:page] || 1,
diff --git a/src/app/models/catalog_entry.rb b/src/app/models/catalog_entry.rb
index 6175bdf..bb99332 100644
--- a/src/app/models/catalog_entry.rb
+++ b/src/app/models/catalog_entry.rb
@@ -80,4 +80,11 @@ class CatalogEntry < ActiveRecord::Base
deployable.image_uuids unless deployable.nil?
end
+ def hw_profile_for_image(image_id)
+ fetch_deployable.assemblies.each do |as|
+ if as.image_id == image_id
+ return HardwareProfile.find_by_name(as.hwp)
+ end
+ end
+ end
end
diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss
index 3115a5e..54e7523 100644
--- a/src/app/stylesheets/layout.scss
+++ b/src/app/stylesheets/layout.scss
@@ -2247,6 +2247,115 @@ ul.deployment-array.small + ul.deployment-array.small{
margin-top: 10px;
}
+/************************************************************************** */
+/********************************************* Launch from catalog elements */
+/************************************************************************** */
+
+.catalog_info{
+ text-align:center;
+ h3{
+ padding:20px 0px 20px 0px;
+ }
+ }
+.catalog_list{
+ position: relative;
+ vertical-align:center;
+}
+.catalog_list .more{
+ display:none;
+ width: 164px;
+ & > li.catalog{
+ width:100%;
+ text-align:left;
+ padding: 10px 0px 10px 0px;
+ margin: 0px !important;
+ a {
+ padding-left: 10px;
+ }
+ }
+ li.catalog:hover{
+ background:#C4E0F0;
+ }
+}
+.catalog_link{
+ background: url(../../images/deployment-button.png) no-repeat center;
+ padding: 7px 15px;
+}
+.catalog_link:hover{
+ background-color:#e0e0e0;
+ background: url(../../images/deployment-button-pressed.png) no-repeat center;
+
+ .more{
+ border: 1px solid #999999;
+ display:block;
+ position:absolute;
+ z-index:1;
+ background-color:#e0e0e0;
+ right:-15px;
+ top:5px;
+ -webkit-border-radius: 7px 0px 7px 7px; -moz-border-radius: 7px 0px 7px 7px;
border-radius: 7px 0px 7px 7px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.50);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.50);
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.50);
+ }
+}
+table.catalog_pretty {
+ width: 100%;
+ #border: 1px solid #ccc;
+ background-color: #efefef;
+ background: -moz-linear-gradient(top, #efefef 0%, #e0e0e0 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef),
color-stop(100%,#e0e0e0)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /*
Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* Opera11.10+ */
+ background: -ms-linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* IE10+ */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef',
endColorstr='#e0e0e0',GradientType=0 ); /* IE6-9 */
+ background: linear-gradient(top, #efefef 0%,#e0e0e0 100%); /* W3C */
+ -webkit-border-radius: 7px 7px 7px 7px; -moz-border-radius: 7px 7px 7px 7px;
border-radius: 7px 7px 7px 7px;
+ tr {
+ padding:5px;
+ border-bottom: 1px solid #CCCCCC;
+
+ }
+
+ tr:last-child {
+ border:none;
+ }
+
+ td.info{
+ padding:5px;
+ width:80%;
+ h2.catalog_entry{
+ font-size: 16px;
+ margin-top: 6px;
+ display: inline-block;
+ padding: 6px 7px 7px 44px;
+ background: transparent
url('../../images/deployment_large_icon_provider.png') no-repeat 8px center;
+ }
+ .catalog_entry_description{
+ padding-left: 44px;
+ }
+ }
+
+ td.controls{
+ text-align: right;
+ vertical-align: middle;
+ a{
+
+ }
+ }
+
+ table{
+ width:90%;
+ tr td{
+ padding:10px;
+ }
+ tr th{
+ padding:10px;
+ }
+ }
+}
+
+
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Flat Table Component -- v.0.0.1 [flat_table] (flat_table.scss)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
diff --git a/src/app/views/deployments/launch_from_catalog.html.haml
b/src/app/views/deployments/launch_from_catalog.html.haml
new file mode 100644
index 0000000..770cd65
--- /dev/null
+++ b/src/app/views/deployments/launch_from_catalog.html.haml
@@ -0,0 +1,57 @@
+= render :partial => 'layouts/nav_history'
+%header.page-header
+ %h1=(a)catalog.name
+ #obj_actions.button-container
+ = link_to 'Edit', edit_catalog_path(@catalog), :class => 'button
pill', :id => 'edit_button'
+%span.catalog_info
+ %h3="Choose a deployable to launch in the #{(a)catalog.pool.name} pool"
+.content
+ %table.catalog_pretty
+ - @catalog_entries.each do |entry|
+ %tr.entry_row
+ %td.info
+ %h2.catalog_entry=entry.name
+ %div.catalog_entry_description=entry.description
+ %td.controls
+ =link_to "Details","#", :class => "collapse"
+ =link_to "Select","#", :class=> "button pill"
+ %tr.details_row
+ %td
+ %table
+ %tr
+ %th
+ %h2 Image ID
+ %th Profile
+ %th HDD
+ %th RAM
+ %th ARCH
+ -entry.fetch_images.each do |image|
+ %tr
+ %td
+ %h2=image.id
+ %td=entry.hw_profile_for_image(image.id).name
+ %td=entry.hw_profile_for_image(image.id).storage
+ %td=entry.hw_profile_for_image(image.id).memory
+ %td=entry.hw_profile_for_image(image.id).architecture
+ %td
+ %h2 Deployable URI
+ %span=entry.url
+ %div.align-center
+ %div
+ =will_paginate @catalog_entries
+ %div
+ = link_to 'Cancel', root_path, :class => 'button pill', :id
=> 'edit_button'
+
+:javascript
+ $(document).ready(function() {
+ $('.details_row').each(function(){
+ $(this).hide();
+ })
+ $('.entry_row').each(function(){
+ var this_row = this;
+ $(this).find('a.collapse').click(function(){
+ $(this_row).next().toggle();
+ return false;
+ });
+ })
+ });
diff --git a/src/app/views/layouts/_catalog_dropdown.html.haml
b/src/app/views/layouts/_catalog_dropdown.html.haml
new file mode 100644
index 0000000..d5a2d59
--- /dev/null
+++ b/src/app/views/layouts/_catalog_dropdown.html.haml
@@ -0,0 +1,7 @@
+%li.catalog_link
+ =#image_tag 'deployment-button.png'
+  
+ %div.catalog_list
+ %ul.more
+ - catalogs.each do |catalog|
+ %li.catalog= link_to catalog.name,
launch_from_catalog_deployments_path(:catalog_id => catalog.id)
\ No newline at end of file
diff --git a/src/app/views/pools/_pretty_list.html.haml
b/src/app/views/pools/_pretty_list.html.haml
index 461db2d..e4d9626 100644
--- a/src/app/views/pools/_pretty_list.html.haml
+++ b/src/app/views/pools/_pretty_list.html.haml
@@ -31,6 +31,7 @@
= link_to "#{html_escape(pool.name)} Pool details
»".html_safe, pool_path(pool), :class =>'pool_details'
%li
= link_to 'New Deployment', launch_new_deployments_path(:pool_id =>
pool.id), :class => 'button primary', :id =>
'new_deployment_button'
+ = render :partial => 'layouts/catalog_dropdown', :locals =>
{:catalogs => pool.catalogs}
:javascript
$(document).ready(function() {
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 1e31d16..5527816 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -106,6 +106,7 @@ Conductor::Application.routes.draw do
delete :multi_destroy
get 'launch_new'
get 'check_name'
+ get 'launch_from_catalog'
end
resources :instances
end
diff --git a/src/public/images/deployment-button-pressed.png
b/src/public/images/deployment-button-pressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a87935ab785bf7602d46e498c3aa5cf4af2b9a8
GIT binary patch
literal 524
zcmV+n0`vWeP)<h;3K|Lk000e1NJLTq001BW000>X1^@s6P!BAT00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2ipn?
z3k5m92Q4K4000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004JNkl<Z
zNXPA#PfG$p7{-4)>&}*|wGxzJkg?UFQ*`i9cL}<65QIKKAEJ-p*+WnWeE<)2(?hqq
z1c7M5LLil~uDXiWDM;v#LGD8MoQ9dh^W&X)pLvyhKL6@@9zjS-Nyzg&GMP*u0EI#U
zLBN^-1P&1T?yy*MC{`U-O^FrL*-02gG~o|G$#yYymDFMwLlX!EPH&!h>h!Tpoz3|v
zEK?uf6`b9^aDL~Y2?awFJhuBtRbZJqQ7O2tcQ`6NjIRRM^)>((_e}t{69(%sow;e1
zW_N(o9S{$P#`^|7s%*QIZ5M!pjTk~vg6o1-Z{SZC{8opTVNPmtXfK=Wl1sJx$$?y|
zMK;+T+5FEd@DB0W+BbkvjVFJ>j{tEa<O{%;F2{SzR2m*v^$x|VL!~i1wn<fCYau+|
z9I#9s%hcIlo2A(sP_|u4w#!mfV|Qf+sVe>jQA87@lTp&i=wu@LUjT0)>1HmHufJpf
O0000<MNUMnLSTYbz|WEZ
literal 0
HcmV?d00001
diff --git a/src/public/images/deployment-button.png
b/src/public/images/deployment-button.png
new file mode 100644
index 0000000000000000000000000000000000000000..fbc615128700e1e6e350c56610e9f1dd533b4d37
GIT binary patch
literal 488
zcmV<E0T=#>P)<h;3K|Lk000e1NJLTq001BW000>X1^@s6P!BAT00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2ipn?
z3jrcg4k66|000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0003)Nkl<Z
zNXPA$zly>@5Qjg96%vSrV&iBP1VPJSXXiWQS$rK^pTfe@MGLcKtda-NBHF~O4o)~Y
zk0VKO{;Fl!Wj<!--?p4{kFqRjLL!1G%aY-6*a$$DWe5%H4Pbscu;1^o)}pEm1_NfZ
z8NTn=1CS&MK@c#ROz=Dp5n;RCa=l(rRl+btRjYe~-EPO>aKIRY=XqQ%7uxMMs*3OX
zoX=<0>veS=NYfO6<M9Z<bUI};8qw)=xZQ3PMM1CEt2PF{$~lK~4uIuyiHJ0p1^4^C
zo-FvSHk%FB+NZrJiiqR5o;nc6F;Nt~WV{j&d_sJ;t_|Q7!|z`35<s`xZMGS$Rx9#6
zCrwkVwd8sJeAyVr<8ifhKvhvy7K;T%QQ({-NfP?~KJ)n;WBwM$t<&lBc#mZNdn6MP
evMg)tU+@7pA!&&O#&F000000<MNUMnLSTZUX~%{D
literal 0
HcmV?d00001
--
1.7.6.4