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`),

Reply via email to