rename variables to more descriptive names
[sysadmin-cookbook] / recepies / zfs / zfs-replicate-pool.pl
index 57c94cb..5febad2 100755 (executable)
@@ -10,8 +10,8 @@ use Time::HiRes;
 my $compress = '| lzop -c';
 my $decompress = 'lzop -d |';
 
-my $arh = Net::OpenSSH->new('root@10.60.0.204');
-my $dev = Net::OpenSSH->new('root@10.60.0.202');
+my $from = Net::OpenSSH->new('root@10.60.0.90');
+my $to = Net::OpenSSH->new('root@10.60.0.202');
 
 sub on {
        my ($ssh,$command) = @_;
@@ -25,16 +25,16 @@ sub on {
        }
 }
 
-print on $arh => 'zpool status';
-print on $dev => 'zpool status';
+print on $from => 'zpool status';
+print on $to => 'zpool status';
 
-my @arh = on $arh => 'zfs list -H -o name';
-my @dev = on $dev => 'zfs list -H -o name';
+my @from = on $from => 'zfs list -H -o name';
+my @to = on $to => 'zfs list -H -o name';
 
-warn "# ",dump( \@arh, \@dev );
+warn "# ",dump( \@from, \@to );
 
-my $from_pool = $arh[0];
-my $to_pool   = $dev[0];
+my $from_pool = $from[0];
+my $to_pool   = $to[0];
 
 sub snapshots_from {
        my ($ssh) = @_;
@@ -54,32 +54,32 @@ sub snapshots_from {
        return $snapshot;
 }
 
-foreach my $fs ( @arh ) {
+foreach my $fs ( @from ) {
 
        my $name = $fs;
        $name =~ s{^$from_pool/}{} || next; # FIXME skip top-level fs
        warn "? $name";
 
-       my $arh_snapshot = snapshots_from $arh;
-       if ( ! exists( $arh_snapshot->{$fs} ) ) {
+       my $from_snapshot = snapshots_from $from;
+       if ( ! exists( $from_snapshot->{$fs} ) ) {
 
                my $snapshot = $fs . '@send';
-               print on $arh => "zfs snapshot $snapshot";
-               die $arh->error if $arh->error;
-               $arh_snapshot = snapshots_from $arh;
+               print on $from => "zfs snapshot $snapshot";
+               die $from->error if $from->error;
+               $from_snapshot = snapshots_from $from;
        }
 
-       my $max_snapshot = $#{ $arh_snapshot->{$fs} };
+       my $max_snapshot = $#{ $from_snapshot->{$fs} };
        warn "$fs has ",$max_snapshot+1," snapshots\n";
 
-       my $to_dev = "$to_pool/$name";
+       my $to_to = "$to_pool/$name";
 
        foreach my $i ( 0 .. $max_snapshot ) {
-               my $snap = $arh_snapshot->{$fs}->[$i] || die "no snap";
+               my $snap = $from_snapshot->{$fs}->[$i] || die "no snap";
 
-               my $dev_snapshot = snapshots_from $dev;
-               if ( exists $dev_snapshot->{$to_dev} ) {
-                       if ( first { /^\Q$snap\E$/ } @{ $dev_snapshot->{$to_dev} } ) {
+               my $to_snapshot = snapshots_from $to;
+               if ( exists $to_snapshot->{$to_to} ) {
+                       if ( first { /^\Q$snap\E$/ } @{ $to_snapshot->{$to_to} } ) {
                                warn "+ $name @ $snap exists\n";
                                next;
                        } else {
@@ -93,35 +93,35 @@ foreach my $fs ( @arh ) {
                if ( $i == 0 ) {
                        $snapshot = "$from_pool/$name\@$snap";
                } else {
-                       my $prev = $arh_snapshot->{$fs}->[$i-1] || die "no prev";
+                       my $prev = $from_snapshot->{$fs}->[$i-1] || die "no prev";
                        $snapshot = "-i $from_pool/$name\@$prev $from_pool/$name\@$snap";
                }
 
-               warn "zfs transfer $snapshot -> $to_dev\n";
+               warn "zfs transfer $snapshot -> $to_to\n";
 
                my $t = time();
 
-               my $recv = "nc -w 3 -l -p 8888 | $decompress zfs receive $to_dev";
+               my $recv = "nc -w 3 -l -p 8888 | $decompress zfs receive $to_to";
                warn ">> $recv\n";
-               my ($rin1,$pid1) = $dev->pipe_in($recv);
+               my ($rin1,$pid1) = $to->pipe_in($recv);
                warn ">> pid: $pid1";
 
                sleep 1; # FIXME wait for netcat to start
 
                my $send = "zfs send $snapshot $compress | nc -q 0 -w 2 10.60.0.202 8888";
                warn "<< $send\n";
-               $arh->system($send);
-               die $arh->error if $arh->error;
+               $from->system($send);
+               die $from->error if $from->error;
 
                $t = time() - $t;
                warn "took $t seconds to complete\n";
 
-               $dev->system("zfs set readonly=on $to_pool/$name") if $i == 0;
-               warn "ERROR: ",$dev->error if $dev->error;
+               $to->system("zfs set readonly=on $to_pool/$name") if $i == 0;
+               warn "ERROR: ",$to->error if $to->error;
 
                sleep 1;
-               $dev_snapshot = snapshots_from $dev;
-               die "can't find new snapshot $snap" unless $dev_snapshot->{$to_dev};
+               $to_snapshot = snapshots_from $to;
+               die "can't find new snapshot $snap" unless $to_snapshot->{$to_to};
 
        }