Skip to content

Commit

Permalink
Merge d7b9f92 into abc7d73
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisma committed Apr 5, 2019
2 parents abc7d73 + d7b9f92 commit 9288560
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 98 deletions.
4 changes: 4 additions & 0 deletions app/models/app_setting.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ def self.instance
@instance
end

def github_base_file_url
"https://github.com/#{github_user_name}/#{git_repository_name}/blob/#{git_branch}"
end

private

def apply_settings
Expand Down
8 changes: 4 additions & 4 deletions app/models/virtual_machine_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ def users
def all_users
(users + sudo_users + responsible_users).uniq
end

def node_script
Puppetscript.node_script(name, (sudo_users + responsible_users).uniq, all_users)
end

private

Expand Down Expand Up @@ -72,10 +76,6 @@ def commit_message(git_writer)
end
end

def node_script
Puppetscript.node_script(name, (sudo_users + responsible_users).uniq, all_users)
end

def write_puppetscripts(git_writer, name_script, node_script)
git_writer.write_file(Puppetscript.class_file_name(name), name_script)
git_writer.write_file(Puppetscript.node_file_name(name), node_script)
Expand Down
20 changes: 20 additions & 0 deletions app/views/application/_modal.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<%# Partial params: id, dialog_class, title %>
<div class="modal fade" id="<%= id %>" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog <%= dialog_class %>" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title"><%= title %></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<%= yield %>
</div>
<div class="modal-footer">
<%= yield :footer %>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
35 changes: 0 additions & 35 deletions app/views/requests/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@
title: 'New VM request',
:data => { toggle: 'tooltip', placement: 'bottom' },
class: "btn btn-primary float-right mt-3" %>
<% if current_user.admin? %>
<%= link_to "Templates", request_templates_path,
class: "btn btn-primary float-right mt-3 mr-3" %>
<%= link_to 'Operating Systems', operating_systems_path,
class: 'btn btn-primary float-right mt-3 mr-3' %>
<% end %>
</div>

<h2 id="pending">Pending requests</h2>
Expand Down Expand Up @@ -58,7 +52,6 @@
<th>Application Name</th>
<th>Comment</th>
<th>Status</th>
<th data-orderable="false">Actions</th>
</tr>
</thead>
<tbody>
Expand All @@ -79,34 +72,6 @@
:data => { toggle: 'tooltip', placement: 'right' },
class: "round #{request.accepted? ? 'bg-success' : 'bg-warning'}" %>
</td>
<td>
<% if request.accepted? %>
<a class="btn btn-primary btn-sm fa fa-code text-white" data-toggle="modal" title="Puppet script" data-target=<%= '#puppet-script-' + request.name %>>
</a>
<div class="modal fade" id=<%= 'puppet-script-' + request.name %> tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="puppet-scriptTite">Puppet Script</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<pre>
<%= debug puppet_node_script(request) %>
<%= debug puppet_name_script(request) %>
</pre>
</div>
<div class="modal-footer">
<%= link_to "Push to git", push_to_git_request_path(request), method: :post, class: "btn btn-primary" %>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<% end %>
</td>
</tr>
<% end %> <%# @resolved_requests&.each %>
</tbody>
Expand Down
49 changes: 48 additions & 1 deletion app/views/vms/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,18 @@ end %>
<table class="table table-borderless" style="width: 100%">
<tbody class="table-active">
<tr>
<th colspan="2" ><h4 class="mb-0">Users</h4></th>
<th colspan="2" >
<h4 class="mb-0">
Users
<%# Button that shows the Puppet Script modal %>
<% if @vm.config.present? && current_user.admin? %>
<button class="btn btn-sm btn-secondary text-white float-right"
data-toggle="modal" title="Show Puppet Scripts" data-target="#puppetscript">
<%= fa_icon('code') %>
</button>
<% end %>
</h4>
</th>
</tr>
<% (@vm.users + @vm.sudo_users + @vm.responsible_users).uniq.each do |user| %>
<tr>
Expand All @@ -135,3 +146,39 @@ end %>
</table>
</div>
</div>

<% if @vm.config.present? && current_user.admin? %>
<%# Modal for Puppet Script display %>
<%= render 'application/modal', {title: 'Puppet Scripts', id: 'puppetscript', dialog_class: 'modal-lg'} do %>
<%# Main body of modal gets rendered into unnamed yield %>
<div class="card">
<div class="card-header">
Generated Node Script
<small>
<%= link_to "File in '#{AppSetting.instance.git_repository_name}' GitHub repository",
AppSetting.instance.github_base_file_url + Puppetscript.node_file_name(@vm.name) %>
</small>
</div>
<div class="card-body">
<pre class="mb-0"><%= @vm.config.node_script %></pre>
</div>
</div><%# card %>
<div class="card mt-4">
<div class="card-header">
Generated Name Script
<small>
<%= link_to "File in '#{AppSetting.instance.git_repository_name}' GitHub repository",
AppSetting.instance.github_base_file_url + Puppetscript.class_file_name(@vm.name) %>
</small>
</div><%# card-header %>
<div class="card-body">
<pre class="mb-0"><%= Puppetscript.name_script @vm.name %></pre>
</div>
</div><%# card %>
<%# Additonal content in the modal footer %>
<% content_for :footer do %>
<%= link_to "Push to git", push_to_git_request_path(request), method: :post, class: "btn btn-primary" %>
<% end %><%# content_for :footer %>
<% end %>
<% end %>

101 changes: 43 additions & 58 deletions spec/views/vms/show.html.erb_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
end

it 'shows status when online' do
expect(rendered).to include 'online'
expect(rendered).to include vm_on.status.to_s
end

it 'shows vm OS' do
Expand Down Expand Up @@ -87,14 +87,17 @@
end

it 'shows status' do
expect(rendered).to include 'offline'
expect(rendered).to include vm_on.status.to_s
end
end

context 'when the current user is not a root user' do
it 'does not have any links to manage power state' do
expect(rendered).not_to have_link 'Power On'
expect(rendered).not_to have_link 'Power Off'
expect(rendered).not_to have_link href: change_power_state_vm_path(vm_off.name)
end

it 'does not have links to Puppet Scripts on GitHub' do
expect(rendered).to_not have_css 'a[href*="github.com"]'
end
end

Expand All @@ -103,11 +106,15 @@

context 'when powered on' do
it 'has power off links' do
expect(rendered).to have_link 'Suspend VM'
expect(rendered).to have_link 'Shutdown Guest OS'
expect(rendered).to have_link 'Restart Guest OS'
expect(rendered).to have_link 'Reset'
expect(rendered).to have_link 'Power Off'
expect(rendered).to have_link href: suspend_vm_vm_path(vm_on.name)
expect(rendered).to have_link href: shutdown_guest_os_vm_path(vm_on.name)
expect(rendered).to have_link href: reboot_guest_os_vm_path(vm_on.name)
expect(rendered).to have_link href: reset_vm_vm_path(vm_on.name)
expect(rendered).to have_link 'Power Off', href: change_power_state_vm_path(vm_on.name)
end

it 'has links to Puppet Scripts on GitHub' do
expect(rendered).to have_css 'a[href*="github.com"]', minimum: 1
end
end

Expand All @@ -118,7 +125,7 @@
end

it 'has power on link' do
expect(rendered).to have_link('Power On')
expect(rendered).to have_link 'Power On', href: change_power_state_vm_path(vm_off.name)
end
end
end
Expand All @@ -130,34 +137,28 @@
end

it 'has a link to edit information' do
expect(rendered).to have_link 'Edit'
expect(rendered).to have_link href: edit_vm_path(vm_on.name)
end

context 'when powered on' do
it 'has power off links' do
expect(rendered).to have_link 'Suspend VM'
expect(rendered).to have_link 'Shutdown Guest OS'
expect(rendered).to have_link 'Restart Guest OS'
expect(rendered).to have_link 'Reset'
expect(rendered).to have_link 'Power Off'
expect(rendered).to have_link href: suspend_vm_vm_path(vm_on.name)
expect(rendered).to have_link href: shutdown_guest_os_vm_path(vm_on.name)
expect(rendered).to have_link href: reboot_guest_os_vm_path(vm_on.name)
expect(rendered).to have_link href: reset_vm_vm_path(vm_on.name)
expect(rendered).to have_link 'Power Off', href: change_power_state_vm_path(vm_on.name)
end

it 'demands confirmation on critical actions' do
expect(rendered).to have_selector("a[href='#{url_for(controller: :vms, action: 'suspend_vm', id: vm_on.name)}'][data-confirm='Are you sure?']")
expect(rendered).to have_selector(
"a[href='#{url_for(controller: :vms, action: 'shutdown_guest_os', id: vm_on.name)}'][data-confirm='Are you sure?']"
)
expect(rendered).to have_selector("a[href='#{url_for(controller: :vms,
action: 'reboot_guest_os',
id: vm_on.name)}'][data-confirm='Are you sure?']")
expect(rendered).to have_selector("a[href='#{url_for(controller: :vms, action: 'reset_vm', id: vm_on.name)}'][data-confirm='Are you sure?']")
expect(rendered).to have_selector(
"a[href='#{url_for(controller: :vms, action: 'change_power_state', id: vm_on.name)}'][data-confirm='Are you sure?']"
)
expect(rendered).to have_selector("a[href='#{suspend_vm_vm_path(vm_on.name)}'][data-confirm]")
expect(rendered).to have_selector("a[href='#{shutdown_guest_os_vm_path(vm_on.name)}'][data-confirm]")
expect(rendered).to have_selector("a[href='#{reboot_guest_os_vm_path(vm_on.name)}'][data-confirm]")
expect(rendered).to have_selector("a[href='#{reset_vm_vm_path(vm_on.name)}'][data-confirm]")
expect(rendered).to have_selector("a[href='#{change_power_state_vm_path(vm_on.name)}'][data-confirm]")
end

it 'has no power on link' do
expect(rendered).not_to have_link 'Power On'
expect(rendered).to_not have_link 'Power On', href: change_power_state_vm_path(vm_on.name)
end
end

Expand All @@ -168,16 +169,16 @@
end

it 'has power on link' do
expect(rendered).to have_link('Power On')
expect(rendered).to have_link 'Power On', href: change_power_state_vm_path(vm_off.name)
end

it 'has no power off links' do
rendered = render
expect(rendered).not_to have_link 'Suspend VM'
expect(rendered).not_to have_link 'Shutdown Guest OS'
expect(rendered).not_to have_link 'Restart Guest OS'
expect(rendered).not_to have_link 'Reset'
expect(rendered).not_to have_link 'Power Off'
expect(rendered).to_not have_link href: suspend_vm_vm_path(vm_off.name)
expect(rendered).to_not have_link href: shutdown_guest_os_vm_path(vm_off.name)
expect(rendered).to_not have_link href: reboot_guest_os_vm_path(vm_off.name)
expect(rendered).to_not have_link href: reset_vm_vm_path(vm_off.name)
expect(rendered).to_not have_link 'Power Off', href: change_power_state_vm_path(vm_off.name)
end
end

Expand All @@ -189,33 +190,17 @@

it 'displays info that they are not installed' do
rendered = render
expect(rendered).not_to have_link 'Shutdown Guest OS'
expect(rendered).not_to have_link 'Restart Guest OS'
expect(rendered).to have_link 'Suspend VM'
expect(rendered).to have_link 'Reset'
expect(rendered).to have_link 'Power Off'
expect(rendered).to_not have_link href: shutdown_guest_os_vm_path(vm_on_without_tools.name)
expect(rendered).to_not have_link href: reboot_guest_os_vm_path(vm_on_without_tools.name)
expect(rendered).to have_link href: suspend_vm_vm_path(vm_on_without_tools.name)
expect(rendered).to have_link href: reset_vm_vm_path(vm_on_without_tools.name)
expect(rendered).to have_link 'Power Off', href: change_power_state_vm_path(vm_on_without_tools.name)
end

it 'demands confirmation on critical actions' do
expect(rendered).to have_selector(
"a[href='#{url_for(controller: :vms, action: 'suspend_vm', id: vm_on_without_tools.name)}'][data-confirm='Are you sure?']"
)
expect(rendered).to have_selector(
"a[href='#{url_for(controller: :vms, action: 'reset_vm', id: vm_on_without_tools.name)}'][data-confirm='Are you sure?']"
)
expect(rendered).to have_selector(
"a[href='#{url_for(controller: :vms, action: 'change_power_state', id: vm_on_without_tools.name)}'][data-confirm='Are you sure?']"
)
end
end

context 'when vm_are_tools are installed' do
it 'displays info' do
expect(rendered).to have_link 'Suspend VM'
expect(rendered).to have_link 'Shutdown Guest OS'
expect(rendered).to have_link 'Restart Guest OS'
expect(rendered).to have_link 'Reset'
expect(rendered).to have_link 'Power Off'
expect(rendered).to have_selector("a[href='#{suspend_vm_vm_path(vm_on_without_tools.name)}'][data-confirm]")
expect(rendered).to have_selector("a[href='#{reset_vm_vm_path(vm_on_without_tools.name)}'][data-confirm]")
expect(rendered).to have_selector("a[href='#{change_power_state_vm_path(vm_on_without_tools.name)}'][data-confirm]")
end
end
end
Expand Down

0 comments on commit 9288560

Please sign in to comment.