Merge pull request #28729 from copumpkin/terraform-plugins

terraform: provide plugins for 0.10

authored by Daniel Peebles and committed by GitHub b291ead4 b09ab584

+115 -3
+35 -3
pkgs/applications/networking/cluster/terraform/default.nix
··· 1 - { stdenv, lib, buildGoPackage, fetchpatch, fetchFromGitHub }: 2 3 let 4 goPackagePath = "github.com/hashicorp/terraform"; ··· 37 maintainers = with maintainers; [ jgeerds zimbatm peterhoeg ]; 38 }; 39 } // attrs'); 40 in { 41 terraform_0_8_5 = generic { 42 version = "0.8.5"; ··· 55 doCheck = false; 56 }; 57 58 - terraform_0_10 = generic { 59 version = "0.10.2"; 60 sha256 = "1q7za7jcfqv914a3ynfl7hrqbgwcahgm418kivjrac6p1q26w502"; 61 - }; 62 }
··· 1 + { stdenv, lib, buildEnv, buildGoPackage, fetchpatch, fetchFromGitHub, makeWrapper }: 2 3 let 4 goPackagePath = "github.com/hashicorp/terraform"; ··· 37 maintainers = with maintainers; [ jgeerds zimbatm peterhoeg ]; 38 }; 39 } // attrs'); 40 + 41 + pluggable = terraform: 42 + let 43 + withPlugins = plugins: stdenv.mkDerivation { 44 + name = "${terraform.name}-with-plugins"; 45 + buildInputs = [ makeWrapper ]; 46 + 47 + buildCommand = '' 48 + mkdir -p $out/bin/ 49 + makeWrapper "${terraform.bin}/bin/terraform" "$out/bin/terraform" \ 50 + --set NIX_TERRAFORM_PLUGIN_DIR "${buildEnv { name = "tf-plugin-env"; paths = plugins terraform.plugins; }}/bin" 51 + ''; 52 + 53 + passthru = { 54 + withPlugins = newplugins: withPlugins (x: newplugins x ++ plugins x); 55 + 56 + # Ouch 57 + overrideDerivation = f: (pluggable (terraform.overrideDerivation f)).withPlugins plugins; 58 + overrideAttrs = f: (pluggable (terraform.overrideAttrs f)).withPlugins plugins; 59 + override = x: (pluggable (terraform.override x)).withPlugins plugins; 60 + }; 61 + }; 62 + in withPlugins (_: []); 63 + 64 + plugins = { 65 + aws = import providers/aws.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; }; 66 + azurerm = import providers/azurerm.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; }; 67 + google = import providers/google.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; }; 68 + kubernetes = import providers/kubernetes.nix { inherit stdenv lib buildGoPackage fetchFromGitHub; }; 69 + }; 70 in { 71 terraform_0_8_5 = generic { 72 version = "0.8.5"; ··· 85 doCheck = false; 86 }; 87 88 + terraform_0_10 = pluggable (generic { 89 version = "0.10.2"; 90 sha256 = "1q7za7jcfqv914a3ynfl7hrqbgwcahgm418kivjrac6p1q26w502"; 91 + patches = [ ./provider-path.patch ]; 92 + passthru = { inherit plugins; }; 93 + }); 94 }
+16
pkgs/applications/networking/cluster/terraform/provider-path.patch
···
··· 1 + diff --git a/command/init.go b/command/init.go 2 + index 403ca245b..05d98329a 100644 3 + --- a/command/init.go 4 + +++ b/command/init.go 5 + @@ -64,6 +64,11 @@ func (c *InitCommand) Run(args []string) int { 6 + return 1 7 + } 8 + 9 + + val, ok := os.LookupEnv("NIX_TERRAFORM_PLUGIN_DIR") 10 + + if ok { 11 + + flagPluginPath = append(flagPluginPath, val) 12 + + } 13 + + 14 + if len(flagPluginPath) > 0 { 15 + c.pluginPath = flagPluginPath 16 + c.getPlugins = false
+16
pkgs/applications/networking/cluster/terraform/providers/aws.nix
···
··· 1 + { stdenv, lib, buildGoPackage, fetchFromGitHub }: 2 + 3 + buildGoPackage rec { 4 + pname = "terraform-provider-aws"; 5 + name = "${pname}-${version}"; 6 + version = "0.1.4"; 7 + 8 + goPackagePath = "github.com/terraform-providers/terraform-provider-aws"; 9 + 10 + src = fetchFromGitHub { 11 + owner = "terraform-providers"; 12 + repo = pname; 13 + rev = "v${version}"; 14 + sha256 = "0hqyvp1bgyfqq2lkjq5m5qxybagnxl9zrqiqfnlrfigdp0y31iz8"; 15 + }; 16 + }
+16
pkgs/applications/networking/cluster/terraform/providers/azurerm.nix
···
··· 1 + { stdenv, lib, buildGoPackage, fetchFromGitHub }: 2 + 3 + buildGoPackage rec { 4 + pname = "terraform-provider-azurerm"; 5 + name = "${pname}-${version}"; 6 + version = "0.1.5"; 7 + 8 + goPackagePath = "github.com/terraform-providers/terraform-provider-azurerm"; 9 + 10 + src = fetchFromGitHub { 11 + owner = "terraform-providers"; 12 + repo = pname; 13 + rev = "v${version}"; 14 + sha256 = "02g8wnzwaii24nx5iin1yd4bx0rx22ly8aqhwa39mr5hsjj1qy4k"; 15 + }; 16 + }
+16
pkgs/applications/networking/cluster/terraform/providers/google.nix
···
··· 1 + { stdenv, lib, buildGoPackage, fetchFromGitHub }: 2 + 3 + buildGoPackage rec { 4 + pname = "terraform-provider-google"; 5 + name = "${pname}-${version}"; 6 + version = "0.1.3"; 7 + 8 + goPackagePath = "github.com/terraform-providers/terraform-provider-google"; 9 + 10 + src = fetchFromGitHub { 11 + owner = "terraform-providers"; 12 + repo = pname; 13 + rev = "v${version}"; 14 + sha256 = "1aa1hz0yc4g746m6dl04hc70rcrzx0py8kpdch3kim475bspclnf"; 15 + }; 16 + }
+16
pkgs/applications/networking/cluster/terraform/providers/kubernetes.nix
···
··· 1 + { stdenv, lib, buildGoPackage, fetchFromGitHub }: 2 + 3 + buildGoPackage rec { 4 + pname = "terraform-provider-kubernetes"; 5 + name = "${pname}-${version}"; 6 + version = "1.0.0"; 7 + 8 + goPackagePath = "github.com/terraform-providers/terraform-provider-kubernetes"; 9 + 10 + src = fetchFromGitHub { 11 + owner = "terraform-providers"; 12 + repo = pname; 13 + rev = "v${version}"; 14 + sha256 = "1kh7a83f98v6b4v3zj84ddhrg2hya4nmvrw0mjc26q12g4z2d5g6"; 15 + }; 16 + }