<div dir="ltr">Hello RT Users,<div><br></div><div style>We have a *ton* of tickets in a queue from another instance of RT in our instance of RTIR (RT4/RTIR3).  I've been able to modify the Lifecycles so that I can move tickets to the "Incident Reports" queue now (thanks Kevin for your advice with that).  I'd like tickets moved to that queue treated like new Incident Report tickets in RTIR but hitting some snags.</div>

<div><br></div><div>The condition for On Queue Change itself isn't a problem since that part is pretty straight forward (either using the built in "On Queue Change" or a user defined condition).  <br clear="all">

<div><br></div><div style>The problem is that the provided "SetIPFromContent" (which presumably is the RTIR_FindIP.pm) doesn't work when using "On Queue Change" as a condition.  This is probably because the content of the transaction is that of a queue change and does not contain any correspondence-style content and it's not something you can run against the action.  What I need however is something that will run against each part (attachment?) of this already existing ticket.</div>

<div><br></div><div style>I attempted to do this using a simple loop over each of the transactions but it's kind of hacked up and the loop doesn't even seem to run once (as if there are no transactions with attachments).</div>

<div style><br></div><div style><u>As a test I made the following scrip *but* I'd like something more native to RTIR_FindIP.pm if possible.  </u><br></div><div style><br></div><div style>NAME: OnQueueChange Find IPs</div>

<div style>Condition: On Queue Change</div><div style>Action: User Defined</div><div style>Template: Blank</div><div style>Stage: Transaction Create</div><div style><br></div><div style>Condition and Preperation: "return 1;"</div>

<div style><br></div><div style>Cleanup Code:</div><div style><br></div><div style><div><div><font face="courier new, monospace">use Regexp::Common qw(net);</font></div><div><font face="courier new, monospace">use NetAddr::IP;</font></div>

<div><font face="courier new, monospace">use Data::Validate::IP qw(is_ipv4 is_ipv6);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">my $attachments = $self->TransactionObj->Attachments;</font></div>

<div><font face="courier new, monospace">my @ourips = RT->Config->Get('OurIPs');</font></div><div><font face="courier new, monospace">my $CF_Obj = RT::CustomField->new($RT::SystemUser);</font></div><div>
<font face="courier new, monospace">$CF_Obj->LoadByName( Name => "URL" );    # *** See note</font></div>
<div><font face="courier new, monospace">my @inserted;</font></div><div><font face="courier new, monospace"><br></font></div><div style><font face="courier new, monospace"># Loop over each attachment in the TransactionObj and trap IPv4 and IPv6 addresses.</font></div>

<div style><font face="courier new, monospace"># Insert those into the "IP" CustomField.</font></div><div style><font face="courier new, monospace"># *** Note - For testing I've changed it to URL and I'm trying to simply write \</font></div>

<div style><font face="courier new, monospace"># ***      - the word "TEST" instead.</font></div><div style><font face="courier new, monospace"># ***      - URL is a valid CF and this AddValueForObject works outside the \</font></div>

<div style><font face="courier new, monospace"># ***      - while loop below.</font></div><div style><font face="courier new, monospace">#</font></div><div><font face="courier new, monospace">while (my $message = $attachments->Next) {</font></div>

<div><font face="courier new, monospace">  next unless $message->ContentType =~ m!^(text/html|text/plain|message|text$)!i;</font></div><div><font face="courier new, monospace">  my $content = $message->Content;</font></div>

<div><font face="courier new, monospace">  my @lines = split(/\n/,$content);</font></div><div><font face="courier new, monospace">  foreach my $line (@lines) {</font></div><div><font face="courier new, monospace">    if ($line =~ /($RE{net}{IPv4}|$RE{net}{IPv6})/g) {</font></div>

<div><font face="courier new, monospace">      $CF_Obj->AddValueForObject( Object  => $self->TicketObj, Content => "TEST" )</font></div><div><font face="courier new, monospace">          unless grep($1,@inserted);</font><span style="font-family:'courier new',monospace"> </span><span style="font-family:'courier new',monospace">   # *** See note</span></div>

<div><font face="courier new, monospace">        push(@inserted,$ipaddr);</font></div><div><font face="courier new, monospace">    }</font></div><div><font face="courier new, monospace">  }  </font></div><div><font face="courier new, monospace">}</font></div>

</div><div><br></div><div style>I've been banging my head against this for a few hours now and can't get the loop to work it seems let alone find a way to do this more natively with RTIR_FindIP.pm.</div><div style>

<br></div><div style>Thanks for reading!</div><div><br></div></div>-- <br><div>Landon Stewart <LandonStewart@Gmail.com><br></div>
</div></div>