Skip to content

Models

The PBS plugin persists five models:

  • PBS servers — Proxmox Backup Server endpoints discovered through proxbox-api.
  • PBS datastores — datastore inventory per PBS server.
  • PBS snapshots — snapshot inventory per datastore.
  • PBS jobs — backup / verify / sync / prune / GC job records.
  • PBS plugin settings — foreign key to the shared netbox-proxbox FastAPIEndpoint used for proxbox-api requests.

All five appear as standard NetBox NetBoxModel objects with list, detail, edit, and bulk views. The plugin REST API exposes them under /api/plugins/pbs/.

Model exports for netbox-pbs.

__all__ = ('PBSDatastore', 'PBSJob', 'PBSPluginSettings', 'PBSServer', 'PBSSnapshot') module-attribute

PBSDatastore

Bases: NetBoxModel

PBS datastore capacity and garbage-collection state.

avail_bytes = models.BigIntegerField(null=True, blank=True, verbose_name=(_('Available bytes'))) class-attribute instance-attribute

comment = models.CharField(max_length=1024, blank=True, verbose_name=(_('Comment'))) class-attribute instance-attribute

gc_status = models.CharField(max_length=32, choices=PBSGCStatusChoices, blank=True, verbose_name=(_('GC status'))) class-attribute instance-attribute

last_seen_at = models.DateTimeField(null=True, blank=True, verbose_name=(_('Last seen'))) class-attribute instance-attribute

name = models.CharField(max_length=255, verbose_name=(_('Name'))) class-attribute instance-attribute

path = models.CharField(max_length=1024, verbose_name=(_('Path'))) class-attribute instance-attribute

server = models.ForeignKey(to='netbox_pbs.PBSServer', on_delete=(models.CASCADE), related_name='datastores', verbose_name=(_('PBS server'))) class-attribute instance-attribute

total_bytes = models.BigIntegerField(null=True, blank=True, verbose_name=(_('Total bytes'))) class-attribute instance-attribute

used_bytes = models.BigIntegerField(null=True, blank=True, verbose_name=(_('Used bytes'))) class-attribute instance-attribute

Meta

constraints = [models.UniqueConstraint(fields=('server', 'name'), name='netbox_pbs_datastore_identity')] class-attribute instance-attribute
ordering = ('server', 'name') class-attribute instance-attribute
verbose_name = _('PBS datastore') class-attribute instance-attribute
verbose_name_plural = _('PBS datastores') class-attribute instance-attribute

__str__()

get_absolute_url()

PBSJob

Bases: NetBoxModel

PBS scheduled job state.

comment = models.CharField(max_length=1024, blank=True, verbose_name=(_('Comment'))) class-attribute instance-attribute

disable = models.BooleanField(default=False, verbose_name=(_('Disabled'))) class-attribute instance-attribute

job_id = models.CharField(max_length=255, verbose_name=(_('Job ID'))) class-attribute instance-attribute

job_type = models.CharField(max_length=16, choices=PBSJobTypeChoices, verbose_name=(_('Job type'))) class-attribute instance-attribute

last_run_endtime = models.DateTimeField(null=True, blank=True, verbose_name=(_('Last run end time'))) class-attribute instance-attribute

last_run_state = models.CharField(max_length=32, choices=PBSJobRunStateChoices, blank=True, verbose_name=(_('Last run state'))) class-attribute instance-attribute

last_seen_at = models.DateTimeField(null=True, blank=True, verbose_name=(_('Last seen'))) class-attribute instance-attribute

next_run = models.DateTimeField(null=True, blank=True, verbose_name=(_('Next run'))) class-attribute instance-attribute

schedule = models.CharField(max_length=255, blank=True, verbose_name=(_('Schedule'))) class-attribute instance-attribute

server = models.ForeignKey(to='netbox_pbs.PBSServer', on_delete=(models.CASCADE), related_name='jobs', verbose_name=(_('PBS server'))) class-attribute instance-attribute

store = models.CharField(max_length=255, blank=True, verbose_name=(_('Store'))) class-attribute instance-attribute

Meta

constraints = [models.UniqueConstraint(fields=('server', 'job_type', 'job_id'), name='netbox_pbs_job_identity')] class-attribute instance-attribute
ordering = ('server', 'job_type', 'job_id') class-attribute instance-attribute
verbose_name = _('PBS job') class-attribute instance-attribute
verbose_name_plural = _('PBS jobs') class-attribute instance-attribute

__str__()

get_absolute_url()

PBSPluginSettings

Bases: NetBoxModel

Singleton-style settings row for netbox-pbs sync behavior.

branch_name_prefix = models.CharField(max_length=64, default='pbs-sync', verbose_name=(_('Branch name prefix'))) class-attribute instance-attribute

branch_on_conflict = models.CharField(max_length=16, choices=PBS_BRANCH_ON_CONFLICT_CHOICES, default='fail', verbose_name=(_('Branch merge conflict policy'))) class-attribute instance-attribute

branching_enabled = models.BooleanField(default=False, verbose_name=(_('Branching-enabled sync (PBS -> NetBox)')), help_text=(_('When enabled, PBS sync jobs create a netbox-branching branch, run sync against that branch, and merge the branch back into main on success.'))) class-attribute instance-attribute

fastapi_endpoint = models.ForeignKey(to='netbox_proxbox.FastAPIEndpoint', on_delete=(models.PROTECT), related_name='pbs_plugin_settings', null=True, verbose_name=(_('ProxBox FastAPI endpoint')), help_text=(_('netbox-proxbox FastAPIEndpoint that defines the shared proxbox-api backend.'))) class-attribute instance-attribute

singleton_key = models.CharField(max_length=32, unique=True, default='default', editable=False) class-attribute instance-attribute

Meta

ordering = ('pk',) class-attribute instance-attribute
verbose_name = _('PBS plugin settings') class-attribute instance-attribute
verbose_name_plural = _('PBS plugin settings') class-attribute instance-attribute

__str__()

get_solo() classmethod

save(*args, **kwargs)

PBSServer

Bases: NetBoxModel

Proxmox Backup Server endpoint known to proxbox-api.

fingerprint = models.CharField(max_length=255, blank=True, verbose_name=(_('Fingerprint'))) class-attribute instance-attribute

host = models.CharField(max_length=255, verbose_name=(_('Host'))) class-attribute instance-attribute

last_seen_at = models.DateTimeField(null=True, blank=True, verbose_name=(_('Last seen'))) class-attribute instance-attribute

name = models.CharField(max_length=255, unique=True, verbose_name=(_('Name'))) class-attribute instance-attribute

port = models.IntegerField(default=8007, verbose_name=(_('Port'))) class-attribute instance-attribute

status = models.CharField(max_length=32, choices=PBSServerStatusChoices, blank=True, verbose_name=(_('Status'))) class-attribute instance-attribute

token_id = models.CharField(max_length=255, verbose_name=(_('Token ID'))) class-attribute instance-attribute

verify_ssl = models.BooleanField(default=True, verbose_name=(_('Verify SSL'))) class-attribute instance-attribute

version = models.CharField(max_length=128, blank=True, verbose_name=(_('Version'))) class-attribute instance-attribute

Meta

ordering = ('name',) class-attribute instance-attribute
verbose_name = _('PBS server') class-attribute instance-attribute
verbose_name_plural = _('PBS servers') class-attribute instance-attribute

__str__()

get_absolute_url()

PBSSnapshot

Bases: NetBoxModel

PBS backup snapshot reflected from a datastore.

backup_id = models.CharField(max_length=255, verbose_name=(_('Backup ID'))) class-attribute instance-attribute

backup_time = models.DateTimeField(null=True, blank=True, verbose_name=(_('Backup time'))) class-attribute instance-attribute

backup_type = models.CharField(max_length=16, choices=PBSBackupTypeChoices, verbose_name=(_('Backup type'))) class-attribute instance-attribute

comment = models.CharField(max_length=1024, blank=True, verbose_name=(_('Comment'))) class-attribute instance-attribute

datastore_name = models.CharField(max_length=255, verbose_name=(_('Datastore'))) class-attribute instance-attribute

last_seen_at = models.DateTimeField(null=True, blank=True, verbose_name=(_('Last seen'))) class-attribute instance-attribute

owner = models.CharField(max_length=255, blank=True, verbose_name=(_('Owner'))) class-attribute instance-attribute

protected = models.BooleanField(default=False, verbose_name=(_('Protected'))) class-attribute instance-attribute

server = models.ForeignKey(to='netbox_pbs.PBSServer', on_delete=(models.CASCADE), related_name='snapshots', verbose_name=(_('PBS server'))) class-attribute instance-attribute

size_bytes = models.BigIntegerField(null=True, blank=True, verbose_name=(_('Size bytes'))) class-attribute instance-attribute

verification_state = models.CharField(max_length=32, blank=True, verbose_name=(_('Verification state'))) class-attribute instance-attribute

Meta

constraints = [models.UniqueConstraint(fields=('server', 'datastore_name', 'backup_type', 'backup_id', 'backup_time'), name='netbox_pbs_snapshot_identity')] class-attribute instance-attribute
ordering = ('server', 'datastore_name', 'backup_type', 'backup_id', '-backup_time') class-attribute instance-attribute
verbose_name = _('PBS snapshot') class-attribute instance-attribute
verbose_name_plural = _('PBS snapshots') class-attribute instance-attribute

__str__()

get_absolute_url()