[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] xl: support specifing '[vars]' in 'xl create'
Add support of specifing '[vars]' in 'xl create'. It is said '[vars]' can be used in help message of 'xl create', but in fact cannot now, so add this function. After this fix: # xl create pvguest1.conf # xl list Name ID Mem VCPUs State Time(s) Domain-0 0 1024 2 r-- 161.0 pvguest1 29 256 2 r-- 0.5 # xl destroy pvguest1 # xl create pvguest1.conf vcpus=4 memory=512 'name="pv1"' # xl list Name ID Mem VCPUs State Time(s) Domain-0 0 1024 2 r-- 162.2 pv1 30 512 4 r-- 0.2 Signed-off-by: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx> diff -r c87ec146229a -r 51bb2db1ed51 tools/libxl/xl.c --- a/tools/libxl/xl.c Fri Apr 23 15:04:26 2010 +0100 +++ b/tools/libxl/xl.c Thu Apr 29 00:02:02 2010 +0800 @@ -777,7 +777,9 @@ return r; } -static int create_domain(int debug, int daemonize, const char *config_file, const char *restore_file, int paused, int migrate_fd /* -1 means none */, char **migration_domname_r) +static int create_domain(int debug, int daemonize, const char *config_file, const char *restore_file, + int paused, int migrate_fd /* -1 means none */, char **migration_domname_r, + const char *extra_config) { libxl_domain_create_info info1; libxl_domain_build_info info2; @@ -873,6 +875,21 @@ &config_data, &config_len); if (ret) { fprintf(stderr, "Failed to read config file: %s: %s\n", config_file, strerror(errno)); return ERROR_FAIL; } + if (!restore_file && extra_config && strlen(extra_config)) { + if (config_len > INT_MAX - (strlen(extra_config) + 2)) { + fprintf(stderr, "Failed to attach extra configration\n"); + return ERROR_FAIL; + } + config_data = realloc(config_data, config_len + strlen(extra_config) + 2); + if (!config_data) { + fprintf(stderr, "Failed to realloc config_data\n"); + return ERROR_FAIL; + } + strcat(config_data, "\n"); + strcat(config_data, extra_config); + strcat(config_data, "\n"); + config_len += (strlen(extra_config) + 2); + } } else { if (!config_data) { fprintf(stderr, "Config file not specified and" @@ -1935,7 +1952,7 @@ rc = create_domain(debug, daemonize, 0 /* no config file, use incoming */, "incoming migration stream", 1, - 0, &migration_domname); + 0, &migration_domname, NULL); if (rc) { fprintf(stderr, "migration target: Domain creation failed" " (code %d).\n", rc); @@ -2045,7 +2062,7 @@ exit(2); } rc = create_domain(debug, daemonize, config_file, - checkpoint_file, paused, -1, 0); + checkpoint_file, paused, -1, 0, NULL); exit(-rc); } @@ -2291,6 +2308,8 @@ { char *filename = NULL; int debug = 0, daemonize = 1; +#define MAX_EXTRA 1024 + char *p, extra_config[MAX_EXTRA]; int opt, rc; while ((opt = getopt(argc, argv, "hde")) != -1) { @@ -2310,14 +2329,26 @@ } } - if (optind >= argc) { - help("create"); - exit(2); + memset(extra_config, 0, MAX_EXTRA); + while (optind < argc) { + if ((p = strchr(argv[optind], '='))) { + if (strlen(extra_config) + 1 < MAX_EXTRA) { + if (strlen(extra_config)) + strcat(extra_config, "\n"); + strcat(extra_config, argv[optind]); + } + } else if (!filename) { + filename = argv[optind]; + } else { + help("create"); + exit(2); + } + + optind++; } - filename = argv[optind]; rc = create_domain(debug, daemonize, filename, NULL, 0, - -1, 0); + -1, 0, extra_config); exit(-rc); } _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |