From e51fcac73c16a85807905da3f09f94ab575a8e19 Mon Sep 17 00:00:00 2001 From: Sander van der Burg Date: Fri, 10 Dec 2010 14:22:00 +0000 Subject: [PATCH] - deployment.targetHost is now defined as an option - developed services.disnix.infrastructure option, which contains properties for the Disnix infrastructure model (these properties can be either used by Disnix itself or the Avahi publisher) svn path=/nixos/trunk/; revision=25052 --- modules/misc/deployment.nix | 18 ++---- modules/services/misc/disnix.nix | 95 +++++++++++++++++++++----------- 2 files changed, 68 insertions(+), 45 deletions(-) diff --git a/modules/misc/deployment.nix b/modules/misc/deployment.nix index 08559cc2a16..2e0d9d2d082 100644 --- a/modules/misc/deployment.nix +++ b/modules/misc/deployment.nix @@ -5,18 +5,12 @@ with pkgs.lib; { options = { - deployment = mkOption { - description = '' - This option captures various custom attributes related to the configuration of the system, which - are not directly used for building a system configuration. Usually these attributes - are used by external tooling, such as the nixos-deploy-network tool or the Disnix Avahi - publisher. - ''; - default = {}; - example = { - description = "My production machine"; - hostname = "my.test.org"; - country = "NL"; + deployment = { + targetHost = mkOption { + description = '' + This option specifies a hostname or IP address which can be used by nixos-deploy-network + to execute remote deployment operations. + ''; }; }; }; diff --git a/modules/services/misc/disnix.nix b/modules/services/misc/disnix.nix index dee19b0577a..20cbe9b9f40 100644 --- a/modules/services/misc/disnix.nix +++ b/modules/services/misc/disnix.nix @@ -34,6 +34,23 @@ in description = "Whether to enable the DisnixWebService interface running on Apache Tomcat"; }; + publishInfrastructure = { + enable = mkOption { + default = false; + description = "Whether to publish capabilities/properties of this machine in as attributes in the infrastructure option"; + }; + + enableAuthentication = mkOption { + default = false; + description = "Whether to publish authentication credentials through the infrastructure attribute (not recommended in combination with Avahi)"; + }; + }; + + infrastructure = mkOption { + default = {}; + description = "List of name value pairs containing properties for the infrastructure model"; + }; + publishAvahi = mkOption { default = false; description = "Whether to publish capabilities/properties as a Disnix service through Avahi"; @@ -47,62 +64,74 @@ in ###### implementation config = mkIf cfg.enable { - environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService; services.dbus.enable = true; services.dbus.packages = [ pkgs.disnix ]; + services.avahi.enable = cfg.publishAvahi; + services.tomcat.enable = cfg.useWebServiceInterface; services.tomcat.extraGroups = [ "disnix" ]; services.tomcat.javaOpts = "${optionalString cfg.useWebServiceInterface "-Djava.library.path=${pkgs.libmatthew_java}/lib/jni"} "; - services.tomcat.sharedLibs = [] - ++ optional cfg.useWebServiceInterface "${pkgs.DisnixWebService}/share/java/DisnixConnection.jar" + services.tomcat.sharedLibs = optional cfg.useWebServiceInterface "${pkgs.DisnixWebService}/share/java/DisnixConnection.jar" ++ optional cfg.useWebServiceInterface "${pkgs.dbus_java}/share/java/dbus.jar"; - services.tomcat.webapps = [] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService; + services.tomcat.webapps = optional cfg.useWebServiceInterface pkgs.DisnixWebService; users.extraGroups = singleton { name = "disnix"; gid = config.ids.gids.disnix; }; - - jobs.disnix = - { description = "Disnix server"; + + services.disnix.infrastructure = + optionalAttrs (cfg.publishInfrastructure.enable) + ( { hostname = config.networking.hostName; + targetHost = config.deployment.targetHost; + } + // optionalAttrs (config.nixpkgs.system != "") { system = config.nixpkgs.system; } + // optionalAttrs (cfg.useWebServiceInterface) { targetEPR = "http://${config.deployment.targetHost}:8080/DisnixWebService/services/DisnixWebService"; } + // optionalAttrs (config.services.httpd.enable) { documentRoot = config.services.httpd.documentRoot; } + // optionalAttrs (config.services.mysql.enable) { mysqlPort = config.services.mysql.port; } + // optionalAttrs (config.services.tomcat.enable) { tomcatPort = 8080; } + // optionalAttrs (cfg.publishInfrastructure.enableAuthentication) ( + optionalAttrs (config.services.mysql.enable) { mysqlUsername = "root"; mysqlPassword = builtins.readFile config.services.mysql.rootPassword; }) + ) + ; + + jobs = { + disnix = + { description = "Disnix server"; - startOn = "started dbus"; + startOn = "started dbus"; - script = + script = '' export PATH=/var/run/current-system/sw/bin:/var/run/current-system/sw/sbin export HOME=/root ${pkgs.disnix}/bin/disnix-service --activation-modules-dir=${disnix_activation_scripts}/libexec/disnix/activation-scripts ''; - }; - - } // - mkIf cfg.publishAvahi { - - services.avahi.enable = true; - - jobs.disnixAvahi = - { description = "Disnix Avahi publisher"; + }; + } // optionalAttrs cfg.publishAvahi { + disnixAvahi = + { description = "Disnix Avahi publisher"; - startOn = "started avahi-daemon"; + startOn = "started avahi-daemon"; - exec = - '' - ${pkgs.avahi}/bin/avahi-publish-service disnix-$(${pkgs.nettools}/bin/hostname) _disnix._tcp 22 \ - "hostname=\"$(${pkgs.nettools}/bin/hostname)\"" \ - "system=\"$(uname -m)-linux\"" \ - "mem=$(grep 'MemTotal:' /proc/meminfo | sed -e 's/kB//' -e 's/MemTotal://' -e 's/ //g')" \ - ${optionalString (cfg.useWebServiceInterface) ''"targetEPR=\"http://(${pkgs.nettools}/bin/hostname):8080/DisnixWebService/services/DisnixWebService\""''} \ - ${optionalString (config.services.httpd.enable) ''"documentRoot=\"${config.services.httpd.documentRoot}\""''} \ - ${optionalString (config.services.mysql.enable) ''"mysqlPort=3306"''} \ - ${optionalString (config.services.tomcat.enable) ''"tomcatPort=8080"''} \ - "supportedTypes=[$(for i in ${disnix_activation_scripts}/libexec/disnix/activation-scripts/*; do echo -n " \"$(basename $i)\""; done) ]" \ - ${concatMapStrings (deploymentAttrName: let deploymentAttrValue = getAttr deploymentAttrName (config.deployment); in ''${deploymentAttrName}=\"${deploymentAttrValue}\" '' ) (attrNames (config.deployment))} - ''; - }; + exec = + '' + ${pkgs.avahi}/bin/avahi-publish-service disnix-$(${pkgs.nettools}/bin/hostname) _disnix._tcp 22 \ + "hostname=\"$(${pkgs.nettools}/bin/hostname)\"" \ + "system=\"$(uname -m)-linux\"" \ + "mem=$(grep 'MemTotal:' /proc/meminfo | sed -e 's/kB//' -e 's/MemTotal://' -e 's/ //g')" \ + ${optionalString (cfg.useWebServiceInterface) ''"targetEPR=\"http://(${pkgs.nettools}/bin/hostname):8080/DisnixWebService/services/DisnixWebService\""''} \ + ${optionalString (config.services.httpd.enable) ''"documentRoot=\"${config.services.httpd.documentRoot}\""''} \ + ${optionalString (config.services.mysql.enable) ''"mysqlPort=3306"''} \ + ${optionalString (config.services.tomcat.enable) ''"tomcatPort=8080"''} \ + "supportedTypes=[$(for i in ${disnix_activation_scripts}/libexec/disnix/activation-scripts/*; do echo -n " \"$(basename $i)\""; done) ]" \ + ${concatMapStrings (deploymentAttrName: let deploymentAttrValue = getAttr deploymentAttrName (config.deployment); in ''${deploymentAttrName}=\"${deploymentAttrValue}\" '' ) (attrNames (config.deployment))} + ''; + }; + }; }; }