Code

vanishing jobs after TASKEND softupdate 0
[gosa.git] / gosa-si / server / events / gosaTriggered.pm
index d16dd1bbba9e17ff8461ee9dc1ebf96e1ba076f8..7c15ab22b5fc22faf0f9e4f5933cbe77cc9fc65b 100644 (file)
@@ -17,6 +17,8 @@ my @events = (
     "trigger_action_localboot",
     "trigger_action_faireboot",
     "trigger_action_reboot",
+    "trigger_action_activate",
+    "trigger_action_lock",
     "trigger_action_halt",
     "trigger_action_update", 
     "trigger_action_reinstall",
@@ -38,7 +40,6 @@ use Crypt::SmbHash;
 use Net::ARP;
 use Net::Ping;
 use Socket;
-use utf8;
 
 BEGIN {}
 
@@ -65,6 +66,13 @@ sub send_user_msg {
     if( exists $msg_hash->{'user'} ) { @user_list = @{$msg_hash->{'user'}}; }
     if( exists $msg_hash->{'group'} ) { @group_list = @{$msg_hash->{'group'}}; }
 
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     # error handling
     if( not @user_list && not @group_list ) {
         &main::daemon_log("WARNING: no user-tag or a group-tag specified in 'send_user_msg'", 3); 
@@ -139,6 +147,13 @@ sub recreate_fai_server_db {
     my ($msg, $msg_hash, $session_id) = @_ ;
     my $out_msg;
 
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     $main::fai_server_db->create_table("new_fai_server", \@main::fai_server_col_names);
     &main::create_fai_server_db("new_fai_server");
     $main::fai_server_db->move_table("new_fai_server", $main::fai_server_tn);
@@ -155,9 +170,16 @@ sub get_login_usr_for_client {
     my $target = @{$msg_hash->{'target'}}[0];
     my $client = @{$msg_hash->{'client'}}[0];
 
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     $header =~ s/^gosa_//;
 
-    my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$client' OR macaddress='$client'";
+    my $sql_statement = "SELECT * FROM known_clients WHERE hostname='$client' OR macaddress LIKE '$client'";
     my $res = $main::known_clients_db->select_dbentry($sql_statement);
 
     my $out_msg = "<xml><header>$header</header><source>$target</source><target>$source</target>";
@@ -174,6 +196,14 @@ sub get_client_for_login_usr {
     my $header = @{$msg_hash->{'header'}}[0];
     my $source = @{$msg_hash->{'source'}}[0];
     my $target = @{$msg_hash->{'target'}}[0];
+
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my $usr = @{$msg_hash->{'usr'}}[0];
     $header =~ s/^gosa_//;
 
@@ -192,8 +222,14 @@ sub get_client_for_login_usr {
 sub ping {
     my ($msg, $msg_hash, $session_id) = @_ ;
     my $out_msg = $msg;
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     $out_msg =~ s/<header>gosa_/<header>/;
-    $out_msg =~ s/<\/xml>/<session_id>$session_id<\/session_id><\/xml>/; 
 
     my @out_msg_l = ( $out_msg );
     return @out_msg_l;
@@ -239,14 +275,20 @@ sub network_completition {
 
 
 sub detect_hardware {
-    my ($msg, $msg_hash) = @_ ;
+    my ($msg, $msg_hash, $session_id) = @_ ;
     # just forward msg to client, but dont forget to split off 'gosa_' in header
     my $source = @{$msg_hash->{source}}[0];
     my $target = @{$msg_hash->{target}}[0];
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
 
     my $out_hash = &create_xml_hash("detect_hardware", $source, $target);
-    if( exists $msg_hash->{'jobdb_id'} ) { 
-        &add_content2xml_hash($out_hash, 'jobdb_id', @{$msg_hash->{'jobdb_id'}}[0]); 
+    if( defined $jobdb_id ) { 
+        &add_content2xml_hash($out_hash, 'jobdb_id', $jobdb_id); 
     }
     my $out_msg = &create_xml_string($out_hash);
 
@@ -257,12 +299,19 @@ sub detect_hardware {
 
 
 sub trigger_reload_ldap_config {
-    my ($msg, $msg_hash) = @_ ;
+    my ($msg, $msg_hash, $session_id) = @_ ;
     my $target = @{$msg_hash->{target}}[0];
 
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my $out_hash = &create_xml_hash("reload_ldap_config", $main::server_address, $main::server_address, $target);
-    if( exists $msg_hash->{'jobdb_id'} ) { 
-        &add_content2xml_hash($out_hash, 'jobdb_id', @{$msg_hash->{'jobdb_id'}}[0]); 
+    if( defined ) { 
+        &add_content2xml_hash($out_hash, 'jobdb_id', $jobdb_id); 
     }
     my $out_msg = &create_xml_string($out_hash);
     my @out_msg_l;
@@ -272,15 +321,21 @@ sub trigger_reload_ldap_config {
 
 
 sub set_activated_for_installation {
-    my ($msg, $msg_hash) = @_;
-
+    my ($msg, $msg_hash, $session_id) = @_;
     my $header = @{$msg_hash->{header}}[0];
     my $source = @{$msg_hash->{source}}[0];
     my $target = @{$msg_hash->{target}}[0];
 
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $target);
-    if( exists $msg_hash->{'jobdb_id'} ) { 
-        &add_content2xml_hash($out_hash, 'jobdb_id', @{$msg_hash->{'jobdb_id'}}[0]); 
+    if( defined $jobdb_id ) { 
+        &add_content2xml_hash($out_hash, 'jobdb_id', $jobdb_id); 
     }
     my $out_msg = &create_xml_string($out_hash);
     my @out_msg_l = ( $out_msg );
@@ -289,79 +344,207 @@ sub set_activated_for_installation {
 
 
 sub trigger_action_faireboot {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
+    my $macaddress = @{$msg_hash->{target}}[0];
+    my $source = @{$msg_hash->{source}}[0];
+
+    my @out_msg_l;
     $msg =~ s/<header>gosa_trigger_action_faireboot<\/header>/<header>trigger_action_faireboot<\/header>/;
-    my @out_msg_l = ($msg);  
+    push(@out_msg_l, $msg);
+
+    &main::change_goto_state('locked', \@{$msg_hash->{target}}, $session_id);
+       &main::change_fai_state('install', \@{$msg_hash->{target}}, $session_id); 
+
+    # delete all jobs from jobqueue which correspond to fai
+    my $sql_statement = "DELETE FROM $main::job_queue_tn WHERE (macaddress='$macaddress' AND ".
+        "status='processing')";
+    $main::job_db->del_dbentry($sql_statement ); 
+                                             
+    return @out_msg_l;
+}
+
+
+sub trigger_action_lock {
+    my ($msg, $msg_hash, $session_id) = @_;
+    my $macaddress = @{$msg_hash->{target}}[0];
+    my $source = @{$msg_hash->{source}}[0];
+
+    &main::change_goto_state('locked', \@{$msg_hash->{target}}, $session_id);
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+                                             
+    my @out_msg_l;
     return @out_msg_l;
 }
 
 
+sub trigger_action_activate {
+    my ($msg, $msg_hash, $session_id) = @_;
+    my $macaddress = @{$msg_hash->{target}}[0];
+    my $source = @{$msg_hash->{source}}[0];
+
+    &main::change_goto_state('active', \@{$msg_hash->{target}}, $session_id);
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+                                             
+    my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $macaddress);
+    if( exists $msg_hash->{'jobdb_id'} ) { 
+        &add_content2xml_hash($out_hash, 'jobdb_id', @{$msg_hash->{'jobdb_id'}}[0]); 
+    }
+    my $out_msg = &create_xml_string($out_hash);
+
+    return ( $out_msg );
+}
+
+
 sub trigger_action_localboot {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
     $msg =~ s/<header>gosa_trigger_action_localboot<\/header>/<header>trigger_action_localboot<\/header>/;
+    &main::change_fai_state('localboot', \@{$msg_hash->{target}}, $session_id);
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my @out_msg_l = ($msg);  
     return @out_msg_l;
 }
 
 
 sub trigger_action_halt {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
     $msg =~ s/<header>gosa_trigger_action_halt<\/header>/<header>trigger_action_halt<\/header>/;
+
+    &main::change_fai_state('halt', \@{$msg_hash->{target}}, $session_id);
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my @out_msg_l = ($msg);  
     return @out_msg_l;
 }
 
 
 sub trigger_action_reboot {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
     $msg =~ s/<header>gosa_trigger_action_reboot<\/header>/<header>trigger_action_reboot<\/header>/;
+
+    &main::change_fai_state('reboot', \@{$msg_hash->{target}}, $session_id);
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my @out_msg_l = ($msg);  
     return @out_msg_l;
 }
 
 
 sub trigger_action_memcheck {
-    my ($msg, $msg_hash) = @_ ;
+    my ($msg, $msg_hash, $session_id) = @_ ;
     $msg =~ s/<header>gosa_trigger_action_memcheck<\/header>/<header>trigger_action_memcheck<\/header>/;
+
+    &main::change_fai_state('memcheck', \@{$msg_hash->{target}}, $session_id);
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my @out_msg_l = ($msg);  
     return @out_msg_l;
 }
 
 
 sub trigger_action_reinstall {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
     $msg =~ s/<header>gosa_trigger_action_reinstall<\/header>/<header>trigger_action_reinstall<\/header>/;
-    my @out_msg_l = ($msg);  
+
+    &main::change_fai_state('reinstall', \@{$msg_hash->{target}}, $session_id);
+
+    my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
+    my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
+    my @out_msg_l = ($wake_msg, $msg);  
     return @out_msg_l;
 }
 
 
 sub trigger_action_update {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
     $msg =~ s/<header>gosa_trigger_action_update<\/header>/<header>trigger_action_update<\/header>/;
-    my @out_msg_l = ($msg);  
+
+    &main::change_fai_state('update', \@{$msg_hash->{target}}, $session_id);
+
+    my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
+    my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
+    my @out_msg_l = ($wake_msg, $msg);  
     return @out_msg_l;
 }
 
 
 sub trigger_action_instant_update {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
     $msg =~ s/<header>gosa_trigger_action_instant_update<\/header>/<header>trigger_action_instant_update<\/header>/;
-    my @out_msg_l = ($msg);  
+
+    &main::change_fai_state('update', \@{$msg_hash->{target}}, $session_id);
+
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
+    my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
+    my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
+    my @out_msg_l = ($wake_msg, $msg);  
     return @out_msg_l;
 }
 
 
 sub trigger_action_sysinfo {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
     $msg =~ s/<header>gosa_trigger_action_sysinfo<\/header>/<header>trigger_action_sysinfo<\/header>/;
+
+    &main::change_fai_state('sysinfo', \@{$msg_hash->{target}}, $session_id);
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
     my @out_msg_l = ($msg);  
     return @out_msg_l;
 }
 
 
 sub new_key_for_client {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
+
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+    
     $msg =~ s/<header>gosa_new_key_for_client<\/header>/<header>new_key<\/header>/;
     my @out_msg_l = ($msg);  
     return @out_msg_l;
@@ -369,7 +552,16 @@ sub new_key_for_client {
 
 
 sub trigger_action_rescan {
-    my ($msg, $msg_hash) = @_;
+    my ($msg, $msg_hash, $session_id) = @_;
+
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
+
     $msg =~ s/<header>gosa_trigger_action_rescan<\/header>/<header>trigger_action_rescan<\/header>/;
     my @out_msg_l = ($msg);  
     return @out_msg_l;
@@ -377,13 +569,21 @@ sub trigger_action_rescan {
 
 
 sub trigger_action_wake {
-    my ($msg, $msg_hash) = @_;
-    my %data = ( 'macAddress'  => \@{$msg_hash->{'macAddress'}} ,
-            'jobdb_id' => \@{$msg_hash->{'jobdb_id'}},
-            );
+    my ($msg, $msg_hash, $session_id) = @_;
+
+    my $jobdb_id = @{$msg_hash->{'jobdb_id'}}[0];
+    if( defined $jobdb_id) {
+        my $sql_statement = "UPDATE $main::job_queue_tn SET status='processed' WHERE id='$jobdb_id'";
+        &main::daemon_log("$session_id DEBUG: $sql_statement", 7); 
+        my $res = $main::job_db->exec_statement($sql_statement);
+    }
+
+
+    my %data = ( 'macAddress'  => \@{$msg_hash->{target}} );
     my $out_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
     my @out_msg_l = ($out_msg);  
     return @out_msg_l;
 }
 
+
 1;