|
Packit Service |
0246ed |
import cockpit from "cockpit";
|
|
Packit Service |
0246ed |
import providerSettings from "../data/providers";
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
const cockpitHttp = cockpit.http("/run/weldr/api.socket", { superuser: "try" });
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/*
|
|
Packit Service |
0246ed |
* Send a request to the composer API.
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* `options` can contain `path`, `params`, `headers`, `body`, and
|
|
Packit Service |
0246ed |
* `replyFormat`. The ones that have the same name as cockpit.http options
|
|
Packit Service |
0246ed |
* correspond to them and are passed along.
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* `replyFormat` can be set to "json" (the default) or "raw".
|
|
Packit Service |
0246ed |
*
|
|
Packit Service |
0246ed |
* All responses are expected to be either empty or valid JSON.
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
function request(options) {
|
|
Packit Service |
0246ed |
const replyFormat = options.replyFormat || "json";
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/*
|
|
Packit Service |
0246ed |
* Wrap this in an additional Promise. The promise returned by
|
|
Packit Service |
0246ed |
* cockpit.http.request() doesn't propagate exceptions thrown in a .catch
|
|
Packit Service |
0246ed |
* handler. Thus, we need to reject() manually.
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
return new Promise((resolve, reject) => {
|
|
Packit Service |
0246ed |
cockpitHttp
|
|
Packit Service |
0246ed |
.request({
|
|
Packit Service |
0246ed |
method: options.method,
|
|
Packit Service |
0246ed |
path: options.path,
|
|
Packit Service |
0246ed |
params: options.params,
|
|
Packit Service |
0246ed |
headers: options.headers,
|
|
Packit Service |
0246ed |
body: options.body,
|
|
Packit Service |
0246ed |
})
|
|
Packit Service |
0246ed |
.then((data) => {
|
|
Packit Service |
0246ed |
if (replyFormat === "json") resolve(JSON.parse(data));
|
|
Packit Service |
0246ed |
else if (replyFormat === "raw") resolve(data);
|
|
Packit Service |
0246ed |
else throw new Error(`invalid replyFormat: '${replyFormat}'`);
|
|
Packit Service |
0246ed |
})
|
|
Packit Service |
0246ed |
.catch((error) =>
|
|
Packit Service |
0246ed |
reject({
|
|
Packit Service |
0246ed |
problem: error.problem,
|
|
Packit Service |
0246ed |
message: error.message,
|
|
Packit Service |
0246ed |
options,
|
|
Packit Service |
0246ed |
})
|
|
Packit Service |
0246ed |
);
|
|
Packit Service |
0246ed |
});
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/*
|
|
Packit Service |
0246ed |
* Send a GET request to the composer API.
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
function get(path, options) {
|
|
Packit Service |
0246ed |
return request({
|
|
Packit Service |
0246ed |
body: "",
|
|
Packit Service |
0246ed |
...options,
|
|
Packit Service |
0246ed |
path,
|
|
Packit Service |
0246ed |
});
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/*
|
|
Packit Service |
0246ed |
* Send a POST request to the composer API. `object` will be turned into a JSON
|
|
Packit Service |
0246ed |
* payload.
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
function post(path, object, options) {
|
|
Packit Service |
0246ed |
return request({
|
|
Packit Service |
0246ed |
...options,
|
|
Packit Service |
0246ed |
method: "POST",
|
|
Packit Service |
0246ed |
path,
|
|
Packit Service |
0246ed |
headers: { "Content-Type": "application/json" },
|
|
Packit Service |
0246ed |
body: JSON.stringify(object),
|
|
Packit Service |
0246ed |
});
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/*
|
|
Packit Service |
0246ed |
* Send a DELETE request to the composer API.
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
function _delete(path, options) {
|
|
Packit Service |
0246ed |
return request({
|
|
Packit Service |
0246ed |
...options,
|
|
Packit Service |
0246ed |
method: "DELETE",
|
|
Packit Service |
0246ed |
path,
|
|
Packit Service |
0246ed |
body: "",
|
|
Packit Service |
0246ed |
});
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/*
|
|
Packit Service |
0246ed |
* Wrappers for composer API calls
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function newBlueprint(blueprint) {
|
|
Packit Service |
0246ed |
return post("/api/v0/blueprints/new", blueprint);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function depsolveBlueprint(blueprintName) {
|
|
Packit Service |
0246ed |
return get(`/api/v0/blueprints/depsolve/${encodeURIComponent(blueprintName)}`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function listModules(filter, selectedInputPage, pageSize) {
|
|
Packit Service |
0246ed |
const page = selectedInputPage * pageSize;
|
|
Packit Service |
0246ed |
return get(`/api/v0/modules/list/${encodeURIComponent(filter)}`, {
|
|
Packit Service |
0246ed |
params: { limit: pageSize, offset: page },
|
|
Packit Service |
0246ed |
});
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
/*
|
|
Packit Service |
0246ed |
* Next two functions have a different name from their API route, because the
|
|
Packit Service |
0246ed |
* routes are confusing.
|
|
Packit Service |
0246ed |
*/
|
|
Packit Service |
0246ed |
export function getComponentInfo(componentNames) {
|
|
Packit Service |
0246ed |
return get(`/api/v0/projects/info/${encodeURIComponent(componentNames)}`).then((response) => response.projects);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getComponentDependencies(componentNames) {
|
|
Packit Service |
0246ed |
return get(`/api/v0/modules/info/${encodeURIComponent(componentNames)}`).then((response) => response.modules);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function listBlueprints() {
|
|
Packit Service |
0246ed |
return get("/api/v0/blueprints/list").then((response) => response.blueprints);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getBlueprintInfo(blueprintName) {
|
|
Packit Service |
0246ed |
return get(`/api/v0/blueprints/info/${encodeURIComponent(blueprintName)}`).then((blueprintdata) => {
|
|
Packit Service |
0246ed |
if (blueprintdata.blueprints.length > 0) {
|
|
Packit Service |
0246ed |
const blueprint = blueprintdata.blueprints[0];
|
|
Packit Service |
0246ed |
blueprint.changed = blueprintdata.changes[0].changed;
|
|
Packit Service |
0246ed |
blueprint.id = blueprintName;
|
|
Packit Service |
0246ed |
return blueprint;
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
});
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getComposeTypes() {
|
|
Packit Service |
0246ed |
const imageTypeLabels = {
|
|
Packit Service |
0246ed |
ami: "Amazon Machine Image Disk (.ami)",
|
|
Packit Service |
0246ed |
"ext4-filesystem": "Ext4 File System Image (.img)",
|
|
Packit Service |
0246ed |
"fedora-iot-commit": "Fedora IoT Commit (.tar)",
|
|
Packit Service |
0246ed |
"live-iso": "Live Bootable ISO (.iso)",
|
|
Packit Service |
0246ed |
"partitioned-disk": "Raw Partitioned Disk Image (.img)",
|
|
Packit Service |
0246ed |
qcow2: "QEMU QCOW2 Image (.qcow2)",
|
|
Packit Service |
0246ed |
openstack: "OpenStack (.qcow2)",
|
|
Packit Service |
0246ed |
"rhel-edge-commit": "RHEL for Edge Commit (.tar)",
|
|
Packit Service |
0246ed |
tar: "TAR Archive (.tar)",
|
|
Packit Service |
0246ed |
vhd: "Azure Disk Image (.vhd)",
|
|
Packit Service |
0246ed |
vmdk: "VMware Virtual Machine Disk (.vmdk)",
|
|
Packit Service |
0246ed |
alibaba: "Alibaba Machine Image (.qcow2)",
|
|
Packit Service |
0246ed |
google: "Google Compute Engine Image (.tar.gz)",
|
|
Packit Service |
0246ed |
"hyper-v": "Hyper-V Virtual Machine Disk (.vhdx)",
|
|
Packit Service |
0246ed |
};
|
|
Packit Service |
0246ed |
const imageTypes = get("/api/v0/compose/types").then((data) =>
|
|
Packit Service |
0246ed |
data.types.map((type) => {
|
|
Packit Service |
0246ed |
return { ...type, label: imageTypeLabels[type.name] || type.name };
|
|
Packit Service |
0246ed |
})
|
|
Packit Service |
0246ed |
);
|
|
Packit Service |
0246ed |
return imageTypes;
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function deleteBlueprint(blueprint) {
|
|
Packit Service |
0246ed |
return _delete(`/api/v0/blueprints/delete/${encodeURIComponent(blueprint)}`).then(() => blueprint);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function deleteWorkspace(blueprintId) {
|
|
Packit Service |
0246ed |
return _delete(`/api/v0/blueprints/workspace/${encodeURIComponent(blueprintId)}`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function commitToWorkspace(blueprint) {
|
|
Packit Service |
0246ed |
return post("/api/v0/blueprints/workspace", blueprint);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function diffBlueprintToWorkspace(blueprintId) {
|
|
Packit Service |
0246ed |
return get(`/api/v0/blueprints/diff/${encodeURIComponent(blueprintId)}/NEWEST/WORKSPACE`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getSourceInfo(sourceName) {
|
|
Packit Service |
0246ed |
return get(`/api/v0/projects/source/info/${encodeURIComponent(sourceName)}`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function newSource(source) {
|
|
Packit Service |
0246ed |
return post("/api/v0/projects/source/new", source);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function deleteSource(sourceName) {
|
|
Packit Service |
0246ed |
return _delete(`/api/v0/projects/source/delete/${encodeURIComponent(sourceName)}`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function startCompose(blueprintName, composeType, imageSize, ostree, uploadSettings) {
|
|
Packit Service |
0246ed |
return post("/api/v1/compose", {
|
|
Packit Service |
0246ed |
blueprint_name: blueprintName,
|
|
Packit Service |
0246ed |
compose_type: composeType,
|
|
Packit Service |
0246ed |
size: imageSize,
|
|
Packit Service |
0246ed |
ostree,
|
|
Packit Service |
0246ed |
upload: uploadSettings,
|
|
Packit Service |
0246ed |
branch: "master",
|
|
Packit Service |
0246ed |
});
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function cancelCompose(compose) {
|
|
Packit Service |
0246ed |
return _delete(`/api/v1/compose/cancel/${encodeURIComponent(compose)}`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function deleteCompose(compose) {
|
|
Packit Service |
0246ed |
return _delete(`/api/v1/compose/delete/${encodeURIComponent(compose)}`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getComposeStatus(uuid) {
|
|
Packit Service |
0246ed |
return get(`/api/v1/compose/status/${encodeURIComponent(uuid)}`);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getQueuedComposes() {
|
|
Packit Service |
0246ed |
return get("/api/v1/compose/queue").then((data) => data.new.concat(data.run));
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getFinishedComposes() {
|
|
Packit Service |
0246ed |
return get("/api/v1/compose/finished").then((data) => data.finished);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getFailedComposes() {
|
|
Packit Service |
0246ed |
return get("/api/v1/compose/failed").then((data) => data.failed);
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getComposeLog(uuid) {
|
|
Packit Service |
0246ed |
return get(`/api/v1/compose/log/${encodeURIComponent(uuid)}`, { replyFormat: "raw" });
|
|
Packit Service |
0246ed |
}
|
|
Packit Service |
0246ed |
|
|
Packit Service |
0246ed |
export function getUploadProviders() {
|
|
Packit Service |
0246ed |
return providerSettings;
|
|
Packit Service |
0246ed |
}
|