fix some UI issues with the report class bulk edit, #24070
[freeside.git] / bin / clients.conf.import
1 #!/usr/bin/perl -w
2
3 use strict;
4 use DBI;
5 use FS::UID qw(adminsuidsetup); #datasrc
6 use FS::Record qw(qsearch qsearchs dbh);
7 use FS::nas;
8 use FS::export_nas;
9 use FS::part_export;
10
11 my $user = shift or die &usage;
12 my $filename = shift or die &usage;
13 my $all_nas = [];
14
15 my $client;
16 my $in;
17 open ($in, '<', $filename) or die "can't open $filename for reading\n";
18 my $i = 0;
19 while (my $line = <$in>) {
20   $i++;
21   $line =~ s/#.*//;
22   my @t = grep $_, split(/\s+/, $line);
23   next if !@t;
24   if ( $client ) {
25     if ( $t[0] eq 'ipaddr' ) {
26       $client->{nasname} = $t[2];
27     }
28     elsif ( $t[0] eq 'secret' ) {
29       $client->{secret} = $t[2];
30     }
31     elsif( $t[0] eq 'shortname' ) {
32       $client->{shortname} = $t[2];
33     }
34     elsif( $t[0] eq 'nastype' ) {
35       $client->{type} = $t[2];
36     }
37     elsif( $t[0] eq 'virtual_server' ) {
38       $client->{server} = $t[2];
39     }
40     elsif( $t[0] eq '}' ) {
41       $client->{description} = $client->{shortname};
42       push @$all_nas, $client;
43       undef $client;
44     }
45     else {
46       warn "unknown parameter '$t[0]' (line $i), skipped\n";
47       next;
48     }
49   }
50   else { # not in a client section
51     die "parse error (line $i)\n" if $t[0] ne 'client' or $t[2] ne '{';
52     $client = { nasname => $t[1],
53                 shortname => $t[1] }; # hostname
54   }
55 }
56 close $in;
57
58 warn scalar(@$all_nas)." records found.\n";
59
60 adminsuidsetup $user;
61
62 $FS::UID::AutoCommit = 0;
63 my $dbh = dbh;
64
65 # cache NAS names we already know about, and don't import them
66 my %existing_names = map { $_->nasname , $_->nasnum } qsearch('nas', {});
67
68 my $inserted = 0;
69 foreach my $row (@$all_nas) {
70   my %hash = %$row;
71   if (my $num = $existing_names{ $hash{nasname} }) {
72     warn "NAS $hash{nasname} already exists as #$num (skipped)\n";
73   }
74   else {
75     my $nas = FS::nas->new(\%hash);
76     my $error = $nas->insert;
77     if ( $error ) {
78       $dbh->rollback;
79       die "error inserting $hash{nasname}: $error (changes reverted)\n";
80     }
81     $inserted++;
82   }
83 } #foreach $row
84
85 warn "Inserted $inserted NAS records.\n\n";
86 $dbh->commit;
87
88 sub usage {
89   die "Usage:\n\n  clients.conf.import user filename\n\n";
90 }
91