This patch adds a tree view option to the `collie vdi' command. This is the same as `shepherd info -f tree' in the old syntax. Example: $ qemu-img convert src.raw sheepdog:linux # create vdi $ collie vdi tree # show vdi tree linux---(You Are Here) $ qemu-img snapshot -c name sheepdog:linux # create snapshot $ qemu-img snapshot -c name sheepdog:linux # create snapshot $ collie vdi tree # show vdi tree linux---[2010-06-17 15:12]---[2010-06-17 15:12]---(You Are Here) $ qemu-system-x86_64 sheepdog:linux:1 # boot from snapshot $ collie vdi tree # show vdi tree linux---[2010-06-17 15:12]-+-[2010-06-17 15:12]---[2010-06-17 15:12] `-(You Are Here) $ qemu-img snapshot -c name sheepdog:linux # create snapshot $ collie vdi tree # show vdi tree linux---[2010-06-17 15:12]-+-[2010-06-17 15:12]---[2010-06-17 15:12] `-[2010-06-17 15:12]---(You Are Here) Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> --- collie/collie.c | 32 +++++++++++++++++++++++++++++++- 1 files changed, 31 insertions(+), 1 deletions(-) diff --git a/collie/collie.c b/collie/collie.c index 6f5b171..0e0a2a2 100644 --- a/collie/collie.c +++ b/collie/collie.c @@ -56,7 +56,7 @@ static void usage(int status) Command syntax:\n\ cluster (info|format|shutdown)\n\ node (info|list)\n\ - vdi (list|delete|object|lock|release)\n\ + vdi (list|tree|delete|object|lock|release)\n\ vm list\n\ \n\ Common parameters:\n\ @@ -334,6 +334,26 @@ static void print_vdi_list(uint32_t vid, char *name, uint32_t tag, } } +static void print_vdi_tree(uint32_t vid, char *name, uint32_t tag, + uint32_t flags, struct sheepdog_inode *i, void *data) +{ + time_t ti; + struct tm tm; + char buf[128]; + + if (is_current(i)) + strcpy(buf, "(You Are Here)"); + else { + ti = i->ctime >> 32; + localtime_r(&ti, &tm); + + strftime(buf, sizeof(buf), + "[%Y-%m-%d %H:%M]", &tm); + } + + add_vdi_tree(name, buf, vid, i->parent_vdi_id, highlight && is_current(i)); +} + struct vm_list_info { struct sheepdog_vm_list_entry *vm_list_entries; int nr_vms; @@ -679,6 +699,15 @@ static int vdi_list(int argc, char **argv) return 0; } +static int vdi_tree(int argc, char **argv) +{ + init_tree(); + parse_vdi(print_vdi_tree, NULL); + dump_tree(); + + return 0; +} + static int vdi_delete(int argc, char **argv) { char *data = argv[optind]; @@ -869,6 +898,7 @@ static int vdi_release(int argc, char **argv) static struct subcommand vdi_cmd[] = { {"delete", SUBCMD_FLAG_NEED_NOEDLIST|SUBCMD_FLAG_NEED_THIRD_ARG, vdi_delete}, {"list", SUBCMD_FLAG_NEED_NOEDLIST, vdi_list}, + {"tree", SUBCMD_FLAG_NEED_NOEDLIST, vdi_tree}, {"object", SUBCMD_FLAG_NEED_NOEDLIST|SUBCMD_FLAG_NEED_THIRD_ARG, vdi_object}, {"lock", SUBCMD_FLAG_NEED_THIRD_ARG, vdi_lock}, {"release", SUBCMD_FLAG_NEED_THIRD_ARG, vdi_release}, -- 1.5.6.5 |