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 2015/02/05 23:59:01 UTC
svn commit: r1657709 - /vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
Author: arkurth
Date: Thu Feb 5 22:59:01 2015
New Revision: 1657709
URL: http://svn.apache.org/r1657709
Log:
VCL-584
Fixed problem with Windows.pm::set_static_public_address. It was trying to ping the IP address before setting it. It it got a response it failed -- even if the response came from the current computer which should have the address. Added code to retrieve the current public IP address before attempting ping.
Other
Updated Windows.pm::get_installed_applications to check both the 32 and 64-bit registry locations.
Modified:
vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
Modified: vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm?rev=1657709&r1=1657708&r2=1657709&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm Thu Feb 5 22:59:01 2015
@@ -2894,7 +2894,7 @@ sub reg_delete {
$delete_registry_command = $system32_path . "/reg.exe DELETE \"$registry_key\" /f";
$registry_value = '*';
}
- my ($delete_registry_exit_status, $delete_registry_output) = $self->execute($delete_registry_command, 1);
+ my ($delete_registry_exit_status, $delete_registry_output) = $self->execute($delete_registry_command, 0);
if (defined($delete_registry_exit_status) && $delete_registry_exit_status == 0) {
notify($ERRORS{'DEBUG'}, 0, "deleted registry key: $registry_key, value: $registry_value, output:\n" . join("\n", @$delete_registry_output));
}
@@ -7414,9 +7414,21 @@ sub get_installed_applications {
my $uninstall_key = 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall';
my $registry_data = $self->reg_query($uninstall_key);
- #notify($ERRORS{'DEBUG'}, 0, "retrieved installed application registry data: " . format_data($registry_data));
+ if (!$registry_data) {
+ notify($ERRORS{'WARNING'}, 0, "unable to retrieve installed applications, failed to query registry: $uninstall_key");
+ return;
+ }
+
+ if ($self->is_64_bit()) {
+ my $uninstall_key_32 = 'HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall';
+ my $registry_data_32 = $self->reg_query($uninstall_key_32);
+ if ($registry_data_32) {
+ $registry_data = {%$registry_data, %$registry_data_32};
+ }
+ }
my $installed_products = {};
+ my @display_names;
# Loop through registry keys
REGISTRY_KEY: for my $registry_key (keys %$registry_data) {
@@ -7429,40 +7441,50 @@ sub get_installed_applications {
notify($ERRORS{'WARNING'}, 0, "unable to parse product key from registry key: $registry_key");
next REGISTRY_KEY;
}
- #notify($ERRORS{'DEBUG'}, 0, "product key: $product_key");
+ elsif (!scalar(keys %{$registry_data->{$registry_key}})) {
+ #notify($ERRORS{'DEBUG'}, 0, "registry key does not contain any information: $registry_key");
+ next REGISTRY_KEY;
+ }
+
+ my $display_name = $registry_data->{$registry_key}{DisplayName} || $registry_data->{$registry_key}{'(Default)'};
+ if (!$display_name) {
+ next REGISTRY_KEY;
+ }
if ($regex_filter) {
if ($product_key =~ /$regex_filter/i) {
- notify($ERRORS{'DEBUG'}, 0, "found product key matching filter '$regex_filter':\n$product_key");
+ notify($ERRORS{'DEBUG'}, 0, "found product matching filter '$regex_filter':\n$product_key");
$installed_products->{$product_key} = $registry_data->{$registry_key};
+ push @display_names, $display_name;
next REGISTRY_KEY;
}
- foreach my $info_key (keys %{$registry_data->{$product_key}}) {
+ foreach my $info_key (keys %{$registry_data->{$registry_key}}) {
my $info_value = $registry_data->{$registry_key}{$info_key} || '';
if ($info_value =~ /$regex_filter/i) {
- notify($ERRORS{'DEBUG'}, 0, "found value matching filter '$regex_filter':\n{$product_key}{$info_key} = '$info_value'");
+ #notify($ERRORS{'DEBUG'}, 0, "found value matching filter '$regex_filter':\n{$product_key}{$info_key} = '$info_value'");
$installed_products->{$product_key} = $registry_data->{$registry_key};
+ push @display_names, $display_name;
next REGISTRY_KEY;
}
else {
- notify($ERRORS{'DEBUG'}, 0, "value does not match filter '$regex_filter':\n{$product_key}{$info_key} = '$info_value'");
- next REGISTRY_KEY;
+ #notify($ERRORS{'DEBUG'}, 0, "value does not match filter '$regex_filter':\n{$product_key}{$info_key} = '$info_value'");
}
}
}
else {
$installed_products->{$product_key} = $registry_data->{$registry_key};
+ push @display_names, $display_name;
}
}
my $installed_product_count = scalar(keys(%$installed_products));
if ($installed_product_count) {
if ($regex_filter) {
- notify($ERRORS{'DEBUG'}, 0, "found $installed_product_count installed applications matching filter '$regex_filter':\n" . format_data($installed_products));
+ notify($ERRORS{'DEBUG'}, 0, "found $installed_product_count installed applications matching filter '$regex_filter':\n" . join("\n", sort @display_names));
}
else {
- notify($ERRORS{'DEBUG'}, 0, "found $installed_product_count installed applications:\n" . format_data($installed_products));
+ notify($ERRORS{'DEBUG'}, 0, "found $installed_product_count installed applications:\n" . join("\n", sort @display_names));
}
}
else {
@@ -8348,9 +8370,8 @@ sub set_static_public_address {
my $system32_path = $self->get_system32_path() || return;
my $computer_name = $self->data->get_computer_short_name();
-
- my $server_request_id = $self->data->get_server_request_id();
- my $server_request_fixed_ip = $self->data->get_server_request_fixed_ip();
+ my $server_request_id = $self->data->get_server_request_id();
+ my $server_request_fixed_ip = $self->data->get_server_request_fixed_ip();
# Make sure public IP configuration is static or this is a server request
my $ip_configuration = $self->data->get_management_node_public_ip_configuration();
@@ -8389,16 +8410,20 @@ EOF
notify($ERRORS{'WARNING'}, 0, "failed to retrieve required network configuration for $computer_name:\n$configuration_info_string");
return;
}
+
+ my $current_public_ip_address = $self->get_public_ip_address();
+ if ($current_public_ip_address eq $computer_public_ip_address) {
+ notify($ERRORS{'DEBUG'}, 0, "public IP address of $computer_name is already set to $current_public_ip_address, attempting to set it again in case any parameters changed");
+ }
else {
- notify($ERRORS{'OK'}, 0, "attempting to set static public IP address on $computer_name:\n$configuration_info_string");
+ # Try to ping the address to make sure it is not in use
+ if (_pingnode($computer_public_ip_address)) {
+ notify($ERRORS{'WARNING'}, 0, "ip_address $computer_public_ip_address is pingable, can not assign to $computer_name ");
+ return;
+ }
}
-
- # Try to ping address to make sure it's available
- # FIXME -- need to add other tests for checking ip_address is or is not available.
- if (_pingnode($computer_public_ip_address)) {
- notify($ERRORS{'WARNING'}, 0, "ip_address $computer_public_ip_address is pingable, can not assign to $computer_name ");
- return;
- }
+
+ notify($ERRORS{'OK'}, 0, "attempting to set static public IP address on $computer_name:\n$configuration_info_string");
my $primary_dns_server_address = shift @dns_servers;
notify($ERRORS{'DEBUG'}, 0, "primary DNS server address: $primary_dns_server_address\nalternate DNS server address(s):\n" . (join("\n", @dns_servers) || '<none>'));