Begin to implement CLI: implement listing, add help, add create stub

This commit is contained in:
Vitaliy Filippov
2021-11-06 14:32:19 +03:00
parent ffb06536ff
commit 8e445ddc9a
8 changed files with 405 additions and 18 deletions
+50
View File
@@ -0,0 +1,50 @@
// Copyright (c) Vitaliy Filippov, 2019+
// License: VNPL-1.1 (see README.md for details)
#include "cli.h"
#include "cluster_client.h"
#include "base64.h"
// Create an image, snapshot or clone
//
// Snapshot creation does a etcd transaction which:
// - Changes the name of old inode to the name of the snapshot (say, testimg -> testimg@0)
// - Sets the readonly flag for the old inode
// - Creates a new inode with the same name pointing to the old inode as parent
// - Adjusts /index/image/*
//
// The same algorithm can be easily implemented in any other language or even via etcdctl,
// however we have it here for completeness
struct image_creator_t
{
cli_tool_t *parent;
int state = 0;
bool is_done()
{
return true;
}
void loop()
{
return;
}
};
std::function<bool(void)> cli_tool_t::start_create(json11::Json cfg)
{
json11::Json::array cmd = cfg["command"].array_items();
auto image_creator = new image_creator_t();
image_creator->parent = this;
return [image_creator]()
{
image_creator->loop();
if (image_creator->is_done())
{
delete image_creator;
return true;
}
return false;
};
}