99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
| 
 | |
|   cfg = config.services.marathon;
 | |
| 
 | |
| in {
 | |
| 
 | |
|   ###### interface
 | |
| 
 | |
|   options.services.marathon = {
 | |
|     enable = mkOption {
 | |
|       type = types.bool;
 | |
|       default = false;
 | |
|       description = ''
 | |
| 	Whether to enable the marathon mesos framework.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     master = mkOption {
 | |
|       type = types.str;
 | |
|       default = "zk://${concatStringsSep "," cfg.zookeeperHosts}/mesos";
 | |
|       example = "zk://1.2.3.4:2181,2.3.4.5:2181,3.4.5.6:2181/mesos";
 | |
|       description = ''
 | |
| 	Mesos master address. See <link xlink:href="https://mesosphere.github.io/marathon/docs/"/> for details.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     zookeeperHosts = mkOption {
 | |
|       type = types.listOf types.str;
 | |
|       default = [ "localhost:2181" ];
 | |
|       example = [ "1.2.3.4:2181" "2.3.4.5:2181" "3.4.5.6:2181" ];
 | |
|       description = ''
 | |
| 	ZooKeeper hosts' addresses.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     user = mkOption {
 | |
|       type = types.str;
 | |
|       default = "marathon";
 | |
|       example = "root";
 | |
|       description = ''
 | |
| 	The user that the Marathon framework will be launched as. If the user doesn't exist it will be created.
 | |
| 	If you want to run apps that require root access or you want to launch apps using arbitrary users, that
 | |
| 	is using the `--mesos_user` flag then you need to change this to `root`.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     httpPort = mkOption {
 | |
|       type = types.int;
 | |
|       default = 8080;
 | |
|       description = ''
 | |
| 	Marathon listening port for HTTP connections.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     extraCmdLineOptions = mkOption {
 | |
|       type = types.listOf types.str;
 | |
|       default = [ ];
 | |
|       example = [ "--https_port=8443" "--zk_timeout=10000" "--marathon_store_timeout=2000" ];
 | |
|       description = ''
 | |
| 	Extra command line options to pass to Marathon.
 | |
| 	See <link xlink:href="https://mesosphere.github.io/marathon/docs/command-line-flags.html"/> for all possible flags.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     environment = mkOption {
 | |
|       default = { };
 | |
|       type = types.attrs;
 | |
|       example = { JAVA_OPTS = "-Xmx512m"; MESOSPHERE_HTTP_CREDENTIALS = "username:password"; };
 | |
|       description = ''
 | |
| 	Environment variables passed to Marathon.
 | |
|       '';
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   ###### implementation
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     systemd.services.marathon = {
 | |
|       description = "Marathon Service";
 | |
|       environment = cfg.environment;
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       after = [ "network.target" "zookeeper.service" "mesos-master.service" "mesos-slave.service" ];
 | |
| 
 | |
|       serviceConfig = {
 | |
|         ExecStart = "${pkgs.marathon}/bin/marathon --master ${cfg.master} --zk zk://${concatStringsSep "," cfg.zookeeperHosts}/marathon --http_port ${toString cfg.httpPort} ${concatStringsSep " " cfg.extraCmdLineOptions}";
 | |
|         User = cfg.user;
 | |
|         Restart = "always";
 | |
|         RestartSec = "2";
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     users.users.${cfg.user} = { };
 | |
|   };
 | |
| }
 | 
