mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 03:25:20 +00:00
LXC from native: convert lxc.id_map into <idmap>
This commit is contained in:
parent
8e45b88772
commit
99d8cddfbe
@ -570,6 +570,43 @@ error:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
lxcIdmapWalkCallback(const char *name, virConfValuePtr value, void *data)
|
||||||
|
{
|
||||||
|
virDomainDefPtr def = data;
|
||||||
|
virDomainIdMapEntryPtr idmap = NULL;
|
||||||
|
char type;
|
||||||
|
unsigned long start, target, count;
|
||||||
|
|
||||||
|
if (STRNEQ(name, "lxc.id_map") || !value->str)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (sscanf(value->str, "%c %lu %lu %lu", &type,
|
||||||
|
&target, &start, &count) != 4) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, _("invalid lxc.id_map: '%s'"),
|
||||||
|
value->str);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == 'u') {
|
||||||
|
if (VIR_EXPAND_N(def->idmap.uidmap, def->idmap.nuidmap, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
idmap = &def->idmap.uidmap[def->idmap.nuidmap - 1];
|
||||||
|
} else if (type == 'g') {
|
||||||
|
if (VIR_EXPAND_N(def->idmap.gidmap, def->idmap.ngidmap, 1) < 0)
|
||||||
|
return -1;
|
||||||
|
idmap = &def->idmap.gidmap[def->idmap.ngidmap - 1];
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
idmap->start = start;
|
||||||
|
idmap->target = target;
|
||||||
|
idmap->count = count;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
virDomainDefPtr
|
virDomainDefPtr
|
||||||
lxcParseConfigString(const char *config)
|
lxcParseConfigString(const char *config)
|
||||||
{
|
{
|
||||||
@ -638,6 +675,10 @@ lxcParseConfigString(const char *config)
|
|||||||
if (lxcCreateConsoles(vmdef, properties) < 0)
|
if (lxcCreateConsoles(vmdef, properties) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
/* lxc.id_map */
|
||||||
|
if (virConfWalk(properties, lxcIdmapWalkCallback, vmdef) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
5
tests/lxcconf2xmldata/lxcconf2xml-idmap.config
Normal file
5
tests/lxcconf2xmldata/lxcconf2xml-idmap.config
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
lxc.rootfs = /var/lib/lxc/migrate_test/rootfs
|
||||||
|
lxc.utsname = migrate_test
|
||||||
|
|
||||||
|
lxc.id_map = u 10000 0 2000
|
||||||
|
lxc.id_map = g 10000 0 1000
|
28
tests/lxcconf2xmldata/lxcconf2xml-idmap.xml
Normal file
28
tests/lxcconf2xmldata/lxcconf2xml-idmap.xml
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<domain type='lxc'>
|
||||||
|
<name>migrate_test</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>65536</memory>
|
||||||
|
<currentMemory unit='KiB'>0</currentMemory>
|
||||||
|
<vcpu placement='static' current='0'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type>exe</type>
|
||||||
|
<init>/sbin/init</init>
|
||||||
|
</os>
|
||||||
|
<idmap>
|
||||||
|
<uid start='0' target='10000' count='2000'/>
|
||||||
|
<gid start='0' target='10000' count='1000'/>
|
||||||
|
</idmap>
|
||||||
|
<features>
|
||||||
|
<privnet/>
|
||||||
|
</features>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<filesystem type='mount' accessmode='passthrough'>
|
||||||
|
<source dir='/var/lib/lxc/migrate_test/rootfs'/>
|
||||||
|
<target dir='/'/>
|
||||||
|
</filesystem>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -108,6 +108,7 @@ mymain(void)
|
|||||||
DO_TEST("nonenetwork", false);
|
DO_TEST("nonenetwork", false);
|
||||||
DO_TEST("physnetwork", false);
|
DO_TEST("physnetwork", false);
|
||||||
DO_TEST("macvlannetwork", false);
|
DO_TEST("macvlannetwork", false);
|
||||||
|
DO_TEST("idmap", false);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user