@homeflare/alchemy 0.1.0
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/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/cloudflare/client.d.ts +45 -0
- package/dist/cloudflare/client.d.ts.map +1 -0
- package/dist/cloudflare/index.d.ts +11 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +129 -0
- package/dist/cloudflare/index.js.map +13 -0
- package/dist/cloudflare/lock-rules.d.ts +50 -0
- package/dist/cloudflare/lock-rules.d.ts.map +1 -0
- package/dist/cloudflare/providers.d.ts +19 -0
- package/dist/cloudflare/providers.d.ts.map +1 -0
- package/dist/cloudflare/r2-bucket-lock.d.ts +100 -0
- package/dist/cloudflare/r2-bucket-lock.d.ts.map +1 -0
- package/dist/forgejo/branch-protection-form.d.ts +19 -0
- package/dist/forgejo/branch-protection-form.d.ts.map +1 -0
- package/dist/forgejo/branch-protection.d.ts +47 -0
- package/dist/forgejo/branch-protection.d.ts.map +1 -0
- package/dist/forgejo/client.d.ts +37 -0
- package/dist/forgejo/client.d.ts.map +1 -0
- package/dist/forgejo/index.d.ts +18 -0
- package/dist/forgejo/index.d.ts.map +1 -0
- package/dist/forgejo/index.js +479 -0
- package/dist/forgejo/index.js.map +21 -0
- package/dist/forgejo/org-actions-secrets.d.ts +45 -0
- package/dist/forgejo/org-actions-secrets.d.ts.map +1 -0
- package/dist/forgejo/org-label.d.ts +46 -0
- package/dist/forgejo/org-label.d.ts.map +1 -0
- package/dist/forgejo/org-team.d.ts +42 -0
- package/dist/forgejo/org-team.d.ts.map +1 -0
- package/dist/forgejo/repo-webhook-form.d.ts +27 -0
- package/dist/forgejo/repo-webhook-form.d.ts.map +1 -0
- package/dist/forgejo/repo-webhook.d.ts +46 -0
- package/dist/forgejo/repo-webhook.d.ts.map +1 -0
- package/dist/forgejo/repository.d.ts +45 -0
- package/dist/forgejo/repository.d.ts.map +1 -0
- package/dist/forgejo/resource.d.ts +83 -0
- package/dist/forgejo/resource.d.ts.map +1 -0
- package/dist/forgejo/team-member.d.ts +39 -0
- package/dist/forgejo/team-member.d.ts.map +1 -0
- package/dist/forgejo/values.d.ts +24 -0
- package/dist/forgejo/values.d.ts.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +9 -0
- package/dist/openbao/auth-role-form.d.ts +38 -0
- package/dist/openbao/auth-role-form.d.ts.map +1 -0
- package/dist/openbao/auth-role.d.ts +20 -0
- package/dist/openbao/auth-role.d.ts.map +1 -0
- package/dist/openbao/bao-address.d.ts +72 -0
- package/dist/openbao/bao-address.d.ts.map +1 -0
- package/dist/openbao/bao-http.d.ts +71 -0
- package/dist/openbao/bao-http.d.ts.map +1 -0
- package/dist/openbao/bao-status.d.ts +74 -0
- package/dist/openbao/bao-status.d.ts.map +1 -0
- package/dist/openbao/cloudflare-group-scope.d.ts +73 -0
- package/dist/openbao/cloudflare-group-scope.d.ts.map +1 -0
- package/dist/openbao/cloudflare-parity-catalog.d.ts +28 -0
- package/dist/openbao/cloudflare-parity-catalog.d.ts.map +1 -0
- package/dist/openbao/cloudflare-parity-snapshot.d.ts +31 -0
- package/dist/openbao/cloudflare-parity-snapshot.d.ts.map +1 -0
- package/dist/openbao/cloudflare-parity.d.ts +14 -0
- package/dist/openbao/cloudflare-parity.d.ts.map +1 -0
- package/dist/openbao/cloudflare-permission-groups-solve.d.ts +85 -0
- package/dist/openbao/cloudflare-permission-groups-solve.d.ts.map +1 -0
- package/dist/openbao/cloudflare-permission-groups.d.ts +87 -0
- package/dist/openbao/cloudflare-permission-groups.d.ts.map +1 -0
- package/dist/openbao/cloudflare-policy.d.ts +65 -0
- package/dist/openbao/cloudflare-policy.d.ts.map +1 -0
- package/dist/openbao/cloudflare-role-form.d.ts +110 -0
- package/dist/openbao/cloudflare-role-form.d.ts.map +1 -0
- package/dist/openbao/cloudflare-role-wire.d.ts +27 -0
- package/dist/openbao/cloudflare-role-wire.d.ts.map +1 -0
- package/dist/openbao/cloudflare-role.d.ts +35 -0
- package/dist/openbao/cloudflare-role.d.ts.map +1 -0
- package/dist/openbao/cloudflare-roles-config.d.ts +67 -0
- package/dist/openbao/cloudflare-roles-config.d.ts.map +1 -0
- package/dist/openbao/cloudflare-roles-expand.d.ts +76 -0
- package/dist/openbao/cloudflare-roles-expand.d.ts.map +1 -0
- package/dist/openbao/digest.d.ts +24 -0
- package/dist/openbao/digest.d.ts.map +1 -0
- package/dist/openbao/fake-bao.d.ts +40 -0
- package/dist/openbao/fake-bao.d.ts.map +1 -0
- package/dist/openbao/forgejo-bootstrap-parse.d.ts +46 -0
- package/dist/openbao/forgejo-bootstrap-parse.d.ts.map +1 -0
- package/dist/openbao/forgejo-bootstrap.d.ts +29 -0
- package/dist/openbao/forgejo-bootstrap.d.ts.map +1 -0
- package/dist/openbao/index.d.ts +18 -0
- package/dist/openbao/index.d.ts.map +1 -0
- package/dist/openbao/index.js +1158 -0
- package/dist/openbao/index.js.map +33 -0
- package/dist/openbao/mount-form.d.ts +60 -0
- package/dist/openbao/mount-form.d.ts.map +1 -0
- package/dist/openbao/mount-wire.d.ts +24 -0
- package/dist/openbao/mount-wire.d.ts.map +1 -0
- package/dist/openbao/mount.d.ts +20 -0
- package/dist/openbao/mount.d.ts.map +1 -0
- package/dist/openbao/pki-role-form.d.ts +118 -0
- package/dist/openbao/pki-role-form.d.ts.map +1 -0
- package/dist/openbao/pki-role.d.ts +50 -0
- package/dist/openbao/pki-role.d.ts.map +1 -0
- package/dist/openbao/policy-assembly.d.ts +13 -0
- package/dist/openbao/policy-assembly.d.ts.map +1 -0
- package/dist/openbao/policy-wire.d.ts +41 -0
- package/dist/openbao/policy-wire.d.ts.map +1 -0
- package/dist/openbao/policy.d.ts +83 -0
- package/dist/openbao/policy.d.ts.map +1 -0
- package/dist/openbao/proxmox-role-form.d.ts +92 -0
- package/dist/openbao/proxmox-role-form.d.ts.map +1 -0
- package/dist/openbao/proxmox-role.d.ts +47 -0
- package/dist/openbao/proxmox-role.d.ts.map +1 -0
- package/dist/openbao/ssh-role-form.d.ts +99 -0
- package/dist/openbao/ssh-role-form.d.ts.map +1 -0
- package/dist/openbao/ssh-role.d.ts +43 -0
- package/dist/openbao/ssh-role.d.ts.map +1 -0
- package/dist/proxmox/acl.d.ts +72 -0
- package/dist/proxmox/acl.d.ts.map +1 -0
- package/dist/proxmox/api-token-form.d.ts +59 -0
- package/dist/proxmox/api-token-form.d.ts.map +1 -0
- package/dist/proxmox/api-token.d.ts +159 -0
- package/dist/proxmox/api-token.d.ts.map +1 -0
- package/dist/proxmox/backup-job.d.ts +112 -0
- package/dist/proxmox/backup-job.d.ts.map +1 -0
- package/dist/proxmox/ceph-daemon-form.d.ts +70 -0
- package/dist/proxmox/ceph-daemon-form.d.ts.map +1 -0
- package/dist/proxmox/ceph-daemon.d.ts +162 -0
- package/dist/proxmox/ceph-daemon.d.ts.map +1 -0
- package/dist/proxmox/ceph-flag.d.ts +131 -0
- package/dist/proxmox/ceph-flag.d.ts.map +1 -0
- package/dist/proxmox/ceph-fs-wire.d.ts +106 -0
- package/dist/proxmox/ceph-fs-wire.d.ts.map +1 -0
- package/dist/proxmox/ceph-fs.d.ts +124 -0
- package/dist/proxmox/ceph-fs.d.ts.map +1 -0
- package/dist/proxmox/ceph-osd-tree.d.ts +154 -0
- package/dist/proxmox/ceph-osd-tree.d.ts.map +1 -0
- package/dist/proxmox/ceph-osd-write.d.ts +36 -0
- package/dist/proxmox/ceph-osd-write.d.ts.map +1 -0
- package/dist/proxmox/ceph-osd.d.ts +102 -0
- package/dist/proxmox/ceph-osd.d.ts.map +1 -0
- package/dist/proxmox/ceph-pool-form.d.ts +217 -0
- package/dist/proxmox/ceph-pool-form.d.ts.map +1 -0
- package/dist/proxmox/ceph-pool-settle.d.ts +39 -0
- package/dist/proxmox/ceph-pool-settle.d.ts.map +1 -0
- package/dist/proxmox/ceph-pool.d.ts +48 -0
- package/dist/proxmox/ceph-pool.d.ts.map +1 -0
- package/dist/proxmox/client.d.ts +64 -0
- package/dist/proxmox/client.d.ts.map +1 -0
- package/dist/proxmox/credentials.d.ts +153 -0
- package/dist/proxmox/credentials.d.ts.map +1 -0
- package/dist/proxmox/firewall-alias-form.d.ts +98 -0
- package/dist/proxmox/firewall-alias-form.d.ts.map +1 -0
- package/dist/proxmox/firewall-alias.d.ts +141 -0
- package/dist/proxmox/firewall-alias.d.ts.map +1 -0
- package/dist/proxmox/generated/pbs.d.ts +388 -0
- package/dist/proxmox/generated/pbs.d.ts.map +1 -0
- package/dist/proxmox/generated/pve.d.ts +4713 -0
- package/dist/proxmox/generated/pve.d.ts.map +1 -0
- package/dist/proxmox/group.d.ts +104 -0
- package/dist/proxmox/group.d.ts.map +1 -0
- package/dist/proxmox/ha-resource.d.ts +104 -0
- package/dist/proxmox/ha-resource.d.ts.map +1 -0
- package/dist/proxmox/ha-rule-form.d.ts +103 -0
- package/dist/proxmox/ha-rule-form.d.ts.map +1 -0
- package/dist/proxmox/ha-rule.d.ts +156 -0
- package/dist/proxmox/ha-rule.d.ts.map +1 -0
- package/dist/proxmox/index.d.ts +43 -0
- package/dist/proxmox/index.d.ts.map +1 -0
- package/dist/proxmox/index.js +2322 -0
- package/dist/proxmox/index.js.map +70 -0
- package/dist/proxmox/lease-cache.d.ts +98 -0
- package/dist/proxmox/lease-cache.d.ts.map +1 -0
- package/dist/proxmox/lxc.d.ts +59 -0
- package/dist/proxmox/lxc.d.ts.map +1 -0
- package/dist/proxmox/members.d.ts +56 -0
- package/dist/proxmox/members.d.ts.map +1 -0
- package/dist/proxmox/metric-server-form.d.ts +53 -0
- package/dist/proxmox/metric-server-form.d.ts.map +1 -0
- package/dist/proxmox/metric-server-otel.d.ts +49 -0
- package/dist/proxmox/metric-server-otel.d.ts.map +1 -0
- package/dist/proxmox/metric-server.d.ts +123 -0
- package/dist/proxmox/metric-server.d.ts.map +1 -0
- package/dist/proxmox/network-apply-read.d.ts +93 -0
- package/dist/proxmox/network-apply-read.d.ts.map +1 -0
- package/dist/proxmox/network-apply.d.ts +102 -0
- package/dist/proxmox/network-apply.d.ts.map +1 -0
- package/dist/proxmox/node-network-form.d.ts +128 -0
- package/dist/proxmox/node-network-form.d.ts.map +1 -0
- package/dist/proxmox/node-network.d.ts +173 -0
- package/dist/proxmox/node-network.d.ts.map +1 -0
- package/dist/proxmox/notification-target-form.d.ts +44 -0
- package/dist/proxmox/notification-target-form.d.ts.map +1 -0
- package/dist/proxmox/notification-target.d.ts +146 -0
- package/dist/proxmox/notification-target.d.ts.map +1 -0
- package/dist/proxmox/pbs-datastore-form.d.ts +147 -0
- package/dist/proxmox/pbs-datastore-form.d.ts.map +1 -0
- package/dist/proxmox/pbs-datastore-guard.d.ts +55 -0
- package/dist/proxmox/pbs-datastore-guard.d.ts.map +1 -0
- package/dist/proxmox/pbs-datastore.d.ts +140 -0
- package/dist/proxmox/pbs-datastore.d.ts.map +1 -0
- package/dist/proxmox/pbs-prune-job-form.d.ts +97 -0
- package/dist/proxmox/pbs-prune-job-form.d.ts.map +1 -0
- package/dist/proxmox/pbs-prune-job.d.ts +168 -0
- package/dist/proxmox/pbs-prune-job.d.ts.map +1 -0
- package/dist/proxmox/pbs-sync-job-form.d.ts +83 -0
- package/dist/proxmox/pbs-sync-job-form.d.ts.map +1 -0
- package/dist/proxmox/pbs-sync-job.d.ts +246 -0
- package/dist/proxmox/pbs-sync-job.d.ts.map +1 -0
- package/dist/proxmox/pbs-verify-job-form.d.ts +114 -0
- package/dist/proxmox/pbs-verify-job-form.d.ts.map +1 -0
- package/dist/proxmox/pbs-verify-job.d.ts +145 -0
- package/dist/proxmox/pbs-verify-job.d.ts.map +1 -0
- package/dist/proxmox/pool.d.ts +42 -0
- package/dist/proxmox/pool.d.ts.map +1 -0
- package/dist/proxmox/qemu.d.ts +46 -0
- package/dist/proxmox/qemu.d.ts.map +1 -0
- package/dist/proxmox/replication-job-form.d.ts +71 -0
- package/dist/proxmox/replication-job-form.d.ts.map +1 -0
- package/dist/proxmox/replication-job.d.ts +162 -0
- package/dist/proxmox/replication-job.d.ts.map +1 -0
- package/dist/proxmox/resource.d.ts +157 -0
- package/dist/proxmox/resource.d.ts.map +1 -0
- package/dist/proxmox/role.d.ts +97 -0
- package/dist/proxmox/role.d.ts.map +1 -0
- package/dist/proxmox/sdn-apply-read.d.ts +80 -0
- package/dist/proxmox/sdn-apply-read.d.ts.map +1 -0
- package/dist/proxmox/sdn-apply.d.ts +63 -0
- package/dist/proxmox/sdn-apply.d.ts.map +1 -0
- package/dist/proxmox/sdn-subnet-form.d.ts +111 -0
- package/dist/proxmox/sdn-subnet-form.d.ts.map +1 -0
- package/dist/proxmox/sdn-subnet.d.ts +161 -0
- package/dist/proxmox/sdn-subnet.d.ts.map +1 -0
- package/dist/proxmox/sdn-vnet.d.ts +113 -0
- package/dist/proxmox/sdn-vnet.d.ts.map +1 -0
- package/dist/proxmox/sdn-zone.d.ts +126 -0
- package/dist/proxmox/sdn-zone.d.ts.map +1 -0
- package/dist/proxmox/storage.d.ts +120 -0
- package/dist/proxmox/storage.d.ts.map +1 -0
- package/dist/proxmox/user.d.ts +107 -0
- package/dist/proxmox/user.d.ts.map +1 -0
- package/dist/proxmox/values.d.ts +134 -0
- package/dist/proxmox/values.d.ts.map +1 -0
- package/dist/proxmox/zfs-pool-write.d.ts +76 -0
- package/dist/proxmox/zfs-pool-write.d.ts.map +1 -0
- package/dist/proxmox/zfs-pool.d.ts +146 -0
- package/dist/proxmox/zfs-pool.d.ts.map +1 -0
- package/dist/talos/credentials.d.ts +30 -0
- package/dist/talos/credentials.d.ts.map +1 -0
- package/dist/talos/index.d.ts +15 -0
- package/dist/talos/index.d.ts.map +1 -0
- package/dist/talos/index.js +392 -0
- package/dist/talos/index.js.map +16 -0
- package/dist/talos/kubeconfig.d.ts +53 -0
- package/dist/talos/kubeconfig.d.ts.map +1 -0
- package/dist/talos/resource.d.ts +32 -0
- package/dist/talos/resource.d.ts.map +1 -0
- package/dist/talos/talos-bootstrap.d.ts +27 -0
- package/dist/talos/talos-bootstrap.d.ts.map +1 -0
- package/dist/talos/talos-cluster-health.d.ts +36 -0
- package/dist/talos/talos-cluster-health.d.ts.map +1 -0
- package/dist/talos/talos-machine-config.d.ts +41 -0
- package/dist/talos/talos-machine-config.d.ts.map +1 -0
- package/dist/talos/talosctl.d.ts +29 -0
- package/dist/talos/talosctl.d.ts.map +1 -0
- package/dist/talos/values.d.ts +20 -0
- package/dist/talos/values.d.ts.map +1 -0
- package/package.json +57 -0
- package/src/cloudflare/client.ts +76 -0
- package/src/cloudflare/index.ts +10 -0
- package/src/cloudflare/lock-rules.ts +60 -0
- package/src/cloudflare/providers.ts +23 -0
- package/src/cloudflare/r2-bucket-lock.ts +220 -0
- package/src/forgejo/branch-protection-form.ts +29 -0
- package/src/forgejo/branch-protection.ts +101 -0
- package/src/forgejo/client.ts +136 -0
- package/src/forgejo/index.ts +17 -0
- package/src/forgejo/org-actions-secrets.ts +99 -0
- package/src/forgejo/org-label.ts +100 -0
- package/src/forgejo/org-team.ts +105 -0
- package/src/forgejo/repo-webhook-form.ts +47 -0
- package/src/forgejo/repo-webhook.ts +118 -0
- package/src/forgejo/repository.ts +126 -0
- package/src/forgejo/resource.ts +171 -0
- package/src/forgejo/team-member.ts +97 -0
- package/src/forgejo/values.test.ts +48 -0
- package/src/forgejo/values.ts +61 -0
- package/src/index.ts +18 -0
- package/src/openbao/auth-role-form.ts +112 -0
- package/src/openbao/auth-role.ts +101 -0
- package/src/openbao/bao-address.test.ts +89 -0
- package/src/openbao/bao-address.ts +97 -0
- package/src/openbao/bao-http-gate.test.ts +88 -0
- package/src/openbao/bao-http-unix.test.ts +70 -0
- package/src/openbao/bao-http.test.ts +161 -0
- package/src/openbao/bao-http.ts +185 -0
- package/src/openbao/bao-status.test.ts +114 -0
- package/src/openbao/bao-status.ts +137 -0
- package/src/openbao/cloudflare-group-scope.test.ts +103 -0
- package/src/openbao/cloudflare-group-scope.ts +83 -0
- package/src/openbao/cloudflare-parity-catalog.ts +104 -0
- package/src/openbao/cloudflare-parity-snapshot.ts +84 -0
- package/src/openbao/cloudflare-parity.ts +152 -0
- package/src/openbao/cloudflare-permission-groups-solve.test.ts +171 -0
- package/src/openbao/cloudflare-permission-groups-solve.ts +197 -0
- package/src/openbao/cloudflare-permission-groups.test.ts +369 -0
- package/src/openbao/cloudflare-permission-groups.ts +299 -0
- package/src/openbao/cloudflare-policy.ts +180 -0
- package/src/openbao/cloudflare-role-form.test.ts +177 -0
- package/src/openbao/cloudflare-role-form.ts +183 -0
- package/src/openbao/cloudflare-role-wire.test.ts +132 -0
- package/src/openbao/cloudflare-role-wire.ts +41 -0
- package/src/openbao/cloudflare-role.ts +189 -0
- package/src/openbao/cloudflare-roles-config.ts +230 -0
- package/src/openbao/cloudflare-roles-expand-bucket.test.ts +134 -0
- package/src/openbao/cloudflare-roles-expand.ts +231 -0
- package/src/openbao/digest.ts +26 -0
- package/src/openbao/fake-bao.ts +84 -0
- package/src/openbao/forgejo-bootstrap-parse.test.ts +76 -0
- package/src/openbao/forgejo-bootstrap-parse.ts +90 -0
- package/src/openbao/forgejo-bootstrap.ts +181 -0
- package/src/openbao/index.ts +17 -0
- package/src/openbao/mount-form.ts +147 -0
- package/src/openbao/mount-wire.test.ts +108 -0
- package/src/openbao/mount-wire.ts +79 -0
- package/src/openbao/mount.ts +132 -0
- package/src/openbao/pki-role-form.ts +248 -0
- package/src/openbao/pki-role.ts +202 -0
- package/src/openbao/policy-assembly.test.ts +28 -0
- package/src/openbao/policy-assembly.ts +13 -0
- package/src/openbao/policy-wire.test.ts +90 -0
- package/src/openbao/policy-wire.ts +53 -0
- package/src/openbao/policy.ts +212 -0
- package/src/openbao/proxmox-role-form.ts +174 -0
- package/src/openbao/proxmox-role.ts +214 -0
- package/src/openbao/ssh-role-form.ts +248 -0
- package/src/openbao/ssh-role.ts +240 -0
- package/src/proxmox/acl.ts +267 -0
- package/src/proxmox/api-token-form.ts +122 -0
- package/src/proxmox/api-token.ts +222 -0
- package/src/proxmox/backup-job.ts +213 -0
- package/src/proxmox/ceph-daemon-form.ts +84 -0
- package/src/proxmox/ceph-daemon.ts +243 -0
- package/src/proxmox/ceph-flag.ts +249 -0
- package/src/proxmox/ceph-fs-wire.ts +246 -0
- package/src/proxmox/ceph-fs.ts +249 -0
- package/src/proxmox/ceph-osd-tree.ts +193 -0
- package/src/proxmox/ceph-osd-write.ts +76 -0
- package/src/proxmox/ceph-osd.ts +244 -0
- package/src/proxmox/ceph-pool-form.ts +249 -0
- package/src/proxmox/ceph-pool-settle.ts +70 -0
- package/src/proxmox/ceph-pool.ts +212 -0
- package/src/proxmox/client.test.ts +185 -0
- package/src/proxmox/client.ts +240 -0
- package/src/proxmox/credentials.test.ts +144 -0
- package/src/proxmox/credentials.ts +254 -0
- package/src/proxmox/firewall-alias-form.ts +112 -0
- package/src/proxmox/firewall-alias.ts +208 -0
- package/src/proxmox/generated/pbs.ts +461 -0
- package/src/proxmox/generated/pve.ts +7344 -0
- package/src/proxmox/group.ts +199 -0
- package/src/proxmox/ha-resource.ts +169 -0
- package/src/proxmox/ha-rule-form.ts +185 -0
- package/src/proxmox/ha-rule.ts +240 -0
- package/src/proxmox/index.ts +42 -0
- package/src/proxmox/lease-cache.test.ts +163 -0
- package/src/proxmox/lease-cache.ts +131 -0
- package/src/proxmox/lxc.ts +117 -0
- package/src/proxmox/members.test.ts +54 -0
- package/src/proxmox/members.ts +174 -0
- package/src/proxmox/metric-server-form.ts +128 -0
- package/src/proxmox/metric-server-otel.ts +99 -0
- package/src/proxmox/metric-server.ts +214 -0
- package/src/proxmox/network-apply-read.ts +228 -0
- package/src/proxmox/network-apply.ts +244 -0
- package/src/proxmox/node-network-form.ts +213 -0
- package/src/proxmox/node-network.ts +243 -0
- package/src/proxmox/notification-target-form.ts +104 -0
- package/src/proxmox/notification-target.ts +222 -0
- package/src/proxmox/pbs-datastore-form.ts +248 -0
- package/src/proxmox/pbs-datastore-guard.ts +105 -0
- package/src/proxmox/pbs-datastore.ts +271 -0
- package/src/proxmox/pbs-prune-job-form.ts +208 -0
- package/src/proxmox/pbs-prune-job.ts +227 -0
- package/src/proxmox/pbs-sync-job-form.ts +234 -0
- package/src/proxmox/pbs-sync-job.ts +258 -0
- package/src/proxmox/pbs-verify-job-form.ts +131 -0
- package/src/proxmox/pbs-verify-job.ts +227 -0
- package/src/proxmox/pool.test.ts +42 -0
- package/src/proxmox/pool.ts +80 -0
- package/src/proxmox/qemu.ts +89 -0
- package/src/proxmox/replication-job-form.ts +89 -0
- package/src/proxmox/replication-job.ts +248 -0
- package/src/proxmox/resource.ts +257 -0
- package/src/proxmox/role.ts +161 -0
- package/src/proxmox/sdn-apply-read.test.ts +152 -0
- package/src/proxmox/sdn-apply-read.ts +189 -0
- package/src/proxmox/sdn-apply.ts +154 -0
- package/src/proxmox/sdn-subnet-form.ts +156 -0
- package/src/proxmox/sdn-subnet.ts +238 -0
- package/src/proxmox/sdn-vnet.ts +228 -0
- package/src/proxmox/sdn-zone.ts +246 -0
- package/src/proxmox/storage.ts +245 -0
- package/src/proxmox/user.ts +214 -0
- package/src/proxmox/values.test.ts +193 -0
- package/src/proxmox/values.ts +203 -0
- package/src/proxmox/zfs-pool-write.ts +130 -0
- package/src/proxmox/zfs-pool.ts +253 -0
- package/src/talos/credentials.ts +136 -0
- package/src/talos/index.ts +14 -0
- package/src/talos/kubeconfig.ts +170 -0
- package/src/talos/resource.ts +31 -0
- package/src/talos/talos-bootstrap.ts +109 -0
- package/src/talos/talos-cluster-health.ts +119 -0
- package/src/talos/talos-machine-config.ts +146 -0
- package/src/talos/talosctl.ts +94 -0
- package/src/talos/values.test.ts +80 -0
- package/src/talos/values.ts +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ha-resource.d.ts","sourceRoot":"","sources":["../../src/proxmox/ha-resource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAe,MAAM,eAAe,CAAC;AAGnF;;;;;;;GAOG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,0FAA0F;IAC1F,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,8FAA8F;IAC9F,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAkB,SAAQ,QAAQ,CACjD,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,KAAK,EACL,eAAe,CAChB;CAAG;AAEJ,eAAO,MAAM,iBAAiB,oDAAoD,CAAC;AAsDnF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,yBAAyB,uIACuD,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An HA rule's props as the form PVE wants, and the two lists PVE re-spells on the way back.
|
|
3
|
+
*
|
|
4
|
+
* ★ SPLIT OUT OF ha-rule.ts TO KEEP BOTH FILES UNDER THE 250-LINE CAP, and the seam is the same
|
|
5
|
+
* one metric-server-form.ts and node-network-form.ts cut: this file answers "how does a
|
|
6
|
+
* declaration become a PVE form, and what shape does PVE hand back", ha-rule.ts answers "what is
|
|
7
|
+
* an HA rule and when has it changed". Nothing here reads the cluster or decides a diff.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ THE `import type` BACK TO ha-rule.ts IS A CYCLE ON PAPER ONLY. It is type-only, so it is
|
|
10
|
+
* erased before anything runs, and `HaRuleProps` stays public in the file declaring the resource.
|
|
11
|
+
*/
|
|
12
|
+
import type { HaRuleProps } from './ha-rule.ts';
|
|
13
|
+
/**
|
|
14
|
+
* A `<node>[:<pri>]` list, spelled the way PVE gives it back.
|
|
15
|
+
*
|
|
16
|
+
* ⛔ THIS IS NOT `csv`, AND THE DIFFERENCE IS A FOREVER-DIFF. MEASURED by reading
|
|
17
|
+
* `/usr/share/perl5/PVE/HA/Rules/NodeAffinity.pm` on n2 (2026-09-13): `decode_plugin_value`
|
|
18
|
+
* turns the list into a HASH keyed by node name, and `encode_plugin_value` rebuilds it with
|
|
19
|
+
* `for my $node (sort keys %$value)` — sorted by NODE NAME, never by the token — emitting the
|
|
20
|
+
* bare name whenever the priority is falsy, because `PVE::HA::Tools::parse_node_priority` reads
|
|
21
|
+
* a missing priority as 0. So a declared `n3:1,n2:0` is handed back as `n2,n3:1`: re-ordered AND
|
|
22
|
+
* re-spelled. Compare the raw strings and every plan reports an update, forever.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ SORTED BY NAME, NOT BY TOKEN, AND THE TWO GENUINELY DIVERGE. `csv` sorts whole tokens. Node
|
|
25
|
+
* names may contain `-` — `parse_node_priority`'s own regex is
|
|
26
|
+
* `[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?` — and `-` (0x2D) sorts before `:` (0x3A), so `n2-a`
|
|
27
|
+
* and `n2:5` come out in one order by token and the other by name. PVE sorts by the name, so
|
|
28
|
+
* this does too.
|
|
29
|
+
*
|
|
30
|
+
* ⚠️ LAST ENTRY WINS FOR A REPEATED NODE, because PVE's decode is a hash assignment and a hash
|
|
31
|
+
* keeps one value per key. A declaration saying `n2:1,n2:5` is stored as `n2:5`; matching that
|
|
32
|
+
* is what a Map gives for free.
|
|
33
|
+
*/
|
|
34
|
+
export declare const nodeList: (value: readonly string[] | string | undefined) => string;
|
|
35
|
+
/**
|
|
36
|
+
* PVE's own verdict on whether the rule can be satisfied, flattened to one reportable string.
|
|
37
|
+
*
|
|
38
|
+
* ⚠️ COMPUTED, NEVER DECLARED, AND NEVER COMPARED. `PVE::API2::HA::Rules` runs `check_feasibility`
|
|
39
|
+
* over the WHOLE rule set on every read and attaches whatever it finds to each rule as
|
|
40
|
+
* `errors => { <option> => "<message>, <message>" }`. It therefore changes when somebody else's
|
|
41
|
+
* rule changes, and none of it is a parameter any write accepts. It belongs in attributes so a
|
|
42
|
+
* plan can show that PVE considers this rule unsatisfiable, and nowhere near `matches`.
|
|
43
|
+
*/
|
|
44
|
+
export declare const problems: (value: unknown) => string;
|
|
45
|
+
/**
|
|
46
|
+
* A comment as PVE will actually STORE it, which is not always the string it was handed.
|
|
47
|
+
*
|
|
48
|
+
* ⛔ PVE DECODES `%XX` OUT OF EVERY COMMENT ON THE WAY IN AND NEVER PUTS IT BACK. MEASURED:
|
|
49
|
+
* `PVE::SectionConfig::check_config` runs `decode_value` over each submitted field (line 1625 on
|
|
50
|
+
* this node), the base rule plugin's `decode_value` sends `comment` through
|
|
51
|
+
* `PVE::ParseUtils::decode_text` — `uri_unescape` then a utf8 decode — and `$get_api_ha_rule`
|
|
52
|
+
* hands the comment straight back WITHOUT re-encoding it (only `resources` and `nodes` are
|
|
53
|
+
* re-encoded there). So a declared `deploy%20window` is stored and returned as `deploy window`,
|
|
54
|
+
* and a `matches` comparing the declared string would report an update on every plan forever
|
|
55
|
+
* while every PUT wrote exactly what was already there.
|
|
56
|
+
*
|
|
57
|
+
* ★ SO THE COMPARISON MIRRORS THE DECODE RATHER THAN FIGHTING IT. Both sides then say what the
|
|
58
|
+
* cluster will really hold, which is the same move `nodeList` above makes for a re-sorted list.
|
|
59
|
+
* ⚠️ GROUPS OF `%XX` ARE DECODED TOGETHER so a multi-byte utf8 sequence survives; a lone `%` or a
|
|
60
|
+
* malformed sequence is left alone, as `uri_unescape` leaves it. The one place this differs from
|
|
61
|
+
* Perl is a sequence that is valid percent-encoding but invalid utf8: Perl substitutes U+FFFD,
|
|
62
|
+
* this leaves the escape. Nothing in a comment should be reaching for that.
|
|
63
|
+
*/
|
|
64
|
+
export declare const commentText: (raw: string) => string;
|
|
65
|
+
/**
|
|
66
|
+
* Every managed optional, per type: the value to send, or undefined for "clear it".
|
|
67
|
+
*
|
|
68
|
+
* ⛔ `disable=0` DOES NOT CLEAR A DISABLED RULE, AND THAT IS THE WORST TRAP IN THIS FAMILY.
|
|
69
|
+
* MEASURED in `/usr/share/perl5/PVE/API2/HA/Rules.pm`: both `create_rule` and `update_rule` run
|
|
70
|
+
* `delete $param->{disable} if !$param->{disable};` BEFORE the plugin sees the form. A PUT
|
|
71
|
+
* carrying `disable=0` is therefore a PUT carrying nothing — PVE answers 200, the rule stays
|
|
72
|
+
* disabled, `matches` reports an update on the next plan, and the loop never settles. The only
|
|
73
|
+
* way back on is `delete=disable`, which is why `disable` is in this table rather than in
|
|
74
|
+
* `required` below.
|
|
75
|
+
*
|
|
76
|
+
* ⛔ AND THE BRANCHES CANNOT BE ONE SHARED MAP. `PVE::SectionConfig::delete_from_config` dies
|
|
77
|
+
* `no such option '<k>'` for an option the plugin does not declare and `unable to delete
|
|
78
|
+
* required option '<k>'` for one it requires — so `delete=strict` against a resource-affinity
|
|
79
|
+
* rule is a hard failure, and `delete=nodes` or `delete=resources` would be one against either.
|
|
80
|
+
* Only `comment`, `disable` and (node-affinity only) `strict` are clearable at all.
|
|
81
|
+
*
|
|
82
|
+
* ⚠️ AN EMPTY `comment` IS A CLEARED ONE. PVE stores whatever string it is given, so writing `''`
|
|
83
|
+
* would leave the option present and empty rather than absent; `matches` reads both as `''`, but
|
|
84
|
+
* only the delete actually removes the line.
|
|
85
|
+
*/
|
|
86
|
+
export declare const optional: (props: HaRuleProps) => Record<string, string | undefined>;
|
|
87
|
+
export declare const body: (props: HaRuleProps) => Record<string, string>;
|
|
88
|
+
/**
|
|
89
|
+
* The options an update must explicitly remove.
|
|
90
|
+
*
|
|
91
|
+
* ⛔ A PUT THAT OMITS A FIELD DOES NOT CLEAR IT — `update_rule` merges the form into the stored
|
|
92
|
+
* rule (`$rule->{$_} = $opts->{$_} for keys $opts->%*`) — so a managed optional needs a matching
|
|
93
|
+
* `delete=` the moment its prop goes away. Both halves come off the one table above, which makes
|
|
94
|
+
* "managed but not clearable" impossible to write here.
|
|
95
|
+
* ⚠️ NEVER BOTH AT ONCE: `delete_from_config` dies `cannot set and delete property '<k>' at the
|
|
96
|
+
* same time!`. The table answers a value or `undefined`, never both, so the two lists are
|
|
97
|
+
* disjoint by construction.
|
|
98
|
+
* ⚠️ THE CREATE FORM CANNOT USE THIS. `POST /cluster/ha/rules` has no `delete` parameter at all
|
|
99
|
+
* (MEASURED from the cluster's own schema), and it needs none: an omitted optional on a brand
|
|
100
|
+
* new rule is simply absent.
|
|
101
|
+
*/
|
|
102
|
+
export declare const clearList: (props: HaRuleProps) => string[];
|
|
103
|
+
//# sourceMappingURL=ha-rule-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ha-rule-form.d.ts","sourceRoot":"","sources":["../../src/proxmox/ha-rule-form.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ,UAAW,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,WAerE,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,UAAW,OAAO,WAM/B,CAAC;AAET;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,QAAS,MAAM,WAOnC,CAAC;AAEL;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ,UAAW,WAAW,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAI7E,CAAC;AAqCH,eAAO,MAAM,IAAI,UAAW,WAAW,2BAMtC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,UAAW,WAAW,aAGd,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Proxmox.HaRule` — where the CRM may place a guest, and which guests must not share a node.
|
|
3
|
+
*
|
|
4
|
+
* ★ THIS IS THE PVE 9 SUCCESSOR TO HA GROUPS, AND THE GROUPS ENDPOINT IS GONE. MEASURED on n2
|
|
5
|
+
* (pve-manager/9.2.11, 2026-09-13): `pvesh get /cluster/ha/groups` answers `cannot index groups:
|
|
6
|
+
* ha groups have been migrated to rules`, and `/etc/pve/ha/` holds `rules.cfg` with no
|
|
7
|
+
* `groups.cfg` beside it. The published schema still documents groups and still offers a `group`
|
|
8
|
+
* parameter on `Proxmox.HaResource`; both are dead. Do not port them back.
|
|
9
|
+
*
|
|
10
|
+
* ★ ONE RESOURCE FOR BOTH RULE TYPES, ON THE ceph-daemon.ts ARGUMENT AND AFTER READING BOTH
|
|
11
|
+
* PLUGINS. `PVE::HA::Rules::NodeAffinity` and `::ResourceAffinity` share `resources`, `affinity`,
|
|
12
|
+
* `disable` and `comment`; node-affinity adds `nodes` and `strict` and nothing else diverges. The
|
|
13
|
+
* endpoint, the path, the create/update/delete calls, the `order` and `digest` traps below and
|
|
14
|
+
* the list normalisation are identical for both. Two files would have carried every one of those
|
|
15
|
+
* traps twice and let them drift.
|
|
16
|
+
* ⛔ `type` IS CREATE-ONLY. MEASURED in `/usr/share/perl5/PVE/API2/HA/Rules.pm`: `update_rule`
|
|
17
|
+
* takes the plugin from the STORED rule (`my $type = $rule->{type};`) and never rewrites it. So
|
|
18
|
+
* `attributes` reports a rule of the other type as ABSENT, which sends reconcile down the
|
|
19
|
+
* create branch and makes PVE refuse with `HA rule '<id>' already defined` — a loud, accurate
|
|
20
|
+
* error rather than a PUT pushing node-affinity fields at a resource-affinity rule.
|
|
21
|
+
* ⛔ AND YET IT IS SENT ON THE UPDATE ANYWAY, because the PUT is validated against a `oneOf`
|
|
22
|
+
* keyed on it and refuses the whole body without it. That one is worth reading in full: it
|
|
23
|
+
* is the ⛔ on `required` in ha-rule-form.ts.
|
|
24
|
+
*
|
|
25
|
+
* ⛔ THREE FIELDS PVE RETURNS AND NO WRITE ACCEPTS, EACH ONE A FOREVER-UPDATE IF COMPARED.
|
|
26
|
+
* `order` is an ORDINAL PVE ASSIGNS ITSELF (`$rules->{order}->{$ruleid} =
|
|
27
|
+
* PVE::HA::Rules::get_next_ordinal($rules)`) and it appears in no create or update schema at all;
|
|
28
|
+
* it is reported in attributes and never compared. `digest` is the digest of the WHOLE rules
|
|
29
|
+
* file, so it moves when a rule written for somebody else's guests moves — it is not even an
|
|
30
|
+
* attribute, for the reason ha-resource.ts gives. `errors` is PVE's own feasibility verdict,
|
|
31
|
+
* recomputed across every rule on every read; reported, never compared. See `problems` in
|
|
32
|
+
* ha-rule-form.ts.
|
|
33
|
+
*
|
|
34
|
+
* ⚠️ IT COMPOSES WITH `Proxmox.HaResource`, AND THE EDGE IS REAL RATHER THAN TIDY. MEASURED:
|
|
35
|
+
* `create_rule` runs `$assert_valid_resources_param`, which calls
|
|
36
|
+
* `PVE::HA::Config::service_is_configured($resource)` for every sid and dies `cannot use
|
|
37
|
+
* unmanaged resource(s) <sid>` if one is not already an HA resource. A rule naming a sid nothing
|
|
38
|
+
* has put under HA is a HARD 400, not a warning — so `resources` should be written as the
|
|
39
|
+
* HaResource's own attribute (`resources: [web.sid, db.sid]`) and let Alchemy order the deploy,
|
|
40
|
+
* not as a bare string that happens to match. `$assert_valid_nodes_param` refuses a non-existent
|
|
41
|
+
* node the same way.
|
|
42
|
+
* ⛔ AND THE EDGE RUNS BACK THE OTHER WAY, WHERE ALCHEMY CANNOT SEE IT. Destroying an
|
|
43
|
+
* `HaResource` deletes with PVE's default `purge=1`, which strips that sid out of every rule
|
|
44
|
+
* and DELETES any rule left with no members. So a plan that only removes a guest can remove
|
|
45
|
+
* this resource's object from under it; the next plan then reads absent and recreates it, or
|
|
46
|
+
* fails on the `unmanaged resource` check if the guest is gone for good.
|
|
47
|
+
*
|
|
48
|
+
* ⚠️ BOTH LANES ALREADY HAVE THE PRIVILEGES, WHICH IS NEW. MEASURED 2026-09-13:
|
|
49
|
+
* GET (collection and item) checks `Sys.Audit` on `/` and the built-in `PVEAuditor` holds it, so
|
|
50
|
+
* `readRole` stays the default `read` lease — unlike storage.ts and the SDN families. POST, PUT
|
|
51
|
+
* and DELETE all check `Sys.Console` on `/`, and `pvesh get /access/roles/LXCProvisioner` now
|
|
52
|
+
* returns `Sys.Console` among its 27 privileges. The warning in ha-resource.ts's header — that
|
|
53
|
+
* `Sys.Console` is missing — is stale; the role was widened, and the price it named still stands:
|
|
54
|
+
* `Sys.Console` is also what opens a root shell on every node.
|
|
55
|
+
*
|
|
56
|
+
* ⚠️ REMOVAL IS THE PLAIN DEFAULT, DELIBERATELY, AND `delete` IS THE FACTORY'S. An HA rule is
|
|
57
|
+
* exactly a line of TypeScript — nothing in it is irreplaceable the way a Ceph pool or a ZFS
|
|
58
|
+
* vdev is — so the `retain` default that resource.ts explains does not apply. Read the plan for
|
|
59
|
+
* what it is, though: while a negative resource-affinity rule is absent, nothing stops the CRM
|
|
60
|
+
* putting both halves of a pair on one node.
|
|
61
|
+
*
|
|
62
|
+
* ⚠️ A READ GOES THROUGH THE GROUPS MIGRATION. Every GET calls `migrate_groups_to_rules`, so on a
|
|
63
|
+
* cluster that still has `groups.cfg` the answer includes SYNTHETIC rules nobody declared. This
|
|
64
|
+
* cluster has none, so nothing is injected here; a rule id colliding with an old group name on a
|
|
65
|
+
* cluster that does would read back something this provider never wrote.
|
|
66
|
+
*
|
|
67
|
+
* ⚠️ A CHANGED `type` READS AS `update` IN THE PLAN AND FAILS AS "already defined" ON THE APPLY,
|
|
68
|
+
* AND THOSE TWO WORDS POINT AWAY FROM THE CAUSE. `attributes` answers undefined when the live
|
|
69
|
+
* rule's type disagrees, so `diff` takes resource.ts's `live === undefined` branch and says
|
|
70
|
+
* update; reconcile then reads undefined, POSTs, and PVE refuses because the rule is plainly
|
|
71
|
+
* there. The cause is that `type` is create-only. metric-server.ts has the same shape, so this
|
|
72
|
+
* is the package's consistent behaviour rather than a quirk of this file — but it is worth
|
|
73
|
+
* knowing before reading the error. Delete the declaration and write a new one to change a type.
|
|
74
|
+
*/
|
|
75
|
+
import { Resource } from 'alchemy';
|
|
76
|
+
import * as Provider from 'alchemy/Provider';
|
|
77
|
+
import { type PveRequirements, type WithTarget } from './resource.ts';
|
|
78
|
+
export type HaRuleType = 'node-affinity' | 'resource-affinity';
|
|
79
|
+
/**
|
|
80
|
+
* ⛔ REQUIRED ON BOTH TYPES, AND THAT IS A DELIBERATE NARROWING OF PVE'S SCHEMA. PVE makes it
|
|
81
|
+
* optional for node-affinity (defaulting to `positive`) and mandatory for resource-affinity. A
|
|
82
|
+
* provider that mirrored that has two bad options when a declaration omits it: guess `positive`,
|
|
83
|
+
* which silently flips a live `negative` rule — the one keeping two guests APART — into one that
|
|
84
|
+
* pins them together; or leave it out of the write, which makes `matches` disagree with a live
|
|
85
|
+
* `negative` rule forever while every PUT changes nothing. Requiring one word from the caller
|
|
86
|
+
* removes both.
|
|
87
|
+
*/
|
|
88
|
+
export type HaAffinity = 'positive' | 'negative';
|
|
89
|
+
interface HaRuleBase extends WithTarget {
|
|
90
|
+
/** A `pve-configid`: a letter, then letters, digits, `-` and `_`. Identity — renaming is a new
|
|
91
|
+
* rule, and the old one stays behind exactly as `sid` does in ha-resource.ts. */
|
|
92
|
+
rule: string;
|
|
93
|
+
/**
|
|
94
|
+
* The HA resources this rule constrains, as prefixed sids — `ct:101`, `vm:100`.
|
|
95
|
+
* ⚠️ EVERY ONE MUST ALREADY BE UNDER HA. See the composition ⚠️ in the header: this is an
|
|
96
|
+
* ordering edge, and the honest way to express it is the HaResource's own `sid` attribute.
|
|
97
|
+
*/
|
|
98
|
+
resources: readonly string[] | string;
|
|
99
|
+
affinity: HaAffinity;
|
|
100
|
+
/** Keep the rule in the file but stop the CRM applying it. ⛔ Clearing it needs `delete=disable`
|
|
101
|
+
* — see the ⛔ in `optional` in ha-rule-form.ts. */
|
|
102
|
+
disable?: boolean;
|
|
103
|
+
/** Free text shown in the HA panel. Max 4096 characters. */
|
|
104
|
+
comment?: string;
|
|
105
|
+
}
|
|
106
|
+
export interface NodeAffinityRuleProps extends HaRuleBase {
|
|
107
|
+
type: 'node-affinity';
|
|
108
|
+
/**
|
|
109
|
+
* Cluster nodes, each optionally `<node>:<priority>`. Higher priority wins; the numbers are
|
|
110
|
+
* relative and nothing else. ⚠️ REQUIRED BY THE TYPE, not merely by PVE — an optional `nodes`
|
|
111
|
+
* would let a declaration that cannot describe any live rule sit in a permanent update loop.
|
|
112
|
+
*/
|
|
113
|
+
nodes: readonly string[] | string;
|
|
114
|
+
/** `false` (PVE's default) makes the nodes a PREFERENCE; `true` makes them the only nodes the
|
|
115
|
+
* resources may run on, and the resources STOP when none of them is available. */
|
|
116
|
+
strict?: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface ResourceAffinityRuleProps extends HaRuleBase {
|
|
119
|
+
type: 'resource-affinity';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* ⚠️ A UNION, NOT ONE FLAT INTERFACE WITH OPTIONAL EXTRAS, because `nodes` and `strict` are not
|
|
123
|
+
* merely unused on a resource-affinity rule — PVE's oneOf declares `additionalProperties: 0`, so
|
|
124
|
+
* sending either is a 400, and comparing either would be a diff no write could ever settle. The
|
|
125
|
+
* union makes both unwritable rather than ignored.
|
|
126
|
+
*/
|
|
127
|
+
export type HaRuleProps = NodeAffinityRuleProps | ResourceAffinityRuleProps;
|
|
128
|
+
export interface HaRuleAttributes {
|
|
129
|
+
rule: string;
|
|
130
|
+
type: HaRuleType;
|
|
131
|
+
/** ⚠️ NORMALISED, NOT RAW. PVE returns `join(',', sort keys %$hash)` — a re-sorted SET. */
|
|
132
|
+
resources: string;
|
|
133
|
+
/** ⚠️ Normalised by `nodeList`; always `''` on a resource-affinity rule, which has no nodes. */
|
|
134
|
+
nodes: string;
|
|
135
|
+
affinity: string;
|
|
136
|
+
strict: boolean;
|
|
137
|
+
disable: boolean;
|
|
138
|
+
comment: string;
|
|
139
|
+
/** ⛔ PVE-ASSIGNED AND UNWRITABLE. Reported so a plan can show it; never compared. */
|
|
140
|
+
order: number;
|
|
141
|
+
/** ⛔ PVE's feasibility verdict for this rule. Reported; never compared. */
|
|
142
|
+
errors: string;
|
|
143
|
+
}
|
|
144
|
+
export interface ProxmoxHaRule extends Resource<'Proxmox.HaRule', HaRuleProps, HaRuleAttributes, never, PveRequirements> {
|
|
145
|
+
}
|
|
146
|
+
export declare const ProxmoxHaRule: import("alchemy").ResourceClass<ProxmoxHaRule>;
|
|
147
|
+
/**
|
|
148
|
+
* ⛔ THE EMPTY `list` FROM `pveHandlers` STANDS, AND IT COSTS NOTHING HERE TODAY.
|
|
149
|
+
* `GET /cluster/ha/rules` MEASURED `[]` on this cluster on 2026-09-13 — but the same call on a
|
|
150
|
+
* cluster somebody has used returns every rule an operator ever clicked, plus the synthetic ones
|
|
151
|
+
* the groups migration invents on read. Adopting either is how a later `alchemy destroy` removes
|
|
152
|
+
* a separation rule nobody declared. Adoption stays an explicit act.
|
|
153
|
+
*/
|
|
154
|
+
export declare const ProxmoxHaRuleProvider: () => import("effect/Layer").Layer<Provider.Provider<ProxmoxHaRule>, never, import("effect/unstable/http/HttpClient").HttpClient>;
|
|
155
|
+
export {};
|
|
156
|
+
//# sourceMappingURL=ha-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ha-rule.d.ts","sourceRoot":"","sources":["../../src/proxmox/ha-rule.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAe,MAAM,eAAe,CAAC;AAGnF,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAEjD,UAAU,UAAW,SAAQ,UAAU;IACrC;sFACkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,UAAU,CAAC;IACrB;wDACoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,IAAI,EAAE,eAAe,CAAC;IACtB;;;;OAIG;IACH,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC;IAClC;uFACmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yBAA0B,SAAQ,UAAU;IAC3D,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,qBAAqB,GAAG,yBAAyB,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,2FAA2F;IAC3F,SAAS,EAAE,MAAM,CAAC;IAClB,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ,CAC7C,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,KAAK,EACL,eAAe,CAChB;CAAG;AAEJ,eAAO,MAAM,aAAa,gDAA4C,CAAC;AAqEvE;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,mIACmD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proxmox providers for Alchemy.
|
|
3
|
+
*
|
|
4
|
+
* ⛔ THIS BARREL IS THE PUBLIC API, AND IT IS DELIBERATELY SMALLER THAN THE DIRECTORY.
|
|
5
|
+
* These are the symbols a real stack consumes; the rest of the files are internals a
|
|
6
|
+
* provider needs but a consumer should not depend on. An `export *` here would publish
|
|
7
|
+
* every helper as API and make the next refactor a breaking change.
|
|
8
|
+
* ★ Anything unlisted is still reachable by path if you genuinely need it — that is a
|
|
9
|
+
* deliberate, visible act rather than an accident of barrelling.
|
|
10
|
+
*/
|
|
11
|
+
export { ProxmoxAclProvider } from './acl.ts';
|
|
12
|
+
export { ProxmoxApiTokenProvider } from './api-token.ts';
|
|
13
|
+
export { ProxmoxBackupJobProvider } from './backup-job.ts';
|
|
14
|
+
export { ProxmoxCephDaemonProvider } from './ceph-daemon.ts';
|
|
15
|
+
export { ProxmoxCephFlagProvider } from './ceph-flag.ts';
|
|
16
|
+
export { ProxmoxCephFsProvider } from './ceph-fs.ts';
|
|
17
|
+
export { ProxmoxCephOsdProvider } from './ceph-osd.ts';
|
|
18
|
+
export { ProxmoxCephPool, ProxmoxCephPoolProvider } from './ceph-pool.ts';
|
|
19
|
+
export { ProxmoxFirewallAliasProvider } from './firewall-alias.ts';
|
|
20
|
+
export { ProxmoxGroupProvider } from './group.ts';
|
|
21
|
+
export { ProxmoxHaResourceProvider } from './ha-resource.ts';
|
|
22
|
+
export { ProxmoxHaRuleProvider } from './ha-rule.ts';
|
|
23
|
+
export { ProxmoxLxcProvider } from './lxc.ts';
|
|
24
|
+
export { ProxmoxMetricServerProvider } from './metric-server.ts';
|
|
25
|
+
export { ProxmoxNetworkApplyProvider } from './network-apply.ts';
|
|
26
|
+
export { ProxmoxNodeNetworkProvider } from './node-network.ts';
|
|
27
|
+
export { ProxmoxNotificationTargetProvider } from './notification-target.ts';
|
|
28
|
+
export { PbsDatastoreProvider } from './pbs-datastore.ts';
|
|
29
|
+
export { PbsPruneJobProvider } from './pbs-prune-job.ts';
|
|
30
|
+
export { PbsSyncJobProvider } from './pbs-sync-job.ts';
|
|
31
|
+
export { PbsVerifyJobProvider } from './pbs-verify-job.ts';
|
|
32
|
+
export { ProxmoxPool, ProxmoxPoolProvider } from './pool.ts';
|
|
33
|
+
export { ProxmoxVmProvider } from './qemu.ts';
|
|
34
|
+
export { ProxmoxReplicationJobProvider } from './replication-job.ts';
|
|
35
|
+
export { ProxmoxRoleProvider } from './role.ts';
|
|
36
|
+
export { ProxmoxSdnApplyProvider } from './sdn-apply.ts';
|
|
37
|
+
export { ProxmoxSdnSubnetProvider } from './sdn-subnet.ts';
|
|
38
|
+
export { ProxmoxSdnVnetProvider } from './sdn-vnet.ts';
|
|
39
|
+
export { ProxmoxSdnZoneProvider } from './sdn-zone.ts';
|
|
40
|
+
export { ProxmoxStorageProvider } from './storage.ts';
|
|
41
|
+
export { ProxmoxUserProvider } from './user.ts';
|
|
42
|
+
export { ProxmoxZfsPoolProvider } from './zfs-pool.ts';
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxmox/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
|