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