mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-06-16 02:15:47 +00:00
kvm tools: Add option to list rootfs in 'kvm list'
Previously we would only list running instances, now that we create rootfs instances it's appropriate to add a method to list them as well. Suggested-by: Ingo Molnar <mingo@elte.hu> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
+65
-1
@@ -4,6 +4,7 @@
|
||||
#include <kvm/kvm.h>
|
||||
#include <kvm/parse-options.h>
|
||||
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
@@ -11,12 +12,18 @@
|
||||
|
||||
#define PROCESS_NAME "kvm"
|
||||
|
||||
static bool run;
|
||||
static bool rootfs;
|
||||
|
||||
static const char * const list_usage[] = {
|
||||
"kvm list",
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct option list_options[] = {
|
||||
OPT_GROUP("General options:"),
|
||||
OPT_BOOLEAN('i', "run", &run, "List running instances"),
|
||||
OPT_BOOLEAN('r', "rootfs", &rootfs, "List rootfs instances"),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
@@ -58,9 +65,66 @@ cleanup:
|
||||
return 0;
|
||||
}
|
||||
|
||||
int kvm_cmd_list(int argc, const char **argv, const char *prefix)
|
||||
static int kvm_list_running_instances(void)
|
||||
{
|
||||
printf(" PID GUEST\n");
|
||||
|
||||
return kvm__enumerate_instances(print_guest);
|
||||
}
|
||||
|
||||
static int kvm_list_rootfs(void)
|
||||
{
|
||||
char name[PATH_MAX];
|
||||
DIR *dir;
|
||||
struct dirent *dirent;
|
||||
|
||||
snprintf(name, PATH_MAX, "%s%s", HOME_DIR, KVM_PID_FILE_PATH);
|
||||
dir = opendir(name);
|
||||
if (dir == NULL)
|
||||
return -1;
|
||||
|
||||
printf(" ROOTFS\n");
|
||||
|
||||
while ((dirent = readdir(dir))) {
|
||||
if (dirent->d_type == DT_DIR &&
|
||||
strcmp(dirent->d_name, ".") &&
|
||||
strcmp(dirent->d_name, ".."))
|
||||
printf("%s\n", dirent->d_name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void parse_setup_options(int argc, const char **argv)
|
||||
{
|
||||
while (argc != 0) {
|
||||
argc = parse_options(argc, argv, list_options, list_usage,
|
||||
PARSE_OPT_STOP_AT_NON_OPTION);
|
||||
if (argc != 0)
|
||||
kvm_list_help();
|
||||
}
|
||||
}
|
||||
|
||||
int kvm_cmd_list(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int r;
|
||||
|
||||
parse_setup_options(argc, argv);
|
||||
|
||||
if (!run && !rootfs)
|
||||
kvm_list_help();
|
||||
|
||||
if (run) {
|
||||
r = kvm_list_running_instances();
|
||||
if (r < 0)
|
||||
perror("Error listing instances");
|
||||
}
|
||||
|
||||
if (rootfs) {
|
||||
r = kvm_list_rootfs();
|
||||
if (r < 0)
|
||||
perror("Error listing rootfs");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user