Nix/NixOs/NixOpsの使い方を学習中です。単純なNixOpsのリファクタリングに問題があります。私はPostgresの9.6ランニングでVirtualBoxのマシンを取得し、htop
がインストール:nixos設定をインポートしてnixopsデプロイメント式とマージする方法
{
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
作品の実行:
私の出発点は、この作業vbox-all.nix
ファイルです。
これをすべて1つのファイルにまとめることは、長期間のメンテナンスには適していないようです。ここで
は、私は私がしたいと思うファイルレイアウトです:
.
├── 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.
アイデアは私が(現在はpostgresにとホテルトップ)をお勧めしますすべてのサービス/パッケージ/ confのをインポートvbox-all.nix
輸入configuration-all.nix
ということで。
これは私が働くことができないものです。ここで
は私configuration-all.nix
です:ここでは
{ config, pkgs, ... }:
{
imports = [ ./postgres.nix ./htop.nix ];
}
は./postgres.nix
です:
{ config, pkgs, ... }:
{
services.postgresql.enable = true;
services.postgresql.package = pkgs.postgresql96;
}
私はあなたが./htop.nix
の内容を推測することができ、そしてそれは本当にとにかく問題ではありませんと思います。
そして最後に、私のvbox-all.nix
を修正:私はnixops deploy -d mydeployment
再実行すると
{
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
};
}
、私はすべてのエラーを得ることはありませんが、結果としてVMはどちらのpostgresもホテルトップを持っていません。
私は根本的に、with
またはcallPackage
のいずれかを誤解する必要があります。私にとっては、./configuration-all.nix
(すべてのargsを自動入力)で定義された関数を実行し、結果の式を "展開固有の設定"にマージする必要があります。代わりにwith
のinherit (pkgs.callPackage ./configuration-all.nix { })
、などこれまでのところありませんサイコロを使用して、import
でpkgs.callPackage
を交換する(まだエラーがないが、それでもだめ):