forked from fediversity/fediversity
Signed-off-by: Kiara Grouwstra <kiara@procolix.eu> Reviewed-on: fediversity/fediversity#536
This commit is contained in:
parent
1efd15e654
commit
9a0f60e819
13 changed files with 187 additions and 17 deletions
|
@ -0,0 +1,14 @@
|
||||||
|
diff --git a/internal/command/init.go b/internal/command/init.go
|
||||||
|
index 4491590ea9..56241d93e9 100644
|
||||||
|
--- a/internal/command/init.go
|
||||||
|
+++ b/internal/command/init.go
|
||||||
|
@@ -263,8 +263,7 @@ func (c *InitCommand) Run(args []string) int {
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := sMgr.RefreshState(); err != nil {
|
||||||
|
- c.Ui.Error(fmt.Sprintf("Error refreshing state: %s", err))
|
||||||
|
- return 1
|
||||||
|
+ c.Ui.Warn(fmt.Sprintf("Issue refreshing state: %s", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
state = sMgr.State()
|
|
@ -1,10 +1,40 @@
|
||||||
{
|
{
|
||||||
runNixOSTest,
|
|
||||||
inputs,
|
inputs,
|
||||||
sources,
|
sources,
|
||||||
|
system,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
runNixOSTest {
|
let
|
||||||
|
overlay = _: prev: {
|
||||||
|
terraform-backend = prev.callPackage ../../modules/terraform-backend/package.nix { };
|
||||||
|
# FIXME centralize overlays
|
||||||
|
# XXX using recent revision for https://github.com/NixOS/nixpkgs/pull/447849
|
||||||
|
opentofu =
|
||||||
|
(pkgs.callPackage "${sources.nixpkgs-unstable}/pkgs/by-name/op/opentofu/package.nix" { })
|
||||||
|
.overrideAttrs
|
||||||
|
(old: rec {
|
||||||
|
patches = (old.patches or [ ]) ++ [
|
||||||
|
# TF with back-end poses a problem for nix: initialization involves both
|
||||||
|
# mutation (nix: only inside build) and a network call (nix: not inside build)
|
||||||
|
../../check/data-model-tf/02-opentofu-sandboxed-init.patch
|
||||||
|
];
|
||||||
|
# versions > 1.9.0 need go 1.24+
|
||||||
|
version = "1.9.0";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "opentofu";
|
||||||
|
repo = "opentofu";
|
||||||
|
tag = "v${version}";
|
||||||
|
hash = "sha256-e0ZzbQdex0DD7Bj9WpcVI5roh0cMbJuNr5nsSVaOSu4=";
|
||||||
|
};
|
||||||
|
vendorHash = "sha256-fMTbLSeW+pw6GK8/JLZzG2ER90ss2g1FSDX5+f292do=";
|
||||||
|
});
|
||||||
|
};
|
||||||
|
pkgs = import sources.nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
overlays = [ overlay ];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
pkgs.testers.runNixOSTest {
|
||||||
imports = [
|
imports = [
|
||||||
../../data-model.nix
|
../../data-model.nix
|
||||||
../../function.nix
|
../../function.nix
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
sources,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (pkgs) system;
|
inherit (pkgs) system;
|
||||||
|
inherit (import ./constants.nix) pathToRoot;
|
||||||
nodeName = "target";
|
nodeName = "target";
|
||||||
deployment-config = {
|
deployment-config = {
|
||||||
inherit nodeName;
|
inherit nodeName pathToRoot;
|
||||||
inherit (import ./constants.nix) pathToRoot;
|
|
||||||
targetSystem = system;
|
targetSystem = system;
|
||||||
sshOpts = [ ];
|
sshOpts = [ ];
|
||||||
};
|
};
|
||||||
|
@ -33,8 +34,13 @@ in
|
||||||
nodes.deployer =
|
nodes.deployer =
|
||||||
{ ... }:
|
{ ... }:
|
||||||
{
|
{
|
||||||
|
imports = [
|
||||||
|
../../modules/terraform-backend
|
||||||
|
];
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
deploy
|
deploy
|
||||||
|
(pkgs.callPackage ../../run/tf-single-host/tf.nix { inherit sources; })
|
||||||
];
|
];
|
||||||
|
|
||||||
# needed only when building from deployer
|
# needed only when building from deployer
|
||||||
|
@ -45,6 +51,13 @@ in
|
||||||
hello
|
hello
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
services.terraform-backend = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
LISTEN_ADDR = ":8080";
|
||||||
|
KMS_KEY = "l99yC7MhbuuraACQ8bjaU1rMrT6L4PXEYupX6BzhJvY=";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
extraTestScript = ''
|
extraTestScript = ''
|
||||||
|
@ -52,6 +65,8 @@ in
|
||||||
target.fail("hello 1>&2")
|
target.fail("hello 1>&2")
|
||||||
|
|
||||||
with subtest("Run the deployment"):
|
with subtest("Run the deployment"):
|
||||||
|
deployer.wait_for_unit("multi-user.target")
|
||||||
|
deployer.succeed("curl -u basic:fake-secret -X GET http://localhost:8080/state/project1/example")
|
||||||
output = deployer.fail("""
|
output = deployer.fail("""
|
||||||
${lib.getExe deploy}
|
${lib.getExe deploy}
|
||||||
""")
|
""")
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
config,
|
config,
|
||||||
inputs,
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
sources ? import ../npins,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
@ -266,7 +265,7 @@ let
|
||||||
pkgs.writers.writeBashBin "deploy-tf.sh"
|
pkgs.writers.writeBashBin "deploy-tf.sh"
|
||||||
(withPackages [
|
(withPackages [
|
||||||
pkgs.jq
|
pkgs.jq
|
||||||
(pkgs.callPackage ./run/tf-single-host/tf.nix { inherit sources; })
|
(pkgs.callPackage ./run/tf-single-host/tf.nix { })
|
||||||
])
|
])
|
||||||
''
|
''
|
||||||
env ${toString (lib.mapAttrsToList (k: v: "TF_VAR_${k}=\"${toBash v}\"") environment)} \
|
env ${toString (lib.mapAttrsToList (k: v: "TF_VAR_${k}=\"${toBash v}\"") environment)} \
|
||||||
|
|
|
@ -38,8 +38,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
deployment-model-tf = import ./check/data-model-tf {
|
deployment-model-tf = import ./check/data-model-tf {
|
||||||
inherit (pkgs.testers) runNixOSTest;
|
inherit inputs sources system;
|
||||||
inherit inputs sources;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
39
deployment/modules/terraform-backend/default.nix
Normal file
39
deployment/modules/terraform-backend/default.nix
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
cfg = config.services.terraform-backend;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.terraform-backend = {
|
||||||
|
enable = lib.mkEnableOption "Nimbolus Terraform HTTP back-end";
|
||||||
|
package = lib.mkPackageOption pkgs "terraform-backend" { };
|
||||||
|
settings = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
default = { };
|
||||||
|
description = ''
|
||||||
|
[Environment variables](https://github.com/nimbolus/terraform-backend#default-settings)
|
||||||
|
for the Terraform HTTP back-end.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
systemd.services.terraform-backend = {
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "exec";
|
||||||
|
DynamicUser = true;
|
||||||
|
ExecStart = lib.getExe cfg.package;
|
||||||
|
Environment = lib.mapAttrsToList (k: v: "${k}=${v}") cfg.settings;
|
||||||
|
|
||||||
|
# FIXME remove after switching away from file storage?
|
||||||
|
StateDirectory = "terraform-backend";
|
||||||
|
WorkingDirectory = "/var/lib/terraform-backend";
|
||||||
|
StateDirectoryMode = "0700";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
32
deployment/modules/terraform-backend/package.nix
Normal file
32
deployment/modules/terraform-backend/package.nix
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
buildGoModule,
|
||||||
|
fetchFromGitHub,
|
||||||
|
}:
|
||||||
|
|
||||||
|
# FIXME upstream: https://github.com/NixOS/nixpkgs/pull/447753
|
||||||
|
buildGoModule rec {
|
||||||
|
pname = "terraform-backend";
|
||||||
|
version = "0.1.3";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "nimbolus";
|
||||||
|
repo = "terraform-backend";
|
||||||
|
tag = "v${version}";
|
||||||
|
hash = "sha256-S3ih7dLSQs3xJMHyQyWy43OG1maizBPVT8IsrWcSRUM=";
|
||||||
|
};
|
||||||
|
|
||||||
|
vendorHash = "sha256-5L8MNhjEPI3OOmtHdkB9ZQp02d7nzPp5h0/gVHTiCws=";
|
||||||
|
|
||||||
|
ldflags = [
|
||||||
|
"-s"
|
||||||
|
"-w"
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "State backend server which implements the Terraform HTTP backend API with pluggable modules for authentication, storage, locking and state encryption";
|
||||||
|
homepage = "https://github.com/nimbolus/terraform-backend";
|
||||||
|
license = lib.licenses.bsd3;
|
||||||
|
mainProgram = "cmd";
|
||||||
|
};
|
||||||
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
sources,
|
sources,
|
||||||
}:
|
}:
|
||||||
pkgs.writeScriptBin "setup" ''
|
pkgs.writeScriptBin "setup" ''
|
||||||
set -xe
|
set -e
|
||||||
# calculated pins
|
# calculated pins
|
||||||
echo '${lib.strings.toJSON sources}' > ./.npins.json
|
echo '${lib.strings.toJSON sources}' > ./.npins.json
|
||||||
# generate TF lock for nix's TF providers
|
# generate TF lock for nix's TF providers
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
terraform {
|
||||||
|
# TODO un-hardcode
|
||||||
|
backend "http" {
|
||||||
|
username = "basic"
|
||||||
|
password = "fake-secret"
|
||||||
|
address = "http://localhost:8080/state/project1/example"
|
||||||
|
lock_address = "http://localhost:8080/state/project1/example"
|
||||||
|
unlock_address = "http://localhost:8080/state/project1/example"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# hash of our code directory, used to trigger re-deploy
|
# hash of our code directory, used to trigger re-deploy
|
||||||
# FIXME calculate separately to reduce false positives
|
# FIXME calculate separately to reduce false positives
|
||||||
data "external" "hash" {
|
data "external" "hash" {
|
||||||
|
|
|
@ -6,4 +6,4 @@ export TF_LOG=info
|
||||||
|
|
||||||
cd "${tf_env}/deployment/run/tf-single-host"
|
cd "${tf_env}/deployment/run/tf-single-host"
|
||||||
# parallelism=1: limit OOM risk
|
# parallelism=1: limit OOM risk
|
||||||
tofu apply --auto-approve -lock=false -parallelism=1
|
tofu apply --auto-approve -parallelism=1
|
||||||
|
|
|
@ -13,7 +13,7 @@ pkgs.stdenv.mkDerivation {
|
||||||
fileset = intersection (gitTracked ../../../.) ../../../.;
|
fileset = intersection (gitTracked ../../../.) ../../../.;
|
||||||
};
|
};
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
(pkgs.callPackage ./tf.nix { })
|
(pkgs.callPackage ./tf.nix { inherit sources; })
|
||||||
(pkgs.callPackage ../tf-setup.nix { inherit sources; })
|
(pkgs.callPackage ../tf-setup.nix { inherit sources; })
|
||||||
];
|
];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|
|
@ -1,11 +1,29 @@
|
||||||
# FIXME: use overlays so this gets imported just once?
|
# FIXME: use overlays so this gets imported just once?
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
|
sources ? import ../../../npins,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
# FIXME centralize overlays
|
||||||
tf = pkgs.opentofu;
|
# XXX using recent revision for https://github.com/NixOS/nixpkgs/pull/447849
|
||||||
in
|
(
|
||||||
tf.withPlugins (p: [
|
(pkgs.callPackage "${sources.nixpkgs-unstable}/pkgs/by-name/op/opentofu/package.nix" { })
|
||||||
p.external
|
.overrideAttrs
|
||||||
])
|
(old: rec {
|
||||||
|
patches = (old.patches or [ ]) ++ [
|
||||||
|
# TF with back-end poses a problem for nix: initialization involves both
|
||||||
|
# mutation (nix: only inside build) and a network call (nix: not inside build)
|
||||||
|
../../check/data-model-tf/02-opentofu-sandboxed-init.patch
|
||||||
|
];
|
||||||
|
# versions > 1.9.0 need go 1.24+
|
||||||
|
version = "1.9.0";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "opentofu";
|
||||||
|
repo = "opentofu";
|
||||||
|
tag = "v${version}";
|
||||||
|
hash = "sha256-e0ZzbQdex0DD7Bj9WpcVI5roh0cMbJuNr5nsSVaOSu4=";
|
||||||
|
};
|
||||||
|
vendorHash = "sha256-fMTbLSeW+pw6GK8/JLZzG2ER90ss2g1FSDX5+f292do=";
|
||||||
|
})
|
||||||
|
).withPlugins
|
||||||
|
(p: [ p.external ])
|
||||||
|
|
|
@ -180,6 +180,19 @@
|
||||||
"url": "https://github.com/nixos/nixpkgs/archive/a1ae8ef72f64a845ecce5c6dcf65d546bf7deeb4.tar.gz",
|
"url": "https://github.com/nixos/nixpkgs/archive/a1ae8ef72f64a845ecce5c6dcf65d546bf7deeb4.tar.gz",
|
||||||
"hash": "0d7lp30wyy5647gpm8rnihvdcpmgmfr9c5yg4fhl31lsg8mlbg16"
|
"hash": "0d7lp30wyy5647gpm8rnihvdcpmgmfr9c5yg4fhl31lsg8mlbg16"
|
||||||
},
|
},
|
||||||
|
"nixpkgs-unstable": {
|
||||||
|
"type": "Git",
|
||||||
|
"repository": {
|
||||||
|
"type": "GitHub",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs"
|
||||||
|
},
|
||||||
|
"branch": "nixpkgs-unstable",
|
||||||
|
"submodules": false,
|
||||||
|
"revision": "d7f52a7a640bc54c7bb414cca603835bf8dd4b10",
|
||||||
|
"url": "https://github.com/nixos/nixpkgs/archive/d7f52a7a640bc54c7bb414cca603835bf8dd4b10.tar.gz",
|
||||||
|
"hash": "0c9kjncpmbdx6gwww9fn81hyr3bngi4hg51g4n2q4808c321kf4j"
|
||||||
|
},
|
||||||
"proxmox-nixos": {
|
"proxmox-nixos": {
|
||||||
"type": "Git",
|
"type": "Git",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
Loading…
Add table
Reference in a new issue