feat: add minio+cockroachdb

This commit is contained in:
Kat Inskip 2022-10-06 09:06:17 -07:00
parent bdd402ffeb
commit 2d615951a2
Signed by: kat
GPG key ID: 465E64DECEA8CF0F
11 changed files with 121 additions and 12 deletions

View file

@ -109,6 +109,8 @@ in
];
};
services.cockroachdb.locality = "provider=oracle,region=${oci-root.outputs.oci_region.import},ad=${cfg.ad},host=${config.networking.hostName}";
deploy.tf =
let
compartment_id = oci-root.resources.oci_kw_compartment.importAttr "id";

View file

@ -62,6 +62,7 @@ in {
_module.args.tf = mapNullable (target: target.tf) target;
out = jsonConfig;
deploy.tf = {
terraform.environment.ESPHOME = "${pkgs.esphome}";
attrs = [ "import" "imports" "out" "attrs" "triggers" ];
import = genAttrs cfg.tf.imports (target: meta.deploy.targets.${target}.tf);
out.set = removeAttrs cfg.tf cfg.tf.attrs;
@ -75,7 +76,7 @@ in {
provider = "local";
type = "file";
inputs = {
filename = "${tf.terraform.dataDir}/esphome-${name}-secrets.json";
filename = "${builtins.toString tf.terraform.dataDir}/esphome-${name}-secrets.json";
content = secretsFile;
};
};
@ -86,10 +87,13 @@ in {
provisioners = [
{
type = "local-exec";
local-exec.command = ''
${pkgs.esphome}/bin/esphome compile ${closureConfig} ${tf.resources."${name}-secrets".refAttr "filename"}
${pkgs.esphome}/bin/esphome upload ${closureConfig} --device ${name}.local
'';
local-exec = {
working_dir = builtins.toString tf.terraform.dataDir;
command = ''
${pkgs.esphome}/bin/esphome compile ${closureConfig} ${tf.resources."${name}-secrets".refAttr "filename"}
${pkgs.esphome}/bin/esphome upload ${closureConfig} ${tf.resources."${name}-secrets".refAttr "filename"} --device ${name}.local
'';
};
}
];
};
@ -103,7 +107,7 @@ in {
path = if length parts > 1 then head parts else "password";
in nameValuePair "${config.esphome.name}-secret-${name}" ({
value.shellCommand = let
bitw = pkgs.writeShellScriptBin "bitw" ''${pkgs.rbw-bitw}/bin/bitw -p gpg://${config.network.nodes.all.${builtins.getEnv "HOME_HOSTNAME"}.secrets.repo.bitw.source} "$@"'';
bitw = pkgs.writeShellScriptBin "bitw" ''${pkgs.rbw-bitw}/bin/bitw -p gpg://${meta.network.nodes.all.${builtins.getEnv "HOME_HOSTNAME"}.secrets.repo.bitw.source} "$@"'';
in "${bitw}/bin/bitw get ${path} -f ${field}";
type = "string";
sensitive = true;

View file

@ -1,3 +1,3 @@
{ config, pkgs, lib, ... }: {
_module.args.pkgs = lib.mkDefault pkgs;
{ config, pkgs, lib, meta, ... }: {
_module.args.pkgs = lib.mkDefault meta.pkgs;
}

View file

@ -21,6 +21,7 @@
services.vaultwarden
services.weechat
services.znc
services.cockroachdb
];
nixfiles.oci = {

View file

@ -6,8 +6,11 @@
services.nginx
services.access
services.irlsite
services.cockroachdb
];
services.cockroachdb.locality = "provider=buyvm,region=luxembourg,host=${config.networking.hostName}";
boot = {
loader.grub = {
enable = true;

View file

@ -28,10 +28,36 @@
group = "hass";
};
secrets.variables.latitude = {
path = "secrets/home-assistant";
field = "latitude";
};
secrets.variables.longitude = {
path = "secrets/home-assistant";
field = "longitude";
};
secrets.variables.elevation = {
path = "secrets/home-assistant";
field = "elevation";
};
secrets.files.home-assistant-secrets = {
text = builtins.toJSON {
latitude = tf.variables.latitude.ref;
longitude = tf.variables.longitude.ref;
elevation = tf.variables.elevation.ref;
};
owner = "hass";
group = "hass";
};
systemd.services.home-assistant = {
preStart = lib.mkBefore ''
rm ${config.services.home-assistant.configDir}/integration.json
cp --no-preserve=mode ${config.secrets.files.ha-integration.path} ${config.services.home-assistant.configDir}/integration.json
cp --no-preserve=mode ${config.secrets.files.home-assistant-secrets.path} ${config.services.home-assistant.configDir}/secrets.yaml
cp --no-preserve=mode ${config.secrets.files.ha-integration.path} ${config.services.home-assistant.configDir}/integration.yaml
'';
};
@ -41,6 +67,11 @@
homeassistant = {
name = "Gensokyo";
unit_system = "metric";
latitude = "!secret latitude";
longitude = "!secret longitude";
elevation = "!secret elevation";
currency = "CAD";
time_zone = "America/Vancouver";
external_url = "https://home.gensokyo.zone";
};
frontend = {
@ -93,7 +124,7 @@
};
google_assistant = {
project_id = "gensokyo-5cfaf";
service_account = "!include integration.json";
service_account = "!include integration.yaml";
};
homekit = {
name = "Tewi";

View file

@ -5,6 +5,7 @@
(modulesPath + "/installer/scan/not-detected.nix")
hardware.local
nixos.network
services.cockroachdb
./kanidm.nix
./vouch.nix
./home-assistant.nix
@ -14,6 +15,8 @@
./nginx.nix
];
services.cockroachdb.locality = "provider=local,network=gensokyo,host=${config.networking.hostName}";
networks = {
gensokyo = {
interfaces = [

View file

@ -12,8 +12,11 @@
services.tvheadend
services.zfs
services.plex
services.cockroachdb
];
services.cockroachdb.locality = "provider=local,network=chitei,host=${config.networking.hostName}";
boot.supportedFilesystems = singleton "zfs";
fileSystems = {

21
services/cockroachdb.nix Normal file
View file

@ -0,0 +1,21 @@
{ config, meta, lib, ... }: let
inherit (lib.attrsets) mapAttrsToList filterAttrs;
inherit (lib.strings) concatStringsSep;
in {
services = {
cockroachdb = {
enable = true;
insecure = true;
join = concatStringsSep "," (mapAttrsToList (_: nixos:
"${nixos.networks.tailscale.ipv4}:${builtins.toString nixos.services.cockroachdb.listen.port}"
) (filterAttrs (_: nixos: nixos.services.cockroachdb.enable) meta.network.nodes.nixos));
http = {
address = config.networks.tailscale.ipv4;
port = 8973;
};
listen = {
address = config.networks.tailscale.ipv4;
};
};
};
}

41
services/minio.nix Normal file
View file

@ -0,0 +1,41 @@
{ config, lib, ... }: let
import (lib.modules) mkIf mkDefault;
cfg = config.services.minio;
in {
options.services.minio.isNAS = mkEnableFunction "NAS lack of defaults";
config = {
secrets = {
variables = mapAttrs' (name: value: nameValuePair "minio-${name}-key" value) (genAttrs ["access" "secret"] (name: {
path = "gensokyo/minio";
field = "${name}-key";
}));
};
files = {
minio-root-credentials = {
text = ''
MINIO_ROOT_USER=${tf.variables.minio-access-key.ref}
MINIO_ROOT_PASSWORD=${tf.variables.minio-secret-key.ref}
'';
owner = "minio";
group = "minio";
};
};
};
systemd.tmpfiles.rules = mkIf !cfg.isNAS ''
v /minio 700 minio minio
'';
services = {
minio = {
region = config.services.cockroachdb.locality;
enable = true;
dataDir = lib.optional !cfg.isNAS "/minio";
listenAddress = "${config.networks.tailscale.ipv4}:9000";
consoleAddress = "${config.networks.tailcale.ipv4}:9001";
rootCredentialsFile = config.secrets.files.minio-root-credentials.path;
};
};
};
}

2
tf

@ -1 +1 @@
Subproject commit 109f880332d0f9f4cfaf2ed8db8e9cee577a6cbd
Subproject commit 158e27e798d8808a0a54127122a6ceaffa2b12a7