adguardhome: Add schema_version
This will add `passthru.schema_version` to be used as default value for the adguardhome module. It will also update the `update.sh` to keep the `schema_version` in sync with the version by inspecting the sourcecode. This might break existing configs, if they use deprecated values that don't appear in newer schema_versions and schema_version wasn't set explicitly. Explicit declarations of schema_version always have higher priority. This also removes the `host` and `config` settings in favour of using the appropriate `settings`. Fixes #173938 Co-authored-by: Sandro <sandro.jaeckel@gmail.com>
This commit is contained in:
parent
8ee9c8d3ed
commit
1526a1b041
@ -761,6 +761,14 @@
|
|||||||
for vim).
|
for vim).
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <literal>adguardhome</literal> module no longer uses
|
||||||
|
<literal>host</literal> and <literal>port</literal> options,
|
||||||
|
use <literal>settings.bind_host</literal> and
|
||||||
|
<literal>settings.bind_port</literal> instead.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The default <literal>kops</literal> version is now 1.25.1 and
|
The default <literal>kops</literal> version is now 1.25.1 and
|
||||||
|
@ -242,6 +242,8 @@ Available as [services.patroni](options.html#opt-services.patroni.enable).
|
|||||||
Use `configure.packages` instead.
|
Use `configure.packages` instead.
|
||||||
- Neovim can not be configured with plug anymore (still works for vim).
|
- Neovim can not be configured with plug anymore (still works for vim).
|
||||||
|
|
||||||
|
- The `adguardhome` module no longer uses `host` and `port` options, use `settings.bind_host` and `settings.bind_port` instead.
|
||||||
|
|
||||||
- The default `kops` version is now 1.25.1 and support for 1.22 and older has been dropped.
|
- The default `kops` version is now 1.25.1 and support for 1.22 and older has been dropped.
|
||||||
|
|
||||||
- `k3s` no longer supports docker as runtime due to upstream dropping support.
|
- `k3s` no longer supports docker as runtime due to upstream dropping support.
|
||||||
|
@ -12,37 +12,26 @@ let
|
|||||||
"--config /var/lib/AdGuardHome/AdGuardHome.yaml"
|
"--config /var/lib/AdGuardHome/AdGuardHome.yaml"
|
||||||
] ++ cfg.extraArgs);
|
] ++ cfg.extraArgs);
|
||||||
|
|
||||||
baseConfig = {
|
|
||||||
bind_host = cfg.host;
|
|
||||||
bind_port = cfg.port;
|
|
||||||
};
|
|
||||||
|
|
||||||
configFile = pkgs.writeTextFile {
|
configFile = pkgs.writeTextFile {
|
||||||
name = "AdGuardHome.yaml";
|
name = "AdGuardHome.yaml";
|
||||||
text = builtins.toJSON (recursiveUpdate cfg.settings baseConfig);
|
text = builtins.toJSON cfg.settings;
|
||||||
checkPhase = "${pkgs.adguardhome}/bin/adguardhome -c $out --check-config";
|
checkPhase = "${pkgs.adguardhome}/bin/adguardhome -c $out --check-config";
|
||||||
};
|
};
|
||||||
|
|
||||||
in {
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
imports =
|
||||||
|
let cfgPath = [ "services" "adguardhome" ];
|
||||||
|
in
|
||||||
|
[
|
||||||
|
(mkRenamedOptionModuleWith { sinceRelease = 2211; from = cfgPath ++ [ "host" ]; to = cfgPath ++ [ "settings" "bind_host" ]; })
|
||||||
|
(mkRenamedOptionModuleWith { sinceRelease = 2211; from = cfgPath ++ [ "port" ]; to = cfgPath ++ [ "settings" "bind_port" ]; })
|
||||||
|
];
|
||||||
|
|
||||||
options.services.adguardhome = with types; {
|
options.services.adguardhome = with types; {
|
||||||
enable = mkEnableOption (lib.mdDoc "AdGuard Home network-wide ad blocker");
|
enable = mkEnableOption (lib.mdDoc "AdGuard Home network-wide ad blocker");
|
||||||
|
|
||||||
host = mkOption {
|
|
||||||
default = "0.0.0.0";
|
|
||||||
type = str;
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Host address to bind HTTP server to.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
port = mkOption {
|
|
||||||
default = 3000;
|
|
||||||
type = port;
|
|
||||||
description = lib.mdDoc ''
|
|
||||||
Port to serve HTTP pages on.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
openFirewall = mkOption {
|
openFirewall = mkOption {
|
||||||
default = false;
|
default = false;
|
||||||
type = bool;
|
type = bool;
|
||||||
@ -62,8 +51,35 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
settings = mkOption {
|
settings = mkOption {
|
||||||
type = (pkgs.formats.yaml { }).type;
|
|
||||||
default = { };
|
default = { };
|
||||||
|
type = submodule {
|
||||||
|
freeformType = (pkgs.formats.yaml { }).type;
|
||||||
|
options = {
|
||||||
|
schema_version = mkOption {
|
||||||
|
default = pkgs.adguardhome.schema_version;
|
||||||
|
defaultText = literalExpression "pkgs.adguardhome.schema_version";
|
||||||
|
type = int;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Schema version for the configuration.
|
||||||
|
Defaults to the `schema_version` supplied by `pkgs.adguardhome`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
bind_host = mkOption {
|
||||||
|
default = "0.0.0.0";
|
||||||
|
type = str;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Host address to bind HTTP server to.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
bind_port = mkOption {
|
||||||
|
default = 3000;
|
||||||
|
type = port;
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Port to serve HTTP pages on.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
description = lib.mdDoc ''
|
description = lib.mdDoc ''
|
||||||
AdGuard Home configuration. Refer to
|
AdGuard Home configuration. Refer to
|
||||||
<https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#configuration-file>
|
<https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#configuration-file>
|
||||||
@ -135,6 +151,6 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.port ];
|
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.settings.bind_port ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -2,16 +2,13 @@
|
|||||||
name = "adguardhome";
|
name = "adguardhome";
|
||||||
|
|
||||||
nodes = {
|
nodes = {
|
||||||
minimalConf = { ... }: {
|
|
||||||
services.adguardhome = { enable = true; };
|
|
||||||
};
|
|
||||||
|
|
||||||
declarativeConf = { ... }: {
|
declarativeConf = { ... }: {
|
||||||
services.adguardhome = {
|
services.adguardhome = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
mutableSettings = false;
|
mutableSettings = false;
|
||||||
settings = {
|
settings = {
|
||||||
|
schema_version = 0;
|
||||||
dns = {
|
dns = {
|
||||||
bind_host = "0.0.0.0";
|
bind_host = "0.0.0.0";
|
||||||
bootstrap_dns = "127.0.0.1";
|
bootstrap_dns = "127.0.0.1";
|
||||||
@ -26,6 +23,7 @@
|
|||||||
|
|
||||||
mutableSettings = true;
|
mutableSettings = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
schema_version = 0;
|
||||||
dns = {
|
dns = {
|
||||||
bind_host = "0.0.0.0";
|
bind_host = "0.0.0.0";
|
||||||
bootstrap_dns = "127.0.0.1";
|
bootstrap_dns = "127.0.0.1";
|
||||||
@ -36,10 +34,6 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
testScript = ''
|
testScript = ''
|
||||||
with subtest("Minimal config test"):
|
|
||||||
minimalConf.wait_for_unit("adguardhome.service")
|
|
||||||
minimalConf.wait_for_open_port(3000)
|
|
||||||
|
|
||||||
with subtest("Declarative config test, DNS will be reachable"):
|
with subtest("Declarative config test, DNS will be reachable"):
|
||||||
declarativeConf.wait_for_unit("adguardhome.service")
|
declarativeConf.wait_for_unit("adguardhome.service")
|
||||||
declarativeConf.wait_for_open_port(53)
|
declarativeConf.wait_for_open_port(53)
|
||||||
|
@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
passthru = {
|
passthru = {
|
||||||
updateScript = ./update.sh;
|
updateScript = ./update.sh;
|
||||||
|
schema_version = 14;
|
||||||
tests.adguardhome = nixosTests.adguardhome;
|
tests.adguardhome = nixosTests.adguardhome;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,6 +13,11 @@ version=$(jq -r '.tag_name' <<<"$latest_release")
|
|||||||
|
|
||||||
echo "got version $version"
|
echo "got version $version"
|
||||||
|
|
||||||
|
schema_version=$(curl --silent "https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/${version}/internal/home/upgrade.go" \
|
||||||
|
| grep -Po '(?<=const currentSchemaVersion = )[[:digit:]]+$')
|
||||||
|
|
||||||
|
echo "got schema_version $schema_version"
|
||||||
|
|
||||||
declare -A systems
|
declare -A systems
|
||||||
systems[linux_386]=i686-linux
|
systems[linux_386]=i686-linux
|
||||||
systems[linux_amd64]=x86_64-linux
|
systems[linux_amd64]=x86_64-linux
|
||||||
@ -37,3 +42,4 @@ done
|
|||||||
echo '}' >> "$bins"
|
echo '}' >> "$bins"
|
||||||
|
|
||||||
sed -i -r -e "s/version\s*?=\s*?.*?;/version = \"${version#v}\";/" "$dirname/default.nix"
|
sed -i -r -e "s/version\s*?=\s*?.*?;/version = \"${version#v}\";/" "$dirname/default.nix"
|
||||||
|
sed -i -r -e "s/schema_version\s*?=\s*?.*?;/schema_version = ${schema_version};/" "$dirname/default.nix"
|
||||||
|
Loading…
Reference in New Issue
Block a user