NEW API CALL: sysadm/iocage "action"="fetchreleases"

This will fetch any remotely-available FreeBSD releases and update/cache them on the local system for use when spinning up jails.
REQUIRED ARGUMENTS:
"action" = "fetchreleases"
"releases": String *or* Array of strings containing the version/release to fetch.

Changelog: yes
-----------------

REST Request (example):
-------------------------------
PUT /sysadm/iocage
{
   "action" : "fetchreleases",
   "releases" : [
      "10.3-RELEASE",
      "10.2-RELEASE"
   ]
}

WebSocket Request:
-------------------------------
{
   "args" : {
      "releases" : [
         "10.3-RELEASE",
         "10.2-RELEASE"
      ],
      "action" : "fetchreleases"
   },
   "name" : "iocage",
   "namespace" : "sysadm",
   "id" : "fooid"
}

Response:
-------------------------------
{
  "args": {
    "fetchreleases": {
      "started_dispatcher_id": [
        "sysadm_iocage_fetch_release_10.3-RELEASE",
        "sysadm_iocage_fetch_release_10.2-RELEASE"
      ]
    }
  },
  "id": "fooid",
  "name": "response",
  "namespace": "sysadm"
}
This commit is contained in:
Ken Moore
2017-06-02 08:24:45 -04:00
parent a3c44a5f5b
commit 737e90c42a
2 changed files with 2 additions and 1 deletions

View File

@@ -706,6 +706,7 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmIocageRequest(const QJsonVal
else if(act=="listjails"){ retObj = sysadm::Iocage::listJails(); }
else if(act=="listtemplates"){ retObj = sysadm::Iocage::listTemplates(); }
else if(act=="listreleases"){ retObj = sysadm::Iocage::listReleases(); }
else if(act=="fetchreleases"){ retObj = sysadm::Iocage::fetchReleases(in_args.toObject()); }
else if(act=="listplugins"){ retObj = sysadm::Iocage::listPlugins(); }
ok = !retObj.keys().isEmpty();
if(ok){ out->insert(act,retObj); }

View File

@@ -192,7 +192,7 @@ QJsonObject Iocage::fetchReleases(QJsonObject inobj){
QString jobprefix = "sysadm_iocage_fetch_release_";
QJsonArray started;
for(int i=0; i<releases.length(); i++){
releases[i] = releases[i].section(" ",0,0, QString::SectionSkipEmpty); //all valid releases are a single word - do not allow injection of other commands
releases[i] = releases[i].section(" ",0,0, QString::SectionSkipEmpty); //all valid releases are a single word - do not allow injection of other commands (or "(EOL)" tags on end)
if(cids.contains(jobprefix+releases[i]) ){ continue; } //this fetch job is already running - skip it for now
DISPATCHER->queueProcess(jobprefix+releases[i], "iocage fetch --verify -r "+releases[i]);
started << jobprefix+releases[i];