| #!/usr/bin/perl -w |
| ############################################################################### |
| # $Id$ |
| ############################################################################### |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| ############################################################################### |
| |
| =head1 NAME |
| |
| VCL::Module::OS::Windows::Version_6::8.pm - VCL module to support deployment of Windows 8.x operating systems |
| |
| =head1 DESCRIPTION |
| |
| This module provides support for the deployment of Windows 8.x operating systems. |
| |
| =cut |
| |
| ############################################################################### |
| package VCL::Module::OS::Windows::Version_6::8; |
| |
| # Specify the lib path using FindBin |
| use FindBin; |
| use lib "$FindBin::Bin/../../../../.."; |
| |
| # Configure inheritance |
| use base qw(VCL::Module::OS::Windows::Version_6); |
| |
| # Specify the version of this module |
| our $VERSION = '2.5.1'; |
| |
| # Specify the version of Perl to use |
| use 5.008000; |
| |
| use strict; |
| use warnings; |
| use diagnostics; |
| |
| use VCL::utils; |
| |
| ############################################################################### |
| |
| =head1 CLASS VARIABLES |
| |
| =cut |
| |
| =head2 $SOURCE_CONFIGURATION_DIRECTORY |
| |
| Data type : Scalar |
| Description : Location on management node of script/utilty/configuration |
| files needed to configure the OS. This is normally the |
| directory under the 'tools' directory specific to this OS. For |
| Windows 8, the directory is: |
| tools/Windows_8 |
| |
| =cut |
| |
| our $SOURCE_CONFIGURATION_DIRECTORY = "$TOOLS/Windows_8"; |
| |
| ############################################################################### |
| |
| =head1 OBJECT METHODS |
| |
| =cut |
| |
| #////////////////////////////////////////////////////////////////////////////// |
| |
| =head2 pre_capture |
| |
| Parameters : Hash containing 'end_state' key (optional) |
| Returns : boolean |
| Description : Performs the steps necessary before a Windows 8.x image is |
| captured. |
| |
| =cut |
| |
| sub pre_capture { |
| my $self = shift; |
| my $args = shift; |
| if (ref($self) !~ /windows/i) { |
| notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method"); |
| return; |
| } |
| |
| my $computer_node_name = $self->data->get_computer_node_name(); |
| |
| # Call parent class's pre_capture subroutine |
| notify($ERRORS{'OK'}, 0, "calling parent class pre_capture() subroutine"); |
| if (!$self->SUPER::pre_capture($args)) { |
| notify($ERRORS{'WARNING'}, 0, "failed to execute parent class pre_capture() subroutine"); |
| return; |
| } |
| |
| my $end_state = $self->{end_state} || 'off'; |
| |
| notify($ERRORS{'OK'}, 0, "beginning Windows 8 image capture preparation tasks, end state: $end_state"); |
| |
| # Get the node configuration directory |
| my $node_configuration_directory = $self->get_node_configuration_directory(); |
| if (!$node_configuration_directory) { |
| notify($ERRORS{'WARNING'}, 0, "node configuration directory could not be determined"); |
| return; |
| } |
| |
| # Set the DevicePath registry key |
| # This is used to locate device drivers |
| if (!$self->set_device_path_key()) { |
| notify($ERRORS{'WARNING'}, 0, "failed to set the DevicePath registry key"); |
| return; |
| } |
| |
| # Make sure the 'VCL Update Cygwin' task doesn't exist or they will conflict |
| $self->delete_scheduled_task('VCL Update Cygwin'); |
| |
| # Create a scheduled task to run post_load.cmd when the image boots |
| my $task_command = "$node_configuration_directory/Scripts/post_load.cmd > $node_configuration_directory/Logs/post_load.log"; |
| my $task_user = 'root'; |
| my $task_password = $WINDOWS_ROOT_PASSWORD; |
| if (!$self->create_startup_scheduled_task('VCL Post Load', $task_command, $task_user, $task_password)) { |
| notify($ERRORS{'WARNING'}, 0, "failed to create 'VCL Post Load' scheduled task"); |
| return; |
| } |
| |
| # Set the sshd service startup mode to disabled so that it does not start up until properly configured |
| if (!$self->set_service_startup_mode('sshd', 'disabled') && !$self->set_service_startup_mode('cygsshd', 'disabled')) { |
| notify($ERRORS{'WARNING'}, 0, "sshd service could not be disabled before shutting down computer"); |
| return; |
| } |
| |
| # Prepare the computer for Sysprep or prepare the non-Sysprep post_load steps |
| if ($self->data->get_imagemeta_sysprep()) { |
| if (!$self->run_sysprep()) { |
| notify($ERRORS{'WARNING'}, 0, "capture preparation failed, failed to run Sysprep"); |
| return; |
| } |
| } |
| else { |
| if ($end_state eq 'off') { |
| if (!$self->shutdown(1)) { |
| notify($ERRORS{'WARNING'}, 0, "failed to shut down computer"); |
| return; |
| } |
| } |
| } |
| |
| notify($ERRORS{'OK'}, 0, "completed Windows 8 image capture preparation tasks"); |
| return 1; |
| } ## end sub pre_capture |
| |
| #////////////////////////////////////////////////////////////////////////////// |
| |
| 1; |
| __END__ |
| |
| =head1 SEE ALSO |
| |
| L<http://cwiki.apache.org/VCL/> |
| |
| =cut |