#include <sys/types.h>
#include <lxc/lxc.h>
+#include "arguments.h"
lxc_log_define(lxc_cgroup, lxc);
-void usage(char *cmd)
+static int my_checker(const struct lxc_arguments* args)
{
- fprintf(stderr, "%s <subsystem> [value]\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
+ if (!args->argc) {
+ lxc_error(args, "missing cgroup subsystem");
+ return -1;
+ }
+ return 0;
}
-int main(int argc, char *argv[])
-{
- int opt;
- char *name = NULL, *subsystem = NULL, *value = NULL;
- const char *log_file = NULL, *log_priority = NULL;
- int nbargs = 0;
- int quiet = 0;
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
- while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
+static struct lxc_arguments my_args = {
+ .progname = "lxc-cgroup",
+ .help = "\
+--name=NAME subsystem [value]\n\
+\n\
+lxc-cgroup get or set subsystem value of cgroup\n\
+associated with the NAME container\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = my_checker,
+};
- nbargs++;
- }
+int main(int argc, char *argv[])
+{
+ int ret;
+ char *subsystem = NULL, *value = NULL;
- if (!name || (argc-optind) < 1)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- if ((argc -optind) >= 1)
- subsystem = argv[optind];
+ subsystem = my_args.argv[0];
- if ((argc -optind) >= 2)
- value = argv[optind+1];
+ if ((argc) > 1)
+ value = my_args.argv[1];
if (value) {
- if (lxc_cgroup_set(name, subsystem, value)) {
- ERROR("failed to assign '%s' value to '%s' for '%s'\n",
- value, subsystem, name);
+ if (lxc_cgroup_set(my_args.name, subsystem, value)) {
+ ERROR("failed to assign '%s' value to '%s' for '%s'",
+ value, subsystem, my_args.name);
return 1;
}
} else {
const unsigned long len = 4096;
char buffer[len];
- if (lxc_cgroup_get(name, subsystem, buffer, len)) {
- ERROR("failed to retrieve value of '%s' for '%s'\n",
- subsystem, name);
+ if (lxc_cgroup_get(my_args.name, subsystem, buffer, len)) {
+ ERROR("failed to retrieve value of '%s' for '%s'",
+ subsystem, my_args.name);
return 1;
}
#include <lxc/lxc.h>
#include "confile.h"
+#include "arguments.h"
-void usage(char *cmd)
+static int my_parser(struct lxc_arguments* args, int c, char* arg)
{
- fprintf(stderr, "%s <command>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t -f <confile> : path of the configuration file\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
+ switch (c) {
+ case 'f': args->rcfile = arg; break;
+ }
+ return 0;
}
+static const struct option my_longopts[] = {
+ {"rcfile", required_argument, 0, 'f'},
+ LXC_COMMON_OPTIONS
+};
+
+static struct lxc_arguments my_args = {
+ .progname = "lxc-create",
+ .help = "\
+--name=NAME\n\
+\n\
+lxc-create creates a container with the identifier NAME\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container\n\
+ -f, --rcfile=FILE Load configuration file FILE\n",
+ .options = my_longopts,
+ .parser = my_parser,
+ .checker = NULL,
+};
+
int main(int argc, char *argv[])
{
- const char *name = NULL, *file = NULL;
- const char *log_file = NULL, *log_priority = NULL;
struct lxc_conf lxc_conf;
- int err, opt;
- int quiet = 0;
+ int ret;
- while ((opt = getopt(argc, argv, "f:n:o:l:q")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'f':
- file = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
- }
-
- if (!name)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
if (lxc_conf_init(&lxc_conf))
return 1;
- if (file && lxc_config_read(file, &lxc_conf))
+ if (my_args.rcfile && lxc_config_read(my_args.rcfile, &lxc_conf))
return 1;
- err = lxc_create(name, &lxc_conf);
- if (err)
+ ret = lxc_create(my_args.name, &lxc_conf);
+ if (ret)
return 1;
return 0;
#include <sys/types.h>
#include <lxc/lxc.h>
+#include "arguments.h"
-void usage(char *cmd)
-{
- fprintf(stderr, "%s <command>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
-}
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
+
+static struct lxc_arguments my_args = {
+ .progname = "lxc-destroy",
+ .help = "\
+--name=NAME\n\
+\n\
+lxc-destroy destroy a container with the identifier NAME\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container\n",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = NULL,
+};
int main(int argc, char *argv[])
{
- char *name = NULL;
- const char *log_file = NULL, *log_priority = NULL;
- int opt;
- int nbargs = 0;
- int err;
- int quiet = 0;
+ int ret;
- while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
-
- nbargs++;
- }
-
- if (!name)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- err = lxc_destroy(name);
- if (err)
+ ret = lxc_destroy(my_args.name);
+ if (ret)
return 1;
return 0;
#include <string.h>
#include <lxc/lxc.h>
+#include "arguments.h"
-void usage(char *cmd)
-{
- fprintf(stderr, "%s <command>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
-}
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
+
+static struct lxc_arguments my_args = {
+ .progname = "lxc-freeze",
+ .help = "\
+--name=NAME\n\
+\n\
+lxc-freeze freezes a container with the identifier NAME\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = NULL,
+};
int main(int argc, char *argv[])
{
- char *name = NULL;
- const char *log_file = NULL, *log_priority = NULL;
- int opt;
- int nbargs = 0;
- int quiet = 0;
+ int ret;
- while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
-
- nbargs++;
- }
-
- if (!name)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- if (lxc_freeze(name))
+ if (lxc_freeze(my_args.name))
return 1;
return 0;
#include <sys/types.h>
#include <lxc/lxc.h>
+#include "arguments.h"
-void usage(char *cmd)
-{
- fprintf(stderr, "%s <command>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
-}
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
+
+static struct lxc_arguments my_args = {
+ .progname = "lxc-info",
+ .help = "\
+--name=NAME\n\
+\n\
+lxc-info display the state of a container with the identifier NAME\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container\n",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = NULL,
+};
int main(int argc, char *argv[])
{
- char *name = NULL;
- const char *log_file = NULL, *log_priority = NULL;
- int opt, state, nbargs = 0;
- int quiet = 0;
-
- while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
+ int ret, state;
- nbargs++;
- }
-
- if (!name)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- state = lxc_getstate(name);
+ state = lxc_getstate(my_args.name);
if (state < 0)
return 1;
- printf("'%s' is %s\n", name, lxc_state2str(state));
+ printf("'%s' is %s\n", my_args.name, lxc_state2str(state));
return 0;
}
-
#include <sys/types.h>
#include <lxc/lxc.h>
+#include "arguments.h"
lxc_log_define(monitor, lxc);
-void usage(char *cmd)
-{
- fprintf(stderr, "%s <command>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container or regular expression\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
-}
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
+
+static struct lxc_arguments my_args = {
+ .progname = "lxc-monitor",
+ .help = "\
+--name=NAME\n\
+\n\
+lxc-monitor monitors the state of the NAME container\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container\n\
+ NAME may be a regular expression",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = NULL,
+};
int main(int argc, char *argv[])
{
- char *name = NULL;
- const char *log_file = NULL, *log_priority = NULL;
char *regexp;
struct lxc_msg msg;
regex_t preg;
- int fd, opt;
- int quiet = 0;
-
- while ((opt = getopt(argc, argv, "n:o:l:q")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
- }
+ int fd, ret;
- if (!name)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- regexp = malloc(strlen(name) + 3);
- sprintf(regexp, "^%s$", name);
+ regexp = malloc(strlen(my_args.name) + 3);
+ sprintf(regexp, "^%s$", my_args.name);
if (regcomp(&preg, regexp, REG_NOSUB|REG_EXTENDED)) {
- ERROR("failed to compile the regex '%s'", name);
+ ERROR("failed to compile the regex '%s'", my_args.name);
return 1;
}
#include <sys/types.h>
#include <lxc.h>
+#include "arguments.h"
-lxc_log_define(lxc_restart, lxc);
-
-void usage(char *cmd)
+static int my_checker(const struct lxc_arguments* args)
{
- fprintf(stderr, "%s <statefile>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
-}
+ if (!args->argc) {
+ lxc_error(args, "missing STATEFILE filename !");
+ return -1;
+ }
-int main(int argc, char *argv[])
-{
- char *name = NULL;
- const char *log_file = NULL, *log_priority = NULL;
- int opt, nbargs = 0;
- int quiet = 0;
+ return 0;
+}
- while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
- nbargs++;
- }
+static struct lxc_arguments my_args = {
+ .progname = "lxc-restart",
+ .help = "\
+--name=NAME STATEFILE\n\
+\n\
+lxc-restart restarts from STATEFILE file the NAME container\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container\n",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = my_checker,
+};
- if (!name)
- usage(argv[0]);
+int main(int argc, char *argv[])
+{
+ int ret;
- if (!argv[optind])
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- if (lxc_restart(name, argv[1], 0)) {
- ERROR("failed to restart %s", name);
+ if (lxc_restart(my_args.name, my_args.argv[0], 0))
return 1;
- }
return 0;
}
#include <sys/types.h>
#include <lxc/lxc.h>
+#include "arguments.h"
-void usage(char *cmd)
-{
- fprintf(stderr, "%s <command>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
-}
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
+
+static struct lxc_arguments my_args = {
+ .progname = "lxc-stop",
+ .help = "\
+--name=NAME\n\
+\n\
+lxc-stop stops a container with the identifier NAME\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container\n",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = NULL,
+};
int main(int argc, char *argv[])
{
- char *name = NULL;
- const char *log_file = NULL, *log_priority = NULL;
- int opt, err, nbargs = 0;
- int quiet = 0;
+ int ret;
- while ((opt = getopt(argc, argv, "n:o:l:q")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
-
- nbargs++;
- }
-
- if (!name)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- err = lxc_stop(name);
- if (err)
+ ret = lxc_stop(my_args.name);
+ if (ret)
return 1;
return 0;
#include <sys/types.h>
#include <lxc/lxc.h>
+#include "arguments.h"
-void usage(char *cmd)
-{
- fprintf(stderr, "%s <command>\n", basename(cmd));
- fprintf(stderr, "\t -n <name> : name of the container\n");
- fprintf(stderr, "\t[-o <logfile>] : path of the log file\n");
- fprintf(stderr, "\t[-l <logpriority>]: log level priority\n");
- fprintf(stderr, "\t[-q ] : be quiet\n");
- _exit(1);
-}
+static const struct option my_longopts[] = {
+ LXC_COMMON_OPTIONS
+};
+
+static struct lxc_arguments my_args = {
+ .progname = "lxc-unfreeze",
+ .help = "\
+--name=NAME\n\
+\n\
+lxc-unfreeze unfreezes a container with the identifier NAME\n\
+\n\
+Options :\n\
+ -n, --name=NAME NAME for name of the container\n",
+ .options = my_longopts,
+ .parser = NULL,
+ .checker = NULL,
+};
int main(int argc, char *argv[])
{
- char *name = NULL;
- const char *log_file = NULL, *log_priority = NULL;
- int opt, nbargs = 0;
- int quiet = 0;
+ int ret;
- while ((opt = getopt(argc, argv, "n:o:l:")) != -1) {
- switch (opt) {
- case 'n':
- name = optarg;
- break;
- case 'o':
- log_file = optarg;
- break;
- case 'l':
- log_priority = optarg;
- break;
- case 'q':
- quiet = 1;
- break;
- }
-
- nbargs++;
- }
-
- if (!name)
- usage(argv[0]);
+ ret = lxc_arguments_parse(&my_args, argc, argv);
+ if (ret)
+ return 1;
- if (lxc_log_init(log_file, log_priority, basename(argv[0]), quiet))
+ if (lxc_log_init(my_args.log_file, my_args.log_priority,
+ my_args.progname, my_args.quiet))
return 1;
- if (lxc_unfreeze(name))
+ if (lxc_unfreeze(my_args.name))
return 1;
return 0;