diff options
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers')
8 files changed, 360 insertions, 243 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/cloudfoundry/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/cloudfoundry/default.nix new file mode 100644 index 000000000000..7e807d2ed5ce --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/cloudfoundry/default.nix @@ -0,0 +1,29 @@ +{ stdenv, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "terraform-provider-cloudfoundry"; + version = "0.12.6"; + + src = fetchFromGitHub { + owner = "cloudfoundry-community"; + repo = pname; + rev = "v${version}"; + sha256 = "0n5ybpzk6zkrnd9vpmbjlkm8fdp7nbfr046wih0jk72pmiyrcygi"; + }; + + vendorSha256 = "01lfsd9aw9w3kr1a2a5b7ac6d8jaij83lhxl4y4qsnjlqk86fbxq"; + + # needs a running cloudfoundry + doCheck = false; + + postInstall = "mv $out/bin/terraform-provider-cloudfoundry{,_v${version}}"; + + passthru = { provider-source-address = "registry.terraform.io/cloudfoundry-community/cloudfoundry"; }; + + meta = with stdenv.lib; { + homepage = "https://github.com/cloudfoundry-community/terraform-provider-cloudfoundry"; + description = "Terraform provider for cloudfoundry"; + license = licenses.mpl20; + maintainers = with maintainers; [ ris ]; + }; +} diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix index 73fc6df024e6..b7b6c8ad73b3 100644 --- a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/default.nix @@ -1,4 +1,5 @@ { lib +, buildGoModule , buildGoPackage , fetchFromGitHub , callPackage @@ -7,7 +8,23 @@ let list = lib.importJSON ./providers.json; - toDrv = name: data: + 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; @@ -22,43 +39,13 @@ let passthru = data; }; - # Google is now using the vendored go modules, which works a bit differently - # and is not 100% compatible with the pre-modules vendored folders. - # - # Instead of switching to goModules which requires a goModSha256, patch the - # goPackage derivation so it can install the top-level. - patchGoModVendor = drv: - drv.overrideAttrs (attrs: { - buildFlags = "-mod=vendor"; - - # override configurePhase to not move the source into GOPATH - configurePhase = '' - export GOPATH=$NIX_BUILD_TOP/go:$GOPATH - export GOCACHE=$TMPDIR/go-cache - export GO111MODULE=on - ''; - - # just build and install into $GOPATH/bin - buildPhase = '' - go install -mod=vendor -v -p 16 . - - runHook postBuild - ''; - - # don't run the tests, they are broken in this setup - doCheck = false; - }); - # These providers are managed with the ./update-all script - automated-providers = lib.mapAttrs (toDrv) list; + 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 = { - # Override providers that use Go modules + vendor/ folder - google = patchGoModVendor automated-providers.google; - google-beta = patchGoModVendor automated-providers.google-beta; - ibm = patchGoModVendor automated-providers.ibm; - acme = automated-providers.acme.overrideAttrs (attrs: { prePatch = attrs.prePatch or "" + '' substituteInPlace go.mod --replace terraform-providers/terraform-provider-acme getstackhead/terraform-provider-acme @@ -66,95 +53,15 @@ let ''; }); - # providers that were moved to the `hashicorp` organization, - # but haven't updated their references yet: - - # https://github.com/hashicorp/terraform-provider-archive/pull/67 - archive = automated-providers.archive.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-archive hashicorp/terraform-provider-archive - substituteInPlace main.go --replace terraform-providers/terraform-provider-archive hashicorp/terraform-provider-archive - ''; - }); - - # https://github.com/hashicorp/terraform-provider-dns/pull/101 - dns = automated-providers.dns.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-dns hashicorp/terraform-provider-dns - substituteInPlace main.go --replace terraform-providers/terraform-provider-dns hashicorp/terraform-provider-dns - ''; - }); - - # https://github.com/hashicorp/terraform-provider-external/pull/41 - external = automated-providers.external.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-external hashicorp/terraform-provider-external - substituteInPlace main.go --replace terraform-providers/terraform-provider-external hashicorp/terraform-provider-external - ''; - }); - - # https://github.com/hashicorp/terraform-provider-helm/pull/522 - helm = automated-providers.helm.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-helm hashicorp/terraform-provider-helm - substituteInPlace main.go --replace terraform-providers/terraform-provider-helm hashicorp/terraform-provider-helm - ''; - }); - - # https://github.com/hashicorp/terraform-provider-http/pull/40 - http = automated-providers.http.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-http hashicorp/terraform-provider-http - substituteInPlace main.go --replace terraform-providers/terraform-provider-http hashicorp/terraform-provider-http - ''; - }); - - # https://github.com/hashicorp/terraform-provider-local/pull/40 - local = automated-providers.local.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-local hashicorp/terraform-provider-local - substituteInPlace main.go --replace terraform-providers/terraform-provider-local hashicorp/terraform-provider-local - ''; - }); - - # https://github.com/hashicorp/terraform-provider-null/pull/43 - null = automated-providers.null.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-null hashicorp/terraform-provider-null - substituteInPlace main.go --replace terraform-providers/terraform-provider-null hashicorp/terraform-provider-null - ''; - }); - - # https://github.com/hashicorp/terraform-provider-random/pull/107 - random = automated-providers.random.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-random hashicorp/terraform-provider-random - substituteInPlace main.go --replace terraform-providers/terraform-provider-random hashicorp/terraform-provider-random - ''; - }); - - # https://github.com/hashicorp/terraform-provider-template/pull/79 - template = automated-providers.template.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-template hashicorp/terraform-provider-template - substituteInPlace main.go --replace terraform-providers/terraform-provider-template hashicorp/terraform-provider-template - ''; - }); - - # https://github.com/hashicorp/terraform-provider-tls/pull/71 - tls = automated-providers.tls.overrideAttrs (attrs: { - prePatch = attrs.prePatch or "" + '' - substituteInPlace go.mod --replace terraform-providers/terraform-provider-tls hashicorp/terraform-provider-tls - substituteInPlace main.go --replace terraform-providers/terraform-provider-tls hashicorp/terraform-provider-tls - ''; - }); - # 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 {}; diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/hcloud/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/hcloud/default.nix new file mode 100644 index 000000000000..89a22c718efb --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/hcloud/default.nix @@ -0,0 +1,32 @@ +{ stdenv, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "terraform-provider-hcloud"; + version = "1.22.0"; + + src = fetchFromGitHub { + owner = "hetznercloud"; + repo = pname; + rev = "v${version}"; + sha256 = "1h4kplrmpsbwa0nq3zyqa0cnvhv1s5avdrjyf1k1f2z6b6h4gynf"; + }; + + vendorSha256 = "070p34g0ca55rmfdwf1l53yr8vyhmm5sb8hm8q036n066yp03yfs"; + + # Spends an awful time in other test folders, apparently tries to reach + # opencensus and fails. + checkPhase = '' + pushd hcloud + go test -v + popd + ''; + + postInstall = "mv $out/bin/terraform-provider-hcloud{,_v${version}}"; + + meta = with stdenv.lib; { + homepage = "https://github.com/cloudfoundry-community/terraform-provider-cloudfoundry"; + description = "Terraform provider for cloudfoundry"; + license = licenses.mpl20; + maintainers = with maintainers; [ ris ]; + }; +} diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/libvirt/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/libvirt/default.nix index 42ed3d21066f..4662a315a8c4 100644 --- a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/libvirt/default.nix +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/libvirt/default.nix @@ -19,7 +19,7 @@ buildGoPackage rec { pname = "terraform-provider-libvirt"; - version = "0.6.2"; + version = "0.6.3"; goPackagePath = "github.com/dmacvicar/terraform-provider-libvirt"; @@ -27,7 +27,7 @@ buildGoPackage rec { owner = "dmacvicar"; repo = "terraform-provider-libvirt"; rev = "v${version}"; - sha256 = "1wkpns047ccff0clfb1108wjax1qb5v06hky0i3h2wpzysll7r7b"; + sha256 = "0ak2lpnv6h0i7lzfcggd90jpfhvsasdr6nflkflk2drlcpalggj9"; }; nativeBuildInputs = [ pkgconfig makeWrapper ]; diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/linuxbox/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/linuxbox/default.nix new file mode 100644 index 000000000000..60cd7f2d7637 --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/linuxbox/default.nix @@ -0,0 +1,26 @@ +{ stdenv, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "terraform-provider-linuxbox"; + version = "0.3.11"; + + src = fetchFromGitHub { + owner = "numtide"; + repo = pname; + rev = "v${version}"; + sha256 = "1sxb2iv4dl0rw3v1r7k5dfkyh14nmp19cprqafhb7ncarmvawq39"; + }; + + vendorSha256 = "16hp0pv1qpvr34ac1syjci39csvyj3c748inllypjwx76q6rwp7k"; + + postInstall = "mv $out/bin/terraform-provider-linuxbox{,_v${version}}"; + + passthru.provider-source-address = "registry.terraform.io/numtide/linuxbox"; + + meta = with stdenv.lib; { + homepage = "https://github.com/numtide/terraform-provider-linuxbox"; + description = "Basic building block for Seed DevOps"; + license = licenses.bsd3; + maintainers = with maintainers; [ zimbatm ]; + }; +} diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/lxd/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/lxd/default.nix index d64178b1e658..a583bc335142 100644 --- a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/lxd/default.nix +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/lxd/default.nix @@ -2,16 +2,16 @@ buildGoModule rec { pname = "terraform-provider-lxd"; - version = "1.3.0"; + version = "1.4.0"; src = fetchFromGitHub { owner = "sl1pm4t"; repo = "terraform-provider-lxd"; rev = "v${version}"; - sha256 = "1k54021178zybh9dqly2ly8ji9x5rka8dn9xd6rv7gkcl5w3y6fv"; + sha256 = "00gj7zj45wm9sf7a7nybjijdrdr00g2yf8h41c6j679a6nfnx0fd"; }; - vendorSha256 = "1shdpl1zsbbpc3mfs0l65ykq2h15ggvqylaixcap4j4lfl7m9my0"; + vendorSha256 = "0xq8zgx8h47pc88nkdvy5skpr8vk87b4212mm5msfxk8n7nl4fi2"; doCheck = false; diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json index c49f4cd2b1ba..bb2a7ab582b9 100644 --- a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/providers.json @@ -33,9 +33,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/archive", "repo": "terraform-provider-archive", - "rev": "v1.3.0", - "sha256": "1hwg8ai4bvsmgnl669608lr4v940xnyig1xshps490f47c8hqy6y", - "version": "1.3.0" + "rev": "v2.0.0", + "sha256": "1d5n379zyjp2srg43g78a8h33qwcpkfkj7c35idvbyydi35vzlpl", + "vendorSha256": null, + "version": "2.0.0" }, "arukas": { "owner": "terraform-providers", @@ -66,12 +67,13 @@ "version": "2.14.1" }, "aws": { - "owner": "terraform-providers", + "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/aws", "repo": "terraform-provider-aws", - "rev": "v2.65.0", - "sha256": "005vs1qd6payicxldc9lr4w6kzr58xw9b930j52g1q7hlddl5mbb", - "version": "2.65.0" + "rev": "v3.15.0", + "sha256": "0rxpdxg5p478sipbhq2x347gs5wrlwz4ggy9z007cbp34yhb2wka", + "vendorSha256": "0vapfnd4c8jb15pdjnnb97vgsvfakjvl1czccbfy0znhdk2ynz02", + "version": "3.15.0" }, "azuread": { "owner": "terraform-providers", @@ -233,11 +235,13 @@ "version": "2.7.0" }, "digitalocean": { - "owner": "terraform-providers", + "owner": "digitalocean", + "provider-source-address": "registry.terraform.io/digitalocean/digitalocean", "repo": "terraform-provider-digitalocean", - "rev": "v1.19.0", - "sha256": "0plfkwkfb19f7bzky4jfa2kmkqvbah02c6j6applsd3jyiawpbgy", - "version": "1.19.0" + "rev": "v2.2.0", + "sha256": "14v9sh2qqdflzzp5mvkr7hd5c21hch8b8shxiwm0ar4qgdxq3wfy", + "vendorSha256": null, + "version": "2.2.0" }, "dme": { "owner": "terraform-providers", @@ -250,9 +254,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/dns", "repo": "terraform-provider-dns", - "rev": "v2.2.0", - "sha256": "11xdxj6hfclaq9glbh14nihmrsk220crm9ld8bdv77w0bppmrrch", - "version": "2.2.0" + "rev": "v3.0.0", + "sha256": "160dbmg7xg7iyc70f66dphyiysrdbscwya2n28idi8wp5rjx8bid", + "vendorSha256": null, + "version": "3.0.0" }, "dnsimple": { "owner": "terraform-providers", @@ -293,9 +298,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/external", "repo": "terraform-provider-external", - "rev": "v1.2.0", - "sha256": "1kx28bffhd1pg3m0cbldclc8l9zic16mqrk7gybcls9vyds5gbvc", - "version": "1.2.0" + "rev": "v2.0.0", + "sha256": "16wciz08gicicsirij2ql0gy8dg0372jjsqmaigkl2n07mqz2b6a", + "vendorSha256": null, + "version": "2.0.0" }, "fastly": { "owner": "terraform-providers", @@ -328,30 +334,35 @@ "github": { "owner": "terraform-providers", "repo": "terraform-provider-github", - "rev": "v2.8.0", - "sha256": "11aw9wqnayl786hvbgnb9ijijaipaggj18vkn5y0kcj2v4dwq4wg", - "version": "2.8.0" + "rev": "v3.1.0", + "sha256": "1xl4fd1lfbn1vnrdmg2xljnv8hy6rmf0iv7g8pzbnzbvj2pi7w3b", + "version": "3.1.0" }, "gitlab": { - "owner": "terraform-providers", + "owner": "gitlabhq", + "provider-source-address": "registry.terraform.io/gitlabhq/gitlab", "repo": "terraform-provider-gitlab", - "rev": "v2.9.0", - "sha256": "0l0b69nxxskpsylcgli2sm9qq7p4hw96dsri24w38shhnxmpysbb", - "version": "2.9.0" + "rev": "v3.1.0", + "sha256": "1an34ckz7lz1k25lkjpbmls55zp9pacr46vjnjjpqx6bx5s95f5g", + "version": "3.1.0" }, "google": { - "owner": "terraform-providers", + "owner": "hashicorp", + "provider-source-address": "registry.terraform.io/hashicorp/google", "repo": "terraform-provider-google", - "rev": "v3.18.0", - "sha256": "18cxl1qw1wyvzvhgjm1s3c19hbi5z9s6mipgazhrac70myw8dmy7", - "version": "3.18.0" + "rev": "v3.47.0", + "sha256": "05xb0q56y9088qbyaf3vzjm9im1s2azxffhjffjpzi0i79k0g2p0", + "vendorSha256": "1h83p7ncv7b4ci7qdig7hb81zk9458fq9aqqbkryawf1w7wbaq2a", + "version": "3.47.0" }, "google-beta": { - "owner": "terraform-providers", + "owner": "hashicorp", + "provider-source-address": "registry.terraform.io/hashicorp/google-beta", "repo": "terraform-provider-google-beta", - "rev": "v3.18.0", - "sha256": "1rsaqrgr6ddgx1pala83y70dk32s0mvf6vi877awmimxjzsa1l4r", - "version": "3.18.0" + "rev": "v3.47.0", + "sha256": "1nk0bg2q7dg65rn3j5pkdjv07x0gs7bkv1bpfvlhi9p4fzx9g4by", + "vendorSha256": "0c2q4d2khsi3v9b659q1kmncnlshv4px6ch99jpcymwqg3xrxda2", + "version": "3.47.0" }, "grafana": { "owner": "terraform-providers", @@ -367,13 +378,6 @@ "sha256": "00l3cwvyyjk0n3j535qfj3bsf1s5l07786gnxycj0f8vz3a06bcq", "version": "1.6.0" }, - "hcloud": { - "owner": "terraform-providers", - "repo": "terraform-provider-hcloud", - "rev": "v1.16.0", - "sha256": "09v2bg4ffyh4ibz449dygxgd7mvjgh4b2r242l3cwi7pzn66imrz", - "version": "1.16.0" - }, "hedvig": { "owner": "terraform-providers", "repo": "terraform-provider-hedvig", @@ -385,9 +389,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/helm", "repo": "terraform-provider-helm", - "rev": "v1.2.2", - "sha256": "1hjlf0pzc9jkcvqi52kvqwmd8v0cvnhhcbahzxmv0zkdwh310c12", - "version": "1.2.2" + "rev": "v1.3.2", + "sha256": "0mpbf03483jqrwd9cx4pdn2pcv4swfs5nbp021gaqr0jf1w970x6", + "vendorSha256": null, + "version": "1.3.2" }, "heroku": { "owner": "terraform-providers", @@ -400,9 +405,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/http", "repo": "terraform-provider-http", - "rev": "v1.2.0", - "sha256": "0q8ichbqrq62q1j0rc7sdz1jzfwg2l9v4ac9jqf6y485dblhmwqd", - "version": "1.2.0" + "rev": "v2.0.0", + "sha256": "0x6a9qf819g16dj9inyvhwff67xy0ixyy70ck56lkidrldara444", + "vendorSha256": null, + "version": "2.0.0" }, "huaweicloud": { "owner": "terraform-providers", @@ -420,10 +426,12 @@ }, "ibm": { "owner": "IBM-Cloud", + "provider-source-address": "registry.terraform.io/IBM-Cloud/ibm", "repo": "terraform-provider-ibm", - "rev": "v1.7.0", - "sha256": "1kb2dxdygvph65hh7qiba9kl9k5aygxxvx3x1qi28jwny594j82a", - "version": "1.7.0" + "rev": "v1.14.0", + "sha256": "1r3y7r0mnbzd7xk6d5f7pvysl3p8vl5i5phya89dfwrk2x9xyw21", + "vendorSha256": null, + "version": "1.14.0" }, "icinga2": { "owner": "terraform-providers", @@ -475,11 +483,12 @@ "version": "1.0.0" }, "kubernetes": { - "owner": "terraform-providers", + "owner": "hashicorp", + "provider-source-address": "registry.terraform.io/hashicorp/kubernetes", "repo": "terraform-provider-kubernetes", - "rev": "v1.11.3", - "sha256": "13j4xwibjgiqpzwbwd0d3z1idv0lwz78ip38khhmhwa78mjjb4zz", - "version": "1.11.3" + "rev": "v1.13.3", + "sha256": "01hkbb81r3k630s3ww6379p66h1fsd5cd1dz14jm833nsr142c0i", + "version": "1.13.3" }, "kubernetes-alpha": { "owner": "hashicorp", @@ -513,9 +522,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/local", "repo": "terraform-provider-local", - "rev": "v1.4.0", - "sha256": "1k1kbdn99ypn1pi6vqbs1l9a8vvf4vs32wl8waa16i26514sz1wk", - "version": "1.4.0" + "rev": "v2.0.0", + "sha256": "0c1mk63lh3qmj8pl80lyvvsgyg4gg7673abr8cfxrj45635h74z5", + "vendorSha256": null, + "version": "2.0.0" }, "logentries": { "owner": "terraform-providers", @@ -619,9 +629,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/null", "repo": "terraform-provider-null", - "rev": "v2.1.2", - "sha256": "0di1hxmd3s80sz8hl5q2i425by8fbk15f0r4jmnm6vra0cq89jw2", - "version": "2.1.2" + "rev": "v3.0.0", + "sha256": "0r1kvsc96922i85hdvf1pk8aicxjr6bc69gc63qi21hrl0jpvr7r", + "vendorSha256": null, + "version": "3.0.0" }, "nutanix": { "owner": "terraform-providers", @@ -709,11 +720,11 @@ "version": "0.8.0" }, "packet": { - "owner": "terraform-providers", + "owner": "packethost", "repo": "terraform-provider-packet", - "rev": "v2.9.0", - "sha256": "0d9r272gidkwn4zr130ml047512qq5d5d599s63blzy6m38vilha", - "version": "2.9.0" + "rev": "v3.2.0", + "sha256": "sha256-YIv4OPRbR00YTVwz0iJ/y6qTbj50nsi5ylrWEx1kZck=", + "version": "3.2.0" }, "pagerduty": { "owner": "terraform-providers", @@ -739,9 +750,9 @@ "postgresql": { "owner": "terraform-providers", "repo": "terraform-provider-postgresql", - "rev": "v1.6.0", - "sha256": "0m9x60hrry0cqx4bhmql081wjcbay3750jwzqiph5vpj9717banf", - "version": "1.6.0" + "rev": "v1.7.1", + "sha256": "0qlz00svvbwxslp8v7bi7mx5mvnjmh2cvg33a006gh4fy5n75shy", + "version": "1.7.1" }, "powerdns": { "owner": "terraform-providers", @@ -789,9 +800,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/random", "repo": "terraform-provider-random", - "rev": "v2.2.1", - "sha256": "1qklsxj443vsj61lwl7qf7xwgnllwcvb2yk6s0kn9g3iq63pcv30", - "version": "2.2.1" + "rev": "v3.0.0", + "sha256": "00dkpcri9ckp0kxwgh3p8175cyd44m8z13cb013pm4mrr61n4wq9", + "vendorSha256": null, + "version": "3.0.0" }, "rightscale": { "owner": "terraform-providers", @@ -909,9 +921,10 @@ "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/template", "repo": "terraform-provider-template", - "rev": "v2.1.2", - "sha256": "18w1mmma81m9j7yf6q500w8v9ss28w6sw2ynssl99pyw2gwmd04q", - "version": "2.1.2" + "rev": "v2.2.0", + "sha256": "12pn1i06jz4xl50md94yfdggg3pg5bv1viwf35izizm5rnyksyv2", + "vendorSha256": null, + "version": "2.2.0" }, "tencentcloud": { "owner": "terraform-providers", @@ -934,13 +947,22 @@ "sha256": "1cl83afm00fflsd3skynjvncid3r74fkxfznrs1v8qypcg1j79g1", "version": "0.18.0" }, + "time": { + "owner": "hashicorp", + "provider-source-address": "registry.terraform.io/hashicorp/time", + "repo": "terraform-provider-time", + "rev": "v0.6.0", + "sha256": "0fb81hisjicib9rzbn51jqfrchyjd3hzq98adnf22cbra8wlnxlm", + "version": "0.6.0" + }, "tls": { "owner": "hashicorp", "provider-source-address": "registry.terraform.io/hashicorp/tls", "repo": "terraform-provider-tls", - "rev": "v2.1.1", - "sha256": "1qsx540pjcq4ra034q2dwnw5nmzab5h1c3vm20ppg5dkhhyiizq8", - "version": "2.1.1" + "rev": "v3.0.0", + "sha256": "1p9d5wrr4xwf2i930zlcarm1zl8ysj3nyc6rrbhpxk04kr6ap0wz", + "vendorSha256": null, + "version": "3.0.0" }, "triton": { "owner": "terraform-providers", @@ -1014,11 +1036,11 @@ "version": "0.1.0" }, "vultr": { - "owner": "terraform-providers", + "owner": "vultr", "repo": "terraform-provider-vultr", - "rev": "v1.3.0", - "sha256": "0swc2fvp83d6w0cqvyxs346c756wr48xbn8m8jqkmma5s4ab2y4k", - "version": "1.3.0" + "rev": "v1.5.0", + "sha256": "04qy366ignn53bbdj9s3032qr1x7h84q36qzl5ywydlw2va0qbsd", + "version": "1.5.0" }, "wavefront": { "owner": "terraform-providers", diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider index c7094e1c77e4..e1f1a0ef38a5 100755 --- a/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider +++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/cluster/terraform-providers/update-provider @@ -1,42 +1,94 @@ #!/usr/bin/env nix-shell -#! nix-shell -i bash -p coreutils curl jq +#! nix-shell -i bash -p coreutils curl jq moreutils # shellcheck shell=bash +# vim: ft=sh +# +# Update a terraform provider to the latest version advertised at the +# provider source address. # -# Update a terraform provider to the latest version advertised at -# the provider source address. set -euo pipefail -USAGE=$(cat<<DOC -Specify the terraform provider name to update. +show_usage() { + cat <<DOC +Usage: ./update-provider [--force] [--vendor] [<owner>/]<provider> + +Update a single provider in the providers.json inventory file. + +For example to update 'terraform-providers.aws' run: + + ./update-provider aws + +If the provider is not in the list already, use the form '<owner>/<provider>' +to add the provider to the list: -Example: -To update nixpkgs.terraform-providers.aws run: -./update-provider aws + ./update-provider hetznercloud/hcloud + +Options: + + * --force: Force the update even if the version matches. + * --vendor: Switch from go package to go modules with vendor. + * --vendor-sha256 <sha256>: Override the SHA256 or "null". DOC -) +} + +force= +provider= +vendor= +vendorSha256= + +while [[ $# -gt 0 ]]; do + case "$1" in + -h | --help) + show_usage + exit + ;; + --force) + force=1 + shift + ;; + --vendor) + force=1 + vendor=1 + shift + ;; + --vendor-sha256) + force=1 + vendorSha256=$2 + shift 2 + ;; + *) + if [[ -n "$provider" ]]; then + echo "ERROR: provider name was passed two times: '$provider' and '$1'" + echo "Use --help for more info" + exit 1 + fi + provider=$1 + shift + esac +done -provider_name="${1:-}" -if [ -z "$provider_name" ]; then - echo "No providers specified!" +if [[ -z "$provider" ]]; then + echo "ERROR: No providers specified!" echo - echo "$USAGE" + show_usage exit 1 fi -provider_source_address="$(jq -r ".$provider_name.\"provider-source-address\"" providers.json)" +provider_name=$(basename "$provider") -if [ "$provider_source_address" == "null" ]; then - echo "No provider source address specified with provider: $provider_name" - exit 1 -fi +# Usage: read_attr <key> +read_attr() { + jq -r ".\"$provider_name\".\"$1\"" providers.json +} -# The provider source address (used inside Terraform `required_providers` block) is -# used to compute the registry API endpoint -# -# registry.terraform.io/hashicorp/aws (provider source address) -# registry.terraform.io/providers/hashicorp/aws (provider URL for the website) -# registry.terraform.io/v1/providers/hashicorp/aws (provider URL for the JSON API) -registry_response=$(curl -s https://"${provider_source_address/\///v1/providers/}") +# Usage: update_attr <key> <value> +update_attr() { + if [[ "$2" == "null" ]]; then + jq -S ".\"$provider_name\".\"$1\" = null" providers.json | sponge providers.json + else + jq -S ".\"$provider_name\".\"$1\" = \"$2\"" providers.json | sponge providers.json + fi +} prefetch_github() { # of a given owner, repo and rev, fetch the tarball and return the output of @@ -47,31 +99,80 @@ prefetch_github() { nix-prefetch-url --unpack "https://github.com/$owner/$repo/archive/$rev.tar.gz" } +old_source_address="$(read_attr provider-source-address)" +old_vendor_sha256=$(read_attr vendorSha256) +old_version=$(read_attr version) + +if [[ $provider =~ ^[^/]+/[^/]+$ ]]; then + source_address=registry.terraform.io/$provider +else + source_address=$old_source_address +fi +if [[ "$source_address" == "null" ]]; then + echo "Could not find the source address for provider: $provider" + exit 1 +fi +update_attr "provider-source-address" "$source_address" + +# The provider source address (used inside Terraform `required_providers` block) is +# used to compute the registry API endpoint +# +# registry.terraform.io/hashicorp/aws (provider source address) +# registry.terraform.io/providers/hashicorp/aws (provider URL for the website) +# registry.terraform.io/v1/providers/hashicorp/aws (provider URL for the JSON API) +registry_response=$(curl -s https://"${source_address/\///v1/providers/}") + +version="$(jq -r '.version' <<< "$registry_response")" +if [[ "$old_version" = "$version" && "$force" != 1 && -z "$vendorSha256" && "$old_vendor_sha256" != "$vendorSha256" ]]; then + echo "$provider_name is already at version $version" + exit +fi +update_attr version "$version" + provider_source_url="$(jq -r '.source' <<< "$registry_response")" org="$(echo "$provider_source_url" | cut -d '/' -f 4)" +update_attr owner "$org" repo="$(echo "$provider_source_url" | cut -d '/' -f 5)" +update_attr repo "$repo" rev="$(jq -r '.tag' <<< "$registry_response")" - +update_attr rev "$rev" sha256=$(prefetch_github "$org" "$repo" "$rev") +update_attr sha256 "$sha256" -version="$(jq -r '.version' <<< "$registry_response")" +repo_root=$(git rev-parse --show-toplevel) -updated_provider="$(mktemp)" -cat <<EOF >> "$updated_provider" -{ - "$provider_name": { - "owner": "$org", - "repo": "$repo", - "rev": "$rev", - "sha256": "$sha256", - "version": "$version", - "provider-source-address": "$provider_source_address" - } -} -EOF +if [[ -z "$vendorSha256" ]]; then + if [[ "$old_vendor_sha256" == null ]]; then + vendorSha256=null + elif [[ -n "$old_vendor_sha256" || "$vendor" = 1 ]]; then + echo "=== Calculating vendorSha256 ===" + update_attr vendorSha256 "0000000000000000000000000000000000000000000000000000000000000000" + # Hackish way to find out the desired sha256. First build, then extract the + # error message from the logs. + set +e + nix-build --no-out-link "$repo_root" -A "terraform-providers.$provider_name.go-modules" 2>vendor_log.txt + set -e + logs=$(< vendor_log.txt) + if ! [[ $logs =~ got:\ +([^\ ]+) ]]; then + echo "ERROR: could not find new hash in output:" + cat vendor_log.txt + rm -f vendor_log.txt + exit 1 + fi + rm -f vendor_log.txt + vendorSha256=${BASH_REMATCH[1]} + # Deal with nix unstable + if [[ $vendorSha256 = sha256-* ]]; then + vendorSha256=$(nix to-base32 "$vendorSha256") + fi + fi +fi -original_provider_list="$(mktemp)" -cat providers.json > "$original_provider_list" +if [[ -n "$vendorSha256" ]]; then + update_attr vendorSha256 "$vendorSha256" +fi -jq --sort-keys --slurp '.[0] * .[1]' "$original_provider_list" "$updated_provider" > providers.json +# Check that the provider builds +echo "=== Building terraform-providers.$provider_name ===" +nix-build "$repo_root" -A "terraform-providers.$provider_name" |