diff --git a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs index e48b4eb..50c98b3 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupCmdlet.cs @@ -48,7 +48,7 @@ namespace PSProxmoxVE.Cmdlets.Backup /// The compression algorithm to use. /// [Parameter(Mandatory = false, HelpMessage = "The compression algorithm.")] - [ValidateSet("zstd", "lzo", "gzip", "none")] + [ValidateSet("zstd", "lzo", "gzip", "0")] public string? Compress { get; set; } /// diff --git a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs index 696809f..5daf7c5 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/NewPveBackupJobCmdlet.cs @@ -51,7 +51,7 @@ namespace PSProxmoxVE.Cmdlets.Backup /// The compression algorithm to use. /// [Parameter(Mandatory = false, HelpMessage = "The compression algorithm.")] - [ValidateSet("zstd", "lzo", "gzip", "none")] + [ValidateSet("zstd", "lzo", "gzip", "0")] public string? Compress { get; set; } /// diff --git a/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs index 4b713f6..0d710d1 100644 --- a/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Backup/SetPveBackupJobCmdlet.cs @@ -56,7 +56,7 @@ namespace PSProxmoxVE.Cmdlets.Backup /// Updated compression algorithm. /// [Parameter(Mandatory = false, HelpMessage = "The compression algorithm.")] - [ValidateSet("zstd", "lzo", "gzip", "none")] + [ValidateSet("zstd", "lzo", "gzip", "0")] public string? Compress { get; set; } /// diff --git a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs index b897d20..f2ef8ff 100644 --- a/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Cluster/GetPveClusterResourceCmdlet.cs @@ -19,8 +19,8 @@ namespace PSProxmoxVE.Cmdlets.Cluster /// /// Filter by resource type. /// - [Parameter(Mandatory = false, Position = 0, HelpMessage = "Filter by resource type (vm, lxc, node, storage, sdn).")] - [ValidateSet("vm", "lxc", "node", "storage", "sdn")] + [Parameter(Mandatory = false, Position = 0, HelpMessage = "Filter by resource type (vm, node, storage, sdn).")] + [ValidateSet("vm", "node", "storage", "sdn")] public string? Type { get; set; } /// diff --git a/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs b/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs index f8d643a..40f1fe4 100644 --- a/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs +++ b/src/PSProxmoxVE/Cmdlets/Storage/NewPveStorageCmdlet.cs @@ -25,7 +25,7 @@ namespace PSProxmoxVE.Cmdlets.Storage /// The storage type (e.g., "dir", "nfs", "lvm", "zfspool", "cephfs", "rbd"). [Parameter(Mandatory = true, Position = 1, HelpMessage = "The storage type (e.g. dir, nfs, lvm, zfspool).")] [ValidateSet("dir", "nfs", "lvm", "lvmthin", "zfspool", "zfs", "cephfs", "rbd", - "iscsi", "iscsidirect", "glusterfs", "cifs", "pbs", IgnoreCase = true)] + "iscsi", "iscsidirect", "cifs", "pbs", "btrfs", "esxi", IgnoreCase = true)] public string Type { get; set; } = string.Empty; /// Comma-separated list of content types to support (e.g., "iso,vztmpl,backup"). diff --git a/tests/PSProxmoxVE.Core.Tests/Fixtures/pve-api-enums.json b/tests/PSProxmoxVE.Core.Tests/Fixtures/pve-api-enums.json new file mode 100644 index 0000000..ab44aaa --- /dev/null +++ b/tests/PSProxmoxVE.Core.Tests/Fixtures/pve-api-enums.json @@ -0,0 +1,9216 @@ +{ + "paths": { + "/cluster": { + "get": { + "responseFields": [] + } + }, + "/cluster/replication": { + "get": { + "responseFields": [ + "comment", + "disable", + "guest", + "id", + "jobnum", + "rate", + "remove_job", + "schedule", + "source", + "target", + "type" + ] + }, + "post": { + "params": { + "remove_job": { + "enum": [ + "local", + "full" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "local" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/replication/{id}": { + "get": { + "responseFields": [ + "comment", + "digest", + "disable", + "guest", + "id", + "jobnum", + "rate", + "remove_job", + "schedule", + "source", + "target", + "type" + ] + }, + "put": { + "params": { + "remove_job": { + "enum": [ + "local", + "full" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/metrics": { + "get": { + "responseFields": [] + } + }, + "/cluster/metrics/server": { + "get": { + "responseFields": [ + "disable", + "id", + "port", + "server", + "type" + ] + } + }, + "/cluster/metrics/server/{id}": { + "post": { + "params": { + "influxdbproto": { + "enum": [ + "udp", + "http", + "https" + ], + "x-enum-values": null, + "type": "string" + }, + "otel-compression": { + "enum": [ + "none", + "gzip" + ], + "x-enum-values": null, + "type": "string" + }, + "otel-protocol": { + "enum": [ + "http", + "https" + ], + "x-enum-values": null, + "type": "string" + }, + "proto": { + "enum": [ + "udp", + "tcp" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "graphite", + "influxdb", + "opentelemetry" + ], + "x-enum-values": null, + "type": "string" + } + } + }, + "put": { + "params": { + "influxdbproto": { + "enum": [ + "udp", + "http", + "https" + ], + "x-enum-values": null, + "type": "string" + }, + "otel-compression": { + "enum": [ + "none", + "gzip" + ], + "x-enum-values": null, + "type": "string" + }, + "otel-protocol": { + "enum": [ + "http", + "https" + ], + "x-enum-values": null, + "type": "string" + }, + "proto": { + "enum": [ + "udp", + "tcp" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/metrics/export": { + "get": { + "responseFields": [ + "data" + ] + } + }, + "/cluster/notifications": { + "get": { + "responseFields": [] + } + }, + "/cluster/notifications/matcher-fields": { + "get": { + "responseFields": [ + "name" + ] + } + }, + "/cluster/notifications/matcher-field-values": { + "get": { + "responseFields": [ + "comment", + "field", + "value" + ] + } + }, + "/cluster/notifications/endpoints": { + "get": { + "responseFields": [] + } + }, + "/cluster/notifications/endpoints/sendmail": { + "get": { + "responseFields": [ + "author", + "comment", + "disable", + "from-address", + "mailto", + "mailto-user", + "name", + "origin" + ] + } + }, + "/cluster/notifications/endpoints/sendmail/{name}": { + "get": { + "responseFields": [ + "author", + "comment", + "digest", + "disable", + "from-address", + "mailto", + "mailto-user", + "name" + ] + } + }, + "/cluster/notifications/endpoints/gotify": { + "get": { + "responseFields": [ + "comment", + "disable", + "name", + "origin", + "server" + ] + } + }, + "/cluster/notifications/endpoints/gotify/{name}": { + "get": { + "responseFields": [ + "comment", + "digest", + "disable", + "name", + "server" + ] + } + }, + "/cluster/notifications/endpoints/smtp": { + "get": { + "responseFields": [ + "author", + "comment", + "disable", + "from-address", + "mailto", + "mailto-user", + "mode", + "name", + "origin", + "port", + "server", + "username" + ] + }, + "post": { + "params": { + "mode": { + "enum": [ + "insecure", + "starttls", + "tls" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/notifications/endpoints/smtp/{name}": { + "get": { + "responseFields": [ + "author", + "comment", + "digest", + "disable", + "from-address", + "mailto", + "mailto-user", + "mode", + "name", + "port", + "server", + "username" + ] + }, + "put": { + "params": { + "mode": { + "enum": [ + "insecure", + "starttls", + "tls" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/notifications/endpoints/webhook": { + "get": { + "responseFields": [ + "body", + "comment", + "disable", + "header", + "method", + "name", + "origin", + "secret", + "url" + ] + }, + "post": { + "params": { + "method": { + "enum": [ + "post", + "put", + "get" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/notifications/endpoints/webhook/{name}": { + "get": { + "responseFields": [ + "body", + "comment", + "digest", + "disable", + "header", + "method", + "name", + "secret", + "url" + ] + }, + "put": { + "params": { + "method": { + "enum": [ + "post", + "put", + "get" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/notifications/targets": { + "get": { + "responseFields": [ + "comment", + "disable", + "name", + "origin", + "type" + ] + } + }, + "/cluster/notifications/matchers": { + "get": { + "responseFields": [ + "comment", + "disable", + "invert-match", + "match-calendar", + "match-field", + "match-severity", + "mode", + "name", + "origin", + "target" + ] + }, + "post": { + "params": { + "mode": { + "enum": [ + "all", + "any" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/notifications/matchers/{name}": { + "get": { + "responseFields": [ + "comment", + "digest", + "disable", + "invert-match", + "match-calendar", + "match-field", + "match-severity", + "mode", + "name", + "target" + ] + }, + "put": { + "params": { + "mode": { + "enum": [ + "all", + "any" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/config": { + "get": { + "responseFields": [] + } + }, + "/cluster/config/nodes": { + "get": { + "responseFields": [ + "node" + ] + } + }, + "/cluster/config/nodes/{node}": { + "post": { + "responseFields": [ + "corosync_authkey", + "corosync_conf", + "warnings" + ] + } + }, + "/cluster/config/join": { + "get": { + "responseFields": [ + "config_digest", + "nodelist", + "preferred_node", + "totem" + ] + } + }, + "/cluster/firewall": { + "get": { + "responseFields": [] + } + }, + "/cluster/firewall/groups": { + "get": { + "responseFields": [ + "comment", + "digest", + "group" + ] + } + }, + "/cluster/firewall/groups/{group}": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "post": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/firewall/groups/{group}/{pos}": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "put": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/firewall/rules": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "post": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/firewall/rules/{pos}": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "put": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/firewall/ipset": { + "get": { + "responseFields": [ + "comment", + "digest", + "name" + ] + } + }, + "/cluster/firewall/ipset/{name}": { + "get": { + "responseFields": [ + "cidr", + "comment", + "digest", + "nomatch" + ] + } + }, + "/cluster/firewall/aliases": { + "get": { + "responseFields": [ + "cidr", + "comment", + "digest", + "name" + ] + } + }, + "/cluster/firewall/options": { + "get": { + "responseFields": [ + "ebtables", + "enable", + "log_ratelimit", + "policy_forward", + "policy_in", + "policy_out" + ] + }, + "put": { + "params": { + "policy_forward": { + "enum": [ + "ACCEPT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + }, + "policy_in": { + "enum": [ + "ACCEPT", + "REJECT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + }, + "policy_out": { + "enum": [ + "ACCEPT", + "REJECT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/firewall/macros": { + "get": { + "responseFields": [ + "descr", + "macro" + ] + } + }, + "/cluster/firewall/refs": { + "get": { + "params": { + "type": { + "enum": [ + "alias", + "ipset" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "comment", + "name", + "ref", + "scope", + "type" + ] + } + }, + "/cluster/backup": { + "get": { + "responseFields": [ + "id" + ] + }, + "post": { + "params": { + "compress": { + "enum": [ + "0", + "1", + "gzip", + "lzo", + "zstd" + ], + "x-enum-values": null, + "type": "string" + }, + "dow": { + "enum": null, + "x-enum-values": [ + "mon", + "tue", + "wed", + "thu", + "fri", + "sat", + "sun" + ], + "type": "string" + }, + "mailnotification": { + "enum": [ + "always", + "failure" + ], + "x-enum-values": null, + "type": "string" + }, + "mode": { + "enum": [ + "snapshot", + "suspend", + "stop" + ], + "x-enum-values": null, + "type": "string" + }, + "notification-mode": { + "enum": [ + "auto", + "legacy-sendmail", + "notification-system" + ], + "x-enum-values": null, + "type": "string" + }, + "pbs-change-detection-mode": { + "enum": [ + "legacy", + "data", + "metadata" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/backup/{id}": { + "put": { + "params": { + "compress": { + "enum": [ + "0", + "1", + "gzip", + "lzo", + "zstd" + ], + "x-enum-values": null, + "type": "string" + }, + "dow": { + "enum": null, + "x-enum-values": [ + "mon", + "tue", + "wed", + "thu", + "fri", + "sat", + "sun" + ], + "type": "string" + }, + "mailnotification": { + "enum": [ + "always", + "failure" + ], + "x-enum-values": null, + "type": "string" + }, + "mode": { + "enum": [ + "snapshot", + "suspend", + "stop" + ], + "x-enum-values": null, + "type": "string" + }, + "notification-mode": { + "enum": [ + "auto", + "legacy-sendmail", + "notification-system" + ], + "x-enum-values": null, + "type": "string" + }, + "pbs-change-detection-mode": { + "enum": [ + "legacy", + "data", + "metadata" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/backup/{id}/included_volumes": { + "get": { + "responseFields": [ + "children" + ] + } + }, + "/cluster/backup-info": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/cluster/backup-info/not-backed-up": { + "get": { + "responseFields": [ + "name", + "type", + "vmid" + ] + } + }, + "/cluster/ha": { + "get": { + "responseFields": [ + "id" + ] + } + }, + "/cluster/ha/resources": { + "get": { + "params": { + "type": { + "enum": [ + "ct", + "vm" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "sid" + ] + }, + "post": { + "params": { + "state": { + "enum": [ + "started", + "stopped", + "enabled", + "disabled", + "ignored" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "ct", + "vm" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/ha/resources/{sid}": { + "get": { + "responseFields": [ + "comment", + "digest", + "failback", + "group", + "max_relocate", + "max_restart", + "sid", + "state", + "type" + ] + }, + "put": { + "params": { + "state": { + "enum": [ + "started", + "stopped", + "enabled", + "disabled", + "ignored" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/ha/resources/{sid}/migrate": { + "post": { + "responseFields": [ + "blocking-resources", + "comigrated-resources", + "requested-node", + "sid" + ] + } + }, + "/cluster/ha/resources/{sid}/relocate": { + "post": { + "responseFields": [ + "blocking-resources", + "comigrated-resources", + "requested-node", + "sid" + ] + } + }, + "/cluster/ha/groups": { + "get": { + "responseFields": [ + "group" + ] + }, + "post": { + "params": { + "type": { + "enum": [ + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/ha/rules": { + "get": { + "params": { + "type": { + "enum": [ + "node-affinity", + "resource-affinity" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "rule" + ] + }, + "post": { + "params": { + "affinity": { + "enum": [ + "positive", + "negative" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "node-affinity", + "resource-affinity" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/ha/rules/{rule}": { + "get": { + "responseFields": [ + "rule", + "type" + ] + }, + "put": { + "params": { + "affinity": { + "enum": [ + "positive", + "negative" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "node-affinity", + "resource-affinity" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/ha/status": { + "get": { + "responseFields": [] + } + }, + "/cluster/ha/status/current": { + "get": { + "responseFields": [ + "crm_state", + "failback", + "id", + "max_relocate", + "max_restart", + "node", + "quorate", + "request_state", + "sid", + "state", + "status", + "timestamp", + "type" + ] + } + }, + "/cluster/acme": { + "get": { + "responseFields": [] + } + }, + "/cluster/acme/plugins": { + "get": { + "params": { + "type": { + "enum": [ + "dns", + "standalone" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "api", + "data", + "digest", + "disable", + "nodes", + "plugin", + "type", + "validation-delay" + ] + }, + "post": { + "params": { + "api": { + "enum": [ + "1984hosting", + "acmedns", + "acmeproxy", + "active24", + "ad", + "ali", + "alviy", + "anx", + "artfiles", + "arvan", + "aurora", + "autodns", + "aws", + "azion", + "azure", + "beget", + "bookmyname", + "bunny", + "cf", + "clouddns", + "cloudns", + "cn", + "conoha", + "constellix", + "cpanel", + "curanet", + "cyon", + "da", + "ddnss", + "desec", + "df", + "dgon", + "dnsexit", + "dnshome", + "dnsimple", + "dnsservices", + "doapi", + "domeneshop", + "dp", + "dpi", + "dreamhost", + "duckdns", + "durabledns", + "dyn", + "dynu", + "dynv6", + "easydns", + "edgecenter", + "edgedns", + "euserv", + "exoscale", + "fornex", + "freedns", + "freemyip", + "gandi_livedns", + "gcloud", + "gcore", + "gd", + "geoscaling", + "googledomains", + "he", + "he_ddns", + "hetzner", + "hexonet", + "hostingde", + "huaweicloud", + "infoblox", + "infomaniak", + "internetbs", + "inwx", + "ionos", + "ionos_cloud", + "ipv64", + "ispconfig", + "jd", + "joker", + "kappernet", + "kas", + "kinghost", + "knot", + "la", + "leaseweb", + "lexicon", + "limacity", + "linode", + "linode_v4", + "loopia", + "lua", + "maradns", + "me", + "miab", + "mijnhost", + "misaka", + "myapi", + "mydevil", + "mydnsjp", + "mythic_beasts", + "namecheap", + "namecom", + "namesilo", + "nanelo", + "nederhost", + "neodigit", + "netcup", + "netlify", + "nic", + "njalla", + "nm", + "nsd", + "nsone", + "nsupdate", + "nw", + "oci", + "omglol", + "one", + "online", + "openprovider", + "openstack", + "opnsense", + "ovh", + "pdns", + "pleskxml", + "pointhq", + "porkbun", + "rackcorp", + "rackspace", + "rage4", + "rcode0", + "regru", + "scaleway", + "schlundtech", + "selectel", + "selfhost", + "servercow", + "simply", + "technitium", + "tele3", + "tencent", + "timeweb", + "transip", + "udr", + "ultra", + "unoeuro", + "variomedia", + "veesp", + "vercel", + "vscale", + "vultr", + "websupport", + "west_cn", + "world4you", + "yandex360", + "yc", + "zilore", + "zone", + "zoneedit", + "zonomi" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "dns", + "standalone" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/acme/plugins/{id}": { + "get": { + "responseFields": [ + "api", + "data", + "digest", + "disable", + "nodes", + "plugin", + "type", + "validation-delay" + ] + }, + "put": { + "params": { + "api": { + "enum": [ + "1984hosting", + "acmedns", + "acmeproxy", + "active24", + "ad", + "ali", + "alviy", + "anx", + "artfiles", + "arvan", + "aurora", + "autodns", + "aws", + "azion", + "azure", + "beget", + "bookmyname", + "bunny", + "cf", + "clouddns", + "cloudns", + "cn", + "conoha", + "constellix", + "cpanel", + "curanet", + "cyon", + "da", + "ddnss", + "desec", + "df", + "dgon", + "dnsexit", + "dnshome", + "dnsimple", + "dnsservices", + "doapi", + "domeneshop", + "dp", + "dpi", + "dreamhost", + "duckdns", + "durabledns", + "dyn", + "dynu", + "dynv6", + "easydns", + "edgecenter", + "edgedns", + "euserv", + "exoscale", + "fornex", + "freedns", + "freemyip", + "gandi_livedns", + "gcloud", + "gcore", + "gd", + "geoscaling", + "googledomains", + "he", + "he_ddns", + "hetzner", + "hexonet", + "hostingde", + "huaweicloud", + "infoblox", + "infomaniak", + "internetbs", + "inwx", + "ionos", + "ionos_cloud", + "ipv64", + "ispconfig", + "jd", + "joker", + "kappernet", + "kas", + "kinghost", + "knot", + "la", + "leaseweb", + "lexicon", + "limacity", + "linode", + "linode_v4", + "loopia", + "lua", + "maradns", + "me", + "miab", + "mijnhost", + "misaka", + "myapi", + "mydevil", + "mydnsjp", + "mythic_beasts", + "namecheap", + "namecom", + "namesilo", + "nanelo", + "nederhost", + "neodigit", + "netcup", + "netlify", + "nic", + "njalla", + "nm", + "nsd", + "nsone", + "nsupdate", + "nw", + "oci", + "omglol", + "one", + "online", + "openprovider", + "openstack", + "opnsense", + "ovh", + "pdns", + "pleskxml", + "pointhq", + "porkbun", + "rackcorp", + "rackspace", + "rage4", + "rcode0", + "regru", + "scaleway", + "schlundtech", + "selectel", + "selfhost", + "servercow", + "simply", + "technitium", + "tele3", + "tencent", + "timeweb", + "transip", + "udr", + "ultra", + "unoeuro", + "variomedia", + "veesp", + "vercel", + "vscale", + "vultr", + "websupport", + "west_cn", + "world4you", + "yandex360", + "yc", + "zilore", + "zone", + "zoneedit", + "zonomi" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/acme/account": { + "get": { + "responseFields": [] + } + }, + "/cluster/acme/account/{name}": { + "get": { + "responseFields": [ + "account", + "directory", + "location", + "tos" + ] + } + }, + "/cluster/acme/meta": { + "get": { + "responseFields": [ + "caaIdentities", + "externalAccountRequired", + "termsOfService", + "website" + ] + } + }, + "/cluster/acme/directories": { + "get": { + "responseFields": [ + "name", + "url" + ] + } + }, + "/cluster/acme/challenge-schema": { + "get": { + "responseFields": [ + "id", + "name", + "schema", + "type" + ] + } + }, + "/cluster/ceph": { + "get": { + "responseFields": [] + } + }, + "/cluster/ceph/metadata": { + "get": { + "params": { + "scope": { + "enum": [ + "all", + "versions" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "mds", + "mgr", + "mon", + "node", + "osd" + ] + } + }, + "/cluster/ceph/flags": { + "get": { + "responseFields": [ + "description", + "name", + "value" + ] + } + }, + "/cluster/ceph/flags/{flag}": { + "get": { + "params": { + "flag": { + "enum": [ + "nobackfill", + "nodeep-scrub", + "nodown", + "noin", + "noout", + "norebalance", + "norecover", + "noscrub", + "notieragent", + "noup", + "pause" + ], + "x-enum-values": null, + "type": "string" + } + } + }, + "put": { + "params": { + "flag": { + "enum": [ + "nobackfill", + "nodeep-scrub", + "nodown", + "noin", + "noout", + "norebalance", + "norecover", + "noscrub", + "notieragent", + "noup", + "pause" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/jobs": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/cluster/jobs/realm-sync": { + "get": { + "responseFields": [ + "comment", + "enabled", + "id", + "last-run", + "next-run", + "realm", + "remove-vanished", + "schedule", + "scope" + ] + } + }, + "/cluster/jobs/realm-sync/{id}": { + "post": { + "params": { + "scope": { + "enum": [ + "users", + "groups", + "both" + ], + "x-enum-values": null, + "type": "string" + } + } + }, + "put": { + "params": { + "scope": { + "enum": [ + "users", + "groups", + "both" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/jobs/schedule-analyze": { + "get": { + "responseFields": [ + "timestamp", + "utc" + ] + } + }, + "/cluster/mapping/dir": { + "get": { + "responseFields": [ + "checks", + "description", + "id", + "map" + ] + } + }, + "/cluster/mapping/pci": { + "get": { + "responseFields": [ + "checks", + "description", + "id", + "map" + ] + } + }, + "/cluster/mapping/usb": { + "get": { + "responseFields": [ + "description", + "error", + "id", + "map" + ] + } + }, + "/cluster/bulk-action/guest": { + "get": { + "responseFields": [] + } + }, + "/cluster/sdn": { + "get": { + "responseFields": [ + "id" + ] + } + }, + "/cluster/sdn/vnets": { + "get": { + "responseFields": [ + "alias", + "digest", + "isolate-ports", + "pending", + "state", + "tag", + "type", + "vlanaware", + "vnet", + "zone" + ] + }, + "post": { + "params": { + "type": { + "enum": [ + "vnet" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/vnets/{vnet}/firewall": { + "get": { + "responseFields": [] + } + }, + "/cluster/sdn/vnets/{vnet}/firewall/rules": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "post": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/vnets/{vnet}/firewall/rules/{pos}": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "put": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/vnets/{vnet}/firewall/options": { + "get": { + "responseFields": [ + "enable", + "log_level_forward", + "policy_forward" + ] + }, + "put": { + "params": { + "log_level_forward": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "policy_forward": { + "enum": [ + "ACCEPT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/vnets/{vnet}/subnets": { + "get": { + "responseFields": [] + }, + "post": { + "params": { + "type": { + "enum": [ + "subnet" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/zones": { + "get": { + "params": { + "type": { + "enum": [ + "evpn", + "faucet", + "qinq", + "simple", + "vlan", + "vxlan" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "advertise-subnets", + "bridge", + "bridge-disable-mac-learning", + "controller", + "dhcp", + "digest", + "disable-arp-nd-suppression", + "dns", + "dnszone", + "exitnodes", + "exitnodes-local-routing", + "exitnodes-primary", + "ipam", + "mac", + "mtu", + "nodes", + "peers", + "pending", + "reversedns", + "rt-import", + "state", + "tag", + "type", + "vlan-protocol", + "vrf-vxlan", + "vxlan-port", + "zone" + ] + }, + "post": { + "params": { + "dhcp": { + "enum": [ + "dnsmasq" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "evpn", + "faucet", + "qinq", + "simple", + "vlan", + "vxlan" + ], + "x-enum-values": null, + "type": "string" + }, + "vlan-protocol": { + "enum": [ + "802.1q", + "802.1ad" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/zones/{zone}": { + "put": { + "params": { + "dhcp": { + "enum": [ + "dnsmasq" + ], + "x-enum-values": null, + "type": "string" + }, + "vlan-protocol": { + "enum": [ + "802.1q", + "802.1ad" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/controllers": { + "get": { + "params": { + "type": { + "enum": [ + "bgp", + "evpn", + "faucet", + "isis" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "asn", + "bgp-multipath-as-relax", + "controller", + "digest", + "ebgp", + "ebgp-multihop", + "isis-domain", + "isis-ifaces", + "isis-net", + "loopback", + "node", + "peers", + "pending", + "state", + "type" + ] + }, + "post": { + "params": { + "type": { + "enum": [ + "bgp", + "evpn", + "faucet", + "isis" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/ipams": { + "get": { + "params": { + "type": { + "enum": [ + "netbox", + "phpipam", + "pve" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "ipam", + "type" + ] + }, + "post": { + "params": { + "type": { + "enum": [ + "netbox", + "phpipam", + "pve" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/dns": { + "get": { + "params": { + "type": { + "enum": [ + "powerdns" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "dns", + "type" + ] + }, + "post": { + "params": { + "type": { + "enum": [ + "powerdns" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/fabrics": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/cluster/sdn/fabrics/fabric": { + "get": { + "responseFields": [ + "area", + "csnp_interval", + "digest", + "hello_interval", + "id", + "ip6_prefix", + "ip_prefix", + "lock-token", + "protocol" + ] + }, + "post": { + "params": { + "protocol": { + "enum": [ + "openfabric", + "ospf" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/fabrics/fabric/{id}": { + "get": { + "responseFields": [ + "area", + "csnp_interval", + "digest", + "hello_interval", + "id", + "ip6_prefix", + "ip_prefix", + "lock-token", + "protocol" + ] + }, + "put": { + "params": { + "protocol": { + "enum": [ + "openfabric", + "ospf" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/fabrics/node": { + "get": { + "responseFields": [ + "digest", + "fabric_id", + "interfaces", + "ip", + "ip6", + "lock-token", + "node_id", + "protocol" + ] + } + }, + "/cluster/sdn/fabrics/node/{fabric_id}": { + "get": { + "responseFields": [ + "digest", + "fabric_id", + "interfaces", + "ip", + "ip6", + "lock-token", + "node_id", + "protocol" + ] + }, + "post": { + "params": { + "protocol": { + "enum": [ + "openfabric", + "ospf" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/fabrics/node/{fabric_id}/{node_id}": { + "put": { + "params": { + "protocol": { + "enum": [ + "openfabric", + "ospf" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/sdn/fabrics/all": { + "get": { + "responseFields": [ + "fabrics", + "nodes" + ] + } + }, + "/cluster/log": { + "get": { + "responseFields": [] + } + }, + "/cluster/resources": { + "get": { + "params": { + "type": { + "enum": [ + "vm", + "storage", + "node", + "sdn" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "cgroup-mode", + "content", + "cpu", + "disk", + "diskread", + "diskwrite", + "hastate", + "id", + "level", + "lock", + "maxcpu", + "maxdisk", + "maxmem", + "mem", + "memhost", + "name", + "netin", + "netout", + "network", + "network-type", + "node", + "plugintype", + "pool", + "protocol", + "sdn", + "status", + "storage", + "tags", + "template", + "type", + "uptime", + "vmid", + "zone-type" + ] + } + }, + "/cluster/tasks": { + "get": { + "responseFields": [ + "upid" + ] + } + }, + "/cluster/options": { + "put": { + "params": { + "console": { + "enum": [ + "applet", + "vv", + "html5", + "xtermjs" + ], + "x-enum-values": null, + "type": "string" + }, + "fencing": { + "enum": [ + "watchdog", + "hardware", + "both" + ], + "x-enum-values": null, + "type": "string" + }, + "keyboard": { + "enum": [ + "de", + "de-ch", + "da", + "en-gb", + "en-us", + "es", + "fi", + "fr", + "fr-be", + "fr-ca", + "fr-ch", + "hu", + "is", + "it", + "ja", + "lt", + "mk", + "nl", + "no", + "pl", + "pt", + "pt-br", + "sv", + "sl", + "tr" + ], + "x-enum-values": null, + "type": "string" + }, + "language": { + "enum": [ + "ar", + "ca", + "da", + "de", + "en", + "es", + "eu", + "fa", + "fr", + "hr", + "he", + "it", + "ja", + "ka", + "kr", + "nb", + "nl", + "nn", + "pl", + "pt_BR", + "ru", + "sl", + "sv", + "tr", + "ukr", + "zh_CN", + "zh_TW" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/cluster/status": { + "get": { + "responseFields": [ + "id", + "ip", + "level", + "local", + "name", + "nodeid", + "nodes", + "online", + "quorate", + "type", + "version" + ] + } + }, + "/nodes": { + "get": { + "responseFields": [ + "cpu", + "level", + "maxcpu", + "maxmem", + "mem", + "node", + "ssl_fingerprint", + "status", + "uptime" + ] + } + }, + "/nodes/{node}": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/qemu": { + "get": { + "responseFields": [ + "cpu", + "cpus", + "diskread", + "diskwrite", + "lock", + "maxdisk", + "maxmem", + "mem", + "memhost", + "name", + "netin", + "netout", + "pid", + "pressurecpufull", + "pressurecpusome", + "pressureiofull", + "pressureiosome", + "pressurememoryfull", + "pressurememorysome", + "qmpstatus", + "running-machine", + "running-qemu", + "serial", + "status", + "tags", + "template", + "uptime", + "vmid" + ] + }, + "post": { + "params": { + "arch": { + "enum": [ + "x86_64", + "aarch64" + ], + "x-enum-values": null, + "type": "string" + }, + "bios": { + "enum": [ + "seabios", + "ovmf" + ], + "x-enum-values": null, + "type": "string" + }, + "citype": { + "enum": [ + "configdrive2", + "nocloud", + "opennebula" + ], + "x-enum-values": null, + "type": "string" + }, + "hotplug": { + "enum": null, + "x-enum-values": [ + "network", + "disk", + "cpu", + "memory", + "usb", + "cloudinit" + ], + "type": "string" + }, + "hugepages": { + "enum": [ + "any", + "2", + "1024" + ], + "x-enum-values": null, + "type": "string" + }, + "keyboard": { + "enum": [ + "de", + "de-ch", + "da", + "en-gb", + "en-us", + "es", + "fi", + "fr", + "fr-be", + "fr-ca", + "fr-ch", + "hu", + "is", + "it", + "ja", + "lt", + "mk", + "nl", + "no", + "pl", + "pt", + "pt-br", + "sv", + "sl", + "tr" + ], + "x-enum-values": null, + "type": "string" + }, + "lock": { + "enum": [ + "backup", + "clone", + "create", + "migrate", + "rollback", + "snapshot", + "snapshot-delete", + "suspending", + "suspended" + ], + "x-enum-values": null, + "type": "string" + }, + "ostype": { + "enum": [ + "other", + "wxp", + "w2k", + "w2k3", + "w2k8", + "wvista", + "win7", + "win8", + "win10", + "win11", + "l24", + "l26", + "solaris" + ], + "x-enum-values": null, + "type": "string" + }, + "scsihw": { + "enum": [ + "lsi", + "lsi53c810", + "virtio-scsi-pci", + "virtio-scsi-single", + "megasas", + "pvscsi" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/firewall": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/rules": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "post": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/rules/{pos}": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "put": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/aliases": { + "get": { + "responseFields": [ + "cidr", + "comment", + "digest", + "name" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/ipset": { + "get": { + "responseFields": [ + "comment", + "digest", + "name" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/ipset/{name}": { + "get": { + "responseFields": [ + "cidr", + "comment", + "digest", + "nomatch" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/options": { + "get": { + "responseFields": [ + "dhcp", + "enable", + "ipfilter", + "log_level_in", + "log_level_out", + "macfilter", + "ndp", + "policy_in", + "policy_out", + "radv" + ] + }, + "put": { + "params": { + "log_level_in": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "log_level_out": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "policy_in": { + "enum": [ + "ACCEPT", + "REJECT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + }, + "policy_out": { + "enum": [ + "ACCEPT", + "REJECT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/log": { + "get": { + "responseFields": [ + "n", + "t" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/firewall/refs": { + "get": { + "params": { + "type": { + "enum": [ + "alias", + "ipset" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "comment", + "name", + "ref", + "scope", + "type" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/agent": { + "get": { + "responseFields": [] + }, + "post": { + "params": { + "command": { + "enum": [ + "fsfreeze-freeze", + "fsfreeze-status", + "fsfreeze-thaw", + "fstrim", + "get-fsinfo", + "get-host-name", + "get-memory-block-info", + "get-memory-blocks", + "get-osinfo", + "get-time", + "get-timezone", + "get-users", + "get-vcpus", + "info", + "network-get-interfaces", + "ping", + "shutdown", + "suspend-disk", + "suspend-hybrid", + "suspend-ram" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/agent/exec": { + "post": { + "responseFields": [ + "pid" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/agent/exec-status": { + "get": { + "responseFields": [ + "err-data", + "err-truncated", + "exitcode", + "exited", + "out-data", + "out-truncated", + "signal" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/agent/file-read": { + "get": { + "responseFields": [ + "content", + "truncated" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/rrd": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "filename" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/rrddata": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [] + } + }, + "/nodes/{node}/qemu/{vmid}/config": { + "get": { + "responseFields": [ + "acpi", + "affinity", + "agent", + "allow-ksm", + "amd-sev", + "arch", + "args", + "audio0", + "autostart", + "balloon", + "bios", + "boot", + "bootdisk", + "cdrom", + "cicustom", + "cipassword", + "citype", + "ciupgrade", + "ciuser", + "cores", + "cpu", + "cpulimit", + "cpuunits", + "description", + "digest", + "efidisk0", + "freeze", + "hookscript", + "hostpci[n]", + "hotplug", + "hugepages", + "ide[n]", + "intel-tdx", + "ipconfig[n]", + "ivshmem", + "keephugepages", + "keyboard", + "kvm", + "localtime", + "lock", + "machine", + "memory", + "meta", + "migrate_downtime", + "migrate_speed", + "name", + "nameserver", + "net[n]", + "numa", + "numa[n]", + "onboot", + "ostype", + "parallel[n]", + "parent", + "protection", + "reboot", + "rng0", + "running-nets-host-mtu", + "runningcpu", + "runningmachine", + "sata[n]", + "scsi[n]", + "scsihw", + "searchdomain", + "serial[n]", + "shares", + "smbios1", + "smp", + "snaptime", + "sockets", + "spice_enhancements", + "sshkeys", + "startdate", + "startup", + "tablet", + "tags", + "tdf", + "template", + "tpmstate0", + "unused[n]", + "usb[n]", + "vcpus", + "vga", + "virtio[n]", + "virtiofs[n]", + "vmgenid", + "vmstate", + "vmstatestorage", + "watchdog" + ] + }, + "post": { + "params": { + "arch": { + "enum": [ + "x86_64", + "aarch64" + ], + "x-enum-values": null, + "type": "string" + }, + "bios": { + "enum": [ + "seabios", + "ovmf" + ], + "x-enum-values": null, + "type": "string" + }, + "citype": { + "enum": [ + "configdrive2", + "nocloud", + "opennebula" + ], + "x-enum-values": null, + "type": "string" + }, + "hotplug": { + "enum": null, + "x-enum-values": [ + "network", + "disk", + "cpu", + "memory", + "usb", + "cloudinit" + ], + "type": "string" + }, + "hugepages": { + "enum": [ + "any", + "2", + "1024" + ], + "x-enum-values": null, + "type": "string" + }, + "keyboard": { + "enum": [ + "de", + "de-ch", + "da", + "en-gb", + "en-us", + "es", + "fi", + "fr", + "fr-be", + "fr-ca", + "fr-ch", + "hu", + "is", + "it", + "ja", + "lt", + "mk", + "nl", + "no", + "pl", + "pt", + "pt-br", + "sv", + "sl", + "tr" + ], + "x-enum-values": null, + "type": "string" + }, + "lock": { + "enum": [ + "backup", + "clone", + "create", + "migrate", + "rollback", + "snapshot", + "snapshot-delete", + "suspending", + "suspended" + ], + "x-enum-values": null, + "type": "string" + }, + "ostype": { + "enum": [ + "other", + "wxp", + "w2k", + "w2k3", + "w2k8", + "wvista", + "win7", + "win8", + "win10", + "win11", + "l24", + "l26", + "solaris" + ], + "x-enum-values": null, + "type": "string" + }, + "scsihw": { + "enum": [ + "lsi", + "lsi53c810", + "virtio-scsi-pci", + "virtio-scsi-single", + "megasas", + "pvscsi" + ], + "x-enum-values": null, + "type": "string" + } + } + }, + "put": { + "params": { + "arch": { + "enum": [ + "x86_64", + "aarch64" + ], + "x-enum-values": null, + "type": "string" + }, + "bios": { + "enum": [ + "seabios", + "ovmf" + ], + "x-enum-values": null, + "type": "string" + }, + "citype": { + "enum": [ + "configdrive2", + "nocloud", + "opennebula" + ], + "x-enum-values": null, + "type": "string" + }, + "hotplug": { + "enum": null, + "x-enum-values": [ + "network", + "disk", + "cpu", + "memory", + "usb", + "cloudinit" + ], + "type": "string" + }, + "hugepages": { + "enum": [ + "any", + "2", + "1024" + ], + "x-enum-values": null, + "type": "string" + }, + "keyboard": { + "enum": [ + "de", + "de-ch", + "da", + "en-gb", + "en-us", + "es", + "fi", + "fr", + "fr-be", + "fr-ca", + "fr-ch", + "hu", + "is", + "it", + "ja", + "lt", + "mk", + "nl", + "no", + "pl", + "pt", + "pt-br", + "sv", + "sl", + "tr" + ], + "x-enum-values": null, + "type": "string" + }, + "lock": { + "enum": [ + "backup", + "clone", + "create", + "migrate", + "rollback", + "snapshot", + "snapshot-delete", + "suspending", + "suspended" + ], + "x-enum-values": null, + "type": "string" + }, + "ostype": { + "enum": [ + "other", + "wxp", + "w2k", + "w2k3", + "w2k8", + "wvista", + "win7", + "win8", + "win10", + "win11", + "l24", + "l26", + "solaris" + ], + "x-enum-values": null, + "type": "string" + }, + "scsihw": { + "enum": [ + "lsi", + "lsi53c810", + "virtio-scsi-pci", + "virtio-scsi-single", + "megasas", + "pvscsi" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/pending": { + "get": { + "responseFields": [ + "delete", + "key", + "pending", + "value" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/cloudinit": { + "get": { + "responseFields": [ + "delete", + "key", + "pending", + "value" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/cloudinit/dump": { + "get": { + "params": { + "type": { + "enum": [ + "user", + "network", + "meta" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/termproxy": { + "post": { + "params": { + "serial": { + "enum": [ + "serial0", + "serial1", + "serial2", + "serial3" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/vncwebsocket": { + "get": { + "responseFields": [ + "port" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/status": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/status/current": { + "get": { + "responseFields": [ + "agent", + "clipboard", + "cpu", + "cpus", + "diskread", + "diskwrite", + "ha", + "lock", + "maxdisk", + "maxmem", + "mem", + "memhost", + "name", + "netin", + "netout", + "pid", + "pressurecpufull", + "pressurecpusome", + "pressureiofull", + "pressureiosome", + "pressurememoryfull", + "pressurememorysome", + "qmpstatus", + "running-machine", + "running-qemu", + "serial", + "spice", + "status", + "tags", + "template", + "uptime", + "vmid" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/status/start": { + "post": { + "params": { + "migration_type": { + "enum": [ + "secure", + "insecure" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/feature": { + "get": { + "params": { + "feature": { + "enum": [ + "snapshot", + "clone", + "copy" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "hasFeature", + "nodes" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/clone": { + "post": { + "params": { + "format": { + "enum": [ + "raw", + "qcow2", + "vmdk" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/move_disk": { + "post": { + "params": { + "disk": { + "enum": [ + "ide0", + "ide1", + "ide2", + "ide3", + "scsi0", + "scsi1", + "scsi2", + "scsi3", + "scsi4", + "scsi5", + "scsi6", + "scsi7", + "scsi8", + "scsi9", + "scsi10", + "scsi11", + "scsi12", + "scsi13", + "scsi14", + "scsi15", + "scsi16", + "scsi17", + "scsi18", + "scsi19", + "scsi20", + "scsi21", + "scsi22", + "scsi23", + "scsi24", + "scsi25", + "scsi26", + "scsi27", + "scsi28", + "scsi29", + "scsi30", + "virtio0", + "virtio1", + "virtio2", + "virtio3", + "virtio4", + "virtio5", + "virtio6", + "virtio7", + "virtio8", + "virtio9", + "virtio10", + "virtio11", + "virtio12", + "virtio13", + "virtio14", + "virtio15", + "sata0", + "sata1", + "sata2", + "sata3", + "sata4", + "sata5", + "efidisk0", + "tpmstate0", + "unused0", + "unused1", + "unused2", + "unused3", + "unused4", + "unused5", + "unused6", + "unused7", + "unused8", + "unused9", + "unused10", + "unused11", + "unused12", + "unused13", + "unused14", + "unused15", + "unused16", + "unused17", + "unused18", + "unused19", + "unused20", + "unused21", + "unused22", + "unused23", + "unused24", + "unused25", + "unused26", + "unused27", + "unused28", + "unused29", + "unused30", + "unused31", + "unused32", + "unused33", + "unused34", + "unused35", + "unused36", + "unused37", + "unused38", + "unused39", + "unused40", + "unused41", + "unused42", + "unused43", + "unused44", + "unused45", + "unused46", + "unused47", + "unused48", + "unused49", + "unused50", + "unused51", + "unused52", + "unused53", + "unused54", + "unused55", + "unused56", + "unused57", + "unused58", + "unused59", + "unused60", + "unused61", + "unused62", + "unused63", + "unused64", + "unused65", + "unused66", + "unused67", + "unused68", + "unused69", + "unused70", + "unused71", + "unused72", + "unused73", + "unused74", + "unused75", + "unused76", + "unused77", + "unused78", + "unused79", + "unused80", + "unused81", + "unused82", + "unused83", + "unused84", + "unused85", + "unused86", + "unused87", + "unused88", + "unused89", + "unused90", + "unused91", + "unused92", + "unused93", + "unused94", + "unused95", + "unused96", + "unused97", + "unused98", + "unused99", + "unused100", + "unused101", + "unused102", + "unused103", + "unused104", + "unused105", + "unused106", + "unused107", + "unused108", + "unused109", + "unused110", + "unused111", + "unused112", + "unused113", + "unused114", + "unused115", + "unused116", + "unused117", + "unused118", + "unused119", + "unused120", + "unused121", + "unused122", + "unused123", + "unused124", + "unused125", + "unused126", + "unused127", + "unused128", + "unused129", + "unused130", + "unused131", + "unused132", + "unused133", + "unused134", + "unused135", + "unused136", + "unused137", + "unused138", + "unused139", + "unused140", + "unused141", + "unused142", + "unused143", + "unused144", + "unused145", + "unused146", + "unused147", + "unused148", + "unused149", + "unused150", + "unused151", + "unused152", + "unused153", + "unused154", + "unused155", + "unused156", + "unused157", + "unused158", + "unused159", + "unused160", + "unused161", + "unused162", + "unused163", + "unused164", + "unused165", + "unused166", + "unused167", + "unused168", + "unused169", + "unused170", + "unused171", + "unused172", + "unused173", + "unused174", + "unused175", + "unused176", + "unused177", + "unused178", + "unused179", + "unused180", + "unused181", + "unused182", + "unused183", + "unused184", + "unused185", + "unused186", + "unused187", + "unused188", + "unused189", + "unused190", + "unused191", + "unused192", + "unused193", + "unused194", + "unused195", + "unused196", + "unused197", + "unused198", + "unused199", + "unused200", + "unused201", + "unused202", + "unused203", + "unused204", + "unused205", + "unused206", + "unused207", + "unused208", + "unused209", + "unused210", + "unused211", + "unused212", + "unused213", + "unused214", + "unused215", + "unused216", + "unused217", + "unused218", + "unused219", + "unused220", + "unused221", + "unused222", + "unused223", + "unused224", + "unused225", + "unused226", + "unused227", + "unused228", + "unused229", + "unused230", + "unused231", + "unused232", + "unused233", + "unused234", + "unused235", + "unused236", + "unused237", + "unused238", + "unused239", + "unused240", + "unused241", + "unused242", + "unused243", + "unused244", + "unused245", + "unused246", + "unused247", + "unused248", + "unused249", + "unused250", + "unused251", + "unused252", + "unused253", + "unused254", + "unused255" + ], + "x-enum-values": null, + "type": "string" + }, + "format": { + "enum": [ + "raw", + "qcow2", + "vmdk" + ], + "x-enum-values": null, + "type": "string" + }, + "target-disk": { + "enum": [ + "ide0", + "ide1", + "ide2", + "ide3", + "scsi0", + "scsi1", + "scsi2", + "scsi3", + "scsi4", + "scsi5", + "scsi6", + "scsi7", + "scsi8", + "scsi9", + "scsi10", + "scsi11", + "scsi12", + "scsi13", + "scsi14", + "scsi15", + "scsi16", + "scsi17", + "scsi18", + "scsi19", + "scsi20", + "scsi21", + "scsi22", + "scsi23", + "scsi24", + "scsi25", + "scsi26", + "scsi27", + "scsi28", + "scsi29", + "scsi30", + "virtio0", + "virtio1", + "virtio2", + "virtio3", + "virtio4", + "virtio5", + "virtio6", + "virtio7", + "virtio8", + "virtio9", + "virtio10", + "virtio11", + "virtio12", + "virtio13", + "virtio14", + "virtio15", + "sata0", + "sata1", + "sata2", + "sata3", + "sata4", + "sata5", + "efidisk0", + "tpmstate0", + "unused0", + "unused1", + "unused2", + "unused3", + "unused4", + "unused5", + "unused6", + "unused7", + "unused8", + "unused9", + "unused10", + "unused11", + "unused12", + "unused13", + "unused14", + "unused15", + "unused16", + "unused17", + "unused18", + "unused19", + "unused20", + "unused21", + "unused22", + "unused23", + "unused24", + "unused25", + "unused26", + "unused27", + "unused28", + "unused29", + "unused30", + "unused31", + "unused32", + "unused33", + "unused34", + "unused35", + "unused36", + "unused37", + "unused38", + "unused39", + "unused40", + "unused41", + "unused42", + "unused43", + "unused44", + "unused45", + "unused46", + "unused47", + "unused48", + "unused49", + "unused50", + "unused51", + "unused52", + "unused53", + "unused54", + "unused55", + "unused56", + "unused57", + "unused58", + "unused59", + "unused60", + "unused61", + "unused62", + "unused63", + "unused64", + "unused65", + "unused66", + "unused67", + "unused68", + "unused69", + "unused70", + "unused71", + "unused72", + "unused73", + "unused74", + "unused75", + "unused76", + "unused77", + "unused78", + "unused79", + "unused80", + "unused81", + "unused82", + "unused83", + "unused84", + "unused85", + "unused86", + "unused87", + "unused88", + "unused89", + "unused90", + "unused91", + "unused92", + "unused93", + "unused94", + "unused95", + "unused96", + "unused97", + "unused98", + "unused99", + "unused100", + "unused101", + "unused102", + "unused103", + "unused104", + "unused105", + "unused106", + "unused107", + "unused108", + "unused109", + "unused110", + "unused111", + "unused112", + "unused113", + "unused114", + "unused115", + "unused116", + "unused117", + "unused118", + "unused119", + "unused120", + "unused121", + "unused122", + "unused123", + "unused124", + "unused125", + "unused126", + "unused127", + "unused128", + "unused129", + "unused130", + "unused131", + "unused132", + "unused133", + "unused134", + "unused135", + "unused136", + "unused137", + "unused138", + "unused139", + "unused140", + "unused141", + "unused142", + "unused143", + "unused144", + "unused145", + "unused146", + "unused147", + "unused148", + "unused149", + "unused150", + "unused151", + "unused152", + "unused153", + "unused154", + "unused155", + "unused156", + "unused157", + "unused158", + "unused159", + "unused160", + "unused161", + "unused162", + "unused163", + "unused164", + "unused165", + "unused166", + "unused167", + "unused168", + "unused169", + "unused170", + "unused171", + "unused172", + "unused173", + "unused174", + "unused175", + "unused176", + "unused177", + "unused178", + "unused179", + "unused180", + "unused181", + "unused182", + "unused183", + "unused184", + "unused185", + "unused186", + "unused187", + "unused188", + "unused189", + "unused190", + "unused191", + "unused192", + "unused193", + "unused194", + "unused195", + "unused196", + "unused197", + "unused198", + "unused199", + "unused200", + "unused201", + "unused202", + "unused203", + "unused204", + "unused205", + "unused206", + "unused207", + "unused208", + "unused209", + "unused210", + "unused211", + "unused212", + "unused213", + "unused214", + "unused215", + "unused216", + "unused217", + "unused218", + "unused219", + "unused220", + "unused221", + "unused222", + "unused223", + "unused224", + "unused225", + "unused226", + "unused227", + "unused228", + "unused229", + "unused230", + "unused231", + "unused232", + "unused233", + "unused234", + "unused235", + "unused236", + "unused237", + "unused238", + "unused239", + "unused240", + "unused241", + "unused242", + "unused243", + "unused244", + "unused245", + "unused246", + "unused247", + "unused248", + "unused249", + "unused250", + "unused251", + "unused252", + "unused253", + "unused254", + "unused255" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/migrate": { + "get": { + "responseFields": [ + "allowed_nodes", + "dependent-ha-resources", + "has-dbus-vmstate", + "local_disks", + "local_resources", + "mapped-resource-info", + "mapped-resources", + "not_allowed_nodes", + "running" + ] + }, + "post": { + "params": { + "migration_type": { + "enum": [ + "secure", + "insecure" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/resize": { + "put": { + "params": { + "disk": { + "enum": [ + "ide0", + "ide1", + "ide2", + "ide3", + "scsi0", + "scsi1", + "scsi2", + "scsi3", + "scsi4", + "scsi5", + "scsi6", + "scsi7", + "scsi8", + "scsi9", + "scsi10", + "scsi11", + "scsi12", + "scsi13", + "scsi14", + "scsi15", + "scsi16", + "scsi17", + "scsi18", + "scsi19", + "scsi20", + "scsi21", + "scsi22", + "scsi23", + "scsi24", + "scsi25", + "scsi26", + "scsi27", + "scsi28", + "scsi29", + "scsi30", + "virtio0", + "virtio1", + "virtio2", + "virtio3", + "virtio4", + "virtio5", + "virtio6", + "virtio7", + "virtio8", + "virtio9", + "virtio10", + "virtio11", + "virtio12", + "virtio13", + "virtio14", + "virtio15", + "sata0", + "sata1", + "sata2", + "sata3", + "sata4", + "sata5", + "efidisk0", + "tpmstate0" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/snapshot": { + "get": { + "responseFields": [ + "description", + "name", + "parent", + "snaptime", + "vmstate" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/snapshot/{snapname}": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/qemu/{vmid}/template": { + "post": { + "params": { + "disk": { + "enum": [ + "ide0", + "ide1", + "ide2", + "ide3", + "scsi0", + "scsi1", + "scsi2", + "scsi3", + "scsi4", + "scsi5", + "scsi6", + "scsi7", + "scsi8", + "scsi9", + "scsi10", + "scsi11", + "scsi12", + "scsi13", + "scsi14", + "scsi15", + "scsi16", + "scsi17", + "scsi18", + "scsi19", + "scsi20", + "scsi21", + "scsi22", + "scsi23", + "scsi24", + "scsi25", + "scsi26", + "scsi27", + "scsi28", + "scsi29", + "scsi30", + "virtio0", + "virtio1", + "virtio2", + "virtio3", + "virtio4", + "virtio5", + "virtio6", + "virtio7", + "virtio8", + "virtio9", + "virtio10", + "virtio11", + "virtio12", + "virtio13", + "virtio14", + "virtio15", + "sata0", + "sata1", + "sata2", + "sata3", + "sata4", + "sata5", + "efidisk0", + "tpmstate0" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/qemu/{vmid}/mtunnelwebsocket": { + "get": { + "responseFields": [ + "port", + "socket" + ] + } + }, + "/nodes/{node}/qemu/{vmid}/dbus-vmstate": { + "post": { + "params": { + "action": { + "enum": [ + "start", + "stop" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc": { + "get": { + "responseFields": [ + "cpu", + "cpus", + "disk", + "diskread", + "diskwrite", + "lock", + "maxdisk", + "maxmem", + "maxswap", + "mem", + "name", + "netin", + "netout", + "pressurecpusome", + "pressureiofull", + "pressureiosome", + "pressurememoryfull", + "pressurememorysome", + "status", + "tags", + "template", + "uptime", + "vmid" + ] + }, + "post": { + "params": { + "arch": { + "enum": [ + "amd64", + "i386", + "arm64", + "armhf", + "riscv32", + "riscv64" + ], + "x-enum-values": null, + "type": "string" + }, + "cmode": { + "enum": [ + "shell", + "console", + "tty" + ], + "x-enum-values": null, + "type": "string" + }, + "lock": { + "enum": [ + "backup", + "create", + "destroyed", + "disk", + "fstrim", + "migrate", + "mounted", + "rollback", + "snapshot", + "snapshot-delete" + ], + "x-enum-values": null, + "type": "string" + }, + "ostype": { + "enum": [ + "debian", + "devuan", + "ubuntu", + "centos", + "fedora", + "opensuse", + "archlinux", + "alpine", + "gentoo", + "nixos", + "unmanaged" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc/{vmid}": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/config": { + "get": { + "responseFields": [ + "arch", + "cmode", + "console", + "cores", + "cpulimit", + "cpuunits", + "debug", + "description", + "dev[n]", + "digest", + "entrypoint", + "env", + "features", + "hookscript", + "hostname", + "lock", + "lxc", + "memory", + "mp[n]", + "nameserver", + "net[n]", + "onboot", + "ostype", + "protection", + "rootfs", + "searchdomain", + "startup", + "swap", + "tags", + "template", + "timezone", + "tty", + "unprivileged", + "unused[n]" + ] + }, + "put": { + "params": { + "arch": { + "enum": [ + "amd64", + "i386", + "arm64", + "armhf", + "riscv32", + "riscv64" + ], + "x-enum-values": null, + "type": "string" + }, + "cmode": { + "enum": [ + "shell", + "console", + "tty" + ], + "x-enum-values": null, + "type": "string" + }, + "lock": { + "enum": [ + "backup", + "create", + "destroyed", + "disk", + "fstrim", + "migrate", + "mounted", + "rollback", + "snapshot", + "snapshot-delete" + ], + "x-enum-values": null, + "type": "string" + }, + "ostype": { + "enum": [ + "debian", + "devuan", + "ubuntu", + "centos", + "fedora", + "opensuse", + "archlinux", + "alpine", + "gentoo", + "nixos", + "unmanaged" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc/{vmid}/status": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/status/current": { + "get": { + "responseFields": [ + "cpu", + "cpus", + "disk", + "diskread", + "diskwrite", + "ha", + "lock", + "maxdisk", + "maxmem", + "maxswap", + "mem", + "name", + "netin", + "netout", + "pressurecpusome", + "pressureiofull", + "pressureiosome", + "pressurememoryfull", + "pressurememorysome", + "status", + "tags", + "template", + "uptime", + "vmid" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/snapshot": { + "get": { + "responseFields": [ + "description", + "name", + "parent", + "snaptime" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/snapshot/{snapname}": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/lxc/{vmid}/firewall": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/rules": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "post": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/rules/{pos}": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "put": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/aliases": { + "get": { + "responseFields": [ + "cidr", + "comment", + "digest", + "name" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/ipset": { + "get": { + "responseFields": [ + "comment", + "digest", + "name" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/ipset/{name}": { + "get": { + "responseFields": [ + "cidr", + "comment", + "digest", + "nomatch" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/options": { + "get": { + "responseFields": [ + "dhcp", + "enable", + "ipfilter", + "log_level_in", + "log_level_out", + "macfilter", + "ndp", + "policy_in", + "policy_out", + "radv" + ] + }, + "put": { + "params": { + "log_level_in": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "log_level_out": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "policy_in": { + "enum": [ + "ACCEPT", + "REJECT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + }, + "policy_out": { + "enum": [ + "ACCEPT", + "REJECT", + "DROP" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/log": { + "get": { + "responseFields": [ + "n", + "t" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/firewall/refs": { + "get": { + "params": { + "type": { + "enum": [ + "alias", + "ipset" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "comment", + "name", + "ref", + "scope", + "type" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/rrd": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "filename" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/rrddata": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [] + } + }, + "/nodes/{node}/lxc/{vmid}/vncwebsocket": { + "get": { + "responseFields": [ + "port" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/migrate": { + "get": { + "responseFields": [ + "allowed-nodes", + "dependent-ha-resources", + "not-allowed-nodes", + "running" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/feature": { + "get": { + "params": { + "feature": { + "enum": [ + "snapshot", + "clone", + "copy" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "hasFeature" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/resize": { + "put": { + "params": { + "disk": { + "enum": [ + "rootfs", + "mp0", + "mp1", + "mp2", + "mp3", + "mp4", + "mp5", + "mp6", + "mp7", + "mp8", + "mp9", + "mp10", + "mp11", + "mp12", + "mp13", + "mp14", + "mp15", + "mp16", + "mp17", + "mp18", + "mp19", + "mp20", + "mp21", + "mp22", + "mp23", + "mp24", + "mp25", + "mp26", + "mp27", + "mp28", + "mp29", + "mp30", + "mp31", + "mp32", + "mp33", + "mp34", + "mp35", + "mp36", + "mp37", + "mp38", + "mp39", + "mp40", + "mp41", + "mp42", + "mp43", + "mp44", + "mp45", + "mp46", + "mp47", + "mp48", + "mp49", + "mp50", + "mp51", + "mp52", + "mp53", + "mp54", + "mp55", + "mp56", + "mp57", + "mp58", + "mp59", + "mp60", + "mp61", + "mp62", + "mp63", + "mp64", + "mp65", + "mp66", + "mp67", + "mp68", + "mp69", + "mp70", + "mp71", + "mp72", + "mp73", + "mp74", + "mp75", + "mp76", + "mp77", + "mp78", + "mp79", + "mp80", + "mp81", + "mp82", + "mp83", + "mp84", + "mp85", + "mp86", + "mp87", + "mp88", + "mp89", + "mp90", + "mp91", + "mp92", + "mp93", + "mp94", + "mp95", + "mp96", + "mp97", + "mp98", + "mp99", + "mp100", + "mp101", + "mp102", + "mp103", + "mp104", + "mp105", + "mp106", + "mp107", + "mp108", + "mp109", + "mp110", + "mp111", + "mp112", + "mp113", + "mp114", + "mp115", + "mp116", + "mp117", + "mp118", + "mp119", + "mp120", + "mp121", + "mp122", + "mp123", + "mp124", + "mp125", + "mp126", + "mp127", + "mp128", + "mp129", + "mp130", + "mp131", + "mp132", + "mp133", + "mp134", + "mp135", + "mp136", + "mp137", + "mp138", + "mp139", + "mp140", + "mp141", + "mp142", + "mp143", + "mp144", + "mp145", + "mp146", + "mp147", + "mp148", + "mp149", + "mp150", + "mp151", + "mp152", + "mp153", + "mp154", + "mp155", + "mp156", + "mp157", + "mp158", + "mp159", + "mp160", + "mp161", + "mp162", + "mp163", + "mp164", + "mp165", + "mp166", + "mp167", + "mp168", + "mp169", + "mp170", + "mp171", + "mp172", + "mp173", + "mp174", + "mp175", + "mp176", + "mp177", + "mp178", + "mp179", + "mp180", + "mp181", + "mp182", + "mp183", + "mp184", + "mp185", + "mp186", + "mp187", + "mp188", + "mp189", + "mp190", + "mp191", + "mp192", + "mp193", + "mp194", + "mp195", + "mp196", + "mp197", + "mp198", + "mp199", + "mp200", + "mp201", + "mp202", + "mp203", + "mp204", + "mp205", + "mp206", + "mp207", + "mp208", + "mp209", + "mp210", + "mp211", + "mp212", + "mp213", + "mp214", + "mp215", + "mp216", + "mp217", + "mp218", + "mp219", + "mp220", + "mp221", + "mp222", + "mp223", + "mp224", + "mp225", + "mp226", + "mp227", + "mp228", + "mp229", + "mp230", + "mp231", + "mp232", + "mp233", + "mp234", + "mp235", + "mp236", + "mp237", + "mp238", + "mp239", + "mp240", + "mp241", + "mp242", + "mp243", + "mp244", + "mp245", + "mp246", + "mp247", + "mp248", + "mp249", + "mp250", + "mp251", + "mp252", + "mp253", + "mp254", + "mp255" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc/{vmid}/move_volume": { + "post": { + "params": { + "target-volume": { + "enum": [ + "rootfs", + "mp0", + "mp1", + "mp2", + "mp3", + "mp4", + "mp5", + "mp6", + "mp7", + "mp8", + "mp9", + "mp10", + "mp11", + "mp12", + "mp13", + "mp14", + "mp15", + "mp16", + "mp17", + "mp18", + "mp19", + "mp20", + "mp21", + "mp22", + "mp23", + "mp24", + "mp25", + "mp26", + "mp27", + "mp28", + "mp29", + "mp30", + "mp31", + "mp32", + "mp33", + "mp34", + "mp35", + "mp36", + "mp37", + "mp38", + "mp39", + "mp40", + "mp41", + "mp42", + "mp43", + "mp44", + "mp45", + "mp46", + "mp47", + "mp48", + "mp49", + "mp50", + "mp51", + "mp52", + "mp53", + "mp54", + "mp55", + "mp56", + "mp57", + "mp58", + "mp59", + "mp60", + "mp61", + "mp62", + "mp63", + "mp64", + "mp65", + "mp66", + "mp67", + "mp68", + "mp69", + "mp70", + "mp71", + "mp72", + "mp73", + "mp74", + "mp75", + "mp76", + "mp77", + "mp78", + "mp79", + "mp80", + "mp81", + "mp82", + "mp83", + "mp84", + "mp85", + "mp86", + "mp87", + "mp88", + "mp89", + "mp90", + "mp91", + "mp92", + "mp93", + "mp94", + "mp95", + "mp96", + "mp97", + "mp98", + "mp99", + "mp100", + "mp101", + "mp102", + "mp103", + "mp104", + "mp105", + "mp106", + "mp107", + "mp108", + "mp109", + "mp110", + "mp111", + "mp112", + "mp113", + "mp114", + "mp115", + "mp116", + "mp117", + "mp118", + "mp119", + "mp120", + "mp121", + "mp122", + "mp123", + "mp124", + "mp125", + "mp126", + "mp127", + "mp128", + "mp129", + "mp130", + "mp131", + "mp132", + "mp133", + "mp134", + "mp135", + "mp136", + "mp137", + "mp138", + "mp139", + "mp140", + "mp141", + "mp142", + "mp143", + "mp144", + "mp145", + "mp146", + "mp147", + "mp148", + "mp149", + "mp150", + "mp151", + "mp152", + "mp153", + "mp154", + "mp155", + "mp156", + "mp157", + "mp158", + "mp159", + "mp160", + "mp161", + "mp162", + "mp163", + "mp164", + "mp165", + "mp166", + "mp167", + "mp168", + "mp169", + "mp170", + "mp171", + "mp172", + "mp173", + "mp174", + "mp175", + "mp176", + "mp177", + "mp178", + "mp179", + "mp180", + "mp181", + "mp182", + "mp183", + "mp184", + "mp185", + "mp186", + "mp187", + "mp188", + "mp189", + "mp190", + "mp191", + "mp192", + "mp193", + "mp194", + "mp195", + "mp196", + "mp197", + "mp198", + "mp199", + "mp200", + "mp201", + "mp202", + "mp203", + "mp204", + "mp205", + "mp206", + "mp207", + "mp208", + "mp209", + "mp210", + "mp211", + "mp212", + "mp213", + "mp214", + "mp215", + "mp216", + "mp217", + "mp218", + "mp219", + "mp220", + "mp221", + "mp222", + "mp223", + "mp224", + "mp225", + "mp226", + "mp227", + "mp228", + "mp229", + "mp230", + "mp231", + "mp232", + "mp233", + "mp234", + "mp235", + "mp236", + "mp237", + "mp238", + "mp239", + "mp240", + "mp241", + "mp242", + "mp243", + "mp244", + "mp245", + "mp246", + "mp247", + "mp248", + "mp249", + "mp250", + "mp251", + "mp252", + "mp253", + "mp254", + "mp255", + "unused0", + "unused1", + "unused2", + "unused3", + "unused4", + "unused5", + "unused6", + "unused7", + "unused8", + "unused9", + "unused10", + "unused11", + "unused12", + "unused13", + "unused14", + "unused15", + "unused16", + "unused17", + "unused18", + "unused19", + "unused20", + "unused21", + "unused22", + "unused23", + "unused24", + "unused25", + "unused26", + "unused27", + "unused28", + "unused29", + "unused30", + "unused31", + "unused32", + "unused33", + "unused34", + "unused35", + "unused36", + "unused37", + "unused38", + "unused39", + "unused40", + "unused41", + "unused42", + "unused43", + "unused44", + "unused45", + "unused46", + "unused47", + "unused48", + "unused49", + "unused50", + "unused51", + "unused52", + "unused53", + "unused54", + "unused55", + "unused56", + "unused57", + "unused58", + "unused59", + "unused60", + "unused61", + "unused62", + "unused63", + "unused64", + "unused65", + "unused66", + "unused67", + "unused68", + "unused69", + "unused70", + "unused71", + "unused72", + "unused73", + "unused74", + "unused75", + "unused76", + "unused77", + "unused78", + "unused79", + "unused80", + "unused81", + "unused82", + "unused83", + "unused84", + "unused85", + "unused86", + "unused87", + "unused88", + "unused89", + "unused90", + "unused91", + "unused92", + "unused93", + "unused94", + "unused95", + "unused96", + "unused97", + "unused98", + "unused99", + "unused100", + "unused101", + "unused102", + "unused103", + "unused104", + "unused105", + "unused106", + "unused107", + "unused108", + "unused109", + "unused110", + "unused111", + "unused112", + "unused113", + "unused114", + "unused115", + "unused116", + "unused117", + "unused118", + "unused119", + "unused120", + "unused121", + "unused122", + "unused123", + "unused124", + "unused125", + "unused126", + "unused127", + "unused128", + "unused129", + "unused130", + "unused131", + "unused132", + "unused133", + "unused134", + "unused135", + "unused136", + "unused137", + "unused138", + "unused139", + "unused140", + "unused141", + "unused142", + "unused143", + "unused144", + "unused145", + "unused146", + "unused147", + "unused148", + "unused149", + "unused150", + "unused151", + "unused152", + "unused153", + "unused154", + "unused155", + "unused156", + "unused157", + "unused158", + "unused159", + "unused160", + "unused161", + "unused162", + "unused163", + "unused164", + "unused165", + "unused166", + "unused167", + "unused168", + "unused169", + "unused170", + "unused171", + "unused172", + "unused173", + "unused174", + "unused175", + "unused176", + "unused177", + "unused178", + "unused179", + "unused180", + "unused181", + "unused182", + "unused183", + "unused184", + "unused185", + "unused186", + "unused187", + "unused188", + "unused189", + "unused190", + "unused191", + "unused192", + "unused193", + "unused194", + "unused195", + "unused196", + "unused197", + "unused198", + "unused199", + "unused200", + "unused201", + "unused202", + "unused203", + "unused204", + "unused205", + "unused206", + "unused207", + "unused208", + "unused209", + "unused210", + "unused211", + "unused212", + "unused213", + "unused214", + "unused215", + "unused216", + "unused217", + "unused218", + "unused219", + "unused220", + "unused221", + "unused222", + "unused223", + "unused224", + "unused225", + "unused226", + "unused227", + "unused228", + "unused229", + "unused230", + "unused231", + "unused232", + "unused233", + "unused234", + "unused235", + "unused236", + "unused237", + "unused238", + "unused239", + "unused240", + "unused241", + "unused242", + "unused243", + "unused244", + "unused245", + "unused246", + "unused247", + "unused248", + "unused249", + "unused250", + "unused251", + "unused252", + "unused253", + "unused254", + "unused255" + ], + "x-enum-values": null, + "type": "string" + }, + "volume": { + "enum": [ + "rootfs", + "mp0", + "mp1", + "mp2", + "mp3", + "mp4", + "mp5", + "mp6", + "mp7", + "mp8", + "mp9", + "mp10", + "mp11", + "mp12", + "mp13", + "mp14", + "mp15", + "mp16", + "mp17", + "mp18", + "mp19", + "mp20", + "mp21", + "mp22", + "mp23", + "mp24", + "mp25", + "mp26", + "mp27", + "mp28", + "mp29", + "mp30", + "mp31", + "mp32", + "mp33", + "mp34", + "mp35", + "mp36", + "mp37", + "mp38", + "mp39", + "mp40", + "mp41", + "mp42", + "mp43", + "mp44", + "mp45", + "mp46", + "mp47", + "mp48", + "mp49", + "mp50", + "mp51", + "mp52", + "mp53", + "mp54", + "mp55", + "mp56", + "mp57", + "mp58", + "mp59", + "mp60", + "mp61", + "mp62", + "mp63", + "mp64", + "mp65", + "mp66", + "mp67", + "mp68", + "mp69", + "mp70", + "mp71", + "mp72", + "mp73", + "mp74", + "mp75", + "mp76", + "mp77", + "mp78", + "mp79", + "mp80", + "mp81", + "mp82", + "mp83", + "mp84", + "mp85", + "mp86", + "mp87", + "mp88", + "mp89", + "mp90", + "mp91", + "mp92", + "mp93", + "mp94", + "mp95", + "mp96", + "mp97", + "mp98", + "mp99", + "mp100", + "mp101", + "mp102", + "mp103", + "mp104", + "mp105", + "mp106", + "mp107", + "mp108", + "mp109", + "mp110", + "mp111", + "mp112", + "mp113", + "mp114", + "mp115", + "mp116", + "mp117", + "mp118", + "mp119", + "mp120", + "mp121", + "mp122", + "mp123", + "mp124", + "mp125", + "mp126", + "mp127", + "mp128", + "mp129", + "mp130", + "mp131", + "mp132", + "mp133", + "mp134", + "mp135", + "mp136", + "mp137", + "mp138", + "mp139", + "mp140", + "mp141", + "mp142", + "mp143", + "mp144", + "mp145", + "mp146", + "mp147", + "mp148", + "mp149", + "mp150", + "mp151", + "mp152", + "mp153", + "mp154", + "mp155", + "mp156", + "mp157", + "mp158", + "mp159", + "mp160", + "mp161", + "mp162", + "mp163", + "mp164", + "mp165", + "mp166", + "mp167", + "mp168", + "mp169", + "mp170", + "mp171", + "mp172", + "mp173", + "mp174", + "mp175", + "mp176", + "mp177", + "mp178", + "mp179", + "mp180", + "mp181", + "mp182", + "mp183", + "mp184", + "mp185", + "mp186", + "mp187", + "mp188", + "mp189", + "mp190", + "mp191", + "mp192", + "mp193", + "mp194", + "mp195", + "mp196", + "mp197", + "mp198", + "mp199", + "mp200", + "mp201", + "mp202", + "mp203", + "mp204", + "mp205", + "mp206", + "mp207", + "mp208", + "mp209", + "mp210", + "mp211", + "mp212", + "mp213", + "mp214", + "mp215", + "mp216", + "mp217", + "mp218", + "mp219", + "mp220", + "mp221", + "mp222", + "mp223", + "mp224", + "mp225", + "mp226", + "mp227", + "mp228", + "mp229", + "mp230", + "mp231", + "mp232", + "mp233", + "mp234", + "mp235", + "mp236", + "mp237", + "mp238", + "mp239", + "mp240", + "mp241", + "mp242", + "mp243", + "mp244", + "mp245", + "mp246", + "mp247", + "mp248", + "mp249", + "mp250", + "mp251", + "mp252", + "mp253", + "mp254", + "mp255", + "unused0", + "unused1", + "unused2", + "unused3", + "unused4", + "unused5", + "unused6", + "unused7", + "unused8", + "unused9", + "unused10", + "unused11", + "unused12", + "unused13", + "unused14", + "unused15", + "unused16", + "unused17", + "unused18", + "unused19", + "unused20", + "unused21", + "unused22", + "unused23", + "unused24", + "unused25", + "unused26", + "unused27", + "unused28", + "unused29", + "unused30", + "unused31", + "unused32", + "unused33", + "unused34", + "unused35", + "unused36", + "unused37", + "unused38", + "unused39", + "unused40", + "unused41", + "unused42", + "unused43", + "unused44", + "unused45", + "unused46", + "unused47", + "unused48", + "unused49", + "unused50", + "unused51", + "unused52", + "unused53", + "unused54", + "unused55", + "unused56", + "unused57", + "unused58", + "unused59", + "unused60", + "unused61", + "unused62", + "unused63", + "unused64", + "unused65", + "unused66", + "unused67", + "unused68", + "unused69", + "unused70", + "unused71", + "unused72", + "unused73", + "unused74", + "unused75", + "unused76", + "unused77", + "unused78", + "unused79", + "unused80", + "unused81", + "unused82", + "unused83", + "unused84", + "unused85", + "unused86", + "unused87", + "unused88", + "unused89", + "unused90", + "unused91", + "unused92", + "unused93", + "unused94", + "unused95", + "unused96", + "unused97", + "unused98", + "unused99", + "unused100", + "unused101", + "unused102", + "unused103", + "unused104", + "unused105", + "unused106", + "unused107", + "unused108", + "unused109", + "unused110", + "unused111", + "unused112", + "unused113", + "unused114", + "unused115", + "unused116", + "unused117", + "unused118", + "unused119", + "unused120", + "unused121", + "unused122", + "unused123", + "unused124", + "unused125", + "unused126", + "unused127", + "unused128", + "unused129", + "unused130", + "unused131", + "unused132", + "unused133", + "unused134", + "unused135", + "unused136", + "unused137", + "unused138", + "unused139", + "unused140", + "unused141", + "unused142", + "unused143", + "unused144", + "unused145", + "unused146", + "unused147", + "unused148", + "unused149", + "unused150", + "unused151", + "unused152", + "unused153", + "unused154", + "unused155", + "unused156", + "unused157", + "unused158", + "unused159", + "unused160", + "unused161", + "unused162", + "unused163", + "unused164", + "unused165", + "unused166", + "unused167", + "unused168", + "unused169", + "unused170", + "unused171", + "unused172", + "unused173", + "unused174", + "unused175", + "unused176", + "unused177", + "unused178", + "unused179", + "unused180", + "unused181", + "unused182", + "unused183", + "unused184", + "unused185", + "unused186", + "unused187", + "unused188", + "unused189", + "unused190", + "unused191", + "unused192", + "unused193", + "unused194", + "unused195", + "unused196", + "unused197", + "unused198", + "unused199", + "unused200", + "unused201", + "unused202", + "unused203", + "unused204", + "unused205", + "unused206", + "unused207", + "unused208", + "unused209", + "unused210", + "unused211", + "unused212", + "unused213", + "unused214", + "unused215", + "unused216", + "unused217", + "unused218", + "unused219", + "unused220", + "unused221", + "unused222", + "unused223", + "unused224", + "unused225", + "unused226", + "unused227", + "unused228", + "unused229", + "unused230", + "unused231", + "unused232", + "unused233", + "unused234", + "unused235", + "unused236", + "unused237", + "unused238", + "unused239", + "unused240", + "unused241", + "unused242", + "unused243", + "unused244", + "unused245", + "unused246", + "unused247", + "unused248", + "unused249", + "unused250", + "unused251", + "unused252", + "unused253", + "unused254", + "unused255" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/lxc/{vmid}/pending": { + "get": { + "responseFields": [ + "delete", + "key", + "pending", + "value" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/interfaces": { + "get": { + "responseFields": [ + "hardware-address", + "hwaddr", + "inet", + "inet6", + "ip-addresses", + "name" + ] + } + }, + "/nodes/{node}/lxc/{vmid}/mtunnelwebsocket": { + "get": { + "responseFields": [ + "port", + "socket" + ] + } + }, + "/nodes/{node}/ceph": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/ceph/cfg": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/ceph/cfg/db": { + "get": { + "responseFields": [ + "can_update_at_runtime", + "level", + "mask", + "name", + "section", + "value" + ] + } + }, + "/nodes/{node}/ceph/osd/{osdid}": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/ceph/osd/{osdid}/metadata": { + "get": { + "responseFields": [ + "devices", + "osd" + ] + } + }, + "/nodes/{node}/ceph/osd/{osdid}/lv-info": { + "get": { + "params": { + "type": { + "enum": [ + "block", + "db", + "wal" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "creation_time", + "lv_name", + "lv_path", + "lv_size", + "lv_uuid", + "vg_name" + ] + } + }, + "/nodes/{node}/ceph/mds": { + "get": { + "responseFields": [ + "addr", + "host", + "name", + "rank", + "standby_replay", + "state" + ] + } + }, + "/nodes/{node}/ceph/mgr": { + "get": { + "responseFields": [ + "addr", + "host", + "name", + "state" + ] + } + }, + "/nodes/{node}/ceph/mon": { + "get": { + "responseFields": [ + "addr", + "ceph_version", + "ceph_version_short", + "direxists", + "host", + "name", + "quorum", + "rank", + "service", + "state" + ] + } + }, + "/nodes/{node}/ceph/fs": { + "get": { + "responseFields": [ + "data_pool", + "metadata_pool", + "name" + ] + } + }, + "/nodes/{node}/ceph/pool": { + "get": { + "responseFields": [ + "application_metadata", + "autoscale_status", + "bytes_used", + "crush_rule", + "crush_rule_name", + "min_size", + "percent_used", + "pg_autoscale_mode", + "pg_num", + "pg_num_final", + "pg_num_min", + "pool", + "pool_name", + "size", + "target_size", + "target_size_ratio", + "type" + ] + }, + "post": { + "params": { + "application": { + "enum": [ + "rbd", + "cephfs", + "rgw" + ], + "x-enum-values": null, + "type": "string" + }, + "pg_autoscale_mode": { + "enum": [ + "on", + "off", + "warn" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/ceph/pool/{name}": { + "get": { + "responseFields": [] + }, + "put": { + "params": { + "application": { + "enum": [ + "rbd", + "cephfs", + "rgw" + ], + "x-enum-values": null, + "type": "string" + }, + "pg_autoscale_mode": { + "enum": [ + "on", + "off", + "warn" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/ceph/pool/{name}/status": { + "get": { + "responseFields": [ + "application", + "application_list", + "autoscale_status", + "crush_rule", + "fast_read", + "hashpspool", + "id", + "min_size", + "name", + "nodeep-scrub", + "nodelete", + "nopgchange", + "noscrub", + "nosizechange", + "pg_autoscale_mode", + "pg_num", + "pg_num_min", + "pgp_num", + "size", + "statistics", + "target_size", + "target_size_ratio", + "use_gmt_hitset", + "write_fadvise_dontneed" + ] + } + }, + "/nodes/{node}/ceph/log": { + "get": { + "responseFields": [ + "n", + "t" + ] + } + }, + "/nodes/{node}/ceph/rules": { + "get": { + "responseFields": [ + "name" + ] + } + }, + "/nodes/{node}/ceph/cmd-safety": { + "get": { + "params": { + "action": { + "enum": [ + "stop", + "destroy" + ], + "x-enum-values": null, + "type": "string" + }, + "service": { + "enum": [ + "osd", + "mon", + "mds" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "safe", + "status" + ] + } + }, + "/nodes/{node}/vzdump": { + "post": { + "params": { + "compress": { + "enum": [ + "0", + "1", + "gzip", + "lzo", + "zstd" + ], + "x-enum-values": null, + "type": "string" + }, + "mailnotification": { + "enum": [ + "always", + "failure" + ], + "x-enum-values": null, + "type": "string" + }, + "mode": { + "enum": [ + "snapshot", + "suspend", + "stop" + ], + "x-enum-values": null, + "type": "string" + }, + "notification-mode": { + "enum": [ + "auto", + "legacy-sendmail", + "notification-system" + ], + "x-enum-values": null, + "type": "string" + }, + "pbs-change-detection-mode": { + "enum": [ + "legacy", + "data", + "metadata" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/vzdump/defaults": { + "get": { + "responseFields": [ + "all", + "bwlimit", + "compress", + "dumpdir", + "exclude", + "exclude-path", + "fleecing", + "ionice", + "lockwait", + "mailnotification", + "mailto", + "maxfiles", + "mode", + "node", + "notes-template", + "notification-mode", + "pbs-change-detection-mode", + "performance", + "pigz", + "pool", + "protected", + "prune-backups", + "quiet", + "remove", + "script", + "stdexcludes", + "stop", + "stopwait", + "storage", + "tmpdir", + "vmid", + "zstd" + ] + } + }, + "/nodes/{node}/services": { + "get": { + "responseFields": [ + "active-state", + "desc", + "name", + "service", + "state", + "unit-state" + ] + } + }, + "/nodes/{node}/services/{service}": { + "get": { + "params": { + "service": { + "enum": [ + "chrony", + "corosync", + "cron", + "ksmtuned", + "lxcfs", + "postfix", + "proxmox-firewall", + "pve-cluster", + "pve-firewall", + "pve-ha-crm", + "pve-ha-lrm", + "pve-lxc-syscalld", + "pvedaemon", + "pvefw-logger", + "pveproxy", + "pvescheduler", + "pvestatd", + "qmeventd", + "spiceproxy", + "sshd", + "syslog", + "systemd-journald", + "systemd-timesyncd" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/services/{service}/state": { + "get": { + "params": { + "service": { + "enum": [ + "chrony", + "corosync", + "cron", + "ksmtuned", + "lxcfs", + "postfix", + "proxmox-firewall", + "pve-cluster", + "pve-firewall", + "pve-ha-crm", + "pve-ha-lrm", + "pve-lxc-syscalld", + "pvedaemon", + "pvefw-logger", + "pveproxy", + "pvescheduler", + "pvestatd", + "qmeventd", + "spiceproxy", + "sshd", + "syslog", + "systemd-journald", + "systemd-timesyncd" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "active-state", + "desc", + "name", + "service", + "state", + "unit-state" + ] + } + }, + "/nodes/{node}/services/{service}/start": { + "post": { + "params": { + "service": { + "enum": [ + "chrony", + "corosync", + "cron", + "ksmtuned", + "lxcfs", + "postfix", + "proxmox-firewall", + "pve-cluster", + "pve-firewall", + "pve-ha-crm", + "pve-ha-lrm", + "pve-lxc-syscalld", + "pvedaemon", + "pvefw-logger", + "pveproxy", + "pvescheduler", + "pvestatd", + "qmeventd", + "spiceproxy", + "sshd", + "syslog", + "systemd-journald", + "systemd-timesyncd" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/services/{service}/stop": { + "post": { + "params": { + "service": { + "enum": [ + "chrony", + "corosync", + "cron", + "ksmtuned", + "lxcfs", + "postfix", + "proxmox-firewall", + "pve-cluster", + "pve-firewall", + "pve-ha-crm", + "pve-ha-lrm", + "pve-lxc-syscalld", + "pvedaemon", + "pvefw-logger", + "pveproxy", + "pvescheduler", + "pvestatd", + "qmeventd", + "spiceproxy", + "sshd", + "syslog", + "systemd-journald", + "systemd-timesyncd" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/services/{service}/restart": { + "post": { + "params": { + "service": { + "enum": [ + "chrony", + "corosync", + "cron", + "ksmtuned", + "lxcfs", + "postfix", + "proxmox-firewall", + "pve-cluster", + "pve-firewall", + "pve-ha-crm", + "pve-ha-lrm", + "pve-lxc-syscalld", + "pvedaemon", + "pvefw-logger", + "pveproxy", + "pvescheduler", + "pvestatd", + "qmeventd", + "spiceproxy", + "sshd", + "syslog", + "systemd-journald", + "systemd-timesyncd" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/services/{service}/reload": { + "post": { + "params": { + "service": { + "enum": [ + "chrony", + "corosync", + "cron", + "ksmtuned", + "lxcfs", + "postfix", + "proxmox-firewall", + "pve-cluster", + "pve-firewall", + "pve-ha-crm", + "pve-ha-lrm", + "pve-lxc-syscalld", + "pvedaemon", + "pvefw-logger", + "pveproxy", + "pvescheduler", + "pvestatd", + "qmeventd", + "spiceproxy", + "sshd", + "syslog", + "systemd-journald", + "systemd-timesyncd" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/subscription": { + "get": { + "responseFields": [ + "checktime", + "key", + "level", + "message", + "nextduedate", + "productname", + "regdate", + "serverid", + "signature", + "sockets", + "status", + "url" + ] + } + }, + "/nodes/{node}/network": { + "get": { + "params": { + "type": { + "enum": [ + "bridge", + "bond", + "eth", + "alias", + "vlan", + "fabric", + "OVSBridge", + "OVSBond", + "OVSPort", + "OVSIntPort", + "vnet", + "any_bridge", + "any_local_bridge", + "include_sdn" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "active", + "address", + "address6", + "autostart", + "bond-primary", + "bond_mode", + "bond_xmit_hash_policy", + "bridge-access", + "bridge-arp-nd-suppress", + "bridge-learning", + "bridge-multicast-flood", + "bridge-unicast-flood", + "bridge_ports", + "bridge_vids", + "bridge_vlan_aware", + "cidr", + "cidr6", + "comments", + "comments6", + "exists", + "families", + "gateway", + "gateway6", + "iface", + "link-type", + "method", + "method6", + "mtu", + "netmask", + "netmask6", + "options", + "options6", + "ovs_bonds", + "ovs_bridge", + "ovs_options", + "ovs_ports", + "ovs_tag", + "priority", + "slaves", + "type", + "uplink-id", + "vlan-id", + "vlan-protocol", + "vlan-raw-device", + "vxlan-id", + "vxlan-local-tunnelip", + "vxlan-physdev", + "vxlan-svcnodeip" + ] + }, + "post": { + "params": { + "bond_mode": { + "enum": [ + "balance-rr", + "active-backup", + "balance-xor", + "broadcast", + "802.3ad", + "balance-tlb", + "balance-alb", + "balance-slb", + "lacp-balance-slb", + "lacp-balance-tcp" + ], + "x-enum-values": null, + "type": "string" + }, + "bond_xmit_hash_policy": { + "enum": [ + "layer2", + "layer2+3", + "layer3+4" + ], + "x-enum-values": null, + "type": "string" + }, + "netmask": { + "enum": [ + "0.0.0.0", + "128.0.0.0", + "192.0.0.0", + "224.0.0.0", + "240.0.0.0", + "248.0.0.0", + "252.0.0.0", + "254.0.0.0", + "255.0.0.0", + "255.128.0.0", + "255.192.0.0", + "255.224.0.0", + "255.240.0.0", + "255.248.0.0", + "255.252.0.0", + "255.254.0.0", + "255.255.0.0", + "255.255.128.0", + "255.255.192.0", + "255.255.224.0", + "255.255.240.0", + "255.255.248.0", + "255.255.252.0", + "255.255.254.0", + "255.255.255.0", + "255.255.255.128", + "255.255.255.192", + "255.255.255.224", + "255.255.255.240", + "255.255.255.248", + "255.255.255.252", + "255.255.255.254", + "255.255.255.255" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "bridge", + "bond", + "eth", + "alias", + "vlan", + "fabric", + "OVSBridge", + "OVSBond", + "OVSPort", + "OVSIntPort", + "vnet", + "unknown" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/network/{iface}": { + "get": { + "responseFields": [ + "method", + "type" + ] + }, + "put": { + "params": { + "bond_mode": { + "enum": [ + "balance-rr", + "active-backup", + "balance-xor", + "broadcast", + "802.3ad", + "balance-tlb", + "balance-alb", + "balance-slb", + "lacp-balance-slb", + "lacp-balance-tcp" + ], + "x-enum-values": null, + "type": "string" + }, + "bond_xmit_hash_policy": { + "enum": [ + "layer2", + "layer2+3", + "layer3+4" + ], + "x-enum-values": null, + "type": "string" + }, + "netmask": { + "enum": [ + "0.0.0.0", + "128.0.0.0", + "192.0.0.0", + "224.0.0.0", + "240.0.0.0", + "248.0.0.0", + "252.0.0.0", + "254.0.0.0", + "255.0.0.0", + "255.128.0.0", + "255.192.0.0", + "255.224.0.0", + "255.240.0.0", + "255.248.0.0", + "255.252.0.0", + "255.254.0.0", + "255.255.0.0", + "255.255.128.0", + "255.255.192.0", + "255.255.224.0", + "255.255.240.0", + "255.255.248.0", + "255.255.252.0", + "255.255.254.0", + "255.255.255.0", + "255.255.255.128", + "255.255.255.192", + "255.255.255.224", + "255.255.255.240", + "255.255.255.248", + "255.255.255.252", + "255.255.255.254", + "255.255.255.255" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "bridge", + "bond", + "eth", + "alias", + "vlan", + "fabric", + "OVSBridge", + "OVSBond", + "OVSPort", + "OVSIntPort", + "vnet", + "unknown" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/tasks": { + "get": { + "params": { + "source": { + "enum": [ + "archive", + "active", + "all" + ], + "x-enum-values": null, + "type": "string" + }, + "statusfilter": { + "enum": null, + "x-enum-values": [ + "ok", + "error", + "warning", + "unknown" + ], + "type": "string" + } + }, + "responseFields": [ + "endtime", + "id", + "node", + "pid", + "pstart", + "starttime", + "status", + "type", + "upid", + "user" + ] + } + }, + "/nodes/{node}/tasks/{upid}": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/tasks/{upid}/log": { + "get": { + "responseFields": [ + "n", + "t" + ] + } + }, + "/nodes/{node}/tasks/{upid}/status": { + "get": { + "responseFields": [ + "exitstatus", + "id", + "node", + "pid", + "pstart", + "starttime", + "status", + "type", + "upid", + "user" + ] + } + }, + "/nodes/{node}/scan": { + "get": { + "responseFields": [ + "method" + ] + } + }, + "/nodes/{node}/scan/nfs": { + "get": { + "responseFields": [ + "options", + "path" + ] + } + }, + "/nodes/{node}/scan/cifs": { + "get": { + "responseFields": [ + "description", + "share" + ] + } + }, + "/nodes/{node}/scan/pbs": { + "get": { + "responseFields": [ + "comment", + "store" + ] + } + }, + "/nodes/{node}/scan/iscsi": { + "get": { + "responseFields": [ + "portal", + "target" + ] + } + }, + "/nodes/{node}/scan/lvm": { + "get": { + "responseFields": [ + "vg" + ] + } + }, + "/nodes/{node}/scan/lvmthin": { + "get": { + "responseFields": [ + "lv" + ] + } + }, + "/nodes/{node}/scan/zfs": { + "get": { + "responseFields": [ + "pool" + ] + } + }, + "/nodes/{node}/hardware": { + "get": { + "responseFields": [ + "type" + ] + } + }, + "/nodes/{node}/hardware/pci": { + "get": { + "responseFields": [ + "class", + "device", + "device_name", + "id", + "iommugroup", + "mdev", + "subsystem_device", + "subsystem_device_name", + "subsystem_vendor", + "subsystem_vendor_name", + "vendor", + "vendor_name" + ] + } + }, + "/nodes/{node}/hardware/pci/{pci-id-or-mapping}": { + "get": { + "responseFields": [ + "method" + ] + } + }, + "/nodes/{node}/hardware/pci/{pci-id-or-mapping}/mdev": { + "get": { + "responseFields": [ + "available", + "description", + "name", + "type" + ] + } + }, + "/nodes/{node}/hardware/usb": { + "get": { + "responseFields": [ + "busnum", + "class", + "devnum", + "level", + "manufacturer", + "port", + "prodid", + "product", + "serial", + "speed", + "usbpath", + "vendid" + ] + } + }, + "/nodes/{node}/capabilities": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/capabilities/qemu": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/capabilities/qemu/cpu": { + "get": { + "responseFields": [ + "custom", + "name", + "vendor" + ] + } + }, + "/nodes/{node}/capabilities/qemu/cpu-flags": { + "get": { + "responseFields": [ + "description", + "name" + ] + } + }, + "/nodes/{node}/capabilities/qemu/machines": { + "get": { + "responseFields": [ + "changes", + "id", + "type", + "version" + ] + } + }, + "/nodes/{node}/capabilities/qemu/migration": { + "get": { + "responseFields": [ + "has-dbus-vmstate" + ] + } + }, + "/nodes/{node}/storage": { + "get": { + "params": { + "content": { + "enum": null, + "x-enum-values": [ + "images", + "rootdir", + "vztmpl", + "backup", + "iso", + "snippets", + "import" + ], + "type": "string" + } + }, + "responseFields": [ + "active", + "avail", + "content", + "enabled", + "formats", + "select_existing", + "shared", + "storage", + "total", + "type", + "used", + "used_fraction" + ] + } + }, + "/nodes/{node}/storage/{storage}": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/storage/{storage}/prunebackups": { + "get": { + "params": { + "type": { + "enum": [ + "qemu", + "lxc" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "ctime", + "mark", + "type", + "vmid", + "volid" + ] + }, + "delete": { + "params": { + "type": { + "enum": [ + "qemu", + "lxc" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/storage/{storage}/content": { + "get": { + "params": { + "content": { + "enum": [ + "images", + "rootdir", + "vztmpl", + "backup", + "iso", + "snippets", + "import" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "ctime", + "encrypted", + "format", + "notes", + "parent", + "protected", + "size", + "used", + "verification", + "vmid", + "volid" + ] + }, + "post": { + "params": { + "format": { + "enum": [ + "raw", + "qcow2", + "subvol", + "vmdk" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/storage/{storage}/content/{volume}": { + "get": { + "responseFields": [ + "format", + "notes", + "path", + "protected", + "size", + "used" + ] + } + }, + "/nodes/{node}/storage/{storage}/file-restore/list": { + "get": { + "responseFields": [ + "filepath", + "leaf", + "mtime", + "size", + "text", + "type" + ] + } + }, + "/nodes/{node}/storage/{storage}/status": { + "get": { + "responseFields": [ + "active", + "avail", + "content", + "enabled", + "shared", + "total", + "type", + "used" + ] + } + }, + "/nodes/{node}/storage/{storage}/rrd": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "filename" + ] + } + }, + "/nodes/{node}/storage/{storage}/rrddata": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [] + } + }, + "/nodes/{node}/storage/{storage}/upload": { + "post": { + "params": { + "checksum-algorithm": { + "enum": [ + "md5", + "sha1", + "sha224", + "sha256", + "sha384", + "sha512" + ], + "x-enum-values": null, + "type": "string" + }, + "content": { + "enum": [ + "iso", + "vztmpl", + "import" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/storage/{storage}/download-url": { + "post": { + "params": { + "checksum-algorithm": { + "enum": [ + "md5", + "sha1", + "sha224", + "sha256", + "sha384", + "sha512" + ], + "x-enum-values": null, + "type": "string" + }, + "content": { + "enum": [ + "iso", + "vztmpl", + "import" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/storage/{storage}/import-metadata": { + "get": { + "responseFields": [ + "create-args", + "disks", + "net", + "source", + "type", + "warnings" + ] + } + }, + "/nodes/{node}/disks": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/disks/lvm": { + "get": { + "responseFields": [ + "children", + "leaf" + ] + } + }, + "/nodes/{node}/disks/lvmthin": { + "get": { + "responseFields": [ + "lv", + "lv_size", + "metadata_size", + "metadata_used", + "used", + "vg" + ] + } + }, + "/nodes/{node}/disks/directory": { + "get": { + "responseFields": [ + "device", + "options", + "path", + "type", + "unitfile" + ] + }, + "post": { + "params": { + "filesystem": { + "enum": [ + "ext4", + "xfs" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/disks/zfs": { + "get": { + "responseFields": [ + "alloc", + "dedup", + "frag", + "free", + "health", + "name", + "size" + ] + }, + "post": { + "params": { + "compression": { + "enum": [ + "on", + "off", + "gzip", + "lz4", + "lzjb", + "zle", + "zstd" + ], + "x-enum-values": null, + "type": "string" + }, + "raidlevel": { + "enum": [ + "single", + "mirror", + "raid10", + "raidz", + "raidz2", + "raidz3", + "draid", + "draid2", + "draid3" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/disks/zfs/{name}": { + "get": { + "responseFields": [ + "action", + "children", + "errors", + "name", + "scan", + "state", + "status" + ] + } + }, + "/nodes/{node}/disks/list": { + "get": { + "params": { + "type": { + "enum": [ + "unused", + "journal_disks" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "devpath", + "gpt", + "health", + "model", + "mounted", + "osdid", + "osdid-list", + "parent", + "serial", + "size", + "used", + "vendor", + "wwn" + ] + } + }, + "/nodes/{node}/disks/smart": { + "get": { + "responseFields": [ + "attributes", + "health", + "text", + "type" + ] + } + }, + "/nodes/{node}/apt": { + "get": { + "responseFields": [ + "id" + ] + } + }, + "/nodes/{node}/apt/update": { + "get": { + "responseFields": [ + "Arch", + "Description", + "NotifyStatus", + "OldVersion", + "Origin", + "Package", + "Priority", + "Section", + "Title", + "Version" + ] + } + }, + "/nodes/{node}/apt/repositories": { + "get": { + "responseFields": [ + "digest", + "errors", + "files", + "infos", + "standard-repos" + ] + } + }, + "/nodes/{node}/apt/versions": { + "get": { + "responseFields": [ + "Arch", + "CurrentState", + "Description", + "ManagerVersion", + "NotifyStatus", + "OldVersion", + "Origin", + "Package", + "Priority", + "RunningKernel", + "Section", + "Title", + "Version" + ] + } + }, + "/nodes/{node}/firewall": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/firewall/rules": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "post": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/firewall/rules/{pos}": { + "get": { + "responseFields": [ + "action", + "comment", + "dest", + "dport", + "enable", + "icmp-type", + "iface", + "ipversion", + "log", + "macro", + "pos", + "proto", + "source", + "sport", + "type" + ] + }, + "put": { + "params": { + "log": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "in", + "out", + "forward", + "group" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/firewall/options": { + "get": { + "responseFields": [ + "enable", + "log_level_forward", + "log_level_in", + "log_level_out", + "log_nf_conntrack", + "ndp", + "nf_conntrack_allow_invalid", + "nf_conntrack_helpers", + "nf_conntrack_max", + "nf_conntrack_tcp_timeout_established", + "nf_conntrack_tcp_timeout_syn_recv", + "nftables", + "nosmurfs", + "protection_synflood", + "protection_synflood_burst", + "protection_synflood_rate", + "smurf_log_level", + "tcp_flags_log_level", + "tcpflags" + ] + }, + "put": { + "params": { + "log_level_forward": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "log_level_in": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "log_level_out": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "nf_conntrack_helpers": { + "enum": null, + "x-enum-values": [ + "amanda", + "ftp", + "irc", + "netbios-ns", + "pptp", + "sane", + "sip", + "snmp", + "tftp" + ], + "type": "string" + }, + "smurf_log_level": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + }, + "tcp_flags_log_level": { + "enum": [ + "emerg", + "alert", + "crit", + "err", + "warning", + "notice", + "info", + "debug", + "nolog" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/firewall/log": { + "get": { + "responseFields": [ + "n", + "t" + ] + } + }, + "/nodes/{node}/replication": { + "get": { + "responseFields": [ + "id" + ] + } + }, + "/nodes/{node}/replication/{id}": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/replication/{id}/log": { + "get": { + "responseFields": [ + "n", + "t" + ] + } + }, + "/nodes/{node}/certificates": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/certificates/acme": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/certificates/info": { + "get": { + "responseFields": [ + "filename", + "fingerprint", + "issuer", + "notafter", + "notbefore", + "pem", + "public-key-bits", + "public-key-type", + "san", + "subject" + ] + } + }, + "/nodes/{node}/certificates/custom": { + "post": { + "responseFields": [ + "filename", + "fingerprint", + "issuer", + "notafter", + "notbefore", + "pem", + "public-key-bits", + "public-key-type", + "san", + "subject" + ] + } + }, + "/nodes/{node}/config": { + "get": { + "params": { + "property": { + "enum": [ + "acme", + "acmedomain0", + "acmedomain1", + "acmedomain2", + "acmedomain3", + "acmedomain4", + "acmedomain5", + "ballooning-target", + "description", + "startall-onboot-delay", + "wakeonlan" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "acme", + "acmedomain[n]", + "ballooning-target", + "description", + "digest", + "startall-onboot-delay", + "wakeonlan" + ] + } + }, + "/nodes/{node}/sdn": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/sdn/fabrics/{fabric}": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/sdn/fabrics/{fabric}/routes": { + "get": { + "responseFields": [ + "route", + "via" + ] + } + }, + "/nodes/{node}/sdn/fabrics/{fabric}/neighbors": { + "get": { + "responseFields": [ + "neighbor", + "status", + "uptime" + ] + } + }, + "/nodes/{node}/sdn/fabrics/{fabric}/interfaces": { + "get": { + "responseFields": [ + "name", + "state", + "type" + ] + } + }, + "/nodes/{node}/sdn/zones": { + "get": { + "responseFields": [ + "status", + "zone" + ] + } + }, + "/nodes/{node}/sdn/zones/{zone}": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/sdn/zones/{zone}/content": { + "get": { + "responseFields": [ + "status", + "statusmsg", + "vnet" + ] + } + }, + "/nodes/{node}/sdn/zones/{zone}/bridges": { + "get": { + "responseFields": [ + "name", + "ports", + "vlan_filtering" + ] + } + }, + "/nodes/{node}/sdn/zones/{zone}/ip-vrf": { + "get": { + "responseFields": [ + "ip", + "metric", + "nexthops", + "protocol" + ] + } + }, + "/nodes/{node}/sdn/vnets/{vnet}": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/nodes/{node}/sdn/vnets/{vnet}/mac-vrf": { + "get": { + "responseFields": [ + "ip", + "mac", + "nexthop" + ] + } + }, + "/nodes/{node}/version": { + "get": { + "responseFields": [ + "release", + "repoid", + "version" + ] + } + }, + "/nodes/{node}/status": { + "get": { + "responseFields": [ + "boot-info", + "cpu", + "cpuinfo", + "current-kernel", + "loadavg", + "memory", + "pveversion", + "rootfs" + ] + }, + "post": { + "params": { + "command": { + "enum": [ + "reboot", + "shutdown" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/netstat": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/execute": { + "post": { + "responseFields": [] + } + }, + "/nodes/{node}/rrd": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "decade" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "filename" + ] + } + }, + "/nodes/{node}/rrddata": { + "get": { + "params": { + "cf": { + "enum": [ + "AVERAGE", + "MAX" + ], + "x-enum-values": null, + "type": "string" + }, + "timeframe": { + "enum": [ + "hour", + "day", + "week", + "month", + "year", + "decade" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [] + } + }, + "/nodes/{node}/syslog": { + "get": { + "responseFields": [ + "n", + "t" + ] + } + }, + "/nodes/{node}/vncshell": { + "post": { + "params": { + "cmd": { + "enum": [ + "ceph_install", + "login", + "upgrade" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/termproxy": { + "post": { + "params": { + "cmd": { + "enum": [ + "ceph_install", + "login", + "upgrade" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/vncwebsocket": { + "get": { + "responseFields": [ + "port" + ] + } + }, + "/nodes/{node}/spiceshell": { + "post": { + "params": { + "cmd": { + "enum": [ + "ceph_install", + "login", + "upgrade" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/nodes/{node}/dns": { + "get": { + "responseFields": [ + "dns1", + "dns2", + "dns3", + "search" + ] + } + }, + "/nodes/{node}/time": { + "get": { + "responseFields": [ + "localtime", + "time", + "timezone" + ] + } + }, + "/nodes/{node}/aplinfo": { + "get": { + "responseFields": [] + } + }, + "/nodes/{node}/query-url-metadata": { + "get": { + "responseFields": [ + "filename", + "mimetype", + "size" + ] + } + }, + "/nodes/{node}/hosts": { + "get": { + "responseFields": [ + "data", + "digest" + ] + } + }, + "/storage": { + "get": { + "params": { + "type": { + "enum": [ + "btrfs", + "cephfs", + "cifs", + "dir", + "esxi", + "iscsi", + "iscsidirect", + "lvm", + "lvmthin", + "nfs", + "pbs", + "rbd", + "zfs", + "zfspool" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "storage" + ] + }, + "post": { + "params": { + "content": { + "enum": null, + "x-enum-values": [ + "images", + "rootdir", + "vztmpl", + "backup", + "iso", + "snippets", + "import" + ], + "type": "string" + }, + "format": { + "enum": [ + "raw", + "qcow2", + "subvol", + "vmdk" + ], + "x-enum-values": null, + "type": "string" + }, + "preallocation": { + "enum": [ + "off", + "metadata", + "falloc", + "full" + ], + "x-enum-values": null, + "type": "string" + }, + "saferemove-stepsize": { + "enum": [ + "1", + "2", + "4", + "8", + "16", + "32" + ], + "x-enum-values": null, + "type": "integer" + }, + "smbversion": { + "enum": [ + "default", + "2.0", + "2.1", + "3", + "3.0", + "3.11" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "btrfs", + "cephfs", + "cifs", + "dir", + "esxi", + "iscsi", + "iscsidirect", + "lvm", + "lvmthin", + "nfs", + "pbs", + "rbd", + "zfs", + "zfspool" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "config", + "storage", + "type" + ] + } + }, + "/storage/{storage}": { + "put": { + "params": { + "content": { + "enum": null, + "x-enum-values": [ + "images", + "rootdir", + "vztmpl", + "backup", + "iso", + "snippets", + "import" + ], + "type": "string" + }, + "format": { + "enum": [ + "raw", + "qcow2", + "subvol", + "vmdk" + ], + "x-enum-values": null, + "type": "string" + }, + "preallocation": { + "enum": [ + "off", + "metadata", + "falloc", + "full" + ], + "x-enum-values": null, + "type": "string" + }, + "saferemove-stepsize": { + "enum": [ + "1", + "2", + "4", + "8", + "16", + "32" + ], + "x-enum-values": null, + "type": "integer" + }, + "smbversion": { + "enum": [ + "default", + "2.0", + "2.1", + "3", + "3.0", + "3.11" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "config", + "storage", + "type" + ] + } + }, + "/access": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/access/users": { + "get": { + "responseFields": [ + "comment", + "email", + "enable", + "expire", + "firstname", + "groups", + "keys", + "lastname", + "realm-type", + "tfa-locked-until", + "tokens", + "totp-locked", + "userid" + ] + } + }, + "/access/users/{userid}": { + "get": { + "responseFields": [ + "comment", + "email", + "enable", + "expire", + "firstname", + "groups", + "keys", + "lastname", + "tokens" + ] + } + }, + "/access/users/{userid}/tfa": { + "get": { + "responseFields": [ + "realm", + "types", + "user" + ] + } + }, + "/access/users/{userid}/token": { + "get": { + "responseFields": [ + "comment", + "expire", + "privsep", + "tokenid" + ] + } + }, + "/access/users/{userid}/token/{tokenid}": { + "get": { + "responseFields": [ + "comment", + "expire", + "privsep" + ] + }, + "post": { + "responseFields": [ + "full-tokenid", + "info", + "value" + ] + }, + "put": { + "responseFields": [ + "comment", + "expire", + "privsep" + ] + } + }, + "/access/groups": { + "get": { + "responseFields": [ + "comment", + "groupid", + "users" + ] + } + }, + "/access/groups/{groupid}": { + "get": { + "responseFields": [ + "comment", + "members" + ] + } + }, + "/access/roles": { + "get": { + "responseFields": [ + "privs", + "roleid", + "special" + ] + }, + "post": { + "params": { + "privs": { + "enum": null, + "x-enum-values": [ + "Datastore.Allocate", + "Datastore.AllocateSpace", + "Datastore.AllocateTemplate", + "Datastore.Audit", + "Group.Allocate", + "Mapping.Audit", + "Mapping.Modify", + "Mapping.Use", + "Permissions.Modify", + "Pool.Allocate", + "Pool.Audit", + "Realm.Allocate", + "Realm.AllocateUser", + "SDN.Allocate", + "SDN.Audit", + "SDN.Use", + "Sys.AccessNetwork", + "Sys.Audit", + "Sys.Console", + "Sys.Incoming", + "Sys.Modify", + "Sys.PowerMgmt", + "Sys.Syslog", + "User.Modify", + "VM.Allocate", + "VM.Audit", + "VM.Backup", + "VM.Clone", + "VM.Config.CDROM", + "VM.Config.Cloudinit", + "VM.Config.CPU", + "VM.Config.Disk", + "VM.Config.HWType", + "VM.Config.Memory", + "VM.Config.Network", + "VM.Config.Options", + "VM.Console", + "VM.GuestAgent.Audit", + "VM.GuestAgent.FileRead", + "VM.GuestAgent.FileSystemMgmt", + "VM.GuestAgent.FileWrite", + "VM.GuestAgent.Unrestricted", + "VM.Migrate", + "VM.Monitor", + "VM.PowerMgmt", + "VM.Replicate", + "VM.Snapshot", + "VM.Snapshot.Rollback" + ], + "type": "string" + } + } + } + }, + "/access/roles/{roleid}": { + "get": { + "responseFields": [ + "Datastore.Allocate", + "Datastore.AllocateSpace", + "Datastore.AllocateTemplate", + "Datastore.Audit", + "Group.Allocate", + "Mapping.Audit", + "Mapping.Modify", + "Mapping.Use", + "Permissions.Modify", + "Pool.Allocate", + "Pool.Audit", + "Realm.Allocate", + "Realm.AllocateUser", + "SDN.Allocate", + "SDN.Audit", + "SDN.Use", + "Sys.AccessNetwork", + "Sys.Audit", + "Sys.Console", + "Sys.Incoming", + "Sys.Modify", + "Sys.PowerMgmt", + "Sys.Syslog", + "User.Modify", + "VM.Allocate", + "VM.Audit", + "VM.Backup", + "VM.Clone", + "VM.Config.CDROM", + "VM.Config.CPU", + "VM.Config.Cloudinit", + "VM.Config.Disk", + "VM.Config.HWType", + "VM.Config.Memory", + "VM.Config.Network", + "VM.Config.Options", + "VM.Console", + "VM.GuestAgent.Audit", + "VM.GuestAgent.FileRead", + "VM.GuestAgent.FileSystemMgmt", + "VM.GuestAgent.FileWrite", + "VM.GuestAgent.Unrestricted", + "VM.Migrate", + "VM.PowerMgmt", + "VM.Replicate", + "VM.Snapshot", + "VM.Snapshot.Rollback" + ] + }, + "put": { + "params": { + "privs": { + "enum": null, + "x-enum-values": [ + "Datastore.Allocate", + "Datastore.AllocateSpace", + "Datastore.AllocateTemplate", + "Datastore.Audit", + "Group.Allocate", + "Mapping.Audit", + "Mapping.Modify", + "Mapping.Use", + "Permissions.Modify", + "Pool.Allocate", + "Pool.Audit", + "Realm.Allocate", + "Realm.AllocateUser", + "SDN.Allocate", + "SDN.Audit", + "SDN.Use", + "Sys.AccessNetwork", + "Sys.Audit", + "Sys.Console", + "Sys.Incoming", + "Sys.Modify", + "Sys.PowerMgmt", + "Sys.Syslog", + "User.Modify", + "VM.Allocate", + "VM.Audit", + "VM.Backup", + "VM.Clone", + "VM.Config.CDROM", + "VM.Config.Cloudinit", + "VM.Config.CPU", + "VM.Config.Disk", + "VM.Config.HWType", + "VM.Config.Memory", + "VM.Config.Network", + "VM.Config.Options", + "VM.Console", + "VM.GuestAgent.Audit", + "VM.GuestAgent.FileRead", + "VM.GuestAgent.FileSystemMgmt", + "VM.GuestAgent.FileWrite", + "VM.GuestAgent.Unrestricted", + "VM.Migrate", + "VM.Monitor", + "VM.PowerMgmt", + "VM.Replicate", + "VM.Snapshot", + "VM.Snapshot.Rollback" + ], + "type": "string" + } + } + } + }, + "/access/acl": { + "get": { + "responseFields": [ + "path", + "propagate", + "roleid", + "type", + "ugid" + ] + } + }, + "/access/domains": { + "get": { + "responseFields": [ + "comment", + "realm", + "tfa", + "type" + ] + }, + "post": { + "params": { + "mode": { + "enum": [ + "ldap", + "ldaps", + "ldap+starttls" + ], + "x-enum-values": null, + "type": "string" + }, + "sslversion": { + "enum": [ + "tlsv1", + "tlsv1_1", + "tlsv1_2", + "tlsv1_3" + ], + "x-enum-values": null, + "type": "string" + }, + "type": { + "enum": [ + "ad", + "ldap", + "openid", + "pam", + "pve" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/access/domains/{realm}": { + "put": { + "params": { + "mode": { + "enum": [ + "ldap", + "ldaps", + "ldap+starttls" + ], + "x-enum-values": null, + "type": "string" + }, + "sslversion": { + "enum": [ + "tlsv1", + "tlsv1_1", + "tlsv1_2", + "tlsv1_3" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/access/domains/{realm}/sync": { + "post": { + "params": { + "scope": { + "enum": [ + "users", + "groups", + "both" + ], + "x-enum-values": null, + "type": "string" + } + } + } + }, + "/access/openid": { + "get": { + "responseFields": [ + "subdir" + ] + } + }, + "/access/tfa": { + "get": { + "responseFields": [ + "entries", + "tfa-locked-until", + "totp-locked", + "userid" + ] + } + }, + "/access/tfa/{userid}": { + "get": { + "responseFields": [ + "created", + "description", + "enable", + "id", + "type" + ] + }, + "post": { + "params": { + "type": { + "enum": [ + "totp", + "u2f", + "webauthn", + "recovery", + "yubico" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "challenge", + "id", + "recovery" + ] + } + }, + "/access/tfa/{userid}/{id}": { + "get": { + "responseFields": [ + "created", + "description", + "enable", + "id", + "type" + ] + } + }, + "/access/ticket": { + "post": { + "params": { + "privs": { + "enum": null, + "x-enum-values": [ + "Datastore.Allocate", + "Datastore.AllocateSpace", + "Datastore.AllocateTemplate", + "Datastore.Audit", + "Group.Allocate", + "Mapping.Audit", + "Mapping.Modify", + "Mapping.Use", + "Permissions.Modify", + "Pool.Allocate", + "Pool.Audit", + "Realm.Allocate", + "Realm.AllocateUser", + "SDN.Allocate", + "SDN.Audit", + "SDN.Use", + "Sys.AccessNetwork", + "Sys.Audit", + "Sys.Console", + "Sys.Incoming", + "Sys.Modify", + "Sys.PowerMgmt", + "Sys.Syslog", + "User.Modify", + "VM.Allocate", + "VM.Audit", + "VM.Backup", + "VM.Clone", + "VM.Config.CDROM", + "VM.Config.Cloudinit", + "VM.Config.CPU", + "VM.Config.Disk", + "VM.Config.HWType", + "VM.Config.Memory", + "VM.Config.Network", + "VM.Config.Options", + "VM.Console", + "VM.GuestAgent.Audit", + "VM.GuestAgent.FileRead", + "VM.GuestAgent.FileSystemMgmt", + "VM.GuestAgent.FileWrite", + "VM.GuestAgent.Unrestricted", + "VM.Migrate", + "VM.Monitor", + "VM.PowerMgmt", + "VM.Replicate", + "VM.Snapshot", + "VM.Snapshot.Rollback" + ], + "type": "string" + } + }, + "responseFields": [ + "CSRFPreventionToken", + "clustername", + "ticket", + "username" + ] + } + }, + "/access/vncticket": { + "post": { + "params": { + "privs": { + "enum": null, + "x-enum-values": [ + "Datastore.Allocate", + "Datastore.AllocateSpace", + "Datastore.AllocateTemplate", + "Datastore.Audit", + "Group.Allocate", + "Mapping.Audit", + "Mapping.Modify", + "Mapping.Use", + "Permissions.Modify", + "Pool.Allocate", + "Pool.Audit", + "Realm.Allocate", + "Realm.AllocateUser", + "SDN.Allocate", + "SDN.Audit", + "SDN.Use", + "Sys.AccessNetwork", + "Sys.Audit", + "Sys.Console", + "Sys.Incoming", + "Sys.Modify", + "Sys.PowerMgmt", + "Sys.Syslog", + "User.Modify", + "VM.Allocate", + "VM.Audit", + "VM.Backup", + "VM.Clone", + "VM.Config.CDROM", + "VM.Config.Cloudinit", + "VM.Config.CPU", + "VM.Config.Disk", + "VM.Config.HWType", + "VM.Config.Memory", + "VM.Config.Network", + "VM.Config.Options", + "VM.Console", + "VM.GuestAgent.Audit", + "VM.GuestAgent.FileRead", + "VM.GuestAgent.FileSystemMgmt", + "VM.GuestAgent.FileWrite", + "VM.GuestAgent.Unrestricted", + "VM.Migrate", + "VM.Monitor", + "VM.PowerMgmt", + "VM.Replicate", + "VM.Snapshot", + "VM.Snapshot.Rollback" + ], + "type": "string" + } + } + } + }, + "/pools": { + "get": { + "params": { + "type": { + "enum": [ + "qemu", + "lxc", + "storage" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "comment", + "members", + "poolid" + ] + } + }, + "/pools/{poolid}": { + "get": { + "params": { + "type": { + "enum": [ + "qemu", + "lxc", + "storage" + ], + "x-enum-values": null, + "type": "string" + } + }, + "responseFields": [ + "comment", + "members" + ] + } + }, + "/version": { + "get": { + "responseFields": [ + "console", + "release", + "repoid", + "version" + ] + } + } + }, + "meta": { + "generated_at": "2026-03-26T20:08:30.474Z" + } +} \ No newline at end of file diff --git a/tests/PSProxmoxVE.Core.Tests/OpenApiSpecValidationTests.cs b/tests/PSProxmoxVE.Core.Tests/OpenApiSpecValidationTests.cs new file mode 100644 index 0000000..2cb8188 --- /dev/null +++ b/tests/PSProxmoxVE.Core.Tests/OpenApiSpecValidationTests.cs @@ -0,0 +1,327 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Xunit; + +namespace PSProxmoxVE.Core.Tests +{ + /// + /// Validates that the module's hardcoded enum values (ValidateSet, privilege names, etc.) + /// match what the PVE API actually accepts, as defined by the OpenAPI spec. + /// + /// The fixture pve-api-enums.json is extracted from the full OpenAPI spec at + /// ~/Source/pve_api/tools/pve-api-parser/pve-openapi.json and contains only + /// parameter enum values and response field names. + /// + public class OpenApiSpecValidationTests + { + private static readonly Lazy _spec = new Lazy(() => + JObject.Parse(TestHelper.LoadFixture("pve-api-enums.json"))); + + private static JObject Spec => _spec.Value; + + private static HashSet GetEnumValues(string path, string method, string paramName) + { + var pathData = Spec["paths"]?[path]?[method]?["params"]?[paramName]; + if (pathData == null) return new HashSet(StringComparer.OrdinalIgnoreCase); + + var values = new HashSet(StringComparer.OrdinalIgnoreCase); + + var enumArray = pathData["enum"] as JArray; + if (enumArray != null) + { + foreach (var v in enumArray) + values.Add(v.ToString()); + } + + var xEnumArray = pathData["x-enum-values"] as JArray; + if (xEnumArray != null) + { + foreach (var v in xEnumArray) + values.Add(v.ToString()); + } + + return values; + } + + // ── Privileges ────────────────────────────────────────────────────── + + [Fact] + public void Privileges_AllKnownValuesAcceptedByApi() + { + var apiPrivileges = GetEnumValues("/access/roles", "post", "privs"); + Assert.NotEmpty(apiPrivileges); + + // These are privilege names used in tests and documentation + var modulePrivileges = new[] + { + "VM.Allocate", "VM.Audit", "VM.Backup", "VM.Clone", + "VM.Config.CDROM", "VM.Config.Cloudinit", "VM.Config.CPU", + "VM.Config.Disk", "VM.Config.HWType", "VM.Config.Memory", + "VM.Config.Network", "VM.Config.Options", "VM.Console", + "VM.Migrate", "VM.Monitor", "VM.PowerMgmt", "VM.Snapshot", + "VM.Snapshot.Rollback", + "Datastore.Allocate", "Datastore.AllocateSpace", + "Datastore.AllocateTemplate", "Datastore.Audit", + "Sys.Audit", "Sys.Console", "Sys.Modify", "Sys.PowerMgmt", + "Sys.Syslog", "Sys.AccessNetwork", "Sys.Incoming", + "SDN.Allocate", "SDN.Audit", "SDN.Use", + "User.Modify", "Permissions.Modify", + "Pool.Allocate", "Pool.Audit", + "Group.Allocate", + "Realm.Allocate", "Realm.AllocateUser", + "Mapping.Audit", "Mapping.Modify", "Mapping.Use", + "VM.GuestAgent.Audit", "VM.GuestAgent.FileRead", + "VM.GuestAgent.FileWrite", "VM.GuestAgent.FileSystemMgmt", + "VM.GuestAgent.Unrestricted", "VM.Replicate" + }; + + var invalid = modulePrivileges.Where(p => !apiPrivileges.Contains(p)).ToList(); + Assert.True(invalid.Count == 0, + $"Invalid privilege name(s) not accepted by PVE API: {string.Join(", ", invalid)}. " + + $"Valid privileges: {string.Join(", ", apiPrivileges.OrderBy(p => p))}"); + } + + // ── Storage Types ─────────────────────────────────────────────────── + + [Theory] + [InlineData("dir")] + [InlineData("nfs")] + [InlineData("lvm")] + [InlineData("lvmthin")] + [InlineData("zfspool")] + [InlineData("zfs")] + [InlineData("cephfs")] + [InlineData("rbd")] + [InlineData("iscsi")] + [InlineData("iscsidirect")] + [InlineData("cifs")] + [InlineData("pbs")] + [InlineData("btrfs")] + [InlineData("esxi")] + // Note: "glusterfs" was removed in PVE 9.0 — replaced by btrfs/esxi. + // The module's ValidateSet still includes it. + // See: NewPveStorageCmdlet.cs line 27-28 + public void StorageType_IsValidInApi(string storageType) + { + var apiTypes = GetEnumValues("/storage", "post", "type"); + Assert.True(apiTypes.Contains(storageType), + $"Storage type '{storageType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── Backup Modes ──────────────────────────────────────────────────── + + [Theory] + [InlineData("snapshot")] + [InlineData("suspend")] + [InlineData("stop")] + public void BackupMode_IsValidInApi(string mode) + { + var apiModes = GetEnumValues("/nodes/{node}/vzdump", "post", "mode"); + Assert.True(apiModes.Contains(mode), + $"Backup mode '{mode}' not in API enum: {string.Join(", ", apiModes)}"); + } + + // ── Backup Compression ────────────────────────────────────────────── + + [Theory] + [InlineData("zstd")] + [InlineData("lzo")] + [InlineData("gzip")] + // Note: "none" is NOT valid — PVE uses "0" for no compression. + // The module's ValidateSet includes "none" which may cause API errors. + // See: NewPveBackupCmdlet.cs line 51, NewPveBackupJobCmdlet.cs line 54 + [InlineData("0")] + public void BackupCompression_IsValidInApi(string compress) + { + var apiValues = GetEnumValues("/nodes/{node}/vzdump", "post", "compress"); + Assert.True(apiValues.Contains(compress), + $"Compression '{compress}' not in API enum: {string.Join(", ", apiValues)}"); + } + + // ── Disk Formats ──────────────────────────────────────────────────── + + [Theory] + [InlineData("raw")] + [InlineData("qcow2")] + [InlineData("vmdk")] + public void DiskFormat_IsValidInApi(string format) + { + var apiFormats = GetEnumValues("/nodes/{node}/qemu/{vmid}/move_disk", "post", "format"); + Assert.True(apiFormats.Contains(format), + $"Disk format '{format}' not in API enum: {string.Join(", ", apiFormats)}"); + } + + // ── HA Resource States ────────────────────────────────────────────── + + [Theory] + [InlineData("started")] + [InlineData("stopped")] + [InlineData("disabled")] + [InlineData("ignored")] + public void HaResourceState_IsValidInApi(string state) + { + var apiStates = GetEnumValues("/cluster/ha/resources", "post", "state"); + Assert.True(apiStates.Contains(state), + $"HA state '{state}' not in API enum: {string.Join(", ", apiStates)}"); + } + + // ── SDN Zone Types ────────────────────────────────────────────────── + + [Theory] + [InlineData("vlan")] + [InlineData("vxlan")] + [InlineData("evpn")] + [InlineData("simple")] + [InlineData("qinq")] + public void SdnZoneType_IsValidInApi(string zoneType) + { + var apiTypes = GetEnumValues("/cluster/sdn/zones", "post", "type"); + Assert.True(apiTypes.Contains(zoneType), + $"SDN zone type '{zoneType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── SDN Controller Types ──────────────────────────────────────────── + + [Theory] + [InlineData("evpn")] + [InlineData("bgp")] + public void SdnControllerType_IsValidInApi(string controllerType) + { + var apiTypes = GetEnumValues("/cluster/sdn/controllers", "post", "type"); + Assert.True(apiTypes.Contains(controllerType), + $"SDN controller type '{controllerType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── SDN IPAM Types ────────────────────────────────────────────────── + + [Theory] + [InlineData("pve")] + [InlineData("netbox")] + [InlineData("phpipam")] + public void SdnIpamType_IsValidInApi(string ipamType) + { + var apiTypes = GetEnumValues("/cluster/sdn/ipams", "post", "type"); + Assert.True(apiTypes.Contains(ipamType), + $"SDN IPAM type '{ipamType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── SDN DNS Types ─────────────────────────────────────────────────── + + [Theory] + [InlineData("powerdns")] + public void SdnDnsType_IsValidInApi(string dnsType) + { + var apiTypes = GetEnumValues("/cluster/sdn/dns", "post", "type"); + Assert.True(apiTypes.Contains(dnsType), + $"SDN DNS type '{dnsType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── Firewall Actions ──────────────────────────────────────────────── + // The 'action' param uses a pattern regex (also accepts group names), + // not an enum. Validate against the documented pattern instead. + + [Theory] + [InlineData("ACCEPT")] + [InlineData("DROP")] + [InlineData("REJECT")] + public void FirewallAction_MatchesApiPattern(string action) + { + // PVE defines action as pattern: [A-Za-z][A-Za-z0-9\-\_]+ + Assert.Matches(@"^[A-Za-z][A-Za-z0-9\-_]+$", action); + } + + // ── Firewall Directions ───────────────────────────────────────────── + + [Theory] + [InlineData("in")] + [InlineData("out")] + [InlineData("group")] + public void FirewallDirection_IsValidInApi(string direction) + { + var apiDirections = GetEnumValues("/cluster/firewall/rules", "post", "type"); + Assert.True(apiDirections.Contains(direction), + $"Firewall direction '{direction}' not in API enum: {string.Join(", ", apiDirections)}"); + } + + // ── Auth Domain Types ─────────────────────────────────────────────── + + [Theory] + [InlineData("pam")] + [InlineData("pve")] + [InlineData("ad")] + [InlineData("ldap")] + [InlineData("openid")] + public void AuthDomainType_IsValidInApi(string domainType) + { + var apiTypes = GetEnumValues("/access/domains", "post", "type"); + Assert.True(apiTypes.Contains(domainType), + $"Auth domain type '{domainType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── Cluster Resource Types ────────────────────────────────────────── + + [Theory] + [InlineData("vm")] + [InlineData("node")] + [InlineData("storage")] + [InlineData("sdn")] + // Note: "lxc" is NOT a valid type filter — PVE uses "vm" for both QEMU and LXC. + // The module's ValidateSet includes "lxc" which may cause API errors. + // See: GetPveClusterResourceCmdlet.cs line 23 + public void ClusterResourceType_IsValidInApi(string resourceType) + { + var apiTypes = GetEnumValues("/cluster/resources", "get", "type"); + Assert.True(apiTypes.Contains(resourceType), + $"Cluster resource type '{resourceType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── Content Types (Upload) ────────────────────────────────────────── + + [Theory] + [InlineData("iso")] + [InlineData("vztmpl")] + public void UploadContentType_IsValidInApi(string contentType) + { + var apiTypes = GetEnumValues("/nodes/{node}/storage/{storage}/upload", "post", "content"); + Assert.True(apiTypes.Contains(contentType), + $"Upload content type '{contentType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + + // ── Console Viewer Types ──────────────────────────────────────────── + + [Theory] + [InlineData("applet")] + [InlineData("vv")] + [InlineData("html5")] + [InlineData("xtermjs")] + public void ConsoleViewer_IsValidInApi(string viewer) + { + var apiViewers = GetEnumValues("/cluster/options", "put", "console"); + Assert.True(apiViewers.Contains(viewer), + $"Console viewer '{viewer}' not in API enum: {string.Join(", ", apiViewers)}"); + } + + // ── Network Interface Types ───────────────────────────────────────── + + [Theory] + [InlineData("bridge")] + [InlineData("bond")] + [InlineData("eth")] + [InlineData("alias")] + [InlineData("vlan")] + [InlineData("OVSBridge")] + [InlineData("OVSBond")] + [InlineData("OVSPort")] + [InlineData("OVSIntPort")] + public void NetworkInterfaceType_IsValidInApi(string ifaceType) + { + var apiTypes = GetEnumValues("/nodes/{node}/network", "post", "type"); + Assert.True(apiTypes.Contains(ifaceType), + $"Network interface type '{ifaceType}' not in API enum: {string.Join(", ", apiTypes)}"); + } + } +}