[rt-users] RTAT Import?
Jean-Sebastien Morisset
jsmoriss at mvlan.net
Wed Apr 30 15:19:09 EDT 2008
On Wed, Apr 30, 2008 at 05:51:39PM +0000, Jean-Sebastien Morisset wrote:
>
> Aha! Thanks! Ok, so far this seems to work well:
[snip!]
Alright, so I spent a little more time on this script, and added some
validation against the customfield select values. Here's an example:
# bin/import-assets.sh /tmp/js.csv
gessolx1:
uasolx1:
"" value not ok for OS Name customfield
BDM-MTL-FWSM-PROD-1:
"X" value not ok for Client customfield
And here's the script:
---BEGIN---
#!/usr/bin/perl
use lib qw(/opt/rt3/local/lib /opt/rt3/lib);
use RT;
use RTx::AssetTracker::Asset;
use Getopt::Std;
use strict;
our ($opt_h, $opt_f);
getopts('hf:');
RT::LoadConfig();
RT::Init();
my $at = RTx::AssetTracker::Asset->new(RT->SystemUser);
my $line;
my @csv_def = (
'Name',
'Status',
'Type',
'Description',
'Client',
'Location',
'Manufacturer',
'Model',
'Serial Number',
'OS Name',
'Switch Type',
);
if ($opt_h || !$opt_f) {
print " Syntax: $0 [-h] -f {csvfile}\n";
print "CSV Format: ";
for (@csv_def) { print "\"$_\","; }
print "\n";
exit 0;
}
open(CSV, "< $opt_f") or die "$!\n";
# customfield columns in csv file
my (%cf_map, $cf_item);
for (@csv_def) { $cf_map{$_} = $cf_item++; }
while (<CSV>) {
chomp; $line++;
next if ($line == 1); # Skip CSV Header
s/^"//; s/"$//;
my @csv = split(/"?,"?/);
print $csv[0], ":\n";
unless (my $id = $at->Load($csv[0])) {
my ($id, $t, $msg) = $at->Create (
Name => $csv[0],
Status => $csv[1],
Type => $csv[2],
Description => $csv[3],
);
print "\t$msg\n" if ($msg);
}
my $atcf = $at->CustomFields();
# check each customfield for this asset
while (my $cf = $atcf->Next()) {
# check to see if we have a CSV column for this customfield
if (my $col = $cf_map{$cf->Name}) {
my $accept;
if ($cf->Type eq "Select") {
# read all selectable values for this customfield
my $cfvs = $cf->Values;
while (my $value = $cfvs->Next) {
# check to see if new values is defined in select
if ($value->Name eq $csv[$col]) {
$accept = 1;
last;
}
}
} elsif ($cf->Type eq "Freeform") {
$accept = 1;
} else {
print "\tneed more code for ".$cf->Type." customfield type\n";
}
if ($accept) {
my ($status, $msg) = $at->AddCustomFieldValue(
Field => $cf->Id,
Value => $csv[$col],
RecordTransaction => 1,
);
print "\t$msg\n" if ($msg);
} else {
print "\t\"$csv[$col]\" value not ok for ".$cf->Name." customfield\n";
}
}
}
}
---END---
--
Jean-Sebastien Morisset, Sr. UNIX Administrator <jsmoriss at mvlan.net>
More information about the rt-users
mailing list