From 9b000b3dcff1cf3636bc7a07cc1ad2055946986a Mon Sep 17 00:00:00 2001
From: Sander van der Burg <s.vanderburg@tudelft.nl>
Date: Thu, 19 Nov 2009 15:12:05 +0000
Subject: [PATCH] Added loadDumps option, which makes it possible to load a
 specific ejabberd configuration on the first startup

svn path=/nixos/branches/upstart-0.6/; revision=18461
---
 modules/services/networking/ejabberd.nix | 33 ++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/modules/services/networking/ejabberd.nix b/modules/services/networking/ejabberd.nix
index 14476d3e3376..82a51267a808 100644
--- a/modules/services/networking/ejabberd.nix
+++ b/modules/services/networking/ejabberd.nix
@@ -41,6 +41,11 @@ in
         description = "Virtualhosts that ejabberd should host. Hostnames are surrounded with doublequotes and separated by commas";
       };
 
+      loadDumps = mkOption {
+        default = [];
+        description = "Configuration dump that should be loaded on the first startup";
+	example = [ ./myejabberd.dump ];
+      };
     };
     
   };
@@ -68,6 +73,7 @@ in
 
             if ! test -d ${cfg.spoolDir}
             then
+	        initialize=1
                 cp -av ${pkgs.ejabberd}/var/lib/ejabberd /var/lib
             fi
             
@@ -79,6 +85,33 @@ in
 	    fi
 	    
 	    ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} start
+	    
+	    ${if cfg.loadDumps == [] then "" else
+	      ''
+	        # Wait until the ejabberd server is available for use
+                count=0
+                while ! ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} status
+                do
+                    if [ $count -eq 30 ]
+                    then
+                        echo "Tried 30 times, giving up..."
+	                exit 1
+                    fi
+
+                    echo "Ejabberd daemon not yet started. Waiting for 1 second..."
+                    count=$((count++))
+                    sleep 1
+                done
+	      
+	        if [ "$initialize" = "1" ]
+	        then
+	            ${concatMapStrings (dump:
+		      ''
+		        echo "Importing dump: ${dump}"
+		        ejabberdctl --config-dir ${cfg.confDir} --logs ${cfg.logsDir} --spool ${cfg.spoolDir} load ${dump}
+		      '') cfg.loadDumps}
+	        fi
+	      ''}
           '';
 
         postStop =