首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何导入nixos配置并将其与nixops部署表达式合并

如何导入nixos配置并将其与nixops部署表达式合并
EN

Stack Overflow用户
提问于 2017-06-24 20:21:41
回答 1查看 887关注 0票数 3

我正在学习如何使用Nix/NixOs/ NixOps,我在重构一个简单的NixOps部署时遇到了麻烦。

我的起点是这个工作的vbox-all.nix文件:

代码语言:javascript
复制
{
    server =
        { config, pkgs, ... }:
        {
            # deployment-specific config
            deployment.targetEnv = "virtualbox";
            deployment.virtualbox.memorySize = 1024; # megabytes
            deployment.virtualbox.vcpu = 2; # number of cpus

            # postgres-specific config
            services.postgresql.enable = true;
            services.postgresql.package = pkgs.postgresql96;

            # htop-specific config
            environment.systemPackages =
            [
                pkgs.htop
            ];
        };
}

先运行nixops create ./vbox.nix -d mydeployment,然后运行nixops deploy -d mydeployment:我得到了一台运行Postgres9.6并安装了htop的VirtualBox机器。

现在,将所有这些都放在一个文件中对于长期维护来说似乎不是一个好主意。

下面是我想要的文件布局:

代码语言:javascript
复制
.
├── configuration-all.nix # forms a NixOs config with htop, postgres, etc.
├── htop.nix # NixOs config of just htop
├── postgres.nix # NixOs config of just Postgres
└── vbox-all.nix # NixOps config for virtualbox with htop, postgres, etc.

这个想法是vbox-all.nix导入configuration-all.nix,它导入我想要的所有服务/包/conf(目前是postgres和htop)。

这就是我不能去工作的地方。

这是我的configuration-all.nix

代码语言:javascript
复制
{ config, pkgs, ... }:
{
    imports = [ ./postgres.nix ./htop.nix ];
}

下面是./postgres.nix

代码语言:javascript
复制
{ config, pkgs, ... }:
{
    services.postgresql.enable = true;
    services.postgresql.package = pkgs.postgresql96;
}

我认为你可以猜到./htop.nix的内容,但这并不重要。

最后,我修改后的vbox-all.nix

代码语言:javascript
复制
{
    server =
        { config, pkgs, ... }:
        with (pkgs.callPackage ./configuration-all.nix { });
        {
            # deployment-specific config
            deployment.targetEnv = "virtualbox";
            deployment.virtualbox.memorySize = 1024; # megabytes
            deployment.virtualbox.vcpu = 2; # number of cpus
        };
}

当我重新运行nixops deploy -d mydeployment时,我没有得到任何错误,但是产生的VM既没有postgres也没有htop。

我肯定从根本上误解了withcallPackage。对我来说,它应该是:执行./configuration-all.nix中定义的函数(自动填充所有参数),并将结果表达式与我的“特定于部署的配置”合并。

我尝试了一些东西,比如:用import替换pkgs.callPackage (仍然没有错误,但仍然不好),使用inherit (pkgs.callPackage ./configuration-all.nix { })而不是with,等等,但到目前为止还没有结果。

我一定是漏掉了一些小东西可能很明显..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-24 20:21:41

这是我在写问题时想出的最后一个有效的vbox-all.nix

代码语言:javascript
复制
{
    server =
    {
        imports = [ ./configuration-all.nix ];
        # deployment-specific config
        deployment.targetEnv = "virtualbox";
        deployment.virtualbox.memorySize = 1024; # megabytes
        deployment.virtualbox.vcpu = 2; # number of cpus
    };
}

谢谢,你真是个好橡皮鸭。

我仍然需要理解为什么我使用withinherit的其他尝试都不起作用,所以请不要犹豫,请发表评论或发布替代答案。我有很多东西要学。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44736322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档