Vérification par docker compose config avant écriture, application avec docker compose up -d et retour à la version précédente en cas d'échec. Historique des versions par fichier. Le Caddyfile et le compose gardent un retour à la ligne final. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
1.6 KiB
TypeScript
56 lines
1.6 KiB
TypeScript
import type { HttpContext } from '@adonisjs/core/http'
|
||
import composeService from '#services/compose_service'
|
||
import { actor, audit } from '#services/audit'
|
||
import { updateComposeValidator } from '#validators/compose'
|
||
|
||
const SAVE_ACTION = 'Modification du docker-compose.yml'
|
||
|
||
/**
|
||
* The docker-compose.yml of a container, from the container page.
|
||
*/
|
||
export default class ComposeController {
|
||
async show({ params }: HttpContext) {
|
||
return composeService.show(params.id)
|
||
}
|
||
|
||
async version({ params }: HttpContext) {
|
||
return composeService.version(params.id, Number(params.versionId))
|
||
}
|
||
|
||
async update(ctx: HttpContext) {
|
||
const { content, reason, apply } = await ctx.request.validateUsing(updateComposeValidator)
|
||
const target = await composeService.locate(ctx.params.id)
|
||
const result = await composeService.save(target, content, {
|
||
...actor(ctx),
|
||
reason: reason || 'Modification manuelle',
|
||
apply,
|
||
})
|
||
|
||
if (!result.ok) {
|
||
await audit(ctx, {
|
||
action: SAVE_ACTION,
|
||
target: target.file,
|
||
status: 'error',
|
||
output: result.output,
|
||
})
|
||
return ctx.response.unprocessableEntity({
|
||
message: 'docker compose a refusé le fichier : rien n’a été modifié.',
|
||
output: result.output,
|
||
})
|
||
}
|
||
|
||
/**
|
||
* When applied, the job records the action itself.
|
||
*/
|
||
if (result.changed && result.jobId === null) {
|
||
await audit(ctx, {
|
||
action: SAVE_ACTION,
|
||
target: target.file,
|
||
status: 'success',
|
||
output: result.output || null,
|
||
})
|
||
}
|
||
return result
|
||
}
|
||
}
|