Compare commits
2 Commits
219027a0f1
...
mob/fax-ma
Author | SHA1 | Date | |
---|---|---|---|
f6e3b7509c | |||
7115a93a0b |
@@ -60,6 +60,13 @@
|
||||
roles.default.tags."fax-bridge" = { };
|
||||
};
|
||||
|
||||
asterisk = {
|
||||
module = {
|
||||
name = "asterisk";
|
||||
input = "self";
|
||||
};
|
||||
};
|
||||
|
||||
pocket-id = {
|
||||
module = {
|
||||
name = "pocket-id";
|
||||
|
@@ -1,5 +1,9 @@
|
||||
{ lib, config, ... }:
|
||||
let
|
||||
ata-interface = "enp2s0";
|
||||
|
||||
ipv6Subnet = lib.elemAt (lib.splitString "/" config.clan.core.vars.generators.yggdrasil.files.yggdrasil-subnet.value) 0;
|
||||
ipv6Prefix = lib.elemAt (lib.splitString "/" config.clan.core.vars.generators.yggdrasil.files.yggdrasil-subnet.value) 1;
|
||||
in
|
||||
{
|
||||
# clan.core.vars.generators.networking.files.ata-interface.secret = false;
|
||||
@@ -15,17 +19,15 @@ in
|
||||
];
|
||||
ipv6.addresses = [
|
||||
{
|
||||
address = "fdab:c002:36cb::1";
|
||||
prefixLength = 64;
|
||||
address = ipv6Subnet + "1";
|
||||
prefixLength = lib.toInt ipv6Prefix;
|
||||
}
|
||||
];
|
||||
ipv6.routes = [
|
||||
{
|
||||
address = "fdab:c002:36cb::";
|
||||
prefixLength = 64;
|
||||
}
|
||||
{
|
||||
address = "";
|
||||
address = "200::";
|
||||
prefixLength = 7;
|
||||
# via = "${ipv6Subnet}1";
|
||||
}
|
||||
];
|
||||
};
|
||||
@@ -45,7 +47,7 @@ in
|
||||
domain = "localhost";
|
||||
dhcp-range = [
|
||||
"192.168.254.10,192.168.254.240,255.255.255.0,24h"
|
||||
"fdab:c002:36cb::10,fdab:c002:36cb::240,slaac"
|
||||
"${ipv6Subnet}10,${ipv6Subnet}240,slaac"
|
||||
];
|
||||
dhcp-option = [
|
||||
"3,192.168.254.1"
|
||||
@@ -67,6 +69,10 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv6.conf.all.forwarding" = true;
|
||||
};
|
||||
|
||||
networking.firewall.allowedUDPPorts = [
|
||||
53
|
||||
67
|
||||
|
69
modules/clan/asterisk/default.nix
Normal file
69
modules/clan/asterisk/default.nix
Normal file
@@ -0,0 +1,69 @@
|
||||
{ ... }:
|
||||
{
|
||||
_class = "clan.service";
|
||||
manifest.name = "asterisk";
|
||||
manifest.description = "Asterisk PBX server";
|
||||
manifest.categories = [ "System" ];
|
||||
|
||||
roles.default = {
|
||||
perInstance.nixosModule =
|
||||
{
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
{
|
||||
services.asterisk = {
|
||||
enable = lib.mkDefault true;
|
||||
confFiles = {
|
||||
# Dial plan config
|
||||
"extensions.conf" = ''
|
||||
exten => 1001,1,Dial(PJSIP/user1,20)
|
||||
exten => 1002,1,Dial(PJSIP/user2,20)
|
||||
|
||||
exten => 100,1,Answer()
|
||||
same => n,Wait(1)
|
||||
same => n,Playback(hello-world)
|
||||
same => n,Hangup()
|
||||
'';
|
||||
|
||||
"pjsip.conf" = ''
|
||||
[transport-udp]
|
||||
type=transport
|
||||
protocol=udp
|
||||
bind=0.0.0.0,[::]
|
||||
|
||||
[endpoint_internal](!)
|
||||
type=endpoint
|
||||
context=from-internal
|
||||
disallow=all
|
||||
allow=ulaw
|
||||
|
||||
[auth_userpass](!)
|
||||
type=auth
|
||||
auth_type=userpass
|
||||
|
||||
[aor_dynamic](!)
|
||||
type=aor
|
||||
max_contacts=1
|
||||
|
||||
[user1](endpoint_internal)
|
||||
auth=user1
|
||||
aors=user1
|
||||
[user1](auth_userpass)
|
||||
password=user1
|
||||
username=user1
|
||||
[user1](aor_dynamic)
|
||||
|
||||
[user2](endpoint_internal)
|
||||
auth=user2
|
||||
aors=user2
|
||||
[user2](auth_userpass)
|
||||
password=user2
|
||||
username=user2
|
||||
[user2](aor_dynamic)
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
18
modules/clan/asterisk/flake-module.nix
Normal file
18
modules/clan/asterisk/flake-module.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{ lib, ... }:
|
||||
let
|
||||
module = lib.modules.importApply ./default.nix { };
|
||||
in
|
||||
{
|
||||
clan.modules = {
|
||||
asterisk = module;
|
||||
};
|
||||
perSystem =
|
||||
{ ... }:
|
||||
{
|
||||
clan.nixosTests.asterisk = {
|
||||
imports = [ ./tests/vm/default.nix ];
|
||||
|
||||
clan.modules."@clan/asterisk" = module;
|
||||
};
|
||||
};
|
||||
}
|
39
modules/clan/asterisk/tests/vm/default.nix
Normal file
39
modules/clan/asterisk/tests/vm/default.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
name = "service-asterisk";
|
||||
|
||||
clan = {
|
||||
directory = ./.;
|
||||
inventory = {
|
||||
machines.server = { };
|
||||
|
||||
instances = {
|
||||
asterisk-test = {
|
||||
module.name = "@clan/asterisk";
|
||||
module.input = "self";
|
||||
roles.default.machines."server".settings = { };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nodes = {
|
||||
server = {
|
||||
services.asterisk = {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
server.wait_for_unit("asterisk")
|
||||
|
||||
# Check that garage is running
|
||||
server.succeed("systemctl status asterisk")
|
||||
|
||||
'';
|
||||
}
|
Reference in New Issue
Block a user