> Date: Thu, 9 Jan 2020 21:53:09 +0100 > From: Klemens Nanni <k...@openbsd.org> > > Each guest needs vcpu and memory, otherwise it's invalid. > Each guest also needs at least one of vdisk, vnet or iodevice, otherwise > it has nothing to boot from. > > Consider this example: > > # cat foo.conf > domain no-boot { > vcpu 1 > memory 32G > } > domain no-vcpu { > memory 32G > } > domain no-memory { > vcpu 2 > } > > Current code accepts the first two guests, only the latter would fail > with bogus "ldomctl: unable to allocate guest memory". > > Diff below fixes each of these cases: > > # ldomctl init-system ../foo.conf > foo.conf:4 at least one bootable device is required: no-boot > foo.conf:7 vcpu is required: no-vcpu > foo.conf:10 memory is required: no-memory > > Alternatively, we could make vcpu and memory default to something, > eliminating such validation checks - we only need sane default values.
I don't think there is a sane default for memory. > For devices there is no such possible default. > > Feedback? OK? ok kettenis@ > Index: parse.y > =================================================================== > RCS file: /cvs/src/usr.sbin/ldomctl/parse.y,v > retrieving revision 1.14 > diff -u -p -r1.14 parse.y > --- parse.y 9 Jan 2020 09:23:57 -0000 1.14 > +++ parse.y 9 Jan 2020 20:44:51 -0000 > @@ -124,6 +124,25 @@ domain : DOMAIN STRING optnl '{' optnl > SIMPLEQ_INIT(&domain->iodev_list); > } > domainopts_l '}' { > + if (strcmp(domain->name, "primary") != 0) { > + if (domain->vcpu == 0) { > + yyerror("vcpu is required: %s", > + domain->name); > + YYERROR; > + } > + if ( domain->memory == 0) { there is a space that shouldn't be there > + yyerror("memory is required: %s", > + domain->name); > + YYERROR; > + } > + if (SIMPLEQ_EMPTY(&domain->vdisk_list) && > + SIMPLEQ_EMPTY(&domain->vnet_list) && > + SIMPLEQ_EMPTY(&domain->iodev_list)) { > + yyerror("at least one bootable device" > + " is required: %s", domain->name); > + YYERROR; > + } > + } > SIMPLEQ_INSERT_TAIL(&conf->domain_list, domain, entry); > domain = NULL; > } > >