diff --git a/src/cli_create.cpp b/src/cli_create.cpp index 79b859ef..8c343b8c 100644 --- a/src/cli_create.cpp +++ b/src/cli_create.cpp @@ -88,6 +88,31 @@ struct image_creator_t goto resume_2; else if (state == 3) goto resume_3; + for (auto & ic: parent->cli->st_cli.inode_config) + { + if (ic.second.name == image_name) + { + fprintf(stderr, "Image %s already exists\n", image_name.c_str()); + exit(1); + } + if (ic.second.name == new_parent) + { + new_parent_id = ic.second.num; + if (!new_pool_id) + { + new_pool_id = INODE_POOL(ic.second.num); + } + if (!size) + { + size = ic.second.size; + } + } + } + if (new_parent != "" && !new_parent_id) + { + fprintf(stderr, "Parent image not found\n"); + exit(1); + } if (!new_pool_id) { fprintf(stderr, "Pool name or ID is missing\n"); @@ -98,14 +123,6 @@ struct image_creator_t fprintf(stderr, "Image size is missing\n"); exit(1); } - for (auto & ic: parent->cli->st_cli.inode_config) - { - if (ic.second.name == image_name) - { - fprintf(stderr, "Image %s already exists\n", image_name.c_str()); - exit(1); - } - } do { etcd_txn(json11::Json::object { @@ -151,6 +168,11 @@ resume_3: exit(1); } } + if (new_parent != "") + { + fprintf(stderr, "--parent can't be used with snapshots\n"); + exit(1); + } do { // In addition to next_id, get: size, old_id, old_pool_id, new_parent, cfg_mod_rev, idx_mod_rev