fix: name the guest in VM/CT health alerts, refresh AI models, propose the recipe's volume choice

- A health problem of a VM or CT names the guest in its title and in the
  Quiet Hours summary; a recovery shows its category by name in the
  reader's language.
- AI model lists reviewed against each provider: Gemini adds 3.6/3.7/3.8
  Flash, Groq adds gpt-oss-120b, and Groq/OpenRouter models no longer
  served are removed.
- OCI installer proposes the volume choice the recipe declares, so a path
  meant for a host directory is proposed as one; Duplicati /source is
  proposed on a host directory.
This commit is contained in:
MacRimi
2026-10-26 18:47:09 +01:00
parent b6500c147e
commit 7b1736fe3e
21 changed files with 160 additions and 24 deletions
@@ -104,6 +104,15 @@ class DefaultInstallEssentialsTests(unittest.TestCase):
self.assertEqual({m["source"] for m in plan["mounts"] if m["type"] == "managed-volume"} - {"Public"},
set(), app)
def test_the_files_to_back_up_are_proposed_on_a_host_directory(self, *_):
for app in ("duplicati", "duplicati-official"):
ui, plan = self.build(app)
source = next(m for m in plan["mounts"] if m["container_path"] == "/source")
self.assertEqual(source["type"], "host-bind", app)
self.assertIn("Host path for /source", ui.asked, app)
backups = next(m for m in plan["mounts"] if m["container_path"] == "/backups")
self.assertEqual(backups["type"], "managed-volume", app)
def test_the_members_of_a_stack_ask_nothing_of_their_own(self, *_):
for app in ("linkwarden", "suite-arr"):
ui, _plan = self.build(app)