@homeflare/alchemy 0.15.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/linux/directory-lifecycle.d.ts +50 -0
- package/dist/linux/directory-lifecycle.d.ts.map +1 -0
- package/dist/linux/directory.d.ts +19 -0
- package/dist/linux/directory.d.ts.map +1 -0
- package/dist/linux/fake-linux-host.d.ts +35 -0
- package/dist/linux/fake-linux-host.d.ts.map +1 -0
- package/dist/linux/fake-systemd.d.ts +34 -0
- package/dist/linux/fake-systemd.d.ts.map +1 -0
- package/dist/linux/index.d.ts +27 -0
- package/dist/linux/index.d.ts.map +1 -0
- package/dist/linux/index.js +1575 -0
- package/dist/linux/index.js.map +38 -0
- package/dist/linux/providers.d.ts +17 -0
- package/dist/linux/providers.d.ts.map +1 -0
- package/dist/linux/region.d.ts +43 -0
- package/dist/linux/region.d.ts.map +1 -0
- package/dist/linux/remote-file-form.d.ts +47 -0
- package/dist/linux/remote-file-form.d.ts.map +1 -0
- package/dist/linux/remote-file-lifecycle.d.ts +36 -0
- package/dist/linux/remote-file-lifecycle.d.ts.map +1 -0
- package/dist/linux/remote-file-plan.d.ts +33 -0
- package/dist/linux/remote-file-plan.d.ts.map +1 -0
- package/dist/linux/remote-file.d.ts +28 -0
- package/dist/linux/remote-file.d.ts.map +1 -0
- package/dist/linux/ssh-command.d.ts +68 -0
- package/dist/linux/ssh-command.d.ts.map +1 -0
- package/dist/linux/ssh-runner.d.ts +22 -0
- package/dist/linux/ssh-runner.d.ts.map +1 -0
- package/dist/linux/ssh-scripts.d.ts +27 -0
- package/dist/linux/ssh-scripts.d.ts.map +1 -0
- package/dist/linux/systemctl.d.ts +67 -0
- package/dist/linux/systemctl.d.ts.map +1 -0
- package/dist/linux/unit-form.d.ts +78 -0
- package/dist/linux/unit-form.d.ts.map +1 -0
- package/dist/linux/unit-handlers.d.ts +15 -0
- package/dist/linux/unit-handlers.d.ts.map +1 -0
- package/dist/linux/unit-lifecycle.d.ts +40 -0
- package/dist/linux/unit-lifecycle.d.ts.map +1 -0
- package/dist/linux/unit-preflight.d.ts +41 -0
- package/dist/linux/unit-preflight.d.ts.map +1 -0
- package/dist/linux/unit-settle.d.ts +31 -0
- package/dist/linux/unit-settle.d.ts.map +1 -0
- package/dist/linux/unit.d.ts +35 -0
- package/dist/linux/unit.d.ts.map +1 -0
- package/dist/netbox/client.d.ts +52 -0
- package/dist/netbox/client.d.ts.map +1 -0
- package/dist/netbox/constraint-guard.d.ts +26 -0
- package/dist/netbox/constraint-guard.d.ts.map +1 -0
- package/dist/netbox/constraints.d.ts +76 -0
- package/dist/netbox/constraints.d.ts.map +1 -0
- package/dist/netbox/generated/constraints/index.d.ts +19 -0
- package/dist/netbox/generated/constraints/index.d.ts.map +1 -0
- package/dist/netbox/generated/constraints/netbox-ipam.d.ts +21 -0
- package/dist/netbox/generated/constraints/netbox-ipam.d.ts.map +1 -0
- package/dist/netbox/index.d.ts +17 -0
- package/dist/netbox/index.d.ts.map +1 -0
- package/dist/netbox/index.js +331 -0
- package/dist/netbox/index.js.map +18 -0
- package/dist/netbox/prefix-form.d.ts +54 -0
- package/dist/netbox/prefix-form.d.ts.map +1 -0
- package/dist/netbox/prefix.d.ts +80 -0
- package/dist/netbox/prefix.d.ts.map +1 -0
- package/dist/netbox/resource.d.ts +94 -0
- package/dist/netbox/resource.d.ts.map +1 -0
- package/dist/netbox/values.d.ts +24 -0
- package/dist/netbox/values.d.ts.map +1 -0
- package/dist/proxmox/api-token-form.d.ts.map +1 -1
- package/dist/proxmox/apply-endpoints.d.ts +30 -0
- package/dist/proxmox/apply-endpoints.d.ts.map +1 -0
- package/dist/proxmox/ceph-daemon-form.d.ts +29 -1
- package/dist/proxmox/ceph-daemon-form.d.ts.map +1 -1
- package/dist/proxmox/ceph-daemon.d.ts.map +1 -1
- package/dist/proxmox/ceph-flag.d.ts.map +1 -1
- package/dist/proxmox/ceph-fs.d.ts.map +1 -1
- package/dist/proxmox/ceph-osd-write.d.ts +19 -0
- package/dist/proxmox/ceph-osd-write.d.ts.map +1 -1
- package/dist/proxmox/ceph-pool.d.ts.map +1 -1
- package/dist/proxmox/constraints.d.ts +28 -5
- package/dist/proxmox/constraints.d.ts.map +1 -1
- package/dist/proxmox/generated/constraints/index.d.ts +1 -1
- package/dist/proxmox/generated/constraints/index.d.ts.map +1 -1
- package/dist/proxmox/generated/constraints/pbs-config.d.ts +6 -1
- package/dist/proxmox/generated/constraints/pbs-config.d.ts.map +1 -1
- package/dist/proxmox/generated/constraints/pve-access.d.ts +6 -1
- package/dist/proxmox/generated/constraints/pve-access.d.ts.map +1 -1
- package/dist/proxmox/generated/constraints/pve-cluster-backup.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-backup.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-cluster-ceph.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-ceph.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-cluster-firewall.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-firewall.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-cluster-ha.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-ha.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-cluster-metrics.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-metrics.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-cluster-notifications.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-notifications.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-cluster-replication.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-replication.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-cluster-sdn.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-cluster-sdn.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-nodes-ceph.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-nodes-ceph.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-nodes-disks.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-nodes-disks.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-nodes-lxc.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-nodes-lxc.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-nodes-network.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-nodes-network.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-nodes-qemu.d.ts +23 -0
- package/dist/proxmox/generated/constraints/pve-nodes-qemu.d.ts.map +1 -0
- package/dist/proxmox/generated/constraints/pve-pools.d.ts +6 -1
- package/dist/proxmox/generated/constraints/pve-pools.d.ts.map +1 -1
- package/dist/proxmox/generated/constraints/pve-storage.d.ts +6 -1
- package/dist/proxmox/generated/constraints/pve-storage.d.ts.map +1 -1
- package/dist/proxmox/generated/pbs/access-users.d.ts +137 -0
- package/dist/proxmox/generated/pbs/access-users.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/access.d.ts +171 -0
- package/dist/proxmox/generated/pbs/access.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/admin-datastore-store.d.ts +252 -0
- package/dist/proxmox/generated/pbs/admin-datastore-store.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/admin-metrics.d.ts +147 -0
- package/dist/proxmox/generated/pbs/admin-metrics.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/admin.d.ts +217 -0
- package/dist/proxmox/generated/pbs/admin.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/backup.d.ts +114 -0
- package/dist/proxmox/generated/pbs/backup.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-access-pam.d.ts +218 -0
- package/dist/proxmox/generated/pbs/config-access-pam.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-access.d.ts +203 -0
- package/dist/proxmox/generated/pbs/config-access.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-datastore.d.ts +195 -0
- package/dist/proxmox/generated/pbs/config-datastore.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-media-pool.d.ts +207 -0
- package/dist/proxmox/generated/pbs/config-media-pool.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-notifications-matchers.d.ts +159 -0
- package/dist/proxmox/generated/pbs/config-notifications-matchers.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-notifications.d.ts +199 -0
- package/dist/proxmox/generated/pbs/config-notifications.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-remote.d.ts +175 -0
- package/dist/proxmox/generated/pbs/config-remote.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-sync.d.ts +145 -0
- package/dist/proxmox/generated/pbs/config-sync.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-tape.d.ts +200 -0
- package/dist/proxmox/generated/pbs/config-tape.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config-verify.d.ts +77 -0
- package/dist/proxmox/generated/pbs/config-verify.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/config.d.ts +119 -0
- package/dist/proxmox/generated/pbs/config.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/nodes-node-dns.d.ts +178 -0
- package/dist/proxmox/generated/pbs/nodes-node-dns.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/nodes-node-services.d.ts +205 -0
- package/dist/proxmox/generated/pbs/nodes-node-services.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/nodes-node.d.ts +166 -0
- package/dist/proxmox/generated/pbs/nodes-node.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/nodes.d.ts +171 -0
- package/dist/proxmox/generated/pbs/nodes.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/ping.d.ts +18 -0
- package/dist/proxmox/generated/pbs/ping.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/pull.d.ts +37 -0
- package/dist/proxmox/generated/pbs/pull.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/push.d.ts +36 -0
- package/dist/proxmox/generated/pbs/push.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/reader.d.ts +41 -0
- package/dist/proxmox/generated/pbs/reader.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/root.d.ts +16 -0
- package/dist/proxmox/generated/pbs/root.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/status.d.ts +54 -0
- package/dist/proxmox/generated/pbs/status.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/tape-drive.d.ts +181 -0
- package/dist/proxmox/generated/pbs/tape-drive.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/tape-media.d.ts +126 -0
- package/dist/proxmox/generated/pbs/tape-media.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/tape.d.ts +90 -0
- package/dist/proxmox/generated/pbs/tape.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs/version.d.ts +20 -0
- package/dist/proxmox/generated/pbs/version.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs.d.ts +44 -662
- package/dist/proxmox/generated/pbs.d.ts.map +1 -1
- package/dist/proxmox/generated/pve/access-roles.d.ts +164 -0
- package/dist/proxmox/generated/pve/access-roles.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/access-users.d.ts +152 -0
- package/dist/proxmox/generated/pve/access-users.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/access.d.ts +221 -0
- package/dist/proxmox/generated/pve/access.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-acme-plugins-id.d.ts +45 -0
- package/dist/proxmox/generated/pve/cluster-acme-plugins-id.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-acme-plugins.d.ts +47 -0
- package/dist/proxmox/generated/pve/cluster-acme-plugins.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-acme-tos.d.ts +240 -0
- package/dist/proxmox/generated/pve/cluster-acme-tos.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-bulk-action.d.ts +200 -0
- package/dist/proxmox/generated/pve/cluster-bulk-action.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-firewall-refs.d.ts +109 -0
- package/dist/proxmox/generated/pve/cluster-firewall-refs.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-firewall.d.ts +225 -0
- package/dist/proxmox/generated/pve/cluster-firewall.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-ha.d.ts +199 -0
- package/dist/proxmox/generated/pve/cluster-ha.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-jobs.d.ts +183 -0
- package/dist/proxmox/generated/pve/cluster-jobs.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-metrics.d.ts +110 -0
- package/dist/proxmox/generated/pve/cluster-metrics.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-notifications-endpoints.d.ts +224 -0
- package/dist/proxmox/generated/pve/cluster-notifications-endpoints.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-notifications.d.ts +91 -0
- package/dist/proxmox/generated/pve/cluster-notifications.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-options.d.ts +85 -0
- package/dist/proxmox/generated/pve/cluster-options.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-qemu-custom-cpu-models-cputype.d.ts +48 -0
- package/dist/proxmox/generated/pve/cluster-qemu-custom-cpu-models-cputype.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-qemu-custom-cpu-models.d.ts +45 -0
- package/dist/proxmox/generated/pve/cluster-qemu-custom-cpu-models.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-replication.d.ts +130 -0
- package/dist/proxmox/generated/pve/cluster-replication.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-sdn-fabrics.d.ts +220 -0
- package/dist/proxmox/generated/pve/cluster-sdn-fabrics.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-sdn-ipams.d.ts +229 -0
- package/dist/proxmox/generated/pve/cluster-sdn-ipams.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-sdn-vnets-vnet.d.ts +229 -0
- package/dist/proxmox/generated/pve/cluster-sdn-vnets-vnet.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-sdn-vnets.d.ts +51 -0
- package/dist/proxmox/generated/pve/cluster-sdn-vnets.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-sdn-zones.d.ts +225 -0
- package/dist/proxmox/generated/pve/cluster-sdn-zones.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster-sdn.d.ts +202 -0
- package/dist/proxmox/generated/pve/cluster-sdn.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/cluster.d.ts +69 -0
- package/dist/proxmox/generated/pve/cluster.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-ceph.d.ts +167 -0
- package/dist/proxmox/generated/pve/nodes-node-ceph.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-config.d.ts +43 -0
- package/dist/proxmox/generated/pve/nodes-node-config.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-disks.d.ts +225 -0
- package/dist/proxmox/generated/pve/nodes-node-disks.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-firewall.d.ts +145 -0
- package/dist/proxmox/generated/pve/nodes-node-firewall.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-hardware.d.ts +195 -0
- package/dist/proxmox/generated/pve/nodes-node-hardware.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-firewall.d.ts +191 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-firewall.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-move-volume.d.ts +33 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-move-volume.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-mtunnel.d.ts +56 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-mtunnel.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-resize.d.ts +28 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-resize.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-rrd.d.ts +186 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid-rrd.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid.d.ts +191 -0
- package/dist/proxmox/generated/pve/nodes-node-lxc-vmid.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-network.d.ts +150 -0
- package/dist/proxmox/generated/pve/nodes-node-network.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-config.d.ts +301 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-config.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-dbus-vmstate.d.ts +170 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-dbus-vmstate.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-firewall-rules.d.ts +144 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-firewall-rules.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-move-disk.d.ts +34 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-move-disk.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-mtunnel.d.ts +137 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-mtunnel.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-status.d.ts +179 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid-status.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid.d.ts +143 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu-vmid.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu.d.ts +158 -0
- package/dist/proxmox/generated/pve/nodes-node-qemu.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-replication.d.ts +187 -0
- package/dist/proxmox/generated/pve/nodes-node-replication.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-services.d.ts +115 -0
- package/dist/proxmox/generated/pve/nodes-node-services.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-storage-storage.d.ts +202 -0
- package/dist/proxmox/generated/pve/nodes-node-storage-storage.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-storage.d.ts +40 -0
- package/dist/proxmox/generated/pve/nodes-node-storage.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-subscription.d.ts +173 -0
- package/dist/proxmox/generated/pve/nodes-node-subscription.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node-vzdump.d.ts +97 -0
- package/dist/proxmox/generated/pve/nodes-node-vzdump.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes-node.d.ts +207 -0
- package/dist/proxmox/generated/pve/nodes-node.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/nodes.d.ts +236 -0
- package/dist/proxmox/generated/pve/nodes.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/pools.d.ts +82 -0
- package/dist/proxmox/generated/pve/pools.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/storage.d.ts +159 -0
- package/dist/proxmox/generated/pve/storage.d.ts.map +1 -0
- package/dist/proxmox/generated/pve/version.d.ts +21 -0
- package/dist/proxmox/generated/pve/version.d.ts.map +1 -0
- package/dist/proxmox/generated/pve.d.ts +69 -4766
- package/dist/proxmox/generated/pve.d.ts.map +1 -1
- package/dist/proxmox/index.js +996 -372
- package/dist/proxmox/index.js.map +48 -32
- package/dist/proxmox/lxc-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/metric-server-form.d.ts +11 -0
- package/dist/proxmox/metric-server-form.d.ts.map +1 -1
- package/dist/proxmox/metric-server.d.ts.map +1 -1
- package/dist/proxmox/network-apply.d.ts.map +1 -1
- package/dist/proxmox/node-network-form.d.ts +15 -0
- package/dist/proxmox/node-network-form.d.ts.map +1 -1
- package/dist/proxmox/node-network.d.ts.map +1 -1
- package/dist/proxmox/notification-target-endpoint.d.ts +26 -0
- package/dist/proxmox/notification-target-endpoint.d.ts.map +1 -0
- package/dist/proxmox/notification-target-form.d.ts +7 -0
- package/dist/proxmox/notification-target-form.d.ts.map +1 -1
- package/dist/proxmox/notification-target.d.ts.map +1 -1
- package/dist/proxmox/pbs-notification-target-endpoint.d.ts +29 -0
- package/dist/proxmox/pbs-notification-target-endpoint.d.ts.map +1 -0
- package/dist/proxmox/pbs-notification-target-lifecycle.d.ts.map +1 -1
- package/dist/proxmox/qemu.d.ts +10 -0
- package/dist/proxmox/qemu.d.ts.map +1 -1
- package/dist/proxmox/resource-guard.d.ts +15 -0
- package/dist/proxmox/resource-guard.d.ts.map +1 -0
- package/dist/proxmox/resource-spec.d.ts +15 -4
- package/dist/proxmox/resource-spec.d.ts.map +1 -1
- package/dist/proxmox/resource.d.ts +8 -0
- package/dist/proxmox/resource.d.ts.map +1 -1
- package/dist/proxmox/sdn-apply.d.ts.map +1 -1
- package/dist/proxmox/sdn-subnet.d.ts.map +1 -1
- package/dist/proxmox/zfs-pool-write.d.ts +11 -0
- package/dist/proxmox/zfs-pool-write.d.ts.map +1 -1
- package/dist/proxmox/zfs-pool.d.ts.map +1 -1
- package/docs/linux-host-measured.md +56 -0
- package/docs/linux-host.md +192 -0
- package/docs/netbox.md +103 -0
- package/package.json +9 -1
- package/src/linux/directory-lifecycle.ts +220 -0
- package/src/linux/directory.test.ts +132 -0
- package/src/linux/directory.ts +71 -0
- package/src/linux/fake-linux-host.ts +197 -0
- package/src/linux/fake-systemd.ts +103 -0
- package/src/linux/index.ts +32 -0
- package/src/linux/providers.ts +26 -0
- package/src/linux/region.test.ts +89 -0
- package/src/linux/region.ts +118 -0
- package/src/linux/remote-file-form.ts +96 -0
- package/src/linux/remote-file-lifecycle.test.ts +191 -0
- package/src/linux/remote-file-lifecycle.ts +161 -0
- package/src/linux/remote-file-plan.ts +154 -0
- package/src/linux/remote-file.ts +88 -0
- package/src/linux/ssh-command.test.ts +140 -0
- package/src/linux/ssh-command.ts +99 -0
- package/src/linux/ssh-runner.ts +188 -0
- package/src/linux/ssh-scripts.ts +105 -0
- package/src/linux/systemctl.ts +145 -0
- package/src/linux/unit-form.ts +183 -0
- package/src/linux/unit-handlers.ts +73 -0
- package/src/linux/unit-lifecycle.test.ts +220 -0
- package/src/linux/unit-lifecycle.ts +175 -0
- package/src/linux/unit-preflight.test.ts +128 -0
- package/src/linux/unit-preflight.ts +100 -0
- package/src/linux/unit-settle.ts +110 -0
- package/src/linux/unit.ts +81 -0
- package/src/netbox/client.test.ts +67 -0
- package/src/netbox/client.ts +146 -0
- package/src/netbox/constraint-guard.ts +57 -0
- package/src/netbox/constraints.test.ts +114 -0
- package/src/netbox/constraints.ts +152 -0
- package/src/netbox/generated/constraints/index.ts +23 -0
- package/src/netbox/generated/constraints/netbox-ipam.ts +32 -0
- package/src/netbox/index.ts +34 -0
- package/src/netbox/prefix-form.test.ts +127 -0
- package/src/netbox/prefix-form.ts +84 -0
- package/src/netbox/prefix.ts +136 -0
- package/src/netbox/resource.ts +208 -0
- package/src/netbox/values.test.ts +66 -0
- package/src/netbox/values.ts +40 -0
- package/src/proxmox/api-token-form.ts +5 -0
- package/src/proxmox/apply-endpoints.ts +34 -0
- package/src/proxmox/ceph-daemon-form.ts +56 -2
- package/src/proxmox/ceph-daemon.ts +10 -21
- package/src/proxmox/ceph-flag.ts +1 -0
- package/src/proxmox/ceph-fs.ts +1 -0
- package/src/proxmox/ceph-osd-write.ts +30 -4
- package/src/proxmox/ceph-pool.ts +10 -0
- package/src/proxmox/constraints-dialect.test.ts +165 -0
- package/src/proxmox/constraints-forms.test.ts +228 -0
- package/src/proxmox/constraints-host-forms.test.ts +132 -0
- package/src/proxmox/constraints-live.test.ts +155 -0
- package/src/proxmox/constraints-node-forms.test.ts +197 -0
- package/src/proxmox/constraints-required.test.ts +172 -0
- package/src/proxmox/constraints.test.ts +8 -63
- package/src/proxmox/constraints.ts +31 -6
- package/src/proxmox/generated/constraints/index.ts +27 -3
- package/src/proxmox/generated/constraints/pbs-config.ts +63 -1
- package/src/proxmox/generated/constraints/pve-access.ts +15 -3
- package/src/proxmox/generated/constraints/pve-cluster-backup.ts +74 -0
- package/src/proxmox/generated/constraints/pve-cluster-ceph.ts +27 -0
- package/src/proxmox/generated/constraints/pve-cluster-firewall.ts +35 -0
- package/src/proxmox/generated/constraints/pve-cluster-ha.ts +55 -0
- package/src/proxmox/generated/constraints/pve-cluster-metrics.ts +59 -0
- package/src/proxmox/generated/constraints/pve-cluster-notifications.ts +80 -0
- package/src/proxmox/generated/constraints/pve-cluster-replication.ts +43 -0
- package/src/proxmox/generated/constraints/pve-cluster-sdn.ts +90 -0
- package/src/proxmox/generated/constraints/pve-nodes-ceph.ts +57 -0
- package/src/proxmox/generated/constraints/pve-nodes-disks.ts +31 -0
- package/src/proxmox/generated/constraints/pve-nodes-lxc.ts +82 -0
- package/src/proxmox/generated/constraints/pve-nodes-network.ts +77 -0
- package/src/proxmox/generated/constraints/pve-nodes-qemu.ts +125 -0
- package/src/proxmox/generated/constraints/pve-pools.ts +6 -1
- package/src/proxmox/generated/constraints/pve-storage.ts +8 -3
- package/src/proxmox/generated/pbs/access-users.ts +137 -0
- package/src/proxmox/generated/pbs/access.ts +232 -0
- package/src/proxmox/generated/pbs/admin-datastore-store.ts +238 -0
- package/src/proxmox/generated/pbs/admin-metrics.ts +147 -0
- package/src/proxmox/generated/pbs/admin.ts +225 -0
- package/src/proxmox/generated/pbs/backup.ts +121 -0
- package/src/proxmox/generated/pbs/config-access-pam.ts +228 -0
- package/src/proxmox/generated/pbs/config-access.ts +228 -0
- package/src/proxmox/generated/pbs/config-datastore.ts +217 -0
- package/src/proxmox/generated/pbs/config-media-pool.ts +232 -0
- package/src/proxmox/generated/pbs/config-notifications-matchers.ts +187 -0
- package/src/proxmox/generated/pbs/config-notifications.ts +221 -0
- package/src/proxmox/generated/pbs/config-remote.ts +192 -0
- package/src/proxmox/generated/pbs/config-sync.ts +167 -0
- package/src/proxmox/generated/pbs/config-tape.ts +226 -0
- package/src/proxmox/generated/pbs/config-verify.ts +87 -0
- package/src/proxmox/generated/pbs/config.ts +135 -0
- package/src/proxmox/generated/pbs/nodes-node-dns.ts +229 -0
- package/src/proxmox/generated/pbs/nodes-node-services.ts +181 -0
- package/src/proxmox/generated/pbs/nodes-node.ts +244 -0
- package/src/proxmox/generated/pbs/nodes.ts +160 -0
- package/src/proxmox/generated/pbs/ping.ts +16 -0
- package/src/proxmox/generated/pbs/pull.ts +37 -0
- package/src/proxmox/generated/pbs/push.ts +36 -0
- package/src/proxmox/generated/pbs/reader.ts +41 -0
- package/src/proxmox/generated/pbs/root.ts +16 -0
- package/src/proxmox/generated/pbs/status.ts +50 -0
- package/src/proxmox/generated/pbs/tape-drive.ts +220 -0
- package/src/proxmox/generated/pbs/tape-media.ts +133 -0
- package/src/proxmox/generated/pbs/tape.ts +92 -0
- package/src/proxmox/generated/pbs/version.ts +16 -0
- package/src/proxmox/generated/pbs.ts +44 -787
- package/src/proxmox/generated/pve/access-roles.ts +168 -0
- package/src/proxmox/generated/pve/access-users.ts +155 -0
- package/src/proxmox/generated/pve/access.ts +217 -0
- package/src/proxmox/generated/pve/cluster-acme-plugins-id.ts +367 -0
- package/src/proxmox/generated/pve/cluster-acme-plugins.ts +366 -0
- package/src/proxmox/generated/pve/cluster-acme-tos.ts +232 -0
- package/src/proxmox/generated/pve/cluster-bulk-action.ts +227 -0
- package/src/proxmox/generated/pve/cluster-firewall-refs.ts +110 -0
- package/src/proxmox/generated/pve/cluster-firewall.ts +236 -0
- package/src/proxmox/generated/pve/cluster-ha.ts +203 -0
- package/src/proxmox/generated/pve/cluster-jobs.ts +190 -0
- package/src/proxmox/generated/pve/cluster-metrics.ts +116 -0
- package/src/proxmox/generated/pve/cluster-notifications-endpoints.ts +244 -0
- package/src/proxmox/generated/pve/cluster-notifications.ts +99 -0
- package/src/proxmox/generated/pve/cluster-options.ts +189 -0
- package/src/proxmox/generated/pve/cluster-qemu-custom-cpu-models-cputype.ts +272 -0
- package/src/proxmox/generated/pve/cluster-qemu-custom-cpu-models.ts +268 -0
- package/src/proxmox/generated/pve/cluster-replication.ts +127 -0
- package/src/proxmox/generated/pve/cluster-sdn-fabrics.ts +218 -0
- package/src/proxmox/generated/pve/cluster-sdn-ipams.ts +229 -0
- package/src/proxmox/generated/pve/cluster-sdn-vnets-vnet.ts +245 -0
- package/src/proxmox/generated/pve/cluster-sdn-vnets.ts +49 -0
- package/src/proxmox/generated/pve/cluster-sdn-zones.ts +224 -0
- package/src/proxmox/generated/pve/cluster-sdn.ts +201 -0
- package/src/proxmox/generated/pve/cluster.ts +71 -0
- package/src/proxmox/generated/pve/nodes-node-ceph.ts +167 -0
- package/src/proxmox/generated/pve/nodes-node-config.ts +56 -0
- package/src/proxmox/generated/pve/nodes-node-disks.ts +237 -0
- package/src/proxmox/generated/pve/nodes-node-firewall.ts +239 -0
- package/src/proxmox/generated/pve/nodes-node-hardware.ts +215 -0
- package/src/proxmox/generated/pve/nodes-node-lxc-vmid-firewall.ts +232 -0
- package/src/proxmox/generated/pve/nodes-node-lxc-vmid-move-volume.ts +1059 -0
- package/src/proxmox/generated/pve/nodes-node-lxc-vmid-mtunnel.ts +49 -0
- package/src/proxmox/generated/pve/nodes-node-lxc-vmid-resize.ts +285 -0
- package/src/proxmox/generated/pve/nodes-node-lxc-vmid-rrd.ts +184 -0
- package/src/proxmox/generated/pve/nodes-node-lxc-vmid.ts +240 -0
- package/src/proxmox/generated/pve/nodes-node-network.ts +234 -0
- package/src/proxmox/generated/pve/nodes-node-qemu-vmid-config.ts +441 -0
- package/src/proxmox/generated/pve/nodes-node-qemu-vmid-dbus-vmstate.ts +215 -0
- package/src/proxmox/generated/pve/nodes-node-qemu-vmid-firewall-rules.ts +145 -0
- package/src/proxmox/generated/pve/nodes-node-qemu-vmid-move-disk.ts +664 -0
- package/src/proxmox/generated/pve/nodes-node-qemu-vmid-mtunnel.ts +188 -0
- package/src/proxmox/generated/pve/nodes-node-qemu-vmid-status.ts +233 -0
- package/src/proxmox/generated/pve/nodes-node-qemu-vmid.ts +187 -0
- package/src/proxmox/generated/pve/nodes-node-qemu.ts +204 -0
- package/src/proxmox/generated/pve/nodes-node-replication.ts +187 -0
- package/src/proxmox/generated/pve/nodes-node-services.ts +221 -0
- package/src/proxmox/generated/pve/nodes-node-storage-storage.ts +226 -0
- package/src/proxmox/generated/pve/nodes-node-storage.ts +40 -0
- package/src/proxmox/generated/pve/nodes-node-subscription.ts +168 -0
- package/src/proxmox/generated/pve/nodes-node-vzdump.ts +96 -0
- package/src/proxmox/generated/pve/nodes-node.ts +211 -0
- package/src/proxmox/generated/pve/nodes.ts +235 -0
- package/src/proxmox/generated/pve/pools.ts +78 -0
- package/src/proxmox/generated/pve/storage.ts +213 -0
- package/src/proxmox/generated/pve/version.ts +21 -0
- package/src/proxmox/generated/pve.ts +69 -7403
- package/src/proxmox/lxc-interior.test.ts +17 -1
- package/src/proxmox/lxc-lifecycle.ts +48 -9
- package/src/proxmox/metric-server-form.ts +10 -0
- package/src/proxmox/metric-server.ts +11 -2
- package/src/proxmox/network-apply.ts +4 -0
- package/src/proxmox/node-network-form.ts +19 -0
- package/src/proxmox/node-network.ts +9 -3
- package/src/proxmox/notification-target-endpoint.ts +46 -0
- package/src/proxmox/notification-target-form.ts +11 -0
- package/src/proxmox/notification-target.ts +5 -2
- package/src/proxmox/pbs-notification-target-endpoint.ts +45 -0
- package/src/proxmox/pbs-notification-target-lifecycle.ts +16 -14
- package/src/proxmox/qemu.ts +9 -1
- package/src/proxmox/resource-guard.ts +61 -0
- package/src/proxmox/resource-spec.ts +16 -4
- package/src/proxmox/resource.ts +27 -27
- package/src/proxmox/sdn-apply.ts +4 -0
- package/src/proxmox/sdn-subnet.ts +5 -0
- package/src/proxmox/zfs-pool-write.ts +12 -0
- package/src/proxmox/zfs-pool.ts +2 -1
- package/dist/proxmox/generated/constraints/pve-cluster.d.ts +0 -18
- package/dist/proxmox/generated/constraints/pve-cluster.d.ts.map +0 -1
- package/src/proxmox/generated/constraints/pve-cluster.ts +0 -174
|
@@ -14,13 +14,11 @@
|
|
|
14
14
|
import { describe, expect, test } from 'bun:test';
|
|
15
15
|
import * as Layer from 'effect/Layer';
|
|
16
16
|
import { engineOver } from '../verify/fake-engine.ts';
|
|
17
|
+
// ⚠️ The estate's own declarations live in constraints-live.test.ts — split at the 250-line cap.
|
|
17
18
|
import { constraintsFor, formViolations } from './constraint-guard.ts';
|
|
18
19
|
import { type EndpointConstraints, refusal, violations } from './constraints.ts';
|
|
19
20
|
import type { PbsTarget } from './credentials.ts';
|
|
20
21
|
import { fakePve, withoutBao } from './fake-pve.ts';
|
|
21
|
-
import { createForm as datastoreCreateForm } from './pbs-datastore-form.ts';
|
|
22
|
-
import { createBody as pruneCreateBody } from './pbs-prune-job-form.ts';
|
|
23
|
-
import { createBody as syncCreateBody } from './pbs-sync-job-form.ts';
|
|
24
22
|
import { PROXMOX_CONSTRAINTS, PROXMOX_CONSTRAINTS_DIGEST } from './generated/constraints/index.ts';
|
|
25
23
|
import { PbsVerifyJob, PbsVerifyJobProvider } from './pbs-verify-job.ts';
|
|
26
24
|
|
|
@@ -71,11 +69,14 @@ describe('the v-r2-offsite failure, refused at plan instead of by the server', (
|
|
|
71
69
|
// ⛔ THE ASSERTION THE INCIDENT IS ABOUT. A refusal after the POST is the server's own 400.
|
|
72
70
|
expect(writes).toEqual([]);
|
|
73
71
|
/**
|
|
74
|
-
* ⚠️
|
|
75
|
-
* `read` handler
|
|
76
|
-
*
|
|
72
|
+
* ⚠️ EVERY CALL IS A READ, AND THERE ARE NOW TWO OF THEM. Measured 2026-09-22: Alchemy runs
|
|
73
|
+
* the provider's `read` handler first, and `reconcile` reads again — the guard moved to
|
|
74
|
+
* AFTER that second read the same day, because the read is the only thing that says whether
|
|
75
|
+
* a create or an update is about to be made, and demanding the create form's required
|
|
76
|
+
* parameters on an update refuses edits that were always legal (resource-guard.ts).
|
|
77
|
+
* ⛔ THE COUNT IS NOT THE ASSERTION; THE METHOD IS. Nothing is created or changed.
|
|
77
78
|
*/
|
|
78
|
-
expect(calls.map((call) => call.method)).toEqual(['GET']);
|
|
79
|
+
expect(calls.map((call) => call.method)).toEqual(['GET', 'GET']);
|
|
79
80
|
});
|
|
80
81
|
|
|
81
82
|
test('128 characters is accepted and the create goes through', async () => {
|
|
@@ -202,59 +203,3 @@ describe('every rule kind, at and past its boundary', () => {
|
|
|
202
203
|
expect(refusal(VERIFY, ['comment: at most 128 characters'])).toContain('generated/constraints');
|
|
203
204
|
});
|
|
204
205
|
});
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* ★ THE OTHER THREE PBS FAMILIES, WITH THE ESTATE'S OWN DECLARATIONS, AGAINST THEIR CREATE TABLE.
|
|
208
|
-
* The risk this feature carries is not the one it fixes: a table that refuses a declaration the
|
|
209
|
-
* vendor would have ACCEPTED blocks a deploy that was always legal, and the operator cannot tell
|
|
210
|
-
* that from a genuine violation. These are the jobs `homeflare-proxmox` actually declares
|
|
211
|
-
* (`prune-cluster-all`, `sync-all-to-r2`, the `r2-offsite` datastore), so a false positive in the
|
|
212
|
-
* presence check or a mistranslated pattern fails here rather than on a Sunday morning.
|
|
213
|
-
*/
|
|
214
|
-
describe('the live PBS declarations pass their own create tables', () => {
|
|
215
|
-
test('prune, sync and datastore create forms have no violations', () => {
|
|
216
|
-
expect(
|
|
217
|
-
formViolations(
|
|
218
|
-
'pbs:POST /config/prune',
|
|
219
|
-
pruneCreateBody({
|
|
220
|
-
comment: 'cluster retention',
|
|
221
|
-
id: 'prune-cluster-all',
|
|
222
|
-
'keep-daily': 7,
|
|
223
|
-
'keep-last': 3,
|
|
224
|
-
'keep-monthly': 6,
|
|
225
|
-
'keep-weekly': 4,
|
|
226
|
-
schedule: 'sat 03:00',
|
|
227
|
-
store: 'cluster',
|
|
228
|
-
target: PBS,
|
|
229
|
-
}),
|
|
230
|
-
true,
|
|
231
|
-
),
|
|
232
|
-
).toEqual([]);
|
|
233
|
-
expect(
|
|
234
|
-
formViolations(
|
|
235
|
-
'pbs:POST /config/sync',
|
|
236
|
-
syncCreateBody({
|
|
237
|
-
comment: 'offsite copy to R2',
|
|
238
|
-
id: 'sync-all-to-r2',
|
|
239
|
-
'remote-store': 'r2-offsite',
|
|
240
|
-
schedule: 'mon 08:30',
|
|
241
|
-
store: 'cluster',
|
|
242
|
-
target: PBS,
|
|
243
|
-
}),
|
|
244
|
-
true,
|
|
245
|
-
),
|
|
246
|
-
).toEqual([]);
|
|
247
|
-
expect(
|
|
248
|
-
formViolations(
|
|
249
|
-
'pbs:POST /config/datastore',
|
|
250
|
-
datastoreCreateForm({
|
|
251
|
-
comment: 'offsite',
|
|
252
|
-
name: 'r2-offsite',
|
|
253
|
-
path: '/mnt/datastore/r2-offsite',
|
|
254
|
-
target: PBS,
|
|
255
|
-
}),
|
|
256
|
-
true,
|
|
257
|
-
),
|
|
258
|
-
).toEqual([]);
|
|
259
|
-
});
|
|
260
|
-
});
|
|
@@ -18,13 +18,20 @@
|
|
|
18
18
|
* field. A props-level check would pass values the form then mangles, and would have to be
|
|
19
19
|
* written once per family — which is how the copy that forgets a field gets written.
|
|
20
20
|
*
|
|
21
|
-
* ⚠️ WHAT IT DELIBERATELY DOES NOT ENFORCE, so nobody reads a green plan as more than it is
|
|
22
|
-
* -
|
|
21
|
+
* ⚠️ WHAT IT DELIBERATELY DOES NOT ENFORCE, so nobody reads a green plan as more than it is. The
|
|
22
|
+
* full kind-by-kind table, with the counts measured over the 37 tabled endpoints, is in
|
|
23
|
+
* codegen/README.md. The short version:
|
|
24
|
+
* - a `format` NAME (PVE's `pve-calendar-event`, `pve-node`; 105 parameters here): the name is a
|
|
23
25
|
* validator PVE implements server-side and publishes nothing about. Recorded, never checked.
|
|
26
|
+
* - a `format` OBJECT — PBS's `notify`, `tuning`, `maintenance-mode`, PVE's `bwlimit`; 10
|
|
27
|
+
* parameters. It is a sub-schema for the inside of a PROPERTY STRING, and the packed keys
|
|
28
|
+
* carry their own limits. Not flattened, because a rule about `notify` is not a rule about
|
|
29
|
+
* `notify.gc`. ⛔ This is the largest remaining gap and it is a gap on purpose.
|
|
30
|
+
* - `requires` (8 parameters): "this one needs that one". A dependency, not a value rule.
|
|
31
|
+
* - `typetext` with nothing else, such as PBS `schedule`'s `<calendar-event>` (21 parameters).
|
|
32
|
+
* The schema states a syntax it does not describe; a malformed schedule still reaches PBS.
|
|
24
33
|
* - a pattern the generator could not translate faithfully (codegen/pattern.ts). Recorded
|
|
25
34
|
* verbatim as `patternSource`, never checked.
|
|
26
|
-
* - PBS `schedule`, which carries `typetext: <calendar-event>` and NO pattern and NO maxLength.
|
|
27
|
-
* The schema cannot help there; a malformed schedule still reaches PBS.
|
|
28
35
|
* Each of those is a fact in the table rather than a guess, which is the rule this follows:
|
|
29
36
|
* if the vendor did not state it, it is not enforced and the table says so.
|
|
30
37
|
*/
|
|
@@ -39,13 +46,29 @@ export interface ParamConstraint {
|
|
|
39
46
|
readonly minimum?: number;
|
|
40
47
|
readonly maximum?: number;
|
|
41
48
|
readonly enum?: readonly string[];
|
|
42
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* A JavaScript-safe EQUIVALENT. Absent when the vendor's dialect could not be carried over.
|
|
51
|
+
*
|
|
52
|
+
* ⛔ NOT THE VENDOR'S SPELLING, AND FOR PVE NOT EVEN THE SAME SHAPE. PVE publishes the inside of
|
|
53
|
+
* an anchored match and applies `m/^$pattern$/` itself (MEASURED in JSONSchema.pm), so the
|
|
54
|
+
* generator anchors it here. Quote `patternSource` at a human, never this.
|
|
55
|
+
*/
|
|
43
56
|
readonly pattern?: string;
|
|
57
|
+
/** `m` when the vendor asked for multi-line. ⚠️ Dropping it enforces the wrong semantics. */
|
|
58
|
+
readonly patternFlags?: string;
|
|
44
59
|
/** The vendor's own spelling, always — what a violation message quotes, and the audit trail. */
|
|
45
60
|
readonly patternSource?: string;
|
|
46
61
|
/** PVE's server-side validator name. Recorded so a reader knows what is NOT checked here. */
|
|
47
62
|
readonly format?: string;
|
|
48
63
|
readonly default?: string;
|
|
64
|
+
/**
|
|
65
|
+
* The value rules describe each ELEMENT of a repeated key, not one joined string.
|
|
66
|
+
*
|
|
67
|
+
* ⚠️ RECORDED, NOT BRANCHED ON. `violations` already checks every element of an array value, so
|
|
68
|
+
* this changes no behaviour — it tells a reader of the generated table why a `maxLength` of 32
|
|
69
|
+
* sits on a parameter that carries a list.
|
|
70
|
+
*/
|
|
71
|
+
readonly each?: true;
|
|
49
72
|
}
|
|
50
73
|
|
|
51
74
|
export type EndpointConstraints = Readonly<Record<string, ParamConstraint>>;
|
|
@@ -82,7 +105,9 @@ const checkValue = (name: string, value: string, rule: ParamConstraint): string[
|
|
|
82
105
|
if (rule.enum !== undefined && !rule.enum.includes(value)) {
|
|
83
106
|
out.push(`${name}: must be one of ${rule.enum.join(', ')}`);
|
|
84
107
|
}
|
|
85
|
-
|
|
108
|
+
// ⚠️ `patternFlags` IS PASSED, NOT IGNORED. It carries the vendor's own `(?m)`; enforcing a
|
|
109
|
+
// multi-line rule with single-line semantics refuses values the vendor accepts.
|
|
110
|
+
if (rule.pattern !== undefined && !new RegExp(rule.pattern, rule.patternFlags).test(value)) {
|
|
86
111
|
out.push(`${name}: must match ${rule.patternSource ?? rule.pattern}`);
|
|
87
112
|
}
|
|
88
113
|
// ⚠️ NUMBER-NESS IS NOT CHECKED, ONLY THE BOUND. The form is strings by construction and a
|
|
@@ -9,14 +9,38 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { EndpointConstraints } from '../../constraints.ts';
|
|
11
11
|
import { PVE_ACCESS_CONSTRAINTS } from './pve-access.ts';
|
|
12
|
-
import {
|
|
12
|
+
import { PVE_CLUSTER_BACKUP_CONSTRAINTS } from './pve-cluster-backup.ts';
|
|
13
|
+
import { PVE_CLUSTER_CEPH_CONSTRAINTS } from './pve-cluster-ceph.ts';
|
|
14
|
+
import { PVE_CLUSTER_FIREWALL_CONSTRAINTS } from './pve-cluster-firewall.ts';
|
|
15
|
+
import { PVE_CLUSTER_HA_CONSTRAINTS } from './pve-cluster-ha.ts';
|
|
16
|
+
import { PVE_CLUSTER_METRICS_CONSTRAINTS } from './pve-cluster-metrics.ts';
|
|
17
|
+
import { PVE_CLUSTER_NOTIFICATIONS_CONSTRAINTS } from './pve-cluster-notifications.ts';
|
|
18
|
+
import { PVE_CLUSTER_REPLICATION_CONSTRAINTS } from './pve-cluster-replication.ts';
|
|
19
|
+
import { PVE_CLUSTER_SDN_CONSTRAINTS } from './pve-cluster-sdn.ts';
|
|
20
|
+
import { PVE_NODES_CEPH_CONSTRAINTS } from './pve-nodes-ceph.ts';
|
|
21
|
+
import { PVE_NODES_DISKS_CONSTRAINTS } from './pve-nodes-disks.ts';
|
|
22
|
+
import { PVE_NODES_LXC_CONSTRAINTS } from './pve-nodes-lxc.ts';
|
|
23
|
+
import { PVE_NODES_NETWORK_CONSTRAINTS } from './pve-nodes-network.ts';
|
|
24
|
+
import { PVE_NODES_QEMU_CONSTRAINTS } from './pve-nodes-qemu.ts';
|
|
13
25
|
import { PVE_POOLS_CONSTRAINTS } from './pve-pools.ts';
|
|
14
26
|
import { PVE_STORAGE_CONSTRAINTS } from './pve-storage.ts';
|
|
15
27
|
import { PBS_CONFIG_CONSTRAINTS } from './pbs-config.ts';
|
|
16
28
|
|
|
17
29
|
export const PROXMOX_CONSTRAINTS: Readonly<Record<string, EndpointConstraints>> = {
|
|
18
30
|
...PVE_ACCESS_CONSTRAINTS,
|
|
19
|
-
...
|
|
31
|
+
...PVE_CLUSTER_BACKUP_CONSTRAINTS,
|
|
32
|
+
...PVE_CLUSTER_CEPH_CONSTRAINTS,
|
|
33
|
+
...PVE_CLUSTER_FIREWALL_CONSTRAINTS,
|
|
34
|
+
...PVE_CLUSTER_HA_CONSTRAINTS,
|
|
35
|
+
...PVE_CLUSTER_METRICS_CONSTRAINTS,
|
|
36
|
+
...PVE_CLUSTER_NOTIFICATIONS_CONSTRAINTS,
|
|
37
|
+
...PVE_CLUSTER_REPLICATION_CONSTRAINTS,
|
|
38
|
+
...PVE_CLUSTER_SDN_CONSTRAINTS,
|
|
39
|
+
...PVE_NODES_CEPH_CONSTRAINTS,
|
|
40
|
+
...PVE_NODES_DISKS_CONSTRAINTS,
|
|
41
|
+
...PVE_NODES_LXC_CONSTRAINTS,
|
|
42
|
+
...PVE_NODES_NETWORK_CONSTRAINTS,
|
|
43
|
+
...PVE_NODES_QEMU_CONSTRAINTS,
|
|
20
44
|
...PVE_POOLS_CONSTRAINTS,
|
|
21
45
|
...PVE_STORAGE_CONSTRAINTS,
|
|
22
46
|
...PBS_CONFIG_CONSTRAINTS,
|
|
@@ -28,4 +52,4 @@ export const PROXMOX_CONSTRAINTS: Readonly<Record<string, EndpointConstraints>>
|
|
|
28
52
|
* ★ A DIGEST OF THE DATA, NOT OF THE FILE TEXT, so reformatting is not a stale generation while
|
|
29
53
|
* changing a 128 to a 129 by hand is. `tests/schema-manifest.test.ts` recomputes it.
|
|
30
54
|
*/
|
|
31
|
-
export const PROXMOX_CONSTRAINTS_DIGEST = '
|
|
55
|
+
export const PROXMOX_CONSTRAINTS_DIGEST = '33b42b52d396c9e0';
|
|
@@ -6,12 +6,17 @@
|
|
|
6
6
|
* sha256 274ab9f6fc075aea, read on a PBS host from
|
|
7
7
|
* /usr/share/doc/proxmox-backup/html/api-viewer/apidoc.js
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* 16 of this product's 144 POST/PUT endpoints are tabled across all areas: the ones
|
|
10
10
|
* this package writes to, named in its own source. Every other vendor write endpoint is UNTABLED
|
|
11
11
|
* and therefore unchecked at plan time.
|
|
12
12
|
*
|
|
13
13
|
* ⚠️ A `patternSource` with no `pattern` beside it is a rule that could NOT be carried into a
|
|
14
14
|
* JavaScript RegExp faithfully (codegen/pattern.ts). It is recorded and NOT enforced.
|
|
15
|
+
* ⚠️ `pattern` IS NOT THE VENDOR'S SPELLING. For PVE it is anchored, because PVE applies
|
|
16
|
+
* `m/^$pattern$/` itself (JSONSchema.pm); for PBS it is the vendor's own, which already
|
|
17
|
+
* carries its anchors. `patternSource` is the spelling to quote at a human — param-rules.ts.
|
|
18
|
+
* ⚠️ `each: true` means the value rules describe every ELEMENT of a repeated key, because the
|
|
19
|
+
* parameter is an array and stated its limits on `items`.
|
|
15
20
|
*/
|
|
16
21
|
import type { EndpointConstraints } from '../../constraints.ts';
|
|
17
22
|
|
|
@@ -30,11 +35,37 @@ export const PBS_CONFIG_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
30
35
|
"notify-user": {"maxLength":64,"minLength":3,"pattern":"^(?:[^\\s:/\\x00-\\x1f\\x7f]+)@(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[^\\s:/[:cntrl:]]+)@(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"string"},
|
|
31
36
|
"path": {"maxLength":4096,"minLength":1,"required":true,"type":"string"},
|
|
32
37
|
},
|
|
38
|
+
"pbs:POST /config/notifications/endpoints/sendmail": {
|
|
39
|
+
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
40
|
+
"mailto": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
41
|
+
"mailto-user": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
42
|
+
"name": {"maxLength":32,"minLength":2,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","required":true,"type":"string"},
|
|
43
|
+
"origin": {"enum":["user-created","builtin","modified-builtin"],"type":"string"},
|
|
44
|
+
},
|
|
45
|
+
"pbs:POST /config/notifications/endpoints/smtp": {
|
|
46
|
+
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
47
|
+
"from-address": {"required":true,"type":"string"},
|
|
48
|
+
"mailto": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
49
|
+
"mailto-user": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
50
|
+
"mode": {"default":"tls","enum":["insecure","starttls","tls"],"type":"string"},
|
|
51
|
+
"name": {"maxLength":32,"minLength":2,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","required":true,"type":"string"},
|
|
52
|
+
"origin": {"enum":["user-created","builtin","modified-builtin"],"type":"string"},
|
|
53
|
+
"port": {"maximum":65535,"minimum":0,"type":"integer"},
|
|
54
|
+
"server": {"required":true,"type":"string"},
|
|
55
|
+
},
|
|
56
|
+
"pbs:POST /config/notifications/endpoints/webhook": {
|
|
57
|
+
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
58
|
+
"method": {"default":"post","enum":["post","put","get"],"required":true,"type":"string"},
|
|
59
|
+
"name": {"maxLength":32,"minLength":2,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","required":true,"type":"string"},
|
|
60
|
+
"origin": {"enum":["user-created","builtin","modified-builtin"],"type":"string"},
|
|
61
|
+
"url": {"pattern":"^https?://(?:(?:(?:(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?)\\.)*(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?))|(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|\\[(?:(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))\\]))(?::(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?)|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))(?:/[^\u0000-\u001f]*)?$","patternSource":"/^https?://(?:(?:(?:(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?)\\.)*(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?))|(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|\\[(?:(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))\\]))(?::(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?)|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))(?:/[^\u0000-\u001f]*)?$/","required":true,"type":"string"},
|
|
62
|
+
},
|
|
33
63
|
"pbs:POST /config/notifications/matchers": {
|
|
34
64
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
35
65
|
"mode": {"default":"all","enum":["all","any"],"type":"string"},
|
|
36
66
|
"name": {"maxLength":32,"minLength":2,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","required":true,"type":"string"},
|
|
37
67
|
"origin": {"enum":["user-created","builtin","modified-builtin"],"type":"string"},
|
|
68
|
+
"target": {"each":true,"maxLength":32,"minLength":2,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"array"},
|
|
38
69
|
},
|
|
39
70
|
"pbs:POST /config/prune": {
|
|
40
71
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
@@ -52,6 +83,7 @@ export const PBS_CONFIG_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
52
83
|
},
|
|
53
84
|
"pbs:POST /config/sync": {
|
|
54
85
|
"active-encryption-key": {"maxLength":32,"minLength":3,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"string"},
|
|
86
|
+
"associated-key": {"each":true,"maxLength":32,"minLength":3,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"array"},
|
|
55
87
|
"burst-in": {"maxLength":64,"minLength":1,"type":"string"},
|
|
56
88
|
"burst-out": {"maxLength":64,"minLength":1,"type":"string"},
|
|
57
89
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
@@ -81,6 +113,7 @@ export const PBS_CONFIG_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
81
113
|
},
|
|
82
114
|
"pbs:PUT /config/datastore/{name}": {
|
|
83
115
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
116
|
+
"delete": {"each":true,"enum":["comment","gc-schedule","gc-on-unmount","prune-schedule","keep-last","keep-hourly","keep-daily","keep-weekly","keep-monthly","keep-yearly","verify-new","notify-user","notify","notification-mode","tuning","maintenance-mode","notification-thresholds","counter-reset-schedule"],"type":"array"},
|
|
84
117
|
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
85
118
|
"keep-daily": {"minimum":1,"type":"integer"},
|
|
86
119
|
"keep-hourly": {"minimum":1,"type":"integer"},
|
|
@@ -91,13 +124,39 @@ export const PBS_CONFIG_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
91
124
|
"notification-mode": {"default":"notification-system","enum":["legacy-sendmail","notification-system"],"type":"string"},
|
|
92
125
|
"notify-user": {"maxLength":64,"minLength":3,"pattern":"^(?:[^\\s:/\\x00-\\x1f\\x7f]+)@(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[^\\s:/[:cntrl:]]+)@(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"string"},
|
|
93
126
|
},
|
|
127
|
+
"pbs:PUT /config/notifications/endpoints/sendmail/{name}": {
|
|
128
|
+
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
129
|
+
"delete": {"each":true,"enum":["author","comment","disable","from-address","mailto","mailto-user"],"type":"array"},
|
|
130
|
+
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
131
|
+
"mailto": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
132
|
+
"mailto-user": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
133
|
+
},
|
|
134
|
+
"pbs:PUT /config/notifications/endpoints/smtp/{name}": {
|
|
135
|
+
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
136
|
+
"delete": {"each":true,"enum":["author","comment","disable","mailto","mailto-user","password","port","username"],"type":"array"},
|
|
137
|
+
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
138
|
+
"mailto": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
139
|
+
"mailto-user": {"each":true,"maxLength":64,"minLength":2,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"array"},
|
|
140
|
+
"mode": {"default":"tls","enum":["insecure","starttls","tls"],"type":"string"},
|
|
141
|
+
"port": {"maximum":65535,"minimum":0,"type":"integer"},
|
|
142
|
+
},
|
|
143
|
+
"pbs:PUT /config/notifications/endpoints/webhook/{name}": {
|
|
144
|
+
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
145
|
+
"delete": {"each":true,"enum":["comment","disable","header","body","secret"],"type":"array"},
|
|
146
|
+
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
147
|
+
"method": {"default":"post","enum":["post","put","get"],"type":"string"},
|
|
148
|
+
"url": {"pattern":"^https?://(?:(?:(?:(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?)\\.)*(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?))|(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|\\[(?:(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))\\]))(?::(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?)|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))(?:/[^\u0000-\u001f]*)?$","patternSource":"/^https?://(?:(?:(?:(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?)\\.)*(?:[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?))|(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|\\[(?:(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))\\]))(?::(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?)|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){6})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:::(?:(?:[0-9a-fA-F]{1,4}):){5})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){4})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,1}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){3})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,2}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){2})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,3}(?:[0-9a-fA-F]{1,4}))?::(?:(?:[0-9a-fA-F]{1,4}):){1})(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,4}(?:[0-9a-fA-F]{1,4}))?::)(?:(?:(?:(?:(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9])\\.){3}(?:25[0-5]|(?:2[0-4]|1[0-9]|[1-9])?[0-9]))|(?:[0-9a-fA-F]{1,4}):(?:[0-9a-fA-F]{1,4}))))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,5}(?:[0-9a-fA-F]{1,4}))?::)(?:[0-9a-fA-F]{1,4}))|(?:(?:(?:(?:(?:[0-9a-fA-F]{1,4}):){0,6}(?:[0-9a-fA-F]{1,4}))?::))))(?:/[^\u0000-\u001f]*)?$/","type":"string"},
|
|
149
|
+
},
|
|
94
150
|
"pbs:PUT /config/notifications/matchers/{name}": {
|
|
95
151
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
152
|
+
"delete": {"each":true,"enum":["comment","disable","invert-match","match-calendar","match-field","match-severity","mode","target"],"type":"array"},
|
|
96
153
|
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
97
154
|
"mode": {"default":"all","enum":["all","any"],"type":"string"},
|
|
155
|
+
"target": {"each":true,"maxLength":32,"minLength":2,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"array"},
|
|
98
156
|
},
|
|
99
157
|
"pbs:PUT /config/prune/{id}": {
|
|
100
158
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
159
|
+
"delete": {"each":true,"enum":["comment","disable","ns","max-depth","keep-last","keep-hourly","keep-daily","keep-weekly","keep-monthly","keep-yearly"],"type":"array"},
|
|
101
160
|
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
102
161
|
"keep-daily": {"minimum":1,"type":"integer"},
|
|
103
162
|
"keep-hourly": {"minimum":1,"type":"integer"},
|
|
@@ -111,9 +170,11 @@ export const PBS_CONFIG_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
111
170
|
},
|
|
112
171
|
"pbs:PUT /config/sync/{id}": {
|
|
113
172
|
"active-encryption-key": {"maxLength":32,"minLength":3,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"string"},
|
|
173
|
+
"associated-key": {"each":true,"maxLength":32,"minLength":3,"pattern":"^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$","patternSource":"/^(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)$/","type":"array"},
|
|
114
174
|
"burst-in": {"maxLength":64,"minLength":1,"type":"string"},
|
|
115
175
|
"burst-out": {"maxLength":64,"minLength":1,"type":"string"},
|
|
116
176
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
177
|
+
"delete": {"each":true,"enum":["remote","owner","comment","schedule","remove-vanished","group-filter","rate-in","burst-in","rate-out","burst-out","ns","remote-ns","max-depth","transfer-last","encrypted-only","verified-only","run-on-mount","unmount-on-done","sync-direction","worker-threads","active-encryption-key","associated-key"],"type":"array"},
|
|
117
178
|
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
118
179
|
"max-depth": {"maximum":7,"minimum":0,"type":"integer"},
|
|
119
180
|
"ns": {"maxLength":256,"pattern":"^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$","patternSource":"/^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$/","type":"string"},
|
|
@@ -130,6 +191,7 @@ export const PBS_CONFIG_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
130
191
|
},
|
|
131
192
|
"pbs:PUT /config/verify/{id}": {
|
|
132
193
|
"comment": {"maxLength":128,"pattern":"^[^\\x00-\\x1f\\x7f]*$","patternSource":"/^[[:^cntrl:]]*$/","type":"string"},
|
|
194
|
+
"delete": {"each":true,"enum":["ignore-verified","comment","schedule","outdated-after","ns","max-depth","read-threads","verify-threads"],"type":"array"},
|
|
133
195
|
"digest": {"pattern":"^[a-f0-9]{64}$","patternSource":"/^[a-f0-9]{64}$/","type":"string"},
|
|
134
196
|
"max-depth": {"default":"7","maximum":7,"minimum":0,"type":"integer"},
|
|
135
197
|
"ns": {"maxLength":256,"pattern":"^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$","patternSource":"/^(?:(?:(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*)/){0,7}(?:[A-Za-z0-9_][A-Za-z0-9._\\-]*))?$/","type":"string"},
|
|
@@ -6,12 +6,17 @@
|
|
|
6
6
|
* sha256 9def8f13611184ee, read on a PVE cluster node from
|
|
7
7
|
* /usr/share/pve-docs/api-viewer/apidoc.js
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* 59 of this product's 258 POST/PUT endpoints are tabled across all areas: the ones
|
|
10
10
|
* this package writes to, named in its own source. Every other vendor write endpoint is UNTABLED
|
|
11
11
|
* and therefore unchecked at plan time.
|
|
12
12
|
*
|
|
13
13
|
* ⚠️ A `patternSource` with no `pattern` beside it is a rule that could NOT be carried into a
|
|
14
14
|
* JavaScript RegExp faithfully (codegen/pattern.ts). It is recorded and NOT enforced.
|
|
15
|
+
* ⚠️ `pattern` IS NOT THE VENDOR'S SPELLING. For PVE it is anchored, because PVE applies
|
|
16
|
+
* `m/^$pattern$/` itself (JSONSchema.pm); for PBS it is the vendor's own, which already
|
|
17
|
+
* carries its anchors. `patternSource` is the spelling to quote at a human — param-rules.ts.
|
|
18
|
+
* ⚠️ `each: true` means the value rules describe every ELEMENT of a repeated key, because the
|
|
19
|
+
* parameter is an array and stated its limits on `items`.
|
|
15
20
|
*/
|
|
16
21
|
import type { EndpointConstraints } from '../../constraints.ts';
|
|
17
22
|
|
|
@@ -29,11 +34,14 @@ export const PVE_ACCESS_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
29
34
|
"expire": {"minimum":0,"type":"integer"},
|
|
30
35
|
"firstname": {"maxLength":1024,"type":"string"},
|
|
31
36
|
"groups": {"format":"pve-groupid-list","type":"string"},
|
|
32
|
-
"keys": {"pattern":"[0-9a-zA-Z!=]{0,4096}","patternSource":"[0-9a-zA-Z!=]{0,4096}","type":"string"},
|
|
37
|
+
"keys": {"pattern":"^[0-9a-zA-Z!=]{0,4096}\\n?$","patternSource":"[0-9a-zA-Z!=]{0,4096}","type":"string"},
|
|
33
38
|
"lastname": {"maxLength":1024,"type":"string"},
|
|
34
39
|
"password": {"maxLength":64,"minLength":8,"type":"string"},
|
|
35
40
|
"userid": {"format":"pve-userid","maxLength":64,"required":true,"type":"string"},
|
|
36
41
|
},
|
|
42
|
+
"pve:POST /access/users/{userid}/token/{tokenid}": {
|
|
43
|
+
"expire": {"default":"same as user","minimum":0,"type":"integer"},
|
|
44
|
+
},
|
|
37
45
|
"pve:PUT /access/acl": {
|
|
38
46
|
"groups": {"format":"pve-groupid-list","type":"string"},
|
|
39
47
|
"path": {"required":true,"type":"string"},
|
|
@@ -51,7 +59,11 @@ export const PVE_ACCESS_CONSTRAINTS: Readonly<Record<string, EndpointConstraints
|
|
|
51
59
|
"expire": {"minimum":0,"type":"integer"},
|
|
52
60
|
"firstname": {"maxLength":1024,"type":"string"},
|
|
53
61
|
"groups": {"format":"pve-groupid-list","type":"string"},
|
|
54
|
-
"keys": {"pattern":"[0-9a-zA-Z!=]{0,4096}","patternSource":"[0-9a-zA-Z!=]{0,4096}","type":"string"},
|
|
62
|
+
"keys": {"pattern":"^[0-9a-zA-Z!=]{0,4096}\\n?$","patternSource":"[0-9a-zA-Z!=]{0,4096}","type":"string"},
|
|
55
63
|
"lastname": {"maxLength":1024,"type":"string"},
|
|
56
64
|
},
|
|
65
|
+
"pve:PUT /access/users/{userid}/token/{tokenid}": {
|
|
66
|
+
"delete": {"format":"pve-configid-list","type":"string"},
|
|
67
|
+
"expire": {"default":"same as user","minimum":0,"type":"integer"},
|
|
68
|
+
},
|
|
57
69
|
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated pve-manager parameter constraints for `/cluster/backup` — DO NOT EDIT BY HAND.
|
|
3
|
+
*
|
|
4
|
+
* Run: bun codegen/constraints.ts
|
|
5
|
+
* Manifest entry: `pve-apidoc` — pve-manager 9.2.11/f6997e698c7933ea
|
|
6
|
+
* sha256 9def8f13611184ee, read on a PVE cluster node from
|
|
7
|
+
* /usr/share/pve-docs/api-viewer/apidoc.js
|
|
8
|
+
*
|
|
9
|
+
* 59 of this product's 258 POST/PUT endpoints are tabled across all areas: the ones
|
|
10
|
+
* this package writes to, named in its own source. Every other vendor write endpoint is UNTABLED
|
|
11
|
+
* and therefore unchecked at plan time.
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ A `patternSource` with no `pattern` beside it is a rule that could NOT be carried into a
|
|
14
|
+
* JavaScript RegExp faithfully (codegen/pattern.ts). It is recorded and NOT enforced.
|
|
15
|
+
* ⚠️ `pattern` IS NOT THE VENDOR'S SPELLING. For PVE it is anchored, because PVE applies
|
|
16
|
+
* `m/^$pattern$/` itself (JSONSchema.pm); for PBS it is the vendor's own, which already
|
|
17
|
+
* carries its anchors. `patternSource` is the spelling to quote at a human — param-rules.ts.
|
|
18
|
+
* ⚠️ `each: true` means the value rules describe every ELEMENT of a repeated key, because the
|
|
19
|
+
* parameter is an array and stated its limits on `items`.
|
|
20
|
+
*/
|
|
21
|
+
import type { EndpointConstraints } from '../../constraints.ts';
|
|
22
|
+
|
|
23
|
+
export const PVE_CLUSTER_BACKUP_CONSTRAINTS: Readonly<Record<string, EndpointConstraints>> = {
|
|
24
|
+
"pve:POST /cluster/backup": {
|
|
25
|
+
"bwlimit": {"default":"0","minimum":0,"type":"integer"},
|
|
26
|
+
"comment": {"maxLength":512,"type":"string"},
|
|
27
|
+
"compress": {"default":"0","enum":["0","1","gzip","lzo","zstd"],"type":"string"},
|
|
28
|
+
"dow": {"default":"mon,tue,wed,thu,fri,sat,sun","format":"pve-day-of-week-list","type":"string"},
|
|
29
|
+
"exclude": {"format":"pve-vmid-list","type":"string"},
|
|
30
|
+
"fleecing": {"format":"backup-fleecing","type":"string"},
|
|
31
|
+
"id": {"format":"pve-configid","type":"string"},
|
|
32
|
+
"ionice": {"default":"7","maximum":8,"minimum":0,"type":"integer"},
|
|
33
|
+
"lockwait": {"default":"180","minimum":0,"type":"integer"},
|
|
34
|
+
"mailnotification": {"default":"always","enum":["always","failure"],"type":"string"},
|
|
35
|
+
"mailto": {"format":"email-or-username-list","type":"string"},
|
|
36
|
+
"mode": {"default":"snapshot","enum":["snapshot","suspend","stop"],"type":"string"},
|
|
37
|
+
"node": {"format":"pve-node","type":"string"},
|
|
38
|
+
"notes-template": {"maxLength":1024,"type":"string"},
|
|
39
|
+
"notification-mode": {"default":"auto","enum":["auto","legacy-sendmail","notification-system"],"type":"string"},
|
|
40
|
+
"pbs-change-detection-mode": {"enum":["legacy","data","metadata"],"type":"string"},
|
|
41
|
+
"performance": {"format":"backup-performance","type":"string"},
|
|
42
|
+
"prune-backups": {"default":"keep-all=1","format":"prune-backups","type":"string"},
|
|
43
|
+
"schedule": {"format":"pve-calendar-event","maxLength":128,"type":"string"},
|
|
44
|
+
"starttime": {"pattern":"^\\d{1,2}:\\d{1,2}\\n?$","patternSource":"\\d{1,2}:\\d{1,2}","type":"string"},
|
|
45
|
+
"stopwait": {"default":"10","minimum":0,"type":"integer"},
|
|
46
|
+
"storage": {"format":"pve-storage-id","type":"string"},
|
|
47
|
+
"vmid": {"format":"pve-vmid-list","type":"string"},
|
|
48
|
+
},
|
|
49
|
+
"pve:PUT /cluster/backup/{id}": {
|
|
50
|
+
"bwlimit": {"default":"0","minimum":0,"type":"integer"},
|
|
51
|
+
"comment": {"maxLength":512,"type":"string"},
|
|
52
|
+
"compress": {"default":"0","enum":["0","1","gzip","lzo","zstd"],"type":"string"},
|
|
53
|
+
"delete": {"format":"pve-configid-list","type":"string"},
|
|
54
|
+
"dow": {"format":"pve-day-of-week-list","type":"string"},
|
|
55
|
+
"exclude": {"format":"pve-vmid-list","type":"string"},
|
|
56
|
+
"fleecing": {"format":"backup-fleecing","type":"string"},
|
|
57
|
+
"ionice": {"default":"7","maximum":8,"minimum":0,"type":"integer"},
|
|
58
|
+
"lockwait": {"default":"180","minimum":0,"type":"integer"},
|
|
59
|
+
"mailnotification": {"default":"always","enum":["always","failure"],"type":"string"},
|
|
60
|
+
"mailto": {"format":"email-or-username-list","type":"string"},
|
|
61
|
+
"mode": {"default":"snapshot","enum":["snapshot","suspend","stop"],"type":"string"},
|
|
62
|
+
"node": {"format":"pve-node","type":"string"},
|
|
63
|
+
"notes-template": {"maxLength":1024,"type":"string"},
|
|
64
|
+
"notification-mode": {"default":"auto","enum":["auto","legacy-sendmail","notification-system"],"type":"string"},
|
|
65
|
+
"pbs-change-detection-mode": {"enum":["legacy","data","metadata"],"type":"string"},
|
|
66
|
+
"performance": {"format":"backup-performance","type":"string"},
|
|
67
|
+
"prune-backups": {"default":"keep-all=1","format":"prune-backups","type":"string"},
|
|
68
|
+
"schedule": {"format":"pve-calendar-event","maxLength":128,"type":"string"},
|
|
69
|
+
"starttime": {"pattern":"^\\d{1,2}:\\d{1,2}\\n?$","patternSource":"\\d{1,2}:\\d{1,2}","type":"string"},
|
|
70
|
+
"stopwait": {"default":"10","minimum":0,"type":"integer"},
|
|
71
|
+
"storage": {"format":"pve-storage-id","type":"string"},
|
|
72
|
+
"vmid": {"format":"pve-vmid-list","type":"string"},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated pve-manager parameter constraints for `/cluster/ceph` — DO NOT EDIT BY HAND.
|
|
3
|
+
*
|
|
4
|
+
* Run: bun codegen/constraints.ts
|
|
5
|
+
* Manifest entry: `pve-apidoc` — pve-manager 9.2.11/f6997e698c7933ea
|
|
6
|
+
* sha256 9def8f13611184ee, read on a PVE cluster node from
|
|
7
|
+
* /usr/share/pve-docs/api-viewer/apidoc.js
|
|
8
|
+
*
|
|
9
|
+
* 59 of this product's 258 POST/PUT endpoints are tabled across all areas: the ones
|
|
10
|
+
* this package writes to, named in its own source. Every other vendor write endpoint is UNTABLED
|
|
11
|
+
* and therefore unchecked at plan time.
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ A `patternSource` with no `pattern` beside it is a rule that could NOT be carried into a
|
|
14
|
+
* JavaScript RegExp faithfully (codegen/pattern.ts). It is recorded and NOT enforced.
|
|
15
|
+
* ⚠️ `pattern` IS NOT THE VENDOR'S SPELLING. For PVE it is anchored, because PVE applies
|
|
16
|
+
* `m/^$pattern$/` itself (JSONSchema.pm); for PBS it is the vendor's own, which already
|
|
17
|
+
* carries its anchors. `patternSource` is the spelling to quote at a human — param-rules.ts.
|
|
18
|
+
* ⚠️ `each: true` means the value rules describe every ELEMENT of a repeated key, because the
|
|
19
|
+
* parameter is an array and stated its limits on `items`.
|
|
20
|
+
*/
|
|
21
|
+
import type { EndpointConstraints } from '../../constraints.ts';
|
|
22
|
+
|
|
23
|
+
export const PVE_CLUSTER_CEPH_CONSTRAINTS: Readonly<Record<string, EndpointConstraints>> = {
|
|
24
|
+
"pve:PUT /cluster/ceph/flags/{flag}": {
|
|
25
|
+
"value": {"required":true,"type":"boolean"},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated pve-manager parameter constraints for `/cluster/firewall` — DO NOT EDIT BY HAND.
|
|
3
|
+
*
|
|
4
|
+
* Run: bun codegen/constraints.ts
|
|
5
|
+
* Manifest entry: `pve-apidoc` — pve-manager 9.2.11/f6997e698c7933ea
|
|
6
|
+
* sha256 9def8f13611184ee, read on a PVE cluster node from
|
|
7
|
+
* /usr/share/pve-docs/api-viewer/apidoc.js
|
|
8
|
+
*
|
|
9
|
+
* 59 of this product's 258 POST/PUT endpoints are tabled across all areas: the ones
|
|
10
|
+
* this package writes to, named in its own source. Every other vendor write endpoint is UNTABLED
|
|
11
|
+
* and therefore unchecked at plan time.
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ A `patternSource` with no `pattern` beside it is a rule that could NOT be carried into a
|
|
14
|
+
* JavaScript RegExp faithfully (codegen/pattern.ts). It is recorded and NOT enforced.
|
|
15
|
+
* ⚠️ `pattern` IS NOT THE VENDOR'S SPELLING. For PVE it is anchored, because PVE applies
|
|
16
|
+
* `m/^$pattern$/` itself (JSONSchema.pm); for PBS it is the vendor's own, which already
|
|
17
|
+
* carries its anchors. `patternSource` is the spelling to quote at a human — param-rules.ts.
|
|
18
|
+
* ⚠️ `each: true` means the value rules describe every ELEMENT of a repeated key, because the
|
|
19
|
+
* parameter is an array and stated its limits on `items`.
|
|
20
|
+
*/
|
|
21
|
+
import type { EndpointConstraints } from '../../constraints.ts';
|
|
22
|
+
|
|
23
|
+
export const PVE_CLUSTER_FIREWALL_CONSTRAINTS: Readonly<Record<string, EndpointConstraints>> = {
|
|
24
|
+
"pve:POST /cluster/firewall/aliases": {
|
|
25
|
+
"cidr": {"format":"IPorCIDR","required":true,"type":"string"},
|
|
26
|
+
"comment": {"format":"pve-fw-comment-spec","type":"string"},
|
|
27
|
+
"name": {"maxLength":64,"minLength":2,"pattern":"^[A-Za-z][A-Za-z0-9\\-\\_]+\\n?$","patternSource":"[A-Za-z][A-Za-z0-9\\-\\_]+","required":true,"type":"string"},
|
|
28
|
+
},
|
|
29
|
+
"pve:PUT /cluster/firewall/aliases/{name}": {
|
|
30
|
+
"cidr": {"format":"IPorCIDR","required":true,"type":"string"},
|
|
31
|
+
"comment": {"format":"pve-fw-comment-spec","type":"string"},
|
|
32
|
+
"digest": {"maxLength":64,"type":"string"},
|
|
33
|
+
"rename": {"maxLength":64,"minLength":2,"pattern":"^[A-Za-z][A-Za-z0-9\\-\\_]+\\n?$","patternSource":"[A-Za-z][A-Za-z0-9\\-\\_]+","type":"string"},
|
|
34
|
+
},
|
|
35
|
+
};
|