On Wed, Feb 03, 2016 at 01:16:02PM +0000, Daniel P. Berrange wrote:
On Tue, Feb 02, 2016 at 09:22:49PM +0100, Martin Kletzander wrote:So, systemd-machined has this philosophy that machine names are like hostnames and hence should follow the same rules. But we always allowed international characters in domain names. Thus we need to modify the machine name we are passing to systemd. In order to change some machinenames that we will be passing to systemd, we also need to call TerminateMachine at the end of a lifetime of a domain. Even for domains that were started with older libvirt. That can be achieved thanks to virSystemdGetMachineNameByPID(). And because we can change machine names, we can get rid of the inconsistent and pointless escaping of domain names when creating machine names. So this patch modifies the naming in the following way. It tries using the name we were using earlier (without escaping the name, see above) and if that is not possible, because it doesn't follow the rules given by systemd, it then fallbacks to using <drivername>-<uuid> instead. That way we can start domains we couldn't start before. Well, at least on systemd.Ewww, please not uuids. They are really horrible things that should not be shown to users by default. IIUC we have 2 problems you're trying to address - some characters are invalid, and we have a name length limit.
I hate UUIDs, but the only other thing that I was offered was punnycode encoding using libidn. And nobody seemed to have an opinion on that.
Invalid characters can be dealt with by escaping or stripping them. The length limit is harder, since if we merely truncate we'll not have guaranteed unique names anymore. A nicer way to get around that would be to append the domain ID to the it, since that is a short unqiue token. ie <drivername>-<truncated name>-<id>
TL;DR Woud you agree on <drivername>-<id>-<name> where non-ascii characters are stripped fromt the name and then the whole string is truncated to 64 characters if it is longer than that? More blabber follows... I like the idea of using ID. That would help a lot. However, it would only make sense for long enough names. Let's say there won't be any user who would have a two machines, one with too long of a name and other with a name that is a prefix of the first one with -<number> appended. Also we could use the ID for every machine name, I think <drivername>-<id>-<name> still looks nice. Anyway, that doesn't deal with international characters in the name. And that can be split into two different problems as well. You can have a name that has one non-ASCII character in it. If we strip it, we are not going to have the uniqueness, but you can at least know which name represents which machine. However, there are then names that are with no ASCII characters at all, e.g. different alphabet. Stripping those means you have an empty string. Escaping on the other hand leads to longer names and in the second case is not readable at all. So as a conclusion, would you agree if we did the driver-id-name where non-ascii characters are stripped and then the whole string is truncated to 64 characters if it is longer?
Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list