[Ovirt-devel] [PATCH] added ability to reprovision vm via edit vm form
Mohammed Morsi
mmorsi at redhat.com
Thu Sep 4 11:15:54 UTC 2008
---
wui/src/app/controllers/vm_controller.rb | 73 +++++++++++++++++++++++++-----
wui/src/app/views/vm/_form.rhtml | 6 ++-
2 files changed, 65 insertions(+), 14 deletions(-)
diff --git a/wui/src/app/controllers/vm_controller.rb b/wui/src/app/controllers/vm_controller.rb
index e55ec28..82d8952 100644
--- a/wui/src/app/controllers/vm_controller.rb
+++ b/wui/src/app/controllers/vm_controller.rb
@@ -96,6 +96,28 @@ class VmController < ApplicationController
end
params[:vm][:needs_restart] = 1 if needs_restart
@vm.update_attributes!(params[:vm])
+ _setup_vm_provision(params)
+
+ if (params[:start_now] and @vm.get_action_list.include?(VmTask::ACTION_START_VM) )
+ @task = VmTask.new({ :user => @user,
+ :vm_id => @vm.id,
+ :action => VmTask::ACTION_START_VM,
+ :state => Task::STATE_QUEUED})
+ @task.save!
+ elsif ( params[:restart_now] and @vm.get_action_list.include?(VmTask::ACTION_SHUTDOWN_VM) )
+ @task = VmTask.new({ :user => @user,
+ :vm_id => @vm.id,
+ :action => VmTask::ACTION_SHUTDOWN_VM,
+ :state => Task::STATE_QUEUED})
+ @task.save!
+ @task = VmTask.new({ :user => @user,
+ :vm_id => @vm.id,
+ :action => VmTask::ACTION_START_VM,
+ :state => Task::STATE_QUEUED})
+ @task.save!
+ end
+
+
render :json => { :object => "vm", :success => true,
:alert => 'Vm was successfully updated.' }
rescue
@@ -193,6 +215,43 @@ class VmController < ApplicationController
end
protected
+ def _setup_provisioning_options
+ @provisioning_options = [[Vm::PXE_OPTION_LABEL, Vm::PXE_OPTION_VALUE],
+ [Vm::HD_OPTION_LABEL, Vm::HD_OPTION_VALUE]]
+ # FIXME add cobbler images too
+ begin
+ @provisioning_options += Cobbler::Profile.find.collect do |profile|
+ [profile.name + Vm::COBBLER_PROFILE_SUFFIX, profile.name]
+
+ end
+ rescue
+ #if cobbler doesn't respond/is misconfigured/etc just don't add profiles
+ end
+ end
+
+ def _setup_vm_provision(params)
+ # spaces are invalid in the cobbler name
+ name = params[:vm][:description].gsub(" ", "-")
+ provision = params[:vm][:provisioning_and_boot_settings]
+ unless provision == Vm::PXE_OPTION_VALUE or
+ provision == Vm::HD_OPTION_VALUE
+ found = false
+ Cobbler::System.find.each{ |system|
+ if system.name == name
+ system.profile = provision
+ system.save
+ found = true
+ end
+ }
+ unless found
+ system = Cobbler::System.create("name" => name,
+ "profile" => provision)
+ # do we need to set any of the other system attributes?
+ system.save
+ end
+ end
+ end
+
def pre_new
# if no vm_resource_pool is passed in, find (or auto-create) it based on hardware_pool_id
unless params[:vm_resource_pool_id]
@@ -229,18 +288,7 @@ class VmController < ApplicationController
@perm_obj = @vm.vm_resource_pool
@redir_controller = 'resources'
@current_pool_id=@perm_obj.id
- @provisioning_options = [[Vm::PXE_OPTION_LABEL, Vm::PXE_OPTION_VALUE],
- [Vm::HD_OPTION_LABEL, Vm::HD_OPTION_VALUE]]
- # FIXME add cobbler images too
- begin
- @provisioning_options += Cobbler::Profile.find.collect do |profile|
- [profile.name + Vm::COBBLER_PROFILE_SUFFIX,
- Vm::COBBLER_PREFIX + Vm::PROVISIONING_DELIMITER +
- Vm::PROFILE_PREFIX + Vm::PROVISIONING_DELIMITER + profile.name]
- end
- rescue
- #if cobbler doesn't respond/is misconfigured/etc just don't add profiles
- end
+ _setup_provisioning_options
end
def pre_create
params[:vm][:state] = Vm::STATE_PENDING
@@ -267,6 +315,7 @@ class VmController < ApplicationController
@perm_obj = @vm.vm_resource_pool
@redir_obj = @vm
@current_pool_id=@perm_obj.id
+ _setup_provisioning_options
end
def pre_vm_action
pre_edit
diff --git a/wui/src/app/views/vm/_form.rhtml b/wui/src/app/views/vm/_form.rhtml
index 60ed003..3d4cd79 100644
--- a/wui/src/app/views/vm/_form.rhtml
+++ b/wui/src/app/views/vm/_form.rhtml
@@ -8,7 +8,8 @@
<%= hidden_field_tag 'hardware_pool_id', @hardware_pool.id if @hardware_pool %>
<%= text_field_with_label "Name:", "vm", "description", {:style=>"width:250px;"} %>
- <%= select_with_label "Operating System:", 'vm', 'provisioning_and_boot_settings', @provisioning_options, :style=>"width:250px;" if create %>
+ <%= select_with_label "Operating System:", 'vm', 'provisioning_and_boot_settings', @provisioning_options, :style=>"width:250px;" %>
+ <% if controller.action_name == "edit" %><b style="color: #FF0000">*Warning* Editing provision could overwrite vm</b><% end %>
<div class="clear_row" style="height:15px;"></div>
<div class="form_heading">Resources</div>
@@ -50,7 +51,8 @@
<div class="clear_row"></div>
<div class="clear_row"></div>
- <%= check_box_tag_with_label "Start VM Now? (pending current resource availability)", "start_now", nil if create%>
+ <%= check_box_tag_with_label "Start VM Now? (pending current resource availability)", "start_now", nil if create or @vm.state == Vm::STATE_STOPPED %>
+ <%= check_box_tag_with_label "Restart VM Now? (pending current resource availability)", "restart_now", nil if @vm.state == Vm::STATE_RUNNING %>
<!--[eoform:vm]-->
<script type="text/javascript">
--
1.5.4.1
More information about the ovirt-devel
mailing list