From 6aacceec826a2d835af0ea8759924a83256d3ebe Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Thu, 18 Oct 2012 12:59:42 -0700 Subject: [PATCH] add modification command to broadband_shellcommands export, RT#19897 --- FS/FS/part_export/broadband_shellcommands.pm | 76 +++++++++++++++++++--------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/FS/FS/part_export/broadband_shellcommands.pm b/FS/FS/part_export/broadband_shellcommands.pm index cf9c36c8f..b57267ec5 100644 --- a/FS/FS/part_export/broadband_shellcommands.pm +++ b/FS/FS/part_export/broadband_shellcommands.pm @@ -8,21 +8,26 @@ use FS::part_export; @ISA = qw(FS::part_export); tie my %options, 'Tie::IxHash', - 'user' => { label=>'Remote username', default=>'freeside' }, - 'insert' => { label=>'Insert command', - default=>'php provision.php --mac=$mac_addr --plan=$plan_id --account=active', - }, - 'delete' => { label=>'Delete command', - default=>'', - }, - 'suspend' => { label=>'Suspension command', - default=>'php provision.php --mac=$mac_addr --plan=$plan_id --account=suspend', - }, - 'unsuspend'=> { label=>'Unsuspension command', - default=>'', - }, - 'uppercase_mac' => { label => 'Force MACs to uppercase', - type => 'checkbox', } + 'user' => { label => 'Remote username', + default => 'freeside' }, + 'insert' => { label => 'Insert command', + default => 'php provision.php --mac=$mac_addr --plan=$plan_id --account=active', + }, + 'delete' => { label => 'Delete command', + default => '', + }, + 'replace' => { label => 'Modification command', + default => '', + }, + 'suspend' => { label => 'Suspension command', + default => 'php provision.php --mac=$mac_addr --plan=$plan_id --account=suspend', + }, + 'unsuspend' => { label => 'Unsuspension command', + default => '', + }, + 'uppercase_mac' => { label => 'Force MACs to uppercase', + type => 'checkbox', + } ; %info = ( @@ -30,6 +35,10 @@ tie my %options, 'Tie::IxHash', 'desc' => 'Run remote commands via SSH, for svc_broadband services', 'options' => \%options, 'notes' => <<'END' +Run remote commands via SSH, for broadband services. +

+All fields in svc_broadband are available for interpolation (prefixed with +new_ or old_ for replace operations). END ); @@ -61,28 +70,49 @@ sub _export_command { my $command = $self->option($action); return '' if $command =~ /^\s*$/; - #set variable for the command + #set variables for the command no strict 'vars'; { no strict 'refs'; ${$_} = $svc_broadband->getfield($_) foreach $svc_broadband->fields; } - if ( $self->option('uppercase_mac') ) { - $mac_addr = uc $mac_addr; - } + $mac_addr = uc $mac_addr + if $self->option('uppercase_mac'); #done setting variables for the command $self->shellcommands_queue( $svc_broadband->svcnum, - user => $self->option('user')||'root', - host => $self->machine, - command => eval(qq("$command")), + user => $self->option('user')||'root', + host => $self->machine, + command => eval(qq("$command")), ); } sub _export_replace { - ''; + my($self, $new, $old ) = (shift, shift, shift); + my $command = $self->option('replace'); + + #set variable for the command + no strict 'vars'; + { + no strict 'refs'; + ${"old_$_"} = $old->getfield($_) foreach $old->fields; + ${"new_$_"} = $new->getfield($_) foreach $new->fields; + } + + if ( $self->option('uppercase_mac') ) { + $old_mac_addr = uc $old_mac_addr; + $new_mac_addr = uc $new_mac_addr; + } + + #done setting variables for the command + + $self->shellcommands_queue( $new->svcnum, + user => $self->option('user')||'root', + host => $self->machine, + command => eval(qq("$command")), + ); } #a good idea to queue anything that could fail or take any time -- 2.11.0