aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix
blob: b7b6c8ad73b33360ad6d30aa666002e244efef5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{ lib
, buildGoModule
, buildGoPackage
, fetchFromGitHub
, callPackage
, runtimeShell
}:
let
  list = lib.importJSON ./providers.json;

  buildWithGoModule = data:
    buildGoModule {
      pname = data.repo;
      version = data.version;
      subPackages = [ "." ];
      src = fetchFromGitHub {
        inherit (data) owner repo rev sha256;
      };
      vendorSha256 = data.vendorSha256 or null;

      # Terraform allow checking the provider versions, but this breaks
      # if the versions are not provided via file paths.
      postBuild = "mv $NIX_BUILD_TOP/go/bin/${data.repo}{,_v${data.version}}";
      passthru = data;
    };

  buildWithGoPackage = data:
    buildGoPackage {
      pname = data.repo;
      version = data.version;
      goPackagePath = "github.com/${data.owner}/${data.repo}";
      subPackages = [ "." ];
      src = fetchFromGitHub {
        inherit (data) owner repo rev sha256;
      };
      # Terraform allow checking the provider versions, but this breaks
      # if the versions are not provided via file paths.
      postBuild = "mv $NIX_BUILD_TOP/go/bin/${data.repo}{,_v${data.version}}";
      passthru = data;
    };

  # These providers are managed with the ./update-all script
  automated-providers = lib.mapAttrs (_: attrs:
    (if (lib.hasAttr "vendorSha256" attrs) then buildWithGoModule else buildWithGoPackage)
      attrs) list;

  # These are the providers that don't fall in line with the default model
  special-providers = {
    acme = automated-providers.acme.overrideAttrs (attrs: {
      prePatch = attrs.prePatch or "" + ''
        substituteInPlace go.mod --replace terraform-providers/terraform-provider-acme getstackhead/terraform-provider-acme
        substituteInPlace main.go --replace terraform-providers/terraform-provider-acme getstackhead/terraform-provider-acme
      '';
    });

    # Packages that don't fit the default model
    ansible = callPackage ./ansible {};
    cloudfoundry = callPackage ./cloudfoundry {};
    elasticsearch = callPackage ./elasticsearch {};
    gandi = callPackage ./gandi {};
    hcloud = callPackage ./hcloud {};
    keycloak = callPackage ./keycloak {};
    libvirt = callPackage ./libvirt {};
    linuxbox = callPackage ./linuxbox {};
    lxd = callPackage ./lxd {};
    shell = callPackage ./shell {};
    vpsadmin = callPackage ./vpsadmin {};
  };
in
  automated-providers // special-providers