From 4704dd43fa4526251ab65c80a118dd089dc8807c Mon Sep 17 00:00:00 2001 From: kurogeek Date: Tue, 21 Oct 2025 17:38:54 +0700 Subject: [PATCH] mob next [ci-skip] [ci skip] [skip ci] lastFile:modules/clan/asterisk/default.nix --- modules/clan/asterisk/default.nix | 64 ++++++++++++++++++++++ modules/clan/asterisk/flake-module.nix | 18 ++++++ modules/clan/asterisk/tests/vm/default.nix | 39 +++++++++++++ 3 files changed, 121 insertions(+) create mode 100644 modules/clan/asterisk/default.nix create mode 100644 modules/clan/asterisk/flake-module.nix create mode 100644 modules/clan/asterisk/tests/vm/default.nix diff --git a/modules/clan/asterisk/default.nix b/modules/clan/asterisk/default.nix new file mode 100644 index 0000000..6e88508 --- /dev/null +++ b/modules/clan/asterisk/default.nix @@ -0,0 +1,64 @@ +{ ... }: +{ + _class = "clan.service"; + manifest.name = "asterisk"; + manifest.description = "Asterisk PBX server"; + manifest.categories = [ "System" ]; + + roles.default = { + perInstance.nixosModule = + { + lib, + config, + ... + }: + { + services.asterisk = { + enable = lib.mkDefault true; + confFiles = { + "extensions.conf" = '' + [tests] + ; Dial 100 for "hello, world" + exten => 100,1,Answer() + same => n,Wait(1) + same => n,Playback(hello-world) + same => n,Hangup() + + [softphones] + include => tests + + [unauthorized] + ''; + "sip.conf" = '' + [general] + allowguest=no ; Require authentication + context=unauthorized ; Send unauthorized users to /dev/null + srvlookup=no ; Don't do DNS lookup + udpbindaddr=0.0.0.0 ; Listen on all interfaces + nat=force_rport,comedia ; Assume device is behind NAT + + [softphone](!) + type=friend ; Match on username first, IP second + context=softphones ; Send to softphones context in + ; extensions.conf file + host=dynamic ; Device will register with asterisk + disallow=all ; Manually specify codecs to allow + allow=g722 + allow=ulaw + allow=alaw + + [myphone](softphone) + secret=GhoshevFew ; Change this password! + ''; + "logger.conf" = '' + [general] + + [logfiles] + ; Add debug output to log + syslog.local0 => notice,warning,error,debug + ''; + }; + }; + }; + }; +} diff --git a/modules/clan/asterisk/flake-module.nix b/modules/clan/asterisk/flake-module.nix new file mode 100644 index 0000000..d06c1d0 --- /dev/null +++ b/modules/clan/asterisk/flake-module.nix @@ -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; + }; + }; +} diff --git a/modules/clan/asterisk/tests/vm/default.nix b/modules/clan/asterisk/tests/vm/default.nix new file mode 100644 index 0000000..0a1f438 --- /dev/null +++ b/modules/clan/asterisk/tests/vm/default.nix @@ -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") + + ''; +}