mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-13 13:40:28 +03:00
Merge pull request #5622 from offlinehacker/panamax
panamax: new package and service
This commit is contained in:
commit
f85abb041a
14 changed files with 2094 additions and 0 deletions
|
@ -177,6 +177,8 @@
|
|||
cadvisor = 167;
|
||||
nylon = 168;
|
||||
apache-kafka = 169;
|
||||
panamax = 170;
|
||||
|
||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||
|
||||
nixbld = 30000; # start of range of uids
|
||||
|
@ -315,6 +317,7 @@
|
|||
kubernetes = 162;
|
||||
gitlab = 165;
|
||||
nylon = 166;
|
||||
panamax = 170;
|
||||
|
||||
# When adding a gid, make sure it doesn't match an existing
|
||||
# uid. Users and groups with the same name should have equal
|
||||
|
|
|
@ -104,6 +104,7 @@
|
|||
./services/backup/tarsnap.nix
|
||||
./services/cluster/fleet.nix
|
||||
./services/cluster/kubernetes.nix
|
||||
./services/cluster/panamax.nix
|
||||
./services/computing/torque/server.nix
|
||||
./services/computing/torque/mom.nix
|
||||
./services/continuous-integration/jenkins/default.nix
|
||||
|
|
153
nixos/modules/services/cluster/panamax.nix
Normal file
153
nixos/modules/services/cluster/panamax.nix
Normal file
|
@ -0,0 +1,153 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.panamax;
|
||||
|
||||
panamax_api = pkgs.panamax_api.override { dataDir = cfg.dataDir + "/api"; };
|
||||
panamax_ui = pkgs.panamax_ui.override { dataDir = cfg.dataDir + "/ui"; };
|
||||
|
||||
in {
|
||||
|
||||
##### Interface
|
||||
options.services.panamax = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to enable Panamax service.
|
||||
'';
|
||||
};
|
||||
|
||||
UIPort = mkOption {
|
||||
type = types.int;
|
||||
default = 8888;
|
||||
description = ''
|
||||
Panamax UI listening port.
|
||||
'';
|
||||
};
|
||||
|
||||
APIPort = mkOption {
|
||||
type = types.int;
|
||||
default = 3000;
|
||||
description = ''
|
||||
Panamax UI listening port.
|
||||
'';
|
||||
};
|
||||
|
||||
dataDir = mkOption {
|
||||
type = types.str;
|
||||
default = "/var/lib/panamax";
|
||||
description = ''
|
||||
Data dir for Panamax.
|
||||
'';
|
||||
};
|
||||
|
||||
fleetctlEndpoint = mkOption {
|
||||
type = types.str;
|
||||
default = "http://127.0.0.1:4001";
|
||||
description = ''
|
||||
Panamax fleetctl endpoint.
|
||||
'';
|
||||
};
|
||||
|
||||
journalEndpoint = mkOption {
|
||||
type = types.str;
|
||||
default = "http://127.0.0.1:19531";
|
||||
description = ''
|
||||
Panamax journal endpoint.
|
||||
'';
|
||||
};
|
||||
|
||||
secretKey = mkOption {
|
||||
type = types.str;
|
||||
default = "SomethingVeryLong.";
|
||||
description = ''
|
||||
Panamax secret key (do change this).
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
##### Implementation
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.panamax-api = {
|
||||
description = "Panamax API";
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" "fleet.service" "etcd.service" "docker.service" ];
|
||||
|
||||
path = [ panamax_api ];
|
||||
environment = {
|
||||
RAILS_ENV = "production";
|
||||
JOURNAL_ENDPOINT = cfg.journalEndpoint;
|
||||
FLEETCTL_ENDPOINT = cfg.fleetctlEndpoint;
|
||||
PANAMAX_DATABASE_PATH = "${cfg.dataDir}/api/db/mnt/db.sqlite3";
|
||||
};
|
||||
|
||||
preStart = ''
|
||||
rm -rf ${cfg.dataDir}/state/tmp
|
||||
mkdir -p ${cfg.dataDir}/api/{db/mnt,state/log,state/tmp}
|
||||
ln -sf ${panamax_api}/share/panamax-api/_db/{schema.rb,seeds.rb,migrate} ${cfg.dataDir}/api/db/
|
||||
|
||||
if [ ! -f ${cfg.dataDir}/.created ]; then
|
||||
bundle exec rake db:setup
|
||||
bundle exec rake db:seed
|
||||
bundle exec rake panamax:templates:load || true
|
||||
touch ${cfg.dataDir}/.created
|
||||
else
|
||||
bundle exec rake db:migrate
|
||||
fi
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${panamax_api}/bin/bundle exec rails server --binding 127.0.0.1 --port ${toString cfg.APIPort}";
|
||||
User = "panamax";
|
||||
Group = "panamax";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.panamax-ui = {
|
||||
description = "Panamax UI";
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" "panamax_api.service" ];
|
||||
|
||||
path = [ panamax_ui ];
|
||||
environment = {
|
||||
RAILS_ENV = "production";
|
||||
JOURNAL_ENDPOINT = cfg.journalEndpoint;
|
||||
PMX_API_PORT_3000_TCP_ADDR = "localhost";
|
||||
PMX_API_PORT_3000_TCP_PORT = toString cfg.APIPort;
|
||||
SECRET_KEY_BASE = cfg.secretKey;
|
||||
};
|
||||
|
||||
preStart = ''
|
||||
rm -rf ${cfg.dataDir}/state/tmp
|
||||
mkdir -p ${cfg.dataDir}/ui/state/{log,tmp}
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${panamax_ui}/bin/bundle exec rails server --binding 127.0.0.1 --port ${toString cfg.UIPort}";
|
||||
User = "panamax";
|
||||
Group = "panamax";
|
||||
};
|
||||
};
|
||||
|
||||
users.extraUsers.panamax =
|
||||
{ uid = config.ids.uids.panamax;
|
||||
description = "Panamax user";
|
||||
createHome = true;
|
||||
home = cfg.dataDir;
|
||||
extraGroups = [ "docker" ];
|
||||
};
|
||||
|
||||
services.journald.enableHttpGateway = mkDefault true;
|
||||
services.fleet.enable = mkDefault true;
|
||||
virtualisation.docker.enable = mkDefault true;
|
||||
|
||||
environment.systemPackages = [ panamax_api panamax_ui ];
|
||||
users.extraGroups.panamax.gid = config.ids.gids.panamax;
|
||||
};
|
||||
}
|
|
@ -300,6 +300,7 @@ in rec {
|
|||
tests.nfs3 = callTest tests/nfs.nix { version = 3; };
|
||||
tests.nsd = callTest tests/nsd.nix {};
|
||||
tests.openssh = callTest tests/openssh.nix {};
|
||||
tests.panamax = scrubDrv (import tests/panamax.nix { system = "x86_64-linux"; });
|
||||
tests.peerflix = callTest tests/peerflix.nix {};
|
||||
tests.printing = callTest tests/printing.nix {};
|
||||
tests.proxy = callTest tests/proxy.nix {};
|
||||
|
|
18
nixos/tests/panamax.nix
Normal file
18
nixos/tests/panamax.nix
Normal file
|
@ -0,0 +1,18 @@
|
|||
import ./make-test.nix {
|
||||
name = "panamax";
|
||||
|
||||
machine = { config, pkgs, ... }: {
|
||||
services.panamax.enable = true;
|
||||
};
|
||||
|
||||
testScript =
|
||||
''
|
||||
startAll;
|
||||
$machine->waitForUnit("panamax-api.service");
|
||||
$machine->waitForUnit("panamax-ui.service");
|
||||
$machine->waitForOpenPort(3000);
|
||||
$machine->waitForOpenPort(8888);
|
||||
$machine->succeed("curl --fail http://localhost:8888/ > /dev/null");
|
||||
$machine->shutdown;
|
||||
'';
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue