fix(orchestrator): не полагаться на мангление имени транзиентного юнита

systemd-run пропускает голое имя через unit_name_mangle_with_suffix, который
сначала проверяет, не заканчивается ли оно уже известным типом юнита. Ключ
операции — санитизированный ISO-timestamp вида `...T12-34-56.789Z`, то есть
содержит точку, и корректность имени зависела бы от того, что `.789Z` случайно
не совпало ни с одним типом systemd.

Имя передаётся с явным суффиксом `.service`: systemd-run берёт его как есть и
создаёт рядом одноимённый `.timer`, на который и рассчитывают снятие guard и
status.
This commit is contained in:
2026-08-31 01:32:35 +05:00
parent 39139e95f7
commit 0230f1ca99
2 changed files with 19 additions and 1 deletions
+10
View File
@@ -271,6 +271,16 @@ describe("disarm доказывает снятие guard'а, а не сообщ
);
});
/**
* Имя транзиентного юнита передаётся с явным суффиксом. Голое имя systemd-run
* пропускает через мангling, который смотрит, не заканчивается ли оно уже
* известным типом юнита; ключ операции содержит точку (`...T12-34-56.789Z`),
* и корректность зависела бы от того, что `.789Z` ни с чем не совпало.
*/
test("имя юнита guard'а не зависит от мангления systemd", () => {
expect(firewallSource).toContain("systemd-run --unit ${`${unit}.service`}");
});
test("остановка guard'а стала стадией отката с отчётом", () => {
const rollback = firewallSource.slice(firewallSource.indexOf("export async function rollbackFirewallNow"));
expect(rollback).toContain('name: "stop firewall rollback guard"');