chef-server-webui 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +201 -0
- data/README.rdoc +135 -0
- data/Rakefile +62 -0
- data/app/controllers/application.rb +281 -0
- data/app/controllers/clients.rb +120 -0
- data/app/controllers/cookbook_attributes.rb +41 -0
- data/app/controllers/cookbook_definitions.rb +41 -0
- data/app/controllers/cookbook_files.rb +39 -0
- data/app/controllers/cookbook_libraries.rb +41 -0
- data/app/controllers/cookbook_recipes.rb +40 -0
- data/app/controllers/cookbook_templates.rb +57 -0
- data/app/controllers/cookbooks.rb +78 -0
- data/app/controllers/databag_items.rb +102 -0
- data/app/controllers/databags.rb +83 -0
- data/app/controllers/exceptions.rb +19 -0
- data/app/controllers/main.rb +7 -0
- data/app/controllers/nodes.rb +138 -0
- data/app/controllers/openid_consumer.rb +154 -0
- data/app/controllers/roles.rb +144 -0
- data/app/controllers/search.rb +62 -0
- data/app/controllers/search_entries.rb +64 -0
- data/app/controllers/status.rb +39 -0
- data/app/controllers/users.rb +186 -0
- data/app/helpers/application_helper.rb +171 -0
- data/app/helpers/cookbook_attributes_helper.rb +7 -0
- data/app/helpers/cookbook_definitions_helper.rb +8 -0
- data/app/helpers/cookbook_files_helper.rb +8 -0
- data/app/helpers/cookbook_libraries_helper.rb +7 -0
- data/app/helpers/cookbook_recipes_helper.rb +8 -0
- data/app/helpers/cookbook_templates_helper.rb +8 -0
- data/app/helpers/exceptions_helper.rb +6 -0
- data/app/helpers/global_helpers.rb +35 -0
- data/app/helpers/nodes_helper.rb +41 -0
- data/app/helpers/openid_consumer_helper.rb +8 -0
- data/app/helpers/openid_register_helper.rb +8 -0
- data/app/helpers/openid_server_helper.rb +6 -0
- data/app/helpers/openid_server_helpers.rb +29 -0
- data/app/helpers/roles_helper.rb +5 -0
- data/app/helpers/search_entries_helper.rb +8 -0
- data/app/helpers/search_helper.rb +38 -0
- data/app/helpers/status_helper.rb +26 -0
- data/app/views/clients/_form.html.haml +22 -0
- data/app/views/clients/_navigation.html.haml +9 -0
- data/app/views/clients/edit.html.haml +6 -0
- data/app/views/clients/index.html.haml +21 -0
- data/app/views/clients/new.html.haml +6 -0
- data/app/views/clients/show.html.haml +20 -0
- data/app/views/cookbooks/index.html.haml +10 -0
- data/app/views/cookbooks/show.html.haml +40 -0
- data/app/views/databag_items/_form.html.haml +14 -0
- data/app/views/databag_items/_navigation.html.haml +9 -0
- data/app/views/databag_items/edit.html.haml +6 -0
- data/app/views/databag_items/index.html.haml +0 -0
- data/app/views/databag_items/new.html.haml +6 -0
- data/app/views/databag_items/show.html.haml +9 -0
- data/app/views/databags/_form.html.haml +12 -0
- data/app/views/databags/_item_navigation.html.haml +8 -0
- data/app/views/databags/_navigation.html.haml +9 -0
- data/app/views/databags/edit.html.haml +6 -0
- data/app/views/databags/index.html.haml +19 -0
- data/app/views/databags/new.html.haml +6 -0
- data/app/views/databags/show.html.haml +19 -0
- data/app/views/exceptions/bad_request.json.erb +1 -0
- data/app/views/exceptions/internal_server_error.html.erb +216 -0
- data/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/app/views/exceptions/not_found.html.erb +47 -0
- data/app/views/exceptions/standard_error.html.erb +217 -0
- data/app/views/layout/_jsonedit.html.haml +82 -0
- data/app/views/layout/chef_server_webui.html.haml +56 -0
- data/app/views/layout/login.html.haml +36 -0
- data/app/views/main/index.html.erb +1 -0
- data/app/views/nodes/_action.html.haml +13 -0
- data/app/views/nodes/_form.html.haml +53 -0
- data/app/views/nodes/_navigation.html.haml +9 -0
- data/app/views/nodes/_resource.html.haml +22 -0
- data/app/views/nodes/edit.html.haml +7 -0
- data/app/views/nodes/index.html.haml +25 -0
- data/app/views/nodes/new.html.haml +6 -0
- data/app/views/nodes/show.html.haml +60 -0
- data/app/views/openid_consumer/index.html.haml +28 -0
- data/app/views/openid_consumer/start.html.haml +4 -0
- data/app/views/openid_login/index.html.haml +5 -0
- data/app/views/openid_register/index.html.haml +19 -0
- data/app/views/openid_register/show.html.haml +7 -0
- data/app/views/roles/_form.html.haml +53 -0
- data/app/views/roles/_navigation.html.haml +9 -0
- data/app/views/roles/edit.html.haml +6 -0
- data/app/views/roles/index.html.haml +21 -0
- data/app/views/roles/new.html.haml +6 -0
- data/app/views/roles/show.html.haml +54 -0
- data/app/views/search/_search_form.html.haml +6 -0
- data/app/views/search/index.html.haml +8 -0
- data/app/views/search/show.html.haml +13 -0
- data/app/views/search_entries/index.html.haml +8 -0
- data/app/views/search_entries/show.html.haml +7 -0
- data/app/views/status/index.html.haml +90 -0
- data/app/views/users/_form.html.haml +39 -0
- data/app/views/users/_navigation.html.haml +9 -0
- data/app/views/users/edit.html.haml +6 -0
- data/app/views/users/index.html.haml +20 -0
- data/app/views/users/login.html.haml +16 -0
- data/app/views/users/new.html.haml +27 -0
- data/app/views/users/show.html.haml +13 -0
- data/app/views/users/start.html.haml +4 -0
- data/config.ru +84 -0
- data/config/init.rb +49 -0
- data/config/router.rb +6 -0
- data/lib/chef-server-webui.rb +155 -0
- data/lib/chef-server-webui/merbtasks.rb +103 -0
- data/lib/chef-server-webui/slicetasks.rb +20 -0
- data/lib/chef-server-webui/spectasks.rb +53 -0
- data/public/facebox/README.txt +4 -0
- data/public/facebox/b.png +0 -0
- data/public/facebox/bl.png +0 -0
- data/public/facebox/br.png +0 -0
- data/public/facebox/closelabel.gif +0 -0
- data/public/facebox/facebox.css +95 -0
- data/public/facebox/facebox.js +319 -0
- data/public/facebox/loading.gif +0 -0
- data/public/facebox/tl.png +0 -0
- data/public/facebox/tr.png +0 -0
- data/public/images/avatar.png +0 -0
- data/public/images/black_big.png +0 -0
- data/public/images/indicator.gif +0 -0
- data/public/images/jsonedit/add2.png +0 -0
- data/public/images/jsonedit/build-button.png +0 -0
- data/public/images/jsonedit/bullet.gif +0 -0
- data/public/images/jsonedit/bullet_orange.png +0 -0
- data/public/images/jsonedit/cross.png +0 -0
- data/public/images/jsonedit/delete.png +0 -0
- data/public/images/jsonedit/deleted.png +0 -0
- data/public/images/jsonedit/json.jpg +0 -0
- data/public/images/jsonedit/label.gif +0 -0
- data/public/images/jsonedit/minus.gif +0 -0
- data/public/images/jsonedit/pixel.gif +0 -0
- data/public/images/jsonedit/plus.gif +0 -0
- data/public/images/jsonedit/saved.png +0 -0
- data/public/images/jsonedit/table_refresh.png +0 -0
- data/public/images/jsonedit/value.gif +0 -0
- data/public/images/merb.jpg +0 -0
- data/public/images/toggle-collapse-dark.png +0 -0
- data/public/images/toggle-collapse-light.png +0 -0
- data/public/images/toggle-collapse.gif +0 -0
- data/public/images/toggle-expand-dark.png +0 -0
- data/public/images/toggle-expand-light.png +0 -0
- data/public/images/toggle-expand.gif +0 -0
- data/public/images/treeBuilderImages/Thumbs.db +0 -0
- data/public/images/treeBuilderImages/doc.gif +0 -0
- data/public/images/treeBuilderImages/docNode.gif +0 -0
- data/public/images/treeBuilderImages/docNodeLast.gif +0 -0
- data/public/images/treeBuilderImages/docNodeLastFirst.gif +0 -0
- data/public/images/treeBuilderImages/folder.gif +0 -0
- data/public/images/treeBuilderImages/folderNode.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeLast.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeLastFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpen.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpenFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpenLast.gif +0 -0
- data/public/images/treeBuilderImages/folderNodeOpenLastFirst.gif +0 -0
- data/public/images/treeBuilderImages/folderOpen.gif +0 -0
- data/public/images/treeBuilderImages/vertLine.gif +0 -0
- data/public/javascripts/chef.js +160 -0
- data/public/javascripts/jquery-1.3.2.min.js +19 -0
- data/public/javascripts/jquery-ui-1.7.1.custom.min.js +65 -0
- data/public/javascripts/jquery.editinline.js +108 -0
- data/public/javascripts/jquery.jeditable.mini.js +30 -0
- data/public/javascripts/jquery.livequery.js +250 -0
- data/public/javascripts/jquery.localscroll.js +104 -0
- data/public/javascripts/jquery.scrollTo.js +150 -0
- data/public/javascripts/jquery.tools.min.js +17 -0
- data/public/javascripts/jquery.treeTable.min.js +165 -0
- data/public/javascripts/json.js +153 -0
- data/public/javascripts/jsonedit_main.js +675 -0
- data/public/javascripts/yetii-min.js +1 -0
- data/public/stylesheets/base.css +336 -0
- data/public/stylesheets/chef.css +157 -0
- data/public/stylesheets/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
- data/public/stylesheets/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_100_f0f0f0_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_50_99c2ff_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_80_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
- data/public/stylesheets/images/ui-bg_highlight-soft_100_e7eef3_1x100.png +0 -0
- data/public/stylesheets/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_2694e8_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_72a7cf_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/stylesheets/jquery-ui-1.7.1.custom.css +404 -0
- data/public/stylesheets/jquery.treeTable.css +43 -0
- data/public/stylesheets/jsonedit_main.css +280 -0
- data/public/stylesheets/themes/bec-green/style.css +290 -0
- data/public/stylesheets/themes/bec/style.css +301 -0
- data/public/stylesheets/themes/blue/style.css +280 -0
- data/public/stylesheets/themes/default/style.css +267 -0
- data/public/stylesheets/themes/djime-cerulean/style.css +298 -0
- data/public/stylesheets/themes/kathleene/style.css +272 -0
- data/public/stylesheets/themes/orange/style.css +263 -0
- data/public/stylesheets/themes/reidb-greenish/style.css +301 -0
- data/stubs/app/controllers/application.rb +2 -0
- data/stubs/app/controllers/main.rb +2 -0
- metadata +399 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
!!! XML
|
2
|
+
!!!
|
3
|
+
%html
|
4
|
+
%head
|
5
|
+
%meta{ "http-equiv" => "content-type", :content => "text/html; charset=utf-8" }
|
6
|
+
%title Chef Server
|
7
|
+
= css_include_tag "base", "themes/djime-cerulean/style", "chef", "/facebox/facebox.css", "jquery-ui-1.7.1.custom", "jquery.treeTable"
|
8
|
+
= js_include_tag "jquery-1.3.2.min", "jquery.jeditable.mini", "jquery.livequery", "jquery.localscroll", "jquery.scrollTo", "jquery.tools.min"
|
9
|
+
= js_include_tag "/facebox/facebox.js"
|
10
|
+
= js_include_tag "jquery-ui-1.7.1.custom.min"
|
11
|
+
= js_include_tag "jquery.treeTable.min"
|
12
|
+
= js_include_tag "chef"
|
13
|
+
|
14
|
+
%body
|
15
|
+
#container
|
16
|
+
#header
|
17
|
+
%h1= link_to "Chef Server", slice_url(:top)
|
18
|
+
#wrapper
|
19
|
+
#main
|
20
|
+
- unless message.empty?
|
21
|
+
.block#block-messages
|
22
|
+
.content
|
23
|
+
%h2.title Messages
|
24
|
+
.inner
|
25
|
+
.flash
|
26
|
+
- message.each do |type, msg|
|
27
|
+
%div{:class => "message #{type}"}
|
28
|
+
%p= msg
|
29
|
+
= catch_content :for_layout
|
30
|
+
#footer
|
31
|
+
.block
|
32
|
+
%p Copyright © 2009 Opscode
|
33
|
+
#sidebar
|
34
|
+
.block.notice#sidebar_block_notice= catch_content :sidebar_block_notice
|
35
|
+
.block#sidebar_block= catch_content :sidebar_block
|
36
|
+
.clear
|
@@ -0,0 +1 @@
|
|
1
|
+
<strong><%= slice.description %></strong> (v. <%= slice.version %>)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
%table
|
2
|
+
- actions.each do |action, resource_hash|
|
3
|
+
%tr
|
4
|
+
%td.action_name= action.to_s
|
5
|
+
%td.action_resources
|
6
|
+
%table
|
7
|
+
- resource_hash.keys.sort{ |a,b| a.to_s <=> b.to_s }.each do |rk|
|
8
|
+
%tr
|
9
|
+
%td.action_when= rk.to_s
|
10
|
+
%td
|
11
|
+
- resource_hash[rk].each do |resource|
|
12
|
+
= partial(:resource, :resource => resource)
|
13
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
.content
|
2
|
+
.inner
|
3
|
+
- if form_for != "edit"
|
4
|
+
%div.group.form
|
5
|
+
%label.label Name
|
6
|
+
= text_field :id => "node_name", :name => "name", :class => "text_field", :value => params.has_key?(:name) ? h(params[:name]) : @node.name
|
7
|
+
%span.description The name of the Node
|
8
|
+
|
9
|
+
%div.group.form
|
10
|
+
%table.sortable
|
11
|
+
%tr
|
12
|
+
%td
|
13
|
+
%label.label Available Roles
|
14
|
+
%td
|
15
|
+
%label.label Run List
|
16
|
+
%tr
|
17
|
+
%td
|
18
|
+
%div.sortable
|
19
|
+
%ul#node_available_roles.connectedSortable
|
20
|
+
- @available_roles.each do |role|
|
21
|
+
%li{ :id => "role[#{role}]", :class => 'ui-state-highlight' }= h role
|
22
|
+
%td{:rowspan => 3}
|
23
|
+
%div.sortable.run-list
|
24
|
+
%ul#for_node.connectedSortable
|
25
|
+
- @run_list.each do |entry|
|
26
|
+
- type, name, fname = @run_list.parse_entry(entry)
|
27
|
+
%li{ :id => h(fname), :class => type == 'role' ? 'ui-state-highlight' : 'ui-state-default' }= h name
|
28
|
+
%td.help
|
29
|
+
%span.description
|
30
|
+
Drag recipes from the list of Available Recipes section on the left, and drop them
|
31
|
+
in the "Recipes for this node" section on the right. Then sort the recipes for this node list to the order you would like to see the recipes applied.
|
32
|
+
%tr
|
33
|
+
%td
|
34
|
+
%label.label Available Recipes
|
35
|
+
%tr
|
36
|
+
%td
|
37
|
+
%div.sortable
|
38
|
+
%ul#node_available_recipes.connectedSortable
|
39
|
+
- @available_recipes.each do |recipe|
|
40
|
+
%li{ :id => "recipe[#{recipe}]", :class => 'ui-state-default' }= h recipe
|
41
|
+
|
42
|
+
|
43
|
+
%div.group.form{:style => "position:relative;"}
|
44
|
+
%label.label Attributes
|
45
|
+
= partial '../layout/jsonedit', :json =>@node.attribute.to_json
|
46
|
+
%div.group.form
|
47
|
+
%span.description A JSON hash for default attributes for nodes of this node. These attributes will only be applied if the node does not already have a value for the attributes.
|
48
|
+
|
49
|
+
= form(:action => form_url, :method => :post, :id => form_id, :class => 'form') do
|
50
|
+
%div.group
|
51
|
+
.actions-bar
|
52
|
+
.actions= submit submit_name, :id => submit_id, :class => 'button'
|
53
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
.secondary-navigation
|
2
|
+
%ul
|
3
|
+
%li{ :class => "first #{active == 'index' ? "active" : ''}"}= link_to('List', slice_url(:nodes))
|
4
|
+
%li{ :class => (active == 'create' ? "active" : '')}= link_to('Create', slice_url(:new_node))
|
5
|
+
- if active != 'create' && active != 'index'
|
6
|
+
%li{ :class => (active == 'show' ? "active" : '')}= link_to('Show', slice_url(:node, @node.name))
|
7
|
+
%li{ :class => (active == 'edit' ? "active" : '')}= link_to('Edit', slice_url(:edit_node, @node.name))
|
8
|
+
%li= link_to('Delete', slice_url(:node, @node.name), :method => "delete", :confirm => "Really delete node #{@node.name}? There is no undo.")
|
9
|
+
.clear
|
@@ -0,0 +1,22 @@
|
|
1
|
+
.resource
|
2
|
+
%h3= "#{h resource.to_s} (#{resource.class})"
|
3
|
+
%table
|
4
|
+
- resource.instance_variables.sort.each do |v|
|
5
|
+
- attr_name = v.gsub(/\@/, "")
|
6
|
+
- unless attr_name == "collection"
|
7
|
+
%tr.attr_group
|
8
|
+
%td.attr_name
|
9
|
+
= "#{h attr_name}"
|
10
|
+
%td.attr_value
|
11
|
+
- value = resource.instance_variable_get(v)
|
12
|
+
- if value.kind_of?(String)
|
13
|
+
= "#{h value}"
|
14
|
+
- elsif value.kind_of?(Array)
|
15
|
+
= "#{h value.join(", ")}"
|
16
|
+
- elsif value.kind_of?(Symbol)
|
17
|
+
= "#{h value.to_s}"
|
18
|
+
- elsif attr_name == "actions"
|
19
|
+
= partial(:action, :actions => value)
|
20
|
+
- else
|
21
|
+
= "#{h value.inspect}"
|
22
|
+
|
@@ -0,0 +1,7 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title= "Node #{h @node.name}"
|
4
|
+
.inner
|
5
|
+
= partial('navigation', :active => 'edit')
|
6
|
+
= partial('form', :header => "Edit Node #{@node.name}", :form_id => 'edit_node', :submit_name => "Save Node", :submit_id => "edit_node_button", :form_for => 'edit', :form_url => slice_url(:node, @node.name) )
|
7
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title Node List
|
4
|
+
.inner
|
5
|
+
= partial('navigation', :active => 'index')
|
6
|
+
.content
|
7
|
+
.inner
|
8
|
+
%table.table
|
9
|
+
%tr
|
10
|
+
%th.first{:colspan => 2} Name
|
11
|
+
%th
|
12
|
+
%th.last
|
13
|
+
- even = false
|
14
|
+
- if @node_list.empty?
|
15
|
+
%td{:colspan => 4}= "You appear to have no nodes - try connecting one, or creating or editing a #{link_to('client', slice_url(:clients))}"
|
16
|
+
- else
|
17
|
+
- @node_list.each do |node, node_url|
|
18
|
+
%tr{:class => even ? "even": "odd" }
|
19
|
+
%td{:colspan => 2}= link_to node, slice_url(:node, { :id => node } )
|
20
|
+
%td
|
21
|
+
= link_to('Edit', slice_url(:edit_node, node))
|
22
|
+
|
|
23
|
+
= link_to('Delete', slice_url(:node, node), :method => "delete", :confirm => "Really delete Node #{node}? There is no undo.")
|
24
|
+
- even ? even = false: even = true
|
25
|
+
|
@@ -0,0 +1,6 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title= "Node"
|
4
|
+
.inner
|
5
|
+
= partial('navigation', :active => 'create')
|
6
|
+
= partial('form', :header => "Create new Node", :form_id => 'create_node', :submit_name => "Create Node", :submit_id => "create_node_button", :form_for => 'create', :form_url => slice_url(:nodes))
|
@@ -0,0 +1,60 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title= "Node #{h @node.name}"
|
4
|
+
.inner
|
5
|
+
= partial('navigation', :active => 'show')
|
6
|
+
|
7
|
+
.content
|
8
|
+
.inner
|
9
|
+
.left
|
10
|
+
%h3 Run List
|
11
|
+
%table.table
|
12
|
+
%tr
|
13
|
+
%th.first Position
|
14
|
+
%th Name
|
15
|
+
%th.last Type
|
16
|
+
- if @node.run_list.empty?
|
17
|
+
%tr
|
18
|
+
%td{:colspan => 2} This node has no roles or recipes applied.
|
19
|
+
- else
|
20
|
+
-@node.run_list.each_index do |i|
|
21
|
+
- type, name, fname = @node.run_list.parse_entry(@node.run_list[i])
|
22
|
+
%tr
|
23
|
+
%td.position= i
|
24
|
+
%td= name
|
25
|
+
%td= type
|
26
|
+
.left.accordion
|
27
|
+
%h3.head= link_to("Recipes", "#")
|
28
|
+
- full_recipe_list, default_attrs, override_attrs = @node.run_list.expand()
|
29
|
+
%div
|
30
|
+
%span.description.form.help
|
31
|
+
This is the list of recipes, fully expanded, as they will be applied to the node in question.
|
32
|
+
%table#recipes.table
|
33
|
+
%tr
|
34
|
+
%th.first Position
|
35
|
+
%th.last Name
|
36
|
+
- if @node.run_list.empty?
|
37
|
+
%tr
|
38
|
+
%td{:colspan => 2} This node has no recipes applied.
|
39
|
+
- else
|
40
|
+
- full_recipe_list.each_index do |i|
|
41
|
+
%tr
|
42
|
+
%td.position= i
|
43
|
+
%td= full_recipe_list[i]
|
44
|
+
|
45
|
+
.left
|
46
|
+
%h3 Tags
|
47
|
+
%table#recipes.table
|
48
|
+
%tr
|
49
|
+
%th.first Tags
|
50
|
+
%th.last
|
51
|
+
%tr
|
52
|
+
- if (@node.attribute?(:tags) == false) || @node[:tags].empty?
|
53
|
+
%td{:colspan => 2} This node has no tags applied.
|
54
|
+
- else
|
55
|
+
%td{:colspan => 2}= @node[:tags].join(", ")
|
56
|
+
|
57
|
+
.left
|
58
|
+
%h3 Attributes
|
59
|
+
= build_tree('attrs', @node.attribute, default_attrs, override_attrs)
|
60
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
- throw_content(:sidebar_block_notice) do
|
2
|
+
%h4 Where do I get a Login?
|
3
|
+
%p Any existing Admin level user can create new users.
|
4
|
+
%p To create the first user, please login with the default admin credential, which by default is:
|
5
|
+
%p username: admin, password: p@ssw0rd1 (May be different if you've set it in Chef::Config)
|
6
|
+
%b Please change the default password immediately after logging in!
|
7
|
+
%p Once you have an User, you can associate an OpenID with the User and login using the OpenID as the User.
|
8
|
+
%p Administrators can associate OpenID to any User.
|
9
|
+
|
10
|
+
.block#block-forms
|
11
|
+
.content
|
12
|
+
%h2.title Login
|
13
|
+
.inner
|
14
|
+
%form.form{ :method => "get", "accept-charset" => "UTF-8", :action => slice_url(:openid_consumer_login) }
|
15
|
+
.group
|
16
|
+
.text_field= text_field :openid_identifier
|
17
|
+
.group
|
18
|
+
.check_box= check_box :name => "immediate", :label => "Use immediate mode", :value => "0"
|
19
|
+
.group
|
20
|
+
.check_box= check_box :name => "use_sreg", :label => "Request registration data", :value => "0"
|
21
|
+
.group
|
22
|
+
.check_box= check_box :name => "use_pape", :label => "Request phishing-resistent auth policy", :value => "0"
|
23
|
+
.group
|
24
|
+
.check_box= check_box :name => "force_post", :label => "Force the transaction to POST", :value => "0"
|
25
|
+
.group
|
26
|
+
=link_to("Or, log in with username and password.", slice_url(:users_login))
|
27
|
+
.group.navform
|
28
|
+
.button= submit "Login →"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title Registrations
|
4
|
+
.inner
|
5
|
+
%table.table
|
6
|
+
%tr
|
7
|
+
%th.first Registration Name
|
8
|
+
%th  
|
9
|
+
%th Control
|
10
|
+
%th.last
|
11
|
+
- @registered_nodes.sort{ |a,b| a.name.to_s <=> b.name.to_s }.each_with_index do |node, index|
|
12
|
+
%tr{:class => "#{index % 2 == 1 ? 'odd' : 'even'}"}
|
13
|
+
%td{:colspan => 2}= link_to(node.name, slice_url(:registration, { :id => node.name }))
|
14
|
+
%td
|
15
|
+
= link_to( (node.validated ? "Invalidate Registration" : "Validate Registration"), slice_url( :validate_registration, { :id => node.name} ), :method => "post", :confirm => "Are you sure you want to" + (node.validated ? " invalidate " : " validate ") + "this node's registration?")
|
16
|
+
|
|
17
|
+
= link_to((node.admin ? "Remove Admin Rights" : "Grant Admin Rights"), slice_url(:admin_registration, { :id => node.name}), :method => "post", :confirm => "Are you sure you want to" + (node.admin ? " remove administrator privileges from this node?" : " grant administrator privileges to this node?"))
|
18
|
+
|
|
19
|
+
= link_to("Delete", slice_url(:registration, { :id => node.name} ), :method => "delete", :confirm => "Are you sure you want to delete this registration")
|
@@ -0,0 +1,7 @@
|
|
1
|
+
.block#block-text
|
2
|
+
.content
|
3
|
+
%h2.title= "Registration #{@registered_node.name}"
|
4
|
+
.inner
|
5
|
+
= link_to "OpenID URL", slice_url(:openid_node, { :id => @registered_node.name.gsub(/\./, "_")})
|
6
|
+
%br= "Validated: #{@registered_node.validated}"
|
7
|
+
%br= "Admin: #{@registered_node.admin}"
|
@@ -0,0 +1,53 @@
|
|
1
|
+
.content
|
2
|
+
.inner
|
3
|
+
- if form_for != "edit"
|
4
|
+
%div.group.form
|
5
|
+
%label.label Name
|
6
|
+
= text_field :id => "role_name", :name => "name", :class => "text_field", :value => params.has_key?(:name) ? h(params[:name]) : @role.name
|
7
|
+
%span.description The name of the Role
|
8
|
+
%div.group.form
|
9
|
+
%label.label Description
|
10
|
+
= text_area(params.has_key?(:description) ? h(params[:description]) : @role.description, :name => "description", :class => "text_area", :id => "role_description")
|
11
|
+
%span.description A description of this Role
|
12
|
+
|
13
|
+
%div.group.form
|
14
|
+
%table.sortable
|
15
|
+
%tr
|
16
|
+
%td
|
17
|
+
%label.label Available Roles
|
18
|
+
%td
|
19
|
+
%label.label Run List
|
20
|
+
%tr
|
21
|
+
%td
|
22
|
+
%div.sortable
|
23
|
+
%ul#node_available_roles.connectedSortable
|
24
|
+
- @available_roles.each do |role|
|
25
|
+
%li{ :id => "role[#{role}]", :class => 'ui-state-highlight' }= h role
|
26
|
+
%td{:rowspan => 3}
|
27
|
+
%div.sortable.run-list
|
28
|
+
%ul#for_role.connectedSortable
|
29
|
+
- @run_list.each do |entry|
|
30
|
+
- type, name, fname = @run_list.parse_entry(entry)
|
31
|
+
%li{ :id => h(fname), :class => type == 'role' ? 'ui-state-highlight' : 'ui-state-default' }= h name
|
32
|
+
%td.help
|
33
|
+
%span.description
|
34
|
+
Drag recipes from the list of Available Recipes section on the left, and drop them
|
35
|
+
in the "Recipes for this node" section on the right. Then sort the recipes for this node list to the order you would like to see the recipes applied.
|
36
|
+
%tr
|
37
|
+
%td
|
38
|
+
%label.label Available Recipes
|
39
|
+
%tr
|
40
|
+
%td
|
41
|
+
%div.sortable
|
42
|
+
%ul#node_available_recipes.connectedSortable
|
43
|
+
- @available_recipes.each do |recipe|
|
44
|
+
%li{ :id => "recipe[#{recipe}]", :class => 'ui-state-default' }= h recipe
|
45
|
+
|
46
|
+
%div.group.form{:style => "position:relative;"}
|
47
|
+
%label.label Default and Override Attributes
|
48
|
+
= partial '../layout/jsonedit', :json => { :defaults => @role.default_attributes, :overrides => @role.override_attributes }.to_json
|
49
|
+
%span.description A JSON hash for default attributes for nodes of this role. These attributes will only be applied if the node does not already have a value for the attributes.
|
50
|
+
= form(:action => form_url, :method => :post, :id => form_id, :class => 'form') do
|
51
|
+
%div.group
|
52
|
+
.actions-bar
|
53
|
+
.actions= submit submit_name, :id => submit_id, :class => 'button'
|
@@ -0,0 +1,9 @@
|
|
1
|
+
.secondary-navigation
|
2
|
+
%ul
|
3
|
+
%li{ :class => "first #{active == 'index' ? "active" : ''}"}= link_to('List', slice_url(:roles))
|
4
|
+
%li{ :class => (active == 'create' ? "active" : '')}= link_to('Create', slice_url(:new_role))
|
5
|
+
- if active != 'create' && active != 'index'
|
6
|
+
%li{ :class => (active == 'show' ? "active" : '')}= link_to('Show', slice_url(:role, @role.name))
|
7
|
+
%li{ :class => (active == 'edit' ? "active" : '')}= link_to('Edit', slice_url(:edit_role, @role.name))
|
8
|
+
%li= link_to('Delete', slice_url(:role, @role.name), :method => "delete", :confirm => "Really delete Role #{@role.name}? There is no undo.")
|
9
|
+
.clear
|
@@ -0,0 +1,6 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title= "Role #{h @role.name}"
|
4
|
+
.inner
|
5
|
+
= partial('navigation', :active => 'edit')
|
6
|
+
= partial('form', :header => "Edit Role #{@role.name}", :form_id => 'edit_role', :submit_name => "Save Role", :submit_id => "edit_role_button", :form_for => 'edit', :form_url => slice_url(:role, @role.name) )
|
@@ -0,0 +1,21 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title Roles
|
4
|
+
.inner
|
5
|
+
= partial('navigation', :active => 'index')
|
6
|
+
.content
|
7
|
+
.inner
|
8
|
+
%table.table
|
9
|
+
%tr
|
10
|
+
%th.first{:colspan => 2} Name
|
11
|
+
%th
|
12
|
+
%th.last
|
13
|
+
- even = false;
|
14
|
+
- @role_list.each do |role|
|
15
|
+
%tr{ :class => even ? "even" : "odd" }
|
16
|
+
%td{:colspan => 2}= link_to(role[0], slice_url(:role, role[0]))
|
17
|
+
%td
|
18
|
+
= link_to('Edit', slice_url(:edit_role, role[0]))
|
19
|
+
|
|
20
|
+
= link_to('Delete', slice_url(:role, role[0]), :method => "delete", :confirm => "Really delete Role #{role[0]}? there is no undo.")
|
21
|
+
- even ? even = false: even = true
|
@@ -0,0 +1,6 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title= "Role"
|
4
|
+
.inner
|
5
|
+
= partial('navigation', :active => 'create')
|
6
|
+
= partial('form', :header => "Create new Role", :form_id => 'create_role', :submit_name => "Create Role", :submit_id => "create_role_button", :form_for => 'create', :form_url => slice_url(:roles))
|
@@ -0,0 +1,54 @@
|
|
1
|
+
.block#block-tables
|
2
|
+
.content
|
3
|
+
%h2.title= "Role #{h @role.name}"
|
4
|
+
.inner
|
5
|
+
= partial("navigation", :active => "show")
|
6
|
+
.content
|
7
|
+
.inner
|
8
|
+
.left
|
9
|
+
%h3 Description
|
10
|
+
= @role.description
|
11
|
+
|
12
|
+
.left
|
13
|
+
%h3 Run List
|
14
|
+
%table.table
|
15
|
+
%tr
|
16
|
+
%th.first Position
|
17
|
+
%th Name
|
18
|
+
%th.last Type
|
19
|
+
- if @role.run_list.empty?
|
20
|
+
%tr
|
21
|
+
%td{:colspan => 2} This role does not include any roles or recipes.
|
22
|
+
- else
|
23
|
+
-@role.run_list.each_index do |i|
|
24
|
+
- type, name, fname = @role.run_list.parse_entry(@role.run_list[i])
|
25
|
+
%tr
|
26
|
+
%td.position= i
|
27
|
+
%td= name
|
28
|
+
%td= type
|
29
|
+
.left.accordion
|
30
|
+
%h3.head= link_to("Recipes", "#")
|
31
|
+
- full_recipe_list, default_attrs, override_attrs = @role.run_list.expand()
|
32
|
+
%div
|
33
|
+
%span.description.form.help
|
34
|
+
This is the list of recipes, fully expanded, as they will be applied to the node in question.
|
35
|
+
%table#recipes.table
|
36
|
+
%tr
|
37
|
+
%th.first Position
|
38
|
+
%th.last Name
|
39
|
+
- if @role.run_list.empty?
|
40
|
+
%tr
|
41
|
+
%td{:colspan => 2} This node has no recipes applied.
|
42
|
+
- else
|
43
|
+
- full_recipe_list.each_index do |i|
|
44
|
+
%tr
|
45
|
+
%td.position= i
|
46
|
+
%td= full_recipe_list[i]
|
47
|
+
.left
|
48
|
+
%h3 Default Attributes
|
49
|
+
= build_tree('defattrs', @role.default_attributes)
|
50
|
+
|
51
|
+
.left
|
52
|
+
%h3 Override Attributes
|
53
|
+
= build_tree('overattrs', @role.override_attributes)
|
54
|
+
|