A nested QEMU host appeared in virt-manager under its bare name, so nothing said which machine it lived inside. It now carries the same « parent+child » chain the ssh aliases use, at two levels of defence: - the connection URI uses the CHAINED alias, so even a virt-manager that ignores custom labels shows the nesting in the host part; - pretty-name is set explicitly, which is the label virt-manager actually displays. pretty-name lives in a RELOCATABLE GSettings schema, org.virt-manager.virt-manager.connection, one path per connection. The path is built with no escaping at all: virt-manager just deletes every « / » from the URI and uses the rest verbatim (virtManager/config.py, _make_perconn_key), so qemu+ssh://erplibre@a+b/system becomes conns/qemu+ssh:erplibre@a+bsystem/. That was verified for real rather than assumed: virt-manager is not installed here, so its gschema was fetched from the distribution package, compiled into a temporary schema dir, and the set/get/reset round trip run against it with a genuinely chained URI — colons, @ and + all survive the dconf path. The key was reset afterwards; nothing was left in dconf. Making the URI carry the chain needs the chained name to resolve, so a nested host is now written as « Host <short> <parent+child> » — ONE block, two names, since ssh accepts several patterns on a Host line. The short name stays for typing and is still only kept when free; the chain is always there. Checked with ssh -G: both names yield the same HostName and ProxyJump, and a third level chains as a+b+c. libvirt was checked too — it hands the URI host to ssh untouched, + included. Replacing a block by name meant a regex that could not see a Host line carrying several names, which would have left the same name defined twice — ssh honours the first, so an update would silently not apply. Removal now parses the file into blocks and drops any whose name list intersects the new one. Verified on a config with a global directive, a Match block and a multi-name Host: only the targeted block goes, rewriting twice is idempotent, and an unknown name leaves the file byte-identical. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| database_manager.py | ||
| kdbx_manager.py | ||
| logo_ascii.txt | ||
| migration_form.py | ||
| qemu_deploy_form.py | ||
| qemu_install_monitor.py | ||
| README.base.md | ||
| README.fr.md | ||
| README.md | ||
| source_todo.sh | ||
| todo.json | ||
| todo.py | ||
| todo_example.json | ||
| todo_file_browser.py | ||
| todo_i18n.py | ||
| todo_prefs.py | ||
| todo_telemetry.py | ||
| todo_upgrade.py | ||
| version_manager.py | ||
TODO is an assistant robot to use ERPLibre
Execute it with ./script/todo/todo.py or make todo.
For a new project, copy todo_example.json to private/todo/todo_override.json | private/todo/todo_override_private.json and edit it.