This is an automated email from the ASF dual-hosted git repository. junaid pushed a commit to branch VCL-1115_vmware_windows_uefi_images in repository https://gitbox.apache.org/repos/asf/vcl.git
commit 0e08384f00174123ff88d1f4f7605d7de1a0edc6 Author: Junaid Ali <[email protected]> AuthorDate: Fri Mar 15 12:45:28 2019 -0500 Added support for WIndows UEFI images for VMWare Provisioner --- managementnode/lib/VCL/DataStructure.pm | 1 + .../lib/VCL/Module/Provisioning/VMware/VMware.pm | 20 ++++++++++++++++++-- managementnode/lib/VCL/image.pm | 9 +++++++++ .../ManagementNode/Scripts/post_capture/.gitignore | 0 mysql/vcl.sql | 1 + 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/managementnode/lib/VCL/DataStructure.pm b/managementnode/lib/VCL/DataStructure.pm index 3d57fdf..e637466 100644 --- a/managementnode/lib/VCL/DataStructure.pm +++ b/managementnode/lib/VCL/DataStructure.pm @@ -387,6 +387,7 @@ $SUBROUTINE_MAPPINGS{image_settestflag} = '$self->request_data->{reservation}{RE $SUBROUTINE_MAPPINGS{image_size} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{size}'; $SUBROUTINE_MAPPINGS{image_test} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{test}'; $SUBROUTINE_MAPPINGS{image_updateimagename} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{UPDATEIMAGENAME}'; +$SUBROUTINE_MAPPINGS{image_uefi} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{uefi}'; $SUBROUTINE_MAPPINGS{imagemeta_checkuser} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagemeta}{checkuser}'; $SUBROUTINE_MAPPINGS{imagemeta_id} = '$self->request_data->{reservation}{RESERVATION_ID}{image}{imagemeta}{id}'; diff --git a/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm b/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm index 2ec1574..b102478 100644 --- a/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm +++ b/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm @@ -925,6 +925,13 @@ sub capture { my $os_product_name = $self->os->get_product_name() if $self->os->can("get_product_name"); my $os_is_64_bit = $self->os->is_64_bit() if $self->os->can("is_64_bit"); + # Attempt to get firmware + my $vm_firmware = exists $vmx_info->{firmware} ? $vmx_info->{firmware} : 'bios'; + if ($vm_firmware eq "efi") { + notify($ERRORS{'DEBUG'}, 0, "setting uefi firmware for image"); + $self->data->set_image_uefi(1); + } + # Call the OS module's pre_capture() subroutine if implemented if ($self->os->can("pre_capture") && !$self->os->pre_capture({end_state => 'off'})) { notify($ERRORS{'WARNING'}, 0, "failed to complete OS module's pre_capture tasks"); @@ -1711,7 +1718,8 @@ sub prepare_vmx { my $guest_os = $self->get_vm_guest_os() || return; my $vmware_product_name = $self->get_vmhost_product_name(); my $image_os_type = $self->data->get_image_os_type(); - + my $image_uefi = $self->data->get_image_uefi(); + (my ($vm_cpu_count, $vm_cores_per_socket) = $self->get_vm_cpu_configuration()) || return; # Create the .vmx directory on the host @@ -1926,6 +1934,14 @@ sub prepare_vmx { } } + # enable UEFI firmware if image has uefi flag set + notify($ERRORS{'DEBUG'}, 0, "image uefi firmware value retrieved is $image_uefi"); + if ($image_uefi) { + notify($ERRORS{'DEBUG'}, 0, "enabling uefi firmware"); + %vmx_parameters = (%vmx_parameters, ( + "firmware" => "efi", + )); + } notify($ERRORS{'DEBUG'}, 0, "vmx parameters:\n" . format_data(\%vmx_parameters)); # Create a string from the hash @@ -8177,7 +8193,7 @@ sub configure_vmhost_dedicated_ssh_key { } # Parse the file contents, add ' --- vcl.tgz' to the end of the 'modules=' line if it hasn't already been added - # modules=k.z � s.z � c.z � oem.tgz � license.tgz � m.z � state.tgz � vcl.tgz + # modules=k.z � s.z � c.z � oem.tgz � license.tgz � m.z � state.tgz � vcl.tgz my $updated_bootbank_cfg_contents; my $bootbank_cfg_changed = 0; for my $line (@bootbank_cfg_contents) { diff --git a/managementnode/lib/VCL/image.pm b/managementnode/lib/VCL/image.pm index 128de2b..4caadef 100644 --- a/managementnode/lib/VCL/image.pm +++ b/managementnode/lib/VCL/image.pm @@ -218,6 +218,15 @@ image.lastupdate = '$timestamp', image.deleted = '0', image.size = '$image_size_new', image.name = '$image_name', +EOF + + if ($self->data->get_image_uefi() == 1) { + $update_image_statement .= <<EOF +image.uefi = '1', +EOF + } + + $update_image_statement .= <<EOF; imagerevision.deleted = '0', imagerevision.datecreated = '$timestamp' WHERE diff --git a/managementnode/tools/ManagementNode/Scripts/post_capture/.gitignore b/managementnode/tools/ManagementNode/Scripts/post_capture/.gitignore old mode 100644 new mode 100755 diff --git a/mysql/vcl.sql b/mysql/vcl.sql index a5e41b1..c9b516f 100644 --- a/mysql/vcl.sql +++ b/mysql/vcl.sql @@ -498,6 +498,7 @@ CREATE TABLE IF NOT EXISTS `image` ( `description` text, `usage` text, `basedoffrevisionid` mediumint(8) unsigned default NULL, + `uefi` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`), UNIQUE KEY `prettyname` (`prettyname`),
