[go: up one dir, main page]

Menu

[r10]: / trunk / oscontrol  Maximize  Restore  History

Download this file

315 lines (273 with data), 7.0 kB

#! /usr/bin/perl
#    This is opensand, an NBD base SAN system
#    Copyright (C) 2008-2015  Stefan Hoefer <stefan@hoefer.ch>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

use strict;
use warnings;

my $VERSION="0.10.0";

use IO::Socket::UNIX;

if (@ARGV < 1) {
	die "Usage: oscontrol command [options]\n";
}

if ($ARGV[0] eq "version") {
	print "oscontrol version:\n";
	print "  ".$VERSION."\n";
}

my $basepath = "/var/lib/opensand";

my $socket = IO::Socket::UNIX->new($basepath."/opensand.sock");

if (!$socket) {
	die "Could not open socket\n";
}

if ($ARGV[0] eq "create") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/ && length($ARGV[2]) > 0) {
		my $size = $ARGV[1]*1024*1024;

		print $socket "create $size:$ARGV[2]\n";
		my $answer = <$socket>;

		print $answer;
	}
	else {
		die "Usage: oscontrol create size_in_MB comment\n";
	}
}
elsif ($ARGV[0] eq "status") {
	#system("opensand status");
	print $socket "status\n";

	while (my $answer = <$socket>) {
		print $answer;
	}		
}
elsif ($ARGV[0] eq "touchall") {
	if (@ARGV == 2 && $ARGV[1] =~ /^\d+$/) {
		print $socket "touchall $ARGV[1]\n";

		while (my $answer = <$socket>) {
			print $answer;
		}		
	}
	else {
		die "Usage: oscontrol touchall id\n";
	}
}
elsif ($ARGV[0] eq "protect") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/ && $ARGV[2] =~ /^0|1$/) {
		print $socket "protect $ARGV[1] $ARGV[2]\n";

		while (my $answer = <$socket>) {
			print $answer;
		}
	}
	else {
		die "Usage: oscontrol protect id 0|1\n";
	}
}
elsif ($ARGV[0] eq "scramble") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/ && $ARGV[2] =~ /^0|1$/) {
		print $socket "scramble $ARGV[1] $ARGV[2]\n";

		while (my $answer = <$socket>) {
			print $answer;
		}
	}
	else {
		die "Usage: oscontrol scramble id 0|1\n";
	}
}
elsif ($ARGV[0] eq "rename") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/ && length($ARGV[2]) > 0) {
		print $socket "rename $ARGV[1] $ARGV[2]\n";

		while (my $answer = <$socket>) {
			print $answer;
		}
	}
	else {
		die "Usage: oscontrol rename id <name>\n";
	}
}
elsif ($ARGV[0] eq "snapshot") {	
	#if (@ARGV == 2 && $ARGV[1] =~ /^\d+$/) {
	if ((@ARGV == 2 && $ARGV[1] =~ /^\d+$/) || (@ARGV == 3 && $ARGV[1] =~ /^\d+$/ && $ARGV[2] =~ /^\d+$/)) {
		my $disk = $ARGV[1];
		my $size = 4096;

		if (defined($ARGV[2])) {
			$size = $ARGV[2];
		}

		print $socket "snapshot $disk $size\n";
		my $answer = <$socket>;

		print $answer;
	}
	else {
		die "Usage: oscontrol snapshot disk_number [size_in_MB]\n";
	}
}
elsif ($ARGV[0] eq "backup") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/ && $ARGV[2] =~ /^0|1$/) {
		my $num = $ARGV[1];
		my $backup = $ARGV[2];

		print $socket "backup $num $backup\n";
		while (my $answer = <$socket>) {
			print $answer;
		}
	}
	else {
		die "Usage: oscontrol backup diskid 0|1\n";
	}
}

# STH Dec 2012: we don't do these backups anymore, they don't work well

#elsif ($ARGV[0] eq "backup") {
#	if (@ARGV == 2 && $ARGV[1] =~ /^\d+$/) {
#		my $num = $ARGV[1];

#		print $socket "backup $num\n";
#		while (my $answer = <$socket>) {
#			print $answer;
#		}
#	}
#	else {
#		die "Usage: oscontrol backup number_backups_kept\n";
#	}
#}
elsif ($ARGV[0] eq "copy") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/) {
		my $disk = $ARGV[1];
		my $comment = $ARGV[2];

		print $socket "copy $disk:$comment\n";
		my $answer = <$socket>;

		print $answer;
	}
	else {
		die "Usage: oscontrol copy disk_number comment\n";
	}
}
elsif ($ARGV[0] eq "transcrypt") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/) {
		my $disk = $ARGV[1];
		my $comment = $ARGV[2];

		print $socket "transcrypt $disk:$comment\n";
		my $answer = <$socket>;

		print $answer;
	}
	else {
		die "Usage: oscontrol transcrypt disk_number comment\n";
	}
}
elsif ($ARGV[0] eq "runbackup") {
	print $socket "runbackup\n";
	my $answer = <$socket>;

	print $answer;
}
elsif ($ARGV[0] eq "loadkeys") {
	print $socket "load_keys\n";
	my $answer = <$socket>;

	print $answer;
}
elsif ($ARGV[0] eq "encrypt") {
	if (@ARGV == 3 && $ARGV[1] =~ /^\d+$/ && $ARGV[2] =~ /^0|1$/) {
		print $socket "encrypt $ARGV[1] $ARGV[2]\n";
	}
	else {
		die "Usage: oscontrol encrypt id 0|1\n";
	}
	
	my $answer = <$socket>;

	print $answer;
}
elsif ($ARGV[0] eq "show") {
	if (@ARGV == 2) {
		if ($ARGV[1] !~ /^\d+$/) {
			die "The optional second argument to 'show' must be a number (disk id)!\n";
		}

		print $socket "show ".int($ARGV[1])."\n";

		while (my $answer = <$socket>) {
			print $answer;
		}
	}
	elsif (@ARGV == 1) {
		print $socket "show\n";

		while (my $answer = <$socket>) {
			print $answer;
		}		
	}
	else {
		die "Usage: oscontrol show [diskid]\n";
	}
}
elsif ($ARGV[0] eq "housekeeping") {
	if (@ARGV == 3) {
		if ($ARGV[1] !~ /^\d+$/) {
			die "The second argument to 'housekeeping' must be a number (number of backups to keep; 0 means skip deleting old backups)!\n";
		}
		if ($ARGV[2] !~ /^\d+$/) {
			die "The third argument to 'housekeeping' must be a number (number of MB to free by archiving; 0 means skip archiving/zipping backups)!\n";
		}

		print $socket "housekeeping ".int($ARGV[1])." ".int($ARGV[2])."\n";

		while (my $answer = <$socket>) {
			print $answer;
		}
	}
	else {
		die "Usage: oscontrol housekeeping <retention_number> <archive_size_in_MB>]\n";
	}
}
elsif ($ARGV[0] eq "resources") {
	print $socket "resources\n";
	my $answer = <$socket>;
	
	print $answer;
}
elsif ($ARGV[0] eq "delete") {
	if (@ARGV == 2 && $ARGV[1] =~ /^\d+$/) {
		print $socket "delete $ARGV[1]\n";
		my $answer = <$socket>;

		print $answer;
	}
	else {
		die "Usage: oscontrol delete id\n";
	}
}
elsif ($ARGV[0] eq "version") {
	print $socket "version\n";
	my $answer = <$socket>;

	if (defined($answer)) {
		print "core opensand version running:\n";
		print "  ".$answer."\n";
	}
	else {
		print "core is running, but unknown version!\n";
	}
}
elsif ($ARGV[0] eq "list") {
	print $socket "list\n";

	while (my $line = <$socket>) {
		print $line;
	}
}
else {
	print "Unknown or no command\n";
	print "Available commands are:\n";
	print "  create\n";
	print "  delete\n";
	print "  list\n";
	print "  snapshot\n";
	print "  copy\n";
	print "  backup\n";
	print "  encrypt\n";
	print "  scramble\n";
	print "  loadkeys\n";
	print "  protect\n";
	print "  transcrypt\n";
	print "  status\n";
	print "  show\n";
	print "  runbackup\n";
	print "  touchall\n";
	print "  housekeeping\n";
	print "  version\n";
	print "  resources\n";
	print "  rename\n";
}

close $socket;