2017-06-24 14 views
0

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を自動入力)で定義された関数を実行し、結果の式を "展開固有の設定"にマージする必要があります。代わりにwithinherit (pkgs.callPackage ./configuration-all.nix { })、などこれまでのところありませんサイコロを使用して、importpkgs.callPackageを交換する(まだエラーがないが、それでもだめ):

は、私のようないくつかのことを試していません。

答えて

1

私は小さく、おそらく何かを明らかに不足しているしなければならない

は...ここにある私の最後の私の質問を書きながら、私は考え出したvbox-all.nix作業します。

{ 
    server = 
    { 
     imports = [ ./configuration-all.nix ]; 
     # deployment-specific config 
     deployment.targetEnv = "virtualbox"; 
     deployment.virtualbox.memorySize = 1024; # megabytes 
     deployment.virtualbox.vcpu = 2; # number of cpus 
    }; 
} 

ありがとうございました。あなたは良いラバーアヒルです。

withinheritで私の他の試みがうまくいかなかった理由を今でも理解する必要があるので、コメントしたり、代替の回答を投稿するのをためらってください。私は学ぶべきことがたくさんある。

関連する問題