managementnode/lib/VCL/Module/OS/Windows/Version_6/8.pm (66 lines of code) (raw):

#!/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