NEW API: sysadm/iocage "action"="listtemplates"

This will list all the jail templates currently available on the local system.

Example Arguments Reply:

{
 "listtemplates":{
  "templates" : {
   "template_1" : {
    "jid" : "jail_id",
    "uuid": "unique_id_string",
    "boot": "on/off",
    "state":"jail_state",
    "tag":"jail_tag",
    "type":"jail_type",
    "release":"freebsd_release",
    "ip4":"ipv4_address",
    "ip6":"ipv6_address",
    "template":"template_1"
   }
  }
 }
}
This commit is contained in:
Ken Moore
2017-06-01 16:04:01 -04:00
parent 4333ac6fba
commit fdd864e298
2 changed files with 36 additions and 29 deletions

View File

@@ -706,11 +706,8 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIocageRequest(const QJsonVal
else if(act=="listjails"){
ok = true;
out->insert("listjails", sysadm::Iocage::listJails());
}
else if(act=="listtemplates"){
ok = true;
out->insert("listtemplates", sysadm::Iocage::listTemplates());
}*/
else if(act=="listtemplates"){ retObj = sysadm::Iocage::listTemplates(); }
else if(act=="listreleases"){ retObj = sysadm::Iocage::listReleases(); }
else if(act=="listplugins"){ retObj = sysadm::Iocage::listPlugins(); }
ok = !retObj.keys().isEmpty();

View File

@@ -87,40 +87,50 @@ QJsonObject Iocage::cleanAll() {
//================TEMPLATE MANAGEMENT===================
QJsonObject Iocage::listTemplates(){
QJsonObject retObject;
QStringList local = General::RunCommand("iocage list -tlh ").split("\n");
for(int i=0; i<local.length(); i++){
QStringList info = local[i].split("\t"); //the -h flag is for scripting use (tabs as separators)
//NOTE ABOUT FORMAT:
// [JID, UUID, BOOT, STATE, TAG, TYPE, IP4, RELEASE, TEMPLATE]
if(info.length()!=9){ continue; } //invalid line
QJsonObject obj;
obj.insert("jid",info[0]);
obj.insert("uuid",info[1]);
obj.insert("boot",info[2]);
obj.insert("state",info[3]);
obj.insert("tag",info[4]);
obj.insert("type",info[5]);
obj.insert("ip4",info[6]);
obj.insert("release",info[7]);
obj.insert("template",info[8]);
retObject.insert(info[8], obj);
bool ok = false;
QStringList local = General::RunCommand(ok, "iocage list -tlh ").split("\n");
if(ok){
QJsonObject temp;
for(int i=0; i<local.length(); i++){
QStringList info = local[i].split("\t"); //the -h flag is for scripting use (tabs as separators)
//NOTE ABOUT FORMAT:
// [JID, UUID, BOOT, STATE, TAG, TYPE, RELEASE, IP4, IP6, TEMPLATE]
if(info.length()!=10){ continue; } //invalid line
QJsonObject obj;
obj.insert("jid",info[0]);
obj.insert("uuid",info[1]);
obj.insert("boot",info[2]);
obj.insert("state",info[3]);
obj.insert("tag",info[4]);
obj.insert("type",info[5]);
obj.insert("release",info[6]);
obj.insert("ip4",info[7]);
obj.insert("ip6",info[8]);
obj.insert("template",info[9]);
temp.insert(info[9], obj);
}
retObject.insert("templates", temp);
}else{
retObject.insert("error",local.join("\n"));
}
return retObject;
}
QJsonObject Iocage::listReleases(){
QJsonObject retObject;
// Locally-available releases
QStringList local = General::RunCommand("iocage list -rh").split("\n");
retObject.insert("local", QJsonArray::fromStringList(local) );
bool ok = false;
QStringList local = General::RunCommand(ok, "iocage list -rh").split("\n");
if(ok){ retObject.insert("local", QJsonArray::fromStringList(local) ); }
//Remote releases available for download
QStringList remote = General::RunCommand("iocage list -Rh").split("\n");
for(int i=0; i<remote.length(); i++){
if(remote[i].startsWith("[")){ remote[i] = remote[i].section("]",1,-1).simplified(); }
else{ remote.removeAt(i); i--; }
QStringList remote = General::RunCommand(ok, "iocage list -rRh").split("\n");
if(ok){
for(int i=0; i<remote.length(); i++){
if(remote[i].startsWith("[")){ remote[i] = remote[i].section("]",1,-1).simplified(); }
else{ remote.removeAt(i); i--; }
}
retObject.insert("remote", QJsonArray::fromStringList(remote));
}
retObject.insert("remote", QJsonArray::fromStringList(remote));
return retObject;
}