blob: 403c96ce1fad950b1bf32747fec9b4ba6cd8b009 [file] [log] [blame]
#!/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