Add fleet handling and ensure all instances are up to date
Some checks failed
/ check (push) Failing after 2m43s
/ systems (push) Successful in 4m6s
/ dev-shell (push) Successful in 44s
/ rust-packages (push) Successful in 50s
/ terraform-providers (push) Successful in 48s

This commit is contained in:
Kaare Hoff Skovgaard 2025-08-01 22:21:21 +02:00
parent 735df0ad8f
commit af583fcbd4
Signed by: khs
GPG key ID: C7D890804F01E9F0
10 changed files with 119 additions and 10 deletions

View file

@ -162,10 +162,12 @@ in
content = config.khscodes.openstack.output.compute_instance.compute.ipv4_address; content = config.khscodes.openstack.output.compute_instance.compute.ipv4_address;
} }
]; ];
aaaaRecords = lib.lists.map (d: { aaaaRecords = [
fqdn = d; {
content = config.khscodes.openstack.output.compute_instance.compute.ipv6_address; fqdn = cfg.dnsName;
}) cfg.dnsAliases; content = config.khscodes.openstack.output.compute_instance.compute.ipv6_address;
}
];
cnameRecords = lib.lists.map (domain: { cnameRecords = lib.lists.map (domain: {
fqdn = domain; fqdn = domain;
content = cfg.dnsName; content = cfg.dnsName;

View file

@ -1,5 +1,5 @@
loki_send "node_exporter" { loki_send "node_exporter" {
job = "integrations/node_exporter" job = "node_exporter"
} }
// Collect logs from systemd journal for node_exporter integration // Collect logs from systemd journal for node_exporter integration

View file

@ -11,7 +11,7 @@ discovery.relabel "integrations_node_exporter" {
rule { rule {
// Set a standard job name for all node_exporter metrics // Set a standard job name for all node_exporter metrics
target_label = "job" target_label = "job"
replacement = "integrations/node_exporter" replacement = "node_exporter"
} }
} }
// //

View file

@ -0,0 +1,38 @@
{
inputs,
pkgs,
lib,
...
}:
let
fleet = lib.attrsets.foldlAttrs (
acc: name: nixos:
acc
++ (
if
(
nixos.config.khscodes.infrastructure.hetzner-instance.enable
|| nixos.config.khscodes.infrastructure.khs-openstack-instance.enable
)
&& ((lib.lists.length nixos.config.khscodes.infrastructure.provisioning.post.modules) > 0)
then
[ ">&2 echo \"Configuring ${name}\n\"\nconfigure-instance ${lib.escapeShellArg name}" ]
else
[ ]
)
) [ ] inputs.self.nixosConfigurations;
in
pkgs.writeShellApplication {
name = "configure-fleet";
runtimeInputs = [
pkgs.khscodes.configure-instance
];
text = ''
if [[ "''${BW_SESSION:-}" == "" ]]; then
BW_SESSION="$(bw unlock --raw)"
export BW_SESSION
trap "bw lock" EXIT
fi
${lib.strings.concatStringsSep "\n>&2 echo \"\"\n" fleet}
'';
}

View file

@ -0,0 +1,37 @@
{
inputs,
pkgs,
lib,
...
}:
let
fleet = lib.attrsets.foldlAttrs (
acc: name: nixos:
acc
++ (
if
nixos.config.khscodes.infrastructure.hetzner-instance.enable
|| nixos.config.khscodes.infrastructure.khs-openstack-instance.enable
then
[ ">&2 echo \"Provisioning ${name}\n\"\nprovision-instance ${lib.escapeShellArg name}" ]
else
[ ]
)
) [ ] inputs.self.nixosConfigurations;
in
pkgs.writeShellApplication {
name = "provision-fleet";
runtimeInputs = [
pkgs.khscodes.provision-instance
pkgs.bitwarden-cli
];
text = ''
if [[ "''${BW_SESSION:-}" == "" ]]; then
BW_SESSION="$(bw unlock --raw)"
>&2 echo ""
export BW_SESSION
trap "bw lock" EXIT
fi
${lib.strings.concatStringsSep "\n>&2 echo \"\"\n" fleet}
'';
}

View file

@ -0,0 +1,30 @@
{
inputs,
pkgs,
lib,
...
}:
let
fleet = lib.attrsets.foldlAttrs (
acc: name: nixos:
acc
++ (
if
nixos.config.khscodes.infrastructure.hetzner-instance.enable
|| nixos.config.khscodes.infrastructure.khs-openstack-instance.enable
then
[ ">&2 echo \"Updating ${name}\n\"\nupdate-instance ${lib.escapeShellArg name}" ]
else
[ ]
)
) [ ] inputs.self.nixosConfigurations;
in
pkgs.writeShellApplication {
name = "update-fleet";
runtimeInputs = [
pkgs.khscodes.update-instance
];
text = ''
${lib.strings.concatStringsSep "\n>&2 echo \"\"\n" fleet}
'';
}

View file

@ -188,6 +188,8 @@ in
targets = [ targets = [
{ {
"__address__" = "127.0.0.1:${toString config.services.forgejo.settings.server.HTTP_PORT}", "__address__" = "127.0.0.1:${toString config.services.forgejo.settings.server.HTTP_PORT}",
"instance" = constants.hostname,
"job" = "forgejo",
}, },
] ]
metrics_path = "/metrics" metrics_path = "/metrics"

View file

@ -3,12 +3,12 @@
- alert: DiskPressure - alert: DiskPressure
expr: > expr: >
( (
node_filesystem_avail_bytes{fstype!="ramfs",job="integrations/node_exporter"} / node_filesystem_avail_bytes{fstype!="ramfs",job="node_exporter"} /
node_filesystem_size_bytes{fstype!="ramfs",job="integrations/node_exporter"} node_filesystem_size_bytes{fstype!="ramfs",job="node_exporter"}
) < 0.2 ) < 0.2
and and
( (
node_filesystem_avail_bytes{fstype!="ramfs",job="integrations/node_exporter"} / node_filesystem_avail_bytes{fstype!="ramfs",job="node_exporter"} /
1024 / 1024 / 1024 1024 / 1024 / 1024
) < 20 ) < 20
for: 10m for: 10m

View file

@ -2,7 +2,7 @@
rules: rules:
- alert: UnitFailed - alert: UnitFailed
expr: > expr: >
node_systemd_unit_state{job="integrations/node_exporter",state="failed"} == 1 node_systemd_unit_state{job="node_exporter",state="failed"} == 1
for: 10m for: 10m
labels: labels:
severity: warn severity: warn