[Ovirt-devel] [PATCH 1/1] Introduce an option to always pxe-boot a vm.
Arthur Clément
aclement at linagora.com
Thu Sep 2 16:11:55 UTC 2010
Tested and ACK
On jeudi 02 septembre 2010 16:40:51 Nicolas Ochem wrote:
> Previously, a pxe-booted vm would always boot to HD at next startup.
>
> Signed-off-by: Nicolas Ochem <nicolas.ochem at alcatel-lucent.com>
> ---
> src/app/controllers/vm_controller.rb | 1 +
> src/app/models/vm.rb | 15 +++++++++++----
> src/app/views/vm/_form.rhtml | 2 +-
> src/task-omatic/taskomatic.rb | 13 +++++++++++--
> 4 files changed, 24 insertions(+), 7 deletions(-)
>
> diff --git a/src/app/controllers/vm_controller.rb
> b/src/app/controllers/vm_controller.rb index 88e13ab..8e99b67 100644
> --- a/src/app/controllers/vm_controller.rb
> +++ b/src/app/controllers/vm_controller.rb
> @@ -154,6 +154,7 @@ class VmController < ApplicationController
> protected
> def _setup_provisioning_options
> @provisioning_options = [[Vm::PXE_OPTION_LABEL, Vm::PXE_OPTION_VALUE],
> + [Vm::PXE_ALWAYS_OPTION_LABEL,
> Vm::PXE_ALWAYS_OPTION_VALUE], [Vm::HD_OPTION_LABEL, Vm::HD_OPTION_VALUE]]
>
> begin
> diff --git a/src/app/models/vm.rb b/src/app/models/vm.rb
> index 88e0aef..885112e 100644
> --- a/src/app/models/vm.rb
> +++ b/src/app/models/vm.rb
> @@ -101,8 +101,9 @@ class Vm < ActiveRecord::Base
>
> BOOT_DEV_HD = "hd"
> BOOT_DEV_NETWORK = "network"
> + BOOT_DEV_NETWORK_ALWAYS= "network_always"
> BOOT_DEV_CDROM = "cdrom"
> - BOOT_DEV_FIELDS = [ BOOT_DEV_HD, BOOT_DEV_NETWORK, BOOT_DEV_CDROM
> ] + BOOT_DEV_FIELDS = [ BOOT_DEV_HD, BOOT_DEV_NETWORK,
> BOOT_DEV_NETWORK_ALWAYS, BOOT_DEV_CDROM ]
>
> PROVISIONING_DELIMITER = ":"
> COBBLER_PREFIX = "cobbler"
> @@ -111,8 +112,10 @@ class Vm < ActiveRecord::Base
> COBBLER_PROFILE_SUFFIX = " (Cobbler Profile)"
> COBBLER_IMAGE_SUFFIX = " (Cobbler Image)"
>
> - PXE_OPTION_LABEL = "PXE Boot"
> + PXE_OPTION_LABEL = "PXE Boot (once)"
> PXE_OPTION_VALUE = "pxe"
> + PXE_ALWAYS_OPTION_LABEL = "PXE Boot (always)"
> + PXE_ALWAYS_OPTION_VALUE = "pxe_always"
> HD_OPTION_LABEL = "Boot from HD"
> HD_OPTION_VALUE = "hd"
>
> @@ -264,7 +267,9 @@ class Vm < ActiveRecord::Base
> end
> def provisioning_and_boot_settings
> if provisioning == nil
> - if boot_device==BOOT_DEV_NETWORK
> + if boot_device==BOOT_DEV_NETWORK_ALWAYS
> + PXE_ALWAYS_OPTION_VALUE
> + elsif boot_device==BOOT_DEV_NETWORK
> PXE_OPTION_VALUE
> elsif boot_device==BOOT_DEV_HD
> HD_OPTION_VALUE
> @@ -464,7 +469,9 @@ class Vm < ActiveRecord::Base
> self.storage_volumes=@storage_volumes_pending
> @storage_volumes_pending = []
> end
> - errors.add("nics", "must specify at least one network if pxe booting
> off a network") unless boot_device != BOOT_DEV_NETWORK || nics.size > 0 +
> #errors.add("nics", "must specify at least one network if pxe booting
> off a network") unless boot_device != BOOT_DEV_NETWORK || nics.size > 0 +
> errors.add("nics", "must specify at least one network if pxe booting off
> a network") unless boot_device != BOOT_DEV_NETWORK || boot_device !=
> BOOT_DEV_NETWORK_ALWAYS || nics.size > 0 +
>
> end
>
> diff --git a/src/app/views/vm/_form.rhtml b/src/app/views/vm/_form.rhtml
> index 7a46680..1ab6dda 100644
> --- a/src/app/views/vm/_form.rhtml
> +++ b/src/app/views/vm/_form.rhtml
> @@ -351,7 +351,7 @@ ${htmlList(pools, id)}
> // only set value if we have a network to set it to and we've
> // selected a provision type requiring a net
> if(nics.length > 0 &&
> - (e.target.value == "<%= Vm::PXE_OPTION_VALUE %>" ||
> + (e.target.value == "<%= Vm::PXE_OPTION_VALUE %>"
> ||e.target.value == "<%= Vm::PXE_ALWAYS_OPTION_VALUE %>" ||
> e.target.value.indexOf("<%= Vm::PROFILE_PREFIX %>@<%= Vm::COBBLER_PREFIX
> %>") == 0)){
> $('#vm_network_config_select_0').val(nics[0].network_id).trigger('change')
> ; }
> diff --git a/src/task-omatic/taskomatic.rb b/src/task-omatic/taskomatic.rb
> index 1dfd74f..6f699d2 100755
> --- a/src/task-omatic/taskomatic.rb
> +++ b/src/task-omatic/taskomatic.rb
> @@ -415,9 +415,17 @@ class TaskOmatic
> end
> net_interfaces.push({ :mac => nic.mac, :interface => net_device,
> :virtio => nic.virtio }) }
> + # network_always indicates that the boot device is "network" and will
> not change + # upon reboot.
> + if db_vm.boot_device == "network_always"
> + boot_device = "network"
> + else
> + boot_device = db_vm.boot_device
> + end
> +
>
> xml = create_vm_xml(db_vm.description, db_vm.uuid,
> db_vm.memory_allocated, - db_vm.memory_used,
> db_vm.num_vcpus_allocated, db_vm.boot_device, +
> db_vm.memory_used, db_vm.num_vcpus_allocated, boot_device, db_vm.virtio,
> net_interfaces, storagedevs)
>
> @logger.debug("XML Domain definition: #{xml}")
> @@ -443,7 +451,8 @@ class TaskOmatic
>
> # This information is not available via the libvirt interface.
> db_vm.memory_used = db_vm.memory_allocated
> - db_vm.boot_device = Vm::BOOT_DEV_HD
> + # Revert to HD booting unless we have selected to always boot from the
> network. + db_vm.boot_device = Vm::BOOT_DEV_HD unless db_vm.boot_device
> == Vm::BOOT_DEV_NETWORK_ALWAYS db_vm.host_id = db_host.id
> db_vm.save!
--
Arthur CLEMENT
Linagora Paris
More information about the ovirt-devel
mailing list