diff --git a/modules/services/networking/ejabberd.nix b/modules/services/networking/ejabberd.nix index 14476d3e337..82a51267a80 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 =