CPVM HTTP API: Snapshots¶
Upload snapshot (multiple requests)¶
Create empty snapshot¶
curl -XPOST --netrc \ -H "Content-Type: application/json" \ -d "@sn_meta.json" \ https://api.acapella.ru/cb/newSnapshot
- Если в параметрах не указать snapshotName или snapshotTag, то они будут сгенерированы и придут в ответе.
- Если в параметрах запроса указать список хешей фрагментов, то сервер будет искать существующий замороженный снапшот
с таким же набором хешей в CB и, если такой будет найден, может вернуть его как результат запроса
(в этом случае в метаданных снапшота будет стоять свойство
frozen
=true
).
Также сервер может найти частичное совпадение по хешам отдельных фрагментов, и в этом случае они автоматически добавляются в новый снапшот.
sn_meta.json
:
{ "name": "my-project", "tag": "1.0", "removeAfterExecute": false, "expirationTimeSec": 3600, "accessLevel": "Invisible", "accessPerUser": { "user123": "Visisble", "vasya1999": "ReadWrite" }, "fileHashes": { "existing/file/fragment.py": { // hash sum of fragment content "sha1": "994b9399061fa0f57b3cf6849407cfbc8f5ea1d0", // ro - Read Only, exe - Executable "permissions": { "ro": false, "exe": true } }, "another/file.txt": { "sha1": "d11ad1d3fe8152b570915df3cb8406e3629bf00e", "permissions": { "ro": true, "exe": false } } } }
- removeAfterExecute удаление снапшота сразу после первого исполнения (нельзя запустить более одного раза)
- expirationTimeSec автоматическое удаление снапшота по истечению указанного периода времени с момента запроса
- fileHashes словарь
<file_path> -> <SHA1(file_content)>
. Существующие в CB файлы с данными хешами будут автоматически добавлены в снапшот, вплость до того, что CB может возвратить существующий снапшот как результат (при полном совпадении).
Response:
{ "snapshot": {}, "notFound": [ "d11ad1d3fe8152b570915df3cb8406e3629bf00e" ] }
- snapshot: same as metadata in request, but also with all names and tags generated
- notFound: file hashes, that are not found in fragment repository
Upload files¶
Upload file fragment.py
to snapshot my-project/1.0
at path existing/file/fragment.py
:
curl -XPOST --netrc -d "@fragment.py" \ https://api.acapella.ru/cb/snapshots/my-project/1.0/files/existing/file/fragment.py
Freeze snapshot¶
После заморозки снапшот становится доступным для исполнения и недоступным для изменения.
curl -XPOST --netrc https://api.acapella.ru/cb/snapshots/my-project/1.0/freeze
Upload snapshot (1 request)¶
Если снапшот имеет небольшой суммарный размер, то имеет смысл залить и заморозить его с помощью одного запроса:
curl -XPOST --netrc \ -H "Content-Type: application/json" \ -d "@snanpshot.json" \ https://api.acapella.ru/cb/snapshot
snanpshot.json
:
{ "meta": { "name": "my-project", "tag": "1.0", "removeAfterExecute": false, "expirationTimeSec": 3600, "accessLevel": "Invisible", "accessPerUser": { "user123": "Visisble", "vasya1999": "ReadWrite" }, "fileHashes": { "another/file.txt": { "sha1": "d11ad1d3fe8152b570915df3cb8406e3629bf00e", "permissions": { "ro": true, "exe": false } } } }, "files": { "existing/file/fragment.py": { // base64 "content": "aW1wb3J0IGFwXG5wcmludChhcC51c2VyLmlkKVxucHJpbnQoYXAudHJhbnNhY3Rpb24uaWQpCg==", "permissions": { "ro": true, "exe": false } } } }
Response is the same as in cb/newSnapshot
Remove snapshot¶
curl -XDELETE --netrc https://api.acapella.ru/cb/snapshots/my-project/1.0