覆盖 Nix 中的服务定义?
Override a service definition in Nix?
我正在 NixOps 中编写部署定义。作为该定义的一部分,我需要修改 <nixpkgs>
.
提供的现有服务定义
我不能配置服务来做我想做的事。因为服务定义本身定义了一些我需要修改的推导,所以我不能只添加我自己的推导。我能看到的唯一解决方案是覆盖服务定义本身,在修补副本中出售。
但如果我尝试
options.services.<myservice> = ... # new service definition
Nix 抱怨我正在重新定义所有服务选项。
如果我这样做
options.services.<myservice>.override = ...
然后对服务定义的更改不会反映在我的使用中
services.<myservice>
稍后(具体来说,我定义了新的选项,但它们不能使用)。
我怎样才能真正告诉 Nix 我想覆盖服务定义,以便我可以提供我自己的服务版本?
动机
nixpkgs
提供的Grafana服务不完整。你不能 provision notifiers, and because the service definition controls provisioning, you can't manually modify the filesystem - you have to control the provisioning derivation.
有一个 PR to fix this,但需要一段时间才能合并。同时,我想在本地使用PR中的版本。
您可以使用 disabledModules 来实现。
看起来像
{
disabledModules = [ "services/monitoring/grafana.nix" ];
imports = [
./my-modules/grafana.nix
];
}
我正在 NixOps 中编写部署定义。作为该定义的一部分,我需要修改 <nixpkgs>
.
我不能配置服务来做我想做的事。因为服务定义本身定义了一些我需要修改的推导,所以我不能只添加我自己的推导。我能看到的唯一解决方案是覆盖服务定义本身,在修补副本中出售。
但如果我尝试
options.services.<myservice> = ... # new service definition
Nix 抱怨我正在重新定义所有服务选项。
如果我这样做
options.services.<myservice>.override = ...
然后对服务定义的更改不会反映在我的使用中
services.<myservice>
稍后(具体来说,我定义了新的选项,但它们不能使用)。
我怎样才能真正告诉 Nix 我想覆盖服务定义,以便我可以提供我自己的服务版本?
动机
nixpkgs
提供的Grafana服务不完整。你不能 provision notifiers, and because the service definition controls provisioning, you can't manually modify the filesystem - you have to control the provisioning derivation.
有一个 PR to fix this,但需要一段时间才能合并。同时,我想在本地使用PR中的版本。
您可以使用 disabledModules 来实现。
看起来像
{
disabledModules = [ "services/monitoring/grafana.nix" ];
imports = [
./my-modules/grafana.nix
];
}