about summary refs log tree commit diff
path: root/pkgs/applications/networking/cluster/terraform/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/cluster/terraform/default.nix')
-rw-r--r--pkgs/applications/networking/cluster/terraform/default.nix38
1 files changed, 35 insertions, 3 deletions
diff --git a/pkgs/applications/networking/cluster/terraform/default.nix b/pkgs/applications/networking/cluster/terraform/default.nix
index 8fd76f7df75d..efff9282bd3a 100644
--- a/pkgs/applications/networking/cluster/terraform/default.nix
+++ b/pkgs/applications/networking/cluster/terraform/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, buildGoPackage, fetchpatch, fetchFromGitHub }:
+{ stdenv, lib, buildEnv, buildGoPackage, fetchpatch, fetchFromGitHub, makeWrapper }:
 
 let
   goPackagePath = "github.com/hashicorp/terraform";
@@ -37,6 +37,36 @@ let
         maintainers = with maintainers; [ jgeerds zimbatm peterhoeg ];
       };
     } // attrs');
+
+  pluggable = terraform:
+    let
+      withPlugins = plugins: stdenv.mkDerivation {
+        name = "${terraform.name}-with-plugins";
+        buildInputs = [ makeWrapper ];
+
+        buildCommand = ''
+          mkdir -p $out/bin/
+          makeWrapper "${terraform.bin}/bin/terraform" "$out/bin/terraform" \
+            --set NIX_TERRAFORM_PLUGIN_DIR "${buildEnv { name = "tf-plugin-env"; paths = plugins terraform.plugins; }}/bin"
+        '';
+
+        passthru = {
+          withPlugins = newplugins: withPlugins (x: newplugins x ++ plugins x);
+
+          # Ouch
+          overrideDerivation = f: (pluggable (terraform.overrideDerivation f)).withPlugins plugins;
+          overrideAttrs = f: (pluggable (terraform.overrideAttrs f)).withPlugins plugins;
+          override = x: (pluggable (terraform.override x)).withPlugins plugins;
+        };
+      };
+    in withPlugins (_: []);
+
+  plugins = {
+    aws = import providers/aws.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; };
+    azurerm = import providers/azurerm.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; };
+    google = import providers/google.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; };
+    kubernetes = import providers/kubernetes.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; };
+  };
 in {
   terraform_0_8_5 = generic {
     version = "0.8.5";
@@ -55,8 +85,10 @@ in {
     doCheck = false;
   };
 
-  terraform_0_10 = generic {
+  terraform_0_10 = pluggable (generic {
     version = "0.10.2";
     sha256 = "1q7za7jcfqv914a3ynfl7hrqbgwcahgm418kivjrac6p1q26w502";
-  };
+    patches = [ ./provider-path.patch ];
+    passthru = { inherit plugins; };
+  });
 }