[libvirt] [PATCH v2] systemd: Modernize machine naming

Martin Kletzander mkletzan at redhat.com
Wed Feb 3 15:07:37 UTC 2016


On Wed, Feb 03, 2016 at 02:47:13PM +0000, Daniel P. Berrange wrote:
>On Wed, Feb 03, 2016 at 03:27:27PM +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 creates the
>> name as <drivername>-<id>-<name> where invalid hostname characters are
>> stripped out of the name and if the resulting name is longer, it
>> truncates it to 64 characters.  That way we can start domains we
>> couldn't start before.  Well, at least on systemd.
>>
>> To make it work all together, the machineName (which is needed only for
>> systemd) is saved in domain's private data.  That way the generation is
>> moved to the driver and we don't need to pass various unnecessary
>> arguments to cgroup functions.
>>
>> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1282846
>>
>> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
>> diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
>> index da0df7ae7a5e..4aed5d20b818 100644
>> --- a/src/util/vircgroup.c
>> +++ b/src/util/vircgroup.c
>> @@ -43,6 +43,7 @@
>>  #include "vircgrouppriv.h"
>>
>>  #include "virutil.h"
>> +#include "viruuid.h"
>>  #include "viralloc.h"
>>  #include "virerror.h"
>>  #include "virlog.h"
>> @@ -243,12 +244,14 @@ static bool
>>  virCgroupValidateMachineGroup(virCgroupPtr group,
>>                                const char *name,
>>                                const char *drivername,
>> +                              const unsigned char *uuid,
>>                                bool stripEmulatorSuffix)
>>  {
>>      size_t i;
>>      bool valid = false;
>>      char *partname;
>>      char *scopename;
>> +    char uuidstr[VIR_UUID_STRING_BUFLEN];
>>
>>      if (virAsprintf(&partname, "%s.libvirt-%s",
>>                      name, drivername) < 0)
>> @@ -263,6 +266,8 @@ virCgroupValidateMachineGroup(virCgroupPtr group,
>>      if (virCgroupPartitionEscape(&scopename) < 0)
>>          goto cleanup;
>>
>> +    virUUIDFormat(uuid, uuidstr);
>> +
>>      for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
>>          char *tmp;
>>
>> @@ -290,6 +295,7 @@ virCgroupValidateMachineGroup(virCgroupPtr group,
>>          tmp++;
>>
>>          if (STRNEQ(tmp, name) &&
>> +            STRNEQ(tmp, uuidstr) &&
>>              STRNEQ(tmp, partname) &&
>>              STRNEQ(tmp, scopename)) {
>>              VIR_DEBUG("Name '%s' for controller '%s' does not match "
>
>
>I don't think we need this anymore, which would mean removing the
>uuid parameter you added to several methods in this file.
>

Oh, sure, I forgot about this part.  I'll send one more version,
hopefully the last one...

>
>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 :|
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160203/5d8e22b4/attachment-0001.sig>


More information about the libvir-list mailing list