Perl Config Sync
Problem this snippet solves:
This sample illustrates how to use the ConfigSync interfaces in perl.
Code :
#!/usr/bin/perl
#----------------------------------------------------------------------------
# The contents of this file are subject to the "END USER LICENSE AGREEMENT FOR F5
# Software Development Kit for iControl"; you may not use this file except in
# compliance with the License. The License is included in the iControl
# Software Development Kit.
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# The Original Code is iControl Code and related documentation
# distributed by F5.
#
# The Initial Developer of the Original Code is F5 Networks,
# Inc. Seattle, WA, USA. Portions created by F5 are Copyright (C) 1996-2004 F5 Networks,
# Inc. All Rights Reserved. iControl (TM) is a registered trademark of F5 Networks, Inc.
#
# Alternatively, the contents of this file may be used under the terms
# of the GNU General Public License (the "GPL"), in which case the
# provisions of GPL are applicable instead of those above. If you wish
# to allow use of your version of this file only under the terms of the
# GPL and not to allow others to use your version of this file under the
# License, indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by the GPL.
# If you do not delete the provisions above, a recipient may use your
# version of this file under either the License or the GPL.
#----------------------------------------------------------------------------
#use SOAP::Lite + trace => qw(method debug);
use SOAP::Lite;
use MIME::Base64;
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
$| = 1;
BEGIN { push (@INC, ".."); }
use iControlTypeCast;
$sHost = $ARGV[0];
$sPort = $ARGV[1];
$sUID = $ARGV[2];
$sPWD = $ARGV[3];
$sCOMMAND = $ARGV[4];
$sArg1 = $ARGV[5];
$sArg2 = $ARGV[6];
#----------------------------------------------------------------------------
# Validate Arguments
#----------------------------------------------------------------------------
my $sConfigName = "";
my $sLocalFile = "";
my $sSaveMode = "";
my $sProtocol;
my $defaultChunkSize = 65536/2;
my $FileChainType =
{
0 => "FILE_UNDEFINED",
1 => "FILE_FIRST",
2 => "FILE_MIDDLE",
3 => "FILE_UNUSED",
4 => "FILE_LAST",
5 => "FILE_FIRST_AND_LAST",
};
my $FileChainTypeValue =
{
"FILE_UNDEFINED" => 0,
"FILE_FIRST" => 1,
"FILE_MIDDLE" => 2,
"FILE_UNUSED" => 3,
"FILE_LAST" => 4,
"FILE_FIRST_AND_LAST" => 5,
};
my $FILE_UNDEFINED = "FILE_UNDEFINED";
my $FILE_FIRST = "FILE_FIRST";
my $FILE_MIDDLE = "FILE_MIDDLE";
my $FILE_UNUSED = "FILE_UNUSED";
my $FILE_LAST = "FILE_LAST";
my $FILE_FIRST_AND_LAST = "FILE_FIRST_AND_LAST";
my $SaveMode =
{
0 => "SAVE_FULL",
1 => "SAVE_HIGH_LEVEL_CONFIG",
2 => "SAVE_BASE_LEVEL_CONFIG",
};
my $SaveModeValue =
{
"SAVE_FULL" => 0,
"SAVE_HIGH_LEVEL_CONFIG" => 1,
"SAVE_BASE_LEVEL_CONFIG" => 2,
};
my $SAVE_FULL = "SAVE_FULL";
my $SAVE_HIGH_LEVEL_CONFIG = "SAVE_HIGH_LEVEL_CONFIG";
my $SAVE_BASE_LEVEL_CONFIG = "SAVE_BASE_LEVEL_CONFIG";
my $SyncMode =
{
0 => "CONFIGSYNC_BASIC",
1 => "CONFIGSYNC_RUNNING",
2 => "CONFIGSYNC_ALL",
};
my $SyncModeValue =
{
"CONFIGSYNC_BASIC" => 0,
"CONFIGSYNC_RUNNING" => 1,
"CONFIGSYNC_ALL" => 2,
};
my $CONFIGSYNC_BASIC = "CONFIGSYNC_BASIC";
my $CONFIGSYNC_RUNNING = "CONFIGSYNC_RUNNING";
my $CONFIGSYNC_ALL = "CONFIGSYNC_ALL";
#----------------------------------------------------------------------------
# Verify connection info
#----------------------------------------------------------------------------
if ( ($sHost eq "") or ($sUID eq "") or ($sPWD eq "") )
{
&usage();
}
if ( ($sPort ne "80") and ($sPort ne "8080") )
{
$sProtocol = "https";
}
else
{
$sProtocol = "http";
}
#----------------------------------------------------------------------------
# Transport Information
#----------------------------------------------------------------------------
sub SOAP::Transport::HTTP::Client::get_basic_credentials
{
return "$sUID" => "$sPWD";
}
$ConfigSync = SOAP::Lite
-> uri('urn:iControl:System/ConfigSync')
-> readable(1)
-> proxy("$sProtocol://$sHost:$sPort/iControl/iControlPortal.cgi");
eval { $ConfigSync->transport->http_request->header
(
'Authorization' =>
'Basic ' . MIME::Base64::encode("$sUID:$sPWD", '')
); };
&checkParameters();
#----------------------------------------------------------------------------
# Get Command Parameters
#----------------------------------------------------------------------------
sub getParamsAndGo
{
my $theCommandID = $_[0];
if ( 1 eq $theCommandID )
{
print " Filename for configuration backup (empty for default): ";
chomp ($configName = );
if ( "" eq $configName )
{
$configName = generateConfigName();
}
$localFile = $sConfigName;
print "Backing up configuration $configName\n";
$success = &backupConfiguration($configName, $localFile, 1);
if ( 1 == $success )
{
print "Backup succeeded\n";
}
else
{
print "Backup failed\n";
}
}
elsif ( 2 eq $theCommandID)
{
print " Config back up file to restore: ";
chomp ($sConfigName = );
print " Sync devices after install? (y/n): ";
chomp ($sDoSync = );
$sLocalFile = $sConfigName;
$sSaveMode = "full";
print "Restoring configuration $sLocalFile\n";
$success = &restoreConfiguration($sLocalFile, $sDoSync, 1);
if ( 1 == $success )
{
print "Restore succeeded\n";
}
else
{
print "Restore failed\n";
}
}
elsif ( 3 eq $theCommandID )
{
usage();
}
else
{
print "Synching\n\n";
}
}
#----------------------------------------------------------------------------
# Check Parameters
#----------------------------------------------------------------------------
sub checkParameters
{
if
(
("list" ne $sCOMMAND) and
("checksum" ne $sCOMMAND) and
("delete" ne $sCOMMAND) and
("save" ne $sCOMMAND) and
("install" ne $sCOMMAND) and
("rollback" ne $sCOMMAND) and
("download" ne $sCOMMAND) and
("upload" ne $sCOMMAND) and
("download-file" ne $sCOMMAND) and
("upload-file" ne $sCOMMAND) and
("backup" ne $sCOMMAND) and
("restore" ne $sCOMMAND) and
("sync" ne $sCOMMAND)
)
{
&usage();
}
if ( "list" eq $sCOMMAND )
{
&listConfigurations();
}
if ( "checksum" eq $sCOMMAND )
{
&checksumConfiguration($sArg1);
}
if ( "delete" eq $sCOMMAND )
{
&deleteConfiguration($sArg1);
}
if ( "save" eq $sCOMMAND )
{
if ( "" eq $sArg1 )
{
$sArg1 = generateConfigName();
}
&saveConfiguration($sArg1, &saveModeFromArg($sArg2));
}
if ( "install" eq $sCOMMAND )
{
&installConfiguration($sArg1);
}
if ( "rollback" eq $sCOMMAND )
{
&rollbackConfiguration();
}
if ( "download" eq $sCOMMAND )
{
&downloadConfiguration($sArg1, $sArg2);
}
if ( "upload" eq $sCOMMAND )
{
&uploadConfiguration($sArg1, $sArg2);
}
if ( "download-file" eq $sCOMMAND )
{
&downloadFile($sArg1, $sArg2);
}
if ( "upload-file" eq $sCOMMAND )
{
&uploadFile($sArg1, $sArg2);
}
if ( "backup" eq $sCOMMAND )
{
$configName = generateConfigName();
$localFile = $configName;
print "Backing up configuration $configName\n";
$success = &backupConfiguration($configName, $localFile, 1);
if ( 1 == $success )
{
print "Backup succeeded\n";
}
else
{
print "Backup failed\n";
}
}
if ( "restore" eq $sCOMMAND )
{
print "Restoring configuration $sArg1\n";
$success = &restoreConfiguration($sArg1, 0, 1);
if ( 1 == $success )
{
print "Restore succeeded\n";
}
else
{
print "Restore failed\n";
}
}
if ( "sync" eq $sCOMMAND )
{
&syncConfiguration(&syncModeFromArg($sArg1));
}
}
#----------------------------------------------------------------------------
# sub usage()
#----------------------------------------------------------------------------
sub usage()
{
my ($subKey) = (@_);
print "Usage: ConfigSync.pl host port uid pwd command [command_args]\n";
print " command\n";
print " --------\n";
if ( ("" eq $subKey) or ("list" eq $subKey) )
{
print " list\n";
print " Lists available configuration files on the server.\n";
print " Args: None\n";
print "\n";
}
if ( ("" eq $subKey) or ("checksum" eq $subKey) )
{
# print " checksum config_name\n";
# print " Retrieves the checksum for the given configuration file.\n";
# print "\n";
}
if ( ("" eq $subKey) or ("save" eq $subKey) )
{
print " save Creates a snapshot of the current configuration.\n";
print " Args: config_name [full | high | base]\n";
print "\n";
}
if ( ("" eq $subKey) or ("install" eq $subKey) )
{
print " install Installs a given configuration file.\n";
print " Args: config_name\n";
print "\n";
}
if ( ("" eq $subKey) or ("rollback" eq $subKey) )
{
print " rollback Performs a rollback to the last loaded configuration.\n";
print " Args: None\n";
print "\n";
}
if ( ("" eq $subKey) or ("delete" eq $subKey) )
{
print " delete Deletes a given configuration file.\n";
print " Args: config_name\n";
print "\n";
}
if ( ("" eq $subKey) or ("download" eq $subKey) )
{
print " download Downloads a given configuration file from the server.\n";
print " Args: config_name local_file\n";
print "\n";
}
if ( ("" eq $subKey) or ("upload" eq $subKey) )
{
print " upload Uploads a configuration to the server from the client machine.\n";
print " Args: local_file config_name\n";
print "\n";
}
if ( ("" eq $subKey) or ("download-file" eq $subKey) )
{
print "download-file Downloads a given file file from the server.\n";
print " Args: remote_file local_file\n";
print "\n";
}
if ( ("" eq $subKey) or ("upload-file" eq $subKey) )
{
print " upload-file Uploads a file to the server from the client machine.\n";
print " Args: local_file remote_file\n";
print "\n";
}
if ( ("" eq $subKey) or ("sync" eq $subKey) )
{
print " sync Signals a configuration sync between HA devices.\n";
print " Args: [basic | running | all]\n";
print "\n";
}
if ( ("" eq $subKey) or ("backup" eq $subKey) )
{
print " backup Saves configuration and downloads the configuration file.\n";
print " Args: None\n";
print "\n";
}
if ( ("" eq $subKey) or ("restore" eq $subKey) )
{
print " restore Restores a configuration from the client machine.\n";
print " Args: local_file\n";
}
exit(1);
}
#============================================================================
#
# Helper Methods
#
#============================================================================
#----------------------------------------------------------------------------
# sub generateConfigName
#----------------------------------------------------------------------------
sub generateConfigName()
{
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$sName = sprintf("%s-%04d%02d%02d_%02d%02d%02d.ucs", $sHost, $year, $mon, $mday, $hour, $min, $sec);
return $sName;
}
#----------------------------------------------------------------------------
# sub saveModeFromArg
#----------------------------------------------------------------------------
sub saveModeFromArg()
{
my ($sSaveModeArg) = (@_);
my $sSaveMode = $SAVE_FULL;
if ( ("full" ne $sSaveModeArg) and ("high" ne $sSaveModeArg) and ("base" ne $sSaveModeArg) )
{
$sSaveModeArg = "full";
}
if ( "full" eq $sSaveModeArg )
{
$sSaveMode = $SAVE_FULL;
}
elsif ( "high" eq $sSaveModeArg )
{
$sSaveMode = $SAVE_HIGH_LEVEL_CONFIG;
}
elsif ( "base" eq $sSaveModeArg )
{
$sSaveMode = $SAVE_BASE_LEVEL_CONFIG;
}
return $sSaveMode;
}
#----------------------------------------------------------------------------
# syncModeFromArg
#----------------------------------------------------------------------------
sub syncModeFromArg()
{
my $sSyncModeArg = @_;
my $sSyncMode = $CONFIGSYNC_ALL;
if ( ("basic" ne $sSyncModeArg) and ("running" ne $sSyncModeArg) and ("all" ne $sSyncModeArg) )
{
$sSyncModeArg = "all";
}
if ( "all" eq $sSyncModeArg )
{
$sSyncMode = $CONFIGSYNC_ALL;
}
if ( "basic" eq $sSyncModeArg )
{
$sSyncMode = $CONFIGSYNC_BASIC;
}
if ( "running" eq $sSyncModeArg )
{
$sSyncMode = $CONFIGSYNC_RUNNING;
}
return $sSyncMode;
}
#============================================================================
#
# Command Methods
#
#============================================================================
#----------------------------------------------------------------------------
# sub listConfigurations
#----------------------------------------------------------------------------
sub listConfigurations()
{
$soap_response = $ConfigSync->get_configuration_list();
if ( $soap_response->fault )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
else
{
my @ConfigFileEntryList = @{$soap_response->result};
print "Available Configurations:\n";
my $configNumber = 0;
foreach my $ConfigFileEntry (@ConfigFileEntryList)
{
print " (",
substr($ConfigFileEntry->{"file_datetime"}, 0, -1),
") : '",
$ConfigFileEntry->{"file_name"},
"'\n";
$configNumber++;
}
}
}
#----------------------------------------------------------------------------
# sub checksumConfiguration
#----------------------------------------------------------------------------
sub checksumConfiguration()
{
my ($configName, $quiet) = (@_);
my $success = 0;
if ( "" eq $configName )
{
&usage("checksum");
}
eval
{
$soap_response = $ConfigSync->get_configuration_checksum
(
SOAP::Data->name(filename => $configName)
);
};
if ( $soap_response and $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
}
else
{
$success = 1;
$checksum = $soap_response->result;
if ( 1 != $quiet )
{
print "Configuration '$sConfigName' checksum: '$checksum'\n";
}
}
return $success;
}
#----------------------------------------------------------------------------
# sub deleteConfiguration
#----------------------------------------------------------------------------
sub deleteConfiguration()
{
my ($configName, $quiet) = (@_);
my $success = 0;
if ( "" eq $configName )
{
&usage("delete");
}
eval
{
$soap_response = $ConfigSync->delete_configuration
(
SOAP::Data->name(filename => $configName)
);
};
if ( $soap_response and $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
}
else
{
$success = 1;
if ( 1 != $quiet )
{
print "Configuration '$configName' deleted successfully!\n";
}
}
return $success;
}
#----------------------------------------------------------------------------
# sub saveConfiguration
#----------------------------------------------------------------------------
sub saveConfiguration()
{
my ($configName, $saveMode, $quiet) = (@_);
my $success = 0;
if ( ("" eq $configName) or ("" eq $saveMode) )
{
&usage("save");
}
$soap_response = $ConfigSync->save_configuration
(
SOAP::Data->name(filename => $configName),
SOAP::Data->name(save_flag => $saveMode)
);
if ( $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
}
else
{
$success = 1;
if ( 1 != $quiet )
{
print "Configuration '$configName' saved successfully!\n";
}
}
return $success;
}
#----------------------------------------------------------------------------
# sub installConfiguration
#----------------------------------------------------------------------------
sub installConfiguration()
{
my ($configName, $quiet) = (@_);
my $success = 0;
if ( "" eq $configName )
{
&usage("install");
}
eval
{
$soap_response = $ConfigSync->install_configuration
(
SOAP::Data->name(filename => $configName)
);
};
if ( $soap_response and $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
}
else
{
$success = 1;
if ( 1 != $quiet )
{
print "Configuration '$configName' installed successfully!\n";
}
}
return $success;
}
#----------------------------------------------------------------------------
# sub rollbackConfiguration
#----------------------------------------------------------------------------
sub rollbackConfiguration()
{
my ($quiet) = (@_);
my $success = 0;
eval
{
$soap_response = $ConfigSync->rollback_configuration();
};
if ( $soap_response and $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
}
else
{
$success = 1;
if ( 1 != $quiet )
{
print "Configuration rollback successful!\n";
}
}
return $success;
}
#----------------------------------------------------------------------------
# sub downloadConfiguration
#----------------------------------------------------------------------------
sub downloadConfiguration()
{
my ($configName, $localFile, $quiet) = (@_);
$success = 0;
if ( "" eq $localFile )
{
$localFile = $configName;
}
if ( "" eq $configName )
{
&usage("download");
}
open (LOCAL_FILE, ">$localFile") or die("Can't open $localFile for output: $!");
binmode(LOCAL_FILE);
my $file_offset = 0;
my $chunk_size = $defaultChunkSize;
my $chain_type = $FILE_UNDEFINED;
my $bContinue = 1;
print "\n";
while ( 1 == $bContinue )
{
$soap_response = $ConfigSync->download_configuration
(
SOAP::Data->name(config_name => $configName),
SOAP::Data->name(chunk_size => $chunk_size),
SOAP::Data->name(file_offset => $file_offset)
);
if ( $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
$bContinue = 0;
}
else
{
$FileTransferContext = $soap_response->result;
$file_data = $FileTransferContext->{"file_data"};
$chain_type = $FileTransferContext->{"chain_type"};
@params = $soap_response->paramsout;
$file_offset = @params[0];
# Append Data to File
print LOCAL_FILE $file_data;
# if ( 1 != $quiet )
# {
print "Bytes Transferred: $file_offset\n";
# }
if ( ("FILE_LAST" eq $chain_type) or
("FILE_FIRST_AND_LAST" eq $chain_type) )
{
$bContinue = 0;
$success = 1;
}
}
}
print "\n";
close(LOCAL_FILE);
return $success;
}
#----------------------------------------------------------------------------
# sub uploadConfiguration
#----------------------------------------------------------------------------
sub uploadConfiguration()
{
my ($localFile, $configName, $quiet) = (@_);
$success = 0;
if ( "" eq $configName )
{
$configName = $localFile;
}
if ( "" eq $localFile )
{
&usage("upload");
}
$bContinue = 1;
$chain_type = $FILE_FIRST;
$preferred_chunk_size = $defaultChunkSize;
$chunk_size = $defaultChunkSize;
$total_bytes = 0;
open(LOCAL_FILE, "<$localFile") or die("Can't open $localFile for input: $!");
binmode(LOCAL_FILE);
while (1 == $bContinue )
{
$file_data = "";
$bytes_read = read(LOCAL_FILE, $file_data, $chunk_size);
if ( $preferred_chunk_size != $bytes_read )
{
if ( $total_bytes == 0 )
{
$chain_type = $FILE_FIRST_AND_LAST;
}
else
{
$chain_type = $FILE_LAST;
}
$bContinue = 0;
}
$total_bytes += $bytes_read;
$FileTransferContext =
{
file_data => SOAP::Data->type(base64 => $file_data),
chain_type => $chain_type
};
$soap_response = $ConfigSync->upload_configuration
(
SOAP::Data->name(config_name => $configName),
SOAP::Data->name(file_context => $FileTransferContext)
);
if ( $soap_response->fault )
{
# if ( 1 != $quiet )
# {
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
# }
$success = 0;
$bContinue = 0;
}
else
{
# if ( 1 != $quiet )
# {
print "Uploaded $total_bytes bytes\n";
# }
$success = 1;
}
$chain_type = $FILE_MIDDLE;
}
print "\n";
close(LOCAL_FILE);
return $success;
}
#----------------------------------------------------------------------------
# sub downloadFile
#----------------------------------------------------------------------------
sub downloadFile()
{
my ($configName, $localFile, $quiet) = (@_);
$success = 0;
if ( "" eq $localFile )
{
$localFile = $configName;
}
if ( "" eq $configName )
{
&usage("download");
}
open (LOCAL_FILE, ">$localFile") or die("Can't open $localFile for output: $!");
binmode(LOCAL_FILE);
my $file_offset = 0;
my $chunk_size = $defaultChunkSize;
my $chain_type = $FILE_UNDEFINED;
my $bContinue = 1;
print "\n";
while ( 1 == $bContinue )
{
$soap_response = $ConfigSync->download_file
(
SOAP::Data->name(file_name => $configName),
SOAP::Data->name(chunk_size => $chunk_size),
SOAP::Data->name(file_offset => $file_offset)
);
if ( $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
$bContinue = 0;
}
else
{
$FileTransferContext = $soap_response->result;
$file_data = $FileTransferContext->{"file_data"};
$chain_type = $FileTransferContext->{"chain_type"};
@params = $soap_response->paramsout;
$file_offset = @params[0];
# Append Data to File
print LOCAL_FILE $file_data;
# if ( 1 != $quiet )
# {
print "Bytes Transferred: $file_offset\n";
# }
if ( ("FILE_LAST" eq $chain_type) or
("FILE_FIRST_AND_LAST" eq $chain_type) )
{
$bContinue = 0;
$success = 1;
}
}
}
print "\n";
close(LOCAL_FILE);
return $success;
}
#----------------------------------------------------------------------------
# sub uploadFile
#----------------------------------------------------------------------------
sub uploadFile()
{
my ($localFile, $configName, $quiet) = (@_);
$success = 0;
if ( "" eq $configName )
{
$configName = $localFile;
}
if ( "" eq $localFile )
{
&usage("upload");
}
$bContinue = 1;
$chain_type = $FILE_FIRST;
$preferred_chunk_size = $defaultChunkSize;
$chunk_size = $defaultChunkSize;
$total_bytes = 0;
open(LOCAL_FILE, "<$localFile") or die("Can't open $localFile for input: $!");
binmode(LOCAL_FILE);
while (1 == $bContinue )
{
$file_data = "";
$bytes_read = read(LOCAL_FILE, $file_data, $chunk_size);
if ( $preferred_chunk_size != $bytes_read )
{
if ( $total_bytes == 0 )
{
$chain_type = $FILE_FIRST_AND_LAST;
}
else
{
$chain_type = $FILE_LAST;
}
$bContinue = 0;
}
$total_bytes += $bytes_read;
$FileTransferContext =
{
file_data => SOAP::Data->type(base64 => $file_data),
chain_type => $chain_type
};
$soap_response = $ConfigSync->upload_file
(
SOAP::Data->name(file_name => $configName),
SOAP::Data->name(file_context => $FileTransferContext)
);
if ( $soap_response->fault )
{
# if ( 1 != $quiet )
# {
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
# }
$success = 0;
$bContinue = 0;
}
else
{
# if ( 1 != $quiet )
# {
print "Uploaded $total_bytes bytes\n";
# }
$success = 1;
}
$chain_type = $FILE_MIDDLE;
}
print "\n";
close(LOCAL_FILE);
return $success;
}
#----------------------------------------------------------------------------
# sub syncConfiguration
#----------------------------------------------------------------------------
sub syncConfiguration()
{
my ($syncFlag, $quiet) = (@_);
my $success = 0;
if ( "" eq $syncFlag )
{
&usage("sync");
}
$soap_response = $ConfigSync->synchronize_configuration
(
SOAP::Data->name(sync_flag => $syncFlag)
);
if ( $soap_response->fault )
{
if ( 1 != $quiet )
{
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
}
}
else
{
$success = 1;
if ( 1 != $quiet )
{
print "Configuration synchronized successfully!\n";
}
}
return $success;
}
#----------------------------------------------------------------------------
# sub backupConfiguration
#----------------------------------------------------------------------------
sub backupConfiguration()
{
my ($configName, $localFile, $quiet) = (@_);
if ( "" eq $configName )
{
$configName = generateConfigName();
}
if ( "" eq $localFile )
{
$localFile = $configName;
}
if ( ("" eq $configName) or ("" eq $localFile) )
{
&usage("backup");
}
sleep(1);
$success = &saveConfiguration($configName, $SAVE_FULL, $quiet);
if ( 1 == $success )
{
sleep(1);
$success = &downloadConfiguration($configName, $localFile, $quiet);
if ( 1 == $success )
{
if ( 1 != $quiet )
{
print "Configuration file $configName successfully backed up.\n";
}
}
sleep(1);
$success = &deleteConfiguration($configName, $quiet);
}
return $success;
}
#----------------------------------------------------------------------------
# sub restoreConfiguration
#----------------------------------------------------------------------------
sub restoreConfiguration()
{
my ($localFile, $doSync, $quiet) = (@_);
$configName = $localFile;
if ( ("" eq $configName) or ("" eq $localFile) )
{
&usage("restore");
}
sleep(1);
$success = &uploadConfiguration($localFile, $configName, $quiet);
if ( 1 == $success )
{
sleep(1);
$success = &installConfiguration($configName, $quiet);
if ( 1 == $success )
{
if ( ("1" eq $doSync) or ("y" eq $doSync) or ("Y" eq $doSync) )
{
# Give server time to recover from restart.
sleep(5);
&syncConfiguration(&syncModeFromArg("all"), $quiet);
}
}
sleep(1);
&deleteConfiguration($configName, $quiet);
}
return $success;
} Published Mar 08, 2015
Version 1.0CodeCentral_194
Cirrostratus
Joined May 05, 2019
CodeCentral_194
Cirrostratus
Joined May 05, 2019
No CommentsBe the first to comment