Code

Fix LHM #8687
[gosa.git] / trunk / gosa-si / server / events / gosaTriggered.pm
index 73a4e95b6a3986958f09de48f9e4b1995eae05f5..f72d5798b68e3aa4ee9dda053a0c627c0ec97421 100644 (file)
@@ -162,12 +162,14 @@ sub recreate_fai_server_db {
         my $res = $main::job_db->exec_statement($sql_statement);
     }
 
-    $main::fai_server_db->create_table("new_fai_server", \@main::fai_server_col_names);
+    my $res = $main::fai_server_db->create_table("new_fai_server", \@main::fai_server_col_names);
+    if ($res) {
+        return ( $out_msg );
+    }
     &main::create_fai_server_db("new_fai_server",undef,"dont", $session_id);
     $main::fai_server_db->move_table("new_fai_server", $main::fai_server_tn);
-    
-    my @out_msg_l = ( $out_msg );
-    return @out_msg_l;
+
+    return ( $out_msg );
 }
 
 
@@ -182,12 +184,14 @@ sub recreate_fai_release_db {
         my $res = $main::job_db->exec_statement($sql_statement);
     }
 
-    $main::fai_release_db->create_table("new_fai_release", \@main::fai_release_col_names);
+    my $res = $main::fai_release_db->create_table("new_fai_release", \@main::fai_release_col_names);
+    if ($res) {
+        return ( $out_msg );
+    }
     &main::create_fai_release_db("new_fai_release", $session_id);
     $main::fai_release_db->move_table("new_fai_release", $main::fai_release_tn);
 
-    my @out_msg_l = ( $out_msg );
-    return @out_msg_l;
+    return ( $out_msg );
 }
 
 
@@ -202,7 +206,7 @@ sub recreate_packages_list_db {
                my $res = $main::job_db->exec_statement($sql_statement);
        }
 
-       &main::create_packages_list_db;
+       &main::create_packages_list_db(undef, undef, $session_id);
 
        my @out_msg_l = ( $out_msg );
        return @out_msg_l;
@@ -641,13 +645,16 @@ sub trigger_action_reinstall {
     $msg =~ s/<header>gosa_trigger_action_reinstall<\/header>/<header>trigger_action_reinstall<\/header>/;
 
     &main::change_fai_state('reinstall', \@{$msg_hash->{macaddress}}, $session_id);
+    &main::change_goto_state('active', \@{$msg_hash->{macaddress}}, $session_id);
+    my @out_msg_l = &set_activated_for_installation($msg, $msg_hash, $session_id);
 
     my %data = ( 'macaddress'  => \@{$msg_hash->{macaddress}} );
     my $wake_msg = &build_msg("trigger_wake", "GOSA", "KNOWN_SERVER", \%data);
     # invoke trigger wake for this gosa-si-server
     &main::server_server_com::trigger_wake($msg, $msg_hash, $session_id);
 
-    my @out_msg_l = ($wake_msg, $msg);  
+    push(@out_msg_l, $wake_msg);
+    push(@out_msg_l, $msg);
     return @out_msg_l;
 }
 
@@ -848,15 +855,14 @@ sub trigger_activate_new {
       );
       if($ldap_mesg->count == 1) {
         $ogroup_entry= $ldap_mesg->pop_entry();
+        &main::daemon_log("$session_id DEBUG: A GosaGroupOfNames with cn '$ogroup' was found in base '".$main::ldap_base."'!", 5);
       } elsif ($ldap_mesg->count == 0) {
         &main::daemon_log("$session_id ERROR: A GosaGroupOfNames with cn '$ogroup' was not found in base '".$main::ldap_base."'!", 1);
-        $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting' WHERE id = $jobdb_id");
-        $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET timestamp = '".(&calc_timestamp(&get_time(), 'plus', 10))."' WHERE id = $jobdb_id");
+        $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting', timestamp = '".(&calc_timestamp(&get_time(), 'plus', 60))."' WHERE id = $jobdb_id");
         return undef;
       } else {
         &main::daemon_log("$session_id ERROR: More than one ObjectGroups with cn '$ogroup' was found in base '".$main::ldap_base."'!", 1);
-        $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting' WHERE id = $jobdb_id");
-        $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET timestamp = '".(&calc_timestamp(&get_time(), 'plus', 10))."' WHERE id = $jobdb_id");
+        $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting', timestamp = '".(&calc_timestamp(&get_time(), 'plus', 60))."' WHERE id = $jobdb_id");
         return undef;
       }
 
@@ -901,8 +907,7 @@ sub trigger_activate_new {
             return undef;
         } else {
           &main::daemon_log("$session_id INFO: System with mac address '$mac' was moved to base '".$main::ldap_base."'! Re-queuing job.", 4);
-          $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting' WHERE id = $jobdb_id");
-          $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET timestamp = '".(&calc_timestamp(&get_time(), 'plus', 10))."' WHERE id = $jobdb_id");
+          $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting', timestamp = '".(&calc_timestamp(&get_time(), 'plus', 10))."' WHERE id = $jobdb_id");
           return undef;
         }
       }
@@ -936,6 +941,8 @@ sub trigger_activate_new {
           my $oclass_result = $ldap_entry->update($ldap_handle);
           if ($oclass_result->code() != 0) {
             &main::daemon_log("$session_id ERROR: Adding the ObjectClass '$oclass' failed (code '".$oclass_result->code()."') with '".$oclass_result->{'errorMessage'}."'!", 1);
+          } else {
+            &main::daemon_log("$session_id DEBUG: Adding the ObjectClass '$oclass' to '".($ldap_entry->dn())."' succeeded!", 5);
           }
         }
       }
@@ -949,6 +956,8 @@ sub trigger_activate_new {
           my $replace_result = $ldap_entry->update($ldap_handle);
           if ($replace_result->code() != 0) {
             &main::daemon_log("$session_id ERROR: Setting the FAIstate to install failed with code '".$replace_result->code()."') and message '".$replace_result->{'errorMessage'}."'!", 1);
+          } else {
+            &main::daemon_log("$session_id DEBUG: Setting the FAIstate to install for '".($ldap_entry->dn())."' succeeded!", 5);
           }
         }
       } else {
@@ -958,6 +967,8 @@ sub trigger_activate_new {
         my $add_result = $ldap_entry->update($ldap_handle);
         if ($add_result->code() != 0) {
           &main::daemon_log("$session_id ERROR: Setting the FAIstate to install failed with code '".$add_result->code()."') and message '".$add_result->{'errorMessage'}."'!", 1);
+        } else {
+          &main::daemon_log("$session_id DEBUG: Setting the FAIstate to install for '".($ldap_entry->dn())."' succeeded!", 5);
         }
       }
 
@@ -967,8 +978,7 @@ sub trigger_activate_new {
       # $ldap_entry = Net::LDAP::Entry->new();
       # $ldap_entry->dn("cn=$mac,$base");
       &main::daemon_log("$session_id WARNING: No System with mac address '$mac' was found in base '".$main::ldap_base."'! Re-queuing job.", 4);
-      $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting' WHERE id = $jobdb_id");
-      $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET timestamp = '".(&calc_timestamp(&get_time(), 'plus', 10))."' WHERE id = $jobdb_id");
+      $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting', timestamp = '".(&calc_timestamp(&get_time(), 'plus', 60))."' WHERE id = $jobdb_id");
       return undef;
     } else {
       &main::daemon_log("$session_id ERROR: More than one system with mac address '$mac' was found in base '".$main::ldap_base."'!", 1);
@@ -986,6 +996,8 @@ sub trigger_activate_new {
       my $ogroup_result = $ogroup_entry->update($ldap_handle);
       if ($ogroup_result->code() != 0) {
         &main::daemon_log("$session_id ERROR: Updating the ObjectGroup '$ogroup' failed (code '".$ogroup_result->code()."') with '".$ogroup_result->{'errorMessage'}."'!", 1);
+      } else {
+        &main::daemon_log("$session_id DEBUG: Updating the ObjectGroup '$ogroup' for member '".($ldap_entry->dn())."' succeeded!", 5);
       }
     } else {
       &main::daemon_log("$session_id DEBUG: System with mac address '$mac' is already a member of ObjectGroup '$ogroup'.", 5);
@@ -1001,6 +1013,7 @@ sub trigger_activate_new {
         if ($activate_result->code() != 0) {
           &main::daemon_log("$session_id ERROR: Activating system '".$ldap_entry->dn()."' failed (code '".$activate_result->code()."') with '".$activate_result->{'errorMessage'}."'!", 1);
         } else {
+          &main::daemon_log("$session_id DEBUG: Activating system '".$ldap_entry->dn()."' succeeded!", 5);
           $activate_client = 1;
         }
       } else {
@@ -1014,17 +1027,24 @@ sub trigger_activate_new {
       if ($activate_result->code() != 0) {
         &main::daemon_log("$session_id ERROR: Activating system '".$ldap_entry->dn()."' failed (code '".$activate_result->code()."') with '".$activate_result->{'errorMessage'}."'!", 1);
       } else {
+        &main::daemon_log("$session_id DEBUG: Activating system '".$ldap_entry->dn()."' succeeded!", 5);
         $activate_client = 1;
       }
     }
 
     if($activate_client == 1) {
+        &main::daemon_log("$session_id DEBIG: Activating system with mac address '$mac'!", 5);
 
         # Create delivery list
         my @out_msg_l;
 
         # Set job to done
         $main::job_db->exec_statement("UPDATE jobs SET status = 'done' WHERE id = $jobdb_id");
+    
+        # If a client gets a 'set_activated_for_installation' msg, always deliver a fresh 'new_ldap_config'
+        # just for backup and robustness purposes
+        my $ldap_out_msg = &ClientPackages::new_ldap_config($mac, $session_id);
+        push(@out_msg_l, $ldap_out_msg);
 
         # create set_activated_for_installation message for delivery
         my $out_hash = &create_xml_hash("set_activated_for_installation", $source, $target);
@@ -1034,10 +1054,9 @@ sub trigger_activate_new {
         # Return delivery list of messages
         return @out_msg_l;
 
-    }  else {
+    } else {
       &main::daemon_log("$session_id WARNING: Activating system with mac address '$mac' failed! Re-queuing job.", 4);
-      $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting' WHERE id = $jobdb_id");
-      $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET timestamp = '".(&calc_timestamp(&get_time(), 'plus', 10))."' WHERE id = $jobdb_id");
+      $main::job_db->exec_statement("UPDATE ".$main::job_queue_tn." SET status = 'waiting',  timestamp = '".(&calc_timestamp(&get_time(), 'plus', 60))."' WHERE id = $jobdb_id");
     }
     return undef;
 }