2026-03-31 21:42:50 +02:00
#!/bin/bash
HOST = " ${ 1 } "
PORT = " ${ 2 } "
TOKENID = " ${ 3 } @ ${ 4 } ! ${ 5 } "
TOKENSECRET = " ${ 6 } "
datastores = $( wget --header= " Authorization: PBSAPIToken= ${ TOKENID } : ${ TOKENSECRET } " --content-on-error -q -O - " https:// ${ HOST } : ${ PORT } /api2/json/admin/datastore " )
IFS = '
'
for datastore in $( echo " ${ datastores } " | jq --raw-output '.data[].store' ) ; do
namespaces = $( wget --header= " Authorization: PBSAPIToken= ${ TOKENID } : ${ TOKENSECRET } " --content-on-error -q -O - " https:// ${ HOST } : ${ PORT } /api2/json/admin/datastore/ ${ datastore } /namespace " )
for namespace in $( echo " ${ namespaces } " | jq --raw-output '.data[].ns' ) ; do
2026-04-02 16:24:12 +02:00
# group backups by backup-type and backup-id, only get the backup of each group (thus the map) with max backup-time and add datastore and namespace to each backup
2026-04-02 18:53:00 +02:00
temp = $( wget --header= " Authorization: PBSAPIToken= ${ TOKENID } : ${ TOKENSECRET } " --content-on-error -q -O - " https:// ${ HOST } : ${ PORT } /api2/json/admin/datastore/ ${ datastore } /snapshots?ns= ${ namespace } " | jq " .data |group_by([.\"backup-type\", .\"backup-id\"]) |map(max_by(.\"backup-time\")) |map(.datastore |= \" ${ datastore } \") |map(.namespace |= \" ${ namespace } \") " )
2026-04-02 16:24:12 +02:00
# remove array symbols ([ and ])
temp = " ${ temp : 1 } "
temp = " ${ temp : :- 1 } "
if [ [ " ${# temp } " -ne 0 ] ] ; then
backups = " ${ backups } ${ temp } , "
fi
2026-03-31 21:42:50 +02:00
done
done
2026-04-02 16:24:12 +02:00
# remove last set comma
ret = " [ ${ backups : :- 1 } ] "
2026-03-31 21:42:50 +02:00
echo $ret