RT 83251 - moved script
[freeside.git] / bin / svc_broadband.renumber
1 #!/usr/bin/perl
2
3 use strict;
4
5 use FS::UID qw(adminsuidsetup);
6 use FS::Record qw(qsearch qsearchs);
7 use FS::svc_Common;
8 use FS::part_svc_router;
9 use FS::svc_broadband;
10 use FS::router;
11 use FS::addr_block;
12
13 $FS::svc_Common::noexport_hack = 1;  #Disable exports!
14
15 my $user = shift if $ARGV[0] or die &usage;
16 adminsuidsetup($user);
17
18 my $remapfile = shift if $ARGV[0] or die &usage;
19 my $old_blocknum = shift if $ARGV[0] or die &usage;
20 my $new_blocknum = shift if $ARGV[0] or die &usage;
21 my $old_svcnum = shift if $ARGV[0];
22
23 my %ipmap;
24
25 open(REMAP, "<$remapfile") or die $!;
26 while (<REMAP>) {
27   next unless (/^([0-9\.]+)\s+([0-9\.]+)$/);
28   my ($old_ip, $new_ip) = ($1, $2);
29   $ipmap{$old_ip} = $new_ip;
30 }
31 close(REMAP);
32
33 my @svcs;
34 if ($old_svcnum) {
35   @svcs = ( qsearchs('svc_broadband', { svcnum => $old_svcnum,
36                                         blocknum => $old_blocknum }) );
37 } else {
38   @svcs = qsearch('svc_broadband', { blocknum => $old_blocknum });
39 }
40
41 foreach my $old_sb (@svcs) {
42
43   my $old_ip = $old_sb->ip_addr;
44   my $new_ip = $ipmap{$old_ip};
45   print "Renumbering ${old_ip} (${old_blocknum}) => ${new_ip} (${new_blocknum})...\n";
46
47
48   my $new_sb = new FS::svc_broadband
49     { $old_sb->hash,
50       ip_addr => $new_ip,
51       blocknum => $new_blocknum,
52       svcpart => $old_sb->cust_svc->svcpart,
53     };
54
55   my $error = $new_sb->replace($old_sb);
56   die $error if $error;
57
58 }
59
60
61
62 exit(0);
63
64 sub usage {
65
66   my $usage = <<EOT;
67 Usage:
68   svc_broadband.renumber user remapfile old_blocknum new_blocknum [ svcnum ]
69
70 remapfile format:
71 old_ip_address  new_ip_address
72 ...
73
74 Example remapfile:
75 10.0.0.5        192.168.0.5
76 10.0.0.20       192.168.0.20
77 10.0.0.32       192.168.0.3
78
79 Warning: This assumes your routers have already been reconfigured with the
80          new addresses.  Exports will not be run!
81
82 EOT
83
84 }