feat(xo-server/rest-api): expose metadata & mirror backup jobs

This commit is contained in:
Julien Fontanet
2023-12-08 15:17:51 +01:00
parent 037e1c1dfa
commit 2b973275c0
2 changed files with 42 additions and 10 deletions

View File

@@ -9,6 +9,9 @@
- [Forget SR] Changed the modal message and added a confirmation text to be sure the action is understood by the user [#7148](https://github.com/vatesfr/xen-orchestra/issues/7148) (PR [#7155](https://github.com/vatesfr/xen-orchestra/pull/7155))
- [REST API] `/backups` has been renamed to `/backup` (redirections are in place for compatibility)
- [REST API] _VM backup & Replication_ jobs have been moved from `/backup/jobs/:id` to `/backup/jobs/vm/:id` (redirections are in place for compatibility)
- [REST API] _XO config & Pool metadata Backup_ jobs are available at `/backup/jobs/metadata`
- [REST API] _Mirror Backup_ jobs are available at `/backup/jobs/metadata`
### Bug fixes

View File

@@ -285,21 +285,19 @@ export default class RestApi {
res.redirect(308, req.baseUrl + '/backup' + req.params[0])
})
const backupTypes = {
__proto__: null,
metadata: 'metadataBackup',
mirror: 'mirrorBackup',
vm: 'backup',
}
api
.get(
'/backup',
wrap((req, res) => sendObjects([{ id: 'jobs' }, { id: 'logs' }], req, res))
)
.get(
'/backup/jobs',
wrap(async (req, res) => sendObjects(await app.getAllJobs('backup'), req, res))
)
.get(
'/backup/jobs/:id',
wrap(async (req, res) => {
res.json(await app.getJob(req.params.id, 'backup'))
})
)
.get(
'/backup/logs',
wrap(async (req, res) => {
@@ -311,6 +309,37 @@ export default class RestApi {
await sendObjects(logs, req, res)
})
)
.get(
'/backup/jobs',
wrap((req, res) =>
sendObjects(
Object.keys(backupTypes).map(id => ({ id })),
req,
res
)
)
)
for (const [collection, type] of Object.entries(backupTypes)) {
api
.get(
'/backup/jobs/' + collection,
wrap(async (req, res) => sendObjects(await app.getAllJobs(type), req, res))
)
.get(
`/backup/jobs/${collection}/:id`,
wrap(async (req, res) => {
res.json(await app.getJob(req.params.id, type))
})
)
}
// For compatibility, redirect /backup/jobs/:id to /backup/jobs/vm/:id
api.get('/backup/jobs/:id', (req, res) => {
res.redirect(308, req.baseUrl + '/backup/jobs/vm/' + req.params.id)
})
api
.get(
'/restore',
wrap((req, res) => sendObjects([{ id: 'logs' }], req, res))