> Date: Fri, 3 Jan 2020 21:46:29 +0100
> From: Klemens Nanni <[email protected]>
> Content-Type: text/plain; charset=us-ascii
> Content-Disposition: inline
>
> With the hv_config() now in, `ldomctl init-system -n ldom.conf' to only
> parse configuration is trivial.
>
> It is usable as unprivileged user, no devices are touched.
>
> If errors occur, errors will be generated and ldomctl exits; if all is
> valid, this prints "configuration OK" just like vmd(8) does.
>
> I have plans for additional ldom.conf(5) options and -n greatly aids
> development, but I also prefer to (double) check configs before loading
> them as root in general.
>
> Feedback? OK?
I don't think this should print "configuartion OK" when there are no
errors. The UNIX way is to just return 0 and be done.
Otherwise ok kettenis@
> Index: config.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldomctl/config.c,v
> retrieving revision 1.29
> diff -u -p -r1.29 config.c
> --- config.c 28 Nov 2019 18:40:42 -0000 1.29
> +++ config.c 3 Jan 2020 20:45:33 -0000
> @@ -2759,7 +2759,7 @@ primary_init(void)
> }
>
> void
> -build_config(const char *filename)
> +build_config(const char *filename, int noaction)
> {
> struct guest *primary;
> struct guest *guest;
> @@ -2781,6 +2781,10 @@ build_config(const char *filename)
> SIMPLEQ_INIT(&conf.domain_list);
> if (parse_config(filename, &conf) < 0)
> exit(1);
> + if (noaction) {
> + fprintf(stderr, "configuration OK\n");
> + exit(0);
> + }
>
> pri = md_read("pri");
> if (pri == NULL)
> Index: ldomctl.8
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.8,v
> retrieving revision 1.21
> diff -u -p -r1.21 ldomctl.8
> --- ldomctl.8 30 Dec 2019 20:10:48 -0000 1.21
> +++ ldomctl.8 3 Jan 2020 20:45:33 -0000
> @@ -63,12 +63,17 @@ The download is aborted if a configurati
> .It Cm dump
> Dump the current configuration from non-volatile storage into the current
> working directory.
> -.It Cm init-system Ar file
> +.It Cm init-system Oo Fl n Oc Ar file
> Generate files in the current working directory for a logical domain
> configuration
> .Ar file
> as described in
> .Xr ldom.conf 5 .
> +.Bl -tag -width Fl
> +.It Fl n
> +Configtest mode.
> +Only check the configuration file for validty.
> +.El
> .It Cm list
> List configurations stored in non-volatile storage.
> Indicate the currently running configuration,
> Index: ldomctl.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 ldomctl.c
> --- ldomctl.c 3 Jan 2020 19:45:51 -0000 1.32
> +++ ldomctl.c 3 Jan 2020 20:45:34 -0000
> @@ -129,7 +129,7 @@ usage(void)
> fprintf(stderr, "usage:\t%1$s delete|select configuration\n"
> "\t%1$s download directory\n"
> "\t%1$s dump|list|list-io\n"
> - "\t%1$s init-system file\n"
> + "\t%1$s init-system [-n] file\n"
> "\t%1$s create-vdisk -s size file\n"
> "\t%1$s console|panic|start|status|stop [domain]\n", getprogname());
> exit(EXIT_FAILURE);
> @@ -241,12 +241,27 @@ dump(int argc, char **argv)
> void
> init_system(int argc, char **argv)
> {
> - if (argc != 2)
> + int ch, noaction = 0;
> +
> + while ((ch = getopt(argc, argv, "n")) != -1) {
> + switch (ch) {
> + case 'n':
> + noaction = 1;
> + break;
> + default:
> + usage();
> + }
> + }
> + argc -= optind;
> + argv += optind;
> +
> + if (argc != 1)
> usage();
>
> - hv_config();
> + if (!noaction)
> + hv_config();
>
> - build_config(argv[1]);
> + build_config(argv[0], noaction);
> }
>
> void
> Index: ldomctl.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.h,v
> retrieving revision 1.11
> diff -u -p -r1.11 ldomctl.h
> --- ldomctl.h 28 Nov 2019 18:03:33 -0000 1.11
> +++ ldomctl.h 3 Jan 2020 20:45:34 -0000
> @@ -193,5 +193,5 @@ struct ldom_config {
> };
>
> int parse_config(const char *, struct ldom_config *);
> -void build_config(const char *);
> +void build_config(const char *, int);
> void list_components(void);
>
>