in zookeeper-contrib/zookeeper-contrib-zktreeutil/src/ZkTreeUtilMain.cc [141:259]
int main(int argc, char **argv)
{
if (argc == 1) {
usage(argc, argv);
exit(0);
}
// Parse the arguments.
int op = 0;
bool force = false;
string zkHosts;
string xmlFile;
string path = "/";
string cert;
int depth = 0;
while (1)
{
int c = getopt_long(argc, argv, short_options, long_options, 0);
if (c == -1)
break;
switch (c) {
case 'I': op = c;
break;
case 'E': op = c;
break;
case 'U': op = c;
break;
case 'F': op = c;
break;
case 'D': op = c;
break;
case 'f': force = true;
break;
case 'x': xmlFile = optarg;
break;
case 'p': path = optarg;
break;
case 'd': depth = atoi (optarg);
break;
case 'z': zkHosts = optarg;
break;
case 's': cert = optarg;
break;
case 'h': usage (argc, argv);
exit(0);
}
}
ZkTreeUtil zkTreeUtil;
if (!cert.empty()) zkTreeUtil.setSslParams(cert);
switch (op)
{
case 'I': {
if (zkHosts == "" || xmlFile == "")
{
std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
exit (-1);
}
zkTreeUtil.loadZkTreeXml (xmlFile);
zkTreeUtil.writeZkTree (zkHosts, path, force);
std::cout << "[zktreeutil] import successful!" << std::endl;
break;
}
case 'E': {
if (zkHosts == "")
{
std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
exit (-1);
}
zkTreeUtil.loadZkTree (zkHosts, path);
zkTreeUtil.dumpZkTree (true);
break;
}
case 'U': {
if (zkHosts == "" || xmlFile == "")
{
std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
exit (-1);
}
zkTreeUtil.loadZkTreeXml (xmlFile);
vector< ZkAction > zkActions = zkTreeUtil.diffZkTree (zkHosts, path);
int flags = ZkTreeUtil::EXECUTE;
if (!force) flags |= ZkTreeUtil::INTERACTIVE;
zkTreeUtil.executeZkActions (zkHosts, zkActions, flags);
std::cout << "[zktreeutil] update successful!" << std::endl;
break;
}
case 'F': {
if (zkHosts == "" || xmlFile == "")
{
std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
exit (-1);
}
zkTreeUtil.loadZkTreeXml (xmlFile);
vector< ZkAction > zkActions = zkTreeUtil.diffZkTree (zkHosts, path);
zkTreeUtil.executeZkActions (zkHosts, zkActions, ZkTreeUtil::PRINT);
break;
}
case 'D': {
if (zkHosts != "")
zkTreeUtil.loadZkTree (zkHosts, path);
else if (xmlFile != "")
zkTreeUtil.loadZkTreeXml (xmlFile);
else
{
std::cout << "[zktreeutil] missing params; please see usage" << std::endl;
exit (-1);
}
// Dump the ZK tree
if (depth) zkTreeUtil.dumpZkTree (false, depth);
else zkTreeUtil.dumpZkTree (false);
break;
}
}
exit(0);
}