photoncloud-monorepo/nix/tests/first-boot-topology-vm-smoke.nix
centra 96d46a3603
Some checks failed
Nix CI / filter (push) Successful in 8s
Nix CI / gate (shared crates) (push) Has been skipped
Nix CI / gate () (push) Failing after 5s
Nix CI / build () (push) Has been skipped
Nix CI / ci-status (push) Failing after 1s
Integrate topology-driven bootstrap into nix-nos
2026-03-30 14:39:28 +09:00

142 lines
4.1 KiB
Nix

{
pkgs,
photoncloudPackages,
photoncloudModule,
nixNosModule,
}:
{
name = "first-boot-topology-vm-smoke";
nodes = {
bridge01 =
{ ... }:
{
imports = [
nixNosModule
photoncloudModule
];
networking.hostName = "bridge01";
networking.firewall.enable = false;
environment.systemPackages = with pkgs; [
jq
];
services.chainfire = {
enable = true;
package = photoncloudPackages.chainfire-server;
nodeId = "bridge01";
apiAddr = "127.0.0.1:2379";
raftAddr = "127.0.0.1:2380";
initialPeers = [ "bridge01=127.0.0.1:2380" ];
};
systemd.services.chainfire.environment.RUST_LOG = "error";
services.first-boot-automation = {
enable = true;
useNixNOS = true;
enableFlareDB = false;
enableIAM = false;
};
plasmacloud.cluster = {
enable = true;
name = "bridge-cluster";
nodes.bridge01 = {
role = "control-plane";
ip = "127.0.0.1";
services = [ "chainfire" ];
raftPort = 2380;
apiPort = 2379;
};
bootstrap.initialPeers = [ "bridge01" ];
bgp.asn = 64512;
};
system.stateVersion = "24.11";
};
stand01 =
{ ... }:
{
imports = [
nixNosModule
photoncloudModule
];
networking.hostName = "stand01";
networking.firewall.enable = false;
environment.systemPackages = with pkgs; [
jq
];
nix-nos = {
enable = true;
clusters.standalone = {
name = "standalone-cluster";
bootstrapNode = "stand01";
nodes.stand01 = {
role = "control-plane";
ip = "127.0.0.1";
services = [ "chainfire" ];
raftPort = 2380;
apiPort = 2379;
};
};
};
services.chainfire = {
enable = true;
package = photoncloudPackages.chainfire-server;
nodeId = "stand01";
apiAddr = "127.0.0.1:2379";
raftAddr = "127.0.0.1:2380";
initialPeers = [ "stand01=127.0.0.1:2380" ];
};
systemd.services.chainfire.environment.RUST_LOG = "error";
services.first-boot-automation = {
enable = true;
useNixNOS = true;
nixnosClusterName = "standalone";
enableFlareDB = false;
enableIAM = false;
};
system.stateVersion = "24.11";
};
};
testScript = ''
start_all()
serial_stdout_off()
scenarios = [
(bridge01, "bridge01", "bridge-cluster"),
(stand01, "stand01", "standalone-cluster"),
]
for machine, node_id, cluster_name in scenarios:
print(f"validating {node_id}")
machine.wait_for_unit("chainfire.service")
print(f"{node_id}: chainfire up")
machine.wait_until_succeeds("test -f /etc/nixos/secrets/cluster-config.json")
print(f"{node_id}: config file present")
machine.succeed(
"bash -lc 'systemctl restart chainfire-cluster-join.service "
"|| (systemctl status chainfire-cluster-join.service --no-pager; "
"journalctl -u chainfire-cluster-join.service --no-pager -n 200; exit 1)'"
)
machine.wait_until_succeeds("test -f /var/lib/first-boot-automation/.chainfire-initialized")
print(f"{node_id}: bootstrap marker present")
machine.succeed("systemctl is-active chainfire-cluster-join.service")
machine.succeed(f"jq -r '.node_id' /etc/nixos/secrets/cluster-config.json | grep -x '{node_id}'")
machine.succeed("jq -r '.bootstrap' /etc/nixos/secrets/cluster-config.json | grep -x true")
machine.succeed(f"jq -r '.cluster_name' /etc/nixos/secrets/cluster-config.json | grep -x '{cluster_name}'")
machine.succeed("jq -r '.chainfire_leader_url' /etc/nixos/secrets/cluster-config.json | grep -x 'http://127.0.0.1:8081'")
'';
}