From: Fabian Ebner <f.ebner@proxmox.com>
To: pbs-devel@lists.proxmox.com, Dominik Csapak <d.csapak@proxmox.com>
Subject: Re: [pbs-devel] [PATCH proxmox-backup 08/12] api2/admin/datastore: add get/set_protection
Date: Fri, 10 Sep 2021 14:43:36 +0200 [thread overview]
Message-ID: <1508b04a-597b-9744-5e52-16a5c7c6af41@proxmox.com> (raw)
In-Reply-To: <20210906105755.2651203-9-d.csapak@proxmox.com>
Am 06.09.21 um 12:57 schrieb Dominik Csapak:
> for gettin/setting the protected flag for snapshots (akin to notes)
>
For notes, there is a 'show' command, but not for protected. Is there an
other way to query the current protection of a single snapshot via
proxmox-backup-client?
I'm working on bug #3307, which is the same feature for PVE and for
integration with the PBS plugin it would be nicer to query only the
single snapshot. Or should I list the whole group and extract the info
from there instead?
> Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
> ---
> src/api2/admin/datastore.rs | 101 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 101 insertions(+)
>
> diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs
> index f88fd105..572c65a9 100644
> --- a/src/api2/admin/datastore.rs
> +++ b/src/api2/admin/datastore.rs
> @@ -1751,6 +1751,101 @@ pub fn set_notes(
> Ok(())
> }
>
> +#[api(
> + input: {
> + properties: {
> + store: {
> + schema: DATASTORE_SCHEMA,
> + },
> + "backup-type": {
> + schema: BACKUP_TYPE_SCHEMA,
> + },
> + "backup-id": {
> + schema: BACKUP_ID_SCHEMA,
> + },
> + "backup-time": {
> + schema: BACKUP_TIME_SCHEMA,
> + },
> + },
> + },
> + access: {
> + permission: &Permission::Privilege(&["datastore", "{store}"], PRIV_DATASTORE_AUDIT | PRIV_DATASTORE_BACKUP, true),
> + },
> +)]
> +/// Query protection for a specific backup
> +pub fn get_protection(
> + store: String,
> + backup_type: String,
> + backup_id: String,
> + backup_time: i64,
> + rpcenv: &mut dyn RpcEnvironment,
> +) -> Result<bool, Error> {
> + let datastore = DataStore::lookup_datastore(&store)?;
> +
> + let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
> + let backup_dir = BackupDir::new(backup_type, backup_id, backup_time)?;
> +
> + check_priv_or_backup_owner(&datastore, backup_dir.group(), &auth_id, PRIV_DATASTORE_AUDIT)?;
> +
> + let protected_path = backup_dir.protected_file(datastore.base_path());
> +
> + Ok(protected_path.exists())
> +}
> +
> +#[api(
> + input: {
> + properties: {
> + store: {
> + schema: DATASTORE_SCHEMA,
> + },
> + "backup-type": {
> + schema: BACKUP_TYPE_SCHEMA,
> + },
> + "backup-id": {
> + schema: BACKUP_ID_SCHEMA,
> + },
> + "backup-time": {
> + schema: BACKUP_TIME_SCHEMA,
> + },
> + protected: {
> + description: "Enable/disable protection.",
> + },
> + },
> + },
> + access: {
> + permission: &Permission::Privilege(&["datastore", "{store}"],
> + PRIV_DATASTORE_MODIFY | PRIV_DATASTORE_BACKUP,
> + true),
> + },
> +)]
> +/// En- or disable protection for a specific backup
> +pub fn set_protection(
> + store: String,
> + backup_type: String,
> + backup_id: String,
> + backup_time: i64,
> + protected: bool,
> + rpcenv: &mut dyn RpcEnvironment,
> +) -> Result<(), Error> {
> + let datastore = DataStore::lookup_datastore(&store)?;
> +
> + let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
> + let backup_dir = BackupDir::new(backup_type, backup_id, backup_time)?;
> +
> + check_priv_or_backup_owner(&datastore, backup_dir.group(), &auth_id, PRIV_DATASTORE_MODIFY)?;
> +
> + let protected_path = backup_dir.protected_file(datastore.base_path());
> + if protected {
> + std::fs::File::create(protected_path)
> + .map_err(|err| format_err!("could not create protection file: {}", err))?;
> + } else {
> + std::fs::remove_file(protected_path)
> + .map_err(|err| format_err!("could not remove protection file: {}", err))?;
> + }
> +
> + Ok(())
> +}
> +
> #[api(
> input: {
> properties: {
> @@ -1899,6 +1994,12 @@ const DATASTORE_INFO_SUBDIRS: SubdirMap = &[
> .get(&API_METHOD_GET_NOTES)
> .put(&API_METHOD_SET_NOTES)
> ),
> + (
> + "protected",
> + &Router::new()
> + .get(&API_METHOD_GET_PROTECTION)
> + .put(&API_METHOD_SET_PROTECTION)
> + ),
> (
> "prune",
> &Router::new()
>
next prev parent reply other threads:[~2021-09-10 12:52 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-06 10:57 [pbs-devel] [PATCH proxmox-backup 00/12] add 'protected' setting for snapshots Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 01/12] pbs-datastore: add protection info to BackupInfo Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 02/12] pbs-datastore: skip protected backups in pruning Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 03/12] add protected info of snapshots to api and task logs Dominik Csapak
[not found] ` <<20210906105755.2651203-4-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 04/12] tests/prune: add tests for protecteded backups Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 05/12] backup/datastore: prevent protected snapshots to be removed Dominik Csapak
[not found] ` <<20210906105755.2651203-6-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 06/12] pull_store/group: dont try remove locally protected snapshots Dominik Csapak
2021-09-16 10:08 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 07/12] api2: datastore/delete_group: throw error for partially removed group Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 08/12] api2/admin/datastore: add get/set_protection Dominik Csapak
2021-09-10 12:43 ` Fabian Ebner [this message]
2021-09-13 8:34 ` Dominik Csapak
2021-09-16 10:16 ` Fabian Ebner
2021-09-17 12:02 ` Fabian Ebner
[not found] ` <<<20210906105755.2651203-9-d.csapak@proxmox.com>
2021-09-16 10:04 ` Fabian Grünbichler
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 09/12] proxmox-backup-client: add 'protected update command' Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 10/12] ui: PruneInputPanel: add keepReason 'protected' for protected backups Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 11/12] ui: add protected icon to snapshots Dominik Csapak
2021-09-06 10:57 ` [pbs-devel] [PATCH proxmox-backup 12/12] fix #3602: ui: datastore/Content: add action to set protection status Dominik Csapak
[not found] ` <<20210906105755.2651203-1-d.csapak@proxmox.com>
2021-09-16 10:08 ` [pbs-devel] [PATCH proxmox-backup 00/12] add 'protected' setting for snapshots Fabian Grünbichler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1508b04a-597b-9744-5e52-16a5c7c6af41@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=d.csapak@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.