terça-feira, 15 de outubro de 2013

Comandos distribuídos

Imediatamente depois de escrever o pequeno script do artigo anterior para procurar discos cheios nos servidores, percebi que poderia escrever algo um pouco mais genérico.

O código abaixo aceita como parâmetros uma lista de servidores e um comando a ser executado nesses servidores.

my $servers={
  srv01 => {user=>'user1', pass=>'pass1'},
  srv02 => {user=>'user2', pass=>'pass2'},
  srv03 => {user=>'user3', pass=>'pass3'}
};

my $cmd=pop(@ARGV);
print "$cmd:\n";
for my $server (@ARGV) {
  my $pass=$servers->{$server}->{pass};
  my $user=$servers->{$server}->{user};
  print "$server\n";
  my $data=`plink -pw $pass $user\@$server $cmd`;
  print "$data\n";
}

Por exemplo, para executar um "uname -a" em srv01 e srv02, eu poderia chamar o script assim (o nome do arquivo com o script é exec.pl):

exec.pl srv01 srv02 "uname -a"

Minha vontade era a de oferecer oções de linha de comando para referenciar grupos de servidores por nome, mas ainda não venci a preguiça.

Nenhum comentário: