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-proxboxFastAPIEndpointused forproxbox-apirequests.
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
¶
__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
¶
__str__()
¶
get_absolute_url()
¶
PBSSnapshot
¶
Bases: NetBoxModel
PBS backup snapshot reflected from a datastore.