1{ lib, ... }:
2{
3 name = "nomad";
4 nodes = {
5 default_server =
6 { pkgs, lib, ... }:
7 {
8 networking = {
9 interfaces.eth1.ipv4.addresses = lib.mkOverride 0 [
10 {
11 address = "192.168.1.1";
12 prefixLength = 16;
13 }
14 ];
15 };
16
17 environment.etc."nomad.custom.json".source = (pkgs.formats.json { }).generate "nomad.custom.json" {
18 region = "universe";
19 datacenter = "earth";
20 };
21
22 services.nomad = {
23 enable = true;
24
25 settings = {
26 server = {
27 enabled = true;
28 bootstrap_expect = 1;
29 };
30 };
31
32 extraSettingsPaths = [ "/etc/nomad.custom.json" ];
33 enableDocker = false;
34 };
35 };
36
37 custom_state_dir_server =
38 { pkgs, lib, ... }:
39 {
40 networking = {
41 interfaces.eth1.ipv4.addresses = lib.mkOverride 0 [
42 {
43 address = "192.168.1.1";
44 prefixLength = 16;
45 }
46 ];
47 };
48
49 environment.etc."nomad.custom.json".source = (pkgs.formats.json { }).generate "nomad.custom.json" {
50 region = "universe";
51 datacenter = "earth";
52 };
53
54 services.nomad = {
55 enable = true;
56 dropPrivileges = false;
57
58 settings = {
59 data_dir = "/nomad/data/dir";
60 server = {
61 enabled = true;
62 bootstrap_expect = 1;
63 };
64 };
65
66 extraSettingsPaths = [ "/etc/nomad.custom.json" ];
67 enableDocker = false;
68 };
69
70 systemd.services.nomad.serviceConfig.ExecStartPre = "${pkgs.writeShellScript "mk_data_dir" ''
71 set -euxo pipefail
72
73 ${pkgs.coreutils}/bin/mkdir -p /nomad/data/dir
74 ''}";
75 };
76 };
77
78 testScript = ''
79 def test_nomad_server(server):
80 server.wait_for_unit("nomad.service")
81
82 # wait for healthy server
83 server.wait_until_succeeds(
84 "[ $(nomad operator raft list-peers | grep true | wc -l) == 1 ]"
85 )
86
87 # wait for server liveness
88 server.succeed("[ $(nomad server members | grep -o alive | wc -l) == 1 ]")
89
90 # check the region
91 server.succeed("nomad server members | grep -o universe")
92
93 # check the datacenter
94 server.succeed("[ $(nomad server members | grep -o earth | wc -l) == 1 ]")
95
96
97 servers = [default_server, custom_state_dir_server]
98
99 for server in servers:
100 test_nomad_server(server)
101 '';
102}