You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by ar...@apache.org on 2017/03/16 22:31:46 UTC
svn commit: r1787263 - in
/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware: VIM_SSH.pm
VMware.pm
Author: arkurth
Date: Thu Mar 16 22:31:45 2017
New Revision: 1787263
URL: http://svn.apache.org/viewvc?rev=1787263&view=rev
Log:
VCL-1010
Added Windows 10 and 2016 keys to %VM_OS_CONFIGURATION in VMware.pm.
VCL-1026
Updated the default values in %VM_OS_CONFIGURATION from WinXPPro to windows7 and other to otherlinux. Also changed the associated default NIC and storage models to the recommended defaults for the corresponding guestOS choice.
Added code to VMware.pm::capture to attempt to retrieve the OS product name and architecture from the running VM before being shutting down. These values are added to the VM's .vmx file after it is powered off, which in turn winds up in the reference .vmx file.
Added VIM_SSH.pm::get_highest_vm_hardware_version_key. It queries the host's capabilities and determines the highest VM virtual hardware version supported.
Added VIM_SSH.pm::get_supported_guest_os_ids. It also queries the host's capabilities and generates a list of valid guestOS values. This is used to verify a particular guestOS is supported. If not, a lesser default is used.
Updated VMware.pm::get_vm_virtual_hardware_version to call the API module's get_highest_vm_hardware_version_key subroutine if implemented. This is used to select the host's latest supported version.
Reworked VMware.pm::get_vm_guest_os to attempt to get both the guestOS and newly added OS product name comment from the reference .vmx. If the product name was retrieved, it attempts to figure out the best guest OS from it. If not, it resorts to the guestOS value from the captured computer. If all else fails, the default value from %VM_OS_CONFIGURATION is used.
Other
Updated experimental code to support VMware ESXi's built-in VNC server in VMware.pm::node_status and prepare_vmx. All of this code is commented out.
Modified:
vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm
vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
Modified: vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm?rev=1787263&r1=1787262&r2=1787263&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VIM_SSH.pm Thu Mar 16 22:31:45 2017
@@ -205,16 +205,6 @@ sub _run_vim_cmd {
$semaphore = $self->get_semaphore($vmhost_computer_name, 120, 1) || next ATTEMPT;
}
- # my $semaphore_id = "$vmhost_computer_name";
- # if ($self->does_semaphore_exist($semaphore_id)) {
- #
- # notify($ERRORS{'DEBUG'}, 0, "blocked by another process controlling $vmhost_computer_name, sleeping for 10 seconds");
- # sleep_uninterrupted(10);
- # my $wait_message = "blocked by another process controlling $vmhost_computer_name";
- # $self->code_loop_timeout(sub{!$self->does_semaphore_exist(@_)}, [$semaphore_id], $wait_message, 140, 5);
- # }
- #}
-
# The following error is somewhat common if several processes are adding/removing VMs at the same time:
# (vmodl.fault.ManagedObjectNotFound) {
# dynamicType = <unset>,
@@ -228,6 +218,14 @@ sub _run_vim_cmd {
$self->{vim_cmd_calls}++;
#notify($ERRORS{'DEBUG'}, 0, "vim-cmd call count: $self->{vim_cmd_calls} ($vim_arguments)");
+ #my $register_semaphore;
+ #if ($command =~ /(getallvms|register)/) {
+ # $register_semaphore = $self->get_semaphore($vmhost_computer_name, 120, 1);
+ # if (!$register_semaphore) {
+ # next ATTEMPT;
+ # }
+ #}
+
my ($exit_status, $output) = $self->vmhost_os->execute({
'command' => $command,
'display_output' => 0,
@@ -2600,12 +2598,64 @@ sub get_config_option_descriptor_info {
#/////////////////////////////////////////////////////////////////////////////
+=head2 get_highest_vm_hardware_version_key
+
+ Parameters : none
+ Returns : string
+ Description : Each VMware VM has a hardware version. The versions supported on
+ the host depends on the version of VMware. This subroutine
+ returns the highest supported version and returns an integer. For
+ example vmx-11 is returned for ESXi 6.0.
+
+=cut
+
+sub get_highest_vm_hardware_version_key {
+ my $self = shift;
+ if (ref($self) !~ /VCL::Module/i) {
+ notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
+ return;
+ }
+
+ my $vmhost_hostname = $self->data->get_vmhost_hostname();
+
+ my $config_option_descriptor_info = $self->get_config_option_descriptor_info();
+
+ my $highest_vm_hardware_version_number;
+ my $highest_vm_hardware_version_key;
+ for my $version_key (sort keys %$config_option_descriptor_info) {
+ my ($version_number) = $version_key =~ /-(\d+)$/g;
+ if (!$highest_vm_hardware_version_number || $highest_vm_hardware_version_number < $version_number) {
+ $highest_vm_hardware_version_number = $version_number;
+ $highest_vm_hardware_version_key = $version_key;
+ }
+ }
+
+ notify($ERRORS{'DEBUG'}, 0, "determined highest VM hardware version supported on $vmhost_hostname: $highest_vm_hardware_version_key");
+ return $highest_vm_hardware_version_key;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
=head2 get_config_option_info
Parameters : $key
Returns : hash reference
Description : Retrieves info about the VM configuration options available for a
- particular hardware version key (ex: vmx-09).
+ particular hardware version key (ex: vmx-09). A hash reference is
+ returned with the following keys:
+ {
+ capabilities = {},
+ datastore = {},
+ defaultDevice = [],
+ description = '',
+ guestOSDefaultIndex = '',
+ guestOSDescriptor = [],
+ hardwareOptions = {},
+ supportedMonitorType = [],
+ supportedOvfEnvironmentTransport = '',
+ supportedOvfInstallTransport = '',
+ version = '',
+ },
=cut
@@ -2706,126 +2756,206 @@ sub get_config_option_guest_os_info {
#/////////////////////////////////////////////////////////////////////////////
+=head2 get_supported_guest_os_ids
+
+ Parameters : $vm_hardware_version_key (optional)
+ Returns : array
+ Description : Retrieves the names of the supported guestOS values for the VM
+ hardware version specified by the argument (example: vmx-11). If
+ no argument is supplied, the host's highest supported hardware
+ version is used.
+
+=cut
+
+sub get_supported_guest_os_ids {
+ my $self = shift;
+ if (ref($self) !~ /VCL::Module/i) {
+ notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method");
+ return;
+ }
+
+ my $vmhost_hostname = $self->data->get_vmhost_hostname();
+
+ my $vm_hardware_version_key = shift;
+ if (!defined($vm_hardware_version_key)) {
+ $vm_hardware_version_key = $self->get_highest_vm_hardware_version_key();
+ if (!defined($vm_hardware_version_key)) {
+ notify($ERRORS{'WARNING'}, 0, "failed to determine supported guest OS names on $vmhost_hostname, VM hardware version key argument was not provided and highest supported VM hardware version could not be determiend");
+ return;
+ }
+ }
+
+ my $config_option_info = $self->get_config_option_info($vm_hardware_version_key) || return;
+
+ my $guest_os_descriptor_array_ref = $config_option_info->{guestOSDescriptor};
+ if (!defined($guest_os_descriptor_array_ref)) {
+ notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info, config option info does not contain a 'guestOSDescriptor' key:\n" . format_hash_keys($config_option_info));
+ return;
+ }
+
+ my $type = ref($guest_os_descriptor_array_ref);
+ if (!$type || $type ne 'ARRAY') {
+ notify($ERRORS{'WARNING'}, 0, "failed to retrieve config option guest OS info for '$vm_hardware_version_key', guestOSDescriptor value is not an array reference:\n" . format_data($guest_os_descriptor_array_ref));
+ return;
+ }
+
+ my @supported_guest_os_ids;
+ for my $guest_os_descriptor (@$guest_os_descriptor_array_ref) {
+ my $guest_os_id = $guest_os_descriptor->{id};
+
+ # Every name includes "Guest" at the end but this is not in the valid guestOS values
+ $guest_os_id =~ s/Guest//;
+
+ # Windows server OS's: windows7Server --> windows7srv
+ $guest_os_id =~ s/(windows.+)Server/$1srv/;
+
+ # windows7_64 --> windows7-64
+ # windows8srv64 --> windows8srv-64
+ $guest_os_id =~ s/_?(64)/-$1/g;
+
+ push @supported_guest_os_ids, $guest_os_id;
+ }
+
+ notify($ERRORS{'DEBUG'}, 0, "retrieved supported guest OS names on $vmhost_hostname, VM hardware version: $vm_hardware_version_key: " . join(",", @supported_guest_os_ids));
+ return @supported_guest_os_ids;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
=head2 _print_compatible_guest_os_hardware_versions
Parameters : $print_code (optional)
Returns : true
Description : Used for development/testing only. Prints list of possible
guestOS values.
- asianux3Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- asianux3_64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- asianux4Guest vmx-08 vmx-09 vmx-10 vmx-11
- asianux4_64Guest vmx-08 vmx-09 vmx-10 vmx-11
- asianux5_64Guest vmx-11
- centos64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- centosGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- coreos64Guest vmx-11
- darwin10Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- darwin10_64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- darwin11Guest vmx-08 vmx-09 vmx-10 vmx-11
- darwin11_64Guest vmx-08 vmx-09 vmx-10 vmx-11
- darwin12_64Guest vmx-09 vmx-10 vmx-11
- darwin13_64Guest vmx-10 vmx-11
- darwin14_64Guest vmx-11
- darwin64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- darwinGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- debian4Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- debian4_64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- debian5Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- debian5_64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- debian6Guest vmx-08 vmx-09 vmx-10 vmx-11
- debian6_64Guest vmx-08 vmx-09 vmx-10 vmx-11
- debian7Guest vmx-10 vmx-11
- debian7_64Guest vmx-10 vmx-11
- debian8Guest vmx-11
- debian8_64Guest vmx-11
- dosGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- eComStation2Guest vmx-08 vmx-09 vmx-10 vmx-11
- eComStationGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- fedora64Guest vmx-11
- fedoraGuest vmx-11
- freebsd64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- freebsdGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- netware5Guest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- netware6Guest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- oesGuest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- openServer5Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- openServer6Guest vmx-08 vmx-09 vmx-10 vmx-11
- opensuse64Guest vmx-11
- opensuseGuest vmx-11
- oracleLinux64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- oracleLinuxGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- os2Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- other24xLinux64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- other24xLinuxGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- other26xLinux64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- other26xLinuxGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- other3xLinux64Guest vmx-10 vmx-11
- other3xLinuxGuest vmx-10 vmx-11
- otherGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- otherGuest64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- otherLinux64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- otherLinuxGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel2Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel3Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel3_64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel4Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel4_64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel5Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel5_64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel6Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel6_64Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- rhel7Guest vmx-09 vmx-10
- rhel7_64Guest vmx-09 vmx-10 vmx-11
- sles10Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- sles10_64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- sles11Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- sles11_64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- sles12Guest vmx-09 vmx-10
- sles12_64Guest vmx-09 vmx-10 vmx-11
- sles64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- slesGuest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- solaris10Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- solaris10_64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- solaris11_64Guest vmx-08 vmx-09 vmx-10 vmx-11
- solaris8Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- solaris9Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- ubuntu64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- ubuntuGuest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- unixWare7Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- vmkernel5Guest vmx-08 vmx-09 vmx-10 vmx-11
- vmkernel6Guest vmx-11
- vmkernelGuest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- win2000AdvServGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- win2000ProGuest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- win2000ServGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- win31Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- win95Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- win98Guest vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winLonghorn64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winLonghornGuest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNTGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetBusinessGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetDatacenter64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetDatacenterGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetEnterprise64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetEnterpriseGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetStandard64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetStandardGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winNetWebGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winVista64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winVistaGuest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winXPPro64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- winXPProGuest vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- windows7Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- windows7Server64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- windows7_64Guest vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11
- windows8Guest vmx-08 vmx-09 vmx-10 vmx-11
- windows8Server64Guest vmx-08 vmx-09 vmx-10 vmx-11
- windows8_64Guest vmx-08 vmx-09 vmx-10 vmx-11
- windows9Guest vmx-10 vmx-11
- windows9Server64Guest vmx-10 vmx-11
- windows9_64Guest vmx-10 vmx-11
+ asianux3 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ asianux3-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ asianux4 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ asianux4-64 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ asianux7-64 vmx-13
+ centos vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ centos-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ centos6 vmx-13
+ centos6-64 vmx-13
+ centos7-64 vmx-13
+ coreos-64 vmx-11 vmx-12 vmx-13
+ darwin vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin10 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin10-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin11 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin11-64 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin12-64 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin13-64 vmx-10 vmx-11 vmx-12 vmx-13
+ darwin14-64 vmx-11 vmx-12 vmx-13
+ darwin15-64 vmx-12 vmx-13
+ darwin16-64 vmx-13
+ debian10 vmx-13
+ debian10-64 vmx-13
+ debian4 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ debian4-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ debian5 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ debian5-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ debian6 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ debian6-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ debian7 vmx-10 vmx-11 vmx-12 vmx-13
+ debian7-64 vmx-10 vmx-11 vmx-12 vmx-13
+ debian8 vmx-11 vmx-12 vmx-13
+ debian8-64 vmx-11 vmx-12 vmx-13
+ debian9 vmx-13
+ debian9-64 vmx-13
+ dos vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ eComStation vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ eComStation2 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ fedora vmx-11 vmx-12 vmx-13
+ fedora-64 vmx-11 vmx-12 vmx-13
+ freebsd vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ freebsd-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ netware5 vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ netware6 vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ oes vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ openServer5 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ openServer6 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ opensuse vmx-11 vmx-12 vmx-13
+ opensuse-64 vmx-11 vmx-12 vmx-13
+ oracleLinux vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ oracleLinux-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ oracleLinux6 vmx-13
+ oracleLinux6-64 vmx-13
+ oracleLinux7-64 vmx-13
+ os2 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ other vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ other-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ other24xLinux vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ other24xLinux-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ other26xLinux vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ other26xLinux-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ other3xLinux vmx-10 vmx-11 vmx-12 vmx-13
+ other3xLinux-64 vmx-10 vmx-11 vmx-12 vmx-13
+ otherLinux vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ otherLinux-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel2 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel3 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel3-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel4 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel4-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel5 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel5-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel6 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel6-64 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ rhel7 vmx-09 vmx-10
+ rhel7-64 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ sles vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ sles-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ sles10 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ sles10-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ sles11 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ sles11-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ sles12 vmx-09 vmx-10
+ sles12-64 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ solaris10 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ solaris10-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ solaris11-64 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ solaris8 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ solaris9 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ ubuntu vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ ubuntu-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ unixWare7 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ vmkernel vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ vmkernel5 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ vmkernel6 vmx-11 vmx-12 vmx-13
+ vmkernel65 vmx-11 vmx-12 vmx-13
+ vmwarePhoton-64 vmx-13
+ win2000AdvServ vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ win2000Pro vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ win2000Serv vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ win31 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ win95 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ win98 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ windows7 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ windows7-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ windows7srv-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ windows8 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ windows8-64 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ windows8srv-64 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ windows9 vmx-10 vmx-11 vmx-12 vmx-13
+ windows9-64 vmx-10 vmx-11 vmx-12 vmx-13
+ windows9srv-64 vmx-10 vmx-11 vmx-12 vmx-13
+ winLonghorn vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winLonghorn-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetBusiness vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetDatacenter vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetDatacenter-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetEnterprise vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetEnterprise-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetStandard vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetStandard-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNetWeb vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winNT vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winVista vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winVista-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winXPPro vmx-03 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
+ winXPPro-64 vmx-04 vmx-07 vmx-08 vmx-09 vmx-10 vmx-11 vmx-12 vmx-13
=cut
@@ -2842,15 +2972,15 @@ sub _print_compatible_guest_os_hardware_
my $config_option_descriptor_info = $self->get_config_option_descriptor_info();
for my $version_key (sort keys %$config_option_descriptor_info) {
- my $config_option_guest_os_info = $self->get_config_option_guest_os_info($version_key);
- for my $guest_os (keys %$config_option_guest_os_info) {
- $guest_os_info->{$guest_os}{$version_key} = 1;
+ my @guest_os_ids = $self->get_supported_guest_os_ids($version_key);
+ for my $guest_os_id (@guest_os_ids) {
+ $guest_os_info->{$guest_os_id}{$version_key} = 1;
}
}
my $version_key_count = scalar(keys %$config_option_descriptor_info);
- for my $guest_os (sort keys %$guest_os_info) {
+ for my $guest_os (sort {lc($a) cmp lc($b)} keys %$guest_os_info) {
if ($print_code) {
print "'$guest_os' => { ";
for my $version_key (sort keys %{$guest_os_info->{$guest_os}}) {
Modified: vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm?rev=1787263&r1=1787262&r2=1787263&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/Provisioning/VMware/VMware.pm Thu Mar 16 22:31:45 2017
@@ -152,7 +152,19 @@ our %VM_OS_CONFIGURATION = (
"ethernet-virtualDev" => "e1000",
"scsi-virtualDev" => "lsiLogic",
"cpu_socket_limit" => 2,
+ },
+ "win10-x86" => {
+ "guestOS" => "windows9",
+ "ethernet-virtualDev" => "e1000e",
+ "scsi-virtualDev" => "lsisas1068",
+ "cpu_socket_limit" => 2,
},
+ "win10-x86_64" => {
+ "guestOS" => "windows9-64",
+ "ethernet-virtualDev" => "e1000",
+ "scsi-virtualDev" => "lsisas1068",
+ "cpu_socket_limit" => 2,
+ },
"win2003-x86" => {
"guestOS" => "winNetEnterprise",
"ethernet-virtualDev" => "vlance",
@@ -183,25 +195,33 @@ our %VM_OS_CONFIGURATION = (
"scsi-virtualDev" => "lsisas1068",
"cpu_socket_limit" => 64,
},
+ "win2016-x86_64" => {
+ "guestOS" => "windows9srv-64",
+ "ethernet-virtualDev" => "e1000e",
+ "scsi-virtualDev" => "lsisas1068",
+ "cpu_socket_limit" => 64,
+ },
+
# Default Windows configuration if Windows version isn't found above:
"windows-x86" => {
- "guestOS" => "winXPPro",
- "ethernet-virtualDev" => "vlance",
- "scsi-virtualDev" => "busLogic",
+ "guestOS" => "windows7",
+ "ethernet-virtualDev" => "e1000",
+ "scsi-virtualDev" => "lsisas1068",
},
"windows-x86_64" => {
- "guestOS" => "winXPPro-64",
+ "guestOS" => "windows7-64",
"ethernet-virtualDev" => "e1000",
- "scsi-virtualDev" => "lsiLogic",
+ "scsi-virtualDev" => "lsisas1068",
},
+
# Default configuration if OS is not Windows or Linux:
"default-x86" => {
- "guestOS" => "other",
- "ethernet-virtualDev" => "vlance",
- "scsi-virtualDev" => "busLogic",
+ "guestOS" => "otherlinux",
+ "ethernet-virtualDev" => "e1000",
+ "scsi-virtualDev" => "lsiLogic",
},
"default-x86_64" => {
- "guestOS" => "other-64",
+ "guestOS" => "otherlinux-64",
"ethernet-virtualDev" => "e1000",
"scsi-virtualDev" => "lsiLogic",
},
@@ -501,8 +521,65 @@ sub node_status {
notify($ERRORS{'DEBUG'}, 0, "request state is '$request_state_name', returning result from normal node_status checks: '$result'");
return $result;
}
+
+ my $vmx_file_path = $self->get_vmx_file_path();
+ if (!$vmx_file_path) {
+ notify($ERRORS{'WARNING'}, 0, "unable to determine vmx file path, returning 'RELOAD'");
+ return 'RELOAD';
+ }
+
+ #>>>>>>>>>>
+ # Experimental - Support for VMware ESXi's built in VNC server functionality
+ #my $reservation_id = $self->data->get_reservation_id();
+ #my $nathost_id = $self->data->get_nathost_id(0);
+ #if ($nathost_id) {
+ # my $connect_method_info = get_reservation_connect_method_info($reservation_id);
+ #
+ # my $vnc_connect_method_port_id;
+ #
+ # for my $connect_method_id (keys %$connect_method_info) {
+ # my $connect_method_name = $connect_method_info->{$connect_method_id}{name};
+ # if ($connect_method_name =~ /(VMWare|ESX)/i && $connect_method_name =~ /VNC/i) {
+ # my @vnc_connect_method_port_ids = keys(%{$connect_method_info->{$connect_method_id}{connectmethodport}});
+ # $vnc_connect_method_port_id = $vnc_connect_method_port_ids[0];
+ # last;
+ # }
+ # }
+ #
+ # if ($vnc_connect_method_port_id) {
+ # my $vmx_info = $self->get_vmx_info($vmx_file_path);
+ # if (!$vmx_info) {
+ # notify($ERRORS{'WARNING'}, 0, "unable to retrieve vmx file info, returning 'RELOAD'");
+ # return 'RELOAD';
+ # }
+ #
+ # my $vnc_password = $vmx_info->{'remotedisplay.vnc.password'};
+ # if (!defined($vnc_password)) {
+ # notify($ERRORS{'WARNING'}, 0, "VMware VNC connect method enabled, vmx file does NOT contain VNC password, returning 'RELOAD'");
+ # return 'RELOAD';
+ # }
+ #
+ # my $vnc_port = $vmx_info->{'remotedisplay.vnc.port'};
+ # if (!defined($vnc_port)) {
+ # notify($ERRORS{'WARNING'}, 0, "VMware VNC connect method enabled, vmx file does NOT contain VNC port, returning 'RELOAD'");
+ # return 'RELOAD';
+ # }
+ #
+ # if (!$self->data->set_reservation_password($vnc_password) || !update_reservation_password($reservation_id, $vnc_password)) {
+ # notify($ERRORS{'WARNING'}, 0, "VMware VNC connect method enabled, failed to override reservation password, returning 'RELOAD'");
+ # return 'RELOAD';
+ # }
+ #
+ # if (!insert_natport($reservation_id, $nathost_id, $vnc_connect_method_port_id, $vnc_port)) {
+ # notify($ERRORS{'WARNING'}, 0, "VMware VNC connect method enabled, failed to override NAT port, returning 'RELOAD'");
+ # return 'RELOAD';
+ # }
+ # }
+ #}
+ #<<<<<<<<<<
+
# If this is not a server request, no additional checks are necessary
- elsif (!$is_server_request) {
+ if (!$is_server_request) {
notify($ERRORS{'DEBUG'}, 0, "this is not a server request, returning result from normal node_status checks: '$result'");
return $result;
}
@@ -516,11 +593,7 @@ sub node_status {
return 'RELOAD';
}
- my $vmx_file_path = $self->get_vmx_file_path();
- if (!$vmx_file_path) {
- notify($ERRORS{'WARNING'}, 0, "unable to determine vmx file path, returning 'RELOAD'");
- return 'RELOAD';
- }
+
my @vm_virtual_disk_file_paths = $self->api->get_vm_virtual_disk_file_paths($vmx_file_path);
if (!@vm_virtual_disk_file_paths) {
@@ -840,6 +913,11 @@ sub capture {
# Set the imagemeta Sysprep value to 0 to prevent Sysprep from being used
$self->data->set_imagemeta_sysprep(0);
+ # Attempt to get the name of the OS running on the VM and tag the .vmx file with it
+ # The name will be saved in the reference .vmx file and can be used to select the most appropriate guest OS when loading future VMs
+ 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");
+
# 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");
@@ -861,6 +939,11 @@ sub capture {
}
}
+ # Tag the .vmx with the OS product name and architecture
+ $self->vmhost_os->append_text_file($vmx_file_path_original, "#os_product_name = \"$os_product_name\"") if (defined($os_product_name));
+ $self->vmhost_os->append_text_file($vmx_file_path_original, "#os_64_bit = \"$os_is_64_bit\"") if (defined($os_is_64_bit));
+
+
if ($vmprofile_vmdisk =~ /(local|dedicated)/ && $repository_mounted_on_vmhost) {
# See https://issues.apache.org/jira/browse/VCL-633
# Don't save copy on VM host's datastore if dedicated, datastore may run out of space
@@ -1700,20 +1783,24 @@ sub prepare_vmx {
"workingDir" => "$vmx_directory_path",
);
- #my $reservation_password = $self->data->get_reservation_password();
- #if (defined($reservation_password)) {
- # my $vnc_port = ($computer_id + 10000);
- # notify($ERRORS{'DEBUG'}, 0, "vnc access will be enabled, port: $vnc_port, password: $reservation_password");
- #
- # %vmx_parameters = (%vmx_parameters, (
- # "RemoteDisplay.vnc.enabled" => "TRUE",
- # "RemoteDisplay.vnc.password" => $reservation_password,
- # "RemoteDisplay.vnc.port" => $vnc_port,
- # ));
- #}
- #else {
- # notify($ERRORS{'DEBUG'}, 0, "vnc access will be not be enabled because the reservation password is not set");
+ #>>>>>>>>>>
+ ## Experimental - Support for VMware ESXi's built in VNC server functionality
+ #my $reservation_id = $self->data->get_reservation_id();
+ #my $vnc_password = $self->data->get_reservation_password(0);
+ #if (!defined($vnc_password)) {
+ # $vnc_password = getpw();
+ # update_reservation_password($reservation_id, $vnc_password);
+ # $self->data->set_reservation_password($vnc_password);
#}
+ #
+ #my $vnc_port = ($computer_id + 10000);
+ #notify($ERRORS{'DEBUG'}, 0, "vnc access will be enabled, port: $vnc_port, password: $vnc_password");
+ #%vmx_parameters = (%vmx_parameters, (
+ # "RemoteDisplay.vnc.enabled" => "TRUE",
+ # "RemoteDisplay.vnc.password" => $vnc_password,
+ # "RemoteDisplay.vnc.port" => $vnc_port,
+ #));
+ #<<<<<<<<<<
# Add the disk adapter parameters to the hash
if ($vm_disk_adapter_type =~ /ide/i) {
@@ -4793,6 +4880,18 @@ sub get_vm_virtual_hardware_version {
my $hardware_version;
+ # Attempt to get the highest version supported by the VMware host
+ if ($self->api->can('get_highest_vm_hardware_version_key')) {
+ my $hardware_version_key = $self->api->get_highest_vm_hardware_version_key();
+ if ($hardware_version_key) {
+ ($hardware_version) = $hardware_version_key =~ /-(\d+)$/g;
+ if ($hardware_version) {
+ notify($ERRORS{'DEBUG'}, 0, "retrieved highest VM hardware version supported on host: $hardware_version");
+ return $hardware_version;
+ }
+ }
+ }
+
# Attempt to retrieve the type from the reference vmx file for the image
my $reference_vmx_file_info = $self->get_reference_vmx_info();
if ($reference_vmx_file_info) {
@@ -4977,8 +5076,111 @@ sub get_vm_guest_os {
return;
}
- my $vm_os_configuration = $self->get_vm_os_configuration() || return;
- return $vm_os_configuration->{"guestOS"};
+ # Get the hard-coded default guest OS value
+ my $vm_os_configuration = $self->get_vm_os_configuration() || {};
+ my $default_guest_os = $vm_os_configuration->{'guestOS'} || 'other';
+
+ my $guest_os_determination = 'default value for image OS';
+
+ # Attempt to retrieve the guestOS from the reference vmx file for the image
+ my $reference_vmx_file_info = $self->get_reference_vmx_info();
+ if (!$reference_vmx_file_info) {
+ notify($ERRORS{'DEBUG'}, 0, "unable to dynamically determine VM guest OS value, reference .vmx file information could not be retrieved, returning $guest_os_determination: $default_guest_os");
+ return $default_guest_os;
+ }
+ my $refererence_guest_os = $reference_vmx_file_info->{guestos};
+ if ($refererence_guest_os) {
+ notify($ERRORS{'DEBUG'}, 0, "retrieved guestOS value from reference vmx file: $refererence_guest_os");
+ $default_guest_os = $refererence_guest_os;
+ $guest_os_determination = 'value from reference .vmx file';
+ }
+ else {
+ notify($ERRORS{'DEBUG'}, 0, "unable to dynamically determine VM guest OS value, guestOS value could not be retrieved from reference .vmx file, returning $guest_os_determination: $default_guest_os");
+ return $default_guest_os;
+ }
+
+
+ # Get the supported guest OS names from the API object
+ my @supported_guest_os_ids;
+ if ($self->api->can('get_supported_guest_os_ids')) {
+ @supported_guest_os_ids = $self->api->get_supported_guest_os_ids();
+ if (!@supported_guest_os_ids) {
+ notify($ERRORS{'DEBUG'}, 0, "unable to dynamically determine VM guest OS value, failed to retrieve list of supported guest OS names from the API object, returning $guest_os_determination: $default_guest_os");
+ return $default_guest_os;
+ }
+ }
+ else {
+ notify($ERRORS{'DEBUG'}, 0, "unable to dynamically determine VM guest OS value, API object does not implement a 'get_supported_guest_os_names' subroutine, returning $guest_os_determination: $default_guest_os");
+ return $default_guest_os;
+ }
+
+ # Get the 'os_product_name' value from the reference .vmx file if it exists
+ # This gets added when a VM is loaded if it can be determined from the running OS
+ my $captured_os_product_name = $reference_vmx_file_info->{'os_product_name'};
+ if (!$captured_os_product_name) {
+ notify($ERRORS{'DEBUG'}, 0, "unable to dynamically determine VM guest OS value, reference .vmx file does not contain an 'os_product_name' key, returning $guest_os_determination: $default_guest_os");
+ return $default_guest_os;
+ }
+
+ my $captured_os_64_bit = $reference_vmx_file_info->{'os_64_bit'} || 1;
+ my $guest_os_64_bit_section = ($captured_os_64_bit ? '-64' : '');
+
+ # $captured_os_product_name should like like:
+ # CentOS release 6.5 (Final) : centos-64
+ # Red Hat Enterprise Linux Server release 7.2 (Maipo) : rhel7-64
+ # Ubuntu 16.04.1 LTS : ubuntu-64
+ # Windows 7 Enterprise : windows7-64
+ # Windows 8 Enterprise : windows8-64
+ # Windows 10 Enterprise : windows9-64
+ # Windows Server 2008 R2 Datacenter : windows7srv-64
+ # Windows Server 2012 R2 Datacenter : windows8srv-64
+ my $image_os_product_patterns = {
+ '^centos[^\d]*[4567]' => '"centos' . $guest_os_64_bit_section . '"',
+ '^(?:red hat|rh)[^\d]*(\d+)' => '"rhel$1' . $guest_os_64_bit_section . '"',
+ '^ubuntu' => '"ubuntu' . $guest_os_64_bit_section . '"',
+ '^windows[^\d]*(7|8)' => '"windows$1' . $guest_os_64_bit_section . '"',
+ '^windows[^\d]*10' => '"windows9' . $guest_os_64_bit_section . '"',
+ '^windows[^\d]*2008' => '"windows7srv' . $guest_os_64_bit_section . '"',
+ '^windows[^\d]*2012' => '"windows8srv' . $guest_os_64_bit_section . '"',
+ '^windows[^\d]*2016' => '"windows9srv' . $guest_os_64_bit_section . '"',
+ };
+
+ my $guest_os;
+ for my $image_os_product_pattern (keys %$image_os_product_patterns) {
+ my $guest_os_value = $image_os_product_patterns->{$image_os_product_pattern};
+ if ($captured_os_product_name =~ /$image_os_product_pattern/i) {
+ $guest_os = eval $guest_os_value;
+
+ notify($ERRORS{'DEBUG'}, 0, "match:\n" .
+ "image OS product : $captured_os_product_name\n" .
+ "pattern : $image_os_product_pattern\n" .
+ "guest OS value : $guest_os_value\n" .
+ "guest OS : $guest_os"
+ );
+
+ last;
+ }
+ else {
+ notify($ERRORS{'DEBUG'}, 0, "no match:\n" .
+ "image OS product : $captured_os_product_name\n" .
+ "pattern : $image_os_product_pattern\n" .
+ "guest OS value : $guest_os_value"
+ );
+ }
+ }
+
+ if (!defined($guest_os)) {
+ notify($ERRORS{'DEBUG'}, 0, "unable to dynamically determine VM guest OS value, did not find a pattern matching OS product name: $captured_os_product_name, returning $guest_os_determination: $default_guest_os");
+ return $default_guest_os;
+ }
+ elsif (!grep { $guest_os eq $_ } @supported_guest_os_ids) {
+ notify($ERRORS{'DEBUG'}, 0, "unable to dynamically determine VM guest OS value, '$guest_os' does not match any supported guest OS names, returning $guest_os_determination: $default_guest_os");
+ return $default_guest_os;
+ }
+ else {
+ notify($ERRORS{'DEBUG'}, 0, "dynamically determined VM guest OS value: '$guest_os'");
+ return $guest_os;
+ }
}
#/////////////////////////////////////////////////////////////////////////////
@@ -5003,7 +5205,6 @@ sub get_vm_cpu_socket_limit {
return $vm_os_configuration->{"cpu_socket_limit"};
}
-
#/////////////////////////////////////////////////////////////////////////////
=head2 get_vm_ethernet_adapter_type