228 lines
6.6 KiB
Nix
228 lines
6.6 KiB
Nix
import ../make-test-python.nix (
|
|
{ lib, pkgs, ... }:
|
|
let
|
|
domain = "peertube.local";
|
|
port = 9000;
|
|
url = "http://${domain}:${toString port}";
|
|
password = "zw4SqYVdcsXUfRX8aaFX";
|
|
registrationTokenFile = "/etc/peertube-runner-registration-token";
|
|
in
|
|
{
|
|
name = "peertube";
|
|
meta.maintainers = with lib.maintainers; [ izorkin ] ++ lib.teams.ngi.members;
|
|
|
|
nodes = {
|
|
database = {
|
|
networking = {
|
|
interfaces.eth1 = {
|
|
ipv4.addresses = [
|
|
{
|
|
address = "192.168.2.10";
|
|
prefixLength = 24;
|
|
}
|
|
];
|
|
};
|
|
firewall.allowedTCPPorts = [
|
|
5432
|
|
31638
|
|
];
|
|
};
|
|
|
|
services.postgresql = {
|
|
enable = true;
|
|
enableTCPIP = true;
|
|
ensureDatabases = [ "peertube_test" ];
|
|
ensureUsers = [
|
|
{
|
|
name = "peertube_test";
|
|
ensureDBOwnership = true;
|
|
}
|
|
];
|
|
authentication = ''
|
|
hostnossl peertube_test peertube_test 192.168.2.11/32 md5
|
|
'';
|
|
initialScript = pkgs.writeText "postgresql_init.sql" ''
|
|
CREATE ROLE peertube_test LOGIN PASSWORD '0gUN0C1mgST6czvjZ8T9';
|
|
'';
|
|
};
|
|
|
|
services.redis.servers.peertube = {
|
|
enable = true;
|
|
bind = "0.0.0.0";
|
|
requirePass = "turrQfaQwnanGbcsdhxy";
|
|
port = 31638;
|
|
};
|
|
};
|
|
|
|
server =
|
|
{ pkgs, ... }:
|
|
{
|
|
environment = {
|
|
etc = {
|
|
"peertube/password-init-root".text = ''
|
|
PT_INITIAL_ROOT_PASSWORD=${password}
|
|
'';
|
|
"peertube/secrets-peertube".text = ''
|
|
063d9c60d519597acef26003d5ecc32729083965d09181ef3949200cbe5f09ee
|
|
'';
|
|
"peertube/password-posgressql-db".text = ''
|
|
0gUN0C1mgST6czvjZ8T9
|
|
'';
|
|
"peertube/password-redis-db".text = ''
|
|
turrQfaQwnanGbcsdhxy
|
|
'';
|
|
};
|
|
};
|
|
|
|
networking = {
|
|
interfaces.eth1 = {
|
|
ipv4.addresses = [
|
|
{
|
|
address = "192.168.2.11";
|
|
prefixLength = 24;
|
|
}
|
|
];
|
|
};
|
|
extraHosts = ''
|
|
192.168.2.11 ${domain}
|
|
'';
|
|
firewall.allowedTCPPorts = [ port ];
|
|
};
|
|
|
|
services.peertube = {
|
|
enable = true;
|
|
localDomain = domain;
|
|
enableWebHttps = false;
|
|
|
|
serviceEnvironmentFile = "/etc/peertube/password-init-root";
|
|
|
|
secrets = {
|
|
secretsFile = "/etc/peertube/secrets-peertube";
|
|
};
|
|
|
|
database = {
|
|
host = "192.168.2.10";
|
|
name = "peertube_test";
|
|
user = "peertube_test";
|
|
passwordFile = "/etc/peertube/password-posgressql-db";
|
|
};
|
|
|
|
redis = {
|
|
host = "192.168.2.10";
|
|
port = 31638;
|
|
passwordFile = "/etc/peertube/password-redis-db";
|
|
};
|
|
|
|
settings = {
|
|
listen = {
|
|
hostname = "0.0.0.0";
|
|
};
|
|
instance = {
|
|
name = "PeerTube Test Server";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
client = {
|
|
environment.systemPackages = [
|
|
pkgs.jq
|
|
pkgs.peertube.cli
|
|
];
|
|
networking = {
|
|
interfaces.eth1 = {
|
|
ipv4.addresses = [
|
|
{
|
|
address = "192.168.2.12";
|
|
prefixLength = 24;
|
|
}
|
|
];
|
|
};
|
|
extraHosts = ''
|
|
192.168.2.11 ${domain}
|
|
'';
|
|
};
|
|
|
|
services.peertube-runner = {
|
|
enable = true;
|
|
# Don't pull in unneeded dependencies.
|
|
enabledJobTypes = [ "video-studio-transcoding" ];
|
|
instancesToRegister = {
|
|
testServer1 = {
|
|
inherit url registrationTokenFile;
|
|
runnerName = "I'm a test!!!";
|
|
};
|
|
testServer2 = {
|
|
inherit url registrationTokenFile;
|
|
runnerName = "I'm also a test...";
|
|
runnerDescription = "Even more testing?!?!";
|
|
};
|
|
};
|
|
};
|
|
# Will be manually started in test script.
|
|
systemd.services.peertube-runner.wantedBy = lib.mkForce [ ];
|
|
};
|
|
|
|
};
|
|
|
|
testScript = ''
|
|
start_all()
|
|
|
|
database.wait_for_unit("postgresql.target")
|
|
database.wait_for_unit("redis-peertube.service")
|
|
|
|
database.wait_for_open_port(5432)
|
|
database.wait_for_open_port(31638)
|
|
|
|
server.wait_for_unit("peertube.service")
|
|
server.wait_for_open_port(${toString port})
|
|
|
|
# Check if PeerTube is running
|
|
client.succeed("curl --fail ${url}/api/v1/config/about | jq -r '.instance.name' | grep 'PeerTube Test Server'")
|
|
|
|
|
|
# PeerTube CLI
|
|
|
|
client.succeed('peertube-cli auth add -u "${url}" -U "root" --password "${password}"')
|
|
client.succeed('peertube-cli auth list | grep "${url}"')
|
|
client.succeed('peertube-cli auth del "${url}"')
|
|
client.fail('peertube-cli auth list | grep "${url}"')
|
|
|
|
|
|
# peertube-runner
|
|
|
|
access_token = client.succeed(
|
|
'peertube-cli get-access-token --url "${url}" --username "root" --password "${password}"'
|
|
).strip()
|
|
# Generate registration token.
|
|
client.succeed(f"curl --fail -X POST -H 'Authorization: Bearer {access_token}' ${url}/api/v1/runners/registration-tokens/generate")
|
|
# Get registration token, and put it where `registrationTokenFile` from the
|
|
# peertube-runner module points to.
|
|
client.succeed(
|
|
f"curl --fail -H 'Authorization: Bearer {access_token}' ${url}/api/v1/runners/registration-tokens" \
|
|
" | jq --raw-output '.data[0].registrationToken'" \
|
|
" > ${registrationTokenFile}"
|
|
)
|
|
|
|
client.systemctl("start peertube-runner.service")
|
|
client.wait_for_unit("peertube-runner.service")
|
|
|
|
runner_command = "sudo -u prunner peertube-runner"
|
|
client.succeed(f'{runner_command} list-registered | grep "I\'m a test!!!"')
|
|
client.succeed(f'{runner_command} list-registered | grep "I\'m also a test..."')
|
|
client.succeed(f'{runner_command} list-registered | grep "Even more testing?!?!"')
|
|
|
|
# Service should still work once instances are already registered.
|
|
client.systemctl("restart peertube-runner.service")
|
|
client.wait_for_unit("peertube-runner.service")
|
|
|
|
|
|
# Cleanup
|
|
|
|
client.shutdown()
|
|
server.shutdown()
|
|
database.shutdown()
|
|
'';
|
|
}
|
|
)
|