diff --git a/.pulumi-java-gen.version b/.pulumi-java-gen.version index 092afa15..3500250a 100644 --- a/.pulumi-java-gen.version +++ b/.pulumi-java-gen.version @@ -1 +1 @@ -1.17.0 +1.21.0 diff --git a/Makefile b/Makefile index 72c0e017..356a7e17 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ PROVIDER := pulumi-resource-${PACK} VERSION := $(shell pulumictl get version) JAVA_GEN := pulumi-java-gen -JAVA_GEN_VERSION := v1.17.0 +JAVA_GEN_VERSION := v1.21.0 TESTPARALLELISM := 4 diff --git a/examples/go.mod b/examples/go.mod index 6ef3bb66..4758e449 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -1,7 +1,13 @@ module github.com/muhlba91/pulumi-proxmoxve/examples -go 1.23.0 +go 1.24.7 toolchain go1.25.7 -replace github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250530111747-935112552988 +replace github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250923233607-7f1981c8674a + +require ( + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/pulumi/pulumi/pkg/v3 v3.218.0 // indirect + github.com/pulumi/pulumi/sdk/v3 v3.218.0 // indirect +) diff --git a/examples/go.sum b/examples/go.sum index e69de29b..c76b6270 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -0,0 +1,6 @@ +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/pulumi/pulumi/pkg/v3 v3.218.0 h1:eiPdauXfMRAxnmJgaah5Ms7vQ9KSHj4732qE5ScXQH0= +github.com/pulumi/pulumi/pkg/v3 v3.218.0/go.mod h1:ww7sWw6SW3D0PfCU+65/VwxXDodvChXNya8/Darr7S8= +github.com/pulumi/pulumi/sdk/v3 v3.218.0 h1:kRad759G31wo6GrIM0azt0nPyKw/738P8gmK4ogf5JA= +github.com/pulumi/pulumi/sdk/v3 v3.218.0/go.mod h1:ZOBPPC2NZOZf729AdCX+CctfNc5SN6aJh0bdqNdzQC4= diff --git a/provider/cmd/pulumi-resource-proxmoxve/Pulumi.yaml b/provider/cmd/pulumi-resource-proxmoxve/Pulumi.yaml index e69de29b..e9a3936e 100644 --- a/provider/cmd/pulumi-resource-proxmoxve/Pulumi.yaml +++ b/provider/cmd/pulumi-resource-proxmoxve/Pulumi.yaml @@ -0,0 +1,3 @@ +name: proxmoxve +description: A Pulumi resource provider for proxmoxve. +language: schema diff --git a/provider/cmd/pulumi-resource-proxmoxve/bridge-metadata.json b/provider/cmd/pulumi-resource-proxmoxve/bridge-metadata.json index cebb7ef4..a78bc4c7 100644 --- a/provider/cmd/pulumi-resource-proxmoxve/bridge-metadata.json +++ b/provider/cmd/pulumi-resource-proxmoxve/bridge-metadata.json @@ -9,6 +9,18 @@ "current": "proxmoxve:index/acmeAccount:AcmeAccount", "majorVersion": 7 }, + "proxmox_virtual_environment_acme_certificate": { + "current": "proxmoxve:Acme/certificate:Certificate", + "majorVersion": 7, + "fields": { + "domains": { + "maxItemsOne": false + }, + "subject_alternative_names": { + "maxItemsOne": false + } + } + }, "proxmox_virtual_environment_acme_dns_plugin": { "current": "proxmoxve:index/acmeDnsPlugin:AcmeDnsPlugin", "majorVersion": 7 @@ -44,6 +56,41 @@ } } }, + "proxmox_virtual_environment_cloned_vm": { + "current": "proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine", + "majorVersion": 7, + "fields": { + "cpu": { + "fields": { + "flags": { + "maxItemsOne": false + } + } + }, + "delete": { + "fields": { + "disk": { + "maxItemsOne": false + }, + "network": { + "maxItemsOne": false + } + } + }, + "network": { + "elem": { + "fields": { + "trunks": { + "maxItemsOne": false + } + } + } + }, + "tags": { + "maxItemsOne": false + } + } + }, "proxmox_virtual_environment_cluster_firewall": { "current": "proxmoxve:Network/firewall:Firewall", "majorVersion": 7, @@ -322,6 +369,10 @@ "current": "proxmoxve:Network/networkVlan:NetworkVlan", "majorVersion": 7 }, + "proxmox_virtual_environment_node_firewall": { + "current": "proxmoxve:Node/firewall:Firewall", + "majorVersion": 7 + }, "proxmox_virtual_environment_oci_image": { "current": "proxmoxve:Oci/image:Image", "majorVersion": 7 @@ -339,6 +390,14 @@ "current": "proxmoxve:Pool/membership:Membership", "majorVersion": 7 }, + "proxmox_virtual_environment_realm_ldap": { + "current": "proxmoxve:Realm/ldap:Ldap", + "majorVersion": 7 + }, + "proxmox_virtual_environment_realm_sync": { + "current": "proxmoxve:Realm/sync:Sync", + "majorVersion": 7 + }, "proxmox_virtual_environment_role": { "current": "proxmoxve:Permission/role:Role", "majorVersion": 7, @@ -352,6 +411,32 @@ "current": "proxmoxve:Sdn/applier:Applier", "majorVersion": 7 }, + "proxmox_virtual_environment_sdn_fabric_node_openfabric": { + "current": "proxmoxve:Sdn/fabric/node/openfabric:Openfabric", + "majorVersion": 7, + "fields": { + "interface_names": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_sdn_fabric_node_ospf": { + "current": "proxmoxve:Sdn/fabric/node/ospf:Ospf", + "majorVersion": 7, + "fields": { + "interface_names": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_sdn_fabric_openfabric": { + "current": "proxmoxve:SDNFabric/openFabric:OpenFabric", + "majorVersion": 7 + }, + "proxmox_virtual_environment_sdn_fabric_ospf": { + "current": "proxmoxve:SDNFabric/oSPF:OSPF", + "majorVersion": 7 + }, "proxmox_virtual_environment_sdn_subnet": { "current": "proxmoxve:Sdn/subnet:Subnet", "majorVersion": 7 @@ -411,6 +496,90 @@ } } }, + "proxmox_virtual_environment_storage_cifs": { + "current": "proxmoxve:Storage/cIFS:CIFS", + "majorVersion": 7, + "fields": { + "content": { + "maxItemsOne": false + }, + "nodes": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_storage_directory": { + "current": "proxmoxve:Storage/directory:Directory", + "majorVersion": 7, + "fields": { + "content": { + "maxItemsOne": false + }, + "nodes": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_storage_lvm": { + "current": "proxmoxve:Storage/lVM:LVM", + "majorVersion": 7, + "fields": { + "content": { + "maxItemsOne": false + }, + "nodes": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_storage_lvmthin": { + "current": "proxmoxve:Storage/lVMThin:LVMThin", + "majorVersion": 7, + "fields": { + "content": { + "maxItemsOne": false + }, + "nodes": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_storage_nfs": { + "current": "proxmoxve:Storage/nFS:NFS", + "majorVersion": 7, + "fields": { + "content": { + "maxItemsOne": false + }, + "nodes": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_storage_pbs": { + "current": "proxmoxve:Storage/pBS:PBS", + "majorVersion": 7, + "fields": { + "content": { + "maxItemsOne": false + }, + "nodes": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_storage_zfspool": { + "current": "proxmoxve:Storage/zFSPool:ZFSPool", + "majorVersion": 7, + "fields": { + "content": { + "maxItemsOne": false + }, + "nodes": { + "maxItemsOne": false + } + } + }, "proxmox_virtual_environment_time": { "current": "proxmoxve:index/time:Time", "majorVersion": 7 @@ -937,6 +1106,32 @@ } } }, + "proxmox_virtual_environment_sdn_fabric_node_openfabric": { + "current": "proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", + "majorVersion": 7, + "fields": { + "interface_names": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_sdn_fabric_node_ospf": { + "current": "proxmoxve:Sdn/fabric/node/getOspf:getOspf", + "majorVersion": 7, + "fields": { + "interface_names": { + "maxItemsOne": false + } + } + }, + "proxmox_virtual_environment_sdn_fabric_openfabric": { + "current": "proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", + "majorVersion": 7 + }, + "proxmox_virtual_environment_sdn_fabric_ospf": { + "current": "proxmoxve:Sdn/fabric/getOspf:getOspf", + "majorVersion": 7 + }, "proxmox_virtual_environment_sdn_subnet": { "current": "proxmoxve:Sdn/getSubnet:getSubnet", "majorVersion": 7 @@ -1142,6 +1337,7 @@ "auto-settings": {}, "mux": { "resources": { + "proxmoxve:Acme/certificate:Certificate": 1, "proxmoxve:Apt/repository:Repository": 1, "proxmoxve:Apt/standard/repository:Repository": 1, "proxmoxve:CT/container:Container": 0, @@ -1161,22 +1357,37 @@ "proxmoxve:Network/firewallSecurityGroup:FirewallSecurityGroup": 0, "proxmoxve:Network/networkBridge:NetworkBridge": 1, "proxmoxve:Network/networkVlan:NetworkVlan": 1, + "proxmoxve:Node/firewall:Firewall": 1, "proxmoxve:Oci/image:Image": 1, "proxmoxve:Permission/group:Group": 0, "proxmoxve:Permission/pool:Pool": 0, "proxmoxve:Permission/role:Role": 0, "proxmoxve:Permission/user:User": 0, "proxmoxve:Pool/membership:Membership": 1, + "proxmoxve:Realm/ldap:Ldap": 1, + "proxmoxve:Realm/sync:Sync": 1, + "proxmoxve:SDNFabric/oSPF:OSPF": 1, + "proxmoxve:SDNFabric/openFabric:OpenFabric": 1, "proxmoxve:SDNZone/evpn:Evpn": 1, "proxmoxve:SDNZone/qinq:Qinq": 1, "proxmoxve:SDNZone/simple:Simple": 1, "proxmoxve:SDNZone/vlan:Vlan": 1, "proxmoxve:SDNZone/vxlan:Vxlan": 1, "proxmoxve:Sdn/applier:Applier": 1, + "proxmoxve:Sdn/fabric/node/openfabric:Openfabric": 1, + "proxmoxve:Sdn/fabric/node/ospf:Ospf": 1, "proxmoxve:Sdn/subnet:Subnet": 1, "proxmoxve:Sdn/vnet:Vnet": 1, + "proxmoxve:Storage/cIFS:CIFS": 1, + "proxmoxve:Storage/directory:Directory": 1, "proxmoxve:Storage/file:File": 0, + "proxmoxve:Storage/lVM:LVM": 1, + "proxmoxve:Storage/lVMThin:LVMThin": 1, + "proxmoxve:Storage/nFS:NFS": 1, + "proxmoxve:Storage/pBS:PBS": 1, + "proxmoxve:Storage/zFSPool:ZFSPool": 1, "proxmoxve:User/token:Token": 1, + "proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine": 1, "proxmoxve:VM/virtualMachine2:VirtualMachine2": 1, "proxmoxve:VM/virtualMachine:VirtualMachine": 0, "proxmoxve:index/acl:Acl": 1, @@ -1221,6 +1432,10 @@ "proxmoxve:SDNZone/getSimple:getSimple": 1, "proxmoxve:SDNZone/getVlan:getVlan": 1, "proxmoxve:SDNZone/getVxlan:getVxlan": 1, + "proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric": 1, + "proxmoxve:Sdn/fabric/getOspf:getOspf": 1, + "proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric": 1, + "proxmoxve:Sdn/fabric/node/getOspf:getOspf": 1, "proxmoxve:Sdn/getSubnet:getSubnet": 1, "proxmoxve:Sdn/getVnet:getVnet": 1, "proxmoxve:Sdn/getVnets:getVnets": 1, diff --git a/provider/cmd/pulumi-resource-proxmoxve/schema-embed.json b/provider/cmd/pulumi-resource-proxmoxve/schema-embed.json index 9e80380e..195b3acb 100644 --- a/provider/cmd/pulumi-resource-proxmoxve/schema-embed.json +++ b/provider/cmd/pulumi-resource-proxmoxve/schema-embed.json @@ -1 +1 @@ -{"name":"proxmoxve","displayName":"Proxmox Virtual Environment (Proxmox VE)","version":"7.10.0-alpha.1765610037+9fdadc09.dirty","description":"A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources.","keywords":["pulumi","proxmox","proxmoxve"],"homepage":"https://github.com/muhlba91/pulumi-proxmoxve","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`proxmox` Terraform Provider](https://github.com/bpg/terraform-provider-proxmox).","repository":"https://github.com/muhlba91/pulumi-proxmoxve","logoUrl":"https://raw.githubusercontent.com/muhlba91/pulumi-proxmoxve/main/assets/proxmox-logo.png","pluginDownloadURL":"github://api.github.com/muhlba91/pulumi-proxmoxve","publisher":"Daniel Muehlbachler-Pietrzykowski","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"packageReferences":{"Pulumi":"3.*"},"namespaces":{"proxmoxve":"ProxmoxVE"},"compatibility":"tfbridge20"},"go":{"importBasePath":"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve","generateResourceContainerTypes":true,"generateExtraInputTypes":true},"java":{"basePackage":"io.muehlbachler.pulumi","buildFiles":"","gradleNexusPublishPluginVersion":"","gradleTest":""},"nodejs":{"packageName":"@muhlba91/pulumi-proxmoxve","packageDescription":"A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources.","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/bpg/terraform-provider-proxmox)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-proxmoxve` repo](https://github.com/muhlba91/pulumi-proxmoxve/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-proxmox` repo](https://github.com/bpg/terraform-provider-proxmox/issues).","dependencies":{"@pulumi/pulumi":"^3.0.0"},"devDependencies":{"@types/mime":"^2.0.0","@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true},"python":{"packageName":"pulumi_proxmoxve","requires":{"pulumi":"\u003e=3.0.0,\u003c4.0.0"},"readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/bpg/terraform-provider-proxmox)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-proxmoxve` repo](https://github.com/muhlba91/pulumi-proxmoxve/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-proxmox` repo](https://github.com/bpg/terraform-provider-proxmox/issues).","compatibility":"tfbridge20","respectSchemaVersion":true,"pyproject":{"enabled":true}}},"config":{"variables":{"apiToken":{"type":"string","description":"The API token for the Proxmox VE API.","secret":true},"authTicket":{"type":"string","description":"The pre-authenticated Ticket for the Proxmox VE API.","secret":true},"csrfPreventionToken":{"type":"string","description":"The pre-authenticated CSRF Prevention Token for the Proxmox VE API.","secret":true},"endpoint":{"type":"string","description":"The endpoint for the Proxmox VE API."},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step."},"minTls":{"type":"string","description":"The minimum required TLS version for API calls.Supported values: `1.0|1.1|1.2|1.3`. Defaults to `1.3`."},"otp":{"type":"string","description":"The one-time password for the Proxmox VE API.","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`otp`\" pulumi-lang-dotnet=\"`Otp`\" pulumi-lang-go=\"`otp`\" pulumi-lang-python=\"`otp`\" pulumi-lang-yaml=\"`otp`\" pulumi-lang-java=\"`otp`\"\u003e`otp`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e attribute instead."},"password":{"type":"string","description":"The password for the Proxmox VE API.","secret":true},"randomVmIdEnd":{"type":"integer","description":"The ending number for random VM / Container IDs."},"randomVmIdStart":{"type":"integer","description":"The starting number for random VM / Container IDs."},"randomVmIds":{"type":"boolean","description":"Whether to generate random VM / Container IDs."},"ssh":{"$ref":"#/types/proxmoxve:config/ssh:ssh","description":"The SSH configuration for the Proxmox nodes."},"tmpDir":{"type":"string","description":"The alternative temporary directory."},"username":{"type":"string","description":"The username for the Proxmox VE API."}}},"types":{"proxmoxve:Acme/getAccountAccount:getAccountAccount":{"properties":{"contacts":{"type":"array","items":{"type":"string"},"description":"An array of contact email addresses.\n"},"createdAt":{"type":"string","description":"The timestamp of the account creation.\n"},"status":{"type":"string","description":"The status of the account. Can be one of \u003cspan pulumi-lang-nodejs=\"`valid`\" pulumi-lang-dotnet=\"`Valid`\" pulumi-lang-go=\"`valid`\" pulumi-lang-python=\"`valid`\" pulumi-lang-yaml=\"`valid`\" pulumi-lang-java=\"`valid`\"\u003e`valid`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`deactivated`\" pulumi-lang-dotnet=\"`Deactivated`\" pulumi-lang-go=\"`deactivated`\" pulumi-lang-python=\"`deactivated`\" pulumi-lang-yaml=\"`deactivated`\" pulumi-lang-java=\"`deactivated`\"\u003e`deactivated`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`revoked`\" pulumi-lang-dotnet=\"`Revoked`\" pulumi-lang-go=\"`revoked`\" pulumi-lang-python=\"`revoked`\" pulumi-lang-yaml=\"`revoked`\" pulumi-lang-java=\"`revoked`\"\u003e`revoked`\u003c/span\u003e.\n"}},"type":"object","required":["contacts","createdAt","status"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Acme/getPluginsPlugin:getPluginsPlugin":{"properties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"type":{"type":"string","description":"ACME challenge type (dns, standalone).\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"type":"object","required":["api","data","digest","plugin","type","validationDelay"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:CT/ContainerClone:ContainerClone":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The name of the source node (leave blank, if\nequal to the \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e argument).\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The identifier for the source container.\n","willReplaceOnChanges":true}},"type":"object","required":["vmId"]},"proxmoxve:CT/ContainerConsole:ContainerConsole":{"properties":{"enabled":{"type":"boolean","description":"Whether to enable the console device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"ttyCount":{"type":"integer","description":"The number of available TTY (defaults to \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The console mode (defaults to \u003cspan pulumi-lang-nodejs=\"`tty`\" pulumi-lang-dotnet=\"`Tty`\" pulumi-lang-go=\"`tty`\" pulumi-lang-python=\"`tty`\" pulumi-lang-yaml=\"`tty`\" pulumi-lang-java=\"`tty`\"\u003e`tty`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:CT/ContainerCpu:ContainerCpu":{"properties":{"architecture":{"type":"string","description":"The CPU architecture (defaults to \u003cspan pulumi-lang-nodejs=\"`amd64`\" pulumi-lang-dotnet=\"`Amd64`\" pulumi-lang-go=\"`amd64`\" pulumi-lang-python=\"`amd64`\" pulumi-lang-yaml=\"`amd64`\" pulumi-lang-java=\"`amd64`\"\u003e`amd64`\u003c/span\u003e).\n"},"cores":{"type":"integer","description":"The number of CPU cores (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"units":{"type":"integer","description":"The CPU units (defaults to \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough":{"properties":{"denyWrite":{"type":"boolean","description":"Deny the container to write to the device (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"gid":{"type":"integer","description":"Group ID to be assigned to the device node.\n"},"mode":{"type":"string","description":"Access mode to be set on the device node. Must be a\n4-digit octal number.\n"},"path":{"type":"string","description":"Device to pass through to the container (e.g. `/dev/sda`).\n"},"uid":{"type":"integer","description":"User ID to be assigned to the device node.\n"}},"type":"object","required":["path"]},"proxmoxve:CT/ContainerDisk:ContainerDisk":{"properties":{"acl":{"type":"boolean","description":"Explicitly enable or disable ACL support\n"},"datastoreId":{"type":"string","description":"The identifier for the datastore to create the\ndisk in (defaults to \u003cspan pulumi-lang-nodejs=\"`local`\" pulumi-lang-dotnet=\"`Local`\" pulumi-lang-go=\"`local`\" pulumi-lang-python=\"`local`\" pulumi-lang-yaml=\"`local`\" pulumi-lang-java=\"`local`\"\u003e`local`\u003c/span\u003e).\n","willReplaceOnChanges":true},"mountOptions":{"type":"array","items":{"type":"string"},"description":"List of extra mount options.\n"},"quota":{"type":"boolean","description":"Enable user quotas for the container rootfs\n"},"replicate":{"type":"boolean","description":"Will include this volume to a storage replica job\n"},"size":{"type":"integer","description":"The size of the root filesystem in gigabytes (defaults\nto \u003cspan pulumi-lang-nodejs=\"`4`\" pulumi-lang-dotnet=\"`4`\" pulumi-lang-go=\"`4`\" pulumi-lang-python=\"`4`\" pulumi-lang-yaml=\"`4`\" pulumi-lang-java=\"`4`\"\u003e`4`\u003c/span\u003e). When set to 0 a directory or zfs/btrfs subvolume will be created.\nRequires \u003cspan pulumi-lang-nodejs=\"`datastoreId`\" pulumi-lang-dotnet=\"`DatastoreId`\" pulumi-lang-go=\"`datastoreId`\" pulumi-lang-python=\"`datastore_id`\" pulumi-lang-yaml=\"`datastoreId`\" pulumi-lang-java=\"`datastoreId`\"\u003e`datastore_id`\u003c/span\u003e to be set.\n","willReplaceOnChanges":true}},"type":"object"},"proxmoxve:CT/ContainerFeatures:ContainerFeatures":{"properties":{"fuse":{"type":"boolean","description":"Whether the container supports FUSE mounts (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"keyctl":{"type":"boolean","description":"Whether the container supports `keyctl()` system call (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"mounts":{"type":"array","items":{"type":"string"},"description":"List of allowed mount types (\u003cspan pulumi-lang-nodejs=\"`cifs`\" pulumi-lang-dotnet=\"`Cifs`\" pulumi-lang-go=\"`cifs`\" pulumi-lang-python=\"`cifs`\" pulumi-lang-yaml=\"`cifs`\" pulumi-lang-java=\"`cifs`\"\u003e`cifs`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`nfs`\" pulumi-lang-dotnet=\"`Nfs`\" pulumi-lang-go=\"`nfs`\" pulumi-lang-python=\"`nfs`\" pulumi-lang-yaml=\"`nfs`\" pulumi-lang-java=\"`nfs`\"\u003e`nfs`\u003c/span\u003e)\n"},"nesting":{"type":"boolean","description":"Whether the container is nested (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"}},"type":"object"},"proxmoxve:CT/ContainerInitialization:ContainerInitialization":{"properties":{"dns":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationDns:ContainerInitializationDns","description":"The DNS configuration.\n"},"hostname":{"type":"string","description":"The hostname.\n"},"ipConfigs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationIpConfig:ContainerInitializationIpConfig"},"description":"The IP configuration (one block per network\ndevice).\n"},"userAccount":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationUserAccount:ContainerInitializationUserAccount","description":"The user account configuration.\n","willReplaceOnChanges":true}},"type":"object"},"proxmoxve:CT/ContainerInitializationDns:ContainerInitializationDns":{"properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"server":{"type":"string","description":"The DNS server.\nThe \u003cspan pulumi-lang-nodejs=\"`server`\" pulumi-lang-dotnet=\"`Server`\" pulumi-lang-go=\"`server`\" pulumi-lang-python=\"`server`\" pulumi-lang-yaml=\"`server`\" pulumi-lang-java=\"`server`\"\u003e`server`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use\nthe \u003cspan pulumi-lang-nodejs=\"`servers`\" pulumi-lang-dotnet=\"`Servers`\" pulumi-lang-go=\"`servers`\" pulumi-lang-python=\"`servers`\" pulumi-lang-yaml=\"`servers`\" pulumi-lang-java=\"`servers`\"\u003e`servers`\u003c/span\u003e attribute instead.\n","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`server`\" pulumi-lang-dotnet=\"`Server`\" pulumi-lang-go=\"`server`\" pulumi-lang-python=\"`server`\" pulumi-lang-yaml=\"`server`\" pulumi-lang-java=\"`server`\"\u003e`server`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`servers`\" pulumi-lang-dotnet=\"`Servers`\" pulumi-lang-go=\"`servers`\" pulumi-lang-python=\"`servers`\" pulumi-lang-yaml=\"`servers`\" pulumi-lang-java=\"`servers`\"\u003e`servers`\u003c/span\u003e attribute instead."},"servers":{"type":"array","items":{"type":"string"},"description":"The list of DNS servers.\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationIpConfig:ContainerInitializationIpConfig":{"properties":{"ipv4":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationIpConfigIpv4:ContainerInitializationIpConfigIpv4","description":"The IPv4 configuration.\n"},"ipv6":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationIpConfigIpv6:ContainerInitializationIpConfigIpv6","description":"The IPv6 configuration.\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationIpConfigIpv4:ContainerInitializationIpConfigIpv4":{"properties":{"address":{"type":"string","description":"The IPv4 address in CIDR notation\n(e.g. 192.168.2.2/24). Alternatively, set this to \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for\nautodiscovery.\n"},"gateway":{"type":"string","description":"The IPv4 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e is used as the address).\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationIpConfigIpv6:ContainerInitializationIpConfigIpv6":{"properties":{"address":{"type":"string","description":"The IPv6 address in CIDR notation\n(e.g. fd1c::7334/64). Alternatively, set this\nto \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for DHCPv6, or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e for SLAAC.\n"},"gateway":{"type":"string","description":"The IPv6 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e are used as the address).\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationUserAccount:ContainerInitializationUserAccount":{"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The SSH keys for the root account.\n","willReplaceOnChanges":true},"password":{"type":"string","description":"The password for the root account.\n","secret":true,"willReplaceOnChanges":true}},"type":"object"},"proxmoxve:CT/ContainerMemory:ContainerMemory":{"properties":{"dedicated":{"type":"integer","description":"The dedicated memory in megabytes (defaults\nto \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e).\n"},"swap":{"type":"integer","description":"The swap size in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:CT/ContainerMountPoint:ContainerMountPoint":{"properties":{"acl":{"type":"boolean","description":"Explicitly enable or disable ACL support.\n"},"backup":{"type":"boolean","description":"Whether to include the mount point in backups (only\nused for volume mount points, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"mountOptions":{"type":"array","items":{"type":"string"},"description":"List of extra mount options.\n"},"path":{"type":"string","description":"Path to the mount point as seen from inside the\ncontainer.\n"},"quota":{"type":"boolean","description":"Enable user quotas inside the container (not supported\nwith ZFS subvolumes).\n"},"readOnly":{"type":"boolean","description":"Read-only mount point.\n"},"replicate":{"type":"boolean","description":"Will include this volume to a storage replica job.\n"},"shared":{"type":"boolean","description":"Mark this non-volume mount point as available on all\nnodes.\n"},"size":{"type":"string","description":"Volume size (only for volume mount points).\nCan be specified with a unit suffix (e.g. `10G`).\n"},"volume":{"type":"string","description":"Volume, device or directory to mount into the\ncontainer.\n"}},"type":"object","required":["path","volume"]},"proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface":{"properties":{"bridge":{"type":"string","description":"The name of the network bridge (defaults\nto \u003cspan pulumi-lang-nodejs=\"`vmbr0`\" pulumi-lang-dotnet=\"`Vmbr0`\" pulumi-lang-go=\"`vmbr0`\" pulumi-lang-python=\"`vmbr0`\" pulumi-lang-yaml=\"`vmbr0`\" pulumi-lang-java=\"`vmbr0`\"\u003e`vmbr0`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether to enable the network device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"firewall":{"type":"boolean","description":"Whether this interface's firewall rules should be\nused (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"macAddress":{"type":"string","description":"The MAC address.\n"},"mtu":{"type":"integer","description":"Maximum transfer unit of the interface. Cannot be\nlarger than the bridge's MTU.\n"},"name":{"type":"string","description":"The network interface name.\n"},"rateLimit":{"type":"number","description":"The rate limit in megabytes per second.\n"},"vlanId":{"type":"integer","description":"The VLAN identifier.\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["macAddress","name"]}}},"proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem":{"properties":{"templateFileId":{"type":"string","description":"The identifier for an OS template file.\nThe ID format is `\u003cdatastore_id\u003e:\u003ccontent_type\u003e/\u003cfile_name\u003e`, for example `local:iso/jammy-server-cloudimg-amd64.tar.gz`.\nCan be also taken from \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource, or from the output of `pvesm list \u003cstorage\u003e`.\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The type (defaults to \u003cspan pulumi-lang-nodejs=\"`unmanaged`\" pulumi-lang-dotnet=\"`Unmanaged`\" pulumi-lang-go=\"`unmanaged`\" pulumi-lang-python=\"`unmanaged`\" pulumi-lang-yaml=\"`unmanaged`\" pulumi-lang-java=\"`unmanaged`\"\u003e`unmanaged`\u003c/span\u003e).\n"}},"type":"object","required":["templateFileId"]},"proxmoxve:CT/ContainerStartup:ContainerStartup":{"properties":{"downDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next container is shut down.\n"},"order":{"type":"integer","description":"A non-negative number defining the general startup\norder.\n"},"upDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next container is started.\n"}},"type":"object"},"proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp":{"properties":{"ipv4":{"type":"boolean","description":"Wait for at least one IPv4 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"ipv6":{"type":"boolean","description":"Wait for at least one IPv6 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nWhen \u003cspan pulumi-lang-nodejs=\"`waitForIp`\" pulumi-lang-dotnet=\"`WaitForIp`\" pulumi-lang-go=\"`waitForIp`\" pulumi-lang-python=\"`wait_for_ip`\" pulumi-lang-yaml=\"`waitForIp`\" pulumi-lang-java=\"`waitForIp`\"\u003e`wait_for_ip`\u003c/span\u003e is not specified or both \u003cspan pulumi-lang-nodejs=\"`ipv4`\" pulumi-lang-dotnet=\"`Ipv4`\" pulumi-lang-go=\"`ipv4`\" pulumi-lang-python=\"`ipv4`\" pulumi-lang-yaml=\"`ipv4`\" pulumi-lang-java=\"`ipv4`\"\u003e`ipv4`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ipv6`\" pulumi-lang-dotnet=\"`Ipv6`\" pulumi-lang-go=\"`ipv6`\" pulumi-lang-python=\"`ipv6`\" pulumi-lang-yaml=\"`ipv6`\" pulumi-lang-java=\"`ipv6`\"\u003e`ipv6`\u003c/span\u003e are \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, the provider waits for any valid global unicast address (IPv4 or IPv6). In dual-stack networks where DHCPv6 responds faster, this may result in only IPv6 addresses being available. Set `ipv4 = true` to ensure IPv4 address availability.\n"}},"type":"object"},"proxmoxve:Cluster/OptionsNextId:OptionsNextId":{"properties":{"lower":{"type":"integer","description":"The minimum number for the next free VM ID. Must be higher or equal to 100\n"},"upper":{"type":"integer","description":"The maximum number for the next free VM ID. Must be less or equal to 999999999\n"}},"type":"object"},"proxmoxve:Cluster/OptionsNotify:OptionsNotify":{"properties":{"haFencingMode":{"type":"string","description":"Cluster-wide notification settings for the HA fencing mode. Must be \u003cspan pulumi-lang-nodejs=\"`always`\" pulumi-lang-dotnet=\"`Always`\" pulumi-lang-go=\"`always`\" pulumi-lang-python=\"`always`\" pulumi-lang-yaml=\"`always`\" pulumi-lang-java=\"`always`\"\u003e`always`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`never`\" pulumi-lang-dotnet=\"`Never`\" pulumi-lang-go=\"`never`\" pulumi-lang-python=\"`never`\" pulumi-lang-yaml=\"`never`\" pulumi-lang-java=\"`never`\"\u003e`never`\u003c/span\u003e.\n"},"haFencingTarget":{"type":"string","description":"Cluster-wide notification settings for the HA fencing target.\n"},"packageUpdates":{"type":"string","description":"Cluster-wide notification settings for package updates. Must be \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`always`\" pulumi-lang-dotnet=\"`Always`\" pulumi-lang-go=\"`always`\" pulumi-lang-python=\"`always`\" pulumi-lang-yaml=\"`always`\" pulumi-lang-java=\"`always`\"\u003e`always`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`never`\" pulumi-lang-dotnet=\"`Never`\" pulumi-lang-go=\"`never`\" pulumi-lang-python=\"`never`\" pulumi-lang-yaml=\"`never`\" pulumi-lang-java=\"`never`\"\u003e`never`\u003c/span\u003e.\n"},"packageUpdatesTarget":{"type":"string","description":"Cluster-wide notification settings for the package updates target.\n"},"replication":{"type":"string","description":"Cluster-wide notification settings for replication. Must be \u003cspan pulumi-lang-nodejs=\"`always`\" pulumi-lang-dotnet=\"`Always`\" pulumi-lang-go=\"`always`\" pulumi-lang-python=\"`always`\" pulumi-lang-yaml=\"`always`\" pulumi-lang-java=\"`always`\"\u003e`always`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`never`\" pulumi-lang-dotnet=\"`Never`\" pulumi-lang-go=\"`never`\" pulumi-lang-python=\"`never`\" pulumi-lang-yaml=\"`never`\" pulumi-lang-java=\"`never`\"\u003e`never`\u003c/span\u003e.\n"},"replicationTarget":{"type":"string","description":"Cluster-wide notification settings for the replication target.\n"}},"type":"object"},"proxmoxve:Hardware/getMappingsCheck:getMappingsCheck":{"properties":{"mappingId":{"type":"string","description":"The corresponding hardware mapping ID of the node check diagnostic entry.\n"},"message":{"type":"string","description":"The message of the node check diagnostic entry.\n"},"severity":{"type":"string","description":"The severity of the node check diagnostic entry.\n"}},"type":"object","required":["mappingId","message","severity"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Hardware/mapping/DirMap:DirMap":{"properties":{"node":{"type":"string","description":"The node this mapping applies to.\n"},"path":{"type":"string","description":"The path of the map. For directory mappings the path is required and refers to the POSIX path of the directory as visible from the node.\n"}},"type":"object","required":["node","path"]},"proxmoxve:Hardware/mapping/PciMap:PciMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped PCI device.\n"},"id":{"type":"string","description":"The ID of the map.\n"},"iommuGroup":{"type":"integer","description":"The IOMMU group of the map. Not mandatory for the Proxmox VE API call, but causes a PCI hardware mapping to be incomplete when not set\n"},"node":{"type":"string","description":"The node name of the map.\n"},"path":{"type":"string","description":"The path of the map.\n"},"subsystemId":{"type":"string","description":"The subsystem ID group of the map. Not mandatory for the Proxmox VE API call, but causes a PCI hardware mapping to be incomplete when not set\n"}},"type":"object","required":["id","node","path"]},"proxmoxve:Hardware/mapping/UsbMap:UsbMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped USB device.\n"},"id":{"type":"string","description":"The ID of the map.\n"},"node":{"type":"string","description":"The node name of the map.\n"},"path":{"type":"string","description":"The path of the map. For hardware mappings of type USB the path is optional and indicates that the device is mapped through the device ID instead of ports.\n"}},"type":"object","required":["id","node"]},"proxmoxve:Hardware/mapping/getDirMap:getDirMap":{"properties":{"node":{"type":"string","description":"The node name attribute of the map.\n"},"path":{"type":"string","description":"The path attribute of the map.\n"}},"type":"object","required":["node","path"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Hardware/mapping/getPciMap:getPciMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped PCI device.\n"},"id":{"type":"string","description":"The ID attribute of the map.\n"},"iommuGroup":{"type":"integer","description":"The IOMMU group attribute of the map.\n"},"node":{"type":"string","description":"The node name attribute of the map.\n"},"path":{"type":"string","description":"The path attribute of the map.\n"},"subsystemId":{"type":"string","description":"The subsystem ID attribute of the map.Not mandatory for the Proxmox VE API call, but causes a PCI hardware mapping to be incomplete when not set.\n"}},"type":"object","required":["comment","id","iommuGroup","node","path","subsystemId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Hardware/mapping/getUsbMap:getUsbMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped USB device.\n"},"id":{"type":"string","description":"The ID attribute of the map.\n"},"node":{"type":"string","description":"The node name attribute of the map.\n"},"path":{"type":"string","description":"The path attribute of the map.\n"}},"type":"object","required":["comment","id","node","path"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr":{"properties":{"comment":{"type":"string","description":"Arbitrary string annotation.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"Network/IP specification in CIDR format.\n","willReplaceOnChanges":true},"nomatch":{"type":"boolean","description":"Entries marked as \u003cspan pulumi-lang-nodejs=\"`nomatch`\" pulumi-lang-dotnet=\"`Nomatch`\" pulumi-lang-go=\"`nomatch`\" pulumi-lang-python=\"`nomatch`\" pulumi-lang-yaml=\"`nomatch`\" pulumi-lang-java=\"`nomatch`\"\u003e`nomatch`\u003c/span\u003e are skipped as if those\nwere not added to the set.\n","willReplaceOnChanges":true}},"type":"object","required":["name"]},"proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit":{"properties":{"burst":{"type":"integer","description":"Initial burst of packages which will always get\nlogged before the rate is applied (defaults to \u003cspan pulumi-lang-nodejs=\"`5`\" pulumi-lang-dotnet=\"`5`\" pulumi-lang-go=\"`5`\" pulumi-lang-python=\"`5`\" pulumi-lang-yaml=\"`5`\" pulumi-lang-java=\"`5`\"\u003e`5`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Enable or disable the log rate limit.\n"},"rate":{"type":"string","description":"Frequency with which the burst bucket gets refilled\n(defaults to `1/second`).\n"}},"type":"object"},"proxmoxve:Network/FirewallRulesRule:FirewallRulesRule":{"properties":{"action":{"type":"string","description":"Rule action (`ACCEPT`, `DROP`, `REJECT`).\n"},"comment":{"type":"string","description":"Rule comment.\n"},"dest":{"type":"string","description":"Restrict packet destination address. This can\nrefer to a single IP address, an IP set ('+ipsetname') or an IP\nalias definition. You can also specify an address range\nlike `20.34.101.207-201.3.9.99`, or a list of IP addresses and\nnetworks (entries are separated by comma). Please do not mix IPv4\nand IPv6 addresses inside such lists.\n"},"dport":{"type":"string","description":"Restrict TCP/UDP destination port. You can use\nservice names or simple numbers (0-65535), as defined\nin `/etc/services`. Port ranges can be specified with '\\d+:\\d+', for\nexample `80:85`, and you can use comma separated list to match\nseveral ports or ranges.\n"},"enabled":{"type":"boolean","description":"Enable this rule. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"iface":{"type":"string","description":"Network interface name. You have to use network\nconfiguration key names for VMs and containers ('net\\d+'). Host\nrelated rules can use arbitrary strings.\n"},"log":{"type":"string","description":"Log level for this rule (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macro":{"type":"string","description":"Macro name. Use predefined standard macro\nfrom \u003chttps://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions\u003e\n"},"pos":{"type":"integer","description":"Position of the rule in the list.\n"},"proto":{"type":"string","description":"Restrict packet protocol. You can use protocol\nnames as defined in '/etc/protocols'.\n"},"securityGroup":{"type":"string","description":"Security group name.\n"},"source":{"type":"string","description":"Restrict packet source address. This can refer\nto a single IP address, an IP set ('+ipsetname') or an IP alias\ndefinition. You can also specify an address range\nlike `20.34.101.207-201.3.9.99`, or a list of IP addresses and\nnetworks (entries are separated by comma). Please do not mix IPv4\nand IPv6 addresses inside such lists.\n"},"sport":{"type":"string","description":"Restrict TCP/UDP source port. You can use\nservice names or simple numbers (0-65535), as defined\nin `/etc/services`. Port ranges can be specified with '\\d+:\\d+', for\nexample `80:85`, and you can use comma separated list to match\nseveral ports or ranges.\n- a security group insertion block, which includes the following arguments:\n"},"type":{"type":"string","description":"Rule type (\u003cspan pulumi-lang-nodejs=\"`in`\" pulumi-lang-dotnet=\"`In`\" pulumi-lang-go=\"`in`\" pulumi-lang-python=\"`in`\" pulumi-lang-yaml=\"`in`\" pulumi-lang-java=\"`in`\"\u003e`in`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`out`\" pulumi-lang-dotnet=\"`Out`\" pulumi-lang-go=\"`out`\" pulumi-lang-python=\"`out`\" pulumi-lang-yaml=\"`out`\" pulumi-lang-java=\"`out`\"\u003e`out`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`forward`\" pulumi-lang-dotnet=\"`Forward`\" pulumi-lang-go=\"`forward`\" pulumi-lang-python=\"`forward`\" pulumi-lang-yaml=\"`forward`\" pulumi-lang-java=\"`forward`\"\u003e`forward`\u003c/span\u003e).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["pos"]}}},"proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule":{"properties":{"action":{"type":"string","description":"Rule action (`ACCEPT`, `DROP`, `REJECT`).\n"},"comment":{"type":"string","description":"Rule comment.\n"},"dest":{"type":"string","description":"Restrict packet destination address. This can refer to\na single IP address, an IP set ('+ipsetname') or an IP alias\ndefinition. You can also specify an address range like\n`20.34.101.207-201.3.9.99`, or a list of IP addresses and networks\n(entries are separated by comma). Please do not mix IPv4 and IPv6\naddresses inside such lists.\n"},"dport":{"type":"string","description":"Restrict TCP/UDP destination port. You can use\nservice names or simple numbers (0-65535), as defined in '/etc/\nservices'. Port ranges can be specified with '\\d+:\\d+', for example\n`80:85`, and you can use comma separated list to match several ports or\nranges.\n"},"enabled":{"type":"boolean","description":"Enable this rule. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"iface":{"type":"string","description":"Network interface name. You have to use network\nconfiguration key names for VMs and containers ('net\\d+'). Host related\nrules can use arbitrary strings.\n"},"log":{"type":"string","description":"Log level for this rule (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macro":{"type":"string","description":"Macro name. Use predefined standard macro\nfrom \u003chttps://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions\u003e\n"},"pos":{"type":"integer","description":"Position of the rule in the list.\n"},"proto":{"type":"string","description":"Restrict packet protocol. You can use protocol names\nas defined in '/etc/protocols'.\n"},"securityGroup":{"type":"string","description":"Security group name\n"},"source":{"type":"string","description":"Restrict packet source address. This can refer\nto a single IP address, an IP set ('+ipsetname') or an IP alias\ndefinition. You can also specify an address range like\n`20.34.101.207-201.3.9.99`, or a list of IP addresses and networks (\nentries are separated by comma). Please do not mix IPv4 and IPv6\naddresses inside such lists.\n"},"sport":{"type":"string","description":"Restrict TCP/UDP source port. You can use\nservice names or simple numbers (0-65535), as defined in '/etc/\nservices'. Port ranges can be specified with '\\d+:\\d+', for example\n`80:85`, and you can use comma separated list to match several ports or\nranges.\n"},"type":{"type":"string","description":"Rule type (\u003cspan pulumi-lang-nodejs=\"`in`\" pulumi-lang-dotnet=\"`In`\" pulumi-lang-go=\"`in`\" pulumi-lang-python=\"`in`\" pulumi-lang-yaml=\"`in`\" pulumi-lang-java=\"`in`\"\u003e`in`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`out`\" pulumi-lang-dotnet=\"`Out`\" pulumi-lang-go=\"`out`\" pulumi-lang-python=\"`out`\" pulumi-lang-yaml=\"`out`\" pulumi-lang-java=\"`out`\"\u003e`out`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`forward`\" pulumi-lang-dotnet=\"`Forward`\" pulumi-lang-go=\"`forward`\" pulumi-lang-python=\"`forward`\" pulumi-lang-yaml=\"`forward`\" pulumi-lang-java=\"`forward`\"\u003e`forward`\u003c/span\u003e).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["pos"]}}},"proxmoxve:Network/getHostsEntry:getHostsEntry":{"properties":{"address":{"type":"string","description":"The address\n"},"hostnames":{"type":"array","items":{"type":"string"},"description":"The hostnames associated with each of the IP addresses.\n"}},"type":"object","required":["address","hostnames"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Permission/GroupAcl:GroupAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","roleId"]},"proxmoxve:Permission/PoolMember:PoolMember":{"properties":{"datastoreId":{"type":"string","description":"The datastore identifier.\n"},"id":{"type":"string","description":"The member identifier.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"type":{"type":"string","description":"The member type.\n"},"vmId":{"type":"integer","description":"The virtual machine identifier.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["datastoreId","id","nodeName","type","vmId"]}}},"proxmoxve:Permission/UserAcl:UserAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","roleId"]},"proxmoxve:Permission/getGroupAcl:getGroupAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","propagate","roleId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Permission/getPoolMember:getPoolMember":{"properties":{"datastoreId":{"type":"string","description":"The datastore identifier.\n"},"id":{"type":"string","description":"The member identifier.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"type":{"type":"string","description":"The member type.\n"},"vmId":{"type":"integer","description":"The virtual machine identifier.\n"}},"type":"object","required":["datastoreId","id","nodeName","type","vmId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Permission/getUserAcl:getUserAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","propagate","roleId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange":{"properties":{"endAddress":{"type":"string","description":"End of the DHCP range.\n"},"startAddress":{"type":"string","description":"Start of the DHCP range.\n"}},"type":"object","required":["endAddress","startAddress"]},"proxmoxve:Sdn/getSubnetDhcpRange:getSubnetDhcpRange":{"properties":{"endAddress":{"type":"string","description":"End of the DHCP range.\n"},"startAddress":{"type":"string","description":"Start of the DHCP range.\n"}},"type":"object","required":["endAddress","startAddress"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Sdn/getVnetsVnet:getVnetsVnet":{"properties":{"alias":{"type":"string"},"id":{"type":"string"},"isolatePorts":{"type":"boolean"},"tag":{"type":"integer"},"vlanAware":{"type":"boolean"},"zone":{"type":"string"}},"type":"object","required":["alias","id","isolatePorts","tag","vlanAware","zone"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Sdn/getZonesZone:getZonesZone":{"properties":{"advertiseSubnets":{"type":"boolean"},"bridge":{"type":"string"},"controller":{"type":"string"},"dhcp":{"type":"string"},"disableArpNdSuppression":{"type":"boolean"},"dns":{"type":"string"},"dnsZone":{"type":"string"},"exitNodes":{"type":"array","items":{"type":"string"}},"exitNodesLocalRouting":{"type":"boolean"},"id":{"type":"string"},"ipam":{"type":"string"},"mtu":{"type":"integer"},"nodes":{"type":"array","items":{"type":"string"}},"peers":{"type":"array","items":{"type":"string"}},"pending":{"type":"boolean"},"primaryExitNode":{"type":"string"},"reverseDns":{"type":"string"},"rtImport":{"type":"string"},"serviceVlan":{"type":"integer"},"serviceVlanProtocol":{"type":"string"},"state":{"type":"string"},"type":{"type":"string"},"vrfVxlan":{"type":"integer"}},"type":"object","required":["advertiseSubnets","bridge","controller","dhcp","disableArpNdSuppression","dns","dnsZone","exitNodes","exitNodesLocalRouting","id","ipam","mtu","nodes","peers","pending","primaryExitNode","reverseDns","rtImport","serviceVlan","serviceVlanProtocol","state","type","vrfVxlan"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Storage/FileSourceFile:FileSourceFile":{"properties":{"changed":{"type":"boolean","description":"Whether the source file has changed since the last run\n","willReplaceOnChanges":true},"checksum":{"type":"string","description":"The SHA256 checksum of the source file.\n","willReplaceOnChanges":true},"fileName":{"type":"string","description":"The file name to use instead of the source file\nname. Useful when the source file does not have a valid file extension,\nfor example when the source file is a URL referencing a `.qcow2` image.\n","willReplaceOnChanges":true},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step for\nHTTPS sources (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"minTls":{"type":"string","description":"The minimum required TLS version for HTTPS\nsources. \"Supported values: `1.0|1.1|1.2|1.3` (defaults to `1.3`).\n","willReplaceOnChanges":true},"path":{"type":"string","description":"A path to a local file or a URL.\n","willReplaceOnChanges":true}},"type":"object","required":["path"]},"proxmoxve:Storage/FileSourceRaw:FileSourceRaw":{"properties":{"data":{"type":"string","description":"The raw data.\n","willReplaceOnChanges":true},"fileName":{"type":"string","description":"The file name.\n","willReplaceOnChanges":true},"resize":{"type":"integer","description":"The number of bytes to resize the file to.\n","willReplaceOnChanges":true}},"type":"object","required":["data","fileName"]},"proxmoxve:Storage/getDatastoresDatastore:getDatastoresDatastore":{"properties":{"active":{"type":"boolean","description":"Whether the store is active.\n"},"contentTypes":{"type":"array","items":{"type":"string"},"description":"Allowed store content types.\n"},"enabled":{"type":"boolean","description":"Whether the store is enabled.\n"},"id":{"type":"string","description":"The ID of the store.\n"},"nodeName":{"type":"string","description":"The name of the node the store is on.\n"},"shared":{"type":"boolean","description":"Shared flag from store configuration.\n"},"spaceAvailable":{"type":"integer","description":"Available store space in bytes.\n"},"spaceTotal":{"type":"integer","description":"Total store space in bytes.\n"},"spaceUsed":{"type":"integer","description":"Used store space in bytes.\n"},"spaceUsedFraction":{"type":"number","description":"Used fraction (used/total).\n"},"type":{"type":"string","description":"Store type.\n"}},"type":"object","required":["contentTypes","id","nodeName","type"]},"proxmoxve:Storage/getDatastoresFilters:getDatastoresFilters":{"properties":{"contentTypes":{"type":"array","items":{"type":"string"},"description":"Only list stores with the given content types.\n"},"id":{"type":"string","description":"Only list stores with the given ID.\n"},"target":{"type":"string","description":"If \u003cspan pulumi-lang-nodejs=\"`target`\" pulumi-lang-dotnet=\"`Target`\" pulumi-lang-go=\"`target`\" pulumi-lang-python=\"`target`\" pulumi-lang-yaml=\"`target`\" pulumi-lang-java=\"`target`\"\u003e`target`\u003c/span\u003e is different to \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e, then only lists shared stores which content is accessible on this node and the specified \u003cspan pulumi-lang-nodejs=\"`target`\" pulumi-lang-dotnet=\"`Target`\" pulumi-lang-go=\"`target`\" pulumi-lang-python=\"`target`\" pulumi-lang-yaml=\"`target`\" pulumi-lang-java=\"`target`\"\u003e`target`\u003c/span\u003e node.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom":{"properties":{"fileId":{"type":"string","description":"The file ID of the CD-ROM, or `cdrom|none`. Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM empty. Use \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e to connect to the physical drive.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["fileId"]}}},"proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone":{"properties":{"id":{"type":"integer","description":"The ID of the VM to clone.\n"},"retries":{"type":"integer","description":"The number of retries to perform when cloning the VM (default: 3).\n"}},"type":"object","required":["id"],"language":{"nodejs":{"requiredOutputs":["id","retries"]}}},"proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu":{"properties":{"affinity":{"type":"string","description":"The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"architecture":{"type":"string","description":"The CPU architecture `\u003caarch64 | x86_64\u003e` (defaults to the host). Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"cores":{"type":"integer","description":"The number of CPU cores per socket (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"flags":{"type":"array","items":{"type":"string"},"description":"Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: \u003cspan pulumi-lang-nodejs=\"`pcid`\" pulumi-lang-dotnet=\"`Pcid`\" pulumi-lang-go=\"`pcid`\" pulumi-lang-python=\"`pcid`\" pulumi-lang-yaml=\"`pcid`\" pulumi-lang-java=\"`pcid`\"\u003e`pcid`\u003c/span\u003e, `spec-ctrl`, \u003cspan pulumi-lang-nodejs=\"`ibpb`\" pulumi-lang-dotnet=\"`Ibpb`\" pulumi-lang-go=\"`ibpb`\" pulumi-lang-python=\"`ibpb`\" pulumi-lang-yaml=\"`ibpb`\" pulumi-lang-java=\"`ibpb`\"\u003e`ibpb`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ssbd`\" pulumi-lang-dotnet=\"`Ssbd`\" pulumi-lang-go=\"`ssbd`\" pulumi-lang-python=\"`ssbd`\" pulumi-lang-yaml=\"`ssbd`\" pulumi-lang-java=\"`ssbd`\"\u003e`ssbd`\u003c/span\u003e, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, \u003cspan pulumi-lang-nodejs=\"`pdpe1gb`\" pulumi-lang-dotnet=\"`Pdpe1gb`\" pulumi-lang-go=\"`pdpe1gb`\" pulumi-lang-python=\"`pdpe1gb`\" pulumi-lang-yaml=\"`pdpe1gb`\" pulumi-lang-java=\"`pdpe1gb`\"\u003e`pdpe1gb`\u003c/span\u003e, `md-clear`, `hv-tlbflush`, `hv-evmcs`, \u003cspan pulumi-lang-nodejs=\"`aes`\" pulumi-lang-dotnet=\"`Aes`\" pulumi-lang-go=\"`aes`\" pulumi-lang-python=\"`aes`\" pulumi-lang-yaml=\"`aes`\" pulumi-lang-java=\"`aes`\"\u003e`aes`\u003c/span\u003e.\n"},"hotplugged":{"type":"integer","description":"The number of hotplugged vCPUs (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"},"limit":{"type":"integer","description":"Limit of CPU usage (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e which means no limit).\n"},"numa":{"type":"boolean","description":"Enable NUMA (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"sockets":{"type":"integer","description":"The number of CPU sockets (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"type":{"type":"string","description":"Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to \u003cspan pulumi-lang-nodejs=\"`kvm64`\" pulumi-lang-dotnet=\"`Kvm64`\" pulumi-lang-go=\"`kvm64`\" pulumi-lang-python=\"`kvm64`\" pulumi-lang-yaml=\"`kvm64`\" pulumi-lang-java=\"`kvm64`\"\u003e`kvm64`\u003c/span\u003e). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information.\n"},"units":{"type":"integer","description":"CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["affinity","architecture","cores","flags","hotplugged","limit","numa","sockets","type","units"]}}},"proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng":{"properties":{"maxBytes":{"type":"integer","description":"Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous).\n"},"period":{"type":"integer","description":"Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous).\n"},"source":{"type":"string","description":"The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["maxBytes","period","source"]}}},"proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga":{"properties":{"clipboard":{"type":"string","description":"Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e is available. Migration with VNC clipboard is not supported by Proxmox.\n"},"memory":{"type":"integer","description":"The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n"},"type":{"type":"string","description":"The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["clipboard","memory","type"]}}},"proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent":{"properties":{"enabled":{"type":"boolean","description":"Whether to enable the QEMU agent (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"timeout":{"type":"string","description":"The maximum amount of time to wait for data from\nthe QEMU agent to become available ( defaults to \u003cspan pulumi-lang-nodejs=\"`15m`\" pulumi-lang-dotnet=\"`15m`\" pulumi-lang-go=\"`15m`\" pulumi-lang-python=\"`15m`\" pulumi-lang-yaml=\"`15m`\" pulumi-lang-java=\"`15m`\"\u003e`15m`\u003c/span\u003e).\n"},"trim":{"type":"boolean","description":"Whether to enable the FSTRIM feature in the QEMU agent\n(defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The QEMU agent interface type (defaults to \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e).\n"},"waitForIp":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp","description":"Configuration for waiting for specific IP address types when the VM starts.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp":{"properties":{"ipv4":{"type":"boolean","description":"Wait for at least one IPv4 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"ipv6":{"type":"boolean","description":"Wait for at least one IPv6 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nWhen \u003cspan pulumi-lang-nodejs=\"`waitForIp`\" pulumi-lang-dotnet=\"`WaitForIp`\" pulumi-lang-go=\"`waitForIp`\" pulumi-lang-python=\"`wait_for_ip`\" pulumi-lang-yaml=\"`waitForIp`\" pulumi-lang-java=\"`waitForIp`\"\u003e`wait_for_ip`\u003c/span\u003e is not specified or both \u003cspan pulumi-lang-nodejs=\"`ipv4`\" pulumi-lang-dotnet=\"`Ipv4`\" pulumi-lang-go=\"`ipv4`\" pulumi-lang-python=\"`ipv4`\" pulumi-lang-yaml=\"`ipv4`\" pulumi-lang-java=\"`ipv4`\"\u003e`ipv4`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ipv6`\" pulumi-lang-dotnet=\"`Ipv6`\" pulumi-lang-go=\"`ipv6`\" pulumi-lang-python=\"`ipv6`\" pulumi-lang-yaml=\"`ipv6`\" pulumi-lang-java=\"`ipv6`\"\u003e`ipv6`\u003c/span\u003e are \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, the provider waits for any valid global unicast address (IPv4 or IPv6). In dual-stack networks where DHCPv6 responds faster, this may result in only IPv6 addresses being available. Set `ipv4 = true` to ensure IPv4 address availability.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev":{"properties":{"allowSmt":{"type":"boolean","description":"Sets policy bit to allow Simultaneous Multi Threading (SMT)\n(Ignored unless for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"kernelHashes":{"type":"boolean","description":"Add kernel hashes to guest firmware for measured linux kernel launch (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"noDebug":{"type":"boolean","description":"Sets policy bit to disallow debugging of guest (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"noKeySharing":{"type":"boolean","description":"Sets policy bit to disallow key sharing with other guests (Ignored for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nThe \u003cspan pulumi-lang-nodejs=\"`amdSev`\" pulumi-lang-dotnet=\"`AmdSev`\" pulumi-lang-go=\"`amdSev`\" pulumi-lang-python=\"`amd_sev`\" pulumi-lang-yaml=\"`amdSev`\" pulumi-lang-java=\"`amdSev`\"\u003e`amd_sev`\u003c/span\u003e setting is only allowed for a `root@pam` authenticated user.\n"},"type":{"type":"string","description":"Enable standard SEV with \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e or enable experimental SEV-ES with the \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e option or enable experimental SEV-SNP with the \u003cspan pulumi-lang-nodejs=\"`snp`\" pulumi-lang-dotnet=\"`Snp`\" pulumi-lang-go=\"`snp`\" pulumi-lang-python=\"`snp`\" pulumi-lang-yaml=\"`snp`\" pulumi-lang-java=\"`snp`\"\u003e`snp`\u003c/span\u003e option (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice":{"properties":{"device":{"type":"string","description":"The device (defaults to `intel-hda`).\n- `AC97` - Intel 82801AA AC97 Audio.\n- `ich9-intel-hda` - Intel HD Audio Controller (ich9).\n- `intel-hda` - Intel HD Audio.\n"},"driver":{"type":"string","description":"The driver (defaults to \u003cspan pulumi-lang-nodejs=\"`spice`\" pulumi-lang-dotnet=\"`Spice`\" pulumi-lang-go=\"`spice`\" pulumi-lang-python=\"`spice`\" pulumi-lang-yaml=\"`spice`\" pulumi-lang-java=\"`spice`\"\u003e`spice`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether to enable the audio device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom":{"properties":{"enabled":{"type":"boolean","description":"Whether to enable the CD-ROM drive (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). *Deprecated*. The attribute will be removed in the next version of the provider.\nSet \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n","deprecationMessage":"Remove this attribute's configuration as it is no longer used and the attribute will be removed in the next version of the provider. Set \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CDROM drive empty."},"fileId":{"type":"string","description":"A file ID for an ISO file (defaults to \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e as\nin the physical drive). Use \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n"},"interface":{"type":"string","description":"A hardware interface to connect CD-ROM drive to (defaults to \u003cspan pulumi-lang-nodejs=\"`ide3`\" pulumi-lang-dotnet=\"`Ide3`\" pulumi-lang-go=\"`ide3`\" pulumi-lang-python=\"`ide3`\" pulumi-lang-yaml=\"`ide3`\" pulumi-lang-java=\"`ide3`\"\u003e`ide3`\u003c/span\u003e).\n\"Must be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. \" +\n\"Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineClone:VirtualMachineClone":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n","willReplaceOnChanges":true},"full":{"type":"boolean","description":"Full or linked clone (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The name of the source node (leave blank, if\nequal to the \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e argument).\n","willReplaceOnChanges":true},"retries":{"type":"integer","description":"Number of retries in Proxmox for clone vm.\nSometimes Proxmox errors with timeout when creating multiple clones at\nonce.\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The identifier for the source VM.\n","willReplaceOnChanges":true}},"type":"object","required":["vmId"]},"proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu":{"properties":{"affinity":{"type":"string","description":"The CPU cores that are used to run the VM’s vCPU. The\nvalue is a list of CPU IDs, separated by commas. The CPU IDs are zero-based.\nFor example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four\nCPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"architecture":{"type":"string","description":"The CPU architecture (defaults to \u003cspan pulumi-lang-nodejs=\"`x8664`\" pulumi-lang-dotnet=\"`X8664`\" pulumi-lang-go=\"`x8664`\" pulumi-lang-python=\"`x86_64`\" pulumi-lang-yaml=\"`x8664`\" pulumi-lang-java=\"`x8664`\"\u003e`x86_64`\u003c/span\u003e).\n"},"cores":{"type":"integer","description":"The number of CPU cores (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"flags":{"type":"array","items":{"type":"string"},"description":"The CPU flags.\n- `+aes`/`-aes` - Activate AES instruction set for HW acceleration.\n- `+amd-no-ssb`/`-amd-no-ssb` - Notifies guest OS that host is not\nvulnerable for Spectre on AMD CPUs.\n- `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with\nAMD CPUs, best used with \"virt-ssbd\".\n- `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested\nvirtualization (only supported on Intel CPUs).\n- `+hv-tlbflush`/`-hv-tlbflush` - Improve performance in overcommitted\nWindows guests (may lead to guest BSOD on old CPUs).\n- `+ibpb`/`-ibpb` - Allows improved Spectre mitigation on AMD CPUs.\n- `+md-clear`/`-md-clear` - Required to let the guest OS know if MDS is\nmitigated correctly.\n- `+pcid`/`-pcid` - Meltdown fix cost reduction on Westmere, Sandy- and\nIvy Bridge Intel CPUs.\n- `+pdpe1gb`/`-pdpe1gb` - Allows guest OS to use 1 GB size pages, if\nhost HW supports it.\n- `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with\nIntel CPUs.\n- `+ssbd`/`-ssbd` - Protection for \"Speculative Store Bypass\" for Intel\nmodels.\n- `+virt-ssbd`/`-virt-ssbd` - Basis for \"Speculative Store Bypass\"\nprotection for AMD models.\n"},"hotplugged":{"type":"integer","description":"The number of hotplugged vCPUs (defaults\nto \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"},"limit":{"type":"integer","description":"Limit of CPU usage, `0...128`. (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e -- no limit).\n"},"numa":{"type":"boolean","description":"Enable/disable NUMA. (default to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"sockets":{"type":"integer","description":"The number of CPU sockets (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The emulated CPU type, it's recommended to\nuse `x86-64-v2-AES` (defaults to \u003cspan pulumi-lang-nodejs=\"`qemu64`\" pulumi-lang-dotnet=\"`Qemu64`\" pulumi-lang-go=\"`qemu64`\" pulumi-lang-python=\"`qemu64`\" pulumi-lang-yaml=\"`qemu64`\" pulumi-lang-java=\"`qemu64`\"\u003e`qemu64`\u003c/span\u003e).\n"},"units":{"type":"integer","description":"The CPU units. PVE default is \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e for cgroups v1 and \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e for cgroups v2.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["units"]}}},"proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk":{"properties":{"aio":{"type":"string","description":"The disk AIO mode (defaults to \u003cspan pulumi-lang-nodejs=\"`ioUring`\" pulumi-lang-dotnet=\"`IoUring`\" pulumi-lang-go=\"`ioUring`\" pulumi-lang-python=\"`io_uring`\" pulumi-lang-yaml=\"`ioUring`\" pulumi-lang-java=\"`ioUring`\"\u003e`io_uring`\u003c/span\u003e).\n"},"backup":{"type":"boolean","description":"Whether the drive should be included when making backups (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"cache":{"type":"string","description":"The cache type (defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n"},"datastoreId":{"type":"string","description":"The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n"},"discard":{"type":"string","description":"Whether to pass discard/trim requests to the\nunderlying storage. Supported values are \u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e/\u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e).\n"},"fileFormat":{"type":"string","description":"The file format.\n"},"fileId":{"type":"string","description":"The file ID for a disk image when importing a disk into VM. The ID format is\n`\u003cdatastore_id\u003e:\u003ccontent_type\u003e/\u003cfile_name\u003e`, for example `local:iso/centos8.img`. Can be also taken from\n\u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource. *Deprecated*, use \u003cspan pulumi-lang-nodejs=\"`importFrom`\" pulumi-lang-dotnet=\"`ImportFrom`\" pulumi-lang-go=\"`importFrom`\" pulumi-lang-python=\"`import_from`\" pulumi-lang-yaml=\"`importFrom`\" pulumi-lang-java=\"`importFrom`\"\u003e`import_from`\u003c/span\u003e instead.\n","willReplaceOnChanges":true},"importFrom":{"type":"string","description":"The file ID for a disk image to import into VM. The image must be of \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e content type.\nThe ID format is `\u003cdatastore_id\u003e:import/\u003cfile_name\u003e`, for example `local:import/centos8.qcow2`. Can be also taken from\na disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks.\n"},"interface":{"type":"string","description":"The disk interface for Proxmox, currently \u003cspan pulumi-lang-nodejs=\"`scsi`\" pulumi-lang-dotnet=\"`Scsi`\" pulumi-lang-go=\"`scsi`\" pulumi-lang-python=\"`scsi`\" pulumi-lang-yaml=\"`scsi`\" pulumi-lang-java=\"`scsi`\"\u003e`scsi`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`sata`\" pulumi-lang-dotnet=\"`Sata`\" pulumi-lang-go=\"`sata`\" pulumi-lang-python=\"`sata`\" pulumi-lang-yaml=\"`sata`\" pulumi-lang-java=\"`sata`\"\u003e`sata`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e interfaces are supported. Append the disk index at\nthe end, for example, \u003cspan pulumi-lang-nodejs=\"`virtio0`\" pulumi-lang-dotnet=\"`Virtio0`\" pulumi-lang-go=\"`virtio0`\" pulumi-lang-python=\"`virtio0`\" pulumi-lang-yaml=\"`virtio0`\" pulumi-lang-java=\"`virtio0`\"\u003e`virtio0`\u003c/span\u003e for the first virtio disk, \u003cspan pulumi-lang-nodejs=\"`virtio1`\" pulumi-lang-dotnet=\"`Virtio1`\" pulumi-lang-go=\"`virtio1`\" pulumi-lang-python=\"`virtio1`\" pulumi-lang-yaml=\"`virtio1`\" pulumi-lang-java=\"`virtio1`\"\u003e`virtio1`\u003c/span\u003e for\nthe second, etc.\n"},"iothread":{"type":"boolean","description":"Whether to use iothreads for this disk (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"pathInDatastore":{"type":"string","description":"The in-datastore path to the disk image.\n***Experimental.***Use to attach another VM's disks,\nor (as root only) host's filesystem paths (\u003cspan pulumi-lang-nodejs=\"`datastoreId`\" pulumi-lang-dotnet=\"`DatastoreId`\" pulumi-lang-go=\"`datastoreId`\" pulumi-lang-python=\"`datastore_id`\" pulumi-lang-yaml=\"`datastoreId`\" pulumi-lang-java=\"`datastoreId`\"\u003e`datastore_id`\u003c/span\u003e empty string).\nSee \"*Example: Attached disks*\".\n"},"replicate":{"type":"boolean","description":"Whether the drive should be considered for replication jobs (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"serial":{"type":"string","description":"The serial number of the disk, up to 20 bytes long.\n"},"size":{"type":"integer","description":"The disk size in gigabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`8`\" pulumi-lang-dotnet=\"`8`\" pulumi-lang-go=\"`8`\" pulumi-lang-python=\"`8`\" pulumi-lang-yaml=\"`8`\" pulumi-lang-java=\"`8`\"\u003e`8`\u003c/span\u003e).\n"},"speed":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDiskSpeed:VirtualMachineDiskSpeed","description":"The speed limits.\n"},"ssd":{"type":"boolean","description":"Whether to use an SSD emulation option for this disk (\ndefaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). Note that SSD emulation is not supported on VirtIO\nBlock drives.\n"}},"type":"object","required":["interface"],"language":{"nodejs":{"requiredOutputs":["fileFormat","interface","pathInDatastore"]}}},"proxmoxve:VM/VirtualMachineDiskSpeed:VirtualMachineDiskSpeed":{"properties":{"iopsRead":{"type":"integer","description":"The maximum read I/O in operations per second.\n"},"iopsReadBurstable":{"type":"integer","description":"The maximum unthrottled read I/O pool in operations per second.\n"},"iopsWrite":{"type":"integer","description":"The maximum write I/O in operations per second.\n"},"iopsWriteBurstable":{"type":"integer","description":"The maximum unthrottled write I/O pool in operations per second.\n"},"read":{"type":"integer","description":"The maximum read speed in megabytes per second.\n"},"readBurstable":{"type":"integer","description":"The maximum burstable read speed in\nmegabytes per second.\n"},"write":{"type":"integer","description":"The maximum write speed in megabytes per second.\n"},"writeBurstable":{"type":"integer","description":"The maximum burstable write speed in\nmegabytes per second.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n"},"fileFormat":{"type":"string","description":"The file format (defaults to \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\"\u003e`raw`\u003c/span\u003e).\n"},"preEnrolledKeys":{"type":"boolean","description":"Use am EFI vars template with\ndistribution-specific and Microsoft Standard keys enrolled, if used with\nEFI type=\u003cspan pulumi-lang-nodejs=\"`4m`\" pulumi-lang-dotnet=\"`4m`\" pulumi-lang-go=\"`4m`\" pulumi-lang-python=\"`4m`\" pulumi-lang-yaml=\"`4m`\" pulumi-lang-java=\"`4m`\"\u003e`4m`\u003c/span\u003e. Ignored for VMs with cpu.architecture=\u003cspan pulumi-lang-nodejs=\"`aarch64`\" pulumi-lang-dotnet=\"`Aarch64`\" pulumi-lang-go=\"`aarch64`\" pulumi-lang-python=\"`aarch64`\" pulumi-lang-yaml=\"`aarch64`\" pulumi-lang-java=\"`aarch64`\"\u003e`aarch64`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"type":{"type":"string","description":"Size and type of the OVMF EFI disk. \u003cspan pulumi-lang-nodejs=\"`4m`\" pulumi-lang-dotnet=\"`4m`\" pulumi-lang-go=\"`4m`\" pulumi-lang-python=\"`4m`\" pulumi-lang-yaml=\"`4m`\" pulumi-lang-java=\"`4m`\"\u003e`4m`\u003c/span\u003e is newer and\nrecommended, and required for Secure Boot. For backwards compatibility\nuse \u003cspan pulumi-lang-nodejs=\"`2m`\" pulumi-lang-dotnet=\"`2m`\" pulumi-lang-go=\"`2m`\" pulumi-lang-python=\"`2m`\" pulumi-lang-yaml=\"`2m`\" pulumi-lang-java=\"`2m`\"\u003e`2m`\u003c/span\u003e. Ignored for VMs with cpu.architecture=\u003cspan pulumi-lang-nodejs=\"`aarch64`\" pulumi-lang-dotnet=\"`Aarch64`\" pulumi-lang-go=\"`aarch64`\" pulumi-lang-python=\"`aarch64`\" pulumi-lang-yaml=\"`aarch64`\" pulumi-lang-java=\"`aarch64`\"\u003e`aarch64`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`2m`\" pulumi-lang-dotnet=\"`2m`\" pulumi-lang-go=\"`2m`\" pulumi-lang-python=\"`2m`\" pulumi-lang-yaml=\"`2m`\" pulumi-lang-java=\"`2m`\"\u003e`2m`\u003c/span\u003e).\n","willReplaceOnChanges":true}},"type":"object","language":{"nodejs":{"requiredOutputs":["fileFormat"]}}},"proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci":{"properties":{"device":{"type":"string","description":"The PCI device name for Proxmox, in form\nof `hostpciX` where `X` is a sequential number from 0 to 15.\n"},"id":{"type":"string","description":"The PCI device ID. This parameter is not compatible\nwith \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e and requires the root \u003cspan pulumi-lang-nodejs=\"`username`\" pulumi-lang-dotnet=\"`Username`\" pulumi-lang-go=\"`username`\" pulumi-lang-python=\"`username`\" pulumi-lang-yaml=\"`username`\" pulumi-lang-java=\"`username`\"\u003e`username`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e\nconfigured in the proxmox provider. Use either this or \u003cspan pulumi-lang-nodejs=\"`mapping`\" pulumi-lang-dotnet=\"`Mapping`\" pulumi-lang-go=\"`mapping`\" pulumi-lang-python=\"`mapping`\" pulumi-lang-yaml=\"`mapping`\" pulumi-lang-java=\"`mapping`\"\u003e`mapping`\u003c/span\u003e.\n"},"mapping":{"type":"string","description":"The resource mapping name of the device, for\nexample gpu. Use either this or \u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e.\n"},"mdev":{"type":"string","description":"The mediated device ID to use.\n"},"pcie":{"type":"boolean","description":"Tells Proxmox to use a PCIe or PCI port. Some\nguests/device combination require PCIe rather than PCI. PCIe is only\navailable for q35 machine types.\n"},"romFile":{"type":"string","description":"A path to a ROM file for the device to use. This\nis a relative path under `/usr/share/kvm/`.\n"},"rombar":{"type":"boolean","description":"Makes the firmware ROM visible for the VM (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"xvga":{"type":"boolean","description":"Marks the PCI(e) device as the primary GPU of the VM.\nWith this enabled the \u003cspan pulumi-lang-nodejs=\"`vga`\" pulumi-lang-dotnet=\"`Vga`\" pulumi-lang-go=\"`vga`\" pulumi-lang-python=\"`vga`\" pulumi-lang-yaml=\"`vga`\" pulumi-lang-java=\"`vga`\"\u003e`vga`\u003c/span\u003e configuration argument will be ignored.\n"}},"type":"object","required":["device"]},"proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the datastore to create the\ncloud-init disk in (defaults to `local-lvm`).\n"},"dns":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationDns:VirtualMachineInitializationDns","description":"The DNS configuration.\n"},"fileFormat":{"type":"string","description":"The file format.\n"},"interface":{"type":"string","description":"The hardware interface to connect the cloud-init\nimage to. Must be one of `ide0..3`, `sata0..5`, `scsi0..30`. Will be\ndetected if the setting is missing but a cloud-init image is present,\notherwise defaults to \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e.\n"},"ipConfigs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationIpConfig:VirtualMachineInitializationIpConfig"},"description":"The IP configuration (one block per network\ndevice).\n"},"metaDataFileId":{"type":"string","description":"The identifier for a file containing\nall meta data passed to the VM via cloud-init.\n","willReplaceOnChanges":true},"networkDataFileId":{"type":"string","description":"The identifier for a file containing\nnetwork configuration data passed to the VM via cloud-init (conflicts\nwith \u003cspan pulumi-lang-nodejs=\"`ipConfig`\" pulumi-lang-dotnet=\"`IpConfig`\" pulumi-lang-go=\"`ipConfig`\" pulumi-lang-python=\"`ip_config`\" pulumi-lang-yaml=\"`ipConfig`\" pulumi-lang-java=\"`ipConfig`\"\u003e`ip_config`\u003c/span\u003e).\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The cloud-init configuration format\n","willReplaceOnChanges":true},"userAccount":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationUserAccount:VirtualMachineInitializationUserAccount","description":"The user account configuration (conflicts\nwith \u003cspan pulumi-lang-nodejs=\"`userDataFileId`\" pulumi-lang-dotnet=\"`UserDataFileId`\" pulumi-lang-go=\"`userDataFileId`\" pulumi-lang-python=\"`user_data_file_id`\" pulumi-lang-yaml=\"`userDataFileId`\" pulumi-lang-java=\"`userDataFileId`\"\u003e`user_data_file_id`\u003c/span\u003e).\n"},"userDataFileId":{"type":"string","description":"The identifier for a file containing\ncustom user data (conflicts with \u003cspan pulumi-lang-nodejs=\"`userAccount`\" pulumi-lang-dotnet=\"`UserAccount`\" pulumi-lang-go=\"`userAccount`\" pulumi-lang-python=\"`user_account`\" pulumi-lang-yaml=\"`userAccount`\" pulumi-lang-java=\"`userAccount`\"\u003e`user_account`\u003c/span\u003e).\n","willReplaceOnChanges":true},"vendorDataFileId":{"type":"string","description":"The identifier for a file containing\nall vendor data passed to the VM via cloud-init.\n","willReplaceOnChanges":true}},"type":"object","language":{"nodejs":{"requiredOutputs":["fileFormat","metaDataFileId","networkDataFileId","type","userDataFileId","vendorDataFileId"]}}},"proxmoxve:VM/VirtualMachineInitializationDns:VirtualMachineInitializationDns":{"properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"servers":{"type":"array","items":{"type":"string"},"description":"The list of DNS servers.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationIpConfig:VirtualMachineInitializationIpConfig":{"properties":{"ipv4":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationIpConfigIpv4:VirtualMachineInitializationIpConfigIpv4","description":"The IPv4 configuration.\n"},"ipv6":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationIpConfigIpv6:VirtualMachineInitializationIpConfigIpv6","description":"The IPv6 configuration.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationIpConfigIpv4:VirtualMachineInitializationIpConfigIpv4":{"properties":{"address":{"type":"string","description":"The IPv4 address in CIDR notation\n(e.g. 192.168.2.2/24). Alternatively, set this to \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for\nautodiscovery.\n"},"gateway":{"type":"string","description":"The IPv4 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e is used as the address).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationIpConfigIpv6:VirtualMachineInitializationIpConfigIpv6":{"properties":{"address":{"type":"string","description":"The IPv6 address in CIDR notation\n(e.g. fd1c::7334/64). Alternatively, set this\nto \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for DHCPv6, or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e for SLAAC.\n"},"gateway":{"type":"string","description":"The IPv6 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e are used as the address).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationUserAccount:VirtualMachineInitializationUserAccount":{"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The SSH keys.\n"},"password":{"type":"string","description":"The SSH password.\n","secret":true},"username":{"type":"string","description":"The SSH username.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory":{"properties":{"dedicated":{"type":"integer","description":"The dedicated memory in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e).\n"},"floating":{"type":"integer","description":"The floating memory in megabytes. The default is \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e, which disables \"ballooning device\" for the VM.\nPlease note that Proxmox has ballooning enabled by default. To enable it, set \u003cspan pulumi-lang-nodejs=\"`floating`\" pulumi-lang-dotnet=\"`Floating`\" pulumi-lang-go=\"`floating`\" pulumi-lang-python=\"`floating`\" pulumi-lang-yaml=\"`floating`\" pulumi-lang-java=\"`floating`\"\u003e`floating`\u003c/span\u003e to the same value as \u003cspan pulumi-lang-nodejs=\"`dedicated`\" pulumi-lang-dotnet=\"`Dedicated`\" pulumi-lang-go=\"`dedicated`\" pulumi-lang-python=\"`dedicated`\" pulumi-lang-yaml=\"`dedicated`\" pulumi-lang-java=\"`dedicated`\"\u003e`dedicated`\u003c/span\u003e.\nSee [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_memory) section 10.2.6 for more information.\n"},"hugepages":{"type":"string","description":"Enable/disable hugepages memory (defaults to disable).\n"},"keepHugepages":{"type":"boolean","description":"Keep hugepages memory after the VM is stopped (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nSettings \u003cspan pulumi-lang-nodejs=\"`hugepages`\" pulumi-lang-dotnet=\"`Hugepages`\" pulumi-lang-go=\"`hugepages`\" pulumi-lang-python=\"`hugepages`\" pulumi-lang-yaml=\"`hugepages`\" pulumi-lang-java=\"`hugepages`\"\u003e`hugepages`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`keepHugepages`\" pulumi-lang-dotnet=\"`KeepHugepages`\" pulumi-lang-go=\"`keepHugepages`\" pulumi-lang-python=\"`keep_hugepages`\" pulumi-lang-yaml=\"`keepHugepages`\" pulumi-lang-java=\"`keepHugepages`\"\u003e`keep_hugepages`\u003c/span\u003e are only allowed for `root@pam` authenticated user.\nAnd required `cpu.numa` to be enabled.\n"},"shared":{"type":"integer","description":"The shared memory in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice":{"properties":{"bridge":{"type":"string","description":"The name of the network bridge (defaults to \u003cspan pulumi-lang-nodejs=\"`vmbr0`\" pulumi-lang-dotnet=\"`Vmbr0`\" pulumi-lang-go=\"`vmbr0`\" pulumi-lang-python=\"`vmbr0`\" pulumi-lang-yaml=\"`vmbr0`\" pulumi-lang-java=\"`vmbr0`\"\u003e`vmbr0`\u003c/span\u003e).\n"},"disconnected":{"type":"boolean","description":"Whether to disconnect the network device from the network (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether to enable the network device (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"firewall":{"type":"boolean","description":"Whether this interface's firewall rules should be used (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"macAddress":{"type":"string","description":"The MAC address.\n"},"model":{"type":"string","description":"The network device model (defaults to \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e).\n"},"mtu":{"type":"integer","description":"Force MTU, for VirtIO only. Set to 1 to use the bridge MTU. Cannot be larger than the bridge MTU.\n"},"queues":{"type":"integer","description":"The number of queues for VirtIO (1..64).\n"},"rateLimit":{"type":"number","description":"The rate limit in megabytes per second.\n"},"trunks":{"type":"string","description":"String containing a `;` separated list of VLAN trunks\n(\"10;20;30\"). Note that the VLAN-aware feature need to be enabled on the PVE\nLinux Bridge to use trunks.\n"},"vlanId":{"type":"integer","description":"The VLAN identifier.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["macAddress"]}}},"proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma":{"properties":{"cpus":{"type":"string","description":"The CPU cores to assign to the NUMA node (format is `0-7;16-31`).\n"},"device":{"type":"string","description":"The NUMA device name for Proxmox, in form\nof `numaX` where `X` is a sequential number from 0 to 7.\n"},"hostnodes":{"type":"string","description":"The NUMA host nodes.\n"},"memory":{"type":"integer","description":"The memory in megabytes to assign to the NUMA node.\n"},"policy":{"type":"string","description":"The NUMA policy (defaults to \u003cspan pulumi-lang-nodejs=\"`preferred`\" pulumi-lang-dotnet=\"`Preferred`\" pulumi-lang-go=\"`preferred`\" pulumi-lang-python=\"`preferred`\" pulumi-lang-yaml=\"`preferred`\" pulumi-lang-java=\"`preferred`\"\u003e`preferred`\u003c/span\u003e).\n"}},"type":"object","required":["cpus","device","memory"]},"proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem":{"properties":{"type":{"type":"string","description":"The type (defaults to \u003cspan pulumi-lang-nodejs=\"`other`\" pulumi-lang-dotnet=\"`Other`\" pulumi-lang-go=\"`other`\" pulumi-lang-python=\"`other`\" pulumi-lang-yaml=\"`other`\" pulumi-lang-java=\"`other`\"\u003e`other`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineRng:VirtualMachineRng":{"properties":{"maxBytes":{"type":"integer","description":"Maximum bytes of entropy allowed to get injected into the guest every \u003cspan pulumi-lang-nodejs=\"`period`\" pulumi-lang-dotnet=\"`Period`\" pulumi-lang-go=\"`period`\" pulumi-lang-python=\"`period`\" pulumi-lang-yaml=\"`period`\" pulumi-lang-java=\"`period`\"\u003e`period`\u003c/span\u003e milliseconds (defaults to \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e). Prefer a lower value when using `/dev/random` as source.\n"},"period":{"type":"integer","description":"Every \u003cspan pulumi-lang-nodejs=\"`period`\" pulumi-lang-dotnet=\"`Period`\" pulumi-lang-go=\"`period`\" pulumi-lang-python=\"`period`\" pulumi-lang-yaml=\"`period`\" pulumi-lang-java=\"`period`\"\u003e`period`\u003c/span\u003e milliseconds the entropy-injection quota is reset, allowing the guest to retrieve another \u003cspan pulumi-lang-nodejs=\"`maxBytes`\" pulumi-lang-dotnet=\"`MaxBytes`\" pulumi-lang-go=\"`maxBytes`\" pulumi-lang-python=\"`max_bytes`\" pulumi-lang-yaml=\"`maxBytes`\" pulumi-lang-java=\"`maxBytes`\"\u003e`max_bytes`\u003c/span\u003e of entropy (defaults to \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e).\n"},"source":{"type":"string","description":"The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n"}},"type":"object","required":["source"],"language":{"nodejs":{"requiredOutputs":["maxBytes","period","source"]}}},"proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice":{"properties":{"device":{"type":"string","description":"The device (defaults to \u003cspan pulumi-lang-nodejs=\"`socket`\" pulumi-lang-dotnet=\"`Socket`\" pulumi-lang-go=\"`socket`\" pulumi-lang-python=\"`socket`\" pulumi-lang-yaml=\"`socket`\" pulumi-lang-java=\"`socket`\"\u003e`socket`\u003c/span\u003e).\n- `/dev/*` - A host serial device.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios":{"properties":{"family":{"type":"string","description":"The family string.\n"},"manufacturer":{"type":"string","description":"The manufacturer.\n"},"product":{"type":"string","description":"The product ID.\n"},"serial":{"type":"string","description":"The serial number.\n"},"sku":{"type":"string","description":"The SKU number.\n"},"uuid":{"type":"string","description":"The UUID (defaults to randomly generated UUID).\n"},"version":{"type":"string","description":"The version.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["uuid"]}}},"proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup":{"properties":{"downDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next VM is shut down.\n"},"order":{"type":"integer","description":"A non-negative number defining the general startup\norder.\n"},"upDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next VM is started.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n"},"version":{"type":"string","description":"TPM state device version. Can be `v1.2` or `v2.0`.\n(defaults to `v2.0`).\n","willReplaceOnChanges":true}},"type":"object"},"proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb":{"properties":{"host":{"type":"string","description":"The Host USB device or port or the value \u003cspan pulumi-lang-nodejs=\"`spice`\" pulumi-lang-dotnet=\"`Spice`\" pulumi-lang-go=\"`spice`\" pulumi-lang-python=\"`spice`\" pulumi-lang-yaml=\"`spice`\" pulumi-lang-java=\"`spice`\"\u003e`spice`\u003c/span\u003e. Use either this or \u003cspan pulumi-lang-nodejs=\"`mapping`\" pulumi-lang-dotnet=\"`Mapping`\" pulumi-lang-go=\"`mapping`\" pulumi-lang-python=\"`mapping`\" pulumi-lang-yaml=\"`mapping`\" pulumi-lang-java=\"`mapping`\"\u003e`mapping`\u003c/span\u003e.\n"},"mapping":{"type":"string","description":"The cluster-wide resource mapping name of the device, for example \"usbdevice\". Use either this or \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\"\u003e`host`\u003c/span\u003e.\n"},"usb3":{"type":"boolean","description":"Makes the USB device a USB3 device for the VM\n(defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineVga:VirtualMachineVga":{"properties":{"clipboard":{"type":"string","description":"Enable VNC clipboard by setting to \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information.\n"},"memory":{"type":"integer","description":"The VGA memory in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`16`\" pulumi-lang-dotnet=\"`16`\" pulumi-lang-go=\"`16`\" pulumi-lang-python=\"`16`\" pulumi-lang-yaml=\"`16`\" pulumi-lang-java=\"`16`\"\u003e`16`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof":{"properties":{"cache":{"type":"string","description":"The caching mode\n"},"directIo":{"type":"boolean","description":"Whether to allow direct io\n"},"exposeAcl":{"type":"boolean","description":"Enable POSIX ACLs, implies xattr support\n"},"exposeXattr":{"type":"boolean","description":"Enable support for extended attributes\n"},"mapping":{"type":"string","description":"Identifier of the directory mapping\n"}},"type":"object","required":["mapping"]},"proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog":{"properties":{"action":{"type":"string","description":"The action to perform if after activation the guest fails to poll the watchdog in time (defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether the watchdog is enabled (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"model":{"type":"string","description":"The watchdog type to emulate (defaults to \u003cspan pulumi-lang-nodejs=\"`i6300esb`\" pulumi-lang-dotnet=\"`I6300esb`\" pulumi-lang-go=\"`i6300esb`\" pulumi-lang-python=\"`i6300esb`\" pulumi-lang-yaml=\"`i6300esb`\" pulumi-lang-java=\"`i6300esb`\"\u003e`i6300esb`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/getVirtualMachinesFilter:getVirtualMachinesFilter":{"properties":{"name":{"type":"string","description":"Name of the VM attribute to filter on. One of [\u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`template`\" pulumi-lang-dotnet=\"`Template`\" pulumi-lang-go=\"`template`\" pulumi-lang-python=\"`template`\" pulumi-lang-yaml=\"`template`\" pulumi-lang-java=\"`template`\"\u003e`template`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`status`\" pulumi-lang-dotnet=\"`Status`\" pulumi-lang-go=\"`status`\" pulumi-lang-python=\"`status`\" pulumi-lang-yaml=\"`status`\" pulumi-lang-java=\"`status`\"\u003e`status`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e]\n"},"regex":{"type":"boolean","description":"Treat values as regex patterns\n"},"values":{"type":"array","items":{"type":"string"},"description":"List of values to pass the filter. VM's attribute should match at least one value in the list.\n"}},"type":"object","required":["name","values"]},"proxmoxve:VM/getVirtualMachinesVm:getVirtualMachinesVm":{"properties":{"name":{"type":"string","description":"The virtual machine name.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"status":{"type":"string","description":"The status of the VM.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the VMs. The VM must have all\nthe tags to be included in the result.\n"},"template":{"type":"boolean","description":"Whether the VM is a template.\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"}},"type":"object","required":["name","nodeName","tags","vmId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:config/ssh:ssh":{"properties":{"agent":{"type":"boolean","description":"Whether to use the SSH agent for authentication. Takes precedence over the \u003cspan pulumi-lang-nodejs=\"`privateKey`\" pulumi-lang-dotnet=\"`PrivateKey`\" pulumi-lang-go=\"`privateKey`\" pulumi-lang-python=\"`private_key`\" pulumi-lang-yaml=\"`privateKey`\" pulumi-lang-java=\"`privateKey`\"\u003e`private_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e fields. Defaults to the value of the `PROXMOX_VE_SSH_AGENT` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentForwarding":{"type":"boolean","description":"Whether to enable SSH agent forwarding. Defaults to the value of the `PROXMOX_VE_SSH_AGENT_FORWARDING` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentSocket":{"type":"string","description":"The path to the SSH agent socket. Defaults to the value of the `SSH_AUTH_SOCK` environment variable.\n"},"nodes":{"type":"array","items":{"$ref":"#/types/proxmoxve:config/sshNode:sshNode"},"description":"Overrides for SSH connection configuration for a Proxmox VE node.\n"},"password":{"type":"string","description":"The password used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n","secret":true},"privateKey":{"type":"string","description":"The unencrypted private key (in PEM format) used for the SSH connection. Defaults to the value of the `PROXMOX_VE_SSH_PRIVATE_KEY` environment variable.\n","secret":true},"socks5Password":{"type":"string","description":"The password for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_PASSWORD` environment variable.\n","secret":true},"socks5Server":{"type":"string","description":"The address:port of the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_SERVER` environment variable.\n"},"socks5Username":{"type":"string","description":"The username for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_USERNAME` environment variable.\n"},"username":{"type":"string","description":"The username used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`username`\" pulumi-lang-dotnet=\"`Username`\" pulumi-lang-go=\"`username`\" pulumi-lang-python=\"`username`\" pulumi-lang-yaml=\"`username`\" pulumi-lang-java=\"`username`\"\u003e`username`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n"}},"type":"object"},"proxmoxve:config/sshNode:sshNode":{"properties":{"address":{"type":"string","description":"The address of the Proxmox VE node.\n"},"name":{"type":"string","description":"The name of the Proxmox VE node.\n"},"port":{"type":"integer","description":"The port of the Proxmox VE node.\n"}},"type":"object","required":["address","name"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/HostsEntry:HostsEntry":{"properties":{"address":{"type":"string","description":"The IP address.\n"},"hostnames":{"type":"array","items":{"type":"string"},"description":"The hostnames.\n"}},"type":"object","required":["address","hostnames"]},"proxmoxve:index/ProviderSsh:ProviderSsh":{"properties":{"agent":{"type":"boolean","description":"Whether to use the SSH agent for authentication. Takes precedence over the \u003cspan pulumi-lang-nodejs=\"`privateKey`\" pulumi-lang-dotnet=\"`PrivateKey`\" pulumi-lang-go=\"`privateKey`\" pulumi-lang-python=\"`private_key`\" pulumi-lang-yaml=\"`privateKey`\" pulumi-lang-java=\"`privateKey`\"\u003e`private_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e fields. Defaults to the value of the `PROXMOX_VE_SSH_AGENT` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentForwarding":{"type":"boolean","description":"Whether to enable SSH agent forwarding. Defaults to the value of the `PROXMOX_VE_SSH_AGENT_FORWARDING` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentSocket":{"type":"string","description":"The path to the SSH agent socket. Defaults to the value of the `SSH_AUTH_SOCK` environment variable.\n"},"nodes":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/ProviderSshNode:ProviderSshNode"},"description":"Overrides for SSH connection configuration for a Proxmox VE node.\n"},"password":{"type":"string","description":"The password used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n","secret":true},"privateKey":{"type":"string","description":"The unencrypted private key (in PEM format) used for the SSH connection. Defaults to the value of the `PROXMOX_VE_SSH_PRIVATE_KEY` environment variable.\n","secret":true},"socks5Password":{"type":"string","description":"The password for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_PASSWORD` environment variable.\n","secret":true},"socks5Server":{"type":"string","description":"The address:port of the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_SERVER` environment variable.\n"},"socks5Username":{"type":"string","description":"The username for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_USERNAME` environment variable.\n"},"username":{"type":"string","description":"The username used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`username`\" pulumi-lang-dotnet=\"`Username`\" pulumi-lang-go=\"`username`\" pulumi-lang-python=\"`username`\" pulumi-lang-yaml=\"`username`\" pulumi-lang-java=\"`username`\"\u003e`username`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n"}},"type":"object"},"proxmoxve:index/ProviderSshNode:ProviderSshNode":{"properties":{"address":{"type":"string","description":"The address of the Proxmox VE node.\n"},"name":{"type":"string","description":"The name of the Proxmox VE node.\n"},"port":{"type":"integer","description":"The port of the Proxmox VE node.\n"}},"type":"object","required":["address","name"],"language":{"nodejs":{"requiredOutputs":[]}}},"proxmoxve:index/getContainersContainer:getContainersContainer":{"properties":{"name":{"type":"string","description":"The container name.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"status":{"type":"string","description":"The status of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the containers. The container must have all\nthe tags to be included in the result.\n"},"template":{"type":"boolean","description":"Whether the container is a template.\n"},"vmId":{"type":"integer","description":"The container identifier.\n"}},"type":"object","required":["name","nodeName","tags","vmId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/getContainersFilter:getContainersFilter":{"properties":{"name":{"type":"string","description":"Name of the container attribute to filter on. One of [\u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`template`\" pulumi-lang-dotnet=\"`Template`\" pulumi-lang-go=\"`template`\" pulumi-lang-python=\"`template`\" pulumi-lang-yaml=\"`template`\" pulumi-lang-java=\"`template`\"\u003e`template`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`status`\" pulumi-lang-dotnet=\"`Status`\" pulumi-lang-go=\"`status`\" pulumi-lang-python=\"`status`\" pulumi-lang-yaml=\"`status`\" pulumi-lang-java=\"`status`\"\u003e`status`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e]\n"},"regex":{"type":"boolean","description":"Treat values as regex patterns\n"},"values":{"type":"array","items":{"type":"string"},"description":"List of values to pass the filter. Container's attribute should match at least one value in the list.\n"}},"type":"object","required":["name","values"]},"proxmoxve:index/getVm2Clone:getVm2Clone":{"properties":{"id":{"type":"integer","description":"The ID of the VM to clone.\n"},"retries":{"type":"integer","description":"The number of retries to perform when cloning the VM (default: 3).\n"}},"type":"object","required":["id","retries"],"language":{"nodejs":{"requiredInputs":["id"]}}},"proxmoxve:index/getVm2Cpu:getVm2Cpu":{"properties":{"affinity":{"type":"string","description":"List of host cores used to execute guest processes, for example: '0,5,8-11'\n"},"architecture":{"type":"string","description":"The CPU architecture.\n"},"cores":{"type":"integer","description":"The number of CPU cores per socket.\n"},"flags":{"type":"array","items":{"type":"string"},"description":"Set of additional CPU flags.\n"},"hotplugged":{"type":"integer","description":"The number of hotplugged vCPUs.\n"},"limit":{"type":"integer","description":"Limit of CPU usage.\n"},"numa":{"type":"boolean","description":"Enable NUMA.\n"},"sockets":{"type":"integer","description":"The number of CPU sockets.\n"},"type":{"type":"string","description":"Emulated CPU type.\n"},"units":{"type":"integer","description":"CPU weight for a VM\n"}},"type":"object","required":["affinity","architecture","cores","flags","hotplugged","limit","numa","sockets","type","units"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/getVm2Rng:getVm2Rng":{"properties":{"maxBytes":{"type":"integer","description":"Maximum bytes of entropy allowed to get injected into the guest every period.\n"},"period":{"type":"integer","description":"Period in milliseconds to limit entropy injection to the guest.\n"},"source":{"type":"string","description":"The entropy source for the RNG device.\n"}},"type":"object","required":["maxBytes","period","source"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/getVm2Timeouts:getVm2Timeouts":{"properties":{"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"}},"type":"object"},"proxmoxve:index/getVm2Vga:getVm2Vga":{"properties":{"clipboard":{"type":"string","description":"Enable a specific clipboard.\n"},"memory":{"type":"integer","description":"The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n"},"type":{"type":"string","description":"The VGA type.\n"}},"type":"object","required":["clipboard","memory","type"],"language":{"nodejs":{"requiredInputs":[]}}}},"provider":{"description":"The provider type for the proxmox package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"apiToken":{"type":"string","description":"The API token for the Proxmox VE API.","secret":true},"authTicket":{"type":"string","description":"The pre-authenticated Ticket for the Proxmox VE API.","secret":true},"csrfPreventionToken":{"type":"string","description":"The pre-authenticated CSRF Prevention Token for the Proxmox VE API.","secret":true},"endpoint":{"type":"string","description":"The endpoint for the Proxmox VE API."},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step."},"minTls":{"type":"string","description":"The minimum required TLS version for API calls.Supported values: `1.0|1.1|1.2|1.3`. Defaults to `1.3`."},"otp":{"type":"string","description":"The one-time password for the Proxmox VE API.","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`otp`\" pulumi-lang-dotnet=\"`Otp`\" pulumi-lang-go=\"`otp`\" pulumi-lang-python=\"`otp`\" pulumi-lang-yaml=\"`otp`\" pulumi-lang-java=\"`otp`\"\u003e`otp`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e attribute instead."},"password":{"type":"string","description":"The password for the Proxmox VE API.","secret":true},"randomVmIdEnd":{"type":"integer","description":"The ending number for random VM / Container IDs."},"randomVmIdStart":{"type":"integer","description":"The starting number for random VM / Container IDs."},"randomVmIds":{"type":"boolean","description":"Whether to generate random VM / Container IDs."},"ssh":{"$ref":"#/types/proxmoxve:index/ProviderSsh:ProviderSsh","description":"The SSH configuration for the Proxmox nodes."},"tmpDir":{"type":"string","description":"The alternative temporary directory."},"username":{"type":"string","description":"The username for the Proxmox VE API."}},"inputProperties":{"apiToken":{"type":"string","description":"The API token for the Proxmox VE API.","secret":true},"authTicket":{"type":"string","description":"The pre-authenticated Ticket for the Proxmox VE API.","secret":true},"csrfPreventionToken":{"type":"string","description":"The pre-authenticated CSRF Prevention Token for the Proxmox VE API.","secret":true},"endpoint":{"type":"string","description":"The endpoint for the Proxmox VE API."},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step."},"minTls":{"type":"string","description":"The minimum required TLS version for API calls.Supported values: `1.0|1.1|1.2|1.3`. Defaults to `1.3`."},"otp":{"type":"string","description":"The one-time password for the Proxmox VE API.","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`otp`\" pulumi-lang-dotnet=\"`Otp`\" pulumi-lang-go=\"`otp`\" pulumi-lang-python=\"`otp`\" pulumi-lang-yaml=\"`otp`\" pulumi-lang-java=\"`otp`\"\u003e`otp`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e attribute instead."},"password":{"type":"string","description":"The password for the Proxmox VE API.","secret":true},"randomVmIdEnd":{"type":"integer","description":"The ending number for random VM / Container IDs."},"randomVmIdStart":{"type":"integer","description":"The starting number for random VM / Container IDs."},"randomVmIds":{"type":"boolean","description":"Whether to generate random VM / Container IDs."},"ssh":{"$ref":"#/types/proxmoxve:index/ProviderSsh:ProviderSsh","description":"The SSH configuration for the Proxmox nodes."},"tmpDir":{"type":"string","description":"The alternative temporary directory."},"username":{"type":"string","description":"The username for the Proxmox VE API."}},"methods":{"terraformConfig":"pulumi:providers:proxmoxve/terraformConfig"}},"resources":{"proxmoxve:Apt/repository:Repository":{"description":"Manages an APT repository of a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.apt.Repository(\"example\", {\n enabled: true,\n filePath: \"/etc/apt/sources.list\",\n index: 0,\n node: \"pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.apt.Repository(\"example\",\n enabled=True,\n file_path=\"/etc/apt/sources.list\",\n index=0,\n node=\"pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Apt.Repository(\"example\", new()\n {\n Enabled = true,\n FilePath = \"/etc/apt/sources.list\",\n Index = 0,\n Node = \"pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apt.NewRepository(ctx, \"example\", \u0026apt.RepositoryArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tFilePath: pulumi.String(\"/etc/apt/sources.list\"),\n\t\t\tIndex: pulumi.Int(0),\n\t\t\tNode: pulumi.String(\"pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.Repository;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Repository(\"example\", RepositoryArgs.builder()\n .enabled(true)\n .filePath(\"/etc/apt/sources.list\")\n .index(0)\n .node(\"pve\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Apt:Repository\n properties:\n enabled: true\n filePath: /etc/apt/sources.list\n index: 0\n node: pve\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nAn APT repository can be imported using a comma-separated list consisting of the name of the Proxmox VE node,\n\nthe absolute source list file path, and the index in the exact same order, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Apt/repository:Repository example pve,/etc/apt/sources.list,0\n```\n\n","properties":{"comment":{"type":"string","description":"The associated comment.\n"},"components":{"type":"array","items":{"type":"string"},"description":"The list of components.\n"},"enabled":{"type":"boolean","description":"Indicates the activation status.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"fileType":{"type":"string","description":"The format of the defining source list file.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"packageTypes":{"type":"array","items":{"type":"string"},"description":"The list of package types.\n"},"suites":{"type":"array","items":{"type":"string"},"description":"The list of package distributions.\n"},"uris":{"type":"array","items":{"type":"string"},"description":"The list of repository URIs.\n"}},"required":["comment","components","enabled","filePath","fileType","index","node","packageTypes","suites","uris"],"inputProperties":{"enabled":{"type":"boolean","description":"Indicates the activation status.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"requiredInputs":["filePath","index","node"],"stateInputs":{"description":"Input properties used for looking up and filtering Repository resources.\n","properties":{"comment":{"type":"string","description":"The associated comment.\n"},"components":{"type":"array","items":{"type":"string"},"description":"The list of components.\n"},"enabled":{"type":"boolean","description":"Indicates the activation status.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"fileType":{"type":"string","description":"The format of the defining source list file.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"packageTypes":{"type":"array","items":{"type":"string"},"description":"The list of package types.\n"},"suites":{"type":"array","items":{"type":"string"},"description":"The list of package distributions.\n"},"uris":{"type":"array","items":{"type":"string"},"description":"The list of repository URIs.\n"}},"type":"object"}},"proxmoxve:Apt/standard/repository:Repository":{"description":"Manages an APT standard repository of a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.apt.standard.Repository(\"example\", {\n handle: \"no-subscription\",\n node: \"pve\",\n});\nconst exampleRepository = new proxmoxve.apt.Repository(\"example\", {\n enabled: true,\n filePath: example.filePath,\n index: example.index,\n node: example.node,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.apt.standard.Repository(\"example\",\n handle=\"no-subscription\",\n node=\"pve\")\nexample_repository = proxmoxve.apt.Repository(\"example\",\n enabled=True,\n file_path=example.file_path,\n index=example.index,\n node=example.node)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Apt.Standard.Repository(\"example\", new()\n {\n Handle = \"no-subscription\",\n Node = \"pve\",\n });\n\n var exampleRepository = new ProxmoxVE.Apt.Repository(\"example\", new()\n {\n Enabled = true,\n FilePath = example.FilePath,\n Index = example.Index,\n Node = example.Node,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := apt.NewRepository(ctx, \"example\", \u0026apt.RepositoryArgs{\n\t\t\tHandle: pulumi.String(\"no-subscription\"),\n\t\t\tNode: pulumi.String(\"pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apt.NewRepository(ctx, \"example\", \u0026apt.RepositoryArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tFilePath: example.FilePath,\n\t\t\tIndex: example.Index,\n\t\t\tNode: example.Node,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.Repository;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Repository(\"example\", RepositoryArgs.builder()\n .handle(\"no-subscription\")\n .node(\"pve\")\n .build());\n\n var exampleRepository = new Repository(\"exampleRepository\", RepositoryArgs.builder()\n .enabled(true)\n .filePath(example.filePath())\n .index(example.index())\n .node(example.node())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Apt/standard:Repository\n properties:\n handle: no-subscription\n node: pve\n exampleRepository:\n type: proxmoxve:Apt:Repository\n name: example\n properties:\n enabled: true\n filePath: ${example.filePath}\n index: ${example.index}\n node: ${example.node}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nAn APT standard repository can be imported using a comma-separated list consisting of the name of the Proxmox VE node,\n\nand the standard repository handle in the exact same order, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Apt/standard/repository:Repository example pve,no-subscription\n```\n\n","properties":{"description":{"type":"string","description":"The description of the APT standard repository.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this standard repository.\n"},"handle":{"type":"string","description":"The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"name":{"type":"string","description":"The name of the APT standard repository.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"status":{"type":"integer","description":"Indicates the activation status.\n"}},"required":["description","filePath","handle","index","name","node","status"],"inputProperties":{"handle":{"type":"string","description":"The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"requiredInputs":["handle","node"],"stateInputs":{"description":"Input properties used for looking up and filtering Repository resources.\n","properties":{"description":{"type":"string","description":"The description of the APT standard repository.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this standard repository.\n"},"handle":{"type":"string","description":"The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"name":{"type":"string","description":"The name of the APT standard repository.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"status":{"type":"integer","description":"Indicates the activation status.\n"}},"type":"object"}},"proxmoxve:CT/container:Container":{"description":"Manages a container.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as random from \"@pulumi/random\";\nimport * as std from \"@pulumi/std\";\nimport * as tls from \"@pulumi/tls\";\n\nexport = async () =\u003e {\n const ubuntu2504LxcImg = new proxmoxve.download.File(\"ubuntu_2504_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n url: \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n const ubuntuContainerPassword = new random.RandomPassword(\"ubuntu_container_password\", {\n length: 16,\n overrideSpecial: \"_%@\",\n special: true,\n });\n const ubuntuContainerKey = new tls.PrivateKey(\"ubuntu_container_key\", {\n algorithm: \"RSA\",\n rsaBits: 2048,\n });\n const ubuntuContainer = new proxmoxve.ct.Container(\"ubuntu_container\", {\n description: \"Managed by Pulumi\",\n nodeName: \"first-node\",\n vmId: 1234,\n unprivileged: true,\n features: {\n nesting: true,\n },\n initialization: {\n hostname: \"terraform-provider-proxmox-ubuntu-container\",\n ipConfigs: [{\n ipv4: {\n address: \"dhcp\",\n },\n }],\n userAccount: {\n keys: [std.trimspaceOutput({\n input: ubuntuContainerKey.publicKeyOpenssh,\n }).apply(invoke =\u003e invoke.result)],\n password: ubuntuContainerPassword.result,\n },\n },\n networkInterfaces: [{\n name: \"veth0\",\n }],\n disk: {\n datastoreId: \"local-lvm\",\n size: 4,\n },\n operatingSystem: {\n templateFileId: ubuntu2504LxcImg.id,\n type: \"ubuntu\",\n },\n mountPoints: [\n {\n volume: \"/mnt/bindmounts/shared\",\n path: \"/mnt/shared\",\n },\n {\n volume: \"local-lvm\",\n size: \"10G\",\n path: \"/mnt/volume\",\n },\n ],\n startup: {\n order: 3,\n upDelay: 60,\n downDelay: 60,\n },\n });\n return {\n ubuntuContainerPassword: ubuntuContainerPassword.result,\n ubuntuContainerPrivateKey: ubuntuContainerKey.privateKeyPem,\n ubuntuContainerPublicKey: ubuntuContainerKey.publicKeyOpenssh,\n };\n}\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_random as random\nimport pulumi_std as std\nimport pulumi_tls as tls\n\nubuntu2504_lxc_img = proxmoxve.download.File(\"ubuntu_2504_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n url=\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\nubuntu_container_password = random.RandomPassword(\"ubuntu_container_password\",\n length=16,\n override_special=\"_%@\",\n special=True)\nubuntu_container_key = tls.PrivateKey(\"ubuntu_container_key\",\n algorithm=\"RSA\",\n rsa_bits=2048)\nubuntu_container = proxmoxve.ct.Container(\"ubuntu_container\",\n description=\"Managed by Pulumi\",\n node_name=\"first-node\",\n vm_id=1234,\n unprivileged=True,\n features={\n \"nesting\": True,\n },\n initialization={\n \"hostname\": \"terraform-provider-proxmox-ubuntu-container\",\n \"ip_configs\": [{\n \"ipv4\": {\n \"address\": \"dhcp\",\n },\n }],\n \"user_account\": {\n \"keys\": [std.trimspace_output(input=ubuntu_container_key.public_key_openssh).apply(lambda invoke: invoke.result)],\n \"password\": ubuntu_container_password.result,\n },\n },\n network_interfaces=[{\n \"name\": \"veth0\",\n }],\n disk={\n \"datastore_id\": \"local-lvm\",\n \"size\": 4,\n },\n operating_system={\n \"template_file_id\": ubuntu2504_lxc_img.id,\n \"type\": \"ubuntu\",\n },\n mount_points=[\n {\n \"volume\": \"/mnt/bindmounts/shared\",\n \"path\": \"/mnt/shared\",\n },\n {\n \"volume\": \"local-lvm\",\n \"size\": \"10G\",\n \"path\": \"/mnt/volume\",\n },\n ],\n startup={\n \"order\": 3,\n \"up_delay\": 60,\n \"down_delay\": 60,\n })\npulumi.export(\"ubuntuContainerPassword\", ubuntu_container_password.result)\npulumi.export(\"ubuntuContainerPrivateKey\", ubuntu_container_key.private_key_pem)\npulumi.export(\"ubuntuContainerPublicKey\", ubuntu_container_key.public_key_openssh)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Random = Pulumi.Random;\nusing Std = Pulumi.Std;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntu2504LxcImg = new ProxmoxVE.Download.File(\"ubuntu_2504_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n Url = \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n\n var ubuntuContainerPassword = new Random.RandomPassword(\"ubuntu_container_password\", new()\n {\n Length = 16,\n OverrideSpecial = \"_%@\",\n Special = true,\n });\n\n var ubuntuContainerKey = new Tls.PrivateKey(\"ubuntu_container_key\", new()\n {\n Algorithm = \"RSA\",\n RsaBits = 2048,\n });\n\n var ubuntuContainer = new ProxmoxVE.CT.Container(\"ubuntu_container\", new()\n {\n Description = \"Managed by Pulumi\",\n NodeName = \"first-node\",\n VmId = 1234,\n Unprivileged = true,\n Features = new ProxmoxVE.CT.Inputs.ContainerFeaturesArgs\n {\n Nesting = true,\n },\n Initialization = new ProxmoxVE.CT.Inputs.ContainerInitializationArgs\n {\n Hostname = \"terraform-provider-proxmox-ubuntu-container\",\n IpConfigs = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigArgs\n {\n Ipv4 = new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigIpv4Args\n {\n Address = \"dhcp\",\n },\n },\n },\n UserAccount = new ProxmoxVE.CT.Inputs.ContainerInitializationUserAccountArgs\n {\n Keys = new[]\n {\n Std.Trimspace.Invoke(new()\n {\n Input = ubuntuContainerKey.PublicKeyOpenssh,\n }).Apply(invoke =\u003e invoke.Result),\n },\n Password = ubuntuContainerPassword.Result,\n },\n },\n NetworkInterfaces = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerNetworkInterfaceArgs\n {\n Name = \"veth0\",\n },\n },\n Disk = new ProxmoxVE.CT.Inputs.ContainerDiskArgs\n {\n DatastoreId = \"local-lvm\",\n Size = 4,\n },\n OperatingSystem = new ProxmoxVE.CT.Inputs.ContainerOperatingSystemArgs\n {\n TemplateFileId = ubuntu2504LxcImg.Id,\n Type = \"ubuntu\",\n },\n MountPoints = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"/mnt/bindmounts/shared\",\n Path = \"/mnt/shared\",\n },\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"local-lvm\",\n Size = \"10G\",\n Path = \"/mnt/volume\",\n },\n },\n Startup = new ProxmoxVE.CT.Inputs.ContainerStartupArgs\n {\n Order = 3,\n UpDelay = 60,\n DownDelay = 60,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ubuntuContainerPassword\"] = ubuntuContainerPassword.Result,\n [\"ubuntuContainerPrivateKey\"] = ubuntuContainerKey.PrivateKeyPem,\n [\"ubuntuContainerPublicKey\"] = ubuntuContainerKey.PublicKeyOpenssh,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ct\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/download\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntu2504LxcImg, err := download.NewFile(ctx, \"ubuntu_2504_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tUrl: pulumi.String(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerPassword, err := random.NewRandomPassword(ctx, \"ubuntu_container_password\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tOverrideSpecial: pulumi.String(\"_%@\"),\n\t\t\tSpecial: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerKey, err := tls.NewPrivateKey(ctx, \"ubuntu_container_key\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t\tRsaBits: pulumi.Int(2048),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ct.NewContainer(ctx, \"ubuntu_container\", \u0026ct.ContainerArgs{\n\t\t\tDescription: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tVmId: pulumi.Int(1234),\n\t\t\tUnprivileged: pulumi.Bool(true),\n\t\t\tFeatures: \u0026ct.ContainerFeaturesArgs{\n\t\t\t\tNesting: pulumi.Bool(true),\n\t\t\t},\n\t\t\tInitialization: \u0026ct.ContainerInitializationArgs{\n\t\t\t\tHostname: pulumi.String(\"terraform-provider-proxmox-ubuntu-container\"),\n\t\t\t\tIpConfigs: ct.ContainerInitializationIpConfigArray{\n\t\t\t\t\t\u0026ct.ContainerInitializationIpConfigArgs{\n\t\t\t\t\t\tIpv4: \u0026ct.ContainerInitializationIpConfigIpv4Args{\n\t\t\t\t\t\t\tAddress: pulumi.String(\"dhcp\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUserAccount: \u0026ct.ContainerInitializationUserAccountArgs{\n\t\t\t\t\tKeys: pulumi.StringArray{\n\t\t\t\t\t\tstd.TrimspaceOutput(ctx, std.TrimspaceOutputArgs{\n\t\t\t\t\t\t\tInput: ubuntuContainerKey.PublicKeyOpenssh,\n\t\t\t\t\t\t}, nil).ApplyT(func(invoke std.TrimspaceResult) (*string, error) {\n\t\t\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t},\n\t\t\t\t\tPassword: ubuntuContainerPassword.Result,\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: ct.ContainerNetworkInterfaceArray{\n\t\t\t\t\u0026ct.ContainerNetworkInterfaceArgs{\n\t\t\t\t\tName: pulumi.String(\"veth0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisk: \u0026ct.ContainerDiskArgs{\n\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\tSize: pulumi.Int(4),\n\t\t\t},\n\t\t\tOperatingSystem: \u0026ct.ContainerOperatingSystemArgs{\n\t\t\t\tTemplateFileId: ubuntu2504LxcImg.ID(),\n\t\t\t\tType: pulumi.String(\"ubuntu\"),\n\t\t\t},\n\t\t\tMountPoints: ct.ContainerMountPointArray{\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"/mnt/bindmounts/shared\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/shared\"),\n\t\t\t\t},\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSize: pulumi.String(\"10G\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/volume\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStartup: \u0026ct.ContainerStartupArgs{\n\t\t\t\tOrder: pulumi.Int(3),\n\t\t\t\tUpDelay: pulumi.Int(60),\n\t\t\t\tDownDelay: pulumi.Int(60),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ubuntuContainerPassword\", ubuntuContainerPassword.Result)\n\t\tctx.Export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.PrivateKeyPem)\n\t\tctx.Export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.PublicKeyOpenssh)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Download.File;\nimport io.muehlbachler.pulumi.proxmoxve.Download.FileArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport io.muehlbachler.pulumi.proxmoxve.CT.Container;\nimport io.muehlbachler.pulumi.proxmoxve.CT.ContainerArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerFeaturesArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationUserAccountArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerNetworkInterfaceArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerDiskArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerOperatingSystemArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerMountPointArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerStartupArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntu2504LxcImg = new File(\"ubuntu2504LxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .url(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\n .build());\n\n var ubuntuContainerPassword = new RandomPassword(\"ubuntuContainerPassword\", RandomPasswordArgs.builder()\n .length(16)\n .overrideSpecial(\"_%@\")\n .special(true)\n .build());\n\n var ubuntuContainerKey = new PrivateKey(\"ubuntuContainerKey\", PrivateKeyArgs.builder()\n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var ubuntuContainer = new Container(\"ubuntuContainer\", ContainerArgs.builder()\n .description(\"Managed by Pulumi\")\n .nodeName(\"first-node\")\n .vmId(1234)\n .unprivileged(true)\n .features(ContainerFeaturesArgs.builder()\n .nesting(true)\n .build())\n .initialization(ContainerInitializationArgs.builder()\n .hostname(\"terraform-provider-proxmox-ubuntu-container\")\n .ipConfigs(ContainerInitializationIpConfigArgs.builder()\n .ipv4(ContainerInitializationIpConfigIpv4Args.builder()\n .address(\"dhcp\")\n .build())\n .build())\n .userAccount(ContainerInitializationUserAccountArgs.builder()\n .keys(StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(ubuntuContainerKey.publicKeyOpenssh())\n .build()).applyValue(_invoke -\u003e _invoke.result()))\n .password(ubuntuContainerPassword.result())\n .build())\n .build())\n .networkInterfaces(ContainerNetworkInterfaceArgs.builder()\n .name(\"veth0\")\n .build())\n .disk(ContainerDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .size(4)\n .build())\n .operatingSystem(ContainerOperatingSystemArgs.builder()\n .templateFileId(ubuntu2504LxcImg.id())\n .type(\"ubuntu\")\n .build())\n .mountPoints( \n ContainerMountPointArgs.builder()\n .volume(\"/mnt/bindmounts/shared\")\n .path(\"/mnt/shared\")\n .build(),\n ContainerMountPointArgs.builder()\n .volume(\"local-lvm\")\n .size(\"10G\")\n .path(\"/mnt/volume\")\n .build())\n .startup(ContainerStartupArgs.builder()\n .order(3)\n .upDelay(60)\n .downDelay(60)\n .build())\n .build());\n\n ctx.export(\"ubuntuContainerPassword\", ubuntuContainerPassword.result());\n ctx.export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.privateKeyPem());\n ctx.export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.publicKeyOpenssh());\n }\n}\n```\n```yaml\nresources:\n ubuntuContainer:\n type: proxmoxve:CT:Container\n name: ubuntu_container\n properties:\n description: Managed by Pulumi\n nodeName: first-node\n vmId: 1234 # newer linux distributions require unprivileged user namespaces\n unprivileged: true\n features:\n nesting: true\n initialization:\n hostname: terraform-provider-proxmox-ubuntu-container\n ipConfigs:\n - ipv4:\n address: dhcp\n userAccount:\n keys:\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${ubuntuContainerKey.publicKeyOpenssh}\n return: result\n password: ${ubuntuContainerPassword.result}\n networkInterfaces:\n - name: veth0\n disk:\n datastoreId: local-lvm\n size: 4\n operatingSystem:\n templateFileId: ${ubuntu2504LxcImg.id}\n type: ubuntu\n mountPoints:\n - volume: /mnt/bindmounts/shared\n path: /mnt/shared\n - volume: local-lvm\n size: 10G\n path: /mnt/volume\n startup:\n order: '3'\n upDelay: '60'\n downDelay: '60'\n ubuntu2504LxcImg:\n type: proxmoxve:Download:File\n name: ubuntu_2504_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n url: https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\n ubuntuContainerPassword:\n type: random:RandomPassword\n name: ubuntu_container_password\n properties:\n length: 16\n overrideSpecial: _%@\n special: true\n ubuntuContainerKey:\n type: tls:PrivateKey\n name: ubuntu_container_key\n properties:\n algorithm: RSA\n rsaBits: 2048\noutputs:\n ubuntuContainerPassword: ${ubuntuContainerPassword.result}\n ubuntuContainerPrivateKey: ${ubuntuContainerKey.privateKeyPem}\n ubuntuContainerPublicKey: ${ubuntuContainerKey.publicKeyOpenssh}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `node_name` and the `vm_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:CT/container:Container ubuntu_container first-node/1234\n```\n\n","properties":{"clone":{"$ref":"#/types/proxmoxve:CT/ContainerClone:ContainerClone","description":"The cloning configuration.\n"},"console":{"$ref":"#/types/proxmoxve:CT/ContainerConsole:ContainerConsole","description":"The console configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:CT/ContainerCpu:ContainerCpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description.\n"},"devicePassthroughs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough"},"description":"Device to pass through to the container (multiple blocks supported).\n"},"disk":{"$ref":"#/types/proxmoxve:CT/ContainerDisk:ContainerDisk","description":"The disk configuration.\n"},"environmentVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of runtime environment variables for the container init process.\n"},"features":{"$ref":"#/types/proxmoxve:CT/ContainerFeatures:ContainerFeatures","description":"The container feature flags. Changing flags (except nesting) is only allowed for `root@pam` authenticated user.\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"initialization":{"$ref":"#/types/proxmoxve:CT/ContainerInitialization:ContainerInitialization","description":"The initialization configuration.\n"},"ipv4":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv4 addresses per network devices. Returns the first address for each network device, if multiple addresses are assigned.\n"},"ipv6":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv6 addresses per network device. Returns the first address for each network device, if multiple addresses are assigned.\n"},"memory":{"$ref":"#/types/proxmoxve:CT/ContainerMemory:ContainerMemory","description":"The memory configuration.\n"},"mountPoints":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint"},"description":"A mount point"},"networkInterfaces":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface"},"description":"A network interface (multiple blocks\nsupported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the container to.\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the container to.\n"},"protection":{"type":"boolean","description":"Whether to set the protection flag of the container (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). This will prevent the container itself and its disk for remove/update operations.\n"},"startOnBoot":{"type":"boolean","description":"Automatically start container when the host\nsystem boots (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"started":{"type":"boolean","description":"Whether to start the container (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:CT/ContainerStartup:ContainerStartup","description":"Defines startup and shutdown behavior of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags the container tags. This is only meta\ninformation (defaults to `[]`). Note: Proxmox always sorts the container tags and set them to lowercase.\nIf tag contains capital letters, then Proxmox will always report a\ndifference on the resource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle\nmeta-argument to ignore changes to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"timeoutClone":{"type":"integer","description":"Timeout for cloning a container in seconds (defaults to 1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a container in seconds (defaults to 1800).\n"},"timeoutDelete":{"type":"integer","description":"Timeout for deleting a container in seconds (defaults to 60).\n"},"timeoutStart":{"type":"integer","description":"Start container timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (\u003cspan pulumi-lang-nodejs=\"`timeoutCreate`\" pulumi-lang-dotnet=\"`TimeoutCreate`\" pulumi-lang-go=\"`timeoutCreate`\" pulumi-lang-python=\"`timeout_create`\" pulumi-lang-yaml=\"`timeoutCreate`\" pulumi-lang-java=\"`timeoutCreate`\"\u003e`timeout_create`\u003c/span\u003e / \u003cspan pulumi-lang-nodejs=\"`timeoutClone`\" pulumi-lang-dotnet=\"`TimeoutClone`\" pulumi-lang-go=\"`timeoutClone`\" pulumi-lang-python=\"`timeout_clone`\" pulumi-lang-yaml=\"`timeoutClone`\" pulumi-lang-java=\"`timeoutClone`\"\u003e`timeout_clone`\u003c/span\u003e) is used instead."},"timeoutUpdate":{"type":"integer","description":"Timeout for updating a container in seconds (defaults to 1800).\n"},"unprivileged":{"type":"boolean","description":"Whether the container runs as unprivileged on the host (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"vmId":{"type":"integer","description":"The container identifier\n"},"waitForIp":{"$ref":"#/types/proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp","description":"Configuration for waiting for specific IP address types when the container starts.\n"}},"required":["ipv4","ipv6","nodeName","vmId"],"inputProperties":{"clone":{"$ref":"#/types/proxmoxve:CT/ContainerClone:ContainerClone","description":"The cloning configuration.\n"},"console":{"$ref":"#/types/proxmoxve:CT/ContainerConsole:ContainerConsole","description":"The console configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:CT/ContainerCpu:ContainerCpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description.\n"},"devicePassthroughs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough"},"description":"Device to pass through to the container (multiple blocks supported).\n"},"disk":{"$ref":"#/types/proxmoxve:CT/ContainerDisk:ContainerDisk","description":"The disk configuration.\n","willReplaceOnChanges":true},"environmentVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of runtime environment variables for the container init process.\n"},"features":{"$ref":"#/types/proxmoxve:CT/ContainerFeatures:ContainerFeatures","description":"The container feature flags. Changing flags (except nesting) is only allowed for `root@pam` authenticated user.\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"initialization":{"$ref":"#/types/proxmoxve:CT/ContainerInitialization:ContainerInitialization","description":"The initialization configuration.\n"},"memory":{"$ref":"#/types/proxmoxve:CT/ContainerMemory:ContainerMemory","description":"The memory configuration.\n"},"mountPoints":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint"},"description":"A mount point"},"networkInterfaces":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface"},"description":"A network interface (multiple blocks\nsupported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the container to.\n","willReplaceOnChanges":true},"operatingSystem":{"$ref":"#/types/proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem","description":"The Operating System configuration.\n","willReplaceOnChanges":true},"poolId":{"type":"string","description":"The identifier for a pool to assign the container to.\n","willReplaceOnChanges":true},"protection":{"type":"boolean","description":"Whether to set the protection flag of the container (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). This will prevent the container itself and its disk for remove/update operations.\n"},"startOnBoot":{"type":"boolean","description":"Automatically start container when the host\nsystem boots (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"started":{"type":"boolean","description":"Whether to start the container (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:CT/ContainerStartup:ContainerStartup","description":"Defines startup and shutdown behavior of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags the container tags. This is only meta\ninformation (defaults to `[]`). Note: Proxmox always sorts the container tags and set them to lowercase.\nIf tag contains capital letters, then Proxmox will always report a\ndifference on the resource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle\nmeta-argument to ignore changes to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a container in seconds (defaults to 1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a container in seconds (defaults to 1800).\n"},"timeoutDelete":{"type":"integer","description":"Timeout for deleting a container in seconds (defaults to 60).\n"},"timeoutStart":{"type":"integer","description":"Start container timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (\u003cspan pulumi-lang-nodejs=\"`timeoutCreate`\" pulumi-lang-dotnet=\"`TimeoutCreate`\" pulumi-lang-go=\"`timeoutCreate`\" pulumi-lang-python=\"`timeout_create`\" pulumi-lang-yaml=\"`timeoutCreate`\" pulumi-lang-java=\"`timeoutCreate`\"\u003e`timeout_create`\u003c/span\u003e / \u003cspan pulumi-lang-nodejs=\"`timeoutClone`\" pulumi-lang-dotnet=\"`TimeoutClone`\" pulumi-lang-go=\"`timeoutClone`\" pulumi-lang-python=\"`timeout_clone`\" pulumi-lang-yaml=\"`timeoutClone`\" pulumi-lang-java=\"`timeoutClone`\"\u003e`timeout_clone`\u003c/span\u003e) is used instead."},"timeoutUpdate":{"type":"integer","description":"Timeout for updating a container in seconds (defaults to 1800).\n"},"unprivileged":{"type":"boolean","description":"Whether the container runs as unprivileged on the host (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The container identifier\n"},"waitForIp":{"$ref":"#/types/proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp","description":"Configuration for waiting for specific IP address types when the container starts.\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering Container resources.\n","properties":{"clone":{"$ref":"#/types/proxmoxve:CT/ContainerClone:ContainerClone","description":"The cloning configuration.\n"},"console":{"$ref":"#/types/proxmoxve:CT/ContainerConsole:ContainerConsole","description":"The console configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:CT/ContainerCpu:ContainerCpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description.\n"},"devicePassthroughs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough"},"description":"Device to pass through to the container (multiple blocks supported).\n"},"disk":{"$ref":"#/types/proxmoxve:CT/ContainerDisk:ContainerDisk","description":"The disk configuration.\n","willReplaceOnChanges":true},"environmentVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of runtime environment variables for the container init process.\n"},"features":{"$ref":"#/types/proxmoxve:CT/ContainerFeatures:ContainerFeatures","description":"The container feature flags. Changing flags (except nesting) is only allowed for `root@pam` authenticated user.\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"initialization":{"$ref":"#/types/proxmoxve:CT/ContainerInitialization:ContainerInitialization","description":"The initialization configuration.\n"},"ipv4":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv4 addresses per network devices. Returns the first address for each network device, if multiple addresses are assigned.\n"},"ipv6":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv6 addresses per network device. Returns the first address for each network device, if multiple addresses are assigned.\n"},"memory":{"$ref":"#/types/proxmoxve:CT/ContainerMemory:ContainerMemory","description":"The memory configuration.\n"},"mountPoints":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint"},"description":"A mount point"},"networkInterfaces":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface"},"description":"A network interface (multiple blocks\nsupported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the container to.\n","willReplaceOnChanges":true},"operatingSystem":{"$ref":"#/types/proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem","description":"The Operating System configuration.\n","willReplaceOnChanges":true},"poolId":{"type":"string","description":"The identifier for a pool to assign the container to.\n","willReplaceOnChanges":true},"protection":{"type":"boolean","description":"Whether to set the protection flag of the container (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). This will prevent the container itself and its disk for remove/update operations.\n"},"startOnBoot":{"type":"boolean","description":"Automatically start container when the host\nsystem boots (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"started":{"type":"boolean","description":"Whether to start the container (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:CT/ContainerStartup:ContainerStartup","description":"Defines startup and shutdown behavior of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags the container tags. This is only meta\ninformation (defaults to `[]`). Note: Proxmox always sorts the container tags and set them to lowercase.\nIf tag contains capital letters, then Proxmox will always report a\ndifference on the resource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle\nmeta-argument to ignore changes to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a container in seconds (defaults to 1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a container in seconds (defaults to 1800).\n"},"timeoutDelete":{"type":"integer","description":"Timeout for deleting a container in seconds (defaults to 60).\n"},"timeoutStart":{"type":"integer","description":"Start container timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (\u003cspan pulumi-lang-nodejs=\"`timeoutCreate`\" pulumi-lang-dotnet=\"`TimeoutCreate`\" pulumi-lang-go=\"`timeoutCreate`\" pulumi-lang-python=\"`timeout_create`\" pulumi-lang-yaml=\"`timeoutCreate`\" pulumi-lang-java=\"`timeoutCreate`\"\u003e`timeout_create`\u003c/span\u003e / \u003cspan pulumi-lang-nodejs=\"`timeoutClone`\" pulumi-lang-dotnet=\"`TimeoutClone`\" pulumi-lang-go=\"`timeoutClone`\" pulumi-lang-python=\"`timeout_clone`\" pulumi-lang-yaml=\"`timeoutClone`\" pulumi-lang-java=\"`timeoutClone`\"\u003e`timeout_clone`\u003c/span\u003e) is used instead."},"timeoutUpdate":{"type":"integer","description":"Timeout for updating a container in seconds (defaults to 1800).\n"},"unprivileged":{"type":"boolean","description":"Whether the container runs as unprivileged on the host (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The container identifier\n"},"waitForIp":{"$ref":"#/types/proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp","description":"Configuration for waiting for specific IP address types when the container starts.\n"}},"type":"object"}},"proxmoxve:Cluster/options:Options":{"description":"Manages Proxmox VE Cluster Datacenter options.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst options = new proxmoxve.cluster.Options(\"options\", {\n language: \"en\",\n keyboard: \"pl\",\n emailFrom: \"ged@gont.earthsea\",\n bandwidthLimitMigration: 555555,\n bandwidthLimitDefault: 666666,\n maxWorkers: 5,\n migrationCidr: \"10.0.0.0/8\",\n migrationType: \"secure\",\n nextId: {\n lower: 100,\n upper: 999999999,\n },\n notify: {\n haFencingMode: \"never\",\n haFencingTarget: \"default-matcher\",\n packageUpdates: \"always\",\n packageUpdatesTarget: \"default-matcher\",\n packageReplication: \"always\",\n packageReplicationTarget: \"default-matcher\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noptions = proxmoxve.cluster.Options(\"options\",\n language=\"en\",\n keyboard=\"pl\",\n email_from=\"ged@gont.earthsea\",\n bandwidth_limit_migration=555555,\n bandwidth_limit_default=666666,\n max_workers=5,\n migration_cidr=\"10.0.0.0/8\",\n migration_type=\"secure\",\n next_id={\n \"lower\": 100,\n \"upper\": 999999999,\n },\n notify={\n \"ha_fencing_mode\": \"never\",\n \"ha_fencing_target\": \"default-matcher\",\n \"package_updates\": \"always\",\n \"package_updates_target\": \"default-matcher\",\n \"package_replication\": \"always\",\n \"package_replication_target\": \"default-matcher\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var options = new ProxmoxVE.Cluster.Options(\"options\", new()\n {\n Language = \"en\",\n Keyboard = \"pl\",\n EmailFrom = \"ged@gont.earthsea\",\n BandwidthLimitMigration = 555555,\n BandwidthLimitDefault = 666666,\n MaxWorkers = 5,\n MigrationCidr = \"10.0.0.0/8\",\n MigrationType = \"secure\",\n NextId = new ProxmoxVE.Cluster.Inputs.OptionsNextIdArgs\n {\n Lower = 100,\n Upper = 999999999,\n },\n Notify = new ProxmoxVE.Cluster.Inputs.OptionsNotifyArgs\n {\n HaFencingMode = \"never\",\n HaFencingTarget = \"default-matcher\",\n PackageUpdates = \"always\",\n PackageUpdatesTarget = \"default-matcher\",\n PackageReplication = \"always\",\n PackageReplicationTarget = \"default-matcher\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/cluster\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cluster.NewOptions(ctx, \"options\", \u0026cluster.OptionsArgs{\n\t\t\tLanguage: pulumi.String(\"en\"),\n\t\t\tKeyboard: pulumi.String(\"pl\"),\n\t\t\tEmailFrom: pulumi.String(\"ged@gont.earthsea\"),\n\t\t\tBandwidthLimitMigration: pulumi.Int(555555),\n\t\t\tBandwidthLimitDefault: pulumi.Int(666666),\n\t\t\tMaxWorkers: pulumi.Int(5),\n\t\t\tMigrationCidr: pulumi.String(\"10.0.0.0/8\"),\n\t\t\tMigrationType: pulumi.String(\"secure\"),\n\t\t\tNextId: \u0026cluster.OptionsNextIdArgs{\n\t\t\t\tLower: pulumi.Int(100),\n\t\t\t\tUpper: pulumi.Int(999999999),\n\t\t\t},\n\t\t\tNotify: \u0026cluster.OptionsNotifyArgs{\n\t\t\t\tHaFencingMode: pulumi.String(\"never\"),\n\t\t\t\tHaFencingTarget: pulumi.String(\"default-matcher\"),\n\t\t\t\tPackageUpdates: pulumi.String(\"always\"),\n\t\t\t\tPackageUpdatesTarget: pulumi.String(\"default-matcher\"),\n\t\t\t\tPackageReplication: \"always\",\n\t\t\t\tPackageReplicationTarget: \"default-matcher\",\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Cluster.Options;\nimport io.muehlbachler.pulumi.proxmoxve.Cluster.OptionsArgs;\nimport com.pulumi.proxmoxve.Cluster.inputs.OptionsNextIdArgs;\nimport com.pulumi.proxmoxve.Cluster.inputs.OptionsNotifyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var options = new Options(\"options\", OptionsArgs.builder()\n .language(\"en\")\n .keyboard(\"pl\")\n .emailFrom(\"ged@gont.earthsea\")\n .bandwidthLimitMigration(555555)\n .bandwidthLimitDefault(666666)\n .maxWorkers(5)\n .migrationCidr(\"10.0.0.0/8\")\n .migrationType(\"secure\")\n .nextId(OptionsNextIdArgs.builder()\n .lower(100)\n .upper(999999999)\n .build())\n .notify(OptionsNotifyArgs.builder()\n .haFencingMode(\"never\")\n .haFencingTarget(\"default-matcher\")\n .packageUpdates(\"always\")\n .packageUpdatesTarget(\"default-matcher\")\n .packageReplication(\"always\")\n .packageReplicationTarget(\"default-matcher\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n options:\n type: proxmoxve:Cluster:Options\n properties:\n language: en\n keyboard: pl\n emailFrom: ged@gont.earthsea\n bandwidthLimitMigration: 555555\n bandwidthLimitDefault: 666666\n maxWorkers: 5\n migrationCidr: 10.0.0.0/8\n migrationType: secure\n nextId:\n lower: 100\n upper: 9.99999999e+08\n notify:\n haFencingMode: never\n haFencingTarget: default-matcher\n packageUpdates: always\n packageUpdatesTarget: default-matcher\n packageReplication: always\n packageReplicationTarget: default-matcher\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nCluster options are global and can be imported using e.g.:\n\n```sh\n$ pulumi import proxmoxve:Cluster/options:Options options cluster\n```\n\n","properties":{"bandwidthLimitClone":{"type":"integer","description":"Clone I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitDefault":{"type":"integer","description":"Default I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMigration":{"type":"integer","description":"Migration I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMove":{"type":"integer","description":"Move I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitRestore":{"type":"integer","description":"Restore I/O bandwidth limit in KiB/s.\n"},"console":{"type":"string","description":"Select the default Console viewer. Must be \u003cspan pulumi-lang-nodejs=\"`applet`\" pulumi-lang-dotnet=\"`Applet`\" pulumi-lang-go=\"`applet`\" pulumi-lang-python=\"`applet`\" pulumi-lang-yaml=\"`applet`\" pulumi-lang-java=\"`applet`\"\u003e`applet`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`vv`\" pulumi-lang-dotnet=\"`Vv`\" pulumi-lang-go=\"`vv`\" pulumi-lang-python=\"`vv`\" pulumi-lang-yaml=\"`vv`\" pulumi-lang-java=\"`vv`\"\u003e`vv`\u003c/span\u003e| \u003cspan pulumi-lang-nodejs=\"`html5`\" pulumi-lang-dotnet=\"`Html5`\" pulumi-lang-go=\"`html5`\" pulumi-lang-python=\"`html5`\" pulumi-lang-yaml=\"`html5`\" pulumi-lang-java=\"`html5`\"\u003e`html5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`xtermjs`\" pulumi-lang-dotnet=\"`Xtermjs`\" pulumi-lang-go=\"`xtermjs`\" pulumi-lang-python=\"`xtermjs`\" pulumi-lang-yaml=\"`xtermjs`\" pulumi-lang-java=\"`xtermjs`\"\u003e`xtermjs`\u003c/span\u003e. You can either use the builtin java applet (VNC; deprecated and maps to html5), an external virt-viewer compatible application (SPICE), an HTML5 based vnc viewer (noVNC), or an HTML5 based console client (xtermjs). If the selected viewer is not available (e.g. SPICE not activated for the VM), the fallback is noVNC.\n"},"crsHa":{"type":"string","description":"Cluster resource scheduling setting for HA. Must be \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e).\n"},"crsHaRebalanceOnStart":{"type":"boolean","description":"Cluster resource scheduling setting for HA rebalance on start.\n"},"description":{"type":"string","description":"Datacenter description. Shown in the web-interface datacenter notes panel. This is saved as comment inside the configuration file.\n"},"emailFrom":{"type":"string","description":"email address to send notification from (default is root@$hostname).\n"},"haShutdownPolicy":{"type":"string","description":"Cluster wide HA shutdown policy (). Must be \u003cspan pulumi-lang-nodejs=\"`freeze`\" pulumi-lang-dotnet=\"`Freeze`\" pulumi-lang-go=\"`freeze`\" pulumi-lang-python=\"`freeze`\" pulumi-lang-yaml=\"`freeze`\" pulumi-lang-java=\"`freeze`\"\u003e`freeze`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`failover`\" pulumi-lang-dotnet=\"`Failover`\" pulumi-lang-go=\"`failover`\" pulumi-lang-python=\"`failover`\" pulumi-lang-yaml=\"`failover`\" pulumi-lang-java=\"`failover`\"\u003e`failover`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`migrate`\" pulumi-lang-dotnet=\"`Migrate`\" pulumi-lang-go=\"`migrate`\" pulumi-lang-python=\"`migrate`\" pulumi-lang-yaml=\"`migrate`\" pulumi-lang-java=\"`migrate`\"\u003e`migrate`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e).\n"},"httpProxy":{"type":"string","description":"Specify external http proxy which is used for downloads (example: `http://username:password@host:port/`).\n"},"keyboard":{"type":"string","description":"Default keyboard layout for vnc server. Must be \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | `de-ch` | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | `en-gb` | `en-us` | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fi`\" pulumi-lang-dotnet=\"`Fi`\" pulumi-lang-go=\"`fi`\" pulumi-lang-python=\"`fi`\" pulumi-lang-yaml=\"`fi`\" pulumi-lang-java=\"`fi`\"\u003e`fi`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | `fr-be` | `fr-ca` | `fr-ch` | \u003cspan pulumi-lang-nodejs=\"`hu`\" pulumi-lang-dotnet=\"`Hu`\" pulumi-lang-go=\"`hu`\" pulumi-lang-python=\"`hu`\" pulumi-lang-yaml=\"`hu`\" pulumi-lang-java=\"`hu`\"\u003e`hu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`is`\" pulumi-lang-dotnet=\"`Is`\" pulumi-lang-go=\"`is`\" pulumi-lang-python=\"`is`\" pulumi-lang-yaml=\"`is`\" pulumi-lang-java=\"`is`\"\u003e`is`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lt`\" pulumi-lang-dotnet=\"`Lt`\" pulumi-lang-go=\"`lt`\" pulumi-lang-python=\"`lt`\" pulumi-lang-yaml=\"`lt`\" pulumi-lang-java=\"`lt`\"\u003e`lt`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`mk`\" pulumi-lang-dotnet=\"`Mk`\" pulumi-lang-go=\"`mk`\" pulumi-lang-python=\"`mk`\" pulumi-lang-yaml=\"`mk`\" pulumi-lang-java=\"`mk`\"\u003e`mk`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nl`\" pulumi-lang-dotnet=\"`Nl`\" pulumi-lang-go=\"`nl`\" pulumi-lang-python=\"`nl`\" pulumi-lang-yaml=\"`nl`\" pulumi-lang-java=\"`nl`\"\u003e`nl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`no`\" pulumi-lang-dotnet=\"`No`\" pulumi-lang-go=\"`no`\" pulumi-lang-python=\"`no`\" pulumi-lang-yaml=\"`no`\" pulumi-lang-java=\"`no`\"\u003e`no`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pt`\" pulumi-lang-dotnet=\"`Pt`\" pulumi-lang-go=\"`pt`\" pulumi-lang-python=\"`pt`\" pulumi-lang-yaml=\"`pt`\" pulumi-lang-java=\"`pt`\"\u003e`pt`\u003c/span\u003e | `pt-br` | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e.\n"},"language":{"type":"string","description":"Default GUI language. Must be \u003cspan pulumi-lang-nodejs=\"`ca`\" pulumi-lang-dotnet=\"`Ca`\" pulumi-lang-go=\"`ca`\" pulumi-lang-python=\"`ca`\" pulumi-lang-yaml=\"`ca`\" pulumi-lang-java=\"`ca`\"\u003e`ca`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`en`\" pulumi-lang-dotnet=\"`En`\" pulumi-lang-go=\"`en`\" pulumi-lang-python=\"`en`\" pulumi-lang-yaml=\"`en`\" pulumi-lang-java=\"`en`\"\u003e`en`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`eu`\" pulumi-lang-dotnet=\"`Eu`\" pulumi-lang-go=\"`eu`\" pulumi-lang-python=\"`eu`\" pulumi-lang-yaml=\"`eu`\" pulumi-lang-java=\"`eu`\"\u003e`eu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fa`\" pulumi-lang-dotnet=\"`Fa`\" pulumi-lang-go=\"`fa`\" pulumi-lang-python=\"`fa`\" pulumi-lang-yaml=\"`fa`\" pulumi-lang-java=\"`fa`\"\u003e`fa`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`he`\" pulumi-lang-dotnet=\"`He`\" pulumi-lang-go=\"`he`\" pulumi-lang-python=\"`he`\" pulumi-lang-yaml=\"`he`\" pulumi-lang-java=\"`he`\"\u003e`he`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nb`\" pulumi-lang-dotnet=\"`Nb`\" pulumi-lang-go=\"`nb`\" pulumi-lang-python=\"`nb`\" pulumi-lang-yaml=\"`nb`\" pulumi-lang-java=\"`nb`\"\u003e`nb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nn`\" pulumi-lang-dotnet=\"`Nn`\" pulumi-lang-go=\"`nn`\" pulumi-lang-python=\"`nn`\" pulumi-lang-yaml=\"`nn`\" pulumi-lang-java=\"`nn`\"\u003e`nn`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | `pt_BR` | \u003cspan pulumi-lang-nodejs=\"`ru`\" pulumi-lang-dotnet=\"`Ru`\" pulumi-lang-go=\"`ru`\" pulumi-lang-python=\"`ru`\" pulumi-lang-yaml=\"`ru`\" pulumi-lang-java=\"`ru`\"\u003e`ru`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e | `zh_CN` | `zh_TW`.\n"},"macPrefix":{"type":"string","description":"Prefix for autogenerated MAC addresses.\n"},"maxWorkers":{"type":"integer","description":"Defines how many workers (per node) are maximal started on actions like 'stopall VMs' or task from the ha-manager.\n"},"migrationCidr":{"type":"string","description":"Cluster wide migration network CIDR.\n"},"migrationType":{"type":"string","description":"Cluster wide migration type. Must be \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`insecure`\" pulumi-lang-dotnet=\"`Insecure`\" pulumi-lang-go=\"`insecure`\" pulumi-lang-python=\"`insecure`\" pulumi-lang-yaml=\"`insecure`\" pulumi-lang-java=\"`insecure`\"\u003e`insecure`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e).\n"},"nextId":{"$ref":"#/types/proxmoxve:Cluster/OptionsNextId:OptionsNextId","description":"The ranges for the next free VM ID auto-selection pool.\n"},"notify":{"$ref":"#/types/proxmoxve:Cluster/OptionsNotify:OptionsNotify","description":"Cluster-wide notification settings.\n"}},"required":["crsHa","macPrefix"],"inputProperties":{"bandwidthLimitClone":{"type":"integer","description":"Clone I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitDefault":{"type":"integer","description":"Default I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMigration":{"type":"integer","description":"Migration I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMove":{"type":"integer","description":"Move I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitRestore":{"type":"integer","description":"Restore I/O bandwidth limit in KiB/s.\n"},"console":{"type":"string","description":"Select the default Console viewer. Must be \u003cspan pulumi-lang-nodejs=\"`applet`\" pulumi-lang-dotnet=\"`Applet`\" pulumi-lang-go=\"`applet`\" pulumi-lang-python=\"`applet`\" pulumi-lang-yaml=\"`applet`\" pulumi-lang-java=\"`applet`\"\u003e`applet`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`vv`\" pulumi-lang-dotnet=\"`Vv`\" pulumi-lang-go=\"`vv`\" pulumi-lang-python=\"`vv`\" pulumi-lang-yaml=\"`vv`\" pulumi-lang-java=\"`vv`\"\u003e`vv`\u003c/span\u003e| \u003cspan pulumi-lang-nodejs=\"`html5`\" pulumi-lang-dotnet=\"`Html5`\" pulumi-lang-go=\"`html5`\" pulumi-lang-python=\"`html5`\" pulumi-lang-yaml=\"`html5`\" pulumi-lang-java=\"`html5`\"\u003e`html5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`xtermjs`\" pulumi-lang-dotnet=\"`Xtermjs`\" pulumi-lang-go=\"`xtermjs`\" pulumi-lang-python=\"`xtermjs`\" pulumi-lang-yaml=\"`xtermjs`\" pulumi-lang-java=\"`xtermjs`\"\u003e`xtermjs`\u003c/span\u003e. You can either use the builtin java applet (VNC; deprecated and maps to html5), an external virt-viewer compatible application (SPICE), an HTML5 based vnc viewer (noVNC), or an HTML5 based console client (xtermjs). If the selected viewer is not available (e.g. SPICE not activated for the VM), the fallback is noVNC.\n"},"crsHa":{"type":"string","description":"Cluster resource scheduling setting for HA. Must be \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e).\n"},"crsHaRebalanceOnStart":{"type":"boolean","description":"Cluster resource scheduling setting for HA rebalance on start.\n"},"description":{"type":"string","description":"Datacenter description. Shown in the web-interface datacenter notes panel. This is saved as comment inside the configuration file.\n"},"emailFrom":{"type":"string","description":"email address to send notification from (default is root@$hostname).\n"},"haShutdownPolicy":{"type":"string","description":"Cluster wide HA shutdown policy (). Must be \u003cspan pulumi-lang-nodejs=\"`freeze`\" pulumi-lang-dotnet=\"`Freeze`\" pulumi-lang-go=\"`freeze`\" pulumi-lang-python=\"`freeze`\" pulumi-lang-yaml=\"`freeze`\" pulumi-lang-java=\"`freeze`\"\u003e`freeze`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`failover`\" pulumi-lang-dotnet=\"`Failover`\" pulumi-lang-go=\"`failover`\" pulumi-lang-python=\"`failover`\" pulumi-lang-yaml=\"`failover`\" pulumi-lang-java=\"`failover`\"\u003e`failover`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`migrate`\" pulumi-lang-dotnet=\"`Migrate`\" pulumi-lang-go=\"`migrate`\" pulumi-lang-python=\"`migrate`\" pulumi-lang-yaml=\"`migrate`\" pulumi-lang-java=\"`migrate`\"\u003e`migrate`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e).\n"},"httpProxy":{"type":"string","description":"Specify external http proxy which is used for downloads (example: `http://username:password@host:port/`).\n"},"keyboard":{"type":"string","description":"Default keyboard layout for vnc server. Must be \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | `de-ch` | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | `en-gb` | `en-us` | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fi`\" pulumi-lang-dotnet=\"`Fi`\" pulumi-lang-go=\"`fi`\" pulumi-lang-python=\"`fi`\" pulumi-lang-yaml=\"`fi`\" pulumi-lang-java=\"`fi`\"\u003e`fi`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | `fr-be` | `fr-ca` | `fr-ch` | \u003cspan pulumi-lang-nodejs=\"`hu`\" pulumi-lang-dotnet=\"`Hu`\" pulumi-lang-go=\"`hu`\" pulumi-lang-python=\"`hu`\" pulumi-lang-yaml=\"`hu`\" pulumi-lang-java=\"`hu`\"\u003e`hu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`is`\" pulumi-lang-dotnet=\"`Is`\" pulumi-lang-go=\"`is`\" pulumi-lang-python=\"`is`\" pulumi-lang-yaml=\"`is`\" pulumi-lang-java=\"`is`\"\u003e`is`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lt`\" pulumi-lang-dotnet=\"`Lt`\" pulumi-lang-go=\"`lt`\" pulumi-lang-python=\"`lt`\" pulumi-lang-yaml=\"`lt`\" pulumi-lang-java=\"`lt`\"\u003e`lt`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`mk`\" pulumi-lang-dotnet=\"`Mk`\" pulumi-lang-go=\"`mk`\" pulumi-lang-python=\"`mk`\" pulumi-lang-yaml=\"`mk`\" pulumi-lang-java=\"`mk`\"\u003e`mk`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nl`\" pulumi-lang-dotnet=\"`Nl`\" pulumi-lang-go=\"`nl`\" pulumi-lang-python=\"`nl`\" pulumi-lang-yaml=\"`nl`\" pulumi-lang-java=\"`nl`\"\u003e`nl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`no`\" pulumi-lang-dotnet=\"`No`\" pulumi-lang-go=\"`no`\" pulumi-lang-python=\"`no`\" pulumi-lang-yaml=\"`no`\" pulumi-lang-java=\"`no`\"\u003e`no`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pt`\" pulumi-lang-dotnet=\"`Pt`\" pulumi-lang-go=\"`pt`\" pulumi-lang-python=\"`pt`\" pulumi-lang-yaml=\"`pt`\" pulumi-lang-java=\"`pt`\"\u003e`pt`\u003c/span\u003e | `pt-br` | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e.\n"},"language":{"type":"string","description":"Default GUI language. Must be \u003cspan pulumi-lang-nodejs=\"`ca`\" pulumi-lang-dotnet=\"`Ca`\" pulumi-lang-go=\"`ca`\" pulumi-lang-python=\"`ca`\" pulumi-lang-yaml=\"`ca`\" pulumi-lang-java=\"`ca`\"\u003e`ca`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`en`\" pulumi-lang-dotnet=\"`En`\" pulumi-lang-go=\"`en`\" pulumi-lang-python=\"`en`\" pulumi-lang-yaml=\"`en`\" pulumi-lang-java=\"`en`\"\u003e`en`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`eu`\" pulumi-lang-dotnet=\"`Eu`\" pulumi-lang-go=\"`eu`\" pulumi-lang-python=\"`eu`\" pulumi-lang-yaml=\"`eu`\" pulumi-lang-java=\"`eu`\"\u003e`eu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fa`\" pulumi-lang-dotnet=\"`Fa`\" pulumi-lang-go=\"`fa`\" pulumi-lang-python=\"`fa`\" pulumi-lang-yaml=\"`fa`\" pulumi-lang-java=\"`fa`\"\u003e`fa`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`he`\" pulumi-lang-dotnet=\"`He`\" pulumi-lang-go=\"`he`\" pulumi-lang-python=\"`he`\" pulumi-lang-yaml=\"`he`\" pulumi-lang-java=\"`he`\"\u003e`he`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nb`\" pulumi-lang-dotnet=\"`Nb`\" pulumi-lang-go=\"`nb`\" pulumi-lang-python=\"`nb`\" pulumi-lang-yaml=\"`nb`\" pulumi-lang-java=\"`nb`\"\u003e`nb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nn`\" pulumi-lang-dotnet=\"`Nn`\" pulumi-lang-go=\"`nn`\" pulumi-lang-python=\"`nn`\" pulumi-lang-yaml=\"`nn`\" pulumi-lang-java=\"`nn`\"\u003e`nn`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | `pt_BR` | \u003cspan pulumi-lang-nodejs=\"`ru`\" pulumi-lang-dotnet=\"`Ru`\" pulumi-lang-go=\"`ru`\" pulumi-lang-python=\"`ru`\" pulumi-lang-yaml=\"`ru`\" pulumi-lang-java=\"`ru`\"\u003e`ru`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e | `zh_CN` | `zh_TW`.\n"},"macPrefix":{"type":"string","description":"Prefix for autogenerated MAC addresses.\n"},"maxWorkers":{"type":"integer","description":"Defines how many workers (per node) are maximal started on actions like 'stopall VMs' or task from the ha-manager.\n"},"migrationCidr":{"type":"string","description":"Cluster wide migration network CIDR.\n"},"migrationType":{"type":"string","description":"Cluster wide migration type. Must be \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`insecure`\" pulumi-lang-dotnet=\"`Insecure`\" pulumi-lang-go=\"`insecure`\" pulumi-lang-python=\"`insecure`\" pulumi-lang-yaml=\"`insecure`\" pulumi-lang-java=\"`insecure`\"\u003e`insecure`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e).\n"},"nextId":{"$ref":"#/types/proxmoxve:Cluster/OptionsNextId:OptionsNextId","description":"The ranges for the next free VM ID auto-selection pool.\n"},"notify":{"$ref":"#/types/proxmoxve:Cluster/OptionsNotify:OptionsNotify","description":"Cluster-wide notification settings.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Options resources.\n","properties":{"bandwidthLimitClone":{"type":"integer","description":"Clone I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitDefault":{"type":"integer","description":"Default I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMigration":{"type":"integer","description":"Migration I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMove":{"type":"integer","description":"Move I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitRestore":{"type":"integer","description":"Restore I/O bandwidth limit in KiB/s.\n"},"console":{"type":"string","description":"Select the default Console viewer. Must be \u003cspan pulumi-lang-nodejs=\"`applet`\" pulumi-lang-dotnet=\"`Applet`\" pulumi-lang-go=\"`applet`\" pulumi-lang-python=\"`applet`\" pulumi-lang-yaml=\"`applet`\" pulumi-lang-java=\"`applet`\"\u003e`applet`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`vv`\" pulumi-lang-dotnet=\"`Vv`\" pulumi-lang-go=\"`vv`\" pulumi-lang-python=\"`vv`\" pulumi-lang-yaml=\"`vv`\" pulumi-lang-java=\"`vv`\"\u003e`vv`\u003c/span\u003e| \u003cspan pulumi-lang-nodejs=\"`html5`\" pulumi-lang-dotnet=\"`Html5`\" pulumi-lang-go=\"`html5`\" pulumi-lang-python=\"`html5`\" pulumi-lang-yaml=\"`html5`\" pulumi-lang-java=\"`html5`\"\u003e`html5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`xtermjs`\" pulumi-lang-dotnet=\"`Xtermjs`\" pulumi-lang-go=\"`xtermjs`\" pulumi-lang-python=\"`xtermjs`\" pulumi-lang-yaml=\"`xtermjs`\" pulumi-lang-java=\"`xtermjs`\"\u003e`xtermjs`\u003c/span\u003e. You can either use the builtin java applet (VNC; deprecated and maps to html5), an external virt-viewer compatible application (SPICE), an HTML5 based vnc viewer (noVNC), or an HTML5 based console client (xtermjs). If the selected viewer is not available (e.g. SPICE not activated for the VM), the fallback is noVNC.\n"},"crsHa":{"type":"string","description":"Cluster resource scheduling setting for HA. Must be \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e).\n"},"crsHaRebalanceOnStart":{"type":"boolean","description":"Cluster resource scheduling setting for HA rebalance on start.\n"},"description":{"type":"string","description":"Datacenter description. Shown in the web-interface datacenter notes panel. This is saved as comment inside the configuration file.\n"},"emailFrom":{"type":"string","description":"email address to send notification from (default is root@$hostname).\n"},"haShutdownPolicy":{"type":"string","description":"Cluster wide HA shutdown policy (). Must be \u003cspan pulumi-lang-nodejs=\"`freeze`\" pulumi-lang-dotnet=\"`Freeze`\" pulumi-lang-go=\"`freeze`\" pulumi-lang-python=\"`freeze`\" pulumi-lang-yaml=\"`freeze`\" pulumi-lang-java=\"`freeze`\"\u003e`freeze`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`failover`\" pulumi-lang-dotnet=\"`Failover`\" pulumi-lang-go=\"`failover`\" pulumi-lang-python=\"`failover`\" pulumi-lang-yaml=\"`failover`\" pulumi-lang-java=\"`failover`\"\u003e`failover`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`migrate`\" pulumi-lang-dotnet=\"`Migrate`\" pulumi-lang-go=\"`migrate`\" pulumi-lang-python=\"`migrate`\" pulumi-lang-yaml=\"`migrate`\" pulumi-lang-java=\"`migrate`\"\u003e`migrate`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e).\n"},"httpProxy":{"type":"string","description":"Specify external http proxy which is used for downloads (example: `http://username:password@host:port/`).\n"},"keyboard":{"type":"string","description":"Default keyboard layout for vnc server. Must be \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | `de-ch` | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | `en-gb` | `en-us` | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fi`\" pulumi-lang-dotnet=\"`Fi`\" pulumi-lang-go=\"`fi`\" pulumi-lang-python=\"`fi`\" pulumi-lang-yaml=\"`fi`\" pulumi-lang-java=\"`fi`\"\u003e`fi`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | `fr-be` | `fr-ca` | `fr-ch` | \u003cspan pulumi-lang-nodejs=\"`hu`\" pulumi-lang-dotnet=\"`Hu`\" pulumi-lang-go=\"`hu`\" pulumi-lang-python=\"`hu`\" pulumi-lang-yaml=\"`hu`\" pulumi-lang-java=\"`hu`\"\u003e`hu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`is`\" pulumi-lang-dotnet=\"`Is`\" pulumi-lang-go=\"`is`\" pulumi-lang-python=\"`is`\" pulumi-lang-yaml=\"`is`\" pulumi-lang-java=\"`is`\"\u003e`is`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lt`\" pulumi-lang-dotnet=\"`Lt`\" pulumi-lang-go=\"`lt`\" pulumi-lang-python=\"`lt`\" pulumi-lang-yaml=\"`lt`\" pulumi-lang-java=\"`lt`\"\u003e`lt`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`mk`\" pulumi-lang-dotnet=\"`Mk`\" pulumi-lang-go=\"`mk`\" pulumi-lang-python=\"`mk`\" pulumi-lang-yaml=\"`mk`\" pulumi-lang-java=\"`mk`\"\u003e`mk`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nl`\" pulumi-lang-dotnet=\"`Nl`\" pulumi-lang-go=\"`nl`\" pulumi-lang-python=\"`nl`\" pulumi-lang-yaml=\"`nl`\" pulumi-lang-java=\"`nl`\"\u003e`nl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`no`\" pulumi-lang-dotnet=\"`No`\" pulumi-lang-go=\"`no`\" pulumi-lang-python=\"`no`\" pulumi-lang-yaml=\"`no`\" pulumi-lang-java=\"`no`\"\u003e`no`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pt`\" pulumi-lang-dotnet=\"`Pt`\" pulumi-lang-go=\"`pt`\" pulumi-lang-python=\"`pt`\" pulumi-lang-yaml=\"`pt`\" pulumi-lang-java=\"`pt`\"\u003e`pt`\u003c/span\u003e | `pt-br` | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e.\n"},"language":{"type":"string","description":"Default GUI language. Must be \u003cspan pulumi-lang-nodejs=\"`ca`\" pulumi-lang-dotnet=\"`Ca`\" pulumi-lang-go=\"`ca`\" pulumi-lang-python=\"`ca`\" pulumi-lang-yaml=\"`ca`\" pulumi-lang-java=\"`ca`\"\u003e`ca`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`en`\" pulumi-lang-dotnet=\"`En`\" pulumi-lang-go=\"`en`\" pulumi-lang-python=\"`en`\" pulumi-lang-yaml=\"`en`\" pulumi-lang-java=\"`en`\"\u003e`en`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`eu`\" pulumi-lang-dotnet=\"`Eu`\" pulumi-lang-go=\"`eu`\" pulumi-lang-python=\"`eu`\" pulumi-lang-yaml=\"`eu`\" pulumi-lang-java=\"`eu`\"\u003e`eu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fa`\" pulumi-lang-dotnet=\"`Fa`\" pulumi-lang-go=\"`fa`\" pulumi-lang-python=\"`fa`\" pulumi-lang-yaml=\"`fa`\" pulumi-lang-java=\"`fa`\"\u003e`fa`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`he`\" pulumi-lang-dotnet=\"`He`\" pulumi-lang-go=\"`he`\" pulumi-lang-python=\"`he`\" pulumi-lang-yaml=\"`he`\" pulumi-lang-java=\"`he`\"\u003e`he`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nb`\" pulumi-lang-dotnet=\"`Nb`\" pulumi-lang-go=\"`nb`\" pulumi-lang-python=\"`nb`\" pulumi-lang-yaml=\"`nb`\" pulumi-lang-java=\"`nb`\"\u003e`nb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nn`\" pulumi-lang-dotnet=\"`Nn`\" pulumi-lang-go=\"`nn`\" pulumi-lang-python=\"`nn`\" pulumi-lang-yaml=\"`nn`\" pulumi-lang-java=\"`nn`\"\u003e`nn`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | `pt_BR` | \u003cspan pulumi-lang-nodejs=\"`ru`\" pulumi-lang-dotnet=\"`Ru`\" pulumi-lang-go=\"`ru`\" pulumi-lang-python=\"`ru`\" pulumi-lang-yaml=\"`ru`\" pulumi-lang-java=\"`ru`\"\u003e`ru`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e | `zh_CN` | `zh_TW`.\n"},"macPrefix":{"type":"string","description":"Prefix for autogenerated MAC addresses.\n"},"maxWorkers":{"type":"integer","description":"Defines how many workers (per node) are maximal started on actions like 'stopall VMs' or task from the ha-manager.\n"},"migrationCidr":{"type":"string","description":"Cluster wide migration network CIDR.\n"},"migrationType":{"type":"string","description":"Cluster wide migration type. Must be \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`insecure`\" pulumi-lang-dotnet=\"`Insecure`\" pulumi-lang-go=\"`insecure`\" pulumi-lang-python=\"`insecure`\" pulumi-lang-yaml=\"`insecure`\" pulumi-lang-java=\"`insecure`\"\u003e`insecure`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e).\n"},"nextId":{"$ref":"#/types/proxmoxve:Cluster/OptionsNextId:OptionsNextId","description":"The ranges for the next free VM ID auto-selection pool.\n"},"notify":{"$ref":"#/types/proxmoxve:Cluster/OptionsNotify:OptionsNotify","description":"Cluster-wide notification settings.\n"}},"type":"object"}},"proxmoxve:Download/file:File":{"description":"Manages files upload using PVE download-url API. It can be fully compatible and faster replacement for image files created using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Storage.File`\" pulumi-lang-dotnet=\"`proxmoxve.Storage.File`\" pulumi-lang-go=\"`Storage.File`\" pulumi-lang-python=\"`Storage.File`\" pulumi-lang-yaml=\"`proxmoxve.Storage.File`\" pulumi-lang-java=\"`proxmoxve.Storage.File`\"\u003e`proxmoxve.Storage.File`\u003c/span\u003e. Supports images for VMs (ISO and disk images) and LXC (CT Templates).\n\n\u003e Besides the `Datastore.AllocateTemplate` privilege, this resource requires both the `Sys.Audit` and `Sys.Modify` privileges.\u003cbr\u003e\u003cbr\u003e\nFor more details, see the [`download-url`](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/storage/{storage}/download-url) API documentation under the \"Required permissions\" section.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst release20231228Debian12BookwormQcow2Img = new proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64-20231228-1609.img\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum: \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksumAlgorithm: \"sha512\",\n});\nconst release20231228Debian12BookwormQcow2 = new proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2\", {\n contentType: \"import\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64-20231228-1609.qcow2\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum: \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksumAlgorithm: \"sha512\",\n});\nconst latestDebian12BookwormQcow2Img = new proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64.qcow2.img\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n});\nconst latestDebian12BookwormQcow2 = new proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2\", {\n contentType: \"import\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64.qcow2\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n});\nconst latestUbuntu22JammyQcow2Img = new proxmoxve.download.File(\"latest_ubuntu_22_jammy_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\",\n});\nconst latestStaticUbuntu24NobleQcow2Img = new proxmoxve.download.File(\"latest_static_ubuntu_24_noble_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\",\n overwrite: false,\n});\nconst release20231211Ubuntu22JammyLxcImg = new proxmoxve.download.File(\"release_20231211_ubuntu_22_jammy_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\",\n checksum: \"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\",\n checksumAlgorithm: \"sha256\",\n uploadTimeout: 4444,\n});\nconst latestUbuntu22JammyLxcImg = new proxmoxve.download.File(\"latest_ubuntu_22_jammy_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nrelease20231228_debian12_bookworm_qcow2_img = proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64-20231228-1609.img\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum=\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksum_algorithm=\"sha512\")\nrelease20231228_debian12_bookworm_qcow2 = proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2\",\n content_type=\"import\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64-20231228-1609.qcow2\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum=\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksum_algorithm=\"sha512\")\nlatest_debian12_bookworm_qcow2_img = proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64.qcow2.img\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\nlatest_debian12_bookworm_qcow2 = proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2\",\n content_type=\"import\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64.qcow2\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\nlatest_ubuntu22_jammy_qcow2_img = proxmoxve.download.File(\"latest_ubuntu_22_jammy_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\")\nlatest_static_ubuntu24_noble_qcow2_img = proxmoxve.download.File(\"latest_static_ubuntu_24_noble_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\",\n overwrite=False)\nrelease20231211_ubuntu22_jammy_lxc_img = proxmoxve.download.File(\"release_20231211_ubuntu_22_jammy_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\",\n checksum=\"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\",\n checksum_algorithm=\"sha256\",\n upload_timeout=4444)\nlatest_ubuntu22_jammy_lxc_img = proxmoxve.download.File(\"latest_ubuntu_22_jammy_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var release20231228Debian12BookwormQcow2Img = new ProxmoxVE.Download.File(\"release_20231228_debian_12_bookworm_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64-20231228-1609.img\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n Checksum = \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n ChecksumAlgorithm = \"sha512\",\n });\n\n var release20231228Debian12BookwormQcow2 = new ProxmoxVE.Download.File(\"release_20231228_debian_12_bookworm_qcow2\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64-20231228-1609.qcow2\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n Checksum = \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n ChecksumAlgorithm = \"sha512\",\n });\n\n var latestDebian12BookwormQcow2Img = new ProxmoxVE.Download.File(\"latest_debian_12_bookworm_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64.qcow2.img\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n });\n\n var latestDebian12BookwormQcow2 = new ProxmoxVE.Download.File(\"latest_debian_12_bookworm_qcow2\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64.qcow2\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n });\n\n var latestUbuntu22JammyQcow2Img = new ProxmoxVE.Download.File(\"latest_ubuntu_22_jammy_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\",\n });\n\n var latestStaticUbuntu24NobleQcow2Img = new ProxmoxVE.Download.File(\"latest_static_ubuntu_24_noble_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\",\n Overwrite = false,\n });\n\n var release20231211Ubuntu22JammyLxcImg = new ProxmoxVE.Download.File(\"release_20231211_ubuntu_22_jammy_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\",\n Checksum = \"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\",\n ChecksumAlgorithm = \"sha256\",\n UploadTimeout = 4444,\n });\n\n var latestUbuntu22JammyLxcImg = new ProxmoxVE.Download.File(\"latest_ubuntu_22_jammy_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/download\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := download.NewFile(ctx, \"release_20231228_debian_12_bookworm_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64-20231228-1609.img\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\"),\n\t\t\tChecksum: pulumi.String(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\"),\n\t\t\tChecksumAlgorithm: pulumi.String(\"sha512\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"release_20231228_debian_12_bookworm_qcow2\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64-20231228-1609.qcow2\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\"),\n\t\t\tChecksum: pulumi.String(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\"),\n\t\t\tChecksumAlgorithm: pulumi.String(\"sha512\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_debian_12_bookworm_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64.qcow2.img\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_debian_12_bookworm_qcow2\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64.qcow2\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_ubuntu_22_jammy_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_static_ubuntu_24_noble_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\"),\n\t\t\tOverwrite: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"release_20231211_ubuntu_22_jammy_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\"),\n\t\t\tChecksum: pulumi.String(\"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\"),\n\t\t\tChecksumAlgorithm: pulumi.String(\"sha256\"),\n\t\t\tUploadTimeout: pulumi.Int(4444),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_ubuntu_22_jammy_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Download.File;\nimport io.muehlbachler.pulumi.proxmoxve.Download.FileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var release20231228Debian12BookwormQcow2Img = new File(\"release20231228Debian12BookwormQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64-20231228-1609.img\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\")\n .checksum(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\")\n .checksumAlgorithm(\"sha512\")\n .build());\n\n var release20231228Debian12BookwormQcow2 = new File(\"release20231228Debian12BookwormQcow2\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64-20231228-1609.qcow2\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\")\n .checksum(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\")\n .checksumAlgorithm(\"sha512\")\n .build());\n\n var latestDebian12BookwormQcow2Img = new File(\"latestDebian12BookwormQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64.qcow2.img\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\n .build());\n\n var latestDebian12BookwormQcow2 = new File(\"latestDebian12BookwormQcow2\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64.qcow2\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\n .build());\n\n var latestUbuntu22JammyQcow2Img = new File(\"latestUbuntu22JammyQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\")\n .build());\n\n var latestStaticUbuntu24NobleQcow2Img = new File(\"latestStaticUbuntu24NobleQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\")\n .overwrite(false)\n .build());\n\n var release20231211Ubuntu22JammyLxcImg = new File(\"release20231211Ubuntu22JammyLxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\")\n .checksum(\"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\")\n .checksumAlgorithm(\"sha256\")\n .uploadTimeout(4444)\n .build());\n\n var latestUbuntu22JammyLxcImg = new File(\"latestUbuntu22JammyLxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n release20231228Debian12BookwormQcow2Img:\n type: proxmoxve:Download:File\n name: release_20231228_debian_12_bookworm_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n fileName: debian-12-generic-amd64-20231228-1609.img\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\n checksum: d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\n checksumAlgorithm: sha512\n release20231228Debian12BookwormQcow2:\n type: proxmoxve:Download:File\n name: release_20231228_debian_12_bookworm_qcow2\n properties:\n contentType: import\n datastoreId: local\n fileName: debian-12-generic-amd64-20231228-1609.qcow2\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\n checksum: d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\n checksumAlgorithm: sha512\n latestDebian12BookwormQcow2Img:\n type: proxmoxve:Download:File\n name: latest_debian_12_bookworm_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n fileName: debian-12-generic-amd64.qcow2.img\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\n latestDebian12BookwormQcow2:\n type: proxmoxve:Download:File\n name: latest_debian_12_bookworm_qcow2\n properties:\n contentType: import\n datastoreId: local\n fileName: debian-12-generic-amd64.qcow2\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\n latestUbuntu22JammyQcow2Img:\n type: proxmoxve:Download:File\n name: latest_ubuntu_22_jammy_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\n latestStaticUbuntu24NobleQcow2Img:\n type: proxmoxve:Download:File\n name: latest_static_ubuntu_24_noble_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\n overwrite: false\n release20231211Ubuntu22JammyLxcImg:\n type: proxmoxve:Download:File\n name: release_20231211_ubuntu_22_jammy_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\n checksum: c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\n checksumAlgorithm: sha256\n uploadTimeout: 4444\n latestUbuntu22JammyLxcImg:\n type: proxmoxve:Download:File\n name: latest_ubuntu_22_jammy_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"checksum":{"type":"string","description":"The expected checksum of the file.\n"},"checksumAlgorithm":{"type":"string","description":"The algorithm to calculate the checksum of the file. Must be \u003cspan pulumi-lang-nodejs=\"`md5`\" pulumi-lang-dotnet=\"`Md5`\" pulumi-lang-go=\"`md5`\" pulumi-lang-python=\"`md5`\" pulumi-lang-yaml=\"`md5`\" pulumi-lang-java=\"`md5`\"\u003e`md5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha1`\" pulumi-lang-dotnet=\"`Sha1`\" pulumi-lang-go=\"`sha1`\" pulumi-lang-python=\"`sha1`\" pulumi-lang-yaml=\"`sha1`\" pulumi-lang-java=\"`sha1`\"\u003e`sha1`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha224`\" pulumi-lang-dotnet=\"`Sha224`\" pulumi-lang-go=\"`sha224`\" pulumi-lang-python=\"`sha224`\" pulumi-lang-yaml=\"`sha224`\" pulumi-lang-java=\"`sha224`\"\u003e`sha224`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha256`\" pulumi-lang-dotnet=\"`Sha256`\" pulumi-lang-go=\"`sha256`\" pulumi-lang-python=\"`sha256`\" pulumi-lang-yaml=\"`sha256`\" pulumi-lang-java=\"`sha256`\"\u003e`sha256`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha384`\" pulumi-lang-dotnet=\"`Sha384`\" pulumi-lang-go=\"`sha384`\" pulumi-lang-python=\"`sha384`\" pulumi-lang-yaml=\"`sha384`\" pulumi-lang-java=\"`sha384`\"\u003e`sha384`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha512`\" pulumi-lang-dotnet=\"`Sha512`\" pulumi-lang-go=\"`sha512`\" pulumi-lang-python=\"`sha512`\" pulumi-lang-yaml=\"`sha512`\" pulumi-lang-java=\"`sha512`\"\u003e`sha512`\u003c/span\u003e.\n"},"contentType":{"type":"string","description":"The file content type. Must be \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e for VM images or \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e for LXC images.\n"},"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"decompressionAlgorithm":{"type":"string","description":"Decompress the downloaded file using the specified compression algorithm. Must be one of \u003cspan pulumi-lang-nodejs=\"`gz`\" pulumi-lang-dotnet=\"`Gz`\" pulumi-lang-go=\"`gz`\" pulumi-lang-python=\"`gz`\" pulumi-lang-yaml=\"`gz`\" pulumi-lang-java=\"`gz`\"\u003e`gz`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lzo`\" pulumi-lang-dotnet=\"`Lzo`\" pulumi-lang-go=\"`lzo`\" pulumi-lang-python=\"`lzo`\" pulumi-lang-yaml=\"`lzo`\" pulumi-lang-java=\"`lzo`\"\u003e`lzo`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`zst`\" pulumi-lang-dotnet=\"`Zst`\" pulumi-lang-go=\"`zst`\" pulumi-lang-python=\"`zst`\" pulumi-lang-yaml=\"`zst`\" pulumi-lang-java=\"`zst`\"\u003e`zst`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`bz2`\" pulumi-lang-dotnet=\"`Bz2`\" pulumi-lang-go=\"`bz2`\" pulumi-lang-python=\"`bz2`\" pulumi-lang-yaml=\"`bz2`\" pulumi-lang-java=\"`bz2`\"\u003e`bz2`\u003c/span\u003e.\n"},"fileName":{"type":"string","description":"The file name. If not provided, it is calculated using \u003cspan pulumi-lang-nodejs=\"`url`\" pulumi-lang-dotnet=\"`Url`\" pulumi-lang-go=\"`url`\" pulumi-lang-python=\"`url`\" pulumi-lang-yaml=\"`url`\" pulumi-lang-java=\"`url`\"\u003e`url`\u003c/span\u003e. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and file size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the file already exists, an error will be returned.\n"},"size":{"type":"integer","description":"The file size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The file download timeout seconds. Default is 600 (10min).\n"},"url":{"type":"string","description":"The URL to download the file from. Must match regex: `https?://.*`.\n"},"verify":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, no SSL/TLS certificates will be verified.\n"}},"required":["contentType","datastoreId","fileName","nodeName","overwrite","overwriteUnmanaged","size","uploadTimeout","url","verify"],"inputProperties":{"checksum":{"type":"string","description":"The expected checksum of the file.\n"},"checksumAlgorithm":{"type":"string","description":"The algorithm to calculate the checksum of the file. Must be \u003cspan pulumi-lang-nodejs=\"`md5`\" pulumi-lang-dotnet=\"`Md5`\" pulumi-lang-go=\"`md5`\" pulumi-lang-python=\"`md5`\" pulumi-lang-yaml=\"`md5`\" pulumi-lang-java=\"`md5`\"\u003e`md5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha1`\" pulumi-lang-dotnet=\"`Sha1`\" pulumi-lang-go=\"`sha1`\" pulumi-lang-python=\"`sha1`\" pulumi-lang-yaml=\"`sha1`\" pulumi-lang-java=\"`sha1`\"\u003e`sha1`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha224`\" pulumi-lang-dotnet=\"`Sha224`\" pulumi-lang-go=\"`sha224`\" pulumi-lang-python=\"`sha224`\" pulumi-lang-yaml=\"`sha224`\" pulumi-lang-java=\"`sha224`\"\u003e`sha224`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha256`\" pulumi-lang-dotnet=\"`Sha256`\" pulumi-lang-go=\"`sha256`\" pulumi-lang-python=\"`sha256`\" pulumi-lang-yaml=\"`sha256`\" pulumi-lang-java=\"`sha256`\"\u003e`sha256`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha384`\" pulumi-lang-dotnet=\"`Sha384`\" pulumi-lang-go=\"`sha384`\" pulumi-lang-python=\"`sha384`\" pulumi-lang-yaml=\"`sha384`\" pulumi-lang-java=\"`sha384`\"\u003e`sha384`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha512`\" pulumi-lang-dotnet=\"`Sha512`\" pulumi-lang-go=\"`sha512`\" pulumi-lang-python=\"`sha512`\" pulumi-lang-yaml=\"`sha512`\" pulumi-lang-java=\"`sha512`\"\u003e`sha512`\u003c/span\u003e.\n"},"contentType":{"type":"string","description":"The file content type. Must be \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e for VM images or \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e for LXC images.\n"},"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"decompressionAlgorithm":{"type":"string","description":"Decompress the downloaded file using the specified compression algorithm. Must be one of \u003cspan pulumi-lang-nodejs=\"`gz`\" pulumi-lang-dotnet=\"`Gz`\" pulumi-lang-go=\"`gz`\" pulumi-lang-python=\"`gz`\" pulumi-lang-yaml=\"`gz`\" pulumi-lang-java=\"`gz`\"\u003e`gz`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lzo`\" pulumi-lang-dotnet=\"`Lzo`\" pulumi-lang-go=\"`lzo`\" pulumi-lang-python=\"`lzo`\" pulumi-lang-yaml=\"`lzo`\" pulumi-lang-java=\"`lzo`\"\u003e`lzo`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`zst`\" pulumi-lang-dotnet=\"`Zst`\" pulumi-lang-go=\"`zst`\" pulumi-lang-python=\"`zst`\" pulumi-lang-yaml=\"`zst`\" pulumi-lang-java=\"`zst`\"\u003e`zst`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`bz2`\" pulumi-lang-dotnet=\"`Bz2`\" pulumi-lang-go=\"`bz2`\" pulumi-lang-python=\"`bz2`\" pulumi-lang-yaml=\"`bz2`\" pulumi-lang-java=\"`bz2`\"\u003e`bz2`\u003c/span\u003e.\n"},"fileName":{"type":"string","description":"The file name. If not provided, it is calculated using \u003cspan pulumi-lang-nodejs=\"`url`\" pulumi-lang-dotnet=\"`Url`\" pulumi-lang-go=\"`url`\" pulumi-lang-python=\"`url`\" pulumi-lang-yaml=\"`url`\" pulumi-lang-java=\"`url`\"\u003e`url`\u003c/span\u003e. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and file size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the file already exists, an error will be returned.\n"},"uploadTimeout":{"type":"integer","description":"The file download timeout seconds. Default is 600 (10min).\n"},"url":{"type":"string","description":"The URL to download the file from. Must match regex: `https?://.*`.\n"},"verify":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, no SSL/TLS certificates will be verified.\n"}},"requiredInputs":["contentType","datastoreId","nodeName","url"],"stateInputs":{"description":"Input properties used for looking up and filtering File resources.\n","properties":{"checksum":{"type":"string","description":"The expected checksum of the file.\n"},"checksumAlgorithm":{"type":"string","description":"The algorithm to calculate the checksum of the file. Must be \u003cspan pulumi-lang-nodejs=\"`md5`\" pulumi-lang-dotnet=\"`Md5`\" pulumi-lang-go=\"`md5`\" pulumi-lang-python=\"`md5`\" pulumi-lang-yaml=\"`md5`\" pulumi-lang-java=\"`md5`\"\u003e`md5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha1`\" pulumi-lang-dotnet=\"`Sha1`\" pulumi-lang-go=\"`sha1`\" pulumi-lang-python=\"`sha1`\" pulumi-lang-yaml=\"`sha1`\" pulumi-lang-java=\"`sha1`\"\u003e`sha1`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha224`\" pulumi-lang-dotnet=\"`Sha224`\" pulumi-lang-go=\"`sha224`\" pulumi-lang-python=\"`sha224`\" pulumi-lang-yaml=\"`sha224`\" pulumi-lang-java=\"`sha224`\"\u003e`sha224`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha256`\" pulumi-lang-dotnet=\"`Sha256`\" pulumi-lang-go=\"`sha256`\" pulumi-lang-python=\"`sha256`\" pulumi-lang-yaml=\"`sha256`\" pulumi-lang-java=\"`sha256`\"\u003e`sha256`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha384`\" pulumi-lang-dotnet=\"`Sha384`\" pulumi-lang-go=\"`sha384`\" pulumi-lang-python=\"`sha384`\" pulumi-lang-yaml=\"`sha384`\" pulumi-lang-java=\"`sha384`\"\u003e`sha384`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha512`\" pulumi-lang-dotnet=\"`Sha512`\" pulumi-lang-go=\"`sha512`\" pulumi-lang-python=\"`sha512`\" pulumi-lang-yaml=\"`sha512`\" pulumi-lang-java=\"`sha512`\"\u003e`sha512`\u003c/span\u003e.\n"},"contentType":{"type":"string","description":"The file content type. Must be \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e for VM images or \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e for LXC images.\n"},"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"decompressionAlgorithm":{"type":"string","description":"Decompress the downloaded file using the specified compression algorithm. Must be one of \u003cspan pulumi-lang-nodejs=\"`gz`\" pulumi-lang-dotnet=\"`Gz`\" pulumi-lang-go=\"`gz`\" pulumi-lang-python=\"`gz`\" pulumi-lang-yaml=\"`gz`\" pulumi-lang-java=\"`gz`\"\u003e`gz`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lzo`\" pulumi-lang-dotnet=\"`Lzo`\" pulumi-lang-go=\"`lzo`\" pulumi-lang-python=\"`lzo`\" pulumi-lang-yaml=\"`lzo`\" pulumi-lang-java=\"`lzo`\"\u003e`lzo`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`zst`\" pulumi-lang-dotnet=\"`Zst`\" pulumi-lang-go=\"`zst`\" pulumi-lang-python=\"`zst`\" pulumi-lang-yaml=\"`zst`\" pulumi-lang-java=\"`zst`\"\u003e`zst`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`bz2`\" pulumi-lang-dotnet=\"`Bz2`\" pulumi-lang-go=\"`bz2`\" pulumi-lang-python=\"`bz2`\" pulumi-lang-yaml=\"`bz2`\" pulumi-lang-java=\"`bz2`\"\u003e`bz2`\u003c/span\u003e.\n"},"fileName":{"type":"string","description":"The file name. If not provided, it is calculated using \u003cspan pulumi-lang-nodejs=\"`url`\" pulumi-lang-dotnet=\"`Url`\" pulumi-lang-go=\"`url`\" pulumi-lang-python=\"`url`\" pulumi-lang-yaml=\"`url`\" pulumi-lang-java=\"`url`\"\u003e`url`\u003c/span\u003e. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and file size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the file already exists, an error will be returned.\n"},"size":{"type":"integer","description":"The file size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The file download timeout seconds. Default is 600 (10min).\n"},"url":{"type":"string","description":"The URL to download the file from. Must match regex: `https?://.*`.\n"},"verify":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, no SSL/TLS certificates will be verified.\n"}},"type":"object"}},"proxmoxve:HA/hAGroup:HAGroup":{"description":"Manages a High Availability group in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.ha.HAGroup(\"example\", {\n group: \"example\",\n comment: \"This is a comment.\",\n nodes: {\n node1: null,\n node2: 2,\n node3: 1,\n },\n restricted: true,\n noFailback: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.ha.HAGroup(\"example\",\n group=\"example\",\n comment=\"This is a comment.\",\n nodes={\n \"node1\": None,\n \"node2\": 2,\n \"node3\": 1,\n },\n restricted=True,\n no_failback=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.HA.HAGroup(\"example\", new()\n {\n Group = \"example\",\n Comment = \"This is a comment.\",\n Nodes = \n {\n { \"node1\", null },\n { \"node2\", 2 },\n { \"node3\", 1 },\n },\n Restricted = true,\n NoFailback = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ha.NewHAGroup(ctx, \"example\", \u0026ha.HAGroupArgs{\n\t\t\tGroup: pulumi.String(\"example\"),\n\t\t\tComment: pulumi.String(\"This is a comment.\"),\n\t\t\tNodes: pulumi.IntMap{\n\t\t\t\t\"node1\": nil,\n\t\t\t\t\"node2\": pulumi.Int(2),\n\t\t\t\t\"node3\": pulumi.Int(1),\n\t\t\t},\n\t\t\tRestricted: pulumi.Bool(true),\n\t\t\tNoFailback: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAGroup;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new HAGroup(\"example\", HAGroupArgs.builder()\n .group(\"example\")\n .comment(\"This is a comment.\")\n .nodes(Map.ofEntries(\n Map.entry(\"node1\", null),\n Map.entry(\"node2\", 2),\n Map.entry(\"node3\", 1)\n ))\n .restricted(true)\n .noFailback(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:HA:HAGroup\n properties:\n group: example\n comment: This is a comment.\n nodes:\n node1: null\n node2: 2\n node3: 1\n restricted: true\n noFailback: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nHA groups can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:HA/hAGroup:HAGroup example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment associated with this group\n"},"group":{"type":"string","description":"The identifier of the High Availability group to manage.\n"},"noFailback":{"type":"boolean","description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"nodes":{"type":"object","additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n"},"restricted":{"type":"boolean","description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"required":["group","noFailback","nodes","restricted"],"inputProperties":{"comment":{"type":"string","description":"The comment associated with this group\n"},"group":{"type":"string","description":"The identifier of the High Availability group to manage.\n"},"noFailback":{"type":"boolean","description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"nodes":{"type":"object","additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n"},"restricted":{"type":"boolean","description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"requiredInputs":["group","nodes"],"stateInputs":{"description":"Input properties used for looking up and filtering HAGroup resources.\n","properties":{"comment":{"type":"string","description":"The comment associated with this group\n"},"group":{"type":"string","description":"The identifier of the High Availability group to manage.\n"},"noFailback":{"type":"boolean","description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"nodes":{"type":"object","additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n"},"restricted":{"type":"boolean","description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:HA/hAResource:HAResource":{"description":"Manages Proxmox HA resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.ha.HAResource(\"example\", {\n resourceId: \"vm:123\",\n state: \"started\",\n group: \"example\",\n comment: \"Managed by Pulumi\",\n}, {\n dependsOn: [exampleProxmoxVirtualEnvironmentHagroup],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.ha.HAResource(\"example\",\n resource_id=\"vm:123\",\n state=\"started\",\n group=\"example\",\n comment=\"Managed by Pulumi\",\n opts = pulumi.ResourceOptions(depends_on=[example_proxmox_virtual_environment_hagroup]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.HA.HAResource(\"example\", new()\n {\n ResourceId = \"vm:123\",\n State = \"started\",\n Group = \"example\",\n Comment = \"Managed by Pulumi\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleProxmoxVirtualEnvironmentHagroup,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ha.NewHAResource(ctx, \"example\", \u0026ha.HAResourceArgs{\n\t\t\tResourceId: pulumi.String(\"vm:123\"),\n\t\t\tState: pulumi.String(\"started\"),\n\t\t\tGroup: pulumi.String(\"example\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleProxmoxVirtualEnvironmentHagroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAResource;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAResourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new HAResource(\"example\", HAResourceArgs.builder()\n .resourceId(\"vm:123\")\n .state(\"started\")\n .group(\"example\")\n .comment(\"Managed by Pulumi\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(exampleProxmoxVirtualEnvironmentHagroup)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:HA:HAResource\n properties:\n resourceId: vm:123\n state: started\n group: example\n comment: Managed by Pulumi\n options:\n dependsOn:\n - ${exampleProxmoxVirtualEnvironmentHagroup}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nHA resources can be imported using their identifiers, e.g.:\n\n```sh\n$ pulumi import proxmoxve:HA/hAResource:HAResource example vm:123\n```\n\n","properties":{"comment":{"type":"string","description":"The comment associated with this resource.\n"},"group":{"type":"string","description":"The identifier of the High Availability group this resource is a member of.\n"},"maxRelocate":{"type":"integer","description":"The maximal number of relocation attempts.\n"},"maxRestart":{"type":"integer","description":"The maximal number of restart attempts.\n"},"resourceId":{"type":"string","description":"The Proxmox HA resource identifier\n"},"state":{"type":"string","description":"The desired state of the resource.\n"},"type":{"type":"string","description":"The type of HA resources to create. If unset, it will be deduced from the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e.\n"}},"required":["resourceId","state","type"],"inputProperties":{"comment":{"type":"string","description":"The comment associated with this resource.\n"},"group":{"type":"string","description":"The identifier of the High Availability group this resource is a member of.\n"},"maxRelocate":{"type":"integer","description":"The maximal number of relocation attempts.\n"},"maxRestart":{"type":"integer","description":"The maximal number of restart attempts.\n"},"resourceId":{"type":"string","description":"The Proxmox HA resource identifier\n"},"state":{"type":"string","description":"The desired state of the resource.\n"},"type":{"type":"string","description":"The type of HA resources to create. If unset, it will be deduced from the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e.\n"}},"requiredInputs":["resourceId"],"stateInputs":{"description":"Input properties used for looking up and filtering HAResource resources.\n","properties":{"comment":{"type":"string","description":"The comment associated with this resource.\n"},"group":{"type":"string","description":"The identifier of the High Availability group this resource is a member of.\n"},"maxRelocate":{"type":"integer","description":"The maximal number of relocation attempts.\n"},"maxRestart":{"type":"integer","description":"The maximal number of restart attempts.\n"},"resourceId":{"type":"string","description":"The Proxmox HA resource identifier\n"},"state":{"type":"string","description":"The desired state of the resource.\n"},"type":{"type":"string","description":"The type of HA resources to create. If unset, it will be deduced from the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:Hardware/mapping/dir:Dir":{"description":"Manages a directory mapping in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.hardware.mapping.Dir(\"example\", {\n comment: \"This is a comment\",\n name: \"example\",\n maps: [{\n node: \"pve\",\n path: \"/mnt/data\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.hardware.mapping.Dir(\"example\",\n comment=\"This is a comment\",\n name=\"example\",\n maps=[{\n \"node\": \"pve\",\n \"path\": \"/mnt/data\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Hardware.Mapping.Dir(\"example\", new()\n {\n Comment = \"This is a comment\",\n Name = \"example\",\n Maps = new[]\n {\n new ProxmoxVE.Hardware.Mapping.Inputs.DirMapArgs\n {\n Node = \"pve\",\n Path = \"/mnt/data\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.NewDir(ctx, \"example\", \u0026hardware.DirArgs{\n\t\t\tComment: pulumi.String(\"This is a comment\"),\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tMaps: mapping.DirMapTypeArray{\n\t\t\t\t\u0026mapping.DirMapTypeArgs{\n\t\t\t\t\tNode: pulumi.String(\"pve\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/data\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.Dir;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.DirArgs;\nimport com.pulumi.proxmoxve.Hardware.inputs.DirMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Dir(\"example\", DirArgs.builder()\n .comment(\"This is a comment\")\n .name(\"example\")\n .maps(DirMapArgs.builder()\n .node(\"pve\")\n .path(\"/mnt/data\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Hardware/mapping:Dir\n properties:\n comment: This is a comment\n name: example\n maps:\n - node: pve\n path: /mnt/data\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nA directory mapping can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Hardware/mapping/dir:Dir example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment of this directory mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/DirMap:DirMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this directory mapping.\n"}},"required":["maps","name"],"inputProperties":{"comment":{"type":"string","description":"The comment of this directory mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/DirMap:DirMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this directory mapping.\n"}},"requiredInputs":["maps"],"stateInputs":{"description":"Input properties used for looking up and filtering Dir resources.\n","properties":{"comment":{"type":"string","description":"The comment of this directory mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/DirMap:DirMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this directory mapping.\n"}},"type":"object"}},"proxmoxve:Hardware/mapping/pci:Pci":{"description":"Manages a PCI hardware mapping in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.hardware.mapping.Pci(\"example\", {\n comment: \"This is a comment\",\n name: \"example\",\n maps: [{\n comment: \"This is a device specific comment\",\n id: \"8086:5916\",\n iommuGroup: 0,\n node: \"pve\",\n path: \"0000:00:02.0\",\n subsystemId: \"8086:2068\",\n }],\n mediatedDevices: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.hardware.mapping.Pci(\"example\",\n comment=\"This is a comment\",\n name=\"example\",\n maps=[{\n \"comment\": \"This is a device specific comment\",\n \"id\": \"8086:5916\",\n \"iommu_group\": 0,\n \"node\": \"pve\",\n \"path\": \"0000:00:02.0\",\n \"subsystem_id\": \"8086:2068\",\n }],\n mediated_devices=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Hardware.Mapping.Pci(\"example\", new()\n {\n Comment = \"This is a comment\",\n Name = \"example\",\n Maps = new[]\n {\n new ProxmoxVE.Hardware.Mapping.Inputs.PciMapArgs\n {\n Comment = \"This is a device specific comment\",\n Id = \"8086:5916\",\n IommuGroup = 0,\n Node = \"pve\",\n Path = \"0000:00:02.0\",\n SubsystemId = \"8086:2068\",\n },\n },\n MediatedDevices = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.NewPci(ctx, \"example\", \u0026hardware.PciArgs{\n\t\t\tComment: pulumi.String(\"This is a comment\"),\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tMaps: mapping.PciMapTypeArray{\n\t\t\t\t\u0026mapping.PciMapTypeArgs{\n\t\t\t\t\tComment: pulumi.String(\"This is a device specific comment\"),\n\t\t\t\t\tId: pulumi.String(\"8086:5916\"),\n\t\t\t\t\tIommuGroup: pulumi.Int(0),\n\t\t\t\t\tNode: pulumi.String(\"pve\"),\n\t\t\t\t\tPath: pulumi.String(\"0000:00:02.0\"),\n\t\t\t\t\tSubsystemId: pulumi.String(\"8086:2068\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMediatedDevices: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.Pci;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.PciArgs;\nimport com.pulumi.proxmoxve.Hardware.inputs.PciMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Pci(\"example\", PciArgs.builder()\n .comment(\"This is a comment\")\n .name(\"example\")\n .maps(PciMapArgs.builder()\n .comment(\"This is a device specific comment\")\n .id(\"8086:5916\")\n .iommuGroup(0)\n .node(\"pve\")\n .path(\"0000:00:02.0\")\n .subsystemId(\"8086:2068\")\n .build())\n .mediatedDevices(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Hardware/mapping:Pci\n properties:\n comment: This is a comment\n name: example\n maps:\n - comment: This is a device specific comment\n id: 8086:5916\n iommuGroup: 0\n node: pve\n path: 0000:00:02.0\n subsystemId: 8086:2068\n mediatedDevices: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nA PCI hardware mapping can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Hardware/mapping/pci:Pci example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment of this PCI hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/PciMap:PciMap"},"description":"The actual map of devices for the PCI hardware mapping.\n"},"mediatedDevices":{"type":"boolean","description":"Indicates whether to enable mediated devices.\n"},"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"required":["maps","mediatedDevices","name"],"inputProperties":{"comment":{"type":"string","description":"The comment of this PCI hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/PciMap:PciMap"},"description":"The actual map of devices for the PCI hardware mapping.\n"},"mediatedDevices":{"type":"boolean","description":"Indicates whether to enable mediated devices.\n"},"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"requiredInputs":["maps"],"stateInputs":{"description":"Input properties used for looking up and filtering Pci resources.\n","properties":{"comment":{"type":"string","description":"The comment of this PCI hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/PciMap:PciMap"},"description":"The actual map of devices for the PCI hardware mapping.\n"},"mediatedDevices":{"type":"boolean","description":"Indicates whether to enable mediated devices.\n"},"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"type":"object"}},"proxmoxve:Hardware/mapping/usb:Usb":{"description":"Manages a USB hardware mapping in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.hardware.mapping.Usb(\"example\", {\n comment: \"This is a comment\",\n name: \"example\",\n maps: [{\n comment: \"This is a device specific comment\",\n id: \"8087:0a2b\",\n node: \"pve\",\n path: \"1-8.2\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.hardware.mapping.Usb(\"example\",\n comment=\"This is a comment\",\n name=\"example\",\n maps=[{\n \"comment\": \"This is a device specific comment\",\n \"id\": \"8087:0a2b\",\n \"node\": \"pve\",\n \"path\": \"1-8.2\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Hardware.Mapping.Usb(\"example\", new()\n {\n Comment = \"This is a comment\",\n Name = \"example\",\n Maps = new[]\n {\n new ProxmoxVE.Hardware.Mapping.Inputs.UsbMapArgs\n {\n Comment = \"This is a device specific comment\",\n Id = \"8087:0a2b\",\n Node = \"pve\",\n Path = \"1-8.2\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.NewUsb(ctx, \"example\", \u0026hardware.UsbArgs{\n\t\t\tComment: pulumi.String(\"This is a comment\"),\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tMaps: mapping.UsbMapTypeArray{\n\t\t\t\t\u0026mapping.UsbMapTypeArgs{\n\t\t\t\t\tComment: pulumi.String(\"This is a device specific comment\"),\n\t\t\t\t\tId: pulumi.String(\"8087:0a2b\"),\n\t\t\t\t\tNode: pulumi.String(\"pve\"),\n\t\t\t\t\tPath: pulumi.String(\"1-8.2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.Usb;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.UsbArgs;\nimport com.pulumi.proxmoxve.Hardware.inputs.UsbMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Usb(\"example\", UsbArgs.builder()\n .comment(\"This is a comment\")\n .name(\"example\")\n .maps(UsbMapArgs.builder()\n .comment(\"This is a device specific comment\")\n .id(\"8087:0a2b\")\n .node(\"pve\")\n .path(\"1-8.2\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Hardware/mapping:Usb\n properties:\n comment: This is a comment\n name: example\n maps:\n - comment: This is a device specific comment\n id: 8087:0a2b\n node: pve\n path: 1-8.2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nA USB hardware mapping can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Hardware/mapping/usb:Usb example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment of this USB hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/UsbMap:UsbMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this hardware mapping.\n"}},"required":["maps","name"],"inputProperties":{"comment":{"type":"string","description":"The comment of this USB hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/UsbMap:UsbMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this hardware mapping.\n"}},"requiredInputs":["maps"],"stateInputs":{"description":"Input properties used for looking up and filtering Usb resources.\n","properties":{"comment":{"type":"string","description":"The comment of this USB hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/UsbMap:UsbMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this hardware mapping.\n"}},"type":"object"}},"proxmoxve:Metrics/metricsServer:MetricsServer":{"description":"Manages PVE metrics server.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst influxdbServer = new proxmoxve.metrics.MetricsServer(\"influxdb_server\", {\n name: \"example_influxdb_server\",\n server: \"192.168.3.2\",\n port: 8089,\n type: \"influxdb\",\n});\nconst graphiteServer = new proxmoxve.metrics.MetricsServer(\"graphite_server\", {\n name: \"example_graphite_server\",\n server: \"192.168.4.2\",\n port: 2003,\n type: \"graphite\",\n});\nconst opentelemetryServer = new proxmoxve.metrics.MetricsServer(\"opentelemetry_server\", {\n name: \"example_opentelemetry_server\",\n server: \"192.168.5.2\",\n port: 4318,\n type: \"opentelemetry\",\n opentelemetryProto: \"http\",\n opentelemetryPath: \"/v1/metrics\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ninfluxdb_server = proxmoxve.metrics.MetricsServer(\"influxdb_server\",\n name=\"example_influxdb_server\",\n server=\"192.168.3.2\",\n port=8089,\n type=\"influxdb\")\ngraphite_server = proxmoxve.metrics.MetricsServer(\"graphite_server\",\n name=\"example_graphite_server\",\n server=\"192.168.4.2\",\n port=2003,\n type=\"graphite\")\nopentelemetry_server = proxmoxve.metrics.MetricsServer(\"opentelemetry_server\",\n name=\"example_opentelemetry_server\",\n server=\"192.168.5.2\",\n port=4318,\n type=\"opentelemetry\",\n opentelemetry_proto=\"http\",\n opentelemetry_path=\"/v1/metrics\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var influxdbServer = new ProxmoxVE.Metrics.MetricsServer(\"influxdb_server\", new()\n {\n Name = \"example_influxdb_server\",\n Server = \"192.168.3.2\",\n Port = 8089,\n Type = \"influxdb\",\n });\n\n var graphiteServer = new ProxmoxVE.Metrics.MetricsServer(\"graphite_server\", new()\n {\n Name = \"example_graphite_server\",\n Server = \"192.168.4.2\",\n Port = 2003,\n Type = \"graphite\",\n });\n\n var opentelemetryServer = new ProxmoxVE.Metrics.MetricsServer(\"opentelemetry_server\", new()\n {\n Name = \"example_opentelemetry_server\",\n Server = \"192.168.5.2\",\n Port = 4318,\n Type = \"opentelemetry\",\n OpentelemetryProto = \"http\",\n OpentelemetryPath = \"/v1/metrics\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/metrics\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := metrics.NewMetricsServer(ctx, \"influxdb_server\", \u0026metrics.MetricsServerArgs{\n\t\t\tName: pulumi.String(\"example_influxdb_server\"),\n\t\t\tServer: pulumi.String(\"192.168.3.2\"),\n\t\t\tPort: pulumi.Int(8089),\n\t\t\tType: pulumi.String(\"influxdb\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = metrics.NewMetricsServer(ctx, \"graphite_server\", \u0026metrics.MetricsServerArgs{\n\t\t\tName: pulumi.String(\"example_graphite_server\"),\n\t\t\tServer: pulumi.String(\"192.168.4.2\"),\n\t\t\tPort: pulumi.Int(2003),\n\t\t\tType: pulumi.String(\"graphite\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = metrics.NewMetricsServer(ctx, \"opentelemetry_server\", \u0026metrics.MetricsServerArgs{\n\t\t\tName: pulumi.String(\"example_opentelemetry_server\"),\n\t\t\tServer: pulumi.String(\"192.168.5.2\"),\n\t\t\tPort: pulumi.Int(4318),\n\t\t\tType: pulumi.String(\"opentelemetry\"),\n\t\t\tOpentelemetryProto: pulumi.String(\"http\"),\n\t\t\tOpentelemetryPath: pulumi.String(\"/v1/metrics\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Metrics.MetricsServer;\nimport io.muehlbachler.pulumi.proxmoxve.Metrics.MetricsServerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var influxdbServer = new MetricsServer(\"influxdbServer\", MetricsServerArgs.builder()\n .name(\"example_influxdb_server\")\n .server(\"192.168.3.2\")\n .port(8089)\n .type(\"influxdb\")\n .build());\n\n var graphiteServer = new MetricsServer(\"graphiteServer\", MetricsServerArgs.builder()\n .name(\"example_graphite_server\")\n .server(\"192.168.4.2\")\n .port(2003)\n .type(\"graphite\")\n .build());\n\n var opentelemetryServer = new MetricsServer(\"opentelemetryServer\", MetricsServerArgs.builder()\n .name(\"example_opentelemetry_server\")\n .server(\"192.168.5.2\")\n .port(4318)\n .type(\"opentelemetry\")\n .opentelemetryProto(\"http\")\n .opentelemetryPath(\"/v1/metrics\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n influxdbServer:\n type: proxmoxve:Metrics:MetricsServer\n name: influxdb_server\n properties:\n name: example_influxdb_server\n server: 192.168.3.2\n port: 8089\n type: influxdb\n graphiteServer:\n type: proxmoxve:Metrics:MetricsServer\n name: graphite_server\n properties:\n name: example_graphite_server\n server: 192.168.4.2\n port: 2003\n type: graphite\n opentelemetryServer:\n type: proxmoxve:Metrics:MetricsServer\n name: opentelemetry_server\n properties:\n name: example_opentelemetry_server\n server: 192.168.5.2\n port: 4318\n type: opentelemetry\n opentelemetryProto: http\n opentelemetryPath: /v1/metrics\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n```sh\n$ pulumi import proxmoxve:Metrics/metricsServer:MetricsServer example example\n```\n\n","properties":{"disable":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable this metric server.\n"},"graphitePath":{"type":"string","description":"Root graphite path (ex: `proxmox.mycluster.mykey`).\n"},"graphiteProto":{"type":"string","description":"Protocol to send graphite data. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxApiPathPrefix":{"type":"string","description":"An API path prefix inserted between `\u003chost\u003e:\u003cport\u003e/` and `/api2/`. Can be useful if the InfluxDB service runs behind a reverse proxy.\n"},"influxBucket":{"type":"string","description":"The InfluxDB bucket/db. Only necessary when using the http v2 api.\n"},"influxDbProto":{"type":"string","description":"Protocol for InfluxDB. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxMaxBodySize":{"type":"integer","description":"InfluxDB max-body-size in bytes. Requests are batched up to this size. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`25000000`\" pulumi-lang-dotnet=\"`25000000`\" pulumi-lang-go=\"`25000000`\" pulumi-lang-python=\"`25000000`\" pulumi-lang-yaml=\"`25000000`\" pulumi-lang-java=\"`25000000`\"\u003e`25000000`\u003c/span\u003e.\n"},"influxOrganization":{"type":"string","description":"The InfluxDB organization. Only necessary when using the http v2 api. Has no meaning when using v2 compatibility api.\n"},"influxToken":{"type":"string","description":"The InfluxDB access token. Only necessary when using the http v2 api. If the v2 compatibility api is used, use `user:password` instead.\n","secret":true},"influxVerify":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e to disable certificate verification for https endpoints.\n"},"mtu":{"type":"integer","description":"MTU (maximum transmission unit) for metrics transmission over UDP. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1500`\" pulumi-lang-dotnet=\"`1500`\" pulumi-lang-go=\"`1500`\" pulumi-lang-python=\"`1500`\" pulumi-lang-yaml=\"`1500`\" pulumi-lang-java=\"`1500`\"\u003e`1500`\u003c/span\u003e (allowed \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e - \u003cspan pulumi-lang-nodejs=\"`65536`\" pulumi-lang-dotnet=\"`65536`\" pulumi-lang-go=\"`65536`\" pulumi-lang-python=\"`65536`\" pulumi-lang-yaml=\"`65536`\" pulumi-lang-java=\"`65536`\"\u003e`65536`\u003c/span\u003e).\n"},"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"},"opentelemetryPath":{"type":"string","description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n"},"opentelemetryProto":{"type":"string","description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e.\n"},"port":{"type":"integer","description":"Server network port.\n"},"server":{"type":"string","description":"Server dns name or IP address.\n"},"timeout":{"type":"integer","description":"TCP socket timeout in seconds. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e.\n"},"type":{"type":"string","description":"Plugin type. Choice is between \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n"}},"required":["name","port","server","type"],"inputProperties":{"disable":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable this metric server.\n"},"graphitePath":{"type":"string","description":"Root graphite path (ex: `proxmox.mycluster.mykey`).\n"},"graphiteProto":{"type":"string","description":"Protocol to send graphite data. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxApiPathPrefix":{"type":"string","description":"An API path prefix inserted between `\u003chost\u003e:\u003cport\u003e/` and `/api2/`. Can be useful if the InfluxDB service runs behind a reverse proxy.\n"},"influxBucket":{"type":"string","description":"The InfluxDB bucket/db. Only necessary when using the http v2 api.\n"},"influxDbProto":{"type":"string","description":"Protocol for InfluxDB. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxMaxBodySize":{"type":"integer","description":"InfluxDB max-body-size in bytes. Requests are batched up to this size. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`25000000`\" pulumi-lang-dotnet=\"`25000000`\" pulumi-lang-go=\"`25000000`\" pulumi-lang-python=\"`25000000`\" pulumi-lang-yaml=\"`25000000`\" pulumi-lang-java=\"`25000000`\"\u003e`25000000`\u003c/span\u003e.\n"},"influxOrganization":{"type":"string","description":"The InfluxDB organization. Only necessary when using the http v2 api. Has no meaning when using v2 compatibility api.\n"},"influxToken":{"type":"string","description":"The InfluxDB access token. Only necessary when using the http v2 api. If the v2 compatibility api is used, use `user:password` instead.\n","secret":true},"influxVerify":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e to disable certificate verification for https endpoints.\n"},"mtu":{"type":"integer","description":"MTU (maximum transmission unit) for metrics transmission over UDP. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1500`\" pulumi-lang-dotnet=\"`1500`\" pulumi-lang-go=\"`1500`\" pulumi-lang-python=\"`1500`\" pulumi-lang-yaml=\"`1500`\" pulumi-lang-java=\"`1500`\"\u003e`1500`\u003c/span\u003e (allowed \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e - \u003cspan pulumi-lang-nodejs=\"`65536`\" pulumi-lang-dotnet=\"`65536`\" pulumi-lang-go=\"`65536`\" pulumi-lang-python=\"`65536`\" pulumi-lang-yaml=\"`65536`\" pulumi-lang-java=\"`65536`\"\u003e`65536`\u003c/span\u003e).\n"},"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"},"opentelemetryPath":{"type":"string","description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n"},"opentelemetryProto":{"type":"string","description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e.\n"},"port":{"type":"integer","description":"Server network port.\n"},"server":{"type":"string","description":"Server dns name or IP address.\n"},"timeout":{"type":"integer","description":"TCP socket timeout in seconds. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e.\n"},"type":{"type":"string","description":"Plugin type. Choice is between \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n"}},"requiredInputs":["port","server","type"],"stateInputs":{"description":"Input properties used for looking up and filtering MetricsServer resources.\n","properties":{"disable":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable this metric server.\n"},"graphitePath":{"type":"string","description":"Root graphite path (ex: `proxmox.mycluster.mykey`).\n"},"graphiteProto":{"type":"string","description":"Protocol to send graphite data. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxApiPathPrefix":{"type":"string","description":"An API path prefix inserted between `\u003chost\u003e:\u003cport\u003e/` and `/api2/`. Can be useful if the InfluxDB service runs behind a reverse proxy.\n"},"influxBucket":{"type":"string","description":"The InfluxDB bucket/db. Only necessary when using the http v2 api.\n"},"influxDbProto":{"type":"string","description":"Protocol for InfluxDB. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxMaxBodySize":{"type":"integer","description":"InfluxDB max-body-size in bytes. Requests are batched up to this size. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`25000000`\" pulumi-lang-dotnet=\"`25000000`\" pulumi-lang-go=\"`25000000`\" pulumi-lang-python=\"`25000000`\" pulumi-lang-yaml=\"`25000000`\" pulumi-lang-java=\"`25000000`\"\u003e`25000000`\u003c/span\u003e.\n"},"influxOrganization":{"type":"string","description":"The InfluxDB organization. Only necessary when using the http v2 api. Has no meaning when using v2 compatibility api.\n"},"influxToken":{"type":"string","description":"The InfluxDB access token. Only necessary when using the http v2 api. If the v2 compatibility api is used, use `user:password` instead.\n","secret":true},"influxVerify":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e to disable certificate verification for https endpoints.\n"},"mtu":{"type":"integer","description":"MTU (maximum transmission unit) for metrics transmission over UDP. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1500`\" pulumi-lang-dotnet=\"`1500`\" pulumi-lang-go=\"`1500`\" pulumi-lang-python=\"`1500`\" pulumi-lang-yaml=\"`1500`\" pulumi-lang-java=\"`1500`\"\u003e`1500`\u003c/span\u003e (allowed \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e - \u003cspan pulumi-lang-nodejs=\"`65536`\" pulumi-lang-dotnet=\"`65536`\" pulumi-lang-go=\"`65536`\" pulumi-lang-python=\"`65536`\" pulumi-lang-yaml=\"`65536`\" pulumi-lang-java=\"`65536`\"\u003e`65536`\u003c/span\u003e).\n"},"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"},"opentelemetryPath":{"type":"string","description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n"},"opentelemetryProto":{"type":"string","description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e.\n"},"port":{"type":"integer","description":"Server network port.\n"},"server":{"type":"string","description":"Server dns name or IP address.\n"},"timeout":{"type":"integer","description":"TCP socket timeout in seconds. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e.\n"},"type":{"type":"string","description":"Plugin type. Choice is between \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:Network/firewall:Firewall":{"description":"Manages firewall options on the cluster level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.network.Firewall(\"example\", {\n enabled: false,\n ebtables: false,\n inputPolicy: \"DROP\",\n outputPolicy: \"ACCEPT\",\n forwardPolicy: \"ACCEPT\",\n logRatelimit: {\n enabled: false,\n burst: 10,\n rate: \"5/second\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.network.Firewall(\"example\",\n enabled=False,\n ebtables=False,\n input_policy=\"DROP\",\n output_policy=\"ACCEPT\",\n forward_policy=\"ACCEPT\",\n log_ratelimit={\n \"enabled\": False,\n \"burst\": 10,\n \"rate\": \"5/second\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Network.Firewall(\"example\", new()\n {\n Enabled = false,\n Ebtables = false,\n InputPolicy = \"DROP\",\n OutputPolicy = \"ACCEPT\",\n ForwardPolicy = \"ACCEPT\",\n LogRatelimit = new ProxmoxVE.Network.Inputs.FirewallLogRatelimitArgs\n {\n Enabled = false,\n Burst = 10,\n Rate = \"5/second\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewall(ctx, \"example\", \u0026network.FirewallArgs{\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tEbtables: pulumi.Bool(false),\n\t\t\tInputPolicy: pulumi.String(\"DROP\"),\n\t\t\tOutputPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tForwardPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tLogRatelimit: \u0026network.FirewallLogRatelimitArgs{\n\t\t\t\tEnabled: pulumi.Bool(false),\n\t\t\t\tBurst: pulumi.Int(10),\n\t\t\t\tRate: pulumi.String(\"5/second\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.Firewall;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallLogRatelimitArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Firewall(\"example\", FirewallArgs.builder()\n .enabled(false)\n .ebtables(false)\n .inputPolicy(\"DROP\")\n .outputPolicy(\"ACCEPT\")\n .forwardPolicy(\"ACCEPT\")\n .logRatelimit(FirewallLogRatelimitArgs.builder()\n .enabled(false)\n .burst(10)\n .rate(\"5/second\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Network:Firewall\n properties:\n enabled: false\n ebtables: false\n inputPolicy: DROP\n outputPolicy: ACCEPT\n forwardPolicy: ACCEPT\n logRatelimit:\n enabled: false\n burst: 10\n rate: 5/second\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nBe careful not to use this resource multiple times for the same node.\n\n## Import\n\nInstances can be imported without an ID, but you still need to pass one, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewall:Firewall example example\n```\n\n","properties":{"ebtables":{"type":"boolean","description":"Enable ebtables rules cluster wide.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall cluster wide.\n"},"forwardPolicy":{"type":"string","description":"The default forward policy (`ACCEPT`, `DROP`).\n"},"inputPolicy":{"type":"string","description":"The default input policy (`ACCEPT`, `DROP`, `REJECT`).\n"},"logRatelimit":{"$ref":"#/types/proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit","description":"The log rate limit.\n"},"outputPolicy":{"type":"string","description":"The default output policy (`ACCEPT`, `DROP`, `REJECT`).\n"}},"inputProperties":{"ebtables":{"type":"boolean","description":"Enable ebtables rules cluster wide.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall cluster wide.\n"},"forwardPolicy":{"type":"string","description":"The default forward policy (`ACCEPT`, `DROP`).\n"},"inputPolicy":{"type":"string","description":"The default input policy (`ACCEPT`, `DROP`, `REJECT`).\n"},"logRatelimit":{"$ref":"#/types/proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit","description":"The log rate limit.\n"},"outputPolicy":{"type":"string","description":"The default output policy (`ACCEPT`, `DROP`, `REJECT`).\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Firewall resources.\n","properties":{"ebtables":{"type":"boolean","description":"Enable ebtables rules cluster wide.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall cluster wide.\n"},"forwardPolicy":{"type":"string","description":"The default forward policy (`ACCEPT`, `DROP`).\n"},"inputPolicy":{"type":"string","description":"The default input policy (`ACCEPT`, `DROP`, `REJECT`).\n"},"logRatelimit":{"$ref":"#/types/proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit","description":"The log rate limit.\n"},"outputPolicy":{"type":"string","description":"The default output policy (`ACCEPT`, `DROP`, `REJECT`).\n"}},"type":"object"}},"proxmoxve:Network/firewallAlias:FirewallAlias":{"description":"Aliases are used to see what devices or group of devices are affected by a rule.\nWe can create aliases to identify an IP address or a network. Aliases can be\ncreated on the cluster level, on VM / Container level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst localNetwork = new proxmoxve.network.FirewallAlias(\"local_network\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n name: \"local_network\",\n cidr: \"192.168.0.0/23\",\n comment: \"Managed by Pulumi\",\n}, {\n dependsOn: [example],\n});\nconst ubuntuVm = new proxmoxve.network.FirewallAlias(\"ubuntu_vm\", {\n name: \"ubuntu\",\n cidr: \"192.168.0.1\",\n comment: \"Managed by Pulumi\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nlocal_network = proxmoxve.network.FirewallAlias(\"local_network\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n name=\"local_network\",\n cidr=\"192.168.0.0/23\",\n comment=\"Managed by Pulumi\",\n opts = pulumi.ResourceOptions(depends_on=[example]))\nubuntu_vm = proxmoxve.network.FirewallAlias(\"ubuntu_vm\",\n name=\"ubuntu\",\n cidr=\"192.168.0.1\",\n comment=\"Managed by Pulumi\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var localNetwork = new ProxmoxVE.Network.FirewallAlias(\"local_network\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Name = \"local_network\",\n Cidr = \"192.168.0.0/23\",\n Comment = \"Managed by Pulumi\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n },\n });\n\n var ubuntuVm = new ProxmoxVE.Network.FirewallAlias(\"ubuntu_vm\", new()\n {\n Name = \"ubuntu\",\n Cidr = \"192.168.0.1\",\n Comment = \"Managed by Pulumi\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallAlias(ctx, \"local_network\", \u0026network.FirewallAliasArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tName: pulumi.String(\"local_network\"),\n\t\t\tCidr: pulumi.String(\"192.168.0.0/23\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = network.NewFirewallAlias(ctx, \"ubuntu_vm\", \u0026network.FirewallAliasArgs{\n\t\t\tName: pulumi.String(\"ubuntu\"),\n\t\t\tCidr: pulumi.String(\"192.168.0.1\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallAlias;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallAliasArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var localNetwork = new FirewallAlias(\"localNetwork\", FirewallAliasArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .name(\"local_network\")\n .cidr(\"192.168.0.0/23\")\n .comment(\"Managed by Pulumi\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(example)\n .build());\n\n var ubuntuVm = new FirewallAlias(\"ubuntuVm\", FirewallAliasArgs.builder()\n .name(\"ubuntu\")\n .cidr(\"192.168.0.1\")\n .comment(\"Managed by Pulumi\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n localNetwork:\n type: proxmoxve:Network:FirewallAlias\n name: local_network\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n name: local_network\n cidr: 192.168.0.0/23\n comment: Managed by Pulumi\n options:\n dependsOn:\n - ${example}\n ubuntuVm:\n type: proxmoxve:Network:FirewallAlias\n name: ubuntu_vm\n properties:\n name: ubuntu\n cidr: 192.168.0.1\n comment: Managed by Pulumi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"cidr":{"type":"string","description":"Network/IP specification in CIDR format.\n"},"comment":{"type":"string","description":"Alias comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level aliases.\n"},"name":{"type":"string","description":"Alias name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level aliases.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level aliases.\n"}},"required":["cidr","name"],"inputProperties":{"cidr":{"type":"string","description":"Network/IP specification in CIDR format.\n"},"comment":{"type":"string","description":"Alias comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level aliases.\n"},"name":{"type":"string","description":"Alias name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level aliases.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level aliases.\n"}},"requiredInputs":["cidr"],"stateInputs":{"description":"Input properties used for looking up and filtering FirewallAlias resources.\n","properties":{"cidr":{"type":"string","description":"Network/IP specification in CIDR format.\n"},"comment":{"type":"string","description":"Alias comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level aliases.\n"},"name":{"type":"string","description":"Alias name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level aliases.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level aliases.\n"}},"type":"object"}},"proxmoxve:Network/firewallIPSet:FirewallIPSet":{"description":"An IPSet allows us to group multiple IP addresses, IP subnets and aliases. IPSets can be\ncreated on the cluster level, on VM / Container level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ipset = new proxmoxve.network.FirewallIPSet(\"ipset\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n name: \"local_network\",\n comment: \"Managed by Pulumi\",\n cidrs: [\n {\n name: \"192.168.0.0/23\",\n comment: \"Local network 1\",\n },\n {\n name: \"192.168.0.1\",\n comment: \"Server 1\",\n nomatch: true,\n },\n {\n name: \"192.168.2.1\",\n comment: \"Server 1\",\n },\n ],\n}, {\n dependsOn: [example],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nipset = proxmoxve.network.FirewallIPSet(\"ipset\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n name=\"local_network\",\n comment=\"Managed by Pulumi\",\n cidrs=[\n {\n \"name\": \"192.168.0.0/23\",\n \"comment\": \"Local network 1\",\n },\n {\n \"name\": \"192.168.0.1\",\n \"comment\": \"Server 1\",\n \"nomatch\": True,\n },\n {\n \"name\": \"192.168.2.1\",\n \"comment\": \"Server 1\",\n },\n ],\n opts = pulumi.ResourceOptions(depends_on=[example]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ipset = new ProxmoxVE.Network.FirewallIPSet(\"ipset\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Name = \"local_network\",\n Comment = \"Managed by Pulumi\",\n Cidrs = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallIPSetCidrArgs\n {\n Name = \"192.168.0.0/23\",\n Comment = \"Local network 1\",\n },\n new ProxmoxVE.Network.Inputs.FirewallIPSetCidrArgs\n {\n Name = \"192.168.0.1\",\n Comment = \"Server 1\",\n Nomatch = true,\n },\n new ProxmoxVE.Network.Inputs.FirewallIPSetCidrArgs\n {\n Name = \"192.168.2.1\",\n Comment = \"Server 1\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallIPSet(ctx, \"ipset\", \u0026network.FirewallIPSetArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tName: pulumi.String(\"local_network\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tCidrs: network.FirewallIPSetCidrArray{\n\t\t\t\t\u0026network.FirewallIPSetCidrArgs{\n\t\t\t\t\tName: pulumi.String(\"192.168.0.0/23\"),\n\t\t\t\t\tComment: pulumi.String(\"Local network 1\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallIPSetCidrArgs{\n\t\t\t\t\tName: pulumi.String(\"192.168.0.1\"),\n\t\t\t\t\tComment: pulumi.String(\"Server 1\"),\n\t\t\t\t\tNomatch: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallIPSetCidrArgs{\n\t\t\t\t\tName: pulumi.String(\"192.168.2.1\"),\n\t\t\t\t\tComment: pulumi.String(\"Server 1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallIPSet;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallIPSetArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallIPSetCidrArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ipset = new FirewallIPSet(\"ipset\", FirewallIPSetArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .name(\"local_network\")\n .comment(\"Managed by Pulumi\")\n .cidrs( \n FirewallIPSetCidrArgs.builder()\n .name(\"192.168.0.0/23\")\n .comment(\"Local network 1\")\n .build(),\n FirewallIPSetCidrArgs.builder()\n .name(\"192.168.0.1\")\n .comment(\"Server 1\")\n .nomatch(true)\n .build(),\n FirewallIPSetCidrArgs.builder()\n .name(\"192.168.2.1\")\n .comment(\"Server 1\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(example)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ipset:\n type: proxmoxve:Network:FirewallIPSet\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n name: local_network\n comment: Managed by Pulumi\n cidrs:\n - name: 192.168.0.0/23\n comment: Local network 1\n - name: 192.168.0.1\n comment: Server 1\n nomatch: true\n - name: 192.168.2.1\n comment: Server 1\n options:\n dependsOn:\n - ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container IPSet\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e/\u003cipset_name\u003e`\n\nExample uses node name `pve` and container ID `100` and ipset name `local_network`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallIPSet:FirewallIPSet container_ipset container/pve/100/local_network\n```\n\n","properties":{"cidrs":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr"},"description":"IP/CIDR block (multiple blocks supported).\n"},"comment":{"type":"string","description":"IPSet comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level ipsets.\n"},"name":{"type":"string","description":"IPSet name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level ipsets.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level ipsets.\n"}},"required":["name"],"inputProperties":{"cidrs":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr"},"description":"IP/CIDR block (multiple blocks supported).\n","willReplaceOnChanges":true},"comment":{"type":"string","description":"IPSet comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level ipsets.\n"},"name":{"type":"string","description":"IPSet name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level ipsets.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level ipsets.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering FirewallIPSet resources.\n","properties":{"cidrs":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr"},"description":"IP/CIDR block (multiple blocks supported).\n","willReplaceOnChanges":true},"comment":{"type":"string","description":"IPSet comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level ipsets.\n"},"name":{"type":"string","description":"IPSet name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level ipsets.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level ipsets.\n"}},"type":"object"}},"proxmoxve:Network/firewallOptions:FirewallOptions":{"description":"Manages firewall options on VM / Container level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.network.FirewallOptions(\"example\", {\n nodeName: exampleProxmoxVirtualEnvironmentVm.nodeName,\n vmId: exampleProxmoxVirtualEnvironmentVm.vmId,\n dhcp: true,\n enabled: false,\n ipfilter: true,\n logLevelIn: \"info\",\n logLevelOut: \"info\",\n macfilter: false,\n ndp: true,\n inputPolicy: \"ACCEPT\",\n outputPolicy: \"ACCEPT\",\n radv: true,\n}, {\n dependsOn: [exampleProxmoxVirtualEnvironmentVm],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.network.FirewallOptions(\"example\",\n node_name=example_proxmox_virtual_environment_vm[\"nodeName\"],\n vm_id=example_proxmox_virtual_environment_vm[\"vmId\"],\n dhcp=True,\n enabled=False,\n ipfilter=True,\n log_level_in=\"info\",\n log_level_out=\"info\",\n macfilter=False,\n ndp=True,\n input_policy=\"ACCEPT\",\n output_policy=\"ACCEPT\",\n radv=True,\n opts = pulumi.ResourceOptions(depends_on=[example_proxmox_virtual_environment_vm]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Network.FirewallOptions(\"example\", new()\n {\n NodeName = exampleProxmoxVirtualEnvironmentVm.NodeName,\n VmId = exampleProxmoxVirtualEnvironmentVm.VmId,\n Dhcp = true,\n Enabled = false,\n Ipfilter = true,\n LogLevelIn = \"info\",\n LogLevelOut = \"info\",\n Macfilter = false,\n Ndp = true,\n InputPolicy = \"ACCEPT\",\n OutputPolicy = \"ACCEPT\",\n Radv = true,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleProxmoxVirtualEnvironmentVm,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallOptions(ctx, \"example\", \u0026network.FirewallOptionsArgs{\n\t\t\tNodeName: pulumi.Any(exampleProxmoxVirtualEnvironmentVm.NodeName),\n\t\t\tVmId: pulumi.Any(exampleProxmoxVirtualEnvironmentVm.VmId),\n\t\t\tDhcp: pulumi.Bool(true),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tIpfilter: pulumi.Bool(true),\n\t\t\tLogLevelIn: pulumi.String(\"info\"),\n\t\t\tLogLevelOut: pulumi.String(\"info\"),\n\t\t\tMacfilter: pulumi.Bool(false),\n\t\t\tNdp: pulumi.Bool(true),\n\t\t\tInputPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tOutputPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tRadv: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleProxmoxVirtualEnvironmentVm,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallOptions;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallOptionsArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new FirewallOptions(\"example\", FirewallOptionsArgs.builder()\n .nodeName(exampleProxmoxVirtualEnvironmentVm.nodeName())\n .vmId(exampleProxmoxVirtualEnvironmentVm.vmId())\n .dhcp(true)\n .enabled(false)\n .ipfilter(true)\n .logLevelIn(\"info\")\n .logLevelOut(\"info\")\n .macfilter(false)\n .ndp(true)\n .inputPolicy(\"ACCEPT\")\n .outputPolicy(\"ACCEPT\")\n .radv(true)\n .build(), CustomResourceOptions.builder()\n .dependsOn(exampleProxmoxVirtualEnvironmentVm)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Network:FirewallOptions\n properties:\n nodeName: ${exampleProxmoxVirtualEnvironmentVm.nodeName}\n vmId: ${exampleProxmoxVirtualEnvironmentVm.vmId}\n dhcp: true\n enabled: false\n ipfilter: true\n logLevelIn: info\n logLevelOut: info\n macfilter: false\n ndp: true\n inputPolicy: ACCEPT\n outputPolicy: ACCEPT\n radv: true\n options:\n dependsOn:\n - ${exampleProxmoxVirtualEnvironmentVm}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container Firewall Options\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e`\n\nExample uses node name `pve` and container ID `100`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallOptions:FirewallOptions container_firewall_options container/pve/100\n```\n\n","properties":{"containerId":{"type":"integer","description":"Container ID.\n"},"dhcp":{"type":"boolean","description":"Enable DHCP.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall.\n"},"inputPolicy":{"type":"string","description":"The default input\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"ipfilter":{"type":"boolean","description":"Enable default IP filters. This is equivalent to\nadding an empty `ipfilter-net\u003cid\u003e` ipset for every interface. Such ipsets\nimplicitly contain sane default restrictions such as restricting IPv6 link\nlocal addresses to the one derived from the interface's MAC address. For\ncontainers the configured IP addresses will be implicitly added.\n"},"logLevelIn":{"type":"string","description":"Log level for incoming\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macfilter":{"type":"boolean","description":"Enable/disable MAC address filter.\n"},"ndp":{"type":"boolean","description":"Enable NDP (Neighbor Discovery Protocol).\n"},"nodeName":{"type":"string","description":"Node name.\n"},"outputPolicy":{"type":"string","description":"The default output\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"radv":{"type":"boolean","description":"Enable Router Advertisement.\n"},"vmId":{"type":"integer","description":"VM ID.\n"}},"required":["nodeName"],"inputProperties":{"containerId":{"type":"integer","description":"Container ID.\n"},"dhcp":{"type":"boolean","description":"Enable DHCP.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall.\n"},"inputPolicy":{"type":"string","description":"The default input\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"ipfilter":{"type":"boolean","description":"Enable default IP filters. This is equivalent to\nadding an empty `ipfilter-net\u003cid\u003e` ipset for every interface. Such ipsets\nimplicitly contain sane default restrictions such as restricting IPv6 link\nlocal addresses to the one derived from the interface's MAC address. For\ncontainers the configured IP addresses will be implicitly added.\n"},"logLevelIn":{"type":"string","description":"Log level for incoming\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macfilter":{"type":"boolean","description":"Enable/disable MAC address filter.\n"},"ndp":{"type":"boolean","description":"Enable NDP (Neighbor Discovery Protocol).\n"},"nodeName":{"type":"string","description":"Node name.\n"},"outputPolicy":{"type":"string","description":"The default output\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"radv":{"type":"boolean","description":"Enable Router Advertisement.\n"},"vmId":{"type":"integer","description":"VM ID.\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering FirewallOptions resources.\n","properties":{"containerId":{"type":"integer","description":"Container ID.\n"},"dhcp":{"type":"boolean","description":"Enable DHCP.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall.\n"},"inputPolicy":{"type":"string","description":"The default input\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"ipfilter":{"type":"boolean","description":"Enable default IP filters. This is equivalent to\nadding an empty `ipfilter-net\u003cid\u003e` ipset for every interface. Such ipsets\nimplicitly contain sane default restrictions such as restricting IPv6 link\nlocal addresses to the one derived from the interface's MAC address. For\ncontainers the configured IP addresses will be implicitly added.\n"},"logLevelIn":{"type":"string","description":"Log level for incoming\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macfilter":{"type":"boolean","description":"Enable/disable MAC address filter.\n"},"ndp":{"type":"boolean","description":"Enable NDP (Neighbor Discovery Protocol).\n"},"nodeName":{"type":"string","description":"Node name.\n"},"outputPolicy":{"type":"string","description":"The default output\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"radv":{"type":"boolean","description":"Enable Router Advertisement.\n"},"vmId":{"type":"integer","description":"VM ID.\n"}},"type":"object"}},"proxmoxve:Network/firewallRules:FirewallRules":{"description":"Manages cluster-level, node-level or VM/container-level firewall rules.\n\n\u003e **Note:** Before creating a new \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-dotnet=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-go=\"`Network.FirewallRules`\" pulumi-lang-python=\"`Network.FirewallRules`\" pulumi-lang-yaml=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-java=\"`proxmoxve.Network.FirewallRules`\"\u003e`proxmoxve.Network.FirewallRules`\u003c/span\u003e resource, verify that no rules already exist for the target (cluster, node, VM, or container).\n\u003e If rules are already configured, import them first using the appropriate import command.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst inbound = new proxmoxve.network.FirewallRules(\"inbound\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n rules: [\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTP\",\n dest: \"192.168.1.5\",\n dport: \"80\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTPS\",\n dest: \"192.168.1.5\",\n dport: \"443\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n securityGroup: exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name,\n comment: \"From security group\",\n iface: \"net0\",\n },\n ],\n}, {\n dependsOn: [\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ninbound = proxmoxve.network.FirewallRules(\"inbound\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n rules=[\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTP\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"80\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTPS\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"443\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"security_group\": example_proxmox_virtual_environment_cluster_firewall_security_group[\"name\"],\n \"comment\": \"From security group\",\n \"iface\": \"net0\",\n },\n ],\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n example_proxmox_virtual_environment_cluster_firewall_security_group,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var inbound = new ProxmoxVE.Network.FirewallRules(\"inbound\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Rules = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTP\",\n Dest = \"192.168.1.5\",\n Dport = \"80\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTPS\",\n Dest = \"192.168.1.5\",\n Dport = \"443\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n SecurityGroup = exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name,\n Comment = \"From security group\",\n Iface = \"net0\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallRules(ctx, \"inbound\", \u0026network.FirewallRulesArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tRules: network.FirewallRulesRuleArray{\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTP\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"80\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTPS\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"443\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tSecurityGroup: pulumi.Any(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name),\n\t\t\t\t\tComment: pulumi.String(\"From security group\"),\n\t\t\t\t\tIface: pulumi.String(\"net0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\texampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRules;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRulesArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallRulesRuleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var inbound = new FirewallRules(\"inbound\", FirewallRulesArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .rules( \n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTP\")\n .dest(\"192.168.1.5\")\n .dport(\"80\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTPS\")\n .dest(\"192.168.1.5\")\n .dport(\"443\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .securityGroup(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name())\n .comment(\"From security group\")\n .iface(\"net0\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n inbound:\n type: proxmoxve:Network:FirewallRules\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n rules:\n - type: in\n action: ACCEPT\n comment: Allow HTTP\n dest: 192.168.1.5\n dport: '80'\n proto: tcp\n log: info\n - type: in\n action: ACCEPT\n comment: Allow HTTPS\n dest: 192.168.1.5\n dport: '443'\n proto: tcp\n log: info\n - securityGroup: ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name}\n comment: From security group\n iface: net0\n options:\n dependsOn:\n - ${example}\n - ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container Rules\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e`\n\nExample uses node name `pve` and container ID `100`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallRules:FirewallRules container_rules container/pve/100\n```\n\n","properties":{"containerId":{"type":"integer","description":"Container ID. Leave empty for node/cluster level rules.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level rules.\n"},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallRulesRule:FirewallRulesRule"},"description":"Firewall rule block (multiple blocks supported).\nThe provider supports two types of the \u003cspan pulumi-lang-nodejs=\"`rule`\" pulumi-lang-dotnet=\"`Rule`\" pulumi-lang-go=\"`rule`\" pulumi-lang-python=\"`rule`\" pulumi-lang-yaml=\"`rule`\" pulumi-lang-java=\"`rule`\"\u003e`rule`\u003c/span\u003e blocks:\n- A rule definition block, which includes the following arguments:\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for node/cluster level rules.\n"}},"inputProperties":{"containerId":{"type":"integer","description":"Container ID. Leave empty for node/cluster level rules.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level rules.\n"},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallRulesRule:FirewallRulesRule"},"description":"Firewall rule block (multiple blocks supported).\nThe provider supports two types of the \u003cspan pulumi-lang-nodejs=\"`rule`\" pulumi-lang-dotnet=\"`Rule`\" pulumi-lang-go=\"`rule`\" pulumi-lang-python=\"`rule`\" pulumi-lang-yaml=\"`rule`\" pulumi-lang-java=\"`rule`\"\u003e`rule`\u003c/span\u003e blocks:\n- A rule definition block, which includes the following arguments:\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for node/cluster level rules.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering FirewallRules resources.\n","properties":{"containerId":{"type":"integer","description":"Container ID. Leave empty for node/cluster level rules.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level rules.\n"},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallRulesRule:FirewallRulesRule"},"description":"Firewall rule block (multiple blocks supported).\nThe provider supports two types of the \u003cspan pulumi-lang-nodejs=\"`rule`\" pulumi-lang-dotnet=\"`Rule`\" pulumi-lang-go=\"`rule`\" pulumi-lang-python=\"`rule`\" pulumi-lang-yaml=\"`rule`\" pulumi-lang-java=\"`rule`\"\u003e`rule`\u003c/span\u003e blocks:\n- A rule definition block, which includes the following arguments:\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for node/cluster level rules.\n"}},"type":"object"}},"proxmoxve:Network/firewallSecurityGroup:FirewallSecurityGroup":{"description":"A security group is a collection of rules, defined at cluster level, which can\nbe used in all VMs' rules. For example, you can define a group named “webserver”\nwith rules to open the http and https ports.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst webserver = new proxmoxve.network.FirewallSecurityGroup(\"webserver\", {\n name: \"webserver\",\n comment: \"Managed by Pulumi\",\n rules: [\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTP\",\n dest: \"192.168.1.5\",\n dport: \"80\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTPS\",\n dest: \"192.168.1.5\",\n dport: \"443\",\n proto: \"tcp\",\n log: \"info\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nwebserver = proxmoxve.network.FirewallSecurityGroup(\"webserver\",\n name=\"webserver\",\n comment=\"Managed by Pulumi\",\n rules=[\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTP\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"80\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTPS\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"443\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var webserver = new ProxmoxVE.Network.FirewallSecurityGroup(\"webserver\", new()\n {\n Name = \"webserver\",\n Comment = \"Managed by Pulumi\",\n Rules = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallSecurityGroupRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTP\",\n Dest = \"192.168.1.5\",\n Dport = \"80\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallSecurityGroupRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTPS\",\n Dest = \"192.168.1.5\",\n Dport = \"443\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallSecurityGroup(ctx, \"webserver\", \u0026network.FirewallSecurityGroupArgs{\n\t\t\tName: pulumi.String(\"webserver\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tRules: network.FirewallSecurityGroupRuleArray{\n\t\t\t\t\u0026network.FirewallSecurityGroupRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTP\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"80\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallSecurityGroupRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTPS\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"443\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallSecurityGroup;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallSecurityGroupArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallSecurityGroupRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var webserver = new FirewallSecurityGroup(\"webserver\", FirewallSecurityGroupArgs.builder()\n .name(\"webserver\")\n .comment(\"Managed by Pulumi\")\n .rules( \n FirewallSecurityGroupRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTP\")\n .dest(\"192.168.1.5\")\n .dport(\"80\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallSecurityGroupRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTPS\")\n .dest(\"192.168.1.5\")\n .dport(\"443\")\n .proto(\"tcp\")\n .log(\"info\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n webserver:\n type: proxmoxve:Network:FirewallSecurityGroup\n properties:\n name: webserver\n comment: Managed by Pulumi\n rules:\n - type: in\n action: ACCEPT\n comment: Allow HTTP\n dest: 192.168.1.5\n dport: '80'\n proto: tcp\n log: info\n - type: in\n action: ACCEPT\n comment: Allow HTTPS\n dest: 192.168.1.5\n dport: '443'\n proto: tcp\n log: info\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallSecurityGroup:FirewallSecurityGroup webserver webserver\n```\n\n","properties":{"comment":{"type":"string","description":"Security group comment.\n"},"containerId":{"type":"integer","description":"The ID of the container to manage the firewall for."},"name":{"type":"string","description":"Security group name.\n"},"nodeName":{"type":"string","description":"The name of the node."},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule"},"description":"Firewall rule block (multiple blocks supported).\n"},"vmId":{"type":"integer","description":"The ID of the VM to manage the firewall for."}},"required":["name"],"inputProperties":{"comment":{"type":"string","description":"Security group comment.\n"},"containerId":{"type":"integer","description":"The ID of the container to manage the firewall for."},"name":{"type":"string","description":"Security group name.\n"},"nodeName":{"type":"string","description":"The name of the node."},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule"},"description":"Firewall rule block (multiple blocks supported).\n"},"vmId":{"type":"integer","description":"The ID of the VM to manage the firewall for."}},"stateInputs":{"description":"Input properties used for looking up and filtering FirewallSecurityGroup resources.\n","properties":{"comment":{"type":"string","description":"Security group comment.\n"},"containerId":{"type":"integer","description":"The ID of the container to manage the firewall for."},"name":{"type":"string","description":"Security group name.\n"},"nodeName":{"type":"string","description":"The name of the node."},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule"},"description":"Firewall rule block (multiple blocks supported).\n"},"vmId":{"type":"integer","description":"The ID of the VM to manage the firewall for."}},"type":"object"}},"proxmoxve:Network/networkBridge:NetworkBridge":{"description":"Manages a Linux Bridge network interface in a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst vlan99 = new proxmoxve.network.NetworkVlan(\"vlan99\", {\n nodeName: \"pve\",\n name: \"ens18.99\",\n});\nconst vmbr99 = new proxmoxve.network.NetworkBridge(\"vmbr99\", {\n nodeName: \"pve\",\n name: \"vmbr99\",\n address: \"99.99.99.99/16\",\n comment: \"vmbr99 comment\",\n ports: [\"ens18.99\"],\n}, {\n dependsOn: [vlan99],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nvlan99 = proxmoxve.network.NetworkVlan(\"vlan99\",\n node_name=\"pve\",\n name=\"ens18.99\")\nvmbr99 = proxmoxve.network.NetworkBridge(\"vmbr99\",\n node_name=\"pve\",\n name=\"vmbr99\",\n address=\"99.99.99.99/16\",\n comment=\"vmbr99 comment\",\n ports=[\"ens18.99\"],\n opts = pulumi.ResourceOptions(depends_on=[vlan99]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vlan99 = new ProxmoxVE.Network.NetworkVlan(\"vlan99\", new()\n {\n NodeName = \"pve\",\n Name = \"ens18.99\",\n });\n\n var vmbr99 = new ProxmoxVE.Network.NetworkBridge(\"vmbr99\", new()\n {\n NodeName = \"pve\",\n Name = \"vmbr99\",\n Address = \"99.99.99.99/16\",\n Comment = \"vmbr99 comment\",\n Ports = new[]\n {\n \"ens18.99\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vlan99,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvlan99, err := network.NewNetworkVlan(ctx, \"vlan99\", \u0026network.NetworkVlanArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"ens18.99\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = network.NewNetworkBridge(ctx, \"vmbr99\", \u0026network.NetworkBridgeArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"vmbr99\"),\n\t\t\tAddress: pulumi.String(\"99.99.99.99/16\"),\n\t\t\tComment: pulumi.String(\"vmbr99 comment\"),\n\t\t\tPorts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"ens18.99\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvlan99,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlan;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlanArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkBridge;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkBridgeArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vlan99 = new NetworkVlan(\"vlan99\", NetworkVlanArgs.builder()\n .nodeName(\"pve\")\n .name(\"ens18.99\")\n .build());\n\n var vmbr99 = new NetworkBridge(\"vmbr99\", NetworkBridgeArgs.builder()\n .nodeName(\"pve\")\n .name(\"vmbr99\")\n .address(\"99.99.99.99/16\")\n .comment(\"vmbr99 comment\")\n .ports(\"ens18.99\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(vlan99)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vmbr99:\n type: proxmoxve:Network:NetworkBridge\n properties:\n nodeName: pve\n name: vmbr99\n address: 99.99.99.99/16\n comment: vmbr99 comment\n ports:\n - ens18.99\n options:\n dependsOn:\n - ${vlan99}\n vlan99:\n type: proxmoxve:Network:NetworkVlan\n properties:\n nodeName: pve\n name: ens18.99\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n#Interfaces can be imported using the `node_name:iface` format, e.g.\n\n```sh\n$ pulumi import proxmoxve:Network/networkBridge:NetworkBridge vmbr99 pve:vmbr99\n```\n\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Commonly vmbr[N], where 0 ≤ N ≤ 4094 (vmbr0 - vmbr4094), but can be any alphanumeric string that starts with a character and is at most 10 characters long.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"ports":{"type":"array","items":{"type":"string"},"description":"The interface bridge ports.\n"},"vlanAware":{"type":"boolean","description":"Whether the interface bridge is VLAN aware (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"required":["autostart","name","nodeName","vlanAware"],"inputProperties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Commonly vmbr[N], where 0 ≤ N ≤ 4094 (vmbr0 - vmbr4094), but can be any alphanumeric string that starts with a character and is at most 10 characters long.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"ports":{"type":"array","items":{"type":"string"},"description":"The interface bridge ports.\n"},"vlanAware":{"type":"boolean","description":"Whether the interface bridge is VLAN aware (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering NetworkBridge resources.\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Commonly vmbr[N], where 0 ≤ N ≤ 4094 (vmbr0 - vmbr4094), but can be any alphanumeric string that starts with a character and is at most 10 characters long.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"ports":{"type":"array","items":{"type":"string"},"description":"The interface bridge ports.\n"},"vlanAware":{"type":"boolean","description":"Whether the interface bridge is VLAN aware (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"type":"object"}},"proxmoxve:Network/networkVlan:NetworkVlan":{"description":"Manages a Linux VLAN network interface in a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// using VLAN tag\nconst vlan99 = new proxmoxve.network.NetworkVlan(\"vlan99\", {\n nodeName: \"pve\",\n name: \"eno0.99\",\n comment: \"VLAN 99\",\n});\n// using custom network interface name\nconst vlan98 = new proxmoxve.network.NetworkVlan(\"vlan98\", {\n nodeName: \"pve\",\n name: \"vlan_lab\",\n \"interface\": \"eno0\",\n vlan: 98,\n comment: \"VLAN 98\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# using VLAN tag\nvlan99 = proxmoxve.network.NetworkVlan(\"vlan99\",\n node_name=\"pve\",\n name=\"eno0.99\",\n comment=\"VLAN 99\")\n# using custom network interface name\nvlan98 = proxmoxve.network.NetworkVlan(\"vlan98\",\n node_name=\"pve\",\n name=\"vlan_lab\",\n interface=\"eno0\",\n vlan=98,\n comment=\"VLAN 98\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // using VLAN tag\n var vlan99 = new ProxmoxVE.Network.NetworkVlan(\"vlan99\", new()\n {\n NodeName = \"pve\",\n Name = \"eno0.99\",\n Comment = \"VLAN 99\",\n });\n\n // using custom network interface name\n var vlan98 = new ProxmoxVE.Network.NetworkVlan(\"vlan98\", new()\n {\n NodeName = \"pve\",\n Name = \"vlan_lab\",\n Interface = \"eno0\",\n Vlan = 98,\n Comment = \"VLAN 98\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// using VLAN tag\n\t\t_, err := network.NewNetworkVlan(ctx, \"vlan99\", \u0026network.NetworkVlanArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"eno0.99\"),\n\t\t\tComment: pulumi.String(\"VLAN 99\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// using custom network interface name\n\t\t_, err = network.NewNetworkVlan(ctx, \"vlan98\", \u0026network.NetworkVlanArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"vlan_lab\"),\n\t\t\tInterface: pulumi.String(\"eno0\"),\n\t\t\tVlan: pulumi.Int(98),\n\t\t\tComment: pulumi.String(\"VLAN 98\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlan;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // using VLAN tag\n var vlan99 = new NetworkVlan(\"vlan99\", NetworkVlanArgs.builder()\n .nodeName(\"pve\")\n .name(\"eno0.99\")\n .comment(\"VLAN 99\")\n .build());\n\n // using custom network interface name\n var vlan98 = new NetworkVlan(\"vlan98\", NetworkVlanArgs.builder()\n .nodeName(\"pve\")\n .name(\"vlan_lab\")\n .interface_(\"eno0\")\n .vlan(98)\n .comment(\"VLAN 98\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # using VLAN tag\n vlan99:\n type: proxmoxve:Network:NetworkVlan\n properties:\n nodeName: pve\n name: eno0.99\n comment: VLAN 99\n # using custom network interface name\n vlan98:\n type: proxmoxve:Network:NetworkVlan\n properties:\n nodeName: pve\n name: vlan_lab\n interface: eno0\n vlan: 98\n comment: VLAN 98\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n#Interfaces can be imported using the `node_name:iface` format, e.g.\n\n```sh\n$ pulumi import proxmoxve:Network/networkVlan:NetworkVlan vlan99 pve:vlan99\n```\n\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"interface":{"type":"string","description":"The VLAN raw device. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Either add the VLAN tag number to an existing interface name, e.g. `ens18.21` (and do not set \u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e), or use custom name, e.g. \u003cspan pulumi-lang-nodejs=\"`vlanLab`\" pulumi-lang-dotnet=\"`VlanLab`\" pulumi-lang-go=\"`vlanLab`\" pulumi-lang-python=\"`vlan_lab`\" pulumi-lang-yaml=\"`vlanLab`\" pulumi-lang-java=\"`vlanLab`\"\u003e`vlan_lab`\u003c/span\u003e (\u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e are then required).\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"vlan":{"type":"integer","description":"The VLAN tag. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"}},"required":["autostart","interface","name","nodeName","vlan"],"inputProperties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"interface":{"type":"string","description":"The VLAN raw device. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Either add the VLAN tag number to an existing interface name, e.g. `ens18.21` (and do not set \u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e), or use custom name, e.g. \u003cspan pulumi-lang-nodejs=\"`vlanLab`\" pulumi-lang-dotnet=\"`VlanLab`\" pulumi-lang-go=\"`vlanLab`\" pulumi-lang-python=\"`vlan_lab`\" pulumi-lang-yaml=\"`vlanLab`\" pulumi-lang-java=\"`vlanLab`\"\u003e`vlan_lab`\u003c/span\u003e (\u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e are then required).\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"vlan":{"type":"integer","description":"The VLAN tag. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering NetworkVlan resources.\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"interface":{"type":"string","description":"The VLAN raw device. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Either add the VLAN tag number to an existing interface name, e.g. `ens18.21` (and do not set \u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e), or use custom name, e.g. \u003cspan pulumi-lang-nodejs=\"`vlanLab`\" pulumi-lang-dotnet=\"`VlanLab`\" pulumi-lang-go=\"`vlanLab`\" pulumi-lang-python=\"`vlan_lab`\" pulumi-lang-yaml=\"`vlanLab`\" pulumi-lang-java=\"`vlanLab`\"\u003e`vlan_lab`\u003c/span\u003e (\u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e are then required).\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"vlan":{"type":"integer","description":"The VLAN tag. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:Oci/image:Image":{"description":"Manages OCI images pulled from OCI registries using PVE oci-registry-pull API. Pulls OCI container images and stores them as tar files in Proxmox VE datastores.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuLatest = new proxmoxve.oci.Image(\"ubuntu_latest\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/ubuntu:latest\",\n});\nconst nginx = new proxmoxve.oci.Image(\"nginx\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/nginx:alpine\",\n fileName: \"custom_image_name.tar\",\n});\nconst debian = new proxmoxve.oci.Image(\"debian\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/debian:bookworm\",\n uploadTimeout: 900,\n overwrite: false,\n overwriteUnmanaged: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_latest = proxmoxve.oci.Image(\"ubuntu_latest\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/ubuntu:latest\")\nnginx = proxmoxve.oci.Image(\"nginx\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/nginx:alpine\",\n file_name=\"custom_image_name.tar\")\ndebian = proxmoxve.oci.Image(\"debian\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/debian:bookworm\",\n upload_timeout=900,\n overwrite=False,\n overwrite_unmanaged=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuLatest = new ProxmoxVE.Oci.Image(\"ubuntu_latest\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/ubuntu:latest\",\n });\n\n var nginx = new ProxmoxVE.Oci.Image(\"nginx\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/nginx:alpine\",\n FileName = \"custom_image_name.tar\",\n });\n\n var debian = new ProxmoxVE.Oci.Image(\"debian\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/debian:bookworm\",\n UploadTimeout = 900,\n Overwrite = false,\n OverwriteUnmanaged = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/oci\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oci.NewImage(ctx, \"ubuntu_latest\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/ubuntu:latest\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oci.NewImage(ctx, \"nginx\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/nginx:alpine\"),\n\t\t\tFileName: pulumi.String(\"custom_image_name.tar\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oci.NewImage(ctx, \"debian\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/debian:bookworm\"),\n\t\t\tUploadTimeout: pulumi.Int(900),\n\t\t\tOverwrite: pulumi.Bool(false),\n\t\t\tOverwriteUnmanaged: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Oci.Image;\nimport io.muehlbachler.pulumi.proxmoxve.Oci.ImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuLatest = new Image(\"ubuntuLatest\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/ubuntu:latest\")\n .build());\n\n var nginx = new Image(\"nginx\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/nginx:alpine\")\n .fileName(\"custom_image_name.tar\")\n .build());\n\n var debian = new Image(\"debian\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/debian:bookworm\")\n .uploadTimeout(900)\n .overwrite(false)\n .overwriteUnmanaged(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuLatest:\n type: proxmoxve:Oci:Image\n name: ubuntu_latest\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/ubuntu:latest\n nginx:\n type: proxmoxve:Oci:Image\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/nginx:alpine\n fileName: custom_image_name.tar\n debian:\n type: proxmoxve:Oci:Image\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/debian:bookworm\n uploadTimeout: 900\n overwrite: false\n overwriteUnmanaged: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"fileName":{"type":"string","description":"The file name for the pulled OCI image. If not provided, it will be generated automatically. The file will be stored as a .tar file.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and the OCI image size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and an OCI image with the same name already exists in the datastore, it will be deleted and the new image will be pulled. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the image already exists, an error will be returned.\n"},"reference":{"type":"string","description":"The reference to the OCI image.\n"},"size":{"type":"integer","description":"The image size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The OCI image pull timeout in seconds. Default is 600 (10min).\n"}},"required":["datastoreId","fileName","nodeName","overwrite","overwriteUnmanaged","reference","size","uploadTimeout"],"inputProperties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"fileName":{"type":"string","description":"The file name for the pulled OCI image. If not provided, it will be generated automatically. The file will be stored as a .tar file.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and the OCI image size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and an OCI image with the same name already exists in the datastore, it will be deleted and the new image will be pulled. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the image already exists, an error will be returned.\n"},"reference":{"type":"string","description":"The reference to the OCI image.\n"},"uploadTimeout":{"type":"integer","description":"The OCI image pull timeout in seconds. Default is 600 (10min).\n"}},"requiredInputs":["datastoreId","nodeName","reference"],"stateInputs":{"description":"Input properties used for looking up and filtering Image resources.\n","properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"fileName":{"type":"string","description":"The file name for the pulled OCI image. If not provided, it will be generated automatically. The file will be stored as a .tar file.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and the OCI image size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and an OCI image with the same name already exists in the datastore, it will be deleted and the new image will be pulled. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the image already exists, an error will be returned.\n"},"reference":{"type":"string","description":"The reference to the OCI image.\n"},"size":{"type":"integer","description":"The image size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The OCI image pull timeout in seconds. Default is 600 (10min).\n"}},"type":"object"}},"proxmoxve:Permission/group:Group":{"description":"Manages a user group.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsTeam = new proxmoxve.permission.Group(\"operations_team\", {\n comment: \"Managed by Pulumi\",\n groupId: \"operations-team\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_team = proxmoxve.permission.Group(\"operations_team\",\n comment=\"Managed by Pulumi\",\n group_id=\"operations-team\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsTeam = new ProxmoxVE.Permission.Group(\"operations_team\", new()\n {\n Comment = \"Managed by Pulumi\",\n GroupId = \"operations-team\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.NewGroup(ctx, \"operations_team\", \u0026permission.GroupArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tGroupId: pulumi.String(\"operations-team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Group;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.GroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsTeam = new Group(\"operationsTeam\", GroupArgs.builder()\n .comment(\"Managed by Pulumi\")\n .groupId(\"operations-team\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsTeam:\n type: proxmoxve:Permission:Group\n name: operations_team\n properties:\n comment: Managed by Pulumi\n groupId: operations-team\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `group_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/group:Group operations_team operations-team\n```\n\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/GroupAcl:GroupAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The group comment.\n"},"groupId":{"type":"string","description":"The group identifier.\n"},"members":{"type":"array","items":{"type":"string"},"description":"The group members as a list of `username@realm` entries\n"}},"required":["groupId","members"],"inputProperties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/GroupAcl:GroupAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The group comment.\n"},"groupId":{"type":"string","description":"The group identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["groupId"],"stateInputs":{"description":"Input properties used for looking up and filtering Group resources.\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/GroupAcl:GroupAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The group comment.\n"},"groupId":{"type":"string","description":"The group identifier.\n","willReplaceOnChanges":true},"members":{"type":"array","items":{"type":"string"},"description":"The group members as a list of `username@realm` entries\n"}},"type":"object"}},"proxmoxve:Permission/pool:Pool":{"description":"Manages a resource pool.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsPool = new proxmoxve.permission.Pool(\"operations_pool\", {\n comment: \"Managed by Pulumi\",\n poolId: \"operations-pool\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_pool = proxmoxve.permission.Pool(\"operations_pool\",\n comment=\"Managed by Pulumi\",\n pool_id=\"operations-pool\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsPool = new ProxmoxVE.Permission.Pool(\"operations_pool\", new()\n {\n Comment = \"Managed by Pulumi\",\n PoolId = \"operations-pool\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.NewPool(ctx, \"operations_pool\", \u0026permission.PoolArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tPoolId: pulumi.String(\"operations-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Pool;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.PoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsPool = new Pool(\"operationsPool\", PoolArgs.builder()\n .comment(\"Managed by Pulumi\")\n .poolId(\"operations-pool\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsPool:\n type: proxmoxve:Permission:Pool\n name: operations_pool\n properties:\n comment: Managed by Pulumi\n poolId: operations-pool\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `pool_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/pool:Pool operations_pool operations-pool\n```\n\n","properties":{"comment":{"type":"string","description":"The pool comment.\n"},"members":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/PoolMember:PoolMember"},"description":"The pool members.\n"},"poolId":{"type":"string","description":"The pool identifier.\n"}},"required":["members","poolId"],"inputProperties":{"comment":{"type":"string","description":"The pool comment.\n"},"poolId":{"type":"string","description":"The pool identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["poolId"],"stateInputs":{"description":"Input properties used for looking up and filtering Pool resources.\n","properties":{"comment":{"type":"string","description":"The pool comment.\n"},"members":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/PoolMember:PoolMember"},"description":"The pool members.\n"},"poolId":{"type":"string","description":"The pool identifier.\n","willReplaceOnChanges":true}},"type":"object"}},"proxmoxve:Permission/role:Role":{"description":"Manages a role.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsMonitoring = new proxmoxve.permission.Role(\"operations_monitoring\", {\n roleId: \"operations-monitoring\",\n privileges: [\"VM.GuestAgent.Audit\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_monitoring = proxmoxve.permission.Role(\"operations_monitoring\",\n role_id=\"operations-monitoring\",\n privileges=[\"VM.GuestAgent.Audit\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsMonitoring = new ProxmoxVE.Permission.Role(\"operations_monitoring\", new()\n {\n RoleId = \"operations-monitoring\",\n Privileges = new[]\n {\n \"VM.GuestAgent.Audit\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.NewRole(ctx, \"operations_monitoring\", \u0026permission.RoleArgs{\n\t\t\tRoleId: pulumi.String(\"operations-monitoring\"),\n\t\t\tPrivileges: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"VM.GuestAgent.Audit\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Role;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.RoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsMonitoring = new Role(\"operationsMonitoring\", RoleArgs.builder()\n .roleId(\"operations-monitoring\")\n .privileges(\"VM.GuestAgent.Audit\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsMonitoring:\n type: proxmoxve:Permission:Role\n name: operations_monitoring\n properties:\n roleId: operations-monitoring\n privileges:\n - VM.GuestAgent.Audit\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `role_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/role:Role operations_monitoring operations-monitoring\n```\n\n","properties":{"privileges":{"type":"array","items":{"type":"string"},"description":"The role privileges.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"required":["privileges","roleId"],"inputProperties":{"privileges":{"type":"array","items":{"type":"string"},"description":"The role privileges.\n"},"roleId":{"type":"string","description":"The role identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["privileges","roleId"],"stateInputs":{"description":"Input properties used for looking up and filtering Role resources.\n","properties":{"privileges":{"type":"array","items":{"type":"string"},"description":"The role privileges.\n"},"roleId":{"type":"string","description":"The role identifier.\n","willReplaceOnChanges":true}},"type":"object"}},"proxmoxve:Permission/user:User":{"description":"Manages a user.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsMonitoring = new proxmoxve.permission.Role(\"operations_monitoring\", {\n roleId: \"operations-monitoring\",\n privileges: [\"VM.GuestAgent.Audit\"],\n});\nconst operationsAutomation = new proxmoxve.permission.User(\"operations_automation\", {\n acls: [{\n path: \"/vms/1234\",\n propagate: true,\n roleId: operationsMonitoring.roleId,\n }],\n comment: \"Managed by Pulumi\",\n password: \"a-strong-password\",\n userId: \"operations-automation@pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_monitoring = proxmoxve.permission.Role(\"operations_monitoring\",\n role_id=\"operations-monitoring\",\n privileges=[\"VM.GuestAgent.Audit\"])\noperations_automation = proxmoxve.permission.User(\"operations_automation\",\n acls=[{\n \"path\": \"/vms/1234\",\n \"propagate\": True,\n \"role_id\": operations_monitoring.role_id,\n }],\n comment=\"Managed by Pulumi\",\n password=\"a-strong-password\",\n user_id=\"operations-automation@pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsMonitoring = new ProxmoxVE.Permission.Role(\"operations_monitoring\", new()\n {\n RoleId = \"operations-monitoring\",\n Privileges = new[]\n {\n \"VM.GuestAgent.Audit\",\n },\n });\n\n var operationsAutomation = new ProxmoxVE.Permission.User(\"operations_automation\", new()\n {\n Acls = new[]\n {\n new ProxmoxVE.Permission.Inputs.UserAclArgs\n {\n Path = \"/vms/1234\",\n Propagate = true,\n RoleId = operationsMonitoring.RoleId,\n },\n },\n Comment = \"Managed by Pulumi\",\n Password = \"a-strong-password\",\n UserId = \"operations-automation@pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toperationsMonitoring, err := permission.NewRole(ctx, \"operations_monitoring\", \u0026permission.RoleArgs{\n\t\t\tRoleId: pulumi.String(\"operations-monitoring\"),\n\t\t\tPrivileges: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"VM.GuestAgent.Audit\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = permission.NewUser(ctx, \"operations_automation\", \u0026permission.UserArgs{\n\t\t\tAcls: permission.UserAclArray{\n\t\t\t\t\u0026permission.UserAclArgs{\n\t\t\t\t\tPath: pulumi.String(\"/vms/1234\"),\n\t\t\t\t\tPropagate: pulumi.Bool(true),\n\t\t\t\t\tRoleId: operationsMonitoring.RoleId,\n\t\t\t\t},\n\t\t\t},\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tPassword: pulumi.String(\"a-strong-password\"),\n\t\t\tUserId: pulumi.String(\"operations-automation@pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Role;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.RoleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.User;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.UserArgs;\nimport com.pulumi.proxmoxve.Permission.inputs.UserAclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsMonitoring = new Role(\"operationsMonitoring\", RoleArgs.builder()\n .roleId(\"operations-monitoring\")\n .privileges(\"VM.GuestAgent.Audit\")\n .build());\n\n var operationsAutomation = new User(\"operationsAutomation\", UserArgs.builder()\n .acls(UserAclArgs.builder()\n .path(\"/vms/1234\")\n .propagate(true)\n .roleId(operationsMonitoring.roleId())\n .build())\n .comment(\"Managed by Pulumi\")\n .password(\"a-strong-password\")\n .userId(\"operations-automation@pve\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsAutomation:\n type: proxmoxve:Permission:User\n name: operations_automation\n properties:\n acls:\n - path: /vms/1234\n propagate: true\n roleId: ${operationsMonitoring.roleId}\n comment: Managed by Pulumi\n password: a-strong-password\n userId: operations-automation@pve\n operationsMonitoring:\n type: proxmoxve:Permission:Role\n name: operations_monitoring\n properties:\n roleId: operations-monitoring\n privileges:\n - VM.GuestAgent.Audit\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `user_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/user:User operations_automation operations-automation@pve\n```\n\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/UserAcl:UserAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The user comment.\n"},"email":{"type":"string","description":"The user's email address.\n"},"enabled":{"type":"boolean","description":"Whether the user account is enabled.\n"},"expirationDate":{"type":"string","description":"The user account's expiration date (RFC 3339).\n"},"firstName":{"type":"string","description":"The user's first name.\n"},"groups":{"type":"array","items":{"type":"string"},"description":"The user's groups.\n"},"keys":{"type":"string","description":"The user's keys.\n"},"lastName":{"type":"string","description":"The user's last name.\n"},"password":{"type":"string","description":"The user's password. Required for PVE or PAM realms.\n","secret":true},"userId":{"type":"string","description":"The user identifier.\n"}},"required":["userId"],"inputProperties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/UserAcl:UserAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The user comment.\n"},"email":{"type":"string","description":"The user's email address.\n"},"enabled":{"type":"boolean","description":"Whether the user account is enabled.\n"},"expirationDate":{"type":"string","description":"The user account's expiration date (RFC 3339).\n"},"firstName":{"type":"string","description":"The user's first name.\n"},"groups":{"type":"array","items":{"type":"string"},"description":"The user's groups.\n"},"keys":{"type":"string","description":"The user's keys.\n"},"lastName":{"type":"string","description":"The user's last name.\n"},"password":{"type":"string","description":"The user's password. Required for PVE or PAM realms.\n","secret":true},"userId":{"type":"string","description":"The user identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["userId"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/UserAcl:UserAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The user comment.\n"},"email":{"type":"string","description":"The user's email address.\n"},"enabled":{"type":"boolean","description":"Whether the user account is enabled.\n"},"expirationDate":{"type":"string","description":"The user account's expiration date (RFC 3339).\n"},"firstName":{"type":"string","description":"The user's first name.\n"},"groups":{"type":"array","items":{"type":"string"},"description":"The user's groups.\n"},"keys":{"type":"string","description":"The user's keys.\n"},"lastName":{"type":"string","description":"The user's last name.\n"},"password":{"type":"string","description":"The user's password. Required for PVE or PAM realms.\n","secret":true},"userId":{"type":"string","description":"The user identifier.\n","willReplaceOnChanges":true}},"type":"object"}},"proxmoxve:Pool/membership:Membership":{"description":"Manages resource pool memberships for containers, virtual machines and storages\n\n\u003e This resource requires the `Pool.Allocate` permission on the pool path (e.g., `/pool/{poolid}`).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst testVm1 = new proxmoxve.vm.VirtualMachine(\"test_vm1\", {\n vmId: 1234,\n nodeName: \"pve\",\n started: false,\n});\nconst testPool = new proxmoxve.permission.Pool(\"test_pool\", {poolId: \"test-pool\"});\nconst vmMembership = new proxmoxve.pool.Membership(\"vm_membership\", {\n poolId: testPool.id,\n vmId: testVm1.id,\n});\nconst storageMembership = new proxmoxve.pool.Membership(\"storage_membership\", {\n poolId: testPool.id,\n storageId: \"local-lvm\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ntest_vm1 = proxmoxve.vm.VirtualMachine(\"test_vm1\",\n vm_id=1234,\n node_name=\"pve\",\n started=False)\ntest_pool = proxmoxve.permission.Pool(\"test_pool\", pool_id=\"test-pool\")\nvm_membership = proxmoxve.pool.Membership(\"vm_membership\",\n pool_id=test_pool.id,\n vm_id=test_vm1.id)\nstorage_membership = proxmoxve.pool.Membership(\"storage_membership\",\n pool_id=test_pool.id,\n storage_id=\"local-lvm\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testVm1 = new ProxmoxVE.VM.VirtualMachine(\"test_vm1\", new()\n {\n VmId = 1234,\n NodeName = \"pve\",\n Started = false,\n });\n\n var testPool = new ProxmoxVE.Permission.Pool(\"test_pool\", new()\n {\n PoolId = \"test-pool\",\n });\n\n var vmMembership = new ProxmoxVE.Pool.Membership(\"vm_membership\", new()\n {\n PoolId = testPool.Id,\n VmId = testVm1.Id,\n });\n\n var storageMembership = new ProxmoxVE.Pool.Membership(\"storage_membership\", new()\n {\n PoolId = testPool.Id,\n StorageId = \"local-lvm\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/pool\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestVm1, err := vm.NewVirtualMachine(ctx, \"test_vm1\", \u0026vm.VirtualMachineArgs{\n\t\t\tVmId: pulumi.Int(1234),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tStarted: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestPool, err := permission.NewPool(ctx, \"test_pool\", \u0026permission.PoolArgs{\n\t\t\tPoolId: pulumi.String(\"test-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pool.NewMembership(ctx, \"vm_membership\", \u0026pool.MembershipArgs{\n\t\t\tPoolId: testPool.ID(),\n\t\t\tVmId: testVm1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pool.NewMembership(ctx, \"storage_membership\", \u0026pool.MembershipArgs{\n\t\t\tPoolId: testPool.ID(),\n\t\t\tStorageId: pulumi.String(\"local-lvm\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachine;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachineArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Pool;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.PoolArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Pool.Membership;\nimport io.muehlbachler.pulumi.proxmoxve.Pool.MembershipArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var testVm1 = new VirtualMachine(\"testVm1\", VirtualMachineArgs.builder()\n .vmId(1234)\n .nodeName(\"pve\")\n .started(false)\n .build());\n\n var testPool = new Pool(\"testPool\", PoolArgs.builder()\n .poolId(\"test-pool\")\n .build());\n\n var vmMembership = new Membership(\"vmMembership\", MembershipArgs.builder()\n .poolId(testPool.id())\n .vmId(testVm1.id())\n .build());\n\n var storageMembership = new Membership(\"storageMembership\", MembershipArgs.builder()\n .poolId(testPool.id())\n .storageId(\"local-lvm\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testVm1:\n type: proxmoxve:VM:VirtualMachine\n name: test_vm1\n properties:\n vmId: 1234\n nodeName: pve\n started: false\n testPool:\n type: proxmoxve:Permission:Pool\n name: test_pool\n properties:\n poolId: test-pool\n vmMembership:\n type: proxmoxve:Pool:Membership\n name: vm_membership\n properties:\n poolId: ${testPool.id}\n vmId: ${testVm1.id}\n storageMembership:\n type: proxmoxve:Pool:Membership\n name: storage_membership\n properties:\n poolId: ${testPool.id}\n storageId: local-lvm\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nResource pool membership can be imported using its unique identifier, e.g.: {pool_id}/{type}/{member_id}\n\n```sh\n$ pulumi import proxmoxve:Pool/membership:Membership example_membership test-pool/vm/102\n```\n\n","properties":{"poolId":{"type":"string","description":"Resource pool id\n"},"storageId":{"type":"string","description":"Storage id\n"},"type":{"type":"string","description":"Resource pool membership type (can be \u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e for VMs and CTs or \u003cspan pulumi-lang-nodejs=\"`storage`\" pulumi-lang-dotnet=\"`Storage`\" pulumi-lang-go=\"`storage`\" pulumi-lang-python=\"`storage`\" pulumi-lang-yaml=\"`storage`\" pulumi-lang-java=\"`storage`\"\u003e`storage`\u003c/span\u003e for storages)\n"},"vmId":{"type":"integer","description":"VM or CT id\n"}},"required":["poolId","type"],"inputProperties":{"poolId":{"type":"string","description":"Resource pool id\n"},"storageId":{"type":"string","description":"Storage id\n"},"vmId":{"type":"integer","description":"VM or CT id\n"}},"requiredInputs":["poolId"],"stateInputs":{"description":"Input properties used for looking up and filtering Membership resources.\n","properties":{"poolId":{"type":"string","description":"Resource pool id\n"},"storageId":{"type":"string","description":"Storage id\n"},"type":{"type":"string","description":"Resource pool membership type (can be \u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e for VMs and CTs or \u003cspan pulumi-lang-nodejs=\"`storage`\" pulumi-lang-dotnet=\"`Storage`\" pulumi-lang-go=\"`storage`\" pulumi-lang-python=\"`storage`\" pulumi-lang-yaml=\"`storage`\" pulumi-lang-java=\"`storage`\"\u003e`storage`\u003c/span\u003e for storages)\n"},"vmId":{"type":"integer","description":"VM or CT id\n"}},"type":"object"}},"proxmoxve:SDNZone/evpn:Evpn":{"description":"EVPN Zone in Proxmox SDN. The EVPN zone creates a routable Layer 3 network, capable of spanning across multiple clusters.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Evpn(\"example\", {\n zoneId: \"evpn1\",\n nodes: [\"pve\"],\n controller: \"evpn-controller1\",\n vrfVxlan: 4000,\n advertiseSubnets: true,\n disableArpNdSuppression: false,\n exitNodes: [\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exitNodesLocalRouting: true,\n primaryExitNode: \"pve-exit1\",\n rtImport: \"65000:65000\",\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Evpn(\"example\",\n zone_id=\"evpn1\",\n nodes=[\"pve\"],\n controller=\"evpn-controller1\",\n vrf_vxlan=4000,\n advertise_subnets=True,\n disable_arp_nd_suppression=False,\n exit_nodes=[\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exit_nodes_local_routing=True,\n primary_exit_node=\"pve-exit1\",\n rt_import=\"65000:65000\",\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Evpn(\"example\", new()\n {\n ZoneId = \"evpn1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Controller = \"evpn-controller1\",\n VrfVxlan = 4000,\n AdvertiseSubnets = true,\n DisableArpNdSuppression = false,\n ExitNodes = new[]\n {\n \"pve-exit1\",\n \"pve-exit2\",\n },\n ExitNodesLocalRouting = true,\n PrimaryExitNode = \"pve-exit1\",\n RtImport = \"65000:65000\",\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewEvpn(ctx, \"example\", \u0026sdnzone.EvpnArgs{\n\t\t\tZoneId: pulumi.String(\"evpn1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tController: pulumi.String(\"evpn-controller1\"),\n\t\t\tVrfVxlan: pulumi.Int(4000),\n\t\t\tAdvertiseSubnets: pulumi.Bool(true),\n\t\t\tDisableArpNdSuppression: pulumi.Bool(false),\n\t\t\tExitNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve-exit1\"),\n\t\t\t\tpulumi.String(\"pve-exit2\"),\n\t\t\t},\n\t\t\tExitNodesLocalRouting: pulumi.Bool(true),\n\t\t\tPrimaryExitNode: pulumi.String(\"pve-exit1\"),\n\t\t\tRtImport: pulumi.String(\"65000:65000\"),\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Evpn;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.EvpnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Evpn(\"example\", EvpnArgs.builder()\n .zoneId(\"evpn1\")\n .nodes(\"pve\")\n .controller(\"evpn-controller1\")\n .vrfVxlan(4000)\n .advertiseSubnets(true)\n .disableArpNdSuppression(false)\n .exitNodes( \n \"pve-exit1\",\n \"pve-exit2\")\n .exitNodesLocalRouting(true)\n .primaryExitNode(\"pve-exit1\")\n .rtImport(\"65000:65000\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Evpn\n properties:\n zoneId: evpn1\n nodes:\n - pve\n controller: evpn-controller1\n vrfVxlan: 4000 # Optional attributes\n advertiseSubnets: true\n disableArpNdSuppression: false\n exitNodes:\n - pve-exit1\n - pve-exit2\n exitNodesLocalRouting: true\n primaryExitNode: pve-exit1\n rtImport: 65000:65000\n mtu: 1450 # Generic optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nEVPN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/evpn:Evpn example evpn1\n```\n\n","properties":{"advertiseSubnets":{"type":"boolean","description":"Enable subnet advertisement for EVPN.\n"},"controller":{"type":"string","description":"EVPN controller address.\n"},"disableArpNdSuppression":{"type":"boolean","description":"Disable ARP/ND suppression for EVPN.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"exitNodes":{"type":"array","items":{"type":"string"},"description":"List of exit nodes for EVPN.\n"},"exitNodesLocalRouting":{"type":"boolean","description":"Enable local routing for EVPN exit nodes.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"primaryExitNode":{"type":"string","description":"Primary exit node for EVPN.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"rtImport":{"type":"string","description":"Route target import for EVPN.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"vrfVxlan":{"type":"integer","description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["controller","exitNodes","zoneId","nodes","pending","state","vrfVxlan"],"inputProperties":{"advertiseSubnets":{"type":"boolean","description":"Enable subnet advertisement for EVPN.\n"},"controller":{"type":"string","description":"EVPN controller address.\n"},"disableArpNdSuppression":{"type":"boolean","description":"Disable ARP/ND suppression for EVPN.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"exitNodes":{"type":"array","items":{"type":"string"},"description":"List of exit nodes for EVPN.\n"},"exitNodesLocalRouting":{"type":"boolean","description":"Enable local routing for EVPN exit nodes.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"primaryExitNode":{"type":"string","description":"Primary exit node for EVPN.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"rtImport":{"type":"string","description":"Route target import for EVPN.\n"},"vrfVxlan":{"type":"integer","description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["controller","zoneId","vrfVxlan"],"stateInputs":{"description":"Input properties used for looking up and filtering Evpn resources.\n","properties":{"advertiseSubnets":{"type":"boolean","description":"Enable subnet advertisement for EVPN.\n"},"controller":{"type":"string","description":"EVPN controller address.\n"},"disableArpNdSuppression":{"type":"boolean","description":"Disable ARP/ND suppression for EVPN.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"exitNodes":{"type":"array","items":{"type":"string"},"description":"List of exit nodes for EVPN.\n"},"exitNodesLocalRouting":{"type":"boolean","description":"Enable local routing for EVPN exit nodes.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"primaryExitNode":{"type":"string","description":"Primary exit node for EVPN.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"rtImport":{"type":"string","description":"Route target import for EVPN.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"vrfVxlan":{"type":"integer","description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/qinq:Qinq":{"description":"QinQ Zone in Proxmox SDN. QinQ also known as VLAN stacking, that uses multiple layers of VLAN tags for isolation. The QinQ zone defines the outer VLAN tag (the Service VLAN) whereas the inner VLAN tag is defined by the VNet. Your physical network switches must support stacked VLANs for this configuration. Due to the double stacking of tags, you need 4 more bytes for QinQ VLANs. For example, you must reduce the MTU to 1496 if you physical interface MTU is 1500.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Qinq(\"example\", {\n zoneId: \"qinq1\",\n bridge: \"vmbr0\",\n serviceVlan: 100,\n serviceVlanProtocol: \"802.1ad\",\n mtu: 1496,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Qinq(\"example\",\n zone_id=\"qinq1\",\n bridge=\"vmbr0\",\n service_vlan=100,\n service_vlan_protocol=\"802.1ad\",\n mtu=1496,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Qinq(\"example\", new()\n {\n ZoneId = \"qinq1\",\n Bridge = \"vmbr0\",\n ServiceVlan = 100,\n ServiceVlanProtocol = \"802.1ad\",\n Mtu = 1496,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewQinq(ctx, \"example\", \u0026sdnzone.QinqArgs{\n\t\t\tZoneId: pulumi.String(\"qinq1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tServiceVlan: pulumi.Int(100),\n\t\t\tServiceVlanProtocol: pulumi.String(\"802.1ad\"),\n\t\t\tMtu: pulumi.Int(1496),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Qinq;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.QinqArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Qinq(\"example\", QinqArgs.builder()\n .zoneId(\"qinq1\")\n .bridge(\"vmbr0\")\n .serviceVlan(100)\n .serviceVlanProtocol(\"802.1ad\")\n .mtu(1496)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Qinq\n properties:\n zoneId: qinq1\n bridge: vmbr0\n serviceVlan: 100\n serviceVlanProtocol: 802.1ad\n mtu: 1496 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nQinQ SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/qinq:Qinq example qinq1\n```\n\n","properties":{"bridge":{"type":"string","description":"A local, VLAN-aware bridge that is already configured on each local node\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"serviceVlan":{"type":"integer","description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n"},"serviceVlanProtocol":{"type":"string","description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["bridge","zoneId","nodes","pending","serviceVlan","state"],"inputProperties":{"bridge":{"type":"string","description":"A local, VLAN-aware bridge that is already configured on each local node\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"serviceVlan":{"type":"integer","description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n"},"serviceVlanProtocol":{"type":"string","description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["bridge","zoneId","serviceVlan"],"stateInputs":{"description":"Input properties used for looking up and filtering Qinq resources.\n","properties":{"bridge":{"type":"string","description":"A local, VLAN-aware bridge that is already configured on each local node\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"serviceVlan":{"type":"integer","description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n"},"serviceVlanProtocol":{"type":"string","description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/simple:Simple":{"description":"Simple Zone in Proxmox SDN. It will create an isolated VNet bridge. This bridge is not linked to a physical interface, and VM traffic is only local on each the node. It can be used in NAT or routed setups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Simple(\"example\", {\n zoneId: \"simple1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Simple(\"example\",\n zone_id=\"simple1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Simple(\"example\", new()\n {\n ZoneId = \"simple1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewSimple(ctx, \"example\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"simple1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Simple(\"example\", SimpleArgs.builder()\n .zoneId(\"simple1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Simple\n properties:\n zoneId: simple1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSimple SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/simple:Simple example simple1\n```\n\n","properties":{"dhcp":{"type":"string","description":"The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["zoneId","nodes","pending","state"],"inputProperties":{"dhcp":{"type":"string","description":"The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["zoneId"],"stateInputs":{"description":"Input properties used for looking up and filtering Simple resources.\n","properties":{"dhcp":{"type":"string","description":"The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/vlan:Vlan":{"description":"VLAN Zone in Proxmox SDN. It uses an existing local Linux or OVS bridge to connect to the node's physical interface. It uses VLAN tagging defined in the VNet to isolate the network segments. This allows connectivity of VMs between different nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vlan(\"example\", {\n zoneId: \"vlan1\",\n bridge: \"vmbr0\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vlan(\"example\",\n zone_id=\"vlan1\",\n bridge=\"vmbr0\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vlan(\"example\", new()\n {\n ZoneId = \"vlan1\",\n Bridge = \"vmbr0\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVlan(ctx, \"example\", \u0026sdnzone.VlanArgs{\n\t\t\tZoneId: pulumi.String(\"vlan1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vlan(\"example\", VlanArgs.builder()\n .zoneId(\"vlan1\")\n .bridge(\"vmbr0\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vlan\n properties:\n zoneId: vlan1\n bridge: vmbr0\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vlan:Vlan example vlan1\n```\n\n","properties":{"bridge":{"type":"string","description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["bridge","zoneId","nodes","pending","state"],"inputProperties":{"bridge":{"type":"string","description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["bridge","zoneId"],"stateInputs":{"description":"Input properties used for looking up and filtering Vlan resources.\n","properties":{"bridge":{"type":"string","description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/vxlan:Vxlan":{"description":"VXLAN Zone in Proxmox SDN. It establishes a tunnel (overlay) on top of an existing network (underlay). This encapsulates layer 2 Ethernet frames within layer 4 UDP datagrams using the default destination port 4789. You have to configure the underlay network yourself to enable UDP connectivity between all peers. Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes lower than the outgoing physical interface.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vxlan(\"example\", {\n zoneId: \"vxlan1\",\n peers: [\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vxlan(\"example\",\n zone_id=\"vxlan1\",\n peers=[\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vxlan(\"example\", new()\n {\n ZoneId = \"vxlan1\",\n Peers = new[]\n {\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n },\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVxlan(ctx, \"example\", \u0026sdnzone.VxlanArgs{\n\t\t\tZoneId: pulumi.String(\"vxlan1\"),\n\t\t\tPeers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.0.0.1\"),\n\t\t\t\tpulumi.String(\"10.0.0.2\"),\n\t\t\t\tpulumi.String(\"10.0.0.3\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vxlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VxlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vxlan(\"example\", VxlanArgs.builder()\n .zoneId(\"vxlan1\")\n .peers( \n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vxlan\n properties:\n zoneId: vxlan1\n peers:\n - 10.0.0.1\n - 10.0.0.2\n - 10.0.0.3\n mtu: 1450 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVXLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vxlan:Vxlan example vxlan1\n```\n\n","properties":{"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"peers":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["zoneId","nodes","peers","pending","state"],"inputProperties":{"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"peers":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["zoneId","peers"],"stateInputs":{"description":"Input properties used for looking up and filtering Vxlan resources.\n","properties":{"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"peers":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:Sdn/applier:Applier":{"description":"**EXPERIMENTAL** Triggers Proxmox's SDN **Apply** (equivalent to `PUT /cluster/sdn`).Intended to be used with \u003cspan pulumi-lang-nodejs=\"`replaceTriggeredBy`\" pulumi-lang-dotnet=\"`ReplaceTriggeredBy`\" pulumi-lang-go=\"`replaceTriggeredBy`\" pulumi-lang-python=\"`replace_triggered_by`\" pulumi-lang-yaml=\"`replaceTriggeredBy`\" pulumi-lang-java=\"`replaceTriggeredBy`\"\u003e`replace_triggered_by`\u003c/span\u003e so it runs after SDN objects change.\n\n","properties":{"onCreate":{"type":"boolean","description":"Whether to apply SDN configuration on resource creation. Defaults to true.\n"},"onDestroy":{"type":"boolean","description":"Whether to apply SDN configuration on resource destruction. Defaults to true.\n"}},"required":["onCreate","onDestroy"],"inputProperties":{"onCreate":{"type":"boolean","description":"Whether to apply SDN configuration on resource creation. Defaults to true.\n"},"onDestroy":{"type":"boolean","description":"Whether to apply SDN configuration on resource destruction. Defaults to true.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Applier resources.\n","properties":{"onCreate":{"type":"boolean","description":"Whether to apply SDN configuration on resource creation. Defaults to true.\n"},"onDestroy":{"type":"boolean","description":"Whether to apply SDN configuration on resource destruction. Defaults to true.\n"}},"type":"object"}},"proxmoxve:Sdn/subnet:Subnet":{"description":"Manages SDN Subnets in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n nodes: [\"pve\"],\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - Basic vnet\nconst exampleVnet1 = new proxmoxve.sdn.Vnet(\"example_vnet_1\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - VNet with alias and port isolation\nconst exampleVnet2 = new proxmoxve.sdn.Vnet(\"example_vnet_2\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Example VNet 2\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// Basic Subnet\nconst basicSubnet = new proxmoxve.sdn.Subnet(\"basic_subnet\", {\n cidr: \"192.168.1.0/24\",\n vnet: exampleVnet1.vnetId,\n gateway: \"192.168.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// Subnet with DHCP Configuration\nconst dhcpSubnet = new proxmoxve.sdn.Subnet(\"dhcp_subnet\", {\n cidr: \"192.168.2.0/24\",\n vnet: exampleVnet2.vnetId,\n gateway: \"192.168.2.1\",\n dhcpDnsServer: \"192.168.2.53\",\n dnsZonePrefix: \"internal.example.com\",\n snat: true,\n dhcpRange: {\n startAddress: \"192.168.2.10\",\n endAddress: \"192.168.2.100\",\n },\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst subnetApplier = new proxmoxve.sdn.Applier(\"subnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n nodes=[\"pve\"],\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - Basic vnet\nexample_vnet1 = proxmoxve.sdn.Vnet(\"example_vnet_1\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - VNet with alias and port isolation\nexample_vnet2 = proxmoxve.sdn.Vnet(\"example_vnet_2\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Example VNet 2\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic Subnet\nbasic_subnet = proxmoxve.sdn.Subnet(\"basic_subnet\",\n cidr=\"192.168.1.0/24\",\n vnet=example_vnet1.vnet_id,\n gateway=\"192.168.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Subnet with DHCP Configuration\ndhcp_subnet = proxmoxve.sdn.Subnet(\"dhcp_subnet\",\n cidr=\"192.168.2.0/24\",\n vnet=example_vnet2.vnet_id,\n gateway=\"192.168.2.1\",\n dhcp_dns_server=\"192.168.2.53\",\n dns_zone_prefix=\"internal.example.com\",\n snat=True,\n dhcp_range={\n \"start_address\": \"192.168.2.10\",\n \"end_address\": \"192.168.2.100\",\n },\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nsubnet_applier = proxmoxve.sdn.Applier(\"subnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n example_vnet1,\n example_vnet2,\n basic_subnet,\n dhcp_subnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_1\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_2\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Example VNet 2\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic Subnet\n var basicSubnet = new ProxmoxVE.Sdn.Subnet(\"basic_subnet\", new()\n {\n Cidr = \"192.168.1.0/24\",\n Vnet = exampleVnet1.VnetId,\n Gateway = \"192.168.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new ProxmoxVE.Sdn.Subnet(\"dhcp_subnet\", new()\n {\n Cidr = \"192.168.2.0/24\",\n Vnet = exampleVnet2.VnetId,\n Gateway = \"192.168.2.1\",\n DhcpDnsServer = \"192.168.2.53\",\n DnsZonePrefix = \"internal.example.com\",\n Snat = true,\n DhcpRange = new ProxmoxVE.Sdn.Inputs.SubnetDhcpRangeArgs\n {\n StartAddress = \"192.168.2.10\",\n EndAddress = \"192.168.2.100\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var subnetApplier = new ProxmoxVE.Sdn.Applier(\"subnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - Basic vnet\n\t\texampleVnet1, err := sdn.NewVnet(ctx, \"example_vnet_1\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - VNet with alias and port isolation\n\t\texampleVnet2, err := sdn.NewVnet(ctx, \"example_vnet_2\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Example VNet 2\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic Subnet\n\t\tbasicSubnet, err := sdn.NewSubnet(ctx, \"basic_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.1.0/24\"),\n\t\t\tVnet: exampleVnet1.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Subnet with DHCP Configuration\n\t\tdhcpSubnet, err := sdn.NewSubnet(ctx, \"dhcp_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.2.0/24\"),\n\t\t\tVnet: exampleVnet2.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.2.1\"),\n\t\t\tDhcpDnsServer: pulumi.String(\"192.168.2.53\"),\n\t\t\tDnsZonePrefix: pulumi.String(\"internal.example.com\"),\n\t\t\tSnat: pulumi.Bool(true),\n\t\t\tDhcpRange: \u0026sdn.SubnetDhcpRangeArgs{\n\t\t\t\tStartAddress: pulumi.String(\"192.168.2.10\"),\n\t\t\t\tEndAddress: pulumi.String(\"192.168.2.100\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"subnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\texampleVnet1,\n\t\t\texampleVnet2,\n\t\t\tbasicSubnet,\n\t\t\tdhcpSubnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Subnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.SubnetArgs;\nimport com.pulumi.proxmoxve.Sdn.inputs.SubnetDhcpRangeArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .nodes(\"pve\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new Vnet(\"exampleVnet1\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new Vnet(\"exampleVnet2\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Example VNet 2\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic Subnet\n var basicSubnet = new Subnet(\"basicSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.1.0/24\")\n .vnet(exampleVnet1.vnetId())\n .gateway(\"192.168.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new Subnet(\"dhcpSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.2.0/24\")\n .vnet(exampleVnet2.vnetId())\n .gateway(\"192.168.2.1\")\n .dhcpDnsServer(\"192.168.2.53\")\n .dnsZonePrefix(\"internal.example.com\")\n .snat(true)\n .dhcpRange(SubnetDhcpRangeArgs.builder()\n .startAddress(\"192.168.2.10\")\n .endAddress(\"192.168.2.100\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var subnetApplier = new Applier(\"subnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n nodes:\n - pve\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - Basic vnet\n exampleVnet1:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_1\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - VNet with alias and port isolation\n exampleVnet2:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_2\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Example VNet 2\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # Basic Subnet\n basicSubnet:\n type: proxmoxve:Sdn:Subnet\n name: basic_subnet\n properties:\n cidr: 192.168.1.0/24\n vnet: ${exampleVnet1.vnetId}\n gateway: 192.168.1.1\n options:\n dependsOn:\n - ${finalizer}\n # Subnet with DHCP Configuration\n dhcpSubnet:\n type: proxmoxve:Sdn:Subnet\n name: dhcp_subnet\n properties:\n cidr: 192.168.2.0/24\n vnet: ${exampleVnet2.vnetId}\n gateway: 192.168.2.1\n dhcpDnsServer: 192.168.2.53\n dnsZonePrefix: internal.example.com\n snat: true\n dhcpRange:\n startAddress: 192.168.2.10\n endAddress: 192.168.2.100\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n subnetApplier:\n type: proxmoxve:Sdn:Applier\n name: subnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${exampleVnet1}\n - ${exampleVnet2}\n - ${basicSubnet}\n - ${dhcpSubnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN subnet can be imported using its unique identifier in the format: \u003cvnet\u003e/\u003csubnet-id\u003e\n\nThe \u003csubnet-id\u003e is the canonical ID from Proxmox, e.g., \"zone1-192.168.1.0-24\"\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet basic_subnet vnet1/zone1-192.168.1.0-24\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet dhcp_subnet vnet2/zone2-192.168.2.0-24\n```\n\n","properties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpDnsServer":{"type":"string","description":"The DNS server used for DHCP.\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"type":"string","description":"Prefix used for DNS zone delegation.\n"},"gateway":{"type":"string","description":"The gateway address for the subnet.\n"},"snat":{"type":"boolean","description":"Whether SNAT is enabled for the subnet.\n"},"vnet":{"type":"string","description":"The VNet to which this subnet belongs.\n"}},"required":["cidr","vnet"],"inputProperties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpDnsServer":{"type":"string","description":"The DNS server used for DHCP.\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"type":"string","description":"Prefix used for DNS zone delegation.\n"},"gateway":{"type":"string","description":"The gateway address for the subnet.\n"},"snat":{"type":"boolean","description":"Whether SNAT is enabled for the subnet.\n"},"vnet":{"type":"string","description":"The VNet to which this subnet belongs.\n"}},"requiredInputs":["cidr","vnet"],"stateInputs":{"description":"Input properties used for looking up and filtering Subnet resources.\n","properties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpDnsServer":{"type":"string","description":"The DNS server used for DHCP.\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"type":"string","description":"Prefix used for DNS zone delegation.\n"},"gateway":{"type":"string","description":"The gateway address for the subnet.\n"},"snat":{"type":"boolean","description":"Whether SNAT is enabled for the subnet.\n"},"vnet":{"type":"string","description":"The VNet to which this subnet belongs.\n"}},"type":"object"}},"proxmoxve:Sdn/vnet:Vnet":{"description":"Manages Proxmox VE SDN VNet.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// Basic VNet (Simple)\nconst basicVnet = new proxmoxve.sdn.Vnet(\"basic_vnet\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// VNet with Alias and Port Isolation\nconst isolatedVnet = new proxmoxve.sdn.Vnet(\"isolated_vnet\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Isolated VNet\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst vnetApplier = new proxmoxve.sdn.Applier(\"vnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic VNet (Simple)\nbasic_vnet = proxmoxve.sdn.Vnet(\"basic_vnet\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# VNet with Alias and Port Isolation\nisolated_vnet = proxmoxve.sdn.Vnet(\"isolated_vnet\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Isolated VNet\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nvnet_applier = proxmoxve.sdn.Applier(\"vnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n basic_vnet,\n isolated_vnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic VNet (Simple)\n var basicVnet = new ProxmoxVE.Sdn.Vnet(\"basic_vnet\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new ProxmoxVE.Sdn.Vnet(\"isolated_vnet\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Isolated VNet\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var vnetApplier = new ProxmoxVE.Sdn.Applier(\"vnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic VNet (Simple)\n\t\tbasicVnet, err := sdn.NewVnet(ctx, \"basic_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// VNet with Alias and Port Isolation\n\t\tisolatedVnet, err := sdn.NewVnet(ctx, \"isolated_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Isolated VNet\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"vnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\tbasicVnet,\n\t\t\tisolatedVnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic VNet (Simple)\n var basicVnet = new Vnet(\"basicVnet\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new Vnet(\"isolatedVnet\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Isolated VNet\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var vnetApplier = new Applier(\"vnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # Basic VNet (Simple)\n basicVnet:\n type: proxmoxve:Sdn:Vnet\n name: basic_vnet\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # VNet with Alias and Port Isolation\n isolatedVnet:\n type: proxmoxve:Sdn:Vnet\n name: isolated_vnet\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Isolated VNet\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n vnetApplier:\n type: proxmoxve:Sdn:Applier\n name: vnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${basicVnet}\n - ${isolatedVnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN vnet can be imported using its unique identifier (vnet ID)\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet basic_vnet vnet1\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet isolated_vnet vnet2\n```\n\n","properties":{"alias":{"type":"string","description":"An optional alias for this VNet.\n"},"isolatePorts":{"type":"boolean","description":"Isolate ports within this VNet.\n"},"tag":{"type":"integer","description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n"},"vlanAware":{"type":"boolean","description":"Allow VM VLANs to pass through this VNet.\n"},"vnetId":{"type":"string","description":"The unique identifier of the SDN VNet.\n"},"zone":{"type":"string","description":"The zone to which this VNet belongs.\n"}},"required":["vnetId","zone"],"inputProperties":{"alias":{"type":"string","description":"An optional alias for this VNet.\n"},"isolatePorts":{"type":"boolean","description":"Isolate ports within this VNet.\n"},"tag":{"type":"integer","description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n"},"vlanAware":{"type":"boolean","description":"Allow VM VLANs to pass through this VNet.\n"},"vnetId":{"type":"string","description":"The unique identifier of the SDN VNet.\n"},"zone":{"type":"string","description":"The zone to which this VNet belongs.\n"}},"requiredInputs":["vnetId","zone"],"stateInputs":{"description":"Input properties used for looking up and filtering Vnet resources.\n","properties":{"alias":{"type":"string","description":"An optional alias for this VNet.\n"},"isolatePorts":{"type":"boolean","description":"Isolate ports within this VNet.\n"},"tag":{"type":"integer","description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n"},"vlanAware":{"type":"boolean","description":"Allow VM VLANs to pass through this VNet.\n"},"vnetId":{"type":"string","description":"The unique identifier of the SDN VNet.\n"},"zone":{"type":"string","description":"The zone to which this VNet belongs.\n"}},"type":"object"}},"proxmoxve:Storage/file:File":{"description":"Use this resource to upload files to a Proxmox VE node. The file can be a backup, an ISO image, a Disk Image, a snippet, or a container template depending on the \u003cspan pulumi-lang-nodejs=\"`contentType`\" pulumi-lang-dotnet=\"`ContentType`\" pulumi-lang-go=\"`contentType`\" pulumi-lang-python=\"`content_type`\" pulumi-lang-yaml=\"`contentType`\" pulumi-lang-java=\"`contentType`\"\u003e`content_type`\u003c/span\u003e attribute.\n\n## Example Usage\n\n### Backups (\u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e)\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003e The provider currently does not support restoring backups. You can use the Proxmox VE web interface or the \u003cspan pulumi-lang-nodejs=\"`qmrestore`\" pulumi-lang-dotnet=\"`Qmrestore`\" pulumi-lang-go=\"`qmrestore`\" pulumi-lang-python=\"`qmrestore`\" pulumi-lang-yaml=\"`qmrestore`\" pulumi-lang-java=\"`qmrestore`\"\u003e`qmrestore`\u003c/span\u003e / `pct restore` command to restore VM / Container from a backup.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst backup = new proxmoxve.storage.File(\"backup\", {\n contentType: \"backup\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nbackup = proxmoxve.storage.File(\"backup\",\n content_type=\"backup\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup = new ProxmoxVE.Storage.File(\"backup\", new()\n {\n ContentType = \"backup\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"backup\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"backup\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var backup = new File(\"backup\", FileArgs.builder()\n .contentType(\"backup\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup:\n type: proxmoxve:Storage:File\n properties:\n contentType: backup\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Images\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003e Importing Disks is not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource with \u003cspan pulumi-lang-nodejs=\"`contentType \" pulumi-lang-dotnet=\"`ContentType \" pulumi-lang-go=\"`contentType \" pulumi-lang-python=\"`content_type \" pulumi-lang-yaml=\"`contentType \" pulumi-lang-java=\"`contentType \"\u003e`content_type \u003c/span\u003e= \"import\"`.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"import\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"import\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: import\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Snippets\n\n\u003e Snippets are not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource.\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as std from \"@pulumi/std\";\n\nconst cloudConfig = new proxmoxve.storage.File(\"cloud_config\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceRaw: {\n data: std.trimspace({\n input: example.publicKeyOpenssh,\n }).then(invoke =\u003e `#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - ${invoke.result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n`),\n fileName: \"example.cloud-config.yaml\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_std as std\n\ncloud_config = proxmoxve.storage.File(\"cloud_config\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_raw={\n \"data\": f\"\"\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {std.trimspace(input=example[\"publicKeyOpenssh\"]).result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"\"\",\n \"file_name\": \"example.cloud-config.yaml\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudConfig = new ProxmoxVE.Storage.File(\"cloud_config\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = Std.Trimspace.Invoke(new()\n {\n Input = example.PublicKeyOpenssh,\n }).Apply(invoke =\u003e @$\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {invoke.Result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"),\n FileName = \"example.cloud-config.yaml\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinvokeTrimspace, err := std.Trimspace(ctx, \u0026std.TrimspaceArgs{\n\t\t\tInput: example.PublicKeyOpenssh,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewFile(ctx, \"cloud_config\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.Sprintf(`#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %v\n sudo: ALL=(ALL) NOPASSWD:ALL\n`, invokeTrimspace.Result),\n\t\t\t\tFileName: pulumi.String(\"example.cloud-config.yaml\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudConfig = new File(\"cloudConfig\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %s\n sudo: ALL=(ALL) NOPASSWD:ALL\n\", StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(example.publicKeyOpenssh())\n .build()).result()))\n .fileName(\"example.cloud-config.yaml\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudConfig:\n type: proxmoxve:Storage:File\n name: cloud_config\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n sourceRaw:\n data:\n fn::join:\n - \"\"\n - - \"#cloud-config\\nchpasswd:\\n list: |\\n ubuntu:example\\n expire: false\\nhostname: example-hostname\\npackages:\\n - qemu-guest-agent\\nusers:\\n - default\\n - name: ubuntu\\n groups: sudo\\n shell: /bin/bash\\n ssh-authorized-keys:\\n - \"\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${example.publicKeyOpenssh}\n return: result\n - |2\n sudo: ALL=(ALL) NOPASSWD:ALL\n fileName: example.cloud-config.yaml\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nThe \u003cspan pulumi-lang-nodejs=\"`fileMode`\" pulumi-lang-dotnet=\"`FileMode`\" pulumi-lang-go=\"`fileMode`\" pulumi-lang-python=\"`file_mode`\" pulumi-lang-yaml=\"`fileMode`\" pulumi-lang-java=\"`fileMode`\"\u003e`file_mode`\u003c/span\u003e attribute can be used to make a script file executable, e.g. when referencing the file in the \u003cspan pulumi-lang-nodejs=\"`hookScriptFileId`\" pulumi-lang-dotnet=\"`HookScriptFileId`\" pulumi-lang-go=\"`hookScriptFileId`\" pulumi-lang-python=\"`hook_script_file_id`\" pulumi-lang-yaml=\"`hookScriptFileId`\" pulumi-lang-java=\"`hookScriptFileId`\"\u003e`hook_script_file_id`\u003c/span\u003e attribute of a container or a VM resource which is a requirement enforced by the Proxmox VE API.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst hookScript = new proxmoxve.storage.File(\"hook_script\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n fileMode: \"0700\",\n sourceRaw: {\n data: `#!/usr/bin/env bash\n\necho \\\\\"Running hook script\\\\\"\n`,\n fileName: \"prepare-hook.sh\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nhook_script = proxmoxve.storage.File(\"hook_script\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n file_mode=\"0700\",\n source_raw={\n \"data\": \"\"\"#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n\"\"\",\n \"file_name\": \"prepare-hook.sh\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hookScript = new ProxmoxVE.Storage.File(\"hook_script\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n FileMode = \"0700\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = @\"#!/usr/bin/env bash\n\necho \\\"\"Running hook script\\\"\"\n\",\n FileName = \"prepare-hook.sh\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"hook_script\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tFileMode: pulumi.String(\"0700\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.String(\"#!/usr/bin/env bash\\n\\necho \\\\\\\"Running hook script\\\\\\\"\\n\"),\n\t\t\t\tFileName: pulumi.String(\"prepare-hook.sh\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hookScript = new File(\"hookScript\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .fileMode(\"0700\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n \"\"\")\n .fileName(\"prepare-hook.sh\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hookScript:\n type: proxmoxve:Storage:File\n name: hook_script\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n fileMode: '0700'\n sourceRaw:\n data: |\n #!/usr/bin/env bash\n\n echo \\\"Running hook script\\\"\n fileName: prepare-hook.sh\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Container Template (\u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e)\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for container images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n sourceFile: {\n path: \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n source_file={\n \"path\": \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n sourceFile:\n path: http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nThe Proxmox VE API endpoint for file uploads does not support chunked transfer\nencoding, which means that we must first store the source file as a temporary\nfile locally before uploading it.\n\nYou must ensure that you have at least `Size-in-MB * 2 + 1` MB of storage space\navailable (twice the size plus overhead because a multipart payload needs to be\ncreated as another temporary file).\n\nBy default, if the specified file already exists, the resource will\nunconditionally replace it and take ownership of the resource. On destruction,\nthe file will be deleted as if it did not exist before. If you want to prevent\nthe resource from replacing the file, set \u003cspan pulumi-lang-nodejs=\"`overwrite`\" pulumi-lang-dotnet=\"`Overwrite`\" pulumi-lang-go=\"`overwrite`\" pulumi-lang-python=\"`overwrite`\" pulumi-lang-yaml=\"`overwrite`\" pulumi-lang-java=\"`overwrite`\"\u003e`overwrite`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n\n## Import\n\nInstances can be imported using the `node_name`, `datastore_id`, `content_type`\n\nand the `file_name` in the following format:\n\ntext\n\nnode_name:datastore_id/content_type/file_name\n\nExample:\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Storage/file:File cloud_config pve/local:snippets/example.cloud-config.yaml\n```\n\n","properties":{"contentType":{"type":"string","description":"The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n"},"datastoreId":{"type":"string","description":"The datastore id.\n"},"fileMode":{"type":"string","description":"The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n"},"fileModificationDate":{"type":"string","description":"The file modification date (RFC 3339).\n"},"fileName":{"type":"string","description":"The file name.\n"},"fileSize":{"type":"integer","description":"The file size in bytes.\n"},"fileTag":{"type":"string","description":"The file tag.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"sourceFile":{"$ref":"#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile","description":"The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n"},"sourceRaw":{"$ref":"#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw","description":"The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n"},"timeoutUpload":{"type":"integer","description":"Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n"}},"required":["contentType","datastoreId","fileModificationDate","fileName","fileSize","fileTag","nodeName"],"inputProperties":{"contentType":{"type":"string","description":"The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n","willReplaceOnChanges":true},"datastoreId":{"type":"string","description":"The datastore id.\n","willReplaceOnChanges":true},"fileMode":{"type":"string","description":"The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"sourceFile":{"$ref":"#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile","description":"The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n","willReplaceOnChanges":true},"sourceRaw":{"$ref":"#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw","description":"The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutUpload":{"type":"integer","description":"Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n"}},"requiredInputs":["datastoreId","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering File resources.\n","properties":{"contentType":{"type":"string","description":"The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n","willReplaceOnChanges":true},"datastoreId":{"type":"string","description":"The datastore id.\n","willReplaceOnChanges":true},"fileMode":{"type":"string","description":"The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n","willReplaceOnChanges":true},"fileModificationDate":{"type":"string","description":"The file modification date (RFC 3339).\n","willReplaceOnChanges":true},"fileName":{"type":"string","description":"The file name.\n"},"fileSize":{"type":"integer","description":"The file size in bytes.\n","willReplaceOnChanges":true},"fileTag":{"type":"string","description":"The file tag.\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"sourceFile":{"$ref":"#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile","description":"The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n","willReplaceOnChanges":true},"sourceRaw":{"$ref":"#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw","description":"The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutUpload":{"type":"integer","description":"Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n"}},"type":"object"}},"proxmoxve:User/token:Token":{"description":"User API tokens.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// if creating a user token, the user must be created first\nconst user = new proxmoxve.permission.User(\"user\", {\n comment: \"Managed by Pulumi\",\n email: \"user@pve\",\n enabled: true,\n expirationDate: \"2034-01-01T22:00:00Z\",\n userId: \"user@pve\",\n});\nconst userToken = new proxmoxve.user.Token(\"user_token\", {\n comment: \"Managed by Pulumi\",\n expirationDate: \"2033-01-01T22:00:00Z\",\n tokenName: \"tk1\",\n userId: user.userId,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# if creating a user token, the user must be created first\nuser = proxmoxve.permission.User(\"user\",\n comment=\"Managed by Pulumi\",\n email=\"user@pve\",\n enabled=True,\n expiration_date=\"2034-01-01T22:00:00Z\",\n user_id=\"user@pve\")\nuser_token = proxmoxve.user.Token(\"user_token\",\n comment=\"Managed by Pulumi\",\n expiration_date=\"2033-01-01T22:00:00Z\",\n token_name=\"tk1\",\n user_id=user.user_id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // if creating a user token, the user must be created first\n var user = new ProxmoxVE.Permission.User(\"user\", new()\n {\n Comment = \"Managed by Pulumi\",\n Email = \"user@pve\",\n Enabled = true,\n ExpirationDate = \"2034-01-01T22:00:00Z\",\n UserId = \"user@pve\",\n });\n\n var userToken = new ProxmoxVE.User.Token(\"user_token\", new()\n {\n Comment = \"Managed by Pulumi\",\n ExpirationDate = \"2033-01-01T22:00:00Z\",\n TokenName = \"tk1\",\n UserId = user.UserId,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/user\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// if creating a user token, the user must be created first\n\t\tuser, err := permission.NewUser(ctx, \"user\", \u0026permission.UserArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tEmail: pulumi.String(\"user@pve\"),\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tExpirationDate: pulumi.String(\"2034-01-01T22:00:00Z\"),\n\t\t\tUserId: pulumi.String(\"user@pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = user.NewToken(ctx, \"user_token\", \u0026user.TokenArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tExpirationDate: pulumi.String(\"2033-01-01T22:00:00Z\"),\n\t\t\tTokenName: pulumi.String(\"tk1\"),\n\t\t\tUserId: user.UserId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.User;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.UserArgs;\nimport io.muehlbachler.pulumi.proxmoxve.User.Token;\nimport io.muehlbachler.pulumi.proxmoxve.User.TokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // if creating a user token, the user must be created first\n var user = new User(\"user\", UserArgs.builder()\n .comment(\"Managed by Pulumi\")\n .email(\"user@pve\")\n .enabled(true)\n .expirationDate(\"2034-01-01T22:00:00Z\")\n .userId(\"user@pve\")\n .build());\n\n var userToken = new Token(\"userToken\", TokenArgs.builder()\n .comment(\"Managed by Pulumi\")\n .expirationDate(\"2033-01-01T22:00:00Z\")\n .tokenName(\"tk1\")\n .userId(user.userId())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # if creating a user token, the user must be created first\n user:\n type: proxmoxve:Permission:User\n properties:\n comment: Managed by Pulumi\n email: user@pve\n enabled: true\n expirationDate: 2034-01-01T22:00:00Z\n userId: user@pve\n userToken:\n type: proxmoxve:User:Token\n name: user_token\n properties:\n comment: Managed by Pulumi\n expirationDate: 2033-01-01T22:00:00Z\n tokenName: tk1\n userId: ${user.userId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n#Tokens can be imported using they identifiers in format `user_id!token_name` format, e.g.:\n\n```sh\n$ pulumi import proxmoxve:User/token:Token token1 user@pve!token1\n```\n\n","properties":{"comment":{"type":"string","description":"Comment for the token.\n"},"expirationDate":{"type":"string","description":"Expiration date for the token.\n"},"privilegesSeparation":{"type":"boolean","description":"Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n"},"tokenName":{"type":"string","description":"User-specific token identifier.\n"},"userId":{"type":"string","description":"User identifier.\n"},"value":{"type":"string","description":"API token value used for authentication. It is populated only when creating a new token, and can't be retrieved at import.\n","secret":true}},"required":["privilegesSeparation","tokenName","userId","value"],"inputProperties":{"comment":{"type":"string","description":"Comment for the token.\n"},"expirationDate":{"type":"string","description":"Expiration date for the token.\n"},"privilegesSeparation":{"type":"boolean","description":"Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n"},"tokenName":{"type":"string","description":"User-specific token identifier.\n"},"userId":{"type":"string","description":"User identifier.\n"}},"requiredInputs":["tokenName","userId"],"stateInputs":{"description":"Input properties used for looking up and filtering Token resources.\n","properties":{"comment":{"type":"string","description":"Comment for the token.\n"},"expirationDate":{"type":"string","description":"Expiration date for the token.\n"},"privilegesSeparation":{"type":"boolean","description":"Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n"},"tokenName":{"type":"string","description":"User-specific token identifier.\n"},"userId":{"type":"string","description":"User identifier.\n"},"value":{"type":"string","description":"API token value used for authentication. It is populated only when creating a new token, and can't be retrieved at import.\n","secret":true}},"type":"object"}},"proxmoxve:VM/virtualMachine2:VirtualMachine2":{"description":"!\u003e **DO NOT USE**\nThis is an experimental implementation of a Proxmox VM resource using Plugin Framework.\u003cbr\u003e\u003cbr\u003eIt is a Proof of Concept, highly experimental and **will** change in future. It does not support all features of the Proxmox API for VMs and **MUST NOT** be used in production.\n\n\u003e Many attributes are marked as **optional** _and_ **computed** in the schema,\nhence you may seem added to the plan with \"(known after apply)\" status, even if they are not set in the configuration.\nThis is done to support the \u003cspan pulumi-lang-nodejs=\"`clone`\" pulumi-lang-dotnet=\"`Clone`\" pulumi-lang-go=\"`clone`\" pulumi-lang-python=\"`clone`\" pulumi-lang-yaml=\"`clone`\" pulumi-lang-java=\"`clone`\"\u003e`clone`\u003c/span\u003e operation, when a VM is created from an existing VM or template,\nand the source attributes are copied to the clone.\u003cbr\u003e\u003cbr\u003e\nComputed attributes allow the provider to set those attributes without user input.\nThe attributes are also marked as optional to allow the practitioner to set (or overwrite) them if needed.\n","properties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Set to true to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"description":{"type":"string","description":"The description of the VM.\n"},"name":{"type":"string","description":"The name of the VM. Doesn't have to be unique.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"purgeOnDestroy":{"type":"boolean","description":"Set to true to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rng":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Set to true to stop (rather than shutdown) the VM on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Set to true to create a VM template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"}},"required":["cdrom","cpu","deleteUnreferencedDisksOnDestroy","name","nodeName","purgeOnDestroy","rng","stopOnDestroy","tags","vga"],"inputProperties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Set to true to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"description":{"type":"string","description":"The description of the VM.\n"},"name":{"type":"string","description":"The name of the VM. Doesn't have to be unique.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"purgeOnDestroy":{"type":"boolean","description":"Set to true to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rng":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Set to true to stop (rather than shutdown) the VM on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Set to true to create a VM template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering VirtualMachine2 resources.\n","properties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Set to true to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"description":{"type":"string","description":"The description of the VM.\n"},"name":{"type":"string","description":"The name of the VM. Doesn't have to be unique.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"purgeOnDestroy":{"type":"boolean","description":"Set to true to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rng":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Set to true to stop (rather than shutdown) the VM on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Set to true to create a VM template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"}},"type":"object"}},"proxmoxve:VM/virtualMachine:VirtualMachine":{"description":"\n\n## Import\n\nInstances can be imported using the `node_name` and the `vm_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:VM/virtualMachine:VirtualMachine ubuntu_vm first-node/4321\n```\n\n","properties":{"acpi":{"type":"boolean","description":"Whether to enable ACPI (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"agent":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent","description":"The QEMU agent configuration.\n"},"amdSev":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev","description":"Secure Encrypted Virtualization (SEV) features by AMD CPUs.\n"},"audioDevice":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice","description":"An audio device.\n"},"bios":{"type":"string","description":"The BIOS implementation (defaults to \u003cspan pulumi-lang-nodejs=\"`seabios`\" pulumi-lang-dotnet=\"`Seabios`\" pulumi-lang-go=\"`seabios`\" pulumi-lang-python=\"`seabios`\" pulumi-lang-yaml=\"`seabios`\" pulumi-lang-java=\"`seabios`\"\u003e`seabios`\u003c/span\u003e).\n"},"bootOrders":{"type":"array","items":{"type":"string"},"description":"Specify a list of devices to boot from in the order they appear in the list.\n"},"cdrom":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom","description":"The CD-ROM configuration.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachineClone:VirtualMachineClone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Whether to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"description":{"type":"string","description":"The description.\n"},"disks":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk"},"description":"A disk (multiple blocks supported).\n"},"efiDisk":{"$ref":"#/types/proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk","description":"The efi disk device (required if \u003cspan pulumi-lang-nodejs=\"`bios`\" pulumi-lang-dotnet=\"`Bios`\" pulumi-lang-go=\"`bios`\" pulumi-lang-python=\"`bios`\" pulumi-lang-yaml=\"`bios`\" pulumi-lang-java=\"`bios`\"\u003e`bios`\u003c/span\u003e is set\nto \u003cspan pulumi-lang-nodejs=\"`ovmf`\" pulumi-lang-dotnet=\"`Ovmf`\" pulumi-lang-go=\"`ovmf`\" pulumi-lang-python=\"`ovmf`\" pulumi-lang-yaml=\"`ovmf`\" pulumi-lang-java=\"`ovmf`\"\u003e`ovmf`\u003c/span\u003e)\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"hostpcis":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci"},"description":"A host PCI device mapping (multiple blocks supported).\n"},"initialization":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization","description":"The cloud-init configuration.\n"},"ipv4Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv4 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"ipv6Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv6 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"keyboardLayout":{"type":"string","description":"The keyboard layout (defaults to `en-us`).\n"},"kvmArguments":{"type":"string","description":"Arbitrary arguments passed to kvm.\n"},"macAddresses":{"type":"array","items":{"type":"string"},"description":"The MAC addresses published by the QEMU agent with fallback\nto the network device configuration, if the agent is disabled\n"},"machine":{"type":"string","description":"The VM machine type (defaults to \u003cspan pulumi-lang-nodejs=\"`pc`\" pulumi-lang-dotnet=\"`Pc`\" pulumi-lang-go=\"`pc`\" pulumi-lang-python=\"`pc`\" pulumi-lang-yaml=\"`pc`\" pulumi-lang-java=\"`pc`\"\u003e`pc`\u003c/span\u003e).\n"},"memory":{"$ref":"#/types/proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory","description":"The memory configuration.\n"},"migrate":{"type":"boolean","description":"Migrate the VM on node change instead of re-creating\nit (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The virtual machine name.\n"},"networkDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice"},"description":"A network device (multiple blocks supported).\n"},"networkInterfaceNames":{"type":"array","items":{"type":"string"},"description":"The network interface names published by the QEMU\nagent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"nodeName":{"type":"string","description":"The name of the node to assign the virtual machine\nto.\n"},"numas":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma"},"description":"The NUMA configuration.\n"},"onBoot":{"type":"boolean","description":"Specifies whether a VM will be started during system\nboot. (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the virtual machine to.\n"},"protection":{"type":"boolean","description":"Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"purgeOnDestroy":{"type":"boolean","description":"Whether to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"reboot":{"type":"boolean","description":"Reboot the VM after initial creation (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"rebootAfterUpdate":{"type":"boolean","description":"Reboot the VM after update if needed (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rngs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineRng:VirtualMachineRng"},"description":"The random number generator configuration. Can only be set by `root@pam.`\n"},"scsiHardware":{"type":"string","description":"The SCSI hardware type (defaults to\n`virtio-scsi-pci`).\n"},"serialDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice"},"description":"A serial device (multiple blocks supported).\n"},"smbios":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios","description":"The SMBIOS (type1) settings for the VM.\n"},"started":{"type":"boolean","description":"Whether to start the virtual machine (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup","description":"Defines startup and shutdown behavior of the VM.\n"},"stopOnDestroy":{"type":"boolean","description":"Whether to stop rather than shutdown on VM destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"tabletDevice":{"type":"boolean","description":"Whether to enable the USB tablet device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags of the VM. This is only meta information (\ndefaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in\ntemplate is not sorted, then Proxmox will always report a difference on the\nresource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle meta-argument to ignore\nchanges to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"timeoutClone":{"type":"integer","description":"Timeout for cloning a VM in seconds (defaults to\n1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a VM in seconds (defaults to\n1800).\n"},"timeoutMigrate":{"type":"integer","description":"Timeout for migrating the VM (defaults to\n1800).\n"},"timeoutMoveDisk":{"type":"integer","description":"Disk move timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create /\u003cspan pulumi-lang-nodejs=\" timeoutClone \" pulumi-lang-dotnet=\" TimeoutClone \" pulumi-lang-go=\" timeoutClone \" pulumi-lang-python=\" timeout_clone \" pulumi-lang-yaml=\" timeoutClone \" pulumi-lang-java=\" timeoutClone \"\u003e timeout_clone \u003c/span\u003e/ timeout_migrate) is used instead."},"timeoutReboot":{"type":"integer","description":"Timeout for rebooting a VM in seconds (defaults\nto 1800).\n"},"timeoutShutdownVm":{"type":"integer","description":"Timeout for shutting down a VM in seconds (\ndefaults to 1800).\n"},"timeoutStartVm":{"type":"integer","description":"Timeout for starting a VM in seconds (defaults\nto 1800).\n"},"timeoutStopVm":{"type":"integer","description":"Timeout for stopping a VM in seconds (defaults\nto 300).\n"},"tpmState":{"$ref":"#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState","description":"The TPM state device.\n"},"usbs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb"},"description":"A host USB device mapping (multiple blocks supported).\n"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVga:VirtualMachineVga","description":"The VGA configuration.\n"},"virtiofs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof"},"description":"Virtiofs share\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"},"watchdog":{"$ref":"#/types/proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog","description":"The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).\n"}},"required":["bootOrders","ipv4Addresses","ipv6Addresses","macAddresses","name","networkDevices","networkInterfaceNames","nodeName","vga","vmId"],"inputProperties":{"acpi":{"type":"boolean","description":"Whether to enable ACPI (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"agent":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent","description":"The QEMU agent configuration.\n"},"amdSev":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev","description":"Secure Encrypted Virtualization (SEV) features by AMD CPUs.\n","willReplaceOnChanges":true},"audioDevice":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice","description":"An audio device.\n"},"bios":{"type":"string","description":"The BIOS implementation (defaults to \u003cspan pulumi-lang-nodejs=\"`seabios`\" pulumi-lang-dotnet=\"`Seabios`\" pulumi-lang-go=\"`seabios`\" pulumi-lang-python=\"`seabios`\" pulumi-lang-yaml=\"`seabios`\" pulumi-lang-java=\"`seabios`\"\u003e`seabios`\u003c/span\u003e).\n"},"bootOrders":{"type":"array","items":{"type":"string"},"description":"Specify a list of devices to boot from in the order they appear in the list.\n"},"cdrom":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom","description":"The CD-ROM configuration.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachineClone:VirtualMachineClone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Whether to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"description":{"type":"string","description":"The description.\n"},"disks":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk"},"description":"A disk (multiple blocks supported).\n"},"efiDisk":{"$ref":"#/types/proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk","description":"The efi disk device (required if \u003cspan pulumi-lang-nodejs=\"`bios`\" pulumi-lang-dotnet=\"`Bios`\" pulumi-lang-go=\"`bios`\" pulumi-lang-python=\"`bios`\" pulumi-lang-yaml=\"`bios`\" pulumi-lang-java=\"`bios`\"\u003e`bios`\u003c/span\u003e is set\nto \u003cspan pulumi-lang-nodejs=\"`ovmf`\" pulumi-lang-dotnet=\"`Ovmf`\" pulumi-lang-go=\"`ovmf`\" pulumi-lang-python=\"`ovmf`\" pulumi-lang-yaml=\"`ovmf`\" pulumi-lang-java=\"`ovmf`\"\u003e`ovmf`\u003c/span\u003e)\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"hostpcis":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci"},"description":"A host PCI device mapping (multiple blocks supported).\n"},"initialization":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization","description":"The cloud-init configuration.\n"},"keyboardLayout":{"type":"string","description":"The keyboard layout (defaults to `en-us`).\n"},"kvmArguments":{"type":"string","description":"Arbitrary arguments passed to kvm.\n"},"macAddresses":{"type":"array","items":{"type":"string"},"description":"The MAC addresses published by the QEMU agent with fallback\nto the network device configuration, if the agent is disabled\n"},"machine":{"type":"string","description":"The VM machine type (defaults to \u003cspan pulumi-lang-nodejs=\"`pc`\" pulumi-lang-dotnet=\"`Pc`\" pulumi-lang-go=\"`pc`\" pulumi-lang-python=\"`pc`\" pulumi-lang-yaml=\"`pc`\" pulumi-lang-java=\"`pc`\"\u003e`pc`\u003c/span\u003e).\n"},"memory":{"$ref":"#/types/proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory","description":"The memory configuration.\n"},"migrate":{"type":"boolean","description":"Migrate the VM on node change instead of re-creating\nit (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The virtual machine name.\n"},"networkDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice"},"description":"A network device (multiple blocks supported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the virtual machine\nto.\n"},"numas":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma"},"description":"The NUMA configuration.\n"},"onBoot":{"type":"boolean","description":"Specifies whether a VM will be started during system\nboot. (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the virtual machine to.\n"},"protection":{"type":"boolean","description":"Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"purgeOnDestroy":{"type":"boolean","description":"Whether to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"reboot":{"type":"boolean","description":"Reboot the VM after initial creation (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"rebootAfterUpdate":{"type":"boolean","description":"Reboot the VM after update if needed (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rngs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineRng:VirtualMachineRng"},"description":"The random number generator configuration. Can only be set by `root@pam.`\n"},"scsiHardware":{"type":"string","description":"The SCSI hardware type (defaults to\n`virtio-scsi-pci`).\n"},"serialDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice"},"description":"A serial device (multiple blocks supported).\n"},"smbios":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios","description":"The SMBIOS (type1) settings for the VM.\n"},"started":{"type":"boolean","description":"Whether to start the virtual machine (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup","description":"Defines startup and shutdown behavior of the VM.\n"},"stopOnDestroy":{"type":"boolean","description":"Whether to stop rather than shutdown on VM destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"tabletDevice":{"type":"boolean","description":"Whether to enable the USB tablet device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags of the VM. This is only meta information (\ndefaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in\ntemplate is not sorted, then Proxmox will always report a difference on the\nresource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle meta-argument to ignore\nchanges to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a VM in seconds (defaults to\n1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a VM in seconds (defaults to\n1800).\n"},"timeoutMigrate":{"type":"integer","description":"Timeout for migrating the VM (defaults to\n1800).\n"},"timeoutMoveDisk":{"type":"integer","description":"Disk move timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create /\u003cspan pulumi-lang-nodejs=\" timeoutClone \" pulumi-lang-dotnet=\" TimeoutClone \" pulumi-lang-go=\" timeoutClone \" pulumi-lang-python=\" timeout_clone \" pulumi-lang-yaml=\" timeoutClone \" pulumi-lang-java=\" timeoutClone \"\u003e timeout_clone \u003c/span\u003e/ timeout_migrate) is used instead."},"timeoutReboot":{"type":"integer","description":"Timeout for rebooting a VM in seconds (defaults\nto 1800).\n"},"timeoutShutdownVm":{"type":"integer","description":"Timeout for shutting down a VM in seconds (\ndefaults to 1800).\n"},"timeoutStartVm":{"type":"integer","description":"Timeout for starting a VM in seconds (defaults\nto 1800).\n"},"timeoutStopVm":{"type":"integer","description":"Timeout for stopping a VM in seconds (defaults\nto 300).\n"},"tpmState":{"$ref":"#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState","description":"The TPM state device.\n","willReplaceOnChanges":true},"usbs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb"},"description":"A host USB device mapping (multiple blocks supported).\n"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVga:VirtualMachineVga","description":"The VGA configuration.\n"},"virtiofs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof"},"description":"Virtiofs share\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"},"watchdog":{"$ref":"#/types/proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog","description":"The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering VirtualMachine resources.\n","properties":{"acpi":{"type":"boolean","description":"Whether to enable ACPI (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"agent":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent","description":"The QEMU agent configuration.\n"},"amdSev":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev","description":"Secure Encrypted Virtualization (SEV) features by AMD CPUs.\n","willReplaceOnChanges":true},"audioDevice":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice","description":"An audio device.\n"},"bios":{"type":"string","description":"The BIOS implementation (defaults to \u003cspan pulumi-lang-nodejs=\"`seabios`\" pulumi-lang-dotnet=\"`Seabios`\" pulumi-lang-go=\"`seabios`\" pulumi-lang-python=\"`seabios`\" pulumi-lang-yaml=\"`seabios`\" pulumi-lang-java=\"`seabios`\"\u003e`seabios`\u003c/span\u003e).\n"},"bootOrders":{"type":"array","items":{"type":"string"},"description":"Specify a list of devices to boot from in the order they appear in the list.\n"},"cdrom":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom","description":"The CD-ROM configuration.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachineClone:VirtualMachineClone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Whether to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"description":{"type":"string","description":"The description.\n"},"disks":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk"},"description":"A disk (multiple blocks supported).\n"},"efiDisk":{"$ref":"#/types/proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk","description":"The efi disk device (required if \u003cspan pulumi-lang-nodejs=\"`bios`\" pulumi-lang-dotnet=\"`Bios`\" pulumi-lang-go=\"`bios`\" pulumi-lang-python=\"`bios`\" pulumi-lang-yaml=\"`bios`\" pulumi-lang-java=\"`bios`\"\u003e`bios`\u003c/span\u003e is set\nto \u003cspan pulumi-lang-nodejs=\"`ovmf`\" pulumi-lang-dotnet=\"`Ovmf`\" pulumi-lang-go=\"`ovmf`\" pulumi-lang-python=\"`ovmf`\" pulumi-lang-yaml=\"`ovmf`\" pulumi-lang-java=\"`ovmf`\"\u003e`ovmf`\u003c/span\u003e)\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"hostpcis":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci"},"description":"A host PCI device mapping (multiple blocks supported).\n"},"initialization":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization","description":"The cloud-init configuration.\n"},"ipv4Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv4 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"ipv6Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv6 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"keyboardLayout":{"type":"string","description":"The keyboard layout (defaults to `en-us`).\n"},"kvmArguments":{"type":"string","description":"Arbitrary arguments passed to kvm.\n"},"macAddresses":{"type":"array","items":{"type":"string"},"description":"The MAC addresses published by the QEMU agent with fallback\nto the network device configuration, if the agent is disabled\n"},"machine":{"type":"string","description":"The VM machine type (defaults to \u003cspan pulumi-lang-nodejs=\"`pc`\" pulumi-lang-dotnet=\"`Pc`\" pulumi-lang-go=\"`pc`\" pulumi-lang-python=\"`pc`\" pulumi-lang-yaml=\"`pc`\" pulumi-lang-java=\"`pc`\"\u003e`pc`\u003c/span\u003e).\n"},"memory":{"$ref":"#/types/proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory","description":"The memory configuration.\n"},"migrate":{"type":"boolean","description":"Migrate the VM on node change instead of re-creating\nit (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The virtual machine name.\n"},"networkDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice"},"description":"A network device (multiple blocks supported).\n"},"networkInterfaceNames":{"type":"array","items":{"type":"string"},"description":"The network interface names published by the QEMU\nagent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"nodeName":{"type":"string","description":"The name of the node to assign the virtual machine\nto.\n"},"numas":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma"},"description":"The NUMA configuration.\n"},"onBoot":{"type":"boolean","description":"Specifies whether a VM will be started during system\nboot. (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the virtual machine to.\n"},"protection":{"type":"boolean","description":"Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"purgeOnDestroy":{"type":"boolean","description":"Whether to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"reboot":{"type":"boolean","description":"Reboot the VM after initial creation (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"rebootAfterUpdate":{"type":"boolean","description":"Reboot the VM after update if needed (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rngs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineRng:VirtualMachineRng"},"description":"The random number generator configuration. Can only be set by `root@pam.`\n"},"scsiHardware":{"type":"string","description":"The SCSI hardware type (defaults to\n`virtio-scsi-pci`).\n"},"serialDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice"},"description":"A serial device (multiple blocks supported).\n"},"smbios":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios","description":"The SMBIOS (type1) settings for the VM.\n"},"started":{"type":"boolean","description":"Whether to start the virtual machine (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup","description":"Defines startup and shutdown behavior of the VM.\n"},"stopOnDestroy":{"type":"boolean","description":"Whether to stop rather than shutdown on VM destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"tabletDevice":{"type":"boolean","description":"Whether to enable the USB tablet device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags of the VM. This is only meta information (\ndefaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in\ntemplate is not sorted, then Proxmox will always report a difference on the\nresource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle meta-argument to ignore\nchanges to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a VM in seconds (defaults to\n1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a VM in seconds (defaults to\n1800).\n"},"timeoutMigrate":{"type":"integer","description":"Timeout for migrating the VM (defaults to\n1800).\n"},"timeoutMoveDisk":{"type":"integer","description":"Disk move timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create /\u003cspan pulumi-lang-nodejs=\" timeoutClone \" pulumi-lang-dotnet=\" TimeoutClone \" pulumi-lang-go=\" timeoutClone \" pulumi-lang-python=\" timeout_clone \" pulumi-lang-yaml=\" timeoutClone \" pulumi-lang-java=\" timeoutClone \"\u003e timeout_clone \u003c/span\u003e/ timeout_migrate) is used instead."},"timeoutReboot":{"type":"integer","description":"Timeout for rebooting a VM in seconds (defaults\nto 1800).\n"},"timeoutShutdownVm":{"type":"integer","description":"Timeout for shutting down a VM in seconds (\ndefaults to 1800).\n"},"timeoutStartVm":{"type":"integer","description":"Timeout for starting a VM in seconds (defaults\nto 1800).\n"},"timeoutStopVm":{"type":"integer","description":"Timeout for stopping a VM in seconds (defaults\nto 300).\n"},"tpmState":{"$ref":"#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState","description":"The TPM state device.\n","willReplaceOnChanges":true},"usbs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb"},"description":"A host USB device mapping (multiple blocks supported).\n"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVga:VirtualMachineVga","description":"The VGA configuration.\n"},"virtiofs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof"},"description":"Virtiofs share\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"},"watchdog":{"$ref":"#/types/proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog","description":"The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).\n"}},"type":"object"}},"proxmoxve:index/acl:Acl":{"description":"Manages ACLs on the Proxmox cluster.\n\nACLs are used to control access to resources in the Proxmox cluster.\nEach ACL consists of a path, a user, group or token, a role, and a flag to allow propagation of permissions.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsAutomation = new proxmoxve.permission.User(\"operations_automation\", {\n comment: \"Managed by Pulumi\",\n password: \"a-strong-password\",\n userId: \"operations-automation@pve\",\n});\nconst operationsMonitoring = new proxmoxve.permission.Role(\"operations_monitoring\", {\n roleId: \"operations-monitoring\",\n privileges: [\"VM.GuestAgent.Audit\"],\n});\nconst operationsAutomationMonitoring = new proxmoxve.Acl(\"operations_automation_monitoring\", {\n userId: operationsAutomation.userId,\n roleId: operationsMonitoring.roleId,\n path: \"/vms/1234\",\n propagate: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_automation = proxmoxve.permission.User(\"operations_automation\",\n comment=\"Managed by Pulumi\",\n password=\"a-strong-password\",\n user_id=\"operations-automation@pve\")\noperations_monitoring = proxmoxve.permission.Role(\"operations_monitoring\",\n role_id=\"operations-monitoring\",\n privileges=[\"VM.GuestAgent.Audit\"])\noperations_automation_monitoring = proxmoxve.Acl(\"operations_automation_monitoring\",\n user_id=operations_automation.user_id,\n role_id=operations_monitoring.role_id,\n path=\"/vms/1234\",\n propagate=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsAutomation = new ProxmoxVE.Permission.User(\"operations_automation\", new()\n {\n Comment = \"Managed by Pulumi\",\n Password = \"a-strong-password\",\n UserId = \"operations-automation@pve\",\n });\n\n var operationsMonitoring = new ProxmoxVE.Permission.Role(\"operations_monitoring\", new()\n {\n RoleId = \"operations-monitoring\",\n Privileges = new[]\n {\n \"VM.GuestAgent.Audit\",\n },\n });\n\n var operationsAutomationMonitoring = new ProxmoxVE.Acl(\"operations_automation_monitoring\", new()\n {\n UserId = operationsAutomation.UserId,\n RoleId = operationsMonitoring.RoleId,\n Path = \"/vms/1234\",\n Propagate = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toperationsAutomation, err := permission.NewUser(ctx, \"operations_automation\", \u0026permission.UserArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tPassword: pulumi.String(\"a-strong-password\"),\n\t\t\tUserId: pulumi.String(\"operations-automation@pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toperationsMonitoring, err := permission.NewRole(ctx, \"operations_monitoring\", \u0026permission.RoleArgs{\n\t\t\tRoleId: pulumi.String(\"operations-monitoring\"),\n\t\t\tPrivileges: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"VM.GuestAgent.Audit\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.NewAcl(ctx, \"operations_automation_monitoring\", \u0026proxmoxve.AclArgs{\n\t\t\tUserId: operationsAutomation.UserId,\n\t\t\tRoleId: operationsMonitoring.RoleId,\n\t\t\tPath: pulumi.String(\"/vms/1234\"),\n\t\t\tPropagate: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.User;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.UserArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Role;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.RoleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Acl;\nimport io.muehlbachler.pulumi.proxmoxve.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsAutomation = new User(\"operationsAutomation\", UserArgs.builder()\n .comment(\"Managed by Pulumi\")\n .password(\"a-strong-password\")\n .userId(\"operations-automation@pve\")\n .build());\n\n var operationsMonitoring = new Role(\"operationsMonitoring\", RoleArgs.builder()\n .roleId(\"operations-monitoring\")\n .privileges(\"VM.GuestAgent.Audit\")\n .build());\n\n var operationsAutomationMonitoring = new Acl(\"operationsAutomationMonitoring\", AclArgs.builder()\n .userId(operationsAutomation.userId())\n .roleId(operationsMonitoring.roleId())\n .path(\"/vms/1234\")\n .propagate(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsAutomation:\n type: proxmoxve:Permission:User\n name: operations_automation\n properties:\n comment: Managed by Pulumi\n password: a-strong-password\n userId: operations-automation@pve\n operationsMonitoring:\n type: proxmoxve:Permission:Role\n name: operations_monitoring\n properties:\n roleId: operations-monitoring\n privileges:\n - VM.GuestAgent.Audit\n operationsAutomationMonitoring:\n type: proxmoxve:Acl\n name: operations_automation_monitoring\n properties:\n userId: ${operationsAutomation.userId}\n roleId: ${operationsMonitoring.roleId}\n path: /vms/1234\n propagate: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nACL can be imported using its unique identifier, e.g.: {path}?{group|user@realm|user@realm!token}?{role}\n\n```sh\n$ pulumi import proxmoxve:index/acl:Acl operations_automation_monitoring /?monitor@pve?operations-monitoring\n```\n\n","properties":{"groupId":{"type":"string","description":"The group the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"path":{"type":"string","description":"Access control path\n"},"propagate":{"type":"boolean","description":"Allow to propagate (inherit) permissions.\n"},"roleId":{"type":"string","description":"The role to apply\n"},"tokenId":{"type":"string","description":"The token the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"userId":{"type":"string","description":"The user the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e)\n"}},"required":["path","propagate","roleId"],"inputProperties":{"groupId":{"type":"string","description":"The group the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"path":{"type":"string","description":"Access control path\n"},"propagate":{"type":"boolean","description":"Allow to propagate (inherit) permissions.\n"},"roleId":{"type":"string","description":"The role to apply\n"},"tokenId":{"type":"string","description":"The token the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"userId":{"type":"string","description":"The user the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e)\n"}},"requiredInputs":["path","roleId"],"stateInputs":{"description":"Input properties used for looking up and filtering Acl resources.\n","properties":{"groupId":{"type":"string","description":"The group the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"path":{"type":"string","description":"Access control path\n"},"propagate":{"type":"boolean","description":"Allow to propagate (inherit) permissions.\n"},"roleId":{"type":"string","description":"The role to apply\n"},"tokenId":{"type":"string","description":"The token the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"userId":{"type":"string","description":"The user the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e)\n"}},"type":"object"}},"proxmoxve:index/acmeAccount:AcmeAccount":{"description":"Manages an ACME account in a Proxmox VE cluster.\n\n\u003e This resource requires `root@pam` authentication.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.AcmeAccount(\"example\", {\n name: \"example\",\n contact: \"example@email.com\",\n directory: \"https://acme-staging-v02.api.letsencrypt.org/directory\",\n tos: \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.AcmeAccount(\"example\",\n name=\"example\",\n contact=\"example@email.com\",\n directory=\"https://acme-staging-v02.api.letsencrypt.org/directory\",\n tos=\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.AcmeAccount(\"example\", new()\n {\n Name = \"example\",\n Contact = \"example@email.com\",\n Directory = \"https://acme-staging-v02.api.letsencrypt.org/directory\",\n Tos = \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewAcmeAccount(ctx, \"example\", \u0026proxmoxve.AcmeAccountArgs{\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tContact: pulumi.String(\"example@email.com\"),\n\t\t\tDirectory: pulumi.String(\"https://acme-staging-v02.api.letsencrypt.org/directory\"),\n\t\t\tTos: pulumi.String(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccount;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new AcmeAccount(\"example\", AcmeAccountArgs.builder()\n .name(\"example\")\n .contact(\"example@email.com\")\n .directory(\"https://acme-staging-v02.api.letsencrypt.org/directory\")\n .tos(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:AcmeAccount\n properties:\n name: example\n contact: example@email.com\n directory: https://acme-staging-v02.api.letsencrypt.org/directory\n tos: https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nACME accounts can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:index/acmeAccount:AcmeAccount example example\n```\n\n","properties":{"contact":{"type":"string","description":"The contact email addresses.\n"},"createdAt":{"type":"string","description":"The timestamp of the ACME account creation.\n"},"directory":{"type":"string","description":"The URL of the ACME CA directory endpoint.\n"},"eabHmacKey":{"type":"string","description":"The HMAC key for External Account Binding.\n"},"eabKid":{"type":"string","description":"The Key Identifier for External Account Binding.\n"},"location":{"type":"string","description":"The location of the ACME account.\n"},"name":{"type":"string","description":"The ACME account config file name.\n"},"tos":{"type":"string","description":"The URL of CA TermsOfService - setting this indicates agreement.\n"}},"required":["contact","createdAt","location","name"],"inputProperties":{"contact":{"type":"string","description":"The contact email addresses.\n"},"directory":{"type":"string","description":"The URL of the ACME CA directory endpoint.\n"},"eabHmacKey":{"type":"string","description":"The HMAC key for External Account Binding.\n"},"eabKid":{"type":"string","description":"The Key Identifier for External Account Binding.\n"},"name":{"type":"string","description":"The ACME account config file name.\n"},"tos":{"type":"string","description":"The URL of CA TermsOfService - setting this indicates agreement.\n"}},"requiredInputs":["contact"],"stateInputs":{"description":"Input properties used for looking up and filtering AcmeAccount resources.\n","properties":{"contact":{"type":"string","description":"The contact email addresses.\n"},"createdAt":{"type":"string","description":"The timestamp of the ACME account creation.\n"},"directory":{"type":"string","description":"The URL of the ACME CA directory endpoint.\n"},"eabHmacKey":{"type":"string","description":"The HMAC key for External Account Binding.\n"},"eabKid":{"type":"string","description":"The Key Identifier for External Account Binding.\n"},"location":{"type":"string","description":"The location of the ACME account.\n"},"name":{"type":"string","description":"The ACME account config file name.\n"},"tos":{"type":"string","description":"The URL of CA TermsOfService - setting this indicates agreement.\n"}},"type":"object"}},"proxmoxve:index/acmeDnsPlugin:AcmeDnsPlugin":{"description":"Manages an ACME plugin in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.AcmeDnsPlugin(\"example\", {\n plugin: \"test\",\n api: \"aws\",\n data: {\n AWS_ACCESS_KEY_ID: \"EXAMPLE\",\n AWS_SECRET_ACCESS_KEY: \"EXAMPLE\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.AcmeDnsPlugin(\"example\",\n plugin=\"test\",\n api=\"aws\",\n data={\n \"AWS_ACCESS_KEY_ID\": \"EXAMPLE\",\n \"AWS_SECRET_ACCESS_KEY\": \"EXAMPLE\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.AcmeDnsPlugin(\"example\", new()\n {\n Plugin = \"test\",\n Api = \"aws\",\n Data = \n {\n { \"AWS_ACCESS_KEY_ID\", \"EXAMPLE\" },\n { \"AWS_SECRET_ACCESS_KEY\", \"EXAMPLE\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewAcmeDnsPlugin(ctx, \"example\", \u0026proxmoxve.AcmeDnsPluginArgs{\n\t\t\tPlugin: pulumi.String(\"test\"),\n\t\t\tApi: pulumi.String(\"aws\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"AWS_ACCESS_KEY_ID\": pulumi.String(\"EXAMPLE\"),\n\t\t\t\t\"AWS_SECRET_ACCESS_KEY\": pulumi.String(\"EXAMPLE\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPlugin;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPluginArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new AcmeDnsPlugin(\"example\", AcmeDnsPluginArgs.builder()\n .plugin(\"test\")\n .api(\"aws\")\n .data(Map.ofEntries(\n Map.entry(\"AWS_ACCESS_KEY_ID\", \"EXAMPLE\"),\n Map.entry(\"AWS_SECRET_ACCESS_KEY\", \"EXAMPLE\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:AcmeDnsPlugin\n properties:\n plugin: test\n api: aws\n data:\n AWS_ACCESS_KEY_ID: EXAMPLE\n AWS_SECRET_ACCESS_KEY: EXAMPLE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nACME accounts can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:index/acmeDnsPlugin:AcmeDnsPlugin example test\n```\n\n","properties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"SHA1 digest of the current configuration. Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"disable":{"type":"boolean","description":"Flag to disable the config.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"required":["api","digest","plugin","validationDelay"],"inputProperties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"SHA1 digest of the current configuration. Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"disable":{"type":"boolean","description":"Flag to disable the config.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"requiredInputs":["api","plugin"],"stateInputs":{"description":"Input properties used for looking up and filtering AcmeDnsPlugin resources.\n","properties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"SHA1 digest of the current configuration. Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"disable":{"type":"boolean","description":"Flag to disable the config.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"type":"object"}},"proxmoxve:index/certifi:Certifi":{"description":"Manages the custom SSL/TLS certificate for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as tls from \"@pulumi/tls\";\n\nconst proxmoxVirtualEnvironmentCertificate = new tls.PrivateKey(\"proxmox_virtual_environment_certificate\", {\n algorithm: \"RSA\",\n rsaBits: 2048,\n});\nconst proxmoxVirtualEnvironmentCertificateSelfSignedCert = new tls.SelfSignedCert(\"proxmox_virtual_environment_certificate\", {\n keyAlgorithm: proxmoxVirtualEnvironmentCertificate.algorithm,\n privateKeyPem: proxmoxVirtualEnvironmentCertificate.privateKeyPem,\n subject: {\n commonName: \"example.com\",\n organization: \"Terraform Provider for Proxmox\",\n },\n validityPeriodHours: 8760,\n allowedUses: [\n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\",\n ],\n});\nconst example = new proxmoxve.Certifi(\"example\", {\n certificate: proxmoxVirtualEnvironmentCertificateSelfSignedCert.certPem,\n nodeName: \"first-node\",\n privateKey: proxmoxVirtualEnvironmentCertificate.privateKeyPem,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_tls as tls\n\nproxmox_virtual_environment_certificate = tls.PrivateKey(\"proxmox_virtual_environment_certificate\",\n algorithm=\"RSA\",\n rsa_bits=2048)\nproxmox_virtual_environment_certificate_self_signed_cert = tls.SelfSignedCert(\"proxmox_virtual_environment_certificate\",\n key_algorithm=proxmox_virtual_environment_certificate.algorithm,\n private_key_pem=proxmox_virtual_environment_certificate.private_key_pem,\n subject={\n \"common_name\": \"example.com\",\n \"organization\": \"Terraform Provider for Proxmox\",\n },\n validity_period_hours=8760,\n allowed_uses=[\n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\",\n ])\nexample = proxmoxve.Certifi(\"example\",\n certificate=proxmox_virtual_environment_certificate_self_signed_cert.cert_pem,\n node_name=\"first-node\",\n private_key=proxmox_virtual_environment_certificate.private_key_pem)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var proxmoxVirtualEnvironmentCertificate = new Tls.PrivateKey(\"proxmox_virtual_environment_certificate\", new()\n {\n Algorithm = \"RSA\",\n RsaBits = 2048,\n });\n\n var proxmoxVirtualEnvironmentCertificateSelfSignedCert = new Tls.SelfSignedCert(\"proxmox_virtual_environment_certificate\", new()\n {\n KeyAlgorithm = proxmoxVirtualEnvironmentCertificate.Algorithm,\n PrivateKeyPem = proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n Subject = new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"example.com\",\n Organization = \"Terraform Provider for Proxmox\",\n },\n ValidityPeriodHours = 8760,\n AllowedUses = new[]\n {\n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\",\n },\n });\n\n var example = new ProxmoxVE.Certifi(\"example\", new()\n {\n Certificate = proxmoxVirtualEnvironmentCertificateSelfSignedCert.CertPem,\n NodeName = \"first-node\",\n PrivateKey = proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproxmoxVirtualEnvironmentCertificate, err := tls.NewPrivateKey(ctx, \"proxmox_virtual_environment_certificate\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t\tRsaBits: pulumi.Int(2048),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproxmoxVirtualEnvironmentCertificateSelfSignedCert, err := tls.NewSelfSignedCert(ctx, \"proxmox_virtual_environment_certificate\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: proxmoxVirtualEnvironmentCertificate.Algorithm,\n\t\t\tPrivateKeyPem: proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n\t\t\tSubject: \u0026tls.SelfSignedCertSubjectArgs{\n\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\tOrganization: pulumi.String(\"Terraform Provider for Proxmox\"),\n\t\t\t},\n\t\t\tValidityPeriodHours: pulumi.Int(8760),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"key_encipherment\"),\n\t\t\t\tpulumi.String(\"digital_signature\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.NewCertifi(ctx, \"example\", \u0026proxmoxve.CertifiArgs{\n\t\t\tCertificate: proxmoxVirtualEnvironmentCertificateSelfSignedCert.CertPem,\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tPrivateKey: proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Certifi;\nimport io.muehlbachler.pulumi.proxmoxve.CertifiArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var proxmoxVirtualEnvironmentCertificate = new PrivateKey(\"proxmoxVirtualEnvironmentCertificate\", PrivateKeyArgs.builder()\n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var proxmoxVirtualEnvironmentCertificateSelfSignedCert = new SelfSignedCert(\"proxmoxVirtualEnvironmentCertificateSelfSignedCert\", SelfSignedCertArgs.builder()\n .keyAlgorithm(proxmoxVirtualEnvironmentCertificate.algorithm())\n .privateKeyPem(proxmoxVirtualEnvironmentCertificate.privateKeyPem())\n .subject(SelfSignedCertSubjectArgs.builder()\n .commonName(\"example.com\")\n .organization(\"Terraform Provider for Proxmox\")\n .build())\n .validityPeriodHours(8760)\n .allowedUses( \n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\")\n .build());\n\n var example = new Certifi(\"example\", CertifiArgs.builder()\n .certificate(proxmoxVirtualEnvironmentCertificateSelfSignedCert.certPem())\n .nodeName(\"first-node\")\n .privateKey(proxmoxVirtualEnvironmentCertificate.privateKeyPem())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Certifi\n properties:\n certificate: ${proxmoxVirtualEnvironmentCertificateSelfSignedCert.certPem}\n nodeName: first-node\n privateKey: ${proxmoxVirtualEnvironmentCertificate.privateKeyPem}\n proxmoxVirtualEnvironmentCertificate:\n type: tls:PrivateKey\n name: proxmox_virtual_environment_certificate\n properties:\n algorithm: RSA\n rsaBits: 2048\n proxmoxVirtualEnvironmentCertificateSelfSignedCert:\n type: tls:SelfSignedCert\n name: proxmox_virtual_environment_certificate\n properties:\n keyAlgorithm: ${proxmoxVirtualEnvironmentCertificate.algorithm}\n privateKeyPem: ${proxmoxVirtualEnvironmentCertificate.privateKeyPem}\n subject:\n commonName: example.com\n organization: Terraform Provider for Proxmox\n validityPeriodHours: 8760\n allowedUses:\n - key_encipherment\n - digital_signature\n - server_auth\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"certificate":{"type":"string","description":"The PEM encoded certificate.\n"},"certificateChain":{"type":"string","description":"The PEM encoded certificate chain.\n"},"expirationDate":{"type":"string","description":"The expiration date (RFC 3339).\n"},"fileName":{"type":"string","description":"The file name.\n"},"issuer":{"type":"string","description":"The issuer.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing certificate"},"privateKey":{"type":"string","description":"The PEM encoded private key.\n","secret":true},"publicKeySize":{"type":"integer","description":"The public key size.\n"},"publicKeyType":{"type":"string","description":"The public key type.\n"},"sslFingerprint":{"type":"string","description":"The SSL fingerprint.\n"},"startDate":{"type":"string","description":"The start date (RFC 3339).\n"},"subject":{"type":"string","description":"The subject.\n"},"subjectAlternativeNames":{"type":"array","items":{"type":"string"},"description":"The subject alternative names.\n"}},"required":["certificate","expirationDate","fileName","issuer","nodeName","privateKey","publicKeySize","publicKeyType","sslFingerprint","startDate","subject","subjectAlternativeNames"],"inputProperties":{"certificate":{"type":"string","description":"The PEM encoded certificate.\n"},"certificateChain":{"type":"string","description":"The PEM encoded certificate chain.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing certificate"},"privateKey":{"type":"string","description":"The PEM encoded private key.\n","secret":true}},"requiredInputs":["certificate","nodeName","privateKey"],"stateInputs":{"description":"Input properties used for looking up and filtering Certifi resources.\n","properties":{"certificate":{"type":"string","description":"The PEM encoded certificate.\n"},"certificateChain":{"type":"string","description":"The PEM encoded certificate chain.\n"},"expirationDate":{"type":"string","description":"The expiration date (RFC 3339).\n"},"fileName":{"type":"string","description":"The file name.\n"},"issuer":{"type":"string","description":"The issuer.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing certificate"},"privateKey":{"type":"string","description":"The PEM encoded private key.\n","secret":true},"publicKeySize":{"type":"integer","description":"The public key size.\n"},"publicKeyType":{"type":"string","description":"The public key type.\n"},"sslFingerprint":{"type":"string","description":"The SSL fingerprint.\n"},"startDate":{"type":"string","description":"The start date (RFC 3339).\n"},"subject":{"type":"string","description":"The subject.\n"},"subjectAlternativeNames":{"type":"array","items":{"type":"string"},"description":"The subject alternative names.\n"}},"type":"object"}},"proxmoxve:index/dNS:DNS":{"description":"Manages the DNS configuration for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeDnsConfiguration = proxmoxve.Network.getDNS({\n nodeName: \"first-node\",\n});\nconst firstNodeDnsConfigurationDNS = new proxmoxve.DNS(\"first_node_dns_configuration\", {\n domain: firstNodeDnsConfiguration.then(firstNodeDnsConfiguration =\u003e firstNodeDnsConfiguration.domain),\n nodeName: firstNodeDnsConfiguration.then(firstNodeDnsConfiguration =\u003e firstNodeDnsConfiguration.nodeName),\n servers: [\n \"1.1.1.1\",\n \"1.0.0.1\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_dns_configuration = proxmoxve.Network.get_dns(node_name=\"first-node\")\nfirst_node_dns_configuration_dns = proxmoxve.DNS(\"first_node_dns_configuration\",\n domain=first_node_dns_configuration.domain,\n node_name=first_node_dns_configuration.node_name,\n servers=[\n \"1.1.1.1\",\n \"1.0.0.1\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeDnsConfiguration = ProxmoxVE.Network.GetDNS.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n var firstNodeDnsConfigurationDNS = new ProxmoxVE.DNS(\"first_node_dns_configuration\", new()\n {\n Domain = firstNodeDnsConfiguration.Apply(getDNSResult =\u003e getDNSResult.Domain),\n NodeName = firstNodeDnsConfiguration.Apply(getDNSResult =\u003e getDNSResult.NodeName),\n Servers = new[]\n {\n \"1.1.1.1\",\n \"1.0.0.1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfirstNodeDnsConfiguration, err := network.GetDNS(ctx, \u0026network.GetDNSArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.NewDNS(ctx, \"first_node_dns_configuration\", \u0026proxmoxve.DNSArgs{\n\t\t\tDomain: pulumi.String(firstNodeDnsConfiguration.Domain),\n\t\t\tNodeName: pulumi.String(firstNodeDnsConfiguration.NodeName),\n\t\t\tServers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"1.1.1.1\"),\n\t\t\t\tpulumi.String(\"1.0.0.1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetDNSArgs;\nimport io.muehlbachler.pulumi.proxmoxve.DNS;\nimport io.muehlbachler.pulumi.proxmoxve.DNSArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNodeDnsConfiguration = NetworkFunctions.getDNS(GetDNSArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n var firstNodeDnsConfigurationDNS = new DNS(\"firstNodeDnsConfigurationDNS\", DNSArgs.builder()\n .domain(firstNodeDnsConfiguration.domain())\n .nodeName(firstNodeDnsConfiguration.nodeName())\n .servers( \n \"1.1.1.1\",\n \"1.0.0.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n firstNodeDnsConfigurationDNS:\n type: proxmoxve:DNS\n name: first_node_dns_configuration\n properties:\n domain: ${firstNodeDnsConfiguration.domain}\n nodeName: ${firstNodeDnsConfiguration.nodeName}\n servers:\n - 1.1.1.1\n - 1.0.0.1\nvariables:\n firstNodeDnsConfiguration:\n fn::invoke:\n function: proxmoxve:Network:getDNS\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nBe careful not to use this resource multiple times for the same node.\n\n## Import\n\nInstances can be imported using the `node_name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:index/dNS:DNS first_node first-node\n```\n\n","properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"servers":{"type":"array","items":{"type":"string"},"description":"The DNS servers.\n"}},"required":["domain","nodeName"],"inputProperties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"servers":{"type":"array","items":{"type":"string"},"description":"The DNS servers.\n"}},"requiredInputs":["domain","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering DNS resources.\n","properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"servers":{"type":"array","items":{"type":"string"},"description":"The DNS servers.\n"}},"type":"object"}},"proxmoxve:index/hosts:Hosts":{"description":"Manages the host entries on a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeHostEntries = new proxmoxve.Hosts(\"first_node_host_entries\", {\n nodeName: \"first-node\",\n entries: [{\n address: \"127.0.0.1\",\n hostnames: [\n \"localhost\",\n \"localhost.localdomain\",\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_host_entries = proxmoxve.Hosts(\"first_node_host_entries\",\n node_name=\"first-node\",\n entries=[{\n \"address\": \"127.0.0.1\",\n \"hostnames\": [\n \"localhost\",\n \"localhost.localdomain\",\n ],\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeHostEntries = new ProxmoxVE.Hosts(\"first_node_host_entries\", new()\n {\n NodeName = \"first-node\",\n Entries = new[]\n {\n new ProxmoxVE.Inputs.HostsEntryArgs\n {\n Address = \"127.0.0.1\",\n Hostnames = new[]\n {\n \"localhost\",\n \"localhost.localdomain\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewHosts(ctx, \"first_node_host_entries\", \u0026proxmoxve.HostsArgs{\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tEntries: []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"address\": \"127.0.0.1\",\n\t\t\t\t\t\"hostnames\": []string{\n\t\t\t\t\t\t\"localhost\",\n\t\t\t\t\t\t\"localhost.localdomain\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hosts;\nimport io.muehlbachler.pulumi.proxmoxve.HostsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firstNodeHostEntries = new Hosts(\"firstNodeHostEntries\", HostsArgs.builder()\n .nodeName(\"first-node\")\n .entries(List.of(Map.ofEntries(\n Map.entry(\"address\", \"127.0.0.1\"),\n Map.entry(\"hostnames\", List.of( \n \"localhost\",\n \"localhost.localdomain\"))\n )))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n firstNodeHostEntries:\n type: proxmoxve:Hosts\n name: first_node_host_entries\n properties:\n nodeName: first-node\n entries:\n - address: 127.0.0.1\n hostnames:\n - localhost\n - localhost.localdomain\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nBe careful not to use this resource multiple times for the same node.\n\n## Import\n\nInstances can be imported using the `node_name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:index/hosts:Hosts first_node_host_entries first-node\n```\n\n","properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"The IP addresses.\n"},"digest":{"type":"string","description":"The SHA1 digest.\n"},"entries":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"The host entries (conversion of \u003cspan pulumi-lang-nodejs=\"`addresses`\" pulumi-lang-dotnet=\"`Addresses`\" pulumi-lang-go=\"`addresses`\" pulumi-lang-python=\"`addresses`\" pulumi-lang-yaml=\"`addresses`\" pulumi-lang-java=\"`addresses`\"\u003e`addresses`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`hostnames`\" pulumi-lang-dotnet=\"`Hostnames`\" pulumi-lang-go=\"`hostnames`\" pulumi-lang-python=\"`hostnames`\" pulumi-lang-yaml=\"`hostnames`\" pulumi-lang-java=\"`hostnames`\"\u003e`hostnames`\u003c/span\u003e into\nobjects).\n"},"entry":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"A host entry (multiple blocks supported).\n"},"hostnames":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The hostnames associated with each of the IP addresses.\n"},"nodeName":{"type":"string","description":"A node name.\n"}},"required":["addresses","digest","entries","entry","hostnames","nodeName"],"inputProperties":{"entry":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"A host entry (multiple blocks supported).\n"},"nodeName":{"type":"string","description":"A node name.\n"}},"requiredInputs":["entry","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering Hosts resources.\n","properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"The IP addresses.\n"},"digest":{"type":"string","description":"The SHA1 digest.\n"},"entries":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"The host entries (conversion of \u003cspan pulumi-lang-nodejs=\"`addresses`\" pulumi-lang-dotnet=\"`Addresses`\" pulumi-lang-go=\"`addresses`\" pulumi-lang-python=\"`addresses`\" pulumi-lang-yaml=\"`addresses`\" pulumi-lang-java=\"`addresses`\"\u003e`addresses`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`hostnames`\" pulumi-lang-dotnet=\"`Hostnames`\" pulumi-lang-go=\"`hostnames`\" pulumi-lang-python=\"`hostnames`\" pulumi-lang-yaml=\"`hostnames`\" pulumi-lang-java=\"`hostnames`\"\u003e`hostnames`\u003c/span\u003e into\nobjects).\n"},"entry":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"A host entry (multiple blocks supported).\n"},"hostnames":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The hostnames associated with each of the IP addresses.\n"},"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object"}},"proxmoxve:index/time:Time":{"description":"Manages the time for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeTime = new proxmoxve.Time(\"first_node_time\", {\n nodeName: \"first-node\",\n timeZone: \"UTC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_time = proxmoxve.Time(\"first_node_time\",\n node_name=\"first-node\",\n time_zone=\"UTC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeTime = new ProxmoxVE.Time(\"first_node_time\", new()\n {\n NodeName = \"first-node\",\n TimeZone = \"UTC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewTime(ctx, \"first_node_time\", \u0026proxmoxve.TimeArgs{\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Time;\nimport io.muehlbachler.pulumi.proxmoxve.TimeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firstNodeTime = new Time(\"firstNodeTime\", TimeArgs.builder()\n .nodeName(\"first-node\")\n .timeZone(\"UTC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n firstNodeTime:\n type: proxmoxve:Time\n name: first_node_time\n properties:\n nodeName: first-node\n timeZone: UTC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `node_name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:index/time:Time first_node first-node\n```\n\n","properties":{"localTime":{"type":"string","description":"The node's local time.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"timeZone":{"type":"string","description":"The node's time zone.\n"},"utcTime":{"type":"string","description":"The node's time formatted as UTC.\n"}},"required":["localTime","nodeName","timeZone","utcTime"],"inputProperties":{"nodeName":{"type":"string","description":"A node name.\n"},"timeZone":{"type":"string","description":"The node's time zone.\n"}},"requiredInputs":["nodeName","timeZone"],"stateInputs":{"description":"Input properties used for looking up and filtering Time resources.\n","properties":{"localTime":{"type":"string","description":"The node's local time.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"timeZone":{"type":"string","description":"The node's time zone.\n"},"utcTime":{"type":"string","description":"The node's time formatted as UTC.\n"}},"type":"object"}}},"functions":{"proxmoxve:Acme/getAccount:getAccount":{"description":"Retrieves information about a specific ACME account.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch all ACME accounts...\nconst all = proxmoxve.Acme.getAccounts({});\n// ...which we will go through in order to fetch the whole data on each account.\nconst example = all.then(all =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: proxmoxve.Acme.getAccount({\n name: __value,\n}) })));\nexport const dataProxmoxVirtualEnvironmentAcmeAccount = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch all ACME accounts...\nall = proxmoxve.Acme.get_accounts()\n# ...which we will go through in order to fetch the whole data on each account.\nexample = {__key: proxmoxve.Acme.get_account(name=__value) for __key, __value in all.accounts}\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmeAccount\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch all ACME accounts...\n var all = ProxmoxVE.Acme.GetAccounts.Invoke();\n\n // ...which we will go through in order to fetch the whole data on each account.\n var example = ;\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmeAccount\"] = example,\n };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getAccount.\n","properties":{"name":{"type":"string","description":"The identifier of the ACME account to read.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getAccount.\n","properties":{"account":{"$ref":"#/types/proxmoxve:Acme/getAccountAccount:getAccountAccount","description":"The ACME account information.\n"},"directory":{"description":"The directory URL of the ACME account.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"location":{"description":"The location URL of the ACME account.\n","type":"string"},"name":{"description":"The identifier of the ACME account to read.\n","type":"string"},"tos":{"description":"The URL of the terms of service of the ACME account.\n","type":"string"}},"required":["account","directory","location","tos","id"],"type":"object"}},"proxmoxve:Acme/getAccounts:getAccounts":{"description":"Retrieves the list of ACME accounts.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Acme.getAccounts({});\nexport const dataProxmoxVirtualEnvironmentAcmeAccounts = example.then(example =\u003e example.accounts);\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Acme.get_accounts()\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmeAccounts\", example.accounts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Acme.GetAccounts.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmeAccounts\"] = example.Apply(getAccountsResult =\u003e getAccountsResult.Accounts),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := acme.GetAccounts(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentAcmeAccounts\", example.Accounts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Acme.AcmeFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AcmeFunctions.getAccounts(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentAcmeAccounts\", example.accounts());\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Acme:getAccounts\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentAcmeAccounts: ${example.accounts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getAccounts.\n","properties":{"accounts":{"description":"The identifiers of the ACME accounts.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"}},"required":["accounts","id"],"type":"object"}},"proxmoxve:Acme/getPlugin:getPlugin":{"description":"Retrieves a single ACME plugin by plugin ID name.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Acme.getPlugin({\n plugin: \"standalone\",\n});\nexport const dataProxmoxVirtualEnvironmentAcmePlugin = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Acme.get_plugin(plugin=\"standalone\")\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmePlugin\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Acme.GetPlugin.Invoke(new()\n {\n Plugin = \"standalone\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmePlugin\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := acme.GetPlugin(ctx, \u0026acme.GetPluginArgs{\n\t\t\tPlugin: \"standalone\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentAcmePlugin\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Acme.AcmeFunctions;\nimport com.pulumi.proxmoxve.Acme.inputs.GetPluginArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AcmeFunctions.getPlugin(GetPluginArgs.builder()\n .plugin(\"standalone\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentAcmePlugin\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Acme:getPlugin\n arguments:\n plugin: standalone\noutputs:\n dataProxmoxVirtualEnvironmentAcmePlugin: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getPlugin.\n","properties":{"plugin":{"type":"string","description":"ACME Plugin ID name.\n"}},"type":"object","required":["plugin"]},"outputs":{"description":"A collection of values returned by getPlugin.\n","properties":{"api":{"description":"API plugin name.\n","type":"string"},"data":{"additionalProperties":{"type":"string"},"description":"DNS plugin data.\n","type":"object"},"digest":{"description":"Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"plugin":{"description":"ACME Plugin ID name.\n","type":"string"},"type":{"description":"ACME challenge type (dns, standalone).\n","type":"string"},"validationDelay":{"description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n","type":"integer"}},"required":["api","data","digest","plugin","type","validationDelay","id"],"type":"object"}},"proxmoxve:Acme/getPlugins:getPlugins":{"description":"Retrieves the list of ACME plugins.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Acme.getPlugins({});\nexport const dataProxmoxVirtualEnvironmentAcmePlugins = example.then(example =\u003e example.plugins);\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Acme.get_plugins()\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmePlugins\", example.plugins)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Acme.GetPlugins.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmePlugins\"] = example.Apply(getPluginsResult =\u003e getPluginsResult.Plugins),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := acme.GetPlugins(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentAcmePlugins\", example.Plugins)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Acme.AcmeFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AcmeFunctions.getPlugins(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentAcmePlugins\", example.plugins());\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Acme:getPlugins\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentAcmePlugins: ${example.plugins}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getPlugins.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"plugins":{"description":"List of ACME plugins\n","items":{"$ref":"#/types/proxmoxve:Acme/getPluginsPlugin:getPluginsPlugin"},"type":"array"}},"required":["plugins","id"],"type":"object"}},"proxmoxve:Apt/getRepository:getRepository":{"description":"Retrieves an APT repository from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Apt.getRepository({\n filePath: \"/etc/apt/sources.list\",\n index: 0,\n node: \"pve\",\n});\nexport const proxmoxVirtualEnvironmentAptRepository = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Apt.get_repository(file_path=\"/etc/apt/sources.list\",\n index=0,\n node=\"pve\")\npulumi.export(\"proxmoxVirtualEnvironmentAptRepository\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Apt.GetRepository.Invoke(new()\n {\n FilePath = \"/etc/apt/sources.list\",\n Index = 0,\n Node = \"pve\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentAptRepository\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := apt.GetRepository(ctx, \u0026apt.GetRepositoryArgs{\n\t\t\tFilePath: \"/etc/apt/sources.list\",\n\t\t\tIndex: 0,\n\t\t\tNode: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"proxmoxVirtualEnvironmentAptRepository\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Apt.AptFunctions;\nimport com.pulumi.proxmoxve.Apt.inputs.GetRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AptFunctions.getRepository(GetRepositoryArgs.builder()\n .filePath(\"/etc/apt/sources.list\")\n .index(0)\n .node(\"pve\")\n .build());\n\n ctx.export(\"proxmoxVirtualEnvironmentAptRepository\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Apt:getRepository\n arguments:\n filePath: /etc/apt/sources.list\n index: 0\n node: pve\noutputs:\n proxmoxVirtualEnvironmentAptRepository: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRepository.\n","properties":{"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"type":"object","required":["filePath","index","node"]},"outputs":{"description":"A collection of values returned by getRepository.\n","properties":{"comment":{"description":"The associated comment.\n","type":"string"},"components":{"description":"The list of components.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Indicates the activation status.\n","type":"boolean"},"filePath":{"description":"The absolute path of the source list file that contains this repository.\n","type":"string"},"fileType":{"description":"The format of the defining source list file.\n","type":"string"},"id":{"description":"The unique identifier of this APT repository data source.\n","type":"string"},"index":{"description":"The index within the defining source list file.\n","type":"integer"},"node":{"description":"The name of the target Proxmox VE node.\n","type":"string"},"packageTypes":{"description":"The list of package types.\n","items":{"type":"string"},"type":"array"},"suites":{"description":"The list of package distributions.\n","items":{"type":"string"},"type":"array"},"uris":{"description":"The list of repository URIs.\n","items":{"type":"string"},"type":"array"}},"required":["comment","components","enabled","filePath","fileType","id","index","node","packageTypes","suites","uris"],"type":"object"}},"proxmoxve:Apt/standard/getRepository:getRepository":{"description":"Retrieves an APT standard repository from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Apt.standard.getRepository({\n handle: \"no-subscription\",\n node: \"pve\",\n});\nexport const proxmoxVirtualEnvironmentAptStandardRepository = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Apt.standard.get_repository(handle=\"no-subscription\",\n node=\"pve\")\npulumi.export(\"proxmoxVirtualEnvironmentAptStandardRepository\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Apt.Standard.GetRepository.Invoke(new()\n {\n Handle = \"no-subscription\",\n Node = \"pve\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentAptStandardRepository\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := apt.GetRepository(ctx, \u0026standard.GetRepositoryArgs{\n\t\t\tHandle: \"no-subscription\",\n\t\t\tNode: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"proxmoxVirtualEnvironmentAptStandardRepository\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Apt_standard.Apt_standardFunctions;\nimport com.pulumi.proxmoxve.Apt.inputs.GetRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Apt_standardFunctions.getRepository(GetRepositoryArgs.builder()\n .handle(\"no-subscription\")\n .node(\"pve\")\n .build());\n\n ctx.export(\"proxmoxVirtualEnvironmentAptStandardRepository\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Apt/standard:getRepository\n arguments:\n handle: no-subscription\n node: pve\noutputs:\n proxmoxVirtualEnvironmentAptStandardRepository: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRepository.\n","properties":{"handle":{"type":"string","description":"The handle of the APT standard repository.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"type":"object","required":["handle","node"]},"outputs":{"description":"A collection of values returned by getRepository.\n","properties":{"description":{"description":"The description of the APT standard repository.\n","type":"string"},"filePath":{"description":"The absolute path of the source list file that contains this standard repository.\n","type":"string"},"handle":{"description":"The handle of the APT standard repository.\n","type":"string"},"id":{"description":"The unique identifier of this APT standard repository data source.\n","type":"string"},"index":{"description":"The index within the defining source list file.\n","type":"integer"},"name":{"description":"The name of the APT standard repository.\n","type":"string"},"node":{"description":"The name of the target Proxmox VE node.\n","type":"string"},"status":{"description":"Indicates the activation status.\n","type":"integer"}},"required":["description","filePath","handle","id","index","name","node","status"],"type":"object"}},"proxmoxve:Cluster/getNodes:getNodes":{"description":"Retrieves information about all available nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableNodes = proxmoxve.Cluster.getNodes({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_nodes = proxmoxve.Cluster.get_nodes()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableNodes = ProxmoxVE.Cluster.GetNodes.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/cluster\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cluster.GetNodes(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Cluster.ClusterFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableNodes = ClusterFunctions.getNodes(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableNodes:\n fn::invoke:\n function: proxmoxve:Cluster:getNodes\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getNodes.\n","properties":{"cpuCounts":{"description":"The CPU count for each node.\n","items":{"type":"integer"},"type":"array"},"cpuUtilizations":{"description":"The CPU utilization on each node.\n","items":{"type":"number"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"memoryAvailables":{"description":"The memory available on each node.\n","items":{"type":"integer"},"type":"array"},"memoryUseds":{"description":"The memory used on each node.\n","items":{"type":"integer"},"type":"array"},"names":{"description":"The node names.\n","items":{"type":"string"},"type":"array"},"onlines":{"description":"Whether a node is online.\n","items":{"type":"boolean"},"type":"array"},"sslFingerprints":{"description":"The SSL fingerprint for each node.\n","items":{"type":"string"},"type":"array"},"supportLevels":{"description":"The support level for each node.\n","items":{"type":"string"},"type":"array"},"uptimes":{"description":"The uptime in seconds for each node.\n","items":{"type":"integer"},"type":"array"}},"required":["cpuCounts","cpuUtilizations","memoryAvailables","memoryUseds","names","onlines","sslFingerprints","supportLevels","uptimes","id"],"type":"object"}},"proxmoxve:HA/getHAGroup:getHAGroup":{"description":"Retrieves information about a specific High Availability group.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch the set of HA group identifiers...\nconst all = proxmoxve.HA.getHAGroups({});\n// ...which we will go through in order to fetch the whole data on each group.\nconst example = all.then(all =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: proxmoxve.HA.getHAGroup({\n group: __value,\n}) })));\nexport const proxmoxVirtualEnvironmentHagroupsFull = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch the set of HA group identifiers...\nall = proxmoxve.HA.get_ha_groups()\n# ...which we will go through in order to fetch the whole data on each group.\nexample = {__key: proxmoxve.HA.get_ha_group(group=__value) for __key, __value in all.group_ids}\npulumi.export(\"proxmoxVirtualEnvironmentHagroupsFull\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch the set of HA group identifiers...\n var all = ProxmoxVE.HA.GetHAGroups.Invoke();\n\n // ...which we will go through in order to fetch the whole data on each group.\n var example = ;\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentHagroupsFull\"] = example,\n };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHAGroup.\n","properties":{"group":{"type":"string","description":"The identifier of the High Availability group to read.\n"}},"type":"object","required":["group"]},"outputs":{"description":"A collection of values returned by getHAGroup.\n","properties":{"comment":{"description":"The comment associated with this group\n","type":"string"},"group":{"description":"The identifier of the High Availability group to read.\n","type":"string"},"id":{"description":"The unique identifier of this resource.\n","type":"string"},"noFailback":{"description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group.\n","type":"boolean"},"nodes":{"additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n","type":"object"},"restricted":{"description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group.\n","type":"boolean"}},"required":["comment","group","id","noFailback","nodes","restricted"],"type":"object"}},"proxmoxve:HA/getHAGroups:getHAGroups":{"description":"Retrieves the list of High Availability groups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.HA.getHAGroups({});\nexport const dataProxmoxVirtualEnvironmentHagroups = example.then(example =\u003e example.groupIds);\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.HA.get_ha_groups()\npulumi.export(\"dataProxmoxVirtualEnvironmentHagroups\", example.group_ids)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.HA.GetHAGroups.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHagroups\"] = example.Apply(getHAGroupsResult =\u003e getHAGroupsResult.GroupIds),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := ha.GetHAGroups(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHagroups\", example.GroupIds)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.HA.HAFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = HAFunctions.getHAGroups(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHagroups\", example.groupIds());\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:HA:getHAGroups\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentHagroups: ${example.groupIds}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getHAGroups.\n","properties":{"groupIds":{"description":"The identifiers of the High Availability groups.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The unique identifier of this resource.\n","type":"string"}},"required":["groupIds","id"],"type":"object"}},"proxmoxve:HA/getHAResource:getHAResource":{"description":"Retrieves the list of High Availability resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch the set of all HA resource identifiers...\nconst all = proxmoxve.HA.getHAResources({});\n// ...which we will go through in order to fetch the whole record for each resource.\nconst example = all.then(all =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: proxmoxve.HA.getHAResource({\n resourceId: __value,\n}) })));\nexport const proxmoxVirtualEnvironmentHaresourcesFull = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch the set of all HA resource identifiers...\nall = proxmoxve.HA.get_ha_resources()\n# ...which we will go through in order to fetch the whole record for each resource.\nexample = {__key: proxmoxve.HA.get_ha_resource(resource_id=__value) for __key, __value in all.resource_ids}\npulumi.export(\"proxmoxVirtualEnvironmentHaresourcesFull\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch the set of all HA resource identifiers...\n var all = ProxmoxVE.HA.GetHAResources.Invoke();\n\n // ...which we will go through in order to fetch the whole record for each resource.\n var example = ;\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentHaresourcesFull\"] = example,\n };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHAResource.\n","properties":{"resourceId":{"type":"string","description":"The identifier of the Proxmox HA resource to read.\n"}},"type":"object","required":["resourceId"]},"outputs":{"description":"A collection of values returned by getHAResource.\n","properties":{"comment":{"description":"The comment associated with this resource.\n","type":"string"},"group":{"description":"The identifier of the High Availability group this resource is a member of.\n","type":"string"},"id":{"description":"The unique identifier of this resource.\n","type":"string"},"maxRelocate":{"description":"The maximal number of relocation attempts.\n","type":"integer"},"maxRestart":{"description":"The maximal number of restart attempts.\n","type":"integer"},"resourceId":{"description":"The identifier of the Proxmox HA resource to read.\n","type":"string"},"state":{"description":"The desired state of the resource.\n","type":"string"},"type":{"description":"The type of High Availability resource (\u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`ct`\" pulumi-lang-dotnet=\"`Ct`\" pulumi-lang-go=\"`ct`\" pulumi-lang-python=\"`ct`\" pulumi-lang-yaml=\"`ct`\" pulumi-lang-java=\"`ct`\"\u003e`ct`\u003c/span\u003e).\n","type":"string"}},"required":["comment","group","id","maxRelocate","maxRestart","resourceId","state","type"],"type":"object"}},"proxmoxve:HA/getHAResources:getHAResources":{"description":"Retrieves the list of High Availability resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch the set of all HA resource identifiers.\nconst exampleAll = proxmoxve.HA.getHAResources({});\n// This will fetch the set of HA resource identifiers that correspond to virtual machines.\nconst exampleVm = proxmoxve.HA.getHAResources({\n type: \"vm\",\n});\nexport const dataProxmoxVirtualEnvironmentHaresources = {\n all: exampleAll.then(exampleAll =\u003e exampleAll.resourceIds),\n vms: exampleVm.then(exampleVm =\u003e exampleVm.resourceIds),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch the set of all HA resource identifiers.\nexample_all = proxmoxve.HA.get_ha_resources()\n# This will fetch the set of HA resource identifiers that correspond to virtual machines.\nexample_vm = proxmoxve.HA.get_ha_resources(type=\"vm\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHaresources\", {\n \"all\": example_all.resource_ids,\n \"vms\": example_vm.resource_ids,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch the set of all HA resource identifiers.\n var exampleAll = ProxmoxVE.HA.GetHAResources.Invoke();\n\n // This will fetch the set of HA resource identifiers that correspond to virtual machines.\n var exampleVm = ProxmoxVE.HA.GetHAResources.Invoke(new()\n {\n Type = \"vm\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHaresources\"] = \n {\n { \"all\", exampleAll.Apply(getHAResourcesResult =\u003e getHAResourcesResult.ResourceIds) },\n { \"vms\", exampleVm.Apply(getHAResourcesResult =\u003e getHAResourcesResult.ResourceIds) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\n// This will fetch the set of all HA resource identifiers.\nexampleAll, err := ha.GetHAResources(ctx, \u0026ha.GetHAResourcesArgs{\n}, nil);\nif err != nil {\nreturn err\n}\n// This will fetch the set of HA resource identifiers that correspond to virtual machines.\nexampleVm, err := ha.GetHAResources(ctx, \u0026ha.GetHAResourcesArgs{\nType: pulumi.StringRef(\"vm\"),\n}, nil);\nif err != nil {\nreturn err\n}\nctx.Export(\"dataProxmoxVirtualEnvironmentHaresources\", interface{}Map{\n\"all\": exampleAll.ResourceIds,\n\"vms\": exampleVm.ResourceIds,\n})\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.HA.HAFunctions;\nimport com.pulumi.proxmoxve.HA.inputs.GetHAResourcesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // This will fetch the set of all HA resource identifiers.\n final var exampleAll = HAFunctions.getHAResources(GetHAResourcesArgs.builder()\n .build());\n\n // This will fetch the set of HA resource identifiers that correspond to virtual machines.\n final var exampleVm = HAFunctions.getHAResources(GetHAResourcesArgs.builder()\n .type(\"vm\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHaresources\", Map.ofEntries(\n Map.entry(\"all\", exampleAll.resourceIds()),\n Map.entry(\"vms\", exampleVm.resourceIds())\n ));\n }\n}\n```\n```yaml\nvariables:\n # This will fetch the set of all HA resource identifiers.\n exampleAll:\n fn::invoke:\n function: proxmoxve:HA:getHAResources\n arguments: {}\n # This will fetch the set of HA resource identifiers that correspond to virtual machines.\n exampleVm:\n fn::invoke:\n function: proxmoxve:HA:getHAResources\n arguments:\n type: vm\noutputs:\n dataProxmoxVirtualEnvironmentHaresources:\n all: ${exampleAll.resourceIds}\n vms: ${exampleVm.resourceIds}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHAResources.\n","properties":{"type":{"type":"string","description":"The type of High Availability resources to fetch (\u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`ct`\" pulumi-lang-dotnet=\"`Ct`\" pulumi-lang-go=\"`ct`\" pulumi-lang-python=\"`ct`\" pulumi-lang-yaml=\"`ct`\" pulumi-lang-java=\"`ct`\"\u003e`ct`\u003c/span\u003e). All resources will be fetched if this option is unset.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getHAResources.\n","properties":{"id":{"description":"The unique identifier of this resource.\n","type":"string"},"resourceIds":{"description":"The identifiers of the High Availability resources.\n","items":{"type":"string"},"type":"array"},"type":{"description":"The type of High Availability resources to fetch (\u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`ct`\" pulumi-lang-dotnet=\"`Ct`\" pulumi-lang-go=\"`ct`\" pulumi-lang-python=\"`ct`\" pulumi-lang-yaml=\"`ct`\" pulumi-lang-java=\"`ct`\"\u003e`ct`\u003c/span\u003e). All resources will be fetched if this option is unset.\n","type":"string"}},"required":["id","resourceIds"],"type":"object"}},"proxmoxve:Hardware/getMappings:getMappings":{"description":"Retrieves a list of hardware mapping resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example_dir = proxmoxve.Hardware.getMappings({\n checkNode: \"pve\",\n type: \"dir\",\n});\nconst example_pci = proxmoxve.Hardware.getMappings({\n checkNode: \"pve\",\n type: \"pci\",\n});\nconst example_usb = proxmoxve.Hardware.getMappings({\n checkNode: \"pve\",\n type: \"usb\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingsPci = example_pci;\nexport const dataProxmoxVirtualEnvironmentHardwareMappingsUsb = example_usb;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample_dir = proxmoxve.Hardware.get_mappings(check_node=\"pve\",\n type=\"dir\")\nexample_pci = proxmoxve.Hardware.get_mappings(check_node=\"pve\",\n type=\"pci\")\nexample_usb = proxmoxve.Hardware.get_mappings(check_node=\"pve\",\n type=\"usb\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\", example_pci)\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\", example_usb)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example_dir = ProxmoxVE.Hardware.GetMappings.Invoke(new()\n {\n CheckNode = \"pve\",\n Type = \"dir\",\n });\n\n var example_pci = ProxmoxVE.Hardware.GetMappings.Invoke(new()\n {\n CheckNode = \"pve\",\n Type = \"pci\",\n });\n\n var example_usb = ProxmoxVE.Hardware.GetMappings.Invoke(new()\n {\n CheckNode = \"pve\",\n Type = \"usb\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\"] = example_pci,\n [\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\"] = example_usb,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.GetMappings(ctx, \u0026hardware.GetMappingsArgs{\n\t\t\tCheckNode: pulumi.StringRef(\"pve\"),\n\t\t\tType: \"dir\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample_pci, err := hardware.GetMappings(ctx, \u0026hardware.GetMappingsArgs{\n\t\t\tCheckNode: pulumi.StringRef(\"pve\"),\n\t\t\tType: \"pci\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample_usb, err := hardware.GetMappings(ctx, \u0026hardware.GetMappingsArgs{\n\t\t\tCheckNode: pulumi.StringRef(\"pve\"),\n\t\t\tType: \"usb\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\", example_pci)\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\", example_usb)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware.HardwareFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetMappingsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example-dir = HardwareFunctions.getMappings(GetMappingsArgs.builder()\n .checkNode(\"pve\")\n .type(\"dir\")\n .build());\n\n final var example-pci = HardwareFunctions.getMappings(GetMappingsArgs.builder()\n .checkNode(\"pve\")\n .type(\"pci\")\n .build());\n\n final var example-usb = HardwareFunctions.getMappings(GetMappingsArgs.builder()\n .checkNode(\"pve\")\n .type(\"usb\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\", example_pci);\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\", example_usb);\n }\n}\n```\n```yaml\nvariables:\n example-dir:\n fn::invoke:\n function: proxmoxve:Hardware:getMappings\n arguments:\n checkNode: pve\n type: dir\n example-pci:\n fn::invoke:\n function: proxmoxve:Hardware:getMappings\n arguments:\n checkNode: pve\n type: pci\n example-usb:\n fn::invoke:\n function: proxmoxve:Hardware:getMappings\n arguments:\n checkNode: pve\n type: usb\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingsPci: ${[\"example-pci\"]}\n dataProxmoxVirtualEnvironmentHardwareMappingsUsb: ${[\"example-usb\"]}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getMappings.\n","properties":{"checkNode":{"type":"string","description":"The name of the node whose configurations should be checked for correctness.\n"},"type":{"type":"string","description":"The type of the hardware mappings.\n"}},"type":"object","required":["type"]},"outputs":{"description":"A collection of values returned by getMappings.\n","properties":{"checkNode":{"description":"The name of the node whose configurations should be checked for correctness.\n","type":"string"},"checks":{"description":"Might contain relevant diagnostics about incorrect configurations.\n","items":{"$ref":"#/types/proxmoxve:Hardware/getMappingsCheck:getMappingsCheck"},"type":"array"},"id":{"description":"The unique identifier of this hardware mappings data source.\n","type":"string"},"ids":{"description":"The identifiers of the hardware mappings.\n","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the hardware mappings.\n","type":"string"}},"required":["checks","id","ids","type"],"type":"object"}},"proxmoxve:Hardware/mapping/getDir:getDir":{"description":"Retrieves a directory mapping from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Hardware.mapping.getDir({\n name: \"example\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingDir = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Hardware.mapping.get_dir(name=\"example\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingDir\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Hardware.Mapping.GetDir.Invoke(new()\n {\n Name = \"example\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingDir\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := hardware.GetDir(ctx, \u0026mapping.GetDirArgs{\n\t\t\tName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingDir\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware_mapping.Hardware_mappingFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetDirArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Hardware_mappingFunctions.getDir(GetDirArgs.builder()\n .name(\"example\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingDir\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Hardware/mapping:getDir\n arguments:\n name: example\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingDir: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getDir.\n","properties":{"name":{"type":"string","description":"The name of this directory mapping.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getDir.\n","properties":{"comment":{"description":"The comment of this directory mapping.\n","type":"string"},"id":{"description":"The unique identifier of this directory mapping data source.\n","type":"string"},"maps":{"description":"The actual map of devices for the directory mapping.\n","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/getDirMap:getDirMap"},"type":"array"},"name":{"description":"The name of this directory mapping.\n","type":"string"}},"required":["comment","id","maps","name"],"type":"object"}},"proxmoxve:Hardware/mapping/getPci:getPci":{"description":"Retrieves a PCI hardware mapping from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Hardware.mapping.getPci({\n name: \"example\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingPci = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Hardware.mapping.get_pci(name=\"example\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingPci\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Hardware.Mapping.GetPci.Invoke(new()\n {\n Name = \"example\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingPci\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := hardware.GetPci(ctx, \u0026mapping.GetPciArgs{\n\t\t\tName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingPci\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware_mapping.Hardware_mappingFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetPciArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Hardware_mappingFunctions.getPci(GetPciArgs.builder()\n .name(\"example\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingPci\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Hardware/mapping:getPci\n arguments:\n name: example\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingPci: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getPci.\n","properties":{"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getPci.\n","properties":{"comment":{"description":"The comment of this PCI hardware mapping.\n","type":"string"},"id":{"description":"The unique identifier of this PCI hardware mapping data source.\n","type":"string"},"maps":{"description":"The actual map of devices for the hardware mapping.\n","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/getPciMap:getPciMap"},"type":"array"},"mediatedDevices":{"description":"Indicates whether to use with mediated devices.\n","type":"boolean"},"name":{"description":"The name of this PCI hardware mapping.\n","type":"string"}},"required":["comment","id","maps","mediatedDevices","name"],"type":"object"}},"proxmoxve:Hardware/mapping/getUsb:getUsb":{"description":"Retrieves a USB hardware mapping from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Hardware.mapping.getUsb({\n name: \"example\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingUsb = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Hardware.mapping.get_usb(name=\"example\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Hardware.Mapping.GetUsb.Invoke(new()\n {\n Name = \"example\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := hardware.GetUsb(ctx, \u0026mapping.GetUsbArgs{\n\t\t\tName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware_mapping.Hardware_mappingFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetUsbArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Hardware_mappingFunctions.getUsb(GetUsbArgs.builder()\n .name(\"example\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Hardware/mapping:getUsb\n arguments:\n name: example\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingUsb: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUsb.\n","properties":{"name":{"type":"string","description":"The name of this USB hardware mapping.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getUsb.\n","properties":{"comment":{"description":"The comment of this USB hardware mapping.\n","type":"string"},"id":{"description":"The unique identifier of this USB hardware mapping data source.\n","type":"string"},"maps":{"description":"The actual map of devices for the hardware mapping.\n","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/getUsbMap:getUsbMap"},"type":"array"},"name":{"description":"The name of this USB hardware mapping.\n","type":"string"}},"required":["comment","id","maps","name"],"type":"object"}},"proxmoxve:Metrics/getServer:getServer":{"description":"Retrieves information about a specific PVE metric server.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Metrics.getServer({\n name: \"example_influxdb\",\n});\nexport const dataProxmoxVirtualEnvironmentMetricsServer = {\n server: example.then(example =\u003e example.server),\n port: example.then(example =\u003e example.port),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Metrics.get_server(name=\"example_influxdb\")\npulumi.export(\"dataProxmoxVirtualEnvironmentMetricsServer\", {\n \"server\": example.server,\n \"port\": example.port,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Metrics.GetServer.Invoke(new()\n {\n Name = \"example_influxdb\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentMetricsServer\"] = \n {\n { \"server\", example.Apply(getServerResult =\u003e getServerResult.Server) },\n { \"port\", example.Apply(getServerResult =\u003e getServerResult.Port) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/metrics\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := metrics.GetServer(ctx, \u0026metrics.GetServerArgs{\n\t\t\tName: \"example_influxdb\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentMetricsServer\", pulumi.Map{\n\t\t\t\"server\": example.Server,\n\t\t\t\"port\": example.Port,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Metrics.MetricsFunctions;\nimport com.pulumi.proxmoxve.Metrics.inputs.GetServerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = MetricsFunctions.getServer(GetServerArgs.builder()\n .name(\"example_influxdb\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentMetricsServer\", Map.ofEntries(\n Map.entry(\"server\", example.server()),\n Map.entry(\"port\", example.port())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Metrics:getServer\n arguments:\n name: example_influxdb\noutputs:\n dataProxmoxVirtualEnvironmentMetricsServer:\n server: ${example.server}\n port: ${example.port}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getServer.\n","properties":{"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getServer.\n","properties":{"disable":{"description":"Indicates if the metric server is disabled.\n","type":"boolean"},"id":{"description":"The unique identifier of this resource.\n","type":"string"},"name":{"description":"Unique name that will be ID of this metric server in PVE.\n","type":"string"},"opentelemetryPath":{"description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n","type":"string"},"opentelemetryProto":{"description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e.\n","type":"string"},"port":{"description":"Server network port.\n","type":"integer"},"server":{"description":"Server dns name or IP address.\n","type":"string"},"type":{"description":"Plugin type. Either \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n","type":"string"}},"required":["disable","id","name","opentelemetryPath","opentelemetryProto","port","server","type"],"type":"object"}},"proxmoxve:Network/getDNS:getDNS":{"description":"Retrieves the DNS configuration for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNode = proxmoxve.Network.getDNS({\n nodeName: \"first-node\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node = proxmoxve.Network.get_dns(node_name=\"first-node\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNode = ProxmoxVE.Network.GetDNS.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.GetDNS(ctx, \u0026network.GetDNSArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetDNSArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNode = NetworkFunctions.getDNS(GetDNSArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n firstNode:\n fn::invoke:\n function: proxmoxve:Network:getDNS\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getDNS.\n","properties":{"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getDNS.\n","properties":{"domain":{"description":"The DNS search domain.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"type":"string"},"servers":{"description":"The DNS servers.\n","items":{"type":"string"},"type":"array"}},"required":["domain","nodeName","servers","id"],"type":"object"}},"proxmoxve:Network/getHosts:getHosts":{"description":"Retrieves all the host entries from a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeHostEntries = proxmoxve.Network.getHosts({\n nodeName: \"first-node\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_host_entries = proxmoxve.Network.get_hosts(node_name=\"first-node\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeHostEntries = ProxmoxVE.Network.GetHosts.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.GetHosts(ctx, \u0026network.GetHostsArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetHostsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNodeHostEntries = NetworkFunctions.getHosts(GetHostsArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n firstNodeHostEntries:\n fn::invoke:\n function: proxmoxve:Network:getHosts\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHosts.\n","properties":{"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getHosts.\n","properties":{"addresses":{"description":"The IP addresses.\n","items":{"type":"string"},"type":"array"},"digest":{"description":"The SHA1 digest.\n","type":"string"},"entries":{"description":"The host entries (conversion of \u003cspan pulumi-lang-nodejs=\"`addresses`\" pulumi-lang-dotnet=\"`Addresses`\" pulumi-lang-go=\"`addresses`\" pulumi-lang-python=\"`addresses`\" pulumi-lang-yaml=\"`addresses`\" pulumi-lang-java=\"`addresses`\"\u003e`addresses`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`hostnames`\" pulumi-lang-dotnet=\"`Hostnames`\" pulumi-lang-go=\"`hostnames`\" pulumi-lang-python=\"`hostnames`\" pulumi-lang-yaml=\"`hostnames`\" pulumi-lang-java=\"`hostnames`\"\u003e`hostnames`\u003c/span\u003e into\nobjects).\n","items":{"$ref":"#/types/proxmoxve:Network/getHostsEntry:getHostsEntry"},"type":"array"},"hostnames":{"description":"The hostnames associated with each of the IP addresses.\n","items":{"items":{"type":"string"},"type":"array"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"type":"string"}},"required":["addresses","digest","entries","hostnames","nodeName","id"],"type":"object"}},"proxmoxve:Network/getTime:getTime":{"description":"Retrieves the current time for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeTime = proxmoxve.Network.getTime({\n nodeName: \"first-node\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_time = proxmoxve.Network.get_time(node_name=\"first-node\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeTime = ProxmoxVE.Network.GetTime.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.GetTime(ctx, \u0026network.GetTimeArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetTimeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNodeTime = NetworkFunctions.getTime(GetTimeArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n firstNodeTime:\n fn::invoke:\n function: proxmoxve:Network:getTime\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTime.\n","properties":{"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getTime.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"localTime":{"description":"The node's local time.\n","type":"string"},"nodeName":{"type":"string"},"timeZone":{"description":"The node's time zone.\n","type":"string"},"utcTime":{"description":"The node's local time formatted as UTC.\n","type":"string"}},"required":["localTime","nodeName","timeZone","utcTime","id"],"type":"object"}},"proxmoxve:Network/getVersion:getVersion":{"description":"Retrieves API version details.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Network.getVersion({});\nexport const dataProxmoxVirtualEnvironmentVersion = {\n release: example.then(example =\u003e example.release),\n repositoryId: example.then(example =\u003e example.repositoryId),\n version: example.then(example =\u003e example.version),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Network.get_version()\npulumi.export(\"dataProxmoxVirtualEnvironmentVersion\", {\n \"release\": example.release,\n \"repositoryId\": example.repository_id,\n \"version\": example.version,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Network.GetVersion.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentVersion\"] = \n {\n { \"release\", example.Apply(getVersionResult =\u003e getVersionResult.Release) },\n { \"repositoryId\", example.Apply(getVersionResult =\u003e getVersionResult.RepositoryId) },\n { \"version\", example.Apply(getVersionResult =\u003e getVersionResult.Version) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := network.GetVersion(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentVersion\", pulumi.StringMap{\n\t\t\t\"release\": example.Release,\n\t\t\t\"repositoryId\": example.RepositoryId,\n\t\t\t\"version\": example.Version,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = NetworkFunctions.getVersion(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentVersion\", Map.ofEntries(\n Map.entry(\"release\", example.release()),\n Map.entry(\"repositoryId\", example.repositoryId()),\n Map.entry(\"version\", example.version())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Network:getVersion\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentVersion:\n release: ${example.release}\n repositoryId: ${example.repositoryId}\n version: ${example.version}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getVersion.\n","properties":{"id":{"description":"Placeholder identifier attribute.\n","type":"string"},"release":{"description":"The current Proxmox VE point release in `x.y` format.\n","type":"string"},"repositoryId":{"description":"The short git revision from which this version was build.\n","type":"string"},"version":{"description":"The full pve-manager package version of this node.\n","type":"string"}},"required":["id","release","repositoryId","version"],"type":"object"}},"proxmoxve:Permission/getGroup:getGroup":{"description":"Retrieves information about a specific user group.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsTeam = proxmoxve.Permission.getGroup({\n groupId: \"operations-team\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_team = proxmoxve.Permission.get_group(group_id=\"operations-team\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsTeam = ProxmoxVE.Permission.GetGroup.Invoke(new()\n {\n GroupId = \"operations-team\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetGroup(ctx, \u0026permission.GetGroupArgs{\n\t\t\tGroupId: \"operations-team\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsTeam = PermissionFunctions.getGroup(GetGroupArgs.builder()\n .groupId(\"operations-team\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsTeam:\n fn::invoke:\n function: proxmoxve:Permission:getGroup\n arguments:\n groupId: operations-team\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getGroup.\n","properties":{"groupId":{"type":"string","description":"The group identifier.\n"}},"type":"object","required":["groupId"]},"outputs":{"description":"A collection of values returned by getGroup.\n","properties":{"acls":{"description":"The access control list.\n","items":{"$ref":"#/types/proxmoxve:Permission/getGroupAcl:getGroupAcl"},"type":"array"},"comment":{"description":"The group comment.\n","type":"string"},"groupId":{"type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"members":{"description":"The group members as a list with `username@realm` entries.\n","items":{"type":"string"},"type":"array"}},"required":["acls","comment","groupId","members","id"],"type":"object"}},"proxmoxve:Permission/getGroups:getGroups":{"description":"Retrieves basic information about all available user groups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableGroups = proxmoxve.Permission.getGroups({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_groups = proxmoxve.Permission.get_groups()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableGroups = ProxmoxVE.Permission.GetGroups.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetGroups(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableGroups = PermissionFunctions.getGroups(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableGroups:\n fn::invoke:\n function: proxmoxve:Permission:getGroups\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getGroups.\n","properties":{"comments":{"description":"The group comments.\n","items":{"type":"string"},"type":"array"},"groupIds":{"description":"The group identifiers.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"}},"required":["comments","groupIds","id"],"type":"object"}},"proxmoxve:Permission/getPool:getPool":{"description":"Retrieves information about a specific resource pool.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsPool = proxmoxve.Permission.getPool({\n poolId: \"operations\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_pool = proxmoxve.Permission.get_pool(pool_id=\"operations\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsPool = ProxmoxVE.Permission.GetPool.Invoke(new()\n {\n PoolId = \"operations\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetPool(ctx, \u0026permission.GetPoolArgs{\n\t\t\tPoolId: \"operations\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetPoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsPool = PermissionFunctions.getPool(GetPoolArgs.builder()\n .poolId(\"operations\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsPool:\n fn::invoke:\n function: proxmoxve:Permission:getPool\n arguments:\n poolId: operations\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getPool.\n","properties":{"poolId":{"type":"string","description":"The pool identifier.\n"}},"type":"object","required":["poolId"]},"outputs":{"description":"A collection of values returned by getPool.\n","properties":{"comment":{"description":"The pool comment.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"members":{"description":"The pool members.\n","items":{"$ref":"#/types/proxmoxve:Permission/getPoolMember:getPoolMember"},"type":"array"},"poolId":{"type":"string"}},"required":["comment","members","poolId","id"],"type":"object"}},"proxmoxve:Permission/getPools:getPools":{"description":"Retrieves the identifiers for all the available resource pools.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availablePools = proxmoxve.Permission.getPools({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_pools = proxmoxve.Permission.get_pools()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availablePools = ProxmoxVE.Permission.GetPools.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetPools(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availablePools = PermissionFunctions.getPools(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availablePools:\n fn::invoke:\n function: proxmoxve:Permission:getPools\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getPools.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"poolIds":{"description":"The pool identifiers.\n","items":{"type":"string"},"type":"array"}},"required":["poolIds","id"],"type":"object"}},"proxmoxve:Permission/getRole:getRole":{"description":"Retrieves information about a specific role.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsRole = proxmoxve.Permission.getRole({\n roleId: \"operations\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_role = proxmoxve.Permission.get_role(role_id=\"operations\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsRole = ProxmoxVE.Permission.GetRole.Invoke(new()\n {\n RoleId = \"operations\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetRole(ctx, \u0026permission.GetRoleArgs{\n\t\t\tRoleId: \"operations\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsRole = PermissionFunctions.getRole(GetRoleArgs.builder()\n .roleId(\"operations\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsRole:\n fn::invoke:\n function: proxmoxve:Permission:getRole\n arguments:\n roleId: operations\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRole.\n","properties":{"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["roleId"]},"outputs":{"description":"A collection of values returned by getRole.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"privileges":{"description":"The role privileges\n","items":{"type":"string"},"type":"array"},"roleId":{"type":"string"}},"required":["privileges","roleId","id"],"type":"object"}},"proxmoxve:Permission/getRoles:getRoles":{"description":"Retrieves information about all the available roles.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableRoles = proxmoxve.Permission.getRoles({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_roles = proxmoxve.Permission.get_roles()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableRoles = ProxmoxVE.Permission.GetRoles.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetRoles(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableRoles = PermissionFunctions.getRoles(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableRoles:\n fn::invoke:\n function: proxmoxve:Permission:getRoles\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getRoles.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"privileges":{"description":"The role privileges.\n","items":{"items":{"type":"string"},"type":"array"},"type":"array"},"roleIds":{"description":"The role identifiers.\n","items":{"type":"string"},"type":"array"},"specials":{"description":"Whether the role is special (built-in).\n","items":{"type":"boolean"},"type":"array"}},"required":["privileges","roleIds","specials","id"],"type":"object"}},"proxmoxve:Permission/getUser:getUser":{"description":"Retrieves information about a specific user.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsUser = proxmoxve.Permission.getUser({\n userId: \"operation@pam\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_user = proxmoxve.Permission.get_user(user_id=\"operation@pam\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsUser = ProxmoxVE.Permission.GetUser.Invoke(new()\n {\n UserId = \"operation@pam\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetUser(ctx, \u0026permission.GetUserArgs{\n\t\t\tUserId: \"operation@pam\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsUser = PermissionFunctions.getUser(GetUserArgs.builder()\n .userId(\"operation@pam\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsUser:\n fn::invoke:\n function: proxmoxve:Permission:getUser\n arguments:\n userId: operation@pam\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUser.\n","properties":{"userId":{"type":"string","description":"The user identifier.\n"}},"type":"object","required":["userId"]},"outputs":{"description":"A collection of values returned by getUser.\n","properties":{"acls":{"description":"The access control list.\n","items":{"$ref":"#/types/proxmoxve:Permission/getUserAcl:getUserAcl"},"type":"array"},"comment":{"description":"The user comment.\n","type":"string"},"email":{"description":"The user's email address.\n","type":"string"},"enabled":{"description":"Whether the user account is enabled.\n","type":"boolean"},"expirationDate":{"description":"The user account's expiration date (RFC 3339).\n","type":"string"},"firstName":{"description":"The user's first name.\n","type":"string"},"groups":{"description":"The user's groups.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"keys":{"description":"The user's keys.\n","type":"string"},"lastName":{"description":"The user's last name.\n","type":"string"},"userId":{"type":"string"}},"required":["acls","comment","email","enabled","expirationDate","firstName","groups","keys","lastName","userId","id"],"type":"object"}},"proxmoxve:Permission/getUsers:getUsers":{"description":"Retrieves information about all the available users.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableUsers = proxmoxve.Permission.getUsers({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_users = proxmoxve.Permission.get_users()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableUsers = ProxmoxVE.Permission.GetUsers.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetUsers(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableUsers = PermissionFunctions.getUsers(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableUsers:\n fn::invoke:\n function: proxmoxve:Permission:getUsers\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getUsers.\n","properties":{"comments":{"description":"The user comments.\n","items":{"type":"string"},"type":"array"},"emails":{"description":"The users' email addresses.\n","items":{"type":"string"},"type":"array"},"enableds":{"description":"Whether a user account is enabled.\n","items":{"type":"boolean"},"type":"array"},"expirationDates":{"description":"The user accounts' expiration dates (RFC 3339).\n","items":{"type":"string"},"type":"array"},"firstNames":{"description":"The users' first names.\n","items":{"type":"string"},"type":"array"},"groups":{"description":"The users' groups.\n","items":{"items":{"type":"string"},"type":"array"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"keys":{"description":"The users' keys.\n","items":{"type":"string"},"type":"array"},"lastNames":{"description":"The users' last names.\n","items":{"type":"string"},"type":"array"},"userIds":{"description":"The user identifiers.\n","items":{"type":"string"},"type":"array"}},"required":["comments","emails","enableds","expirationDates","firstNames","groups","keys","lastNames","userIds","id"],"type":"object"}},"proxmoxve:SDNZone/getEvpn:getEvpn":{"description":"Retrieves information about an EVPN Zone in Proxmox SDN. The EVPN zone creates a routable Layer 3 network, capable of spanning across multiple clusters.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getEvpn({\n id: \"evpn1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneEvpn = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n controller: example.then(example =\u003e example.controller),\n vrfVxlan: example.then(example =\u003e example.vrfVxlan),\n advertiseSubnets: example.then(example =\u003e example.advertiseSubnets),\n disableArpNdSuppression: example.then(example =\u003e example.disableArpNdSuppression),\n exitNodes: example.then(example =\u003e example.exitNodes),\n exitNodesLocalRouting: example.then(example =\u003e example.exitNodesLocalRouting),\n primaryExitNode: example.then(example =\u003e example.primaryExitNode),\n rtImport: example.then(example =\u003e example.rtImport),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_evpn(id=\"evpn1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"controller\": example.controller,\n \"vrfVxlan\": example.vrf_vxlan,\n \"advertiseSubnets\": example.advertise_subnets,\n \"disableArpNdSuppression\": example.disable_arp_nd_suppression,\n \"exitNodes\": example.exit_nodes,\n \"exitNodesLocalRouting\": example.exit_nodes_local_routing,\n \"primaryExitNode\": example.primary_exit_node,\n \"rtImport\": example.rt_import,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetEvpn.Invoke(new()\n {\n Id = \"evpn1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\"] = \n {\n { \"id\", example.Apply(getEvpnResult =\u003e getEvpnResult.Id) },\n { \"nodes\", example.Apply(getEvpnResult =\u003e getEvpnResult.Nodes) },\n { \"controller\", example.Apply(getEvpnResult =\u003e getEvpnResult.Controller) },\n { \"vrfVxlan\", example.Apply(getEvpnResult =\u003e getEvpnResult.VrfVxlan) },\n { \"advertiseSubnets\", example.Apply(getEvpnResult =\u003e getEvpnResult.AdvertiseSubnets) },\n { \"disableArpNdSuppression\", example.Apply(getEvpnResult =\u003e getEvpnResult.DisableArpNdSuppression) },\n { \"exitNodes\", example.Apply(getEvpnResult =\u003e getEvpnResult.ExitNodes) },\n { \"exitNodesLocalRouting\", example.Apply(getEvpnResult =\u003e getEvpnResult.ExitNodesLocalRouting) },\n { \"primaryExitNode\", example.Apply(getEvpnResult =\u003e getEvpnResult.PrimaryExitNode) },\n { \"rtImport\", example.Apply(getEvpnResult =\u003e getEvpnResult.RtImport) },\n { \"mtu\", example.Apply(getEvpnResult =\u003e getEvpnResult.Mtu) },\n { \"dns\", example.Apply(getEvpnResult =\u003e getEvpnResult.Dns) },\n { \"dnsZone\", example.Apply(getEvpnResult =\u003e getEvpnResult.DnsZone) },\n { \"ipam\", example.Apply(getEvpnResult =\u003e getEvpnResult.Ipam) },\n { \"reverseDns\", example.Apply(getEvpnResult =\u003e getEvpnResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetEvpn(ctx, \u0026sdnzone.GetEvpnArgs{\n\t\t\tId: \"evpn1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"controller\": example.Controller,\n\t\t\t\"vrfVxlan\": example.VrfVxlan,\n\t\t\t\"advertiseSubnets\": example.AdvertiseSubnets,\n\t\t\t\"disableArpNdSuppression\": example.DisableArpNdSuppression,\n\t\t\t\"exitNodes\": example.ExitNodes,\n\t\t\t\"exitNodesLocalRouting\": example.ExitNodesLocalRouting,\n\t\t\t\"primaryExitNode\": example.PrimaryExitNode,\n\t\t\t\"rtImport\": example.RtImport,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetEvpnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getEvpn(GetEvpnArgs.builder()\n .id(\"evpn1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"controller\", example.controller()),\n Map.entry(\"vrfVxlan\", example.vrfVxlan()),\n Map.entry(\"advertiseSubnets\", example.advertiseSubnets()),\n Map.entry(\"disableArpNdSuppression\", example.disableArpNdSuppression()),\n Map.entry(\"exitNodes\", example.exitNodes()),\n Map.entry(\"exitNodesLocalRouting\", example.exitNodesLocalRouting()),\n Map.entry(\"primaryExitNode\", example.primaryExitNode()),\n Map.entry(\"rtImport\", example.rtImport()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getEvpn\n arguments:\n id: evpn1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneEvpn:\n id: ${example.id}\n nodes: ${example.nodes}\n controller: ${example.controller}\n vrfVxlan: ${example.vrfVxlan}\n advertiseSubnets: ${example.advertiseSubnets}\n disableArpNdSuppression: ${example.disableArpNdSuppression}\n exitNodes: ${example.exitNodes}\n exitNodesLocalRouting: ${example.exitNodesLocalRouting}\n primaryExitNode: ${example.primaryExitNode}\n rtImport: ${example.rtImport}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getEvpn.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getEvpn.\n","properties":{"advertiseSubnets":{"description":"Enable subnet advertisement for EVPN.\n","type":"boolean"},"controller":{"description":"EVPN controller address.\n","type":"string"},"disableArpNdSuppression":{"description":"Disable ARP/ND suppression for EVPN.\n","type":"boolean"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"exitNodes":{"description":"List of exit nodes for EVPN.\n","items":{"type":"string"},"type":"array"},"exitNodesLocalRouting":{"description":"Enable local routing for EVPN exit nodes.\n","type":"boolean"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"primaryExitNode":{"description":"Primary exit node for EVPN.\n","type":"string"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"rtImport":{"description":"Route target import for EVPN. Must be in the format '\\n\\n:\\n\\n' (e.g., '65000:65000').\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"},"vrfVxlan":{"description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n","type":"integer"}},"required":["advertiseSubnets","controller","disableArpNdSuppression","dns","dnsZone","exitNodes","exitNodesLocalRouting","id","ipam","mtu","nodes","pending","primaryExitNode","reverseDns","rtImport","state","vrfVxlan"],"type":"object"}},"proxmoxve:SDNZone/getQinq:getQinq":{"description":"Retrieves information about a QinQ Zone in Proxmox SDN. QinQ also known as VLAN stacking, that uses multiple layers of VLAN tags for isolation. The QinQ zone defines the outer VLAN tag (the Service VLAN) whereas the inner VLAN tag is defined by the VNet. Your physical network switches must support stacked VLANs for this configuration. Due to the double stacking of tags, you need 4 more bytes for QinQ VLANs. For example, you must reduce the MTU to 1496 if you physical interface MTU is 1500.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getQinq({\n id: \"qinq1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneQinq = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n bridge: example.then(example =\u003e example.bridge),\n serviceVlan: example.then(example =\u003e example.serviceVlan),\n serviceVlanProtocol: example.then(example =\u003e example.serviceVlanProtocol),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_qinq(id=\"qinq1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneQinq\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"bridge\": example.bridge,\n \"serviceVlan\": example.service_vlan,\n \"serviceVlanProtocol\": example.service_vlan_protocol,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetQinq.Invoke(new()\n {\n Id = \"qinq1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneQinq\"] = \n {\n { \"id\", example.Apply(getQinqResult =\u003e getQinqResult.Id) },\n { \"nodes\", example.Apply(getQinqResult =\u003e getQinqResult.Nodes) },\n { \"bridge\", example.Apply(getQinqResult =\u003e getQinqResult.Bridge) },\n { \"serviceVlan\", example.Apply(getQinqResult =\u003e getQinqResult.ServiceVlan) },\n { \"serviceVlanProtocol\", example.Apply(getQinqResult =\u003e getQinqResult.ServiceVlanProtocol) },\n { \"mtu\", example.Apply(getQinqResult =\u003e getQinqResult.Mtu) },\n { \"dns\", example.Apply(getQinqResult =\u003e getQinqResult.Dns) },\n { \"dnsZone\", example.Apply(getQinqResult =\u003e getQinqResult.DnsZone) },\n { \"ipam\", example.Apply(getQinqResult =\u003e getQinqResult.Ipam) },\n { \"reverseDns\", example.Apply(getQinqResult =\u003e getQinqResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetQinq(ctx, \u0026sdnzone.GetQinqArgs{\n\t\t\tId: \"qinq1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneQinq\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"bridge\": example.Bridge,\n\t\t\t\"serviceVlan\": example.ServiceVlan,\n\t\t\t\"serviceVlanProtocol\": example.ServiceVlanProtocol,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetQinqArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getQinq(GetQinqArgs.builder()\n .id(\"qinq1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneQinq\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"bridge\", example.bridge()),\n Map.entry(\"serviceVlan\", example.serviceVlan()),\n Map.entry(\"serviceVlanProtocol\", example.serviceVlanProtocol()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getQinq\n arguments:\n id: qinq1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneQinq:\n id: ${example.id}\n nodes: ${example.nodes}\n bridge: ${example.bridge}\n serviceVlan: ${example.serviceVlan}\n serviceVlanProtocol: ${example.serviceVlanProtocol}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getQinq.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getQinq.\n","properties":{"bridge":{"description":"A local, VLAN-aware bridge that is already configured on each local node\n","type":"string"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"serviceVlan":{"description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n","type":"integer"},"serviceVlanProtocol":{"description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["bridge","dns","dnsZone","id","ipam","mtu","nodes","pending","reverseDns","serviceVlan","serviceVlanProtocol","state"],"type":"object"}},"proxmoxve:SDNZone/getSimple:getSimple":{"description":"Retrieves information about a Simple Zone in Proxmox SDN. It will create an isolated VNet bridge. This bridge is not linked to a physical interface, and VM traffic is only local on each the node. It can be used in NAT or routed setups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getSimple({\n id: \"simple1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneSimple = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_simple(id=\"simple1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneSimple\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetSimple.Invoke(new()\n {\n Id = \"simple1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneSimple\"] = \n {\n { \"id\", example.Apply(getSimpleResult =\u003e getSimpleResult.Id) },\n { \"nodes\", example.Apply(getSimpleResult =\u003e getSimpleResult.Nodes) },\n { \"mtu\", example.Apply(getSimpleResult =\u003e getSimpleResult.Mtu) },\n { \"dns\", example.Apply(getSimpleResult =\u003e getSimpleResult.Dns) },\n { \"dnsZone\", example.Apply(getSimpleResult =\u003e getSimpleResult.DnsZone) },\n { \"ipam\", example.Apply(getSimpleResult =\u003e getSimpleResult.Ipam) },\n { \"reverseDns\", example.Apply(getSimpleResult =\u003e getSimpleResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetSimple(ctx, \u0026sdnzone.GetSimpleArgs{\n\t\t\tId: \"simple1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneSimple\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetSimpleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getSimple(GetSimpleArgs.builder()\n .id(\"simple1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneSimple\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getSimple\n arguments:\n id: simple1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneSimple:\n id: ${example.id}\n nodes: ${example.nodes}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getSimple.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getSimple.\n","properties":{"dhcp":{"description":"The type of the DHCP backend for this zone.\n","type":"string"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["dhcp","dns","dnsZone","id","ipam","mtu","nodes","pending","reverseDns","state"],"type":"object"}},"proxmoxve:SDNZone/getVlan:getVlan":{"description":"Retrieves information about a VLAN Zone in Proxmox SDN. It uses an existing local Linux or OVS bridge to connect to the node's physical interface. It uses VLAN tagging defined in the VNet to isolate the network segments. This allows connectivity of VMs between different nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getVlan({\n id: \"vlan1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneVlan = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n bridge: example.then(example =\u003e example.bridge),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_vlan(id=\"vlan1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneVlan\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"bridge\": example.bridge,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetVlan.Invoke(new()\n {\n Id = \"vlan1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneVlan\"] = \n {\n { \"id\", example.Apply(getVlanResult =\u003e getVlanResult.Id) },\n { \"nodes\", example.Apply(getVlanResult =\u003e getVlanResult.Nodes) },\n { \"bridge\", example.Apply(getVlanResult =\u003e getVlanResult.Bridge) },\n { \"mtu\", example.Apply(getVlanResult =\u003e getVlanResult.Mtu) },\n { \"dns\", example.Apply(getVlanResult =\u003e getVlanResult.Dns) },\n { \"dnsZone\", example.Apply(getVlanResult =\u003e getVlanResult.DnsZone) },\n { \"ipam\", example.Apply(getVlanResult =\u003e getVlanResult.Ipam) },\n { \"reverseDns\", example.Apply(getVlanResult =\u003e getVlanResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetVlan(ctx, \u0026sdnzone.GetVlanArgs{\n\t\t\tId: \"vlan1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneVlan\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"bridge\": example.Bridge,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetVlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getVlan(GetVlanArgs.builder()\n .id(\"vlan1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneVlan\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"bridge\", example.bridge()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getVlan\n arguments:\n id: vlan1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneVlan:\n id: ${example.id}\n nodes: ${example.nodes}\n bridge: ${example.bridge}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVlan.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getVlan.\n","properties":{"bridge":{"description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n","type":"string"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["bridge","dns","dnsZone","id","ipam","mtu","nodes","pending","reverseDns","state"],"type":"object"}},"proxmoxve:SDNZone/getVxlan:getVxlan":{"description":"Retrieves information about a VXLAN Zone in Proxmox SDN. It establishes a tunnel (overlay) on top of an existing network (underlay). This encapsulates layer 2 Ethernet frames within layer 4 UDP datagrams using the default destination port 4789. You have to configure the underlay network yourself to enable UDP connectivity between all peers. Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes lower than the outgoing physical interface.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getVxlan({\n id: \"vxlan1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneVxlan = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n peers: example.then(example =\u003e example.peers),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_vxlan(id=\"vxlan1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"peers\": example.peers,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetVxlan.Invoke(new()\n {\n Id = \"vxlan1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\"] = \n {\n { \"id\", example.Apply(getVxlanResult =\u003e getVxlanResult.Id) },\n { \"nodes\", example.Apply(getVxlanResult =\u003e getVxlanResult.Nodes) },\n { \"peers\", example.Apply(getVxlanResult =\u003e getVxlanResult.Peers) },\n { \"mtu\", example.Apply(getVxlanResult =\u003e getVxlanResult.Mtu) },\n { \"dns\", example.Apply(getVxlanResult =\u003e getVxlanResult.Dns) },\n { \"dnsZone\", example.Apply(getVxlanResult =\u003e getVxlanResult.DnsZone) },\n { \"ipam\", example.Apply(getVxlanResult =\u003e getVxlanResult.Ipam) },\n { \"reverseDns\", example.Apply(getVxlanResult =\u003e getVxlanResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetVxlan(ctx, \u0026sdnzone.GetVxlanArgs{\n\t\t\tId: \"vxlan1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"peers\": example.Peers,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetVxlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getVxlan(GetVxlanArgs.builder()\n .id(\"vxlan1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"peers\", example.peers()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getVxlan\n arguments:\n id: vxlan1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneVxlan:\n id: ${example.id}\n nodes: ${example.nodes}\n peers: ${example.peers}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVxlan.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getVxlan.\n","properties":{"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"peers":{"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["dns","dnsZone","id","ipam","mtu","nodes","peers","pending","reverseDns","state"],"type":"object"}},"proxmoxve:Sdn/getSubnet:getSubnet":{"description":"Retrieve details about a specific SDN Subnet in Proxmox VE.\n","inputs":{"description":"A collection of arguments for invoking getSubnet.\n","properties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/getSubnetDhcpRange:getSubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"vnet":{"type":"string","description":"The VNet this subnet belongs to.\n"}},"type":"object","required":["cidr","vnet"]},"outputs":{"description":"A collection of values returned by getSubnet.\n","properties":{"cidr":{"description":"A CIDR network address, for example 10.0.0.0/8\n","type":"string"},"dhcpDnsServer":{"description":"The DNS server used for DHCP.\n","type":"string"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/getSubnetDhcpRange:getSubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"description":"Prefix used for DNS zone delegation.\n","type":"string"},"gateway":{"description":"The gateway address for the subnet.\n","type":"string"},"id":{"description":"The full ID in the format 'vnet-id/subnet-id'.\n","type":"string"},"snat":{"description":"Whether SNAT is enabled for the subnet.\n","type":"boolean"},"vnet":{"description":"The VNet this subnet belongs to.\n","type":"string"}},"required":["cidr","dhcpDnsServer","dhcpRange","dnsZonePrefix","gateway","id","snat","vnet"],"type":"object"}},"proxmoxve:Sdn/getVnet:getVnet":{"description":"Retrieves information about an existing SDN VNet.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Sdn.getVnet({\n id: \"vnet1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnVnet = {\n id: example.then(example =\u003e example.id),\n zone: example.then(example =\u003e example.zone),\n alias: example.then(example =\u003e example.alias),\n isolatePorts: example.then(example =\u003e example.isolatePorts),\n tag: example.then(example =\u003e example.tag),\n vlanAware: example.then(example =\u003e example.vlanAware),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Sdn.get_vnet(id=\"vnet1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnVnet\", {\n \"id\": example.id,\n \"zone\": example.zone,\n \"alias\": example.alias,\n \"isolatePorts\": example.isolate_ports,\n \"tag\": example.tag,\n \"vlanAware\": example.vlan_aware,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Sdn.GetVnet.Invoke(new()\n {\n Id = \"vnet1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnVnet\"] = \n {\n { \"id\", example.Apply(getVnetResult =\u003e getVnetResult.Id) },\n { \"zone\", example.Apply(getVnetResult =\u003e getVnetResult.Zone) },\n { \"alias\", example.Apply(getVnetResult =\u003e getVnetResult.Alias) },\n { \"isolatePorts\", example.Apply(getVnetResult =\u003e getVnetResult.IsolatePorts) },\n { \"tag\", example.Apply(getVnetResult =\u003e getVnetResult.Tag) },\n { \"vlanAware\", example.Apply(getVnetResult =\u003e getVnetResult.VlanAware) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdn.GetVnet(ctx, \u0026sdn.GetVnetArgs{\n\t\t\tId: \"vnet1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnVnet\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"zone\": example.Zone,\n\t\t\t\"alias\": example.Alias,\n\t\t\t\"isolatePorts\": example.IsolatePorts,\n\t\t\t\"tag\": example.Tag,\n\t\t\t\"vlanAware\": example.VlanAware,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn.SdnFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetVnetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SdnFunctions.getVnet(GetVnetArgs.builder()\n .id(\"vnet1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnVnet\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"zone\", example.zone()),\n Map.entry(\"alias\", example.alias()),\n Map.entry(\"isolatePorts\", example.isolatePorts()),\n Map.entry(\"tag\", example.tag()),\n Map.entry(\"vlanAware\", example.vlanAware())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Sdn:getVnet\n arguments:\n id: vnet1\noutputs:\n dataProxmoxVirtualEnvironmentSdnVnet:\n id: ${example.id}\n zone: ${example.zone}\n alias: ${example.alias}\n isolatePorts: ${example.isolatePorts}\n tag: ${example.tag}\n vlanAware: ${example.vlanAware}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVnet.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN VNet.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getVnet.\n","properties":{"alias":{"description":"An optional alias for this VNet.\n","type":"string"},"id":{"description":"The unique identifier of the SDN VNet.\n","type":"string"},"isolatePorts":{"description":"Isolate ports within this VNet.\n","type":"boolean"},"tag":{"description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n","type":"integer"},"vlanAware":{"description":"Allow VM VLANs to pass through this VNet.\n","type":"boolean"},"zone":{"description":"The zone to which this VNet belongs.\n","type":"string"}},"required":["alias","id","isolatePorts","tag","vlanAware","zone"],"type":"object"}},"proxmoxve:Sdn/getVnets:getVnets":{"description":"Retrieves information about all SDN VNets in Proxmox. This data source lists all virtual networks configured in the Software-Defined Networking setup.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// List all SDN VNets\nconst all = proxmoxve.Sdn.getVnets({});\nexport const dataProxmoxVirtualEnvironmentSdnVnetsAll = {\n vnets: all.then(all =\u003e all.vnets),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# List all SDN VNets\nall = proxmoxve.Sdn.get_vnets()\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnVnetsAll\", {\n \"vnets\": all.vnets,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // List all SDN VNets\n var all = ProxmoxVE.Sdn.GetVnets.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnVnetsAll\"] = \n {\n { \"vnets\", all.Apply(getVnetsResult =\u003e getVnetsResult.Vnets) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// List all SDN VNets\n\t\tall, err := sdn.GetVnets(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnVnetsAll\", []sdn.GetVnetsVnetMap{\n\t\t\t\"vnets\": all.Vnets,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn.SdnFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // List all SDN VNets\n final var all = SdnFunctions.getVnets(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnVnetsAll\", Map.of(\"vnets\", all.vnets()));\n }\n}\n```\n```yaml\nvariables:\n # List all SDN VNets\n all:\n fn::invoke:\n function: proxmoxve:Sdn:getVnets\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentSdnVnetsAll:\n vnets: ${all.vnets}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getVnets.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"vnets":{"description":"List of SDN VNets.\n","items":{"$ref":"#/types/proxmoxve:Sdn/getVnetsVnet:getVnetsVnet"},"type":"array"}},"required":["vnets","id"],"type":"object"}},"proxmoxve:Sdn/getZones:getZones":{"description":"Retrieves information about all SDN Zones in Proxmox. This data source can optionally filter zones by type.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// List all SDN zones\nconst all = proxmoxve.Sdn.getZones({});\n// List only EVPN zones\nconst evpnOnly = proxmoxve.Sdn.getZones({\n type: \"evpn\",\n});\n// List only Simple zones \nconst simpleOnly = proxmoxve.Sdn.getZones({\n type: \"simple\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZonesAll = {\n zones: all.then(all =\u003e all.zones),\n};\nexport const dataProxmoxVirtualEnvironmentSdnZonesFiltered = {\n evpnZones: evpnOnly.then(evpnOnly =\u003e evpnOnly.zones),\n simpleZones: simpleOnly.then(simpleOnly =\u003e simpleOnly.zones),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# List all SDN zones\nall = proxmoxve.Sdn.get_zones()\n# List only EVPN zones\nevpn_only = proxmoxve.Sdn.get_zones(type=\"evpn\")\n# List only Simple zones \nsimple_only = proxmoxve.Sdn.get_zones(type=\"simple\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZonesAll\", {\n \"zones\": all.zones,\n})\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\", {\n \"evpnZones\": evpn_only.zones,\n \"simpleZones\": simple_only.zones,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // List all SDN zones\n var all = ProxmoxVE.Sdn.GetZones.Invoke();\n\n // List only EVPN zones\n var evpnOnly = ProxmoxVE.Sdn.GetZones.Invoke(new()\n {\n Type = \"evpn\",\n });\n\n // List only Simple zones \n var simpleOnly = ProxmoxVE.Sdn.GetZones.Invoke(new()\n {\n Type = \"simple\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZonesAll\"] = \n {\n { \"zones\", all.Apply(getZonesResult =\u003e getZonesResult.Zones) },\n },\n [\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\"] = \n {\n { \"evpnZones\", evpnOnly.Apply(getZonesResult =\u003e getZonesResult.Zones) },\n { \"simpleZones\", simpleOnly.Apply(getZonesResult =\u003e getZonesResult.Zones) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// List all SDN zones\n\t\tall, err := sdn.GetZones(ctx, \u0026sdn.GetZonesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// List only EVPN zones\n\t\tevpnOnly, err := sdn.GetZones(ctx, \u0026sdn.GetZonesArgs{\n\t\t\tType: pulumi.StringRef(\"evpn\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// List only Simple zones\n\t\tsimpleOnly, err := sdn.GetZones(ctx, \u0026sdn.GetZonesArgs{\n\t\t\tType: pulumi.StringRef(\"simple\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZonesAll\", []sdn.GetZonesZoneMap{\n\t\t\t\"zones\": all.Zones,\n\t\t})\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\", []sdn.GetZonesZoneMap{\n\t\t\t\"evpnZones\": evpnOnly.Zones,\n\t\t\t\"simpleZones\": simpleOnly.Zones,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn.SdnFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetZonesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // List all SDN zones\n final var all = SdnFunctions.getZones(GetZonesArgs.builder()\n .build());\n\n // List only EVPN zones\n final var evpnOnly = SdnFunctions.getZones(GetZonesArgs.builder()\n .type(\"evpn\")\n .build());\n\n // List only Simple zones \n final var simpleOnly = SdnFunctions.getZones(GetZonesArgs.builder()\n .type(\"simple\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZonesAll\", Map.of(\"zones\", all.zones()));\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\", Map.ofEntries(\n Map.entry(\"evpnZones\", evpnOnly.zones()),\n Map.entry(\"simpleZones\", simpleOnly.zones())\n ));\n }\n}\n```\n```yaml\nvariables:\n # List all SDN zones\n all:\n fn::invoke:\n function: proxmoxve:Sdn:getZones\n arguments: {}\n # List only EVPN zones\n evpnOnly:\n fn::invoke:\n function: proxmoxve:Sdn:getZones\n arguments:\n type: evpn\n # List only Simple zones\n simpleOnly:\n fn::invoke:\n function: proxmoxve:Sdn:getZones\n arguments:\n type: simple\noutputs:\n dataProxmoxVirtualEnvironmentSdnZonesAll:\n zones: ${all.zones}\n dataProxmoxVirtualEnvironmentSdnZonesFiltered:\n evpnZones: ${evpnOnly.zones}\n simpleZones: ${simpleOnly.zones}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getZones.\n","properties":{"type":{"type":"string","description":"Filter zones by type (simple, vlan, qinq, vxlan, evpn).\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getZones.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"type":{"description":"Filter zones by type (simple, vlan, qinq, vxlan, evpn).\n","type":"string"},"zones":{"description":"List of SDN zones.\n","items":{"$ref":"#/types/proxmoxve:Sdn/getZonesZone:getZonesZone"},"type":"array"}},"required":["zones","id"],"type":"object"}},"proxmoxve:Storage/getDatastores:getDatastores":{"description":"Retrieves information about all the datastores available to a specific node.\n","inputs":{"description":"A collection of arguments for invoking getDatastores.\n","properties":{"datastores":{"type":"array","items":{"$ref":"#/types/proxmoxve:Storage/getDatastoresDatastore:getDatastoresDatastore"},"description":"The list of datastores.\n"},"filters":{"$ref":"#/types/proxmoxve:Storage/getDatastoresFilters:getDatastoresFilters","description":"The filters to apply to the stores.\n"},"nodeName":{"type":"string","description":"The name of the node to retrieve the stores from.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getDatastores.\n","properties":{"datastores":{"description":"The list of datastores.\n","items":{"$ref":"#/types/proxmoxve:Storage/getDatastoresDatastore:getDatastoresDatastore"},"type":"array"},"filters":{"$ref":"#/types/proxmoxve:Storage/getDatastoresFilters:getDatastoresFilters","description":"The filters to apply to the stores.\n"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"description":"The name of the node to retrieve the stores from.\n","type":"string"}},"required":["nodeName","id"],"type":"object"}},"proxmoxve:VM/getVirtualMachine:getVirtualMachine":{"description":"Retrieves information about a specific VM.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst testVm = proxmoxve.VM.getVirtualMachine({\n nodeName: \"test\",\n vmId: 100,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ntest_vm = proxmoxve.VM.get_virtual_machine(node_name=\"test\",\n vm_id=100)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testVm = ProxmoxVE.VM.GetVirtualMachine.Invoke(new()\n {\n NodeName = \"test\",\n VmId = 100,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vm.GetVirtualMachine(ctx, \u0026vm.GetVirtualMachineArgs{\n\t\t\tNodeName: \"test\",\n\t\t\tVmId: 100,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.VM.VMFunctions;\nimport com.pulumi.proxmoxve.VM.inputs.GetVirtualMachineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testVm = VMFunctions.getVirtualMachine(GetVirtualMachineArgs.builder()\n .nodeName(\"test\")\n .vmId(100)\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n testVm:\n fn::invoke:\n function: proxmoxve:VM:getVirtualMachine\n arguments:\n nodeName: test\n vmId: 100\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVirtualMachine.\n","properties":{"nodeName":{"type":"string","description":"The node name.\n"},"status":{"type":"string","description":"The status of the VM.\n"},"template":{"type":"boolean","description":"Whether the VM is a template.\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"}},"type":"object","required":["nodeName","vmId"]},"outputs":{"description":"A collection of values returned by getVirtualMachine.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The virtual machine name.\n","type":"string"},"nodeName":{"type":"string"},"status":{"description":"The status of the VM.\n","type":"string"},"tags":{"description":"A list of tags of the VM.\n","items":{"type":"string"},"type":"array"},"template":{"description":"Whether the VM is a template.\n","type":"boolean"},"vmId":{"type":"integer"}},"required":["name","nodeName","tags","vmId","id"],"type":"object"}},"proxmoxve:VM/getVirtualMachines:getVirtualMachines":{"description":"Retrieves information about all VMs in the Proxmox cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuVms = proxmoxve.VM.getVirtualMachines({\n tags: [\"ubuntu\"],\n});\nconst ubuntuTemplates = proxmoxve.VM.getVirtualMachines({\n tags: [\n \"template\",\n \"latest\",\n ],\n filters: [\n {\n name: \"template\",\n values: [\"true\"],\n },\n {\n name: \"status\",\n values: [\"stopped\"],\n },\n {\n name: \"name\",\n regex: true,\n values: [\"^ubuntu-20.*$\"],\n },\n {\n name: \"node_name\",\n regex: true,\n values: [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_vms = proxmoxve.VM.get_virtual_machines(tags=[\"ubuntu\"])\nubuntu_templates = proxmoxve.VM.get_virtual_machines(tags=[\n \"template\",\n \"latest\",\n ],\n filters=[\n {\n \"name\": \"template\",\n \"values\": [\"true\"],\n },\n {\n \"name\": \"status\",\n \"values\": [\"stopped\"],\n },\n {\n \"name\": \"name\",\n \"regex\": True,\n \"values\": [\"^ubuntu-20.*$\"],\n },\n {\n \"name\": \"node_name\",\n \"regex\": True,\n \"values\": [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuVms = ProxmoxVE.VM.GetVirtualMachines.Invoke(new()\n {\n Tags = new[]\n {\n \"ubuntu\",\n },\n });\n\n var ubuntuTemplates = ProxmoxVE.VM.GetVirtualMachines.Invoke(new()\n {\n Tags = new[]\n {\n \"template\",\n \"latest\",\n },\n Filters = new[]\n {\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"template\",\n Values = new[]\n {\n \"true\",\n },\n },\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"status\",\n Values = new[]\n {\n \"stopped\",\n },\n },\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"name\",\n Regex = true,\n Values = new[]\n {\n \"^ubuntu-20.*$\",\n },\n },\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"node_name\",\n Regex = true,\n Values = new[]\n {\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vm.GetVirtualMachines(ctx, \u0026vm.GetVirtualMachinesArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"ubuntu\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vm.GetVirtualMachines(ctx, \u0026vm.GetVirtualMachinesArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"template\",\n\t\t\t\t\"latest\",\n\t\t\t},\n\t\t\tFilters: []vm.GetVirtualMachinesFilter{\n\t\t\t\t{\n\t\t\t\t\tName: \"template\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"status\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"stopped\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"^ubuntu-20.*$\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"node_name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"node_us_[1-3]\",\n\t\t\t\t\t\t\"node_eu_[1-3]\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.VM.VMFunctions;\nimport com.pulumi.proxmoxve.VM.inputs.GetVirtualMachinesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var ubuntuVms = VMFunctions.getVirtualMachines(GetVirtualMachinesArgs.builder()\n .tags(\"ubuntu\")\n .build());\n\n final var ubuntuTemplates = VMFunctions.getVirtualMachines(GetVirtualMachinesArgs.builder()\n .tags( \n \"template\",\n \"latest\")\n .filters( \n GetVirtualMachinesFilterArgs.builder()\n .name(\"template\")\n .values(\"true\")\n .build(),\n GetVirtualMachinesFilterArgs.builder()\n .name(\"status\")\n .values(\"stopped\")\n .build(),\n GetVirtualMachinesFilterArgs.builder()\n .name(\"name\")\n .regex(true)\n .values(\"^ubuntu-20.*$\")\n .build(),\n GetVirtualMachinesFilterArgs.builder()\n .name(\"node_name\")\n .regex(true)\n .values( \n \"node_us_[1-3]\",\n \"node_eu_[1-3]\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n ubuntuVms:\n fn::invoke:\n function: proxmoxve:VM:getVirtualMachines\n arguments:\n tags:\n - ubuntu\n ubuntuTemplates:\n fn::invoke:\n function: proxmoxve:VM:getVirtualMachines\n arguments:\n tags:\n - template\n - latest\n filters:\n - name: template\n values:\n - true\n - name: status\n values:\n - stopped\n - name: name\n regex: true\n values:\n - ^ubuntu-20.*$\n - name: node_name\n regex: true\n values:\n - node_us_[1-3]\n - node_eu_[1-3]\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVirtualMachines.\n","properties":{"filters":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/getVirtualMachinesFilter:getVirtualMachinesFilter"},"description":"Filter blocks. The VM must satisfy all filter blocks to be included in the result.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the VMs. The VM must have all\nthe tags to be included in the result.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getVirtualMachines.\n","properties":{"filters":{"items":{"$ref":"#/types/proxmoxve:VM/getVirtualMachinesFilter:getVirtualMachinesFilter"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"description":"The node name.\n","type":"string"},"tags":{"description":"A list of tags of the VM.\n","items":{"type":"string"},"type":"array"},"vms":{"description":"The VMs list.\n","items":{"$ref":"#/types/proxmoxve:VM/getVirtualMachinesVm:getVirtualMachinesVm"},"type":"array"}},"required":["vms","id"],"type":"object"}},"proxmoxve:index/getContainer:getContainer":{"description":"Retrieves information about a specific Container.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst testContainer = proxmoxve.getContainer({\n nodeName: \"test\",\n vmId: 100,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ntest_container = proxmoxve.get_container(node_name=\"test\",\n vm_id=100)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testContainer = ProxmoxVE.GetContainer.Invoke(new()\n {\n NodeName = \"test\",\n VmId = 100,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.GetContainer(ctx, \u0026proxmoxve.GetContainerArgs{\n\t\t\tNodeName: \"test\",\n\t\t\tVmId: 100,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetContainerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testContainer = ProxmoxveFunctions.getContainer(GetContainerArgs.builder()\n .nodeName(\"test\")\n .vmId(100)\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n testContainer:\n fn::invoke:\n function: proxmoxve:getContainer\n arguments:\n nodeName: test\n vmId: 100\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getContainer.\n","properties":{"nodeName":{"type":"string","description":"The node name.\n"},"status":{"type":"string","description":"The status of the container.\n"},"template":{"type":"boolean","description":"Whether the container is a template.\n"},"vmId":{"type":"integer","description":"The container identifier.\n"}},"type":"object","required":["nodeName","vmId"]},"outputs":{"description":"A collection of values returned by getContainer.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The container name.\n","type":"string"},"nodeName":{"type":"string"},"status":{"description":"The status of the container.\n","type":"string"},"tags":{"description":"A list of tags of the container.\n","items":{"type":"string"},"type":"array"},"template":{"description":"Whether the container is a template.\n","type":"boolean"},"vmId":{"type":"integer"}},"required":["name","nodeName","tags","vmId","id"],"type":"object"}},"proxmoxve:index/getContainers:getContainers":{"description":"Retrieves information about all containers in the Proxmox cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainers = proxmoxve.getContainers({\n tags: [\"ubuntu\"],\n});\nconst ubuntuTemplates = proxmoxve.getContainers({\n tags: [\n \"template\",\n \"latest\",\n ],\n filters: [\n {\n name: \"template\",\n values: [\"true\"],\n },\n {\n name: \"status\",\n values: [\"stopped\"],\n },\n {\n name: \"name\",\n regex: true,\n values: [\"^ubuntu-20.*$\"],\n },\n {\n name: \"node_name\",\n regex: true,\n values: [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_containers = proxmoxve.get_containers(tags=[\"ubuntu\"])\nubuntu_templates = proxmoxve.get_containers(tags=[\n \"template\",\n \"latest\",\n ],\n filters=[\n {\n \"name\": \"template\",\n \"values\": [\"true\"],\n },\n {\n \"name\": \"status\",\n \"values\": [\"stopped\"],\n },\n {\n \"name\": \"name\",\n \"regex\": True,\n \"values\": [\"^ubuntu-20.*$\"],\n },\n {\n \"name\": \"node_name\",\n \"regex\": True,\n \"values\": [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainers = ProxmoxVE.GetContainers.Invoke(new()\n {\n Tags = new[]\n {\n \"ubuntu\",\n },\n });\n\n var ubuntuTemplates = ProxmoxVE.GetContainers.Invoke(new()\n {\n Tags = new[]\n {\n \"template\",\n \"latest\",\n },\n Filters = new[]\n {\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"template\",\n Values = new[]\n {\n \"true\",\n },\n },\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"status\",\n Values = new[]\n {\n \"stopped\",\n },\n },\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"name\",\n Regex = true,\n Values = new[]\n {\n \"^ubuntu-20.*$\",\n },\n },\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"node_name\",\n Regex = true,\n Values = new[]\n {\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.GetContainers(ctx, \u0026proxmoxve.GetContainersArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"ubuntu\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.GetContainers(ctx, \u0026proxmoxve.GetContainersArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"template\",\n\t\t\t\t\"latest\",\n\t\t\t},\n\t\t\tFilters: []proxmoxve.GetContainersFilter{\n\t\t\t\t{\n\t\t\t\t\tName: \"template\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"status\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"stopped\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"^ubuntu-20.*$\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"node_name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"node_us_[1-3]\",\n\t\t\t\t\t\t\"node_eu_[1-3]\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetContainersArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var ubuntuContainers = ProxmoxveFunctions.getContainers(GetContainersArgs.builder()\n .tags(\"ubuntu\")\n .build());\n\n final var ubuntuTemplates = ProxmoxveFunctions.getContainers(GetContainersArgs.builder()\n .tags( \n \"template\",\n \"latest\")\n .filters( \n GetContainersFilterArgs.builder()\n .name(\"template\")\n .values(\"true\")\n .build(),\n GetContainersFilterArgs.builder()\n .name(\"status\")\n .values(\"stopped\")\n .build(),\n GetContainersFilterArgs.builder()\n .name(\"name\")\n .regex(true)\n .values(\"^ubuntu-20.*$\")\n .build(),\n GetContainersFilterArgs.builder()\n .name(\"node_name\")\n .regex(true)\n .values( \n \"node_us_[1-3]\",\n \"node_eu_[1-3]\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n ubuntuContainers:\n fn::invoke:\n function: proxmoxve:getContainers\n arguments:\n tags:\n - ubuntu\n ubuntuTemplates:\n fn::invoke:\n function: proxmoxve:getContainers\n arguments:\n tags:\n - template\n - latest\n filters:\n - name: template\n values:\n - true\n - name: status\n values:\n - stopped\n - name: name\n regex: true\n values:\n - ^ubuntu-20.*$\n - name: node_name\n regex: true\n values:\n - node_us_[1-3]\n - node_eu_[1-3]\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getContainers.\n","properties":{"filters":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/getContainersFilter:getContainersFilter"},"description":"Filter blocks. The container must satisfy all filter blocks to be included in the result.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the containers. The container must have all\nthe tags to be included in the result.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getContainers.\n","properties":{"containers":{"description":"The containers list.\n","items":{"$ref":"#/types/proxmoxve:index/getContainersContainer:getContainersContainer"},"type":"array"},"filters":{"items":{"$ref":"#/types/proxmoxve:index/getContainersFilter:getContainersFilter"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"description":"The node name.\n","type":"string"},"tags":{"description":"A list of tags of the container.\n","items":{"type":"string"},"type":"array"}},"required":["containers","id"],"type":"object"}},"proxmoxve:index/getFile:getFile":{"description":"Retrieves information about an existing file in a Proxmox Virtual Environment node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuIso = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"iso\",\n fileName: \"ubuntu-22.04.3-live-server-amd64.iso\",\n});\nconst ubuntuContainerTemplate = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"vztmpl\",\n fileName: \"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\",\n});\nconst cloudInitSnippet = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"snippets\",\n fileName: \"cloud-init-config.yaml\",\n});\nconst importedFile = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"import\",\n fileName: \"imported-config.yaml\",\n});\nexport const ubuntuIsoId = ubuntuIso.then(ubuntuIso =\u003e ubuntuIso.id);\nexport const ubuntuIsoSize = ubuntuIso.then(ubuntuIso =\u003e ubuntuIso.fileSize);\nexport const containerTemplateFormat = ubuntuContainerTemplate.then(ubuntuContainerTemplate =\u003e ubuntuContainerTemplate.fileFormat);\nconst example = new proxmoxve.vm.VirtualMachine(\"example\", {\n nodeName: \"pve\",\n vmId: 100,\n cdrom: {\n fileId: ubuntuIso.then(ubuntuIso =\u003e ubuntuIso.id),\n },\n cpu: {\n cores: 2,\n },\n memory: {\n dedicated: 2048,\n },\n disks: [{\n datastoreId: \"local-lvm\",\n fileFormat: \"qcow2\",\n size: 20,\n }],\n networkDevices: [{\n bridge: \"vmbr0\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_iso = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"iso\",\n file_name=\"ubuntu-22.04.3-live-server-amd64.iso\")\nubuntu_container_template = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"vztmpl\",\n file_name=\"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\")\ncloud_init_snippet = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"snippets\",\n file_name=\"cloud-init-config.yaml\")\nimported_file = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"import\",\n file_name=\"imported-config.yaml\")\npulumi.export(\"ubuntuIsoId\", ubuntu_iso.id)\npulumi.export(\"ubuntuIsoSize\", ubuntu_iso.file_size)\npulumi.export(\"containerTemplateFormat\", ubuntu_container_template.file_format)\nexample = proxmoxve.vm.VirtualMachine(\"example\",\n node_name=\"pve\",\n vm_id=100,\n cdrom={\n \"file_id\": ubuntu_iso.id,\n },\n cpu={\n \"cores\": 2,\n },\n memory={\n \"dedicated\": 2048,\n },\n disks=[{\n \"datastore_id\": \"local-lvm\",\n \"file_format\": \"qcow2\",\n \"size\": 20,\n }],\n network_devices=[{\n \"bridge\": \"vmbr0\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuIso = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"iso\",\n FileName = \"ubuntu-22.04.3-live-server-amd64.iso\",\n });\n\n var ubuntuContainerTemplate = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"vztmpl\",\n FileName = \"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\",\n });\n\n var cloudInitSnippet = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"snippets\",\n FileName = \"cloud-init-config.yaml\",\n });\n\n var importedFile = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"import\",\n FileName = \"imported-config.yaml\",\n });\n\n var example = new ProxmoxVE.VM.VirtualMachine(\"example\", new()\n {\n NodeName = \"pve\",\n VmId = 100,\n Cdrom = new ProxmoxVE.VM.Inputs.VirtualMachineCdromArgs\n {\n FileId = ubuntuIso.Apply(getFileResult =\u003e getFileResult.Id),\n },\n Cpu = new ProxmoxVE.VM.Inputs.VirtualMachineCpuArgs\n {\n Cores = 2,\n },\n Memory = new ProxmoxVE.VM.Inputs.VirtualMachineMemoryArgs\n {\n Dedicated = 2048,\n },\n Disks = new[]\n {\n new ProxmoxVE.VM.Inputs.VirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n FileFormat = \"qcow2\",\n Size = 20,\n },\n },\n NetworkDevices = new[]\n {\n new ProxmoxVE.VM.Inputs.VirtualMachineNetworkDeviceArgs\n {\n Bridge = \"vmbr0\",\n },\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ubuntuIsoId\"] = ubuntuIso.Apply(getFileResult =\u003e getFileResult.Id),\n [\"ubuntuIsoSize\"] = ubuntuIso.Apply(getFileResult =\u003e getFileResult.FileSize),\n [\"containerTemplateFormat\"] = ubuntuContainerTemplate.Apply(getFileResult =\u003e getFileResult.FileFormat),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntuIso, err := proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"iso\",\n\t\t\tFileName: \"ubuntu-22.04.3-live-server-amd64.iso\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerTemplate, err := proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"vztmpl\",\n\t\t\tFileName: \"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"snippets\",\n\t\t\tFileName: \"cloud-init-config.yaml\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"import\",\n\t\t\tFileName: \"imported-config.yaml\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ubuntuIsoId\", ubuntuIso.Id)\n\t\tctx.Export(\"ubuntuIsoSize\", ubuntuIso.FileSize)\n\t\tctx.Export(\"containerTemplateFormat\", ubuntuContainerTemplate.FileFormat)\n\t\t_, err = vm.NewVirtualMachine(ctx, \"example\", \u0026vm.VirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tVmId: pulumi.Int(100),\n\t\t\tCdrom: \u0026vm.VirtualMachineCdromArgs{\n\t\t\t\tFileId: pulumi.String(ubuntuIso.Id),\n\t\t\t},\n\t\t\tCpu: \u0026vm.VirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(2),\n\t\t\t},\n\t\t\tMemory: \u0026vm.VirtualMachineMemoryArgs{\n\t\t\t\tDedicated: pulumi.Int(2048),\n\t\t\t},\n\t\t\tDisks: vm.VirtualMachineDiskArray{\n\t\t\t\t\u0026vm.VirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tFileFormat: pulumi.String(\"qcow2\"),\n\t\t\t\t\tSize: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkDevices: vm.VirtualMachineNetworkDeviceArray{\n\t\t\t\t\u0026vm.VirtualMachineNetworkDeviceArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetFileArgs;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachine;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachineArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineCdromArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineCpuArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineMemoryArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineDiskArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineNetworkDeviceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var ubuntuIso = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"iso\")\n .fileName(\"ubuntu-22.04.3-live-server-amd64.iso\")\n .build());\n\n final var ubuntuContainerTemplate = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"vztmpl\")\n .fileName(\"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\")\n .build());\n\n final var cloudInitSnippet = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"snippets\")\n .fileName(\"cloud-init-config.yaml\")\n .build());\n\n final var importedFile = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"import\")\n .fileName(\"imported-config.yaml\")\n .build());\n\n ctx.export(\"ubuntuIsoId\", ubuntuIso.id());\n ctx.export(\"ubuntuIsoSize\", ubuntuIso.fileSize());\n ctx.export(\"containerTemplateFormat\", ubuntuContainerTemplate.fileFormat());\n var example = new VirtualMachine(\"example\", VirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .vmId(100)\n .cdrom(VirtualMachineCdromArgs.builder()\n .fileId(ubuntuIso.id())\n .build())\n .cpu(VirtualMachineCpuArgs.builder()\n .cores(2)\n .build())\n .memory(VirtualMachineMemoryArgs.builder()\n .dedicated(2048)\n .build())\n .disks(VirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .fileFormat(\"qcow2\")\n .size(20)\n .build())\n .networkDevices(VirtualMachineNetworkDeviceArgs.builder()\n .bridge(\"vmbr0\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:VM:VirtualMachine\n properties:\n nodeName: pve\n vmId: 100\n cdrom:\n fileId: ${ubuntuIso.id}\n cpu:\n cores: 2\n memory:\n dedicated: 2048\n disks:\n - datastoreId: local-lvm\n fileFormat: qcow2\n size: 20\n networkDevices:\n - bridge: vmbr0\nvariables:\n ubuntuIso:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: iso\n fileName: ubuntu-22.04.3-live-server-amd64.iso\n ubuntuContainerTemplate:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: vztmpl\n fileName: ubuntu-22.04-standard_22.04-1_amd64.tar.zst\n cloudInitSnippet:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: snippets\n fileName: cloud-init-config.yaml\n importedFile:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: import\n fileName: imported-config.yaml\noutputs:\n ubuntuIsoId: ${ubuntuIso.id}\n ubuntuIsoSize: ${ubuntuIso.fileSize}\n containerTemplateFormat: ${ubuntuContainerTemplate.fileFormat}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getFile.\n","properties":{"contentType":{"type":"string","description":"The content type of the file.\n"},"datastoreId":{"type":"string","description":"The identifier of the datastore.\n"},"fileName":{"type":"string","description":"The name of the file.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"}},"type":"object","required":["contentType","datastoreId","fileName","nodeName"]},"outputs":{"description":"A collection of values returned by getFile.\n","properties":{"contentType":{"description":"The content type of the file.\n","type":"string"},"datastoreId":{"description":"The identifier of the datastore.\n","type":"string"},"fileFormat":{"description":"The format of the file.\n","type":"string"},"fileName":{"description":"The name of the file.\n","type":"string"},"fileSize":{"description":"The size of the file in bytes.\n","type":"integer"},"id":{"description":"The unique identifier of the file (volume ID).\n","type":"string"},"nodeName":{"description":"The name of the node.\n","type":"string"},"vmid":{"description":"The VM ID associated with the file (if applicable).\n","type":"integer"}},"required":["contentType","datastoreId","fileFormat","fileName","fileSize","id","nodeName","vmid"],"type":"object"}},"proxmoxve:index/getNode:getNode":{"description":"Retrieves information about node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst node = proxmoxve.getNode({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nnode = proxmoxve.get_node()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var node = ProxmoxVE.GetNode.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.GetNode(ctx, \u0026proxmoxve.GetNodeArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetNodeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var node = ProxmoxveFunctions.getNode(GetNodeArgs.builder()\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n node:\n fn::invoke:\n function: proxmoxve:getNode\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNode.\n","properties":{"nodeName":{"type":"string","description":"The node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getNode.\n","properties":{"cpuCount":{"description":"The CPU count on the node.\n","type":"integer"},"cpuModel":{"description":"The CPU model on the node.\n","type":"string"},"cpuSockets":{"description":"The CPU utilization on the node.\n","type":"integer"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"memoryAvailable":{"description":"The memory available on the node.\n","type":"integer"},"memoryTotal":{"description":"The total memory on the node.\n","type":"integer"},"memoryUsed":{"description":"The memory used on the node.\n","type":"integer"},"nodeName":{"type":"string"},"uptime":{"description":"The uptime in seconds on the node.\n","type":"integer"}},"required":["cpuCount","cpuModel","cpuSockets","memoryAvailable","memoryTotal","memoryUsed","nodeName","uptime","id"],"type":"object"}},"proxmoxve:index/getVm2:getVm2":{"description":"!\u003e **DO NOT USE**\nThis is an experimental implementation of a Proxmox VM datasource using Plugin Framework.\n","inputs":{"description":"A collection of arguments for invoking getVm2.\n","properties":{"clone":{"$ref":"#/types/proxmoxve:index/getVm2Clone:getVm2Clone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:index/getVm2Cpu:getVm2Cpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description of the VM.\n"},"id":{"type":"integer","description":"The unique identifier of the VM in the Proxmox cluster.\n"},"name":{"type":"string","description":"The name of the VM.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"rng":{"$ref":"#/types/proxmoxve:index/getVm2Rng:getVm2Rng","description":"The RNG (Random Number Generator) configuration.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Whether the VM is a template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:index/getVm2Timeouts:getVm2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:index/getVm2Vga:getVm2Vga","description":"The VGA configuration.\n"}},"type":"object","required":["id","nodeName"]},"outputs":{"description":"A collection of values returned by getVm2.\n","properties":{"clone":{"$ref":"#/types/proxmoxve:index/getVm2Clone:getVm2Clone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:index/getVm2Cpu:getVm2Cpu","description":"The CPU configuration.\n"},"description":{"description":"The description of the VM.\n","type":"string"},"id":{"description":"The unique identifier of the VM in the Proxmox cluster.\n","type":"integer"},"name":{"description":"The name of the VM.\n","type":"string"},"nodeName":{"description":"The name of the node where the VM is provisioned.\n","type":"string"},"rng":{"$ref":"#/types/proxmoxve:index/getVm2Rng:getVm2Rng","description":"The RNG (Random Number Generator) configuration.\n"},"tags":{"description":"The tags assigned to the VM.\n","items":{"type":"string"},"type":"array"},"template":{"description":"Whether the VM is a template.\n","type":"boolean"},"timeouts":{"$ref":"#/types/proxmoxve:index/getVm2Timeouts:getVm2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:index/getVm2Vga:getVm2Vga","description":"The VGA configuration.\n"}},"required":["cpu","id","nodeName","rng","tags","vga"],"type":"object"}},"pulumi:providers:proxmoxve/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"type":"ref","$ref":"#/provider"}},"type":"pulumi:providers:proxmoxve/terraformConfig","required":["__self__"]},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}}}} \ No newline at end of file +{"name":"proxmoxve","displayName":"Proxmox Virtual Environment (Proxmox VE)","version":"7.12.0-alpha.1770476926+eb957559.dirty","description":"A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources.","keywords":["pulumi","proxmox","proxmoxve"],"homepage":"https://github.com/muhlba91/pulumi-proxmoxve","license":"Apache-2.0","attribution":"This Pulumi package is based on the [`proxmox` Terraform Provider](https://github.com/bpg/terraform-provider-proxmox).","repository":"https://github.com/muhlba91/pulumi-proxmoxve","logoUrl":"https://raw.githubusercontent.com/muhlba91/pulumi-proxmoxve/main/assets/proxmox-logo.png","pluginDownloadURL":"github://api.github.com/muhlba91/pulumi-proxmoxve","publisher":"Daniel Muehlbachler-Pietrzykowski","meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"language":{"csharp":{"packageReferences":{"Pulumi":"3.*"},"namespaces":{"proxmoxve":"ProxmoxVE"},"compatibility":"tfbridge20"},"go":{"importBasePath":"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve","generateResourceContainerTypes":true,"generateExtraInputTypes":true},"java":{"basePackage":"io.muehlbachler.pulumi","buildFiles":"","gradleNexusPublishPluginVersion":"","gradleTest":""},"nodejs":{"packageName":"@muhlba91/pulumi-proxmoxve","packageDescription":"A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources.","readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/bpg/terraform-provider-proxmox)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-proxmoxve` repo](https://github.com/muhlba91/pulumi-proxmoxve/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-proxmox` repo](https://github.com/bpg/terraform-provider-proxmox/issues).","dependencies":{"@pulumi/pulumi":"^3.0.0"},"devDependencies":{"@types/mime":"^2.0.0","@types/node":"^10.0.0"},"compatibility":"tfbridge20","disableUnionOutputTypes":true},"python":{"packageName":"pulumi_proxmoxve","requires":{"pulumi":"\u003e=3.0.0,\u003c4.0.0"},"readme":"\u003e This provider is a derived work of the [Terraform Provider](https://github.com/bpg/terraform-provider-proxmox)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-proxmoxve` repo](https://github.com/muhlba91/pulumi-proxmoxve/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-proxmox` repo](https://github.com/bpg/terraform-provider-proxmox/issues).","compatibility":"tfbridge20","respectSchemaVersion":true,"pyproject":{"enabled":true}}},"config":{"variables":{"apiToken":{"type":"string","description":"The API token for the Proxmox VE API.","secret":true},"authTicket":{"type":"string","description":"The pre-authenticated Ticket for the Proxmox VE API.","secret":true},"csrfPreventionToken":{"type":"string","description":"The pre-authenticated CSRF Prevention Token for the Proxmox VE API.","secret":true},"endpoint":{"type":"string","description":"The endpoint for the Proxmox VE API."},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step."},"minTls":{"type":"string","description":"The minimum required TLS version for API calls.Supported values: `1.0|1.1|1.2|1.3`. Defaults to `1.3`."},"otp":{"type":"string","description":"The one-time password for the Proxmox VE API.","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`otp`\" pulumi-lang-dotnet=\"`Otp`\" pulumi-lang-go=\"`otp`\" pulumi-lang-python=\"`otp`\" pulumi-lang-yaml=\"`otp`\" pulumi-lang-java=\"`otp`\"\u003e`otp`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e attribute instead."},"password":{"type":"string","description":"The password for the Proxmox VE API.","secret":true},"randomVmIdEnd":{"type":"integer","description":"The ending number for random VM / Container IDs."},"randomVmIdStart":{"type":"integer","description":"The starting number for random VM / Container IDs."},"randomVmIds":{"type":"boolean","description":"Whether to generate random VM / Container IDs."},"ssh":{"$ref":"#/types/proxmoxve:config/ssh:ssh","description":"The SSH configuration for the Proxmox nodes."},"tmpDir":{"type":"string","description":"The alternative temporary directory."},"username":{"type":"string","description":"The username for the Proxmox VE API."}}},"types":{"proxmoxve:Acme/CertificateDomain:CertificateDomain":{"properties":{"alias":{"type":"string","description":"An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records.\n"},"domain":{"type":"string","description":"The domain name to include in the certificate.\n"},"plugin":{"type":"string","description":"The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used.\n"}},"type":"object","required":["domain"]},"proxmoxve:Acme/getAccountAccount:getAccountAccount":{"properties":{"contacts":{"type":"array","items":{"type":"string"},"description":"An array of contact email addresses.\n"},"createdAt":{"type":"string","description":"The timestamp of the account creation.\n"},"status":{"type":"string","description":"The status of the account. Can be one of \u003cspan pulumi-lang-nodejs=\"`valid`\" pulumi-lang-dotnet=\"`Valid`\" pulumi-lang-go=\"`valid`\" pulumi-lang-python=\"`valid`\" pulumi-lang-yaml=\"`valid`\" pulumi-lang-java=\"`valid`\"\u003e`valid`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`deactivated`\" pulumi-lang-dotnet=\"`Deactivated`\" pulumi-lang-go=\"`deactivated`\" pulumi-lang-python=\"`deactivated`\" pulumi-lang-yaml=\"`deactivated`\" pulumi-lang-java=\"`deactivated`\"\u003e`deactivated`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`revoked`\" pulumi-lang-dotnet=\"`Revoked`\" pulumi-lang-go=\"`revoked`\" pulumi-lang-python=\"`revoked`\" pulumi-lang-yaml=\"`revoked`\" pulumi-lang-java=\"`revoked`\"\u003e`revoked`\u003c/span\u003e.\n"}},"type":"object","required":["contacts","createdAt","status"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Acme/getPluginsPlugin:getPluginsPlugin":{"properties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"type":{"type":"string","description":"ACME challenge type (dns, standalone).\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"type":"object","required":["api","data","digest","plugin","type","validationDelay"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:CT/ContainerClone:ContainerClone":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The name of the source node (leave blank, if\nequal to the \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e argument).\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The identifier for the source container.\n","willReplaceOnChanges":true}},"type":"object","required":["vmId"]},"proxmoxve:CT/ContainerConsole:ContainerConsole":{"properties":{"enabled":{"type":"boolean","description":"Whether to enable the console device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"ttyCount":{"type":"integer","description":"The number of available TTY (defaults to \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The console mode (defaults to \u003cspan pulumi-lang-nodejs=\"`tty`\" pulumi-lang-dotnet=\"`Tty`\" pulumi-lang-go=\"`tty`\" pulumi-lang-python=\"`tty`\" pulumi-lang-yaml=\"`tty`\" pulumi-lang-java=\"`tty`\"\u003e`tty`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:CT/ContainerCpu:ContainerCpu":{"properties":{"architecture":{"type":"string","description":"The CPU architecture (defaults to \u003cspan pulumi-lang-nodejs=\"`amd64`\" pulumi-lang-dotnet=\"`Amd64`\" pulumi-lang-go=\"`amd64`\" pulumi-lang-python=\"`amd64`\" pulumi-lang-yaml=\"`amd64`\" pulumi-lang-java=\"`amd64`\"\u003e`amd64`\u003c/span\u003e).\n"},"cores":{"type":"integer","description":"The number of CPU cores (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"units":{"type":"integer","description":"The CPU units (defaults to \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough":{"properties":{"denyWrite":{"type":"boolean","description":"Deny the container to write to the device (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"gid":{"type":"integer","description":"Group ID to be assigned to the device node.\n"},"mode":{"type":"string","description":"Access mode to be set on the device node. Must be a\n4-digit octal number.\n"},"path":{"type":"string","description":"Device to pass through to the container (e.g. `/dev/sda`).\n"},"uid":{"type":"integer","description":"User ID to be assigned to the device node.\n"}},"type":"object","required":["path"]},"proxmoxve:CT/ContainerDisk:ContainerDisk":{"properties":{"acl":{"type":"boolean","description":"Explicitly enable or disable ACL support\n"},"datastoreId":{"type":"string","description":"The identifier for the datastore to create the\ndisk in (defaults to \u003cspan pulumi-lang-nodejs=\"`local`\" pulumi-lang-dotnet=\"`Local`\" pulumi-lang-go=\"`local`\" pulumi-lang-python=\"`local`\" pulumi-lang-yaml=\"`local`\" pulumi-lang-java=\"`local`\"\u003e`local`\u003c/span\u003e).\n","willReplaceOnChanges":true},"mountOptions":{"type":"array","items":{"type":"string"},"description":"List of extra mount options.\n"},"pathInDatastore":{"type":"string","description":"The in-datastore path to the disk image.\nUse this attribute for cross-resource references.\n"},"quota":{"type":"boolean","description":"Enable user quotas for the container rootfs\n"},"replicate":{"type":"boolean","description":"Will include this volume to a storage replica job\n"},"size":{"type":"integer","description":"The size of the root filesystem in gigabytes (defaults\nto \u003cspan pulumi-lang-nodejs=\"`4`\" pulumi-lang-dotnet=\"`4`\" pulumi-lang-go=\"`4`\" pulumi-lang-python=\"`4`\" pulumi-lang-yaml=\"`4`\" pulumi-lang-java=\"`4`\"\u003e`4`\u003c/span\u003e). When set to 0 a directory or zfs/btrfs subvolume will be created.\nRequires \u003cspan pulumi-lang-nodejs=\"`datastoreId`\" pulumi-lang-dotnet=\"`DatastoreId`\" pulumi-lang-go=\"`datastoreId`\" pulumi-lang-python=\"`datastore_id`\" pulumi-lang-yaml=\"`datastoreId`\" pulumi-lang-java=\"`datastoreId`\"\u003e`datastore_id`\u003c/span\u003e to be set.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["pathInDatastore"]}}},"proxmoxve:CT/ContainerFeatures:ContainerFeatures":{"properties":{"fuse":{"type":"boolean","description":"Whether the container supports FUSE mounts (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"keyctl":{"type":"boolean","description":"Whether the container supports `keyctl()` system call (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"mounts":{"type":"array","items":{"type":"string"},"description":"List of allowed mount types (\u003cspan pulumi-lang-nodejs=\"`cifs`\" pulumi-lang-dotnet=\"`Cifs`\" pulumi-lang-go=\"`cifs`\" pulumi-lang-python=\"`cifs`\" pulumi-lang-yaml=\"`cifs`\" pulumi-lang-java=\"`cifs`\"\u003e`cifs`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`nfs`\" pulumi-lang-dotnet=\"`Nfs`\" pulumi-lang-go=\"`nfs`\" pulumi-lang-python=\"`nfs`\" pulumi-lang-yaml=\"`nfs`\" pulumi-lang-java=\"`nfs`\"\u003e`nfs`\u003c/span\u003e)\n"},"nesting":{"type":"boolean","description":"Whether the container is nested (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"}},"type":"object"},"proxmoxve:CT/ContainerInitialization:ContainerInitialization":{"properties":{"dns":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationDns:ContainerInitializationDns","description":"The DNS configuration.\n"},"hostname":{"type":"string","description":"The hostname.\n"},"ipConfigs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationIpConfig:ContainerInitializationIpConfig"},"description":"The IP configuration (one block per network\ndevice).\n"},"userAccount":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationUserAccount:ContainerInitializationUserAccount","description":"The user account configuration.\n","willReplaceOnChanges":true}},"type":"object"},"proxmoxve:CT/ContainerInitializationDns:ContainerInitializationDns":{"properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"server":{"type":"string","description":"The DNS server.\nThe \u003cspan pulumi-lang-nodejs=\"`server`\" pulumi-lang-dotnet=\"`Server`\" pulumi-lang-go=\"`server`\" pulumi-lang-python=\"`server`\" pulumi-lang-yaml=\"`server`\" pulumi-lang-java=\"`server`\"\u003e`server`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use\nthe \u003cspan pulumi-lang-nodejs=\"`servers`\" pulumi-lang-dotnet=\"`Servers`\" pulumi-lang-go=\"`servers`\" pulumi-lang-python=\"`servers`\" pulumi-lang-yaml=\"`servers`\" pulumi-lang-java=\"`servers`\"\u003e`servers`\u003c/span\u003e attribute instead.\n","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`server`\" pulumi-lang-dotnet=\"`Server`\" pulumi-lang-go=\"`server`\" pulumi-lang-python=\"`server`\" pulumi-lang-yaml=\"`server`\" pulumi-lang-java=\"`server`\"\u003e`server`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`servers`\" pulumi-lang-dotnet=\"`Servers`\" pulumi-lang-go=\"`servers`\" pulumi-lang-python=\"`servers`\" pulumi-lang-yaml=\"`servers`\" pulumi-lang-java=\"`servers`\"\u003e`servers`\u003c/span\u003e attribute instead."},"servers":{"type":"array","items":{"type":"string"},"description":"The list of DNS servers.\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationIpConfig:ContainerInitializationIpConfig":{"properties":{"ipv4":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationIpConfigIpv4:ContainerInitializationIpConfigIpv4","description":"The IPv4 configuration.\n"},"ipv6":{"$ref":"#/types/proxmoxve:CT/ContainerInitializationIpConfigIpv6:ContainerInitializationIpConfigIpv6","description":"The IPv6 configuration.\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationIpConfigIpv4:ContainerInitializationIpConfigIpv4":{"properties":{"address":{"type":"string","description":"The IPv4 address in CIDR notation\n(e.g. 192.168.2.2/24). Alternatively, set this to \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for\nautodiscovery.\n"},"gateway":{"type":"string","description":"The IPv4 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e is used as the address).\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationIpConfigIpv6:ContainerInitializationIpConfigIpv6":{"properties":{"address":{"type":"string","description":"The IPv6 address in CIDR notation\n(e.g. fd1c::7334/64). Alternatively, set this\nto \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for DHCPv6, or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e for SLAAC.\n"},"gateway":{"type":"string","description":"The IPv6 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e are used as the address).\n"}},"type":"object"},"proxmoxve:CT/ContainerInitializationUserAccount:ContainerInitializationUserAccount":{"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The SSH keys for the root account.\n","willReplaceOnChanges":true},"password":{"type":"string","description":"The password for the root account.\n","secret":true,"willReplaceOnChanges":true}},"type":"object"},"proxmoxve:CT/ContainerMemory:ContainerMemory":{"properties":{"dedicated":{"type":"integer","description":"The dedicated memory in megabytes (defaults\nto \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e).\n"},"swap":{"type":"integer","description":"The swap size in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:CT/ContainerMountPoint:ContainerMountPoint":{"properties":{"acl":{"type":"boolean","description":"Explicitly enable or disable ACL support.\n"},"backup":{"type":"boolean","description":"Whether to include the mount point in backups (only\nused for volume mount points, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"mountOptions":{"type":"array","items":{"type":"string"},"description":"List of extra mount options.\n"},"path":{"type":"string","description":"Path to the mount point as seen from inside the\ncontainer.\n"},"pathInDatastore":{"type":"string","description":"The in-datastore path to the mount point volume.\nUse this attribute for cross-resource references instead of \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\"\u003e`volume`\u003c/span\u003e.\n"},"quota":{"type":"boolean","description":"Enable user quotas inside the container (not supported\nwith ZFS subvolumes).\n"},"readOnly":{"type":"boolean","description":"Read-only mount point.\n"},"replicate":{"type":"boolean","description":"Will include this volume to a storage replica job.\n"},"shared":{"type":"boolean","description":"Mark this non-volume mount point as available on all\nnodes.\n"},"size":{"type":"string","description":"Volume size (only for volume mount points).\nCan be specified with a unit suffix (e.g. `10G`).\n","willReplaceOnChanges":true},"volume":{"type":"string","description":"Volume, device or directory to mount into the\ncontainer.\n","willReplaceOnChanges":true}},"type":"object","required":["path","volume"],"language":{"nodejs":{"requiredOutputs":["path","pathInDatastore","volume"]}}},"proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface":{"properties":{"bridge":{"type":"string","description":"The name of the network bridge (defaults\nto \u003cspan pulumi-lang-nodejs=\"`vmbr0`\" pulumi-lang-dotnet=\"`Vmbr0`\" pulumi-lang-go=\"`vmbr0`\" pulumi-lang-python=\"`vmbr0`\" pulumi-lang-yaml=\"`vmbr0`\" pulumi-lang-java=\"`vmbr0`\"\u003e`vmbr0`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether to enable the network device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"firewall":{"type":"boolean","description":"Whether this interface's firewall rules should be\nused (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"macAddress":{"type":"string","description":"The MAC address.\n"},"mtu":{"type":"integer","description":"Maximum transfer unit of the interface. Cannot be\nlarger than the bridge's MTU.\n"},"name":{"type":"string","description":"The network interface name.\n"},"rateLimit":{"type":"number","description":"The rate limit in megabytes per second.\n"},"vlanId":{"type":"integer","description":"The VLAN identifier.\n"}},"type":"object","required":["name"],"language":{"nodejs":{"requiredOutputs":["macAddress","name"]}}},"proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem":{"properties":{"templateFileId":{"type":"string","description":"The identifier for an OS template file.\nThe ID format is `\u003cdatastore_id\u003e:\u003ccontent_type\u003e/\u003cfile_name\u003e`, for example `local:iso/jammy-server-cloudimg-amd64.tar.gz`.\nCan be also taken from \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource, or from the output of `pvesm list \u003cstorage\u003e`.\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The type (defaults to \u003cspan pulumi-lang-nodejs=\"`unmanaged`\" pulumi-lang-dotnet=\"`Unmanaged`\" pulumi-lang-go=\"`unmanaged`\" pulumi-lang-python=\"`unmanaged`\" pulumi-lang-yaml=\"`unmanaged`\" pulumi-lang-java=\"`unmanaged`\"\u003e`unmanaged`\u003c/span\u003e).\n"}},"type":"object","required":["templateFileId"]},"proxmoxve:CT/ContainerStartup:ContainerStartup":{"properties":{"downDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next container is shut down.\n"},"order":{"type":"integer","description":"A non-negative number defining the general startup\norder.\n"},"upDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next container is started.\n"}},"type":"object"},"proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp":{"properties":{"ipv4":{"type":"boolean","description":"Wait for at least one IPv4 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"ipv6":{"type":"boolean","description":"Wait for at least one IPv6 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nWhen \u003cspan pulumi-lang-nodejs=\"`waitForIp`\" pulumi-lang-dotnet=\"`WaitForIp`\" pulumi-lang-go=\"`waitForIp`\" pulumi-lang-python=\"`wait_for_ip`\" pulumi-lang-yaml=\"`waitForIp`\" pulumi-lang-java=\"`waitForIp`\"\u003e`wait_for_ip`\u003c/span\u003e is not specified or both \u003cspan pulumi-lang-nodejs=\"`ipv4`\" pulumi-lang-dotnet=\"`Ipv4`\" pulumi-lang-go=\"`ipv4`\" pulumi-lang-python=\"`ipv4`\" pulumi-lang-yaml=\"`ipv4`\" pulumi-lang-java=\"`ipv4`\"\u003e`ipv4`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ipv6`\" pulumi-lang-dotnet=\"`Ipv6`\" pulumi-lang-go=\"`ipv6`\" pulumi-lang-python=\"`ipv6`\" pulumi-lang-yaml=\"`ipv6`\" pulumi-lang-java=\"`ipv6`\"\u003e`ipv6`\u003c/span\u003e are \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, the provider waits for any valid global unicast address (IPv4 or IPv6). In dual-stack networks where DHCPv6 responds faster, this may result in only IPv6 addresses being available. Set `ipv4 = true` to ensure IPv4 address availability.\n"}},"type":"object"},"proxmoxve:Cluster/OptionsNextId:OptionsNextId":{"properties":{"lower":{"type":"integer","description":"The minimum number for the next free VM ID. Must be higher or equal to 100\n"},"upper":{"type":"integer","description":"The maximum number for the next free VM ID. Must be less or equal to 999999999\n"}},"type":"object"},"proxmoxve:Cluster/OptionsNotify:OptionsNotify":{"properties":{"haFencingMode":{"type":"string","description":"Cluster-wide notification settings for the HA fencing mode. Must be \u003cspan pulumi-lang-nodejs=\"`always`\" pulumi-lang-dotnet=\"`Always`\" pulumi-lang-go=\"`always`\" pulumi-lang-python=\"`always`\" pulumi-lang-yaml=\"`always`\" pulumi-lang-java=\"`always`\"\u003e`always`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`never`\" pulumi-lang-dotnet=\"`Never`\" pulumi-lang-go=\"`never`\" pulumi-lang-python=\"`never`\" pulumi-lang-yaml=\"`never`\" pulumi-lang-java=\"`never`\"\u003e`never`\u003c/span\u003e.\n"},"haFencingTarget":{"type":"string","description":"Cluster-wide notification settings for the HA fencing target.\n"},"packageUpdates":{"type":"string","description":"Cluster-wide notification settings for package updates. Must be \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`always`\" pulumi-lang-dotnet=\"`Always`\" pulumi-lang-go=\"`always`\" pulumi-lang-python=\"`always`\" pulumi-lang-yaml=\"`always`\" pulumi-lang-java=\"`always`\"\u003e`always`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`never`\" pulumi-lang-dotnet=\"`Never`\" pulumi-lang-go=\"`never`\" pulumi-lang-python=\"`never`\" pulumi-lang-yaml=\"`never`\" pulumi-lang-java=\"`never`\"\u003e`never`\u003c/span\u003e.\n"},"packageUpdatesTarget":{"type":"string","description":"Cluster-wide notification settings for the package updates target.\n"},"replication":{"type":"string","description":"Cluster-wide notification settings for replication. Must be \u003cspan pulumi-lang-nodejs=\"`always`\" pulumi-lang-dotnet=\"`Always`\" pulumi-lang-go=\"`always`\" pulumi-lang-python=\"`always`\" pulumi-lang-yaml=\"`always`\" pulumi-lang-java=\"`always`\"\u003e`always`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`never`\" pulumi-lang-dotnet=\"`Never`\" pulumi-lang-go=\"`never`\" pulumi-lang-python=\"`never`\" pulumi-lang-yaml=\"`never`\" pulumi-lang-java=\"`never`\"\u003e`never`\u003c/span\u003e.\n"},"replicationTarget":{"type":"string","description":"Cluster-wide notification settings for the replication target.\n"}},"type":"object"},"proxmoxve:Hardware/getMappingsCheck:getMappingsCheck":{"properties":{"mappingId":{"type":"string","description":"The corresponding hardware mapping ID of the node check diagnostic entry.\n"},"message":{"type":"string","description":"The message of the node check diagnostic entry.\n"},"severity":{"type":"string","description":"The severity of the node check diagnostic entry.\n"}},"type":"object","required":["mappingId","message","severity"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Hardware/mapping/DirMap:DirMap":{"properties":{"node":{"type":"string","description":"The node this mapping applies to.\n"},"path":{"type":"string","description":"The path of the map. For directory mappings the path is required and refers to the POSIX path of the directory as visible from the node.\n"}},"type":"object","required":["node","path"]},"proxmoxve:Hardware/mapping/PciMap:PciMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped PCI device.\n"},"id":{"type":"string","description":"The ID of the map.\n"},"iommuGroup":{"type":"integer","description":"The IOMMU group of the map. Not mandatory for the Proxmox VE API call, but causes a PCI hardware mapping to be incomplete when not set\n"},"node":{"type":"string","description":"The node name of the map.\n"},"path":{"type":"string","description":"The path of the map.\n"},"subsystemId":{"type":"string","description":"The subsystem ID group of the map. Not mandatory for the Proxmox VE API call, but causes a PCI hardware mapping to be incomplete when not set\n"}},"type":"object","required":["id","node","path"]},"proxmoxve:Hardware/mapping/UsbMap:UsbMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped USB device.\n"},"id":{"type":"string","description":"The ID of the map.\n"},"node":{"type":"string","description":"The node name of the map.\n"},"path":{"type":"string","description":"The path of the map. For hardware mappings of type USB the path is optional and indicates that the device is mapped through the device ID instead of ports.\n"}},"type":"object","required":["id","node"]},"proxmoxve:Hardware/mapping/getDirMap:getDirMap":{"properties":{"node":{"type":"string","description":"The node name attribute of the map.\n"},"path":{"type":"string","description":"The path attribute of the map.\n"}},"type":"object","required":["node","path"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Hardware/mapping/getPciMap:getPciMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped PCI device.\n"},"id":{"type":"string","description":"The ID attribute of the map.\n"},"iommuGroup":{"type":"integer","description":"The IOMMU group attribute of the map.\n"},"node":{"type":"string","description":"The node name attribute of the map.\n"},"path":{"type":"string","description":"The path attribute of the map.\n"},"subsystemId":{"type":"string","description":"The subsystem ID attribute of the map.Not mandatory for the Proxmox VE API call, but causes a PCI hardware mapping to be incomplete when not set.\n"}},"type":"object","required":["comment","id","iommuGroup","node","path","subsystemId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Hardware/mapping/getUsbMap:getUsbMap":{"properties":{"comment":{"type":"string","description":"The comment of the mapped USB device.\n"},"id":{"type":"string","description":"The ID attribute of the map.\n"},"node":{"type":"string","description":"The node name attribute of the map.\n"},"path":{"type":"string","description":"The path attribute of the map.\n"}},"type":"object","required":["comment","id","node","path"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr":{"properties":{"comment":{"type":"string","description":"Arbitrary string annotation.\n","willReplaceOnChanges":true},"name":{"type":"string","description":"Network/IP specification in CIDR format.\n","willReplaceOnChanges":true},"nomatch":{"type":"boolean","description":"Entries marked as \u003cspan pulumi-lang-nodejs=\"`nomatch`\" pulumi-lang-dotnet=\"`Nomatch`\" pulumi-lang-go=\"`nomatch`\" pulumi-lang-python=\"`nomatch`\" pulumi-lang-yaml=\"`nomatch`\" pulumi-lang-java=\"`nomatch`\"\u003e`nomatch`\u003c/span\u003e are skipped as if those\nwere not added to the set.\n","willReplaceOnChanges":true}},"type":"object","required":["name"]},"proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit":{"properties":{"burst":{"type":"integer","description":"Initial burst of packages which will always get\nlogged before the rate is applied (defaults to \u003cspan pulumi-lang-nodejs=\"`5`\" pulumi-lang-dotnet=\"`5`\" pulumi-lang-go=\"`5`\" pulumi-lang-python=\"`5`\" pulumi-lang-yaml=\"`5`\" pulumi-lang-java=\"`5`\"\u003e`5`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Enable or disable the log rate limit.\n"},"rate":{"type":"string","description":"Frequency with which the burst bucket gets refilled\n(defaults to `1/second`).\n"}},"type":"object"},"proxmoxve:Network/FirewallRulesRule:FirewallRulesRule":{"properties":{"action":{"type":"string","description":"Rule action (`ACCEPT`, `DROP`, `REJECT`).\n"},"comment":{"type":"string","description":"Rule comment.\n"},"dest":{"type":"string","description":"Restrict packet destination address. This can\nrefer to a single IP address, an IP set ('+ipsetname') or an IP\nalias definition. You can also specify an address range\nlike `20.34.101.207-201.3.9.99`, or a list of IP addresses and\nnetworks (entries are separated by comma). Please do not mix IPv4\nand IPv6 addresses inside such lists.\n"},"dport":{"type":"string","description":"Restrict TCP/UDP destination port. You can use\nservice names or simple numbers (0-65535), as defined\nin `/etc/services`. Port ranges can be specified with '\\d+:\\d+', for\nexample `80:85`, and you can use comma separated list to match\nseveral ports or ranges.\n"},"enabled":{"type":"boolean","description":"Enable this rule. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"iface":{"type":"string","description":"Network interface name. You have to use network\nconfiguration key names for VMs and containers ('net\\d+'). Host\nrelated rules can use arbitrary strings.\n"},"log":{"type":"string","description":"Log level for this rule (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macro":{"type":"string","description":"Macro name. Use predefined standard macro\nfrom \u003chttps://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions\u003e\n"},"pos":{"type":"integer","description":"Position of the rule in the list.\n"},"proto":{"type":"string","description":"Restrict packet protocol. You can use protocol\nnames as defined in '/etc/protocols'.\n"},"securityGroup":{"type":"string","description":"Security group name.\n"},"source":{"type":"string","description":"Restrict packet source address. This can refer\nto a single IP address, an IP set ('+ipsetname') or an IP alias\ndefinition. You can also specify an address range\nlike `20.34.101.207-201.3.9.99`, or a list of IP addresses and\nnetworks (entries are separated by comma). Please do not mix IPv4\nand IPv6 addresses inside such lists.\n"},"sport":{"type":"string","description":"Restrict TCP/UDP source port. You can use\nservice names or simple numbers (0-65535), as defined\nin `/etc/services`. Port ranges can be specified with '\\d+:\\d+', for\nexample `80:85`, and you can use comma separated list to match\nseveral ports or ranges.\n- a security group insertion block, which includes the following arguments:\n"},"type":{"type":"string","description":"Rule type (\u003cspan pulumi-lang-nodejs=\"`in`\" pulumi-lang-dotnet=\"`In`\" pulumi-lang-go=\"`in`\" pulumi-lang-python=\"`in`\" pulumi-lang-yaml=\"`in`\" pulumi-lang-java=\"`in`\"\u003e`in`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`out`\" pulumi-lang-dotnet=\"`Out`\" pulumi-lang-go=\"`out`\" pulumi-lang-python=\"`out`\" pulumi-lang-yaml=\"`out`\" pulumi-lang-java=\"`out`\"\u003e`out`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`forward`\" pulumi-lang-dotnet=\"`Forward`\" pulumi-lang-go=\"`forward`\" pulumi-lang-python=\"`forward`\" pulumi-lang-yaml=\"`forward`\" pulumi-lang-java=\"`forward`\"\u003e`forward`\u003c/span\u003e).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["pos"]}}},"proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule":{"properties":{"action":{"type":"string","description":"Rule action (`ACCEPT`, `DROP`, `REJECT`).\n"},"comment":{"type":"string","description":"Rule comment.\n"},"dest":{"type":"string","description":"Restrict packet destination address. This can refer to\na single IP address, an IP set ('+ipsetname') or an IP alias\ndefinition. You can also specify an address range like\n`20.34.101.207-201.3.9.99`, or a list of IP addresses and networks\n(entries are separated by comma). Please do not mix IPv4 and IPv6\naddresses inside such lists.\n"},"dport":{"type":"string","description":"Restrict TCP/UDP destination port. You can use\nservice names or simple numbers (0-65535), as defined in '/etc/\nservices'. Port ranges can be specified with '\\d+:\\d+', for example\n`80:85`, and you can use comma separated list to match several ports or\nranges.\n"},"enabled":{"type":"boolean","description":"Enable this rule. Defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e.\n"},"iface":{"type":"string","description":"Network interface name. You have to use network\nconfiguration key names for VMs and containers ('net\\d+'). Host related\nrules can use arbitrary strings.\n"},"log":{"type":"string","description":"Log level for this rule (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macro":{"type":"string","description":"Macro name. Use predefined standard macro\nfrom \u003chttps://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions\u003e\n"},"pos":{"type":"integer","description":"Position of the rule in the list.\n"},"proto":{"type":"string","description":"Restrict packet protocol. You can use protocol names\nas defined in '/etc/protocols'.\n"},"securityGroup":{"type":"string","description":"Security group name\n"},"source":{"type":"string","description":"Restrict packet source address. This can refer\nto a single IP address, an IP set ('+ipsetname') or an IP alias\ndefinition. You can also specify an address range like\n`20.34.101.207-201.3.9.99`, or a list of IP addresses and networks (\nentries are separated by comma). Please do not mix IPv4 and IPv6\naddresses inside such lists.\n"},"sport":{"type":"string","description":"Restrict TCP/UDP source port. You can use\nservice names or simple numbers (0-65535), as defined in '/etc/\nservices'. Port ranges can be specified with '\\d+:\\d+', for example\n`80:85`, and you can use comma separated list to match several ports or\nranges.\n"},"type":{"type":"string","description":"Rule type (\u003cspan pulumi-lang-nodejs=\"`in`\" pulumi-lang-dotnet=\"`In`\" pulumi-lang-go=\"`in`\" pulumi-lang-python=\"`in`\" pulumi-lang-yaml=\"`in`\" pulumi-lang-java=\"`in`\"\u003e`in`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`out`\" pulumi-lang-dotnet=\"`Out`\" pulumi-lang-go=\"`out`\" pulumi-lang-python=\"`out`\" pulumi-lang-yaml=\"`out`\" pulumi-lang-java=\"`out`\"\u003e`out`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`forward`\" pulumi-lang-dotnet=\"`Forward`\" pulumi-lang-go=\"`forward`\" pulumi-lang-python=\"`forward`\" pulumi-lang-yaml=\"`forward`\" pulumi-lang-java=\"`forward`\"\u003e`forward`\u003c/span\u003e).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["pos"]}}},"proxmoxve:Network/getHostsEntry:getHostsEntry":{"properties":{"address":{"type":"string","description":"The address\n"},"hostnames":{"type":"array","items":{"type":"string"},"description":"The hostnames associated with each of the IP addresses.\n"}},"type":"object","required":["address","hostnames"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Permission/GroupAcl:GroupAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","roleId"]},"proxmoxve:Permission/PoolMember:PoolMember":{"properties":{"datastoreId":{"type":"string","description":"The datastore identifier.\n"},"id":{"type":"string","description":"The member identifier.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"type":{"type":"string","description":"The member type.\n"},"vmId":{"type":"integer","description":"The virtual machine identifier.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["datastoreId","id","nodeName","type","vmId"]}}},"proxmoxve:Permission/UserAcl:UserAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","roleId"]},"proxmoxve:Permission/getGroupAcl:getGroupAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","propagate","roleId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Permission/getPoolMember:getPoolMember":{"properties":{"datastoreId":{"type":"string","description":"The datastore identifier.\n"},"id":{"type":"string","description":"The member identifier.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"type":{"type":"string","description":"The member type.\n"},"vmId":{"type":"integer","description":"The virtual machine identifier.\n"}},"type":"object","required":["datastoreId","id","nodeName","type","vmId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Permission/getUserAcl:getUserAcl":{"properties":{"path":{"type":"string","description":"The path.\n"},"propagate":{"type":"boolean","description":"Whether to propagate to child paths.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["path","propagate","roleId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange":{"properties":{"endAddress":{"type":"string","description":"End of the DHCP range.\n"},"startAddress":{"type":"string","description":"Start of the DHCP range.\n"}},"type":"object","required":["endAddress","startAddress"]},"proxmoxve:Sdn/getSubnetDhcpRange:getSubnetDhcpRange":{"properties":{"endAddress":{"type":"string","description":"End of the DHCP range.\n"},"startAddress":{"type":"string","description":"Start of the DHCP range.\n"}},"type":"object","required":["endAddress","startAddress"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Sdn/getVnetsVnet:getVnetsVnet":{"properties":{"alias":{"type":"string"},"id":{"type":"string"},"isolatePorts":{"type":"boolean"},"tag":{"type":"integer"},"vlanAware":{"type":"boolean"},"zone":{"type":"string"}},"type":"object","required":["alias","id","isolatePorts","tag","vlanAware","zone"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Sdn/getZonesZone:getZonesZone":{"properties":{"advertiseSubnets":{"type":"boolean"},"bridge":{"type":"string"},"controller":{"type":"string"},"dhcp":{"type":"string"},"disableArpNdSuppression":{"type":"boolean"},"dns":{"type":"string"},"dnsZone":{"type":"string"},"exitNodes":{"type":"array","items":{"type":"string"}},"exitNodesLocalRouting":{"type":"boolean"},"id":{"type":"string"},"ipam":{"type":"string"},"mtu":{"type":"integer"},"nodes":{"type":"array","items":{"type":"string"}},"peers":{"type":"array","items":{"type":"string"}},"pending":{"type":"boolean"},"primaryExitNode":{"type":"string"},"reverseDns":{"type":"string"},"rtImport":{"type":"string"},"serviceVlan":{"type":"integer"},"serviceVlanProtocol":{"type":"string"},"state":{"type":"string"},"type":{"type":"string"},"vrfVxlan":{"type":"integer"}},"type":"object","required":["advertiseSubnets","bridge","controller","dhcp","disableArpNdSuppression","dns","dnsZone","exitNodes","exitNodesLocalRouting","id","ipam","mtu","nodes","peers","pending","primaryExitNode","reverseDns","rtImport","serviceVlan","serviceVlanProtocol","state","type","vrfVxlan"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:Storage/CIFSBackups:CIFSBackups":{"properties":{"keepAll":{"type":"boolean","description":"Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n"},"keepDaily":{"type":"integer","description":"The number of daily backups to keep. Older backups will be removed.\n"},"keepHourly":{"type":"integer","description":"The number of hourly backups to keep. Older backups will be removed.\n"},"keepLast":{"type":"integer","description":"Specifies the number of the most recent backups to keep, regardless of their age.\n"},"keepMonthly":{"type":"integer","description":"The number of monthly backups to keep. Older backups will be removed.\n"},"keepWeekly":{"type":"integer","description":"The number of weekly backups to keep. Older backups will be removed.\n"},"keepYearly":{"type":"integer","description":"The number of yearly backups to keep. Older backups will be removed.\n"},"maxProtectedBackups":{"type":"integer","description":"The maximum number of protected backups per guest. Use '-1' for unlimited.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["keepAll"]}}},"proxmoxve:Storage/DirectoryBackups:DirectoryBackups":{"properties":{"keepAll":{"type":"boolean","description":"Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n"},"keepDaily":{"type":"integer","description":"The number of daily backups to keep. Older backups will be removed.\n"},"keepHourly":{"type":"integer","description":"The number of hourly backups to keep. Older backups will be removed.\n"},"keepLast":{"type":"integer","description":"Specifies the number of the most recent backups to keep, regardless of their age.\n"},"keepMonthly":{"type":"integer","description":"The number of monthly backups to keep. Older backups will be removed.\n"},"keepWeekly":{"type":"integer","description":"The number of weekly backups to keep. Older backups will be removed.\n"},"keepYearly":{"type":"integer","description":"The number of yearly backups to keep. Older backups will be removed.\n"},"maxProtectedBackups":{"type":"integer","description":"The maximum number of protected backups per guest. Use '-1' for unlimited.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["keepAll"]}}},"proxmoxve:Storage/FileSourceFile:FileSourceFile":{"properties":{"changed":{"type":"boolean","description":"Whether the source file has changed since the last run\n","willReplaceOnChanges":true},"checksum":{"type":"string","description":"The SHA256 checksum of the source file.\n","willReplaceOnChanges":true},"fileName":{"type":"string","description":"The file name to use instead of the source file\nname. Useful when the source file does not have a valid file extension,\nfor example when the source file is a URL referencing a `.qcow2` image.\n","willReplaceOnChanges":true},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step for\nHTTPS sources (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"minTls":{"type":"string","description":"The minimum required TLS version for HTTPS\nsources. \"Supported values: `1.0|1.1|1.2|1.3` (defaults to `1.3`).\n","willReplaceOnChanges":true},"path":{"type":"string","description":"A path to a local file or a URL.\n","willReplaceOnChanges":true}},"type":"object","required":["path"]},"proxmoxve:Storage/FileSourceRaw:FileSourceRaw":{"properties":{"data":{"type":"string","description":"The raw data.\n","willReplaceOnChanges":true},"fileName":{"type":"string","description":"The file name.\n","willReplaceOnChanges":true},"resize":{"type":"integer","description":"The number of bytes to resize the file to.\n","willReplaceOnChanges":true}},"type":"object","required":["data","fileName"]},"proxmoxve:Storage/NFSBackups:NFSBackups":{"properties":{"keepAll":{"type":"boolean","description":"Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n"},"keepDaily":{"type":"integer","description":"The number of daily backups to keep. Older backups will be removed.\n"},"keepHourly":{"type":"integer","description":"The number of hourly backups to keep. Older backups will be removed.\n"},"keepLast":{"type":"integer","description":"Specifies the number of the most recent backups to keep, regardless of their age.\n"},"keepMonthly":{"type":"integer","description":"The number of monthly backups to keep. Older backups will be removed.\n"},"keepWeekly":{"type":"integer","description":"The number of weekly backups to keep. Older backups will be removed.\n"},"keepYearly":{"type":"integer","description":"The number of yearly backups to keep. Older backups will be removed.\n"},"maxProtectedBackups":{"type":"integer","description":"The maximum number of protected backups per guest. Use '-1' for unlimited.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["keepAll"]}}},"proxmoxve:Storage/PBSBackups:PBSBackups":{"properties":{"keepAll":{"type":"boolean","description":"Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n"},"keepDaily":{"type":"integer","description":"The number of daily backups to keep. Older backups will be removed.\n"},"keepHourly":{"type":"integer","description":"The number of hourly backups to keep. Older backups will be removed.\n"},"keepLast":{"type":"integer","description":"Specifies the number of the most recent backups to keep, regardless of their age.\n"},"keepMonthly":{"type":"integer","description":"The number of monthly backups to keep. Older backups will be removed.\n"},"keepWeekly":{"type":"integer","description":"The number of weekly backups to keep. Older backups will be removed.\n"},"keepYearly":{"type":"integer","description":"The number of yearly backups to keep. Older backups will be removed.\n"},"maxProtectedBackups":{"type":"integer","description":"The maximum number of protected backups per guest. Use '-1' for unlimited.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["keepAll"]}}},"proxmoxve:Storage/getDatastoresDatastore:getDatastoresDatastore":{"properties":{"active":{"type":"boolean","description":"Whether the store is active.\n"},"contentTypes":{"type":"array","items":{"type":"string"},"description":"Allowed store content types.\n"},"enabled":{"type":"boolean","description":"Whether the store is enabled.\n"},"id":{"type":"string","description":"The ID of the store.\n"},"nodeName":{"type":"string","description":"The name of the node the store is on.\n"},"shared":{"type":"boolean","description":"Shared flag from store configuration.\n"},"spaceAvailable":{"type":"integer","description":"Available store space in bytes.\n"},"spaceTotal":{"type":"integer","description":"Total store space in bytes.\n"},"spaceUsed":{"type":"integer","description":"Used store space in bytes.\n"},"spaceUsedFraction":{"type":"number","description":"Used fraction (used/total).\n"},"type":{"type":"string","description":"Store type.\n"}},"type":"object","required":["contentTypes","id","nodeName","type"]},"proxmoxve:Storage/getDatastoresFilters:getDatastoresFilters":{"properties":{"contentTypes":{"type":"array","items":{"type":"string"},"description":"Only list stores with the given content types.\n"},"id":{"type":"string","description":"Only list stores with the given ID.\n"},"target":{"type":"string","description":"If \u003cspan pulumi-lang-nodejs=\"`target`\" pulumi-lang-dotnet=\"`Target`\" pulumi-lang-go=\"`target`\" pulumi-lang-python=\"`target`\" pulumi-lang-yaml=\"`target`\" pulumi-lang-java=\"`target`\"\u003e`target`\u003c/span\u003e is different to \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e, then only lists shared stores which content is accessible on this node and the specified \u003cspan pulumi-lang-nodejs=\"`target`\" pulumi-lang-dotnet=\"`Target`\" pulumi-lang-go=\"`target`\" pulumi-lang-python=\"`target`\" pulumi-lang-yaml=\"`target`\" pulumi-lang-java=\"`target`\"\u003e`target`\u003c/span\u003e node.\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom":{"properties":{"fileId":{"type":"string","description":"The file ID of the CD-ROM, or `cdrom|none`. Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM empty. Use \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e to connect to the physical drive.\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone":{"properties":{"bandwidthLimit":{"type":"integer","description":"Clone bandwidth limit in MB/s.\n"},"full":{"type":"boolean","description":"Perform a full clone (true) or linked clone (false).\n"},"poolId":{"type":"string","description":"Pool to assign the cloned VM to.\n"},"retries":{"type":"integer","description":"Number of retries for clone operations.\n"},"snapshotName":{"type":"string","description":"Snapshot name to clone from.\n"},"sourceNodeName":{"type":"string","description":"Source node of the VM/template. Defaults to target node if unset.\n"},"sourceVmId":{"type":"integer","description":"Source VM/template ID to clone from.\n"},"targetDatastore":{"type":"string","description":"Target datastore for cloned disks.\n"},"targetFormat":{"type":"string","description":"Target disk format for clone (e.g., raw, qcow2).\n"}},"type":"object","required":["sourceVmId"],"language":{"nodejs":{"requiredOutputs":["full","retries","sourceVmId"]}}},"proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu":{"properties":{"affinity":{"type":"string","description":"The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"architecture":{"type":"string","description":"The CPU architecture `\u003caarch64 | x86_64\u003e` (defaults to the host). Setting \u003cspan pulumi-lang-nodejs=\"`architecture`\" pulumi-lang-dotnet=\"`Architecture`\" pulumi-lang-go=\"`architecture`\" pulumi-lang-python=\"`architecture`\" pulumi-lang-yaml=\"`architecture`\" pulumi-lang-java=\"`architecture`\"\u003e`architecture`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"cores":{"type":"integer","description":"The number of CPU cores per socket (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"flags":{"type":"array","items":{"type":"string"},"description":"Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: \u003cspan pulumi-lang-nodejs=\"`pcid`\" pulumi-lang-dotnet=\"`Pcid`\" pulumi-lang-go=\"`pcid`\" pulumi-lang-python=\"`pcid`\" pulumi-lang-yaml=\"`pcid`\" pulumi-lang-java=\"`pcid`\"\u003e`pcid`\u003c/span\u003e, `spec-ctrl`, \u003cspan pulumi-lang-nodejs=\"`ibpb`\" pulumi-lang-dotnet=\"`Ibpb`\" pulumi-lang-go=\"`ibpb`\" pulumi-lang-python=\"`ibpb`\" pulumi-lang-yaml=\"`ibpb`\" pulumi-lang-java=\"`ibpb`\"\u003e`ibpb`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ssbd`\" pulumi-lang-dotnet=\"`Ssbd`\" pulumi-lang-go=\"`ssbd`\" pulumi-lang-python=\"`ssbd`\" pulumi-lang-yaml=\"`ssbd`\" pulumi-lang-java=\"`ssbd`\"\u003e`ssbd`\u003c/span\u003e, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, \u003cspan pulumi-lang-nodejs=\"`pdpe1gb`\" pulumi-lang-dotnet=\"`Pdpe1gb`\" pulumi-lang-go=\"`pdpe1gb`\" pulumi-lang-python=\"`pdpe1gb`\" pulumi-lang-yaml=\"`pdpe1gb`\" pulumi-lang-java=\"`pdpe1gb`\"\u003e`pdpe1gb`\u003c/span\u003e, `md-clear`, `hv-tlbflush`, `hv-evmcs`, \u003cspan pulumi-lang-nodejs=\"`aes`\" pulumi-lang-dotnet=\"`Aes`\" pulumi-lang-go=\"`aes`\" pulumi-lang-python=\"`aes`\" pulumi-lang-yaml=\"`aes`\" pulumi-lang-java=\"`aes`\"\u003e`aes`\u003c/span\u003e.\n"},"hotplugged":{"type":"integer","description":"The number of hotplugged vCPUs (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"},"limit":{"type":"integer","description":"Limit of CPU usage (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e which means no limit).\n"},"numa":{"type":"boolean","description":"Enable NUMA (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"sockets":{"type":"integer","description":"The number of CPU sockets (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"type":{"type":"string","description":"Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to \u003cspan pulumi-lang-nodejs=\"`kvm64`\" pulumi-lang-dotnet=\"`Kvm64`\" pulumi-lang-go=\"`kvm64`\" pulumi-lang-python=\"`kvm64`\" pulumi-lang-yaml=\"`kvm64`\" pulumi-lang-java=\"`kvm64`\"\u003e`kvm64`\u003c/span\u003e). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information.\n"},"units":{"type":"integer","description":"CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs.\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete":{"properties":{"disks":{"type":"array","items":{"type":"string"},"description":"Disk slots to delete (e.g., scsi2).\n"},"networks":{"type":"array","items":{"type":"string"},"description":"Network slots to delete (e.g., net1).\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk":{"properties":{"aio":{"type":"string","description":"AIO mode (io_uring, native, threads).\n"},"backup":{"type":"boolean","description":"Include disk in backups.\n"},"cache":{"type":"string","description":"Cache mode.\n"},"datastoreId":{"type":"string","description":"Target datastore for new disks when file is not provided.\n"},"discard":{"type":"string","description":"Discard/trim behavior.\n"},"file":{"type":"string","description":"Existing volume reference (e.g., local-lvm:vm-100-disk-0).\n"},"format":{"type":"string","description":"Disk format (raw, qcow2, vmdk).\n"},"importFrom":{"type":"string","description":"Import source volume/file id.\n"},"iothread":{"type":"boolean","description":"Use IO thread.\n"},"media":{"type":"string","description":"Disk media (e.g., disk, cdrom).\n"},"replicate":{"type":"boolean","description":"Consider disk for replication.\n"},"serial":{"type":"string","description":"Disk serial number.\n"},"sizeGb":{"type":"integer","description":"Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set \u003cspan pulumi-lang-nodejs=\"`sizeGb`\" pulumi-lang-dotnet=\"`SizeGb`\" pulumi-lang-go=\"`sizeGb`\" pulumi-lang-python=\"`size_gb`\" pulumi-lang-yaml=\"`sizeGb`\" pulumi-lang-java=\"`sizeGb`\"\u003e`size_gb`\u003c/span\u003e to a value smaller than the current disk size will result in an error. Only disk expansion is allowed.\n"},"ssd":{"type":"boolean","description":"Mark disk as SSD.\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory":{"properties":{"balloon":{"type":"integer","description":"Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e disables the balloon driver entirely (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"},"hugepages":{"type":"string","description":"Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. \n\n**Options:**\n- \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e - Use 2 MiB hugepages\n- \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e - Use 1 GiB hugepages\n- \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e - Use any available hugepage size\n"},"keepHugepages":{"type":"boolean","description":"Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e keeps them allocated for faster VM startup (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"shares":{"type":"integer","description":"CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e).\n"},"size":{"type":"integer","description":"Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon \u003e 0), memory between \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e MiB).\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork":{"properties":{"bridge":{"type":"string","description":"Bridge name.\n"},"firewall":{"type":"boolean","description":"Enable firewall on this interface.\n"},"linkDown":{"type":"boolean","description":"Keep link down.\n"},"macAddress":{"type":"string","description":"MAC address (computed if omitted).\n"},"model":{"type":"string","description":"NIC model (e.g., virtio, e1000).\n"},"mtu":{"type":"integer","description":"Interface MTU.\n"},"queues":{"type":"integer","description":"Number of multiqueue NIC queues.\n"},"rateLimit":{"type":"number","description":"Rate limit (MB/s).\n"},"tag":{"type":"integer","description":"VLAN tag.\n"},"trunks":{"type":"array","items":{"type":"integer"},"description":"Trunk VLAN IDs.\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng":{"properties":{"maxBytes":{"type":"integer","description":"Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous).\n"},"period":{"type":"integer","description":"Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous).\n"},"source":{"type":"string","description":"The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga":{"properties":{"clipboard":{"type":"string","description":"Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e is available. Migration with VNC clipboard is not supported by Proxmox.\n"},"memory":{"type":"integer","description":"The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n"},"type":{"type":"string","description":"The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom":{"properties":{"fileId":{"type":"string","description":"The file ID of the CD-ROM, or `cdrom|none`. Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM empty. Use \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e to connect to the physical drive.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["fileId"]}}},"proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu":{"properties":{"affinity":{"type":"string","description":"The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"architecture":{"type":"string","description":"The CPU architecture `\u003caarch64 | x86_64\u003e` (defaults to the host). Setting \u003cspan pulumi-lang-nodejs=\"`architecture`\" pulumi-lang-dotnet=\"`Architecture`\" pulumi-lang-go=\"`architecture`\" pulumi-lang-python=\"`architecture`\" pulumi-lang-yaml=\"`architecture`\" pulumi-lang-java=\"`architecture`\"\u003e`architecture`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"cores":{"type":"integer","description":"The number of CPU cores per socket (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"flags":{"type":"array","items":{"type":"string"},"description":"Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: \u003cspan pulumi-lang-nodejs=\"`pcid`\" pulumi-lang-dotnet=\"`Pcid`\" pulumi-lang-go=\"`pcid`\" pulumi-lang-python=\"`pcid`\" pulumi-lang-yaml=\"`pcid`\" pulumi-lang-java=\"`pcid`\"\u003e`pcid`\u003c/span\u003e, `spec-ctrl`, \u003cspan pulumi-lang-nodejs=\"`ibpb`\" pulumi-lang-dotnet=\"`Ibpb`\" pulumi-lang-go=\"`ibpb`\" pulumi-lang-python=\"`ibpb`\" pulumi-lang-yaml=\"`ibpb`\" pulumi-lang-java=\"`ibpb`\"\u003e`ibpb`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ssbd`\" pulumi-lang-dotnet=\"`Ssbd`\" pulumi-lang-go=\"`ssbd`\" pulumi-lang-python=\"`ssbd`\" pulumi-lang-yaml=\"`ssbd`\" pulumi-lang-java=\"`ssbd`\"\u003e`ssbd`\u003c/span\u003e, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, \u003cspan pulumi-lang-nodejs=\"`pdpe1gb`\" pulumi-lang-dotnet=\"`Pdpe1gb`\" pulumi-lang-go=\"`pdpe1gb`\" pulumi-lang-python=\"`pdpe1gb`\" pulumi-lang-yaml=\"`pdpe1gb`\" pulumi-lang-java=\"`pdpe1gb`\"\u003e`pdpe1gb`\u003c/span\u003e, `md-clear`, `hv-tlbflush`, `hv-evmcs`, \u003cspan pulumi-lang-nodejs=\"`aes`\" pulumi-lang-dotnet=\"`Aes`\" pulumi-lang-go=\"`aes`\" pulumi-lang-python=\"`aes`\" pulumi-lang-yaml=\"`aes`\" pulumi-lang-java=\"`aes`\"\u003e`aes`\u003c/span\u003e.\n"},"hotplugged":{"type":"integer","description":"The number of hotplugged vCPUs (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"},"limit":{"type":"integer","description":"Limit of CPU usage (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e which means no limit).\n"},"numa":{"type":"boolean","description":"Enable NUMA (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"sockets":{"type":"integer","description":"The number of CPU sockets (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"type":{"type":"string","description":"Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to \u003cspan pulumi-lang-nodejs=\"`kvm64`\" pulumi-lang-dotnet=\"`Kvm64`\" pulumi-lang-go=\"`kvm64`\" pulumi-lang-python=\"`kvm64`\" pulumi-lang-yaml=\"`kvm64`\" pulumi-lang-java=\"`kvm64`\"\u003e`kvm64`\u003c/span\u003e). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information.\n"},"units":{"type":"integer","description":"CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["affinity","architecture","cores","flags","hotplugged","limit","numa","sockets","type","units"]}}},"proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng":{"properties":{"maxBytes":{"type":"integer","description":"Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous).\n"},"period":{"type":"integer","description":"Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous).\n"},"source":{"type":"string","description":"The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["maxBytes","period","source"]}}},"proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts":{"properties":{"create":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"},"delete":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n"},"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"},"update":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga":{"properties":{"clipboard":{"type":"string","description":"Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e is available. Migration with VNC clipboard is not supported by Proxmox.\n"},"memory":{"type":"integer","description":"The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n"},"type":{"type":"string","description":"The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["clipboard","memory","type"]}}},"proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent":{"properties":{"enabled":{"type":"boolean","description":"Whether to enable the QEMU agent (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"timeout":{"type":"string","description":"The maximum amount of time to wait for data from\nthe QEMU agent to become available ( defaults to \u003cspan pulumi-lang-nodejs=\"`15m`\" pulumi-lang-dotnet=\"`15m`\" pulumi-lang-go=\"`15m`\" pulumi-lang-python=\"`15m`\" pulumi-lang-yaml=\"`15m`\" pulumi-lang-java=\"`15m`\"\u003e`15m`\u003c/span\u003e).\n"},"trim":{"type":"boolean","description":"Whether to enable the FSTRIM feature in the QEMU agent\n(defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The QEMU agent interface type (defaults to \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e).\n"},"waitForIp":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp","description":"Configuration for waiting for specific IP address types when the VM starts.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp":{"properties":{"ipv4":{"type":"boolean","description":"Wait for at least one IPv4 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"ipv6":{"type":"boolean","description":"Wait for at least one IPv6 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nWhen \u003cspan pulumi-lang-nodejs=\"`waitForIp`\" pulumi-lang-dotnet=\"`WaitForIp`\" pulumi-lang-go=\"`waitForIp`\" pulumi-lang-python=\"`wait_for_ip`\" pulumi-lang-yaml=\"`waitForIp`\" pulumi-lang-java=\"`waitForIp`\"\u003e`wait_for_ip`\u003c/span\u003e is not specified or both \u003cspan pulumi-lang-nodejs=\"`ipv4`\" pulumi-lang-dotnet=\"`Ipv4`\" pulumi-lang-go=\"`ipv4`\" pulumi-lang-python=\"`ipv4`\" pulumi-lang-yaml=\"`ipv4`\" pulumi-lang-java=\"`ipv4`\"\u003e`ipv4`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ipv6`\" pulumi-lang-dotnet=\"`Ipv6`\" pulumi-lang-go=\"`ipv6`\" pulumi-lang-python=\"`ipv6`\" pulumi-lang-yaml=\"`ipv6`\" pulumi-lang-java=\"`ipv6`\"\u003e`ipv6`\u003c/span\u003e are \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, the provider waits for any valid global unicast address (IPv4 or IPv6). In dual-stack networks where DHCPv6 responds faster, this may result in only IPv6 addresses being available. Set `ipv4 = true` to ensure IPv4 address availability.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev":{"properties":{"allowSmt":{"type":"boolean","description":"Sets policy bit to allow Simultaneous Multi Threading (SMT)\n(Ignored unless for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"kernelHashes":{"type":"boolean","description":"Add kernel hashes to guest firmware for measured linux kernel launch (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"noDebug":{"type":"boolean","description":"Sets policy bit to disallow debugging of guest (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"noKeySharing":{"type":"boolean","description":"Sets policy bit to disallow key sharing with other guests (Ignored for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nThe \u003cspan pulumi-lang-nodejs=\"`amdSev`\" pulumi-lang-dotnet=\"`AmdSev`\" pulumi-lang-go=\"`amdSev`\" pulumi-lang-python=\"`amd_sev`\" pulumi-lang-yaml=\"`amdSev`\" pulumi-lang-java=\"`amdSev`\"\u003e`amd_sev`\u003c/span\u003e setting is only allowed for a `root@pam` authenticated user.\n"},"type":{"type":"string","description":"Enable standard SEV with \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e or enable experimental SEV-ES with the \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e option or enable experimental SEV-SNP with the \u003cspan pulumi-lang-nodejs=\"`snp`\" pulumi-lang-dotnet=\"`Snp`\" pulumi-lang-go=\"`snp`\" pulumi-lang-python=\"`snp`\" pulumi-lang-yaml=\"`snp`\" pulumi-lang-java=\"`snp`\"\u003e`snp`\u003c/span\u003e option (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice":{"properties":{"device":{"type":"string","description":"The device (defaults to `intel-hda`).\n- `AC97` - Intel 82801AA AC97 Audio.\n- `ich9-intel-hda` - Intel HD Audio Controller (ich9).\n- `intel-hda` - Intel HD Audio.\n"},"driver":{"type":"string","description":"The driver (defaults to \u003cspan pulumi-lang-nodejs=\"`spice`\" pulumi-lang-dotnet=\"`Spice`\" pulumi-lang-go=\"`spice`\" pulumi-lang-python=\"`spice`\" pulumi-lang-yaml=\"`spice`\" pulumi-lang-java=\"`spice`\"\u003e`spice`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether to enable the audio device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom":{"properties":{"enabled":{"type":"boolean","description":"Whether to enable the CD-ROM drive (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). *Deprecated*. The attribute will be removed in the next version of the provider.\nSet \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n","deprecationMessage":"Remove this attribute's configuration as it is no longer used and the attribute will be removed in the next version of the provider. Set \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CDROM drive empty."},"fileId":{"type":"string","description":"A file ID for an ISO file (defaults to \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e as\nin the physical drive). Use \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n"},"interface":{"type":"string","description":"A hardware interface to connect CD-ROM drive to (defaults to \u003cspan pulumi-lang-nodejs=\"`ide3`\" pulumi-lang-dotnet=\"`Ide3`\" pulumi-lang-go=\"`ide3`\" pulumi-lang-python=\"`ide3`\" pulumi-lang-yaml=\"`ide3`\" pulumi-lang-java=\"`ide3`\"\u003e`ide3`\u003c/span\u003e).\n\"Must be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. \" +\n\"Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineClone:VirtualMachineClone":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n","willReplaceOnChanges":true},"full":{"type":"boolean","description":"Full or linked clone (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The name of the source node (leave blank, if\nequal to the \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e argument).\n","willReplaceOnChanges":true},"retries":{"type":"integer","description":"Number of retries in Proxmox for clone vm.\nSometimes Proxmox errors with timeout when creating multiple clones at\nonce.\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The identifier for the source VM.\n","willReplaceOnChanges":true}},"type":"object","required":["vmId"]},"proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu":{"properties":{"affinity":{"type":"string","description":"The CPU cores that are used to run the VM’s vCPU. The\nvalue is a list of CPU IDs, separated by commas. The CPU IDs are zero-based.\nFor example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four\nCPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n"},"architecture":{"type":"string","description":"The CPU architecture (defaults to \u003cspan pulumi-lang-nodejs=\"`x8664`\" pulumi-lang-dotnet=\"`X8664`\" pulumi-lang-go=\"`x8664`\" pulumi-lang-python=\"`x86_64`\" pulumi-lang-yaml=\"`x8664`\" pulumi-lang-java=\"`x8664`\"\u003e`x86_64`\u003c/span\u003e).\n"},"cores":{"type":"integer","description":"The number of CPU cores (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"flags":{"type":"array","items":{"type":"string"},"description":"The CPU flags.\n- `+aes`/`-aes` - Activate AES instruction set for HW acceleration.\n- `+amd-no-ssb`/`-amd-no-ssb` - Notifies guest OS that host is not\nvulnerable for Spectre on AMD CPUs.\n- `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with\nAMD CPUs, best used with \"virt-ssbd\".\n- `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested\nvirtualization (only supported on Intel CPUs).\n- `+hv-tlbflush`/`-hv-tlbflush` - Improve performance in overcommitted\nWindows guests (may lead to guest BSOD on old CPUs).\n- `+ibpb`/`-ibpb` - Allows improved Spectre mitigation on AMD CPUs.\n- `+md-clear`/`-md-clear` - Required to let the guest OS know if MDS is\nmitigated correctly.\n- `+pcid`/`-pcid` - Meltdown fix cost reduction on Westmere, Sandy- and\nIvy Bridge Intel CPUs.\n- `+pdpe1gb`/`-pdpe1gb` - Allows guest OS to use 1 GB size pages, if\nhost HW supports it.\n- `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with\nIntel CPUs.\n- `+ssbd`/`-ssbd` - Protection for \"Speculative Store Bypass\" for Intel\nmodels.\n- `+virt-ssbd`/`-virt-ssbd` - Basis for \"Speculative Store Bypass\"\nprotection for AMD models.\n"},"hotplugged":{"type":"integer","description":"The number of hotplugged vCPUs (defaults\nto \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"},"limit":{"type":"integer","description":"Limit of CPU usage, `0...128`. (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e -- no limit).\n"},"numa":{"type":"boolean","description":"Enable/disable NUMA. (default to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"sockets":{"type":"integer","description":"The number of CPU sockets (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The emulated CPU type, it's recommended to\nuse `x86-64-v2-AES` (defaults to \u003cspan pulumi-lang-nodejs=\"`qemu64`\" pulumi-lang-dotnet=\"`Qemu64`\" pulumi-lang-go=\"`qemu64`\" pulumi-lang-python=\"`qemu64`\" pulumi-lang-yaml=\"`qemu64`\" pulumi-lang-java=\"`qemu64`\"\u003e`qemu64`\u003c/span\u003e).\n"},"units":{"type":"integer","description":"The CPU units. PVE default is \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e for cgroups v1 and \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e for cgroups v2.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["units"]}}},"proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk":{"properties":{"aio":{"type":"string","description":"The disk AIO mode (defaults to \u003cspan pulumi-lang-nodejs=\"`ioUring`\" pulumi-lang-dotnet=\"`IoUring`\" pulumi-lang-go=\"`ioUring`\" pulumi-lang-python=\"`io_uring`\" pulumi-lang-yaml=\"`ioUring`\" pulumi-lang-java=\"`ioUring`\"\u003e`io_uring`\u003c/span\u003e).\n"},"backup":{"type":"boolean","description":"Whether the drive should be included when making backups (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"cache":{"type":"string","description":"The cache type (defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n"},"datastoreId":{"type":"string","description":"The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n"},"discard":{"type":"string","description":"Whether to pass discard/trim requests to the\nunderlying storage. Supported values are \u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e/\u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e).\n"},"fileFormat":{"type":"string","description":"The file format.\n"},"fileId":{"type":"string","description":"The file ID for a disk image when importing a disk into VM. The ID format is\n`\u003cdatastore_id\u003e:\u003ccontent_type\u003e/\u003cfile_name\u003e`, for example `local:iso/centos8.img`. Can be also taken from\n\u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource. Prefer \u003cspan pulumi-lang-nodejs=\"`importFrom`\" pulumi-lang-dotnet=\"`ImportFrom`\" pulumi-lang-go=\"`importFrom`\" pulumi-lang-python=\"`import_from`\" pulumi-lang-yaml=\"`importFrom`\" pulumi-lang-java=\"`importFrom`\"\u003e`import_from`\u003c/span\u003e for uncompressed images.\nUse \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded\nwith \u003cspan pulumi-lang-nodejs=\"`contentType \" pulumi-lang-dotnet=\"`ContentType \" pulumi-lang-go=\"`contentType \" pulumi-lang-python=\"`content_type \" pulumi-lang-yaml=\"`contentType \" pulumi-lang-java=\"`contentType \"\u003e`content_type \u003c/span\u003e= \"iso\"` and \u003cspan pulumi-lang-nodejs=\"`decompressionAlgorithm`\" pulumi-lang-dotnet=\"`DecompressionAlgorithm`\" pulumi-lang-go=\"`decompressionAlgorithm`\" pulumi-lang-python=\"`decompression_algorithm`\" pulumi-lang-yaml=\"`decompressionAlgorithm`\" pulumi-lang-java=\"`decompressionAlgorithm`\"\u003e`decompression_algorithm`\u003c/span\u003e set. See the\nCreate a VM from a Cloud Image guide for examples.\n","willReplaceOnChanges":true},"importFrom":{"type":"string","description":"The file ID for a disk image to import into VM. The image must be of \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e content type\n(uncompressed images only). The ID format is `\u003cdatastore_id\u003e:import/\u003cfile_name\u003e`, for example `local:import/centos8.qcow2`.\nCan be also taken from \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource. Note: compressed images downloaded with\n\u003cspan pulumi-lang-nodejs=\"`decompressionAlgorithm`\" pulumi-lang-dotnet=\"`DecompressionAlgorithm`\" pulumi-lang-go=\"`decompressionAlgorithm`\" pulumi-lang-python=\"`decompression_algorithm`\" pulumi-lang-yaml=\"`decompressionAlgorithm`\" pulumi-lang-java=\"`decompressionAlgorithm`\"\u003e`decompression_algorithm`\u003c/span\u003e cannot use \u003cspan pulumi-lang-nodejs=\"`importFrom`\" pulumi-lang-dotnet=\"`ImportFrom`\" pulumi-lang-go=\"`importFrom`\" pulumi-lang-python=\"`import_from`\" pulumi-lang-yaml=\"`importFrom`\" pulumi-lang-java=\"`importFrom`\"\u003e`import_from`\u003c/span\u003e; use \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e instead.\n"},"interface":{"type":"string","description":"The disk interface for Proxmox, currently \u003cspan pulumi-lang-nodejs=\"`scsi`\" pulumi-lang-dotnet=\"`Scsi`\" pulumi-lang-go=\"`scsi`\" pulumi-lang-python=\"`scsi`\" pulumi-lang-yaml=\"`scsi`\" pulumi-lang-java=\"`scsi`\"\u003e`scsi`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`sata`\" pulumi-lang-dotnet=\"`Sata`\" pulumi-lang-go=\"`sata`\" pulumi-lang-python=\"`sata`\" pulumi-lang-yaml=\"`sata`\" pulumi-lang-java=\"`sata`\"\u003e`sata`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e interfaces are supported. Append the disk index at\nthe end, for example, \u003cspan pulumi-lang-nodejs=\"`virtio0`\" pulumi-lang-dotnet=\"`Virtio0`\" pulumi-lang-go=\"`virtio0`\" pulumi-lang-python=\"`virtio0`\" pulumi-lang-yaml=\"`virtio0`\" pulumi-lang-java=\"`virtio0`\"\u003e`virtio0`\u003c/span\u003e for the first virtio disk, \u003cspan pulumi-lang-nodejs=\"`virtio1`\" pulumi-lang-dotnet=\"`Virtio1`\" pulumi-lang-go=\"`virtio1`\" pulumi-lang-python=\"`virtio1`\" pulumi-lang-yaml=\"`virtio1`\" pulumi-lang-java=\"`virtio1`\"\u003e`virtio1`\u003c/span\u003e for\nthe second, etc.\n"},"iothread":{"type":"boolean","description":"Whether to use iothreads for this disk (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"pathInDatastore":{"type":"string","description":"The in-datastore path to the disk image.\n***Experimental.***Use to attach another VM's disks,\nor (as root only) host's filesystem paths (\u003cspan pulumi-lang-nodejs=\"`datastoreId`\" pulumi-lang-dotnet=\"`DatastoreId`\" pulumi-lang-go=\"`datastoreId`\" pulumi-lang-python=\"`datastore_id`\" pulumi-lang-yaml=\"`datastoreId`\" pulumi-lang-java=\"`datastoreId`\"\u003e`datastore_id`\u003c/span\u003e empty string).\nSee \"*Example: Attached disks*\".\n"},"replicate":{"type":"boolean","description":"Whether the drive should be considered for replication jobs (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"serial":{"type":"string","description":"The serial number of the disk, up to 20 bytes long.\n"},"size":{"type":"integer","description":"The disk size in gigabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`8`\" pulumi-lang-dotnet=\"`8`\" pulumi-lang-go=\"`8`\" pulumi-lang-python=\"`8`\" pulumi-lang-yaml=\"`8`\" pulumi-lang-java=\"`8`\"\u003e`8`\u003c/span\u003e).\n"},"speed":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDiskSpeed:VirtualMachineDiskSpeed","description":"The speed limits.\n"},"ssd":{"type":"boolean","description":"Whether to use an SSD emulation option for this disk (\ndefaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). Note that SSD emulation is not supported on VirtIO\nBlock drives.\n"}},"type":"object","required":["interface"],"language":{"nodejs":{"requiredOutputs":["fileFormat","interface","pathInDatastore"]}}},"proxmoxve:VM/VirtualMachineDiskSpeed:VirtualMachineDiskSpeed":{"properties":{"iopsRead":{"type":"integer","description":"The maximum read I/O in operations per second.\n"},"iopsReadBurstable":{"type":"integer","description":"The maximum unthrottled read I/O pool in operations per second.\n"},"iopsWrite":{"type":"integer","description":"The maximum write I/O in operations per second.\n"},"iopsWriteBurstable":{"type":"integer","description":"The maximum unthrottled write I/O pool in operations per second.\n"},"read":{"type":"integer","description":"The maximum read speed in megabytes per second.\n"},"readBurstable":{"type":"integer","description":"The maximum burstable read speed in\nmegabytes per second.\n"},"write":{"type":"integer","description":"The maximum write speed in megabytes per second.\n"},"writeBurstable":{"type":"integer","description":"The maximum burstable write speed in\nmegabytes per second.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n"},"fileFormat":{"type":"string","description":"The file format (defaults to \u003cspan pulumi-lang-nodejs=\"`raw`\" pulumi-lang-dotnet=\"`Raw`\" pulumi-lang-go=\"`raw`\" pulumi-lang-python=\"`raw`\" pulumi-lang-yaml=\"`raw`\" pulumi-lang-java=\"`raw`\"\u003e`raw`\u003c/span\u003e).\n"},"preEnrolledKeys":{"type":"boolean","description":"Use am EFI vars template with\ndistribution-specific and Microsoft Standard keys enrolled, if used with\nEFI type=\u003cspan pulumi-lang-nodejs=\"`4m`\" pulumi-lang-dotnet=\"`4m`\" pulumi-lang-go=\"`4m`\" pulumi-lang-python=\"`4m`\" pulumi-lang-yaml=\"`4m`\" pulumi-lang-java=\"`4m`\"\u003e`4m`\u003c/span\u003e. Ignored for VMs with cpu.architecture=\u003cspan pulumi-lang-nodejs=\"`aarch64`\" pulumi-lang-dotnet=\"`Aarch64`\" pulumi-lang-go=\"`aarch64`\" pulumi-lang-python=\"`aarch64`\" pulumi-lang-yaml=\"`aarch64`\" pulumi-lang-java=\"`aarch64`\"\u003e`aarch64`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"type":{"type":"string","description":"Size and type of the OVMF EFI disk. \u003cspan pulumi-lang-nodejs=\"`4m`\" pulumi-lang-dotnet=\"`4m`\" pulumi-lang-go=\"`4m`\" pulumi-lang-python=\"`4m`\" pulumi-lang-yaml=\"`4m`\" pulumi-lang-java=\"`4m`\"\u003e`4m`\u003c/span\u003e is newer and\nrecommended, and required for Secure Boot. For backwards compatibility\nuse \u003cspan pulumi-lang-nodejs=\"`2m`\" pulumi-lang-dotnet=\"`2m`\" pulumi-lang-go=\"`2m`\" pulumi-lang-python=\"`2m`\" pulumi-lang-yaml=\"`2m`\" pulumi-lang-java=\"`2m`\"\u003e`2m`\u003c/span\u003e. Ignored for VMs with cpu.architecture=\u003cspan pulumi-lang-nodejs=\"`aarch64`\" pulumi-lang-dotnet=\"`Aarch64`\" pulumi-lang-go=\"`aarch64`\" pulumi-lang-python=\"`aarch64`\" pulumi-lang-yaml=\"`aarch64`\" pulumi-lang-java=\"`aarch64`\"\u003e`aarch64`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`2m`\" pulumi-lang-dotnet=\"`2m`\" pulumi-lang-go=\"`2m`\" pulumi-lang-python=\"`2m`\" pulumi-lang-yaml=\"`2m`\" pulumi-lang-java=\"`2m`\"\u003e`2m`\u003c/span\u003e).\n","willReplaceOnChanges":true}},"type":"object","language":{"nodejs":{"requiredOutputs":["fileFormat"]}}},"proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci":{"properties":{"device":{"type":"string","description":"The PCI device name for Proxmox, in form\nof `hostpciX` where `X` is a sequential number from 0 to 15.\n"},"id":{"type":"string","description":"The PCI device ID. This parameter is not compatible\nwith \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e and requires the root \u003cspan pulumi-lang-nodejs=\"`username`\" pulumi-lang-dotnet=\"`Username`\" pulumi-lang-go=\"`username`\" pulumi-lang-python=\"`username`\" pulumi-lang-yaml=\"`username`\" pulumi-lang-java=\"`username`\"\u003e`username`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e\nconfigured in the proxmox provider. Use either this or \u003cspan pulumi-lang-nodejs=\"`mapping`\" pulumi-lang-dotnet=\"`Mapping`\" pulumi-lang-go=\"`mapping`\" pulumi-lang-python=\"`mapping`\" pulumi-lang-yaml=\"`mapping`\" pulumi-lang-java=\"`mapping`\"\u003e`mapping`\u003c/span\u003e.\n"},"mapping":{"type":"string","description":"The resource mapping name of the device, for\nexample gpu. Use either this or \u003cspan pulumi-lang-nodejs=\"`id`\" pulumi-lang-dotnet=\"`Id`\" pulumi-lang-go=\"`id`\" pulumi-lang-python=\"`id`\" pulumi-lang-yaml=\"`id`\" pulumi-lang-java=\"`id`\"\u003e`id`\u003c/span\u003e.\n"},"mdev":{"type":"string","description":"The mediated device ID to use.\n"},"pcie":{"type":"boolean","description":"Tells Proxmox to use a PCIe or PCI port. Some\nguests/device combination require PCIe rather than PCI. PCIe is only\navailable for q35 machine types.\n"},"romFile":{"type":"string","description":"A path to a ROM file for the device to use. This\nis a relative path under `/usr/share/kvm/`.\n"},"rombar":{"type":"boolean","description":"Makes the firmware ROM visible for the VM (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"xvga":{"type":"boolean","description":"Marks the PCI(e) device as the primary GPU of the VM.\nWith this enabled the \u003cspan pulumi-lang-nodejs=\"`vga`\" pulumi-lang-dotnet=\"`Vga`\" pulumi-lang-go=\"`vga`\" pulumi-lang-python=\"`vga`\" pulumi-lang-yaml=\"`vga`\" pulumi-lang-java=\"`vga`\"\u003e`vga`\u003c/span\u003e configuration argument will be ignored.\n"}},"type":"object","required":["device"]},"proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the datastore to create the\ncloud-init disk in (defaults to `local-lvm`).\n"},"dns":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationDns:VirtualMachineInitializationDns","description":"The DNS configuration.\n"},"fileFormat":{"type":"string","description":"The file format.\n"},"interface":{"type":"string","description":"The hardware interface to connect the cloud-init\nimage to. Must be one of `ide0..3`, `sata0..5`, `scsi0..30`. Will be\ndetected if the setting is missing but a cloud-init image is present,\notherwise defaults to \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e.\n"},"ipConfigs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationIpConfig:VirtualMachineInitializationIpConfig"},"description":"The IP configuration (one block per network\ndevice).\n"},"metaDataFileId":{"type":"string","description":"The identifier for a file containing\nall meta data passed to the VM via cloud-init.\n","willReplaceOnChanges":true},"networkDataFileId":{"type":"string","description":"The identifier for a file containing\nnetwork configuration data passed to the VM via cloud-init (conflicts\nwith \u003cspan pulumi-lang-nodejs=\"`ipConfig`\" pulumi-lang-dotnet=\"`IpConfig`\" pulumi-lang-go=\"`ipConfig`\" pulumi-lang-python=\"`ip_config`\" pulumi-lang-yaml=\"`ipConfig`\" pulumi-lang-java=\"`ipConfig`\"\u003e`ip_config`\u003c/span\u003e).\n","willReplaceOnChanges":true},"type":{"type":"string","description":"The cloud-init configuration format\n","willReplaceOnChanges":true},"userAccount":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationUserAccount:VirtualMachineInitializationUserAccount","description":"The user account configuration (conflicts\nwith \u003cspan pulumi-lang-nodejs=\"`userDataFileId`\" pulumi-lang-dotnet=\"`UserDataFileId`\" pulumi-lang-go=\"`userDataFileId`\" pulumi-lang-python=\"`user_data_file_id`\" pulumi-lang-yaml=\"`userDataFileId`\" pulumi-lang-java=\"`userDataFileId`\"\u003e`user_data_file_id`\u003c/span\u003e).\n"},"userDataFileId":{"type":"string","description":"The identifier for a file containing\ncustom user data (conflicts with \u003cspan pulumi-lang-nodejs=\"`userAccount`\" pulumi-lang-dotnet=\"`UserAccount`\" pulumi-lang-go=\"`userAccount`\" pulumi-lang-python=\"`user_account`\" pulumi-lang-yaml=\"`userAccount`\" pulumi-lang-java=\"`userAccount`\"\u003e`user_account`\u003c/span\u003e).\n","willReplaceOnChanges":true},"vendorDataFileId":{"type":"string","description":"The identifier for a file containing\nall vendor data passed to the VM via cloud-init.\n","willReplaceOnChanges":true}},"type":"object","language":{"nodejs":{"requiredOutputs":["fileFormat","metaDataFileId","networkDataFileId","type","userDataFileId","vendorDataFileId"]}}},"proxmoxve:VM/VirtualMachineInitializationDns:VirtualMachineInitializationDns":{"properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"servers":{"type":"array","items":{"type":"string"},"description":"The list of DNS servers.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationIpConfig:VirtualMachineInitializationIpConfig":{"properties":{"ipv4":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationIpConfigIpv4:VirtualMachineInitializationIpConfigIpv4","description":"The IPv4 configuration.\n"},"ipv6":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitializationIpConfigIpv6:VirtualMachineInitializationIpConfigIpv6","description":"The IPv6 configuration.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationIpConfigIpv4:VirtualMachineInitializationIpConfigIpv4":{"properties":{"address":{"type":"string","description":"The IPv4 address in CIDR notation\n(e.g. 192.168.2.2/24). Alternatively, set this to \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for\nautodiscovery.\n"},"gateway":{"type":"string","description":"The IPv4 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e is used as the address).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationIpConfigIpv6:VirtualMachineInitializationIpConfigIpv6":{"properties":{"address":{"type":"string","description":"The IPv6 address in CIDR notation\n(e.g. fd1c::7334/64). Alternatively, set this\nto \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e for DHCPv6, or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e for SLAAC.\n"},"gateway":{"type":"string","description":"The IPv6 gateway (must be omitted\nwhen \u003cspan pulumi-lang-nodejs=\"`dhcp`\" pulumi-lang-dotnet=\"`Dhcp`\" pulumi-lang-go=\"`dhcp`\" pulumi-lang-python=\"`dhcp`\" pulumi-lang-yaml=\"`dhcp`\" pulumi-lang-java=\"`dhcp`\"\u003e`dhcp`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`auto`\" pulumi-lang-dotnet=\"`Auto`\" pulumi-lang-go=\"`auto`\" pulumi-lang-python=\"`auto`\" pulumi-lang-yaml=\"`auto`\" pulumi-lang-java=\"`auto`\"\u003e`auto`\u003c/span\u003e are used as the address).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineInitializationUserAccount:VirtualMachineInitializationUserAccount":{"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The SSH keys.\n"},"password":{"type":"string","description":"The SSH password.\n","secret":true},"username":{"type":"string","description":"The SSH username.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory":{"properties":{"dedicated":{"type":"integer","description":"The dedicated memory in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e).\n"},"floating":{"type":"integer","description":"The floating memory in megabytes. The default is \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e, which disables \"ballooning device\" for the VM.\nPlease note that Proxmox has ballooning enabled by default. To enable it, set \u003cspan pulumi-lang-nodejs=\"`floating`\" pulumi-lang-dotnet=\"`Floating`\" pulumi-lang-go=\"`floating`\" pulumi-lang-python=\"`floating`\" pulumi-lang-yaml=\"`floating`\" pulumi-lang-java=\"`floating`\"\u003e`floating`\u003c/span\u003e to the same value as \u003cspan pulumi-lang-nodejs=\"`dedicated`\" pulumi-lang-dotnet=\"`Dedicated`\" pulumi-lang-go=\"`dedicated`\" pulumi-lang-python=\"`dedicated`\" pulumi-lang-yaml=\"`dedicated`\" pulumi-lang-java=\"`dedicated`\"\u003e`dedicated`\u003c/span\u003e.\nSee [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_memory) section 10.2.6 for more information.\n"},"hugepages":{"type":"string","description":"Enable/disable hugepages memory (defaults to disable).\n"},"keepHugepages":{"type":"boolean","description":"Keep hugepages memory after the VM is stopped (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nSettings \u003cspan pulumi-lang-nodejs=\"`hugepages`\" pulumi-lang-dotnet=\"`Hugepages`\" pulumi-lang-go=\"`hugepages`\" pulumi-lang-python=\"`hugepages`\" pulumi-lang-yaml=\"`hugepages`\" pulumi-lang-java=\"`hugepages`\"\u003e`hugepages`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`keepHugepages`\" pulumi-lang-dotnet=\"`KeepHugepages`\" pulumi-lang-go=\"`keepHugepages`\" pulumi-lang-python=\"`keep_hugepages`\" pulumi-lang-yaml=\"`keepHugepages`\" pulumi-lang-java=\"`keepHugepages`\"\u003e`keep_hugepages`\u003c/span\u003e are only allowed for `root@pam` authenticated user.\nAnd required `cpu.numa` to be enabled.\n"},"shared":{"type":"integer","description":"The shared memory in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice":{"properties":{"bridge":{"type":"string","description":"The name of the network bridge (defaults to \u003cspan pulumi-lang-nodejs=\"`vmbr0`\" pulumi-lang-dotnet=\"`Vmbr0`\" pulumi-lang-go=\"`vmbr0`\" pulumi-lang-python=\"`vmbr0`\" pulumi-lang-yaml=\"`vmbr0`\" pulumi-lang-java=\"`vmbr0`\"\u003e`vmbr0`\u003c/span\u003e).\n"},"disconnected":{"type":"boolean","description":"Whether to disconnect the network device from the network (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether to enable the network device (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"firewall":{"type":"boolean","description":"Whether this interface's firewall rules should be used (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"macAddress":{"type":"string","description":"The MAC address.\n"},"model":{"type":"string","description":"The network device model (defaults to \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e).\n"},"mtu":{"type":"integer","description":"Force MTU, for VirtIO only. Set to 1 to use the bridge MTU. Cannot be larger than the bridge MTU.\n"},"queues":{"type":"integer","description":"The number of queues for VirtIO (1..64).\n"},"rateLimit":{"type":"number","description":"The rate limit in megabytes per second.\n"},"trunks":{"type":"string","description":"String containing a `;` separated list of VLAN trunks\n(\"10;20;30\"). Note that the VLAN-aware feature need to be enabled on the PVE\nLinux Bridge to use trunks.\n"},"vlanId":{"type":"integer","description":"The VLAN identifier.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["macAddress"]}}},"proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma":{"properties":{"cpus":{"type":"string","description":"The CPU cores to assign to the NUMA node (format is `0-7;16-31`).\n"},"device":{"type":"string","description":"The NUMA device name for Proxmox, in form\nof `numaX` where `X` is a sequential number from 0 to 7.\n"},"hostnodes":{"type":"string","description":"The NUMA host nodes.\n"},"memory":{"type":"integer","description":"The memory in megabytes to assign to the NUMA node.\n"},"policy":{"type":"string","description":"The NUMA policy (defaults to \u003cspan pulumi-lang-nodejs=\"`preferred`\" pulumi-lang-dotnet=\"`Preferred`\" pulumi-lang-go=\"`preferred`\" pulumi-lang-python=\"`preferred`\" pulumi-lang-yaml=\"`preferred`\" pulumi-lang-java=\"`preferred`\"\u003e`preferred`\u003c/span\u003e).\n"}},"type":"object","required":["cpus","device","memory"]},"proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem":{"properties":{"type":{"type":"string","description":"The type (defaults to \u003cspan pulumi-lang-nodejs=\"`other`\" pulumi-lang-dotnet=\"`Other`\" pulumi-lang-go=\"`other`\" pulumi-lang-python=\"`other`\" pulumi-lang-yaml=\"`other`\" pulumi-lang-java=\"`other`\"\u003e`other`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineRng:VirtualMachineRng":{"properties":{"maxBytes":{"type":"integer","description":"Maximum bytes of entropy allowed to get injected into the guest every \u003cspan pulumi-lang-nodejs=\"`period`\" pulumi-lang-dotnet=\"`Period`\" pulumi-lang-go=\"`period`\" pulumi-lang-python=\"`period`\" pulumi-lang-yaml=\"`period`\" pulumi-lang-java=\"`period`\"\u003e`period`\u003c/span\u003e milliseconds (defaults to \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e). Prefer a lower value when using `/dev/random` as source.\n"},"period":{"type":"integer","description":"Every \u003cspan pulumi-lang-nodejs=\"`period`\" pulumi-lang-dotnet=\"`Period`\" pulumi-lang-go=\"`period`\" pulumi-lang-python=\"`period`\" pulumi-lang-yaml=\"`period`\" pulumi-lang-java=\"`period`\"\u003e`period`\u003c/span\u003e milliseconds the entropy-injection quota is reset, allowing the guest to retrieve another \u003cspan pulumi-lang-nodejs=\"`maxBytes`\" pulumi-lang-dotnet=\"`MaxBytes`\" pulumi-lang-go=\"`maxBytes`\" pulumi-lang-python=\"`max_bytes`\" pulumi-lang-yaml=\"`maxBytes`\" pulumi-lang-java=\"`maxBytes`\"\u003e`max_bytes`\u003c/span\u003e of entropy (defaults to \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e).\n"},"source":{"type":"string","description":"The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n"}},"type":"object","required":["source"],"language":{"nodejs":{"requiredOutputs":["maxBytes","period","source"]}}},"proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice":{"properties":{"device":{"type":"string","description":"The device (defaults to \u003cspan pulumi-lang-nodejs=\"`socket`\" pulumi-lang-dotnet=\"`Socket`\" pulumi-lang-go=\"`socket`\" pulumi-lang-python=\"`socket`\" pulumi-lang-yaml=\"`socket`\" pulumi-lang-java=\"`socket`\"\u003e`socket`\u003c/span\u003e).\n- `/dev/*` - A host serial device.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios":{"properties":{"family":{"type":"string","description":"The family string.\n"},"manufacturer":{"type":"string","description":"The manufacturer.\n"},"product":{"type":"string","description":"The product ID.\n"},"serial":{"type":"string","description":"The serial number.\n"},"sku":{"type":"string","description":"The SKU number.\n"},"uuid":{"type":"string","description":"The UUID (defaults to randomly generated UUID).\n"},"version":{"type":"string","description":"The version.\n"}},"type":"object","language":{"nodejs":{"requiredOutputs":["uuid"]}}},"proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup":{"properties":{"downDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next VM is shut down.\n"},"order":{"type":"integer","description":"A non-negative number defining the general startup\norder.\n"},"upDelay":{"type":"integer","description":"A non-negative number defining the delay in\nseconds before the next VM is started.\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState":{"properties":{"datastoreId":{"type":"string","description":"The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n"},"version":{"type":"string","description":"TPM state device version. Can be `v1.2` or `v2.0`.\n(defaults to `v2.0`).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb":{"properties":{"host":{"type":"string","description":"The Host USB device or port or the value \u003cspan pulumi-lang-nodejs=\"`spice`\" pulumi-lang-dotnet=\"`Spice`\" pulumi-lang-go=\"`spice`\" pulumi-lang-python=\"`spice`\" pulumi-lang-yaml=\"`spice`\" pulumi-lang-java=\"`spice`\"\u003e`spice`\u003c/span\u003e. Use either this or \u003cspan pulumi-lang-nodejs=\"`mapping`\" pulumi-lang-dotnet=\"`Mapping`\" pulumi-lang-go=\"`mapping`\" pulumi-lang-python=\"`mapping`\" pulumi-lang-yaml=\"`mapping`\" pulumi-lang-java=\"`mapping`\"\u003e`mapping`\u003c/span\u003e.\n"},"mapping":{"type":"string","description":"The cluster-wide resource mapping name of the device, for example \"usbdevice\". Use either this or \u003cspan pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\"\u003e`host`\u003c/span\u003e.\n"},"usb3":{"type":"boolean","description":"Makes the USB device a USB3 device for the VM\n(defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineVga:VirtualMachineVga":{"properties":{"clipboard":{"type":"string","description":"Enable VNC clipboard by setting to \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information.\n"},"memory":{"type":"integer","description":"The VGA memory in megabytes (defaults to \u003cspan pulumi-lang-nodejs=\"`16`\" pulumi-lang-dotnet=\"`16`\" pulumi-lang-go=\"`16`\" pulumi-lang-python=\"`16`\" pulumi-lang-yaml=\"`16`\" pulumi-lang-java=\"`16`\"\u003e`16`\u003c/span\u003e).\n"},"type":{"type":"string","description":"The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof":{"properties":{"cache":{"type":"string","description":"The caching mode\n"},"directIo":{"type":"boolean","description":"Whether to allow direct io\n"},"exposeAcl":{"type":"boolean","description":"Enable POSIX ACLs, implies xattr support\n"},"exposeXattr":{"type":"boolean","description":"Enable support for extended attributes\n"},"mapping":{"type":"string","description":"Identifier of the directory mapping\n"}},"type":"object","required":["mapping"]},"proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog":{"properties":{"action":{"type":"string","description":"The action to perform if after activation the guest fails to poll the watchdog in time (defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n"},"enabled":{"type":"boolean","description":"Whether the watchdog is enabled (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"model":{"type":"string","description":"The watchdog type to emulate (defaults to \u003cspan pulumi-lang-nodejs=\"`i6300esb`\" pulumi-lang-dotnet=\"`I6300esb`\" pulumi-lang-go=\"`i6300esb`\" pulumi-lang-python=\"`i6300esb`\" pulumi-lang-yaml=\"`i6300esb`\" pulumi-lang-java=\"`i6300esb`\"\u003e`i6300esb`\u003c/span\u003e).\n"}},"type":"object"},"proxmoxve:VM/getVirtualMachinesFilter:getVirtualMachinesFilter":{"properties":{"name":{"type":"string","description":"Name of the VM attribute to filter on. One of [\u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`template`\" pulumi-lang-dotnet=\"`Template`\" pulumi-lang-go=\"`template`\" pulumi-lang-python=\"`template`\" pulumi-lang-yaml=\"`template`\" pulumi-lang-java=\"`template`\"\u003e`template`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`status`\" pulumi-lang-dotnet=\"`Status`\" pulumi-lang-go=\"`status`\" pulumi-lang-python=\"`status`\" pulumi-lang-yaml=\"`status`\" pulumi-lang-java=\"`status`\"\u003e`status`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e]\n"},"regex":{"type":"boolean","description":"Treat values as regex patterns\n"},"values":{"type":"array","items":{"type":"string"},"description":"List of values to pass the filter. VM's attribute should match at least one value in the list.\n"}},"type":"object","required":["name","values"]},"proxmoxve:VM/getVirtualMachinesVm:getVirtualMachinesVm":{"properties":{"name":{"type":"string","description":"The virtual machine name.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"status":{"type":"string","description":"The status of the VM.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the VMs. The VM must have all\nthe tags to be included in the result.\n"},"template":{"type":"boolean","description":"Whether the VM is a template.\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"}},"type":"object","required":["name","nodeName","tags","vmId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:config/ssh:ssh":{"properties":{"agent":{"type":"boolean","description":"Whether to use the SSH agent for authentication. Takes precedence over the \u003cspan pulumi-lang-nodejs=\"`privateKey`\" pulumi-lang-dotnet=\"`PrivateKey`\" pulumi-lang-go=\"`privateKey`\" pulumi-lang-python=\"`private_key`\" pulumi-lang-yaml=\"`privateKey`\" pulumi-lang-java=\"`privateKey`\"\u003e`private_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e fields. Defaults to the value of the `PROXMOX_VE_SSH_AGENT` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentForwarding":{"type":"boolean","description":"Whether to enable SSH agent forwarding. Defaults to the value of the `PROXMOX_VE_SSH_AGENT_FORWARDING` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentSocket":{"type":"string","description":"The path to the SSH agent socket. Defaults to the value of the `SSH_AUTH_SOCK` environment variable.\n"},"nodes":{"type":"array","items":{"$ref":"#/types/proxmoxve:config/sshNode:sshNode"},"description":"Overrides for SSH connection configuration for a Proxmox VE node.\n"},"password":{"type":"string","description":"The password used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n","secret":true},"privateKey":{"type":"string","description":"The unencrypted private key (in PEM format) used for the SSH connection. Defaults to the value of the `PROXMOX_VE_SSH_PRIVATE_KEY` environment variable.\n","secret":true},"socks5Password":{"type":"string","description":"The password for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_PASSWORD` environment variable.\n","secret":true},"socks5Server":{"type":"string","description":"The address:port of the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_SERVER` environment variable.\n"},"socks5Username":{"type":"string","description":"The username for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_USERNAME` environment variable.\n"},"username":{"type":"string","description":"The username used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`username`\" pulumi-lang-dotnet=\"`Username`\" pulumi-lang-go=\"`username`\" pulumi-lang-python=\"`username`\" pulumi-lang-yaml=\"`username`\" pulumi-lang-java=\"`username`\"\u003e`username`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n"}},"type":"object"},"proxmoxve:config/sshNode:sshNode":{"properties":{"address":{"type":"string","description":"The address of the Proxmox VE node.\n"},"name":{"type":"string","description":"The name of the Proxmox VE node.\n"},"port":{"type":"integer","description":"The port of the Proxmox VE node.\n"}},"type":"object","required":["address","name"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/HostsEntry:HostsEntry":{"properties":{"address":{"type":"string","description":"The IP address.\n"},"hostnames":{"type":"array","items":{"type":"string"},"description":"The hostnames.\n"}},"type":"object","required":["address","hostnames"]},"proxmoxve:index/ProviderSsh:ProviderSsh":{"properties":{"agent":{"type":"boolean","description":"Whether to use the SSH agent for authentication. Takes precedence over the \u003cspan pulumi-lang-nodejs=\"`privateKey`\" pulumi-lang-dotnet=\"`PrivateKey`\" pulumi-lang-go=\"`privateKey`\" pulumi-lang-python=\"`private_key`\" pulumi-lang-yaml=\"`privateKey`\" pulumi-lang-java=\"`privateKey`\"\u003e`private_key`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e fields. Defaults to the value of the `PROXMOX_VE_SSH_AGENT` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentForwarding":{"type":"boolean","description":"Whether to enable SSH agent forwarding. Defaults to the value of the `PROXMOX_VE_SSH_AGENT_FORWARDING` environment variable, or \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e if not set.\n"},"agentSocket":{"type":"string","description":"The path to the SSH agent socket. Defaults to the value of the `SSH_AUTH_SOCK` environment variable.\n"},"nodes":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/ProviderSshNode:ProviderSshNode"},"description":"Overrides for SSH connection configuration for a Proxmox VE node.\n"},"password":{"type":"string","description":"The password used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`password`\" pulumi-lang-dotnet=\"`Password`\" pulumi-lang-go=\"`password`\" pulumi-lang-python=\"`password`\" pulumi-lang-yaml=\"`password`\" pulumi-lang-java=\"`password`\"\u003e`password`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n","secret":true},"privateKey":{"type":"string","description":"The unencrypted private key (in PEM format) used for the SSH connection. Defaults to the value of the `PROXMOX_VE_SSH_PRIVATE_KEY` environment variable.\n","secret":true},"socks5Password":{"type":"string","description":"The password for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_PASSWORD` environment variable.\n","secret":true},"socks5Server":{"type":"string","description":"The address:port of the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_SERVER` environment variable.\n"},"socks5Username":{"type":"string","description":"The username for the SOCKS5 proxy server. Defaults to the value of the `PROXMOX_VE_SSH_SOCKS5_USERNAME` environment variable.\n"},"username":{"type":"string","description":"The username used for the SSH connection. Defaults to the value of the \u003cspan pulumi-lang-nodejs=\"`username`\" pulumi-lang-dotnet=\"`Username`\" pulumi-lang-go=\"`username`\" pulumi-lang-python=\"`username`\" pulumi-lang-yaml=\"`username`\" pulumi-lang-java=\"`username`\"\u003e`username`\u003c/span\u003e field of the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e block.\n"}},"type":"object"},"proxmoxve:index/ProviderSshNode:ProviderSshNode":{"properties":{"address":{"type":"string","description":"The address of the Proxmox VE node.\n"},"name":{"type":"string","description":"The name of the Proxmox VE node.\n"},"port":{"type":"integer","description":"The port of the Proxmox VE node.\n"}},"type":"object","required":["address","name"],"language":{"nodejs":{"requiredOutputs":[]}}},"proxmoxve:index/getContainersContainer:getContainersContainer":{"properties":{"name":{"type":"string","description":"The container name.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"status":{"type":"string","description":"The status of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the containers. The container must have all\nthe tags to be included in the result.\n"},"template":{"type":"boolean","description":"Whether the container is a template.\n"},"vmId":{"type":"integer","description":"The container identifier.\n"}},"type":"object","required":["name","nodeName","tags","vmId"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/getContainersFilter:getContainersFilter":{"properties":{"name":{"type":"string","description":"Name of the container attribute to filter on. One of [\u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`template`\" pulumi-lang-dotnet=\"`Template`\" pulumi-lang-go=\"`template`\" pulumi-lang-python=\"`template`\" pulumi-lang-yaml=\"`template`\" pulumi-lang-java=\"`template`\"\u003e`template`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`status`\" pulumi-lang-dotnet=\"`Status`\" pulumi-lang-go=\"`status`\" pulumi-lang-python=\"`status`\" pulumi-lang-yaml=\"`status`\" pulumi-lang-java=\"`status`\"\u003e`status`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e]\n"},"regex":{"type":"boolean","description":"Treat values as regex patterns\n"},"values":{"type":"array","items":{"type":"string"},"description":"List of values to pass the filter. Container's attribute should match at least one value in the list.\n"}},"type":"object","required":["name","values"]},"proxmoxve:index/getVm2Cpu:getVm2Cpu":{"properties":{"affinity":{"type":"string","description":"List of host cores used to execute guest processes, for example: '0,5,8-11'\n"},"architecture":{"type":"string","description":"The CPU architecture.\n"},"cores":{"type":"integer","description":"The number of CPU cores per socket.\n"},"flags":{"type":"array","items":{"type":"string"},"description":"Set of additional CPU flags.\n"},"hotplugged":{"type":"integer","description":"The number of hotplugged vCPUs.\n"},"limit":{"type":"integer","description":"Limit of CPU usage.\n"},"numa":{"type":"boolean","description":"Enable NUMA.\n"},"sockets":{"type":"integer","description":"The number of CPU sockets.\n"},"type":{"type":"string","description":"Emulated CPU type.\n"},"units":{"type":"integer","description":"CPU weight for a VM\n"}},"type":"object","required":["affinity","architecture","cores","flags","hotplugged","limit","numa","sockets","type","units"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/getVm2Rng:getVm2Rng":{"properties":{"maxBytes":{"type":"integer","description":"Maximum bytes of entropy allowed to get injected into the guest every period.\n"},"period":{"type":"integer","description":"Period in milliseconds to limit entropy injection to the guest.\n"},"source":{"type":"string","description":"The entropy source for the RNG device.\n"}},"type":"object","required":["maxBytes","period","source"],"language":{"nodejs":{"requiredInputs":[]}}},"proxmoxve:index/getVm2Timeouts:getVm2Timeouts":{"properties":{"read":{"type":"string","description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n"}},"type":"object"},"proxmoxve:index/getVm2Vga:getVm2Vga":{"properties":{"clipboard":{"type":"string","description":"Enable a specific clipboard.\n"},"memory":{"type":"integer","description":"The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n"},"type":{"type":"string","description":"The VGA type.\n"}},"type":"object","required":["clipboard","memory","type"],"language":{"nodejs":{"requiredInputs":[]}}}},"provider":{"description":"The provider type for the proxmox package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","properties":{"apiToken":{"type":"string","description":"The API token for the Proxmox VE API.","secret":true},"authTicket":{"type":"string","description":"The pre-authenticated Ticket for the Proxmox VE API.","secret":true},"csrfPreventionToken":{"type":"string","description":"The pre-authenticated CSRF Prevention Token for the Proxmox VE API.","secret":true},"endpoint":{"type":"string","description":"The endpoint for the Proxmox VE API."},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step."},"minTls":{"type":"string","description":"The minimum required TLS version for API calls.Supported values: `1.0|1.1|1.2|1.3`. Defaults to `1.3`."},"otp":{"type":"string","description":"The one-time password for the Proxmox VE API.","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`otp`\" pulumi-lang-dotnet=\"`Otp`\" pulumi-lang-go=\"`otp`\" pulumi-lang-python=\"`otp`\" pulumi-lang-yaml=\"`otp`\" pulumi-lang-java=\"`otp`\"\u003e`otp`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e attribute instead."},"password":{"type":"string","description":"The password for the Proxmox VE API.","secret":true},"randomVmIdEnd":{"type":"integer","description":"The ending number for random VM / Container IDs."},"randomVmIdStart":{"type":"integer","description":"The starting number for random VM / Container IDs."},"randomVmIds":{"type":"boolean","description":"Whether to generate random VM / Container IDs."},"ssh":{"$ref":"#/types/proxmoxve:index/ProviderSsh:ProviderSsh","description":"The SSH configuration for the Proxmox nodes."},"tmpDir":{"type":"string","description":"The alternative temporary directory."},"username":{"type":"string","description":"The username for the Proxmox VE API."}},"inputProperties":{"apiToken":{"type":"string","description":"The API token for the Proxmox VE API.","secret":true},"authTicket":{"type":"string","description":"The pre-authenticated Ticket for the Proxmox VE API.","secret":true},"csrfPreventionToken":{"type":"string","description":"The pre-authenticated CSRF Prevention Token for the Proxmox VE API.","secret":true},"endpoint":{"type":"string","description":"The endpoint for the Proxmox VE API."},"insecure":{"type":"boolean","description":"Whether to skip the TLS verification step."},"minTls":{"type":"string","description":"The minimum required TLS version for API calls.Supported values: `1.0|1.1|1.2|1.3`. Defaults to `1.3`."},"otp":{"type":"string","description":"The one-time password for the Proxmox VE API.","deprecationMessage":"The \u003cspan pulumi-lang-nodejs=\"`otp`\" pulumi-lang-dotnet=\"`Otp`\" pulumi-lang-go=\"`otp`\" pulumi-lang-python=\"`otp`\" pulumi-lang-yaml=\"`otp`\" pulumi-lang-java=\"`otp`\"\u003e`otp`\u003c/span\u003e attribute is deprecated and will be removed in a future release. Please use the \u003cspan pulumi-lang-nodejs=\"`apiToken`\" pulumi-lang-dotnet=\"`ApiToken`\" pulumi-lang-go=\"`apiToken`\" pulumi-lang-python=\"`api_token`\" pulumi-lang-yaml=\"`apiToken`\" pulumi-lang-java=\"`apiToken`\"\u003e`api_token`\u003c/span\u003e attribute instead."},"password":{"type":"string","description":"The password for the Proxmox VE API.","secret":true},"randomVmIdEnd":{"type":"integer","description":"The ending number for random VM / Container IDs."},"randomVmIdStart":{"type":"integer","description":"The starting number for random VM / Container IDs."},"randomVmIds":{"type":"boolean","description":"Whether to generate random VM / Container IDs."},"ssh":{"$ref":"#/types/proxmoxve:index/ProviderSsh:ProviderSsh","description":"The SSH configuration for the Proxmox nodes."},"tmpDir":{"type":"string","description":"The alternative temporary directory."},"username":{"type":"string","description":"The username for the Proxmox VE API."}},"methods":{"terraformConfig":"pulumi:providers:proxmoxve/terraformConfig"}},"resources":{"proxmoxve:Acme/certificate:Certificate":{"description":"Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node.\n\n## Example Usage\n\n### Basic ACME Certificate with HTTP-01 Challenge\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// First, create an ACME account\nconst example = new proxmoxve.AcmeAccount(\"example\", {\n name: \"production\",\n contact: \"admin@example.com\",\n directory: \"https://acme-v02.api.letsencrypt.org/directory\",\n tos: \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n});\n// Order a certificate for the node\nconst exampleCertificate = new proxmoxve.acme.Certificate(\"example\", {\n nodeName: \"pve\",\n account: example.name,\n domains: [{\n domain: \"pve.example.com\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# First, create an ACME account\nexample = proxmoxve.AcmeAccount(\"example\",\n name=\"production\",\n contact=\"admin@example.com\",\n directory=\"https://acme-v02.api.letsencrypt.org/directory\",\n tos=\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n# Order a certificate for the node\nexample_certificate = proxmoxve.acme.Certificate(\"example\",\n node_name=\"pve\",\n account=example.name,\n domains=[{\n \"domain\": \"pve.example.com\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // First, create an ACME account\n var example = new ProxmoxVE.AcmeAccount(\"example\", new()\n {\n Name = \"production\",\n Contact = \"admin@example.com\",\n Directory = \"https://acme-v02.api.letsencrypt.org/directory\",\n Tos = \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n });\n\n // Order a certificate for the node\n var exampleCertificate = new ProxmoxVE.Acme.Certificate(\"example\", new()\n {\n NodeName = \"pve\",\n Account = example.Name,\n Domains = new[]\n {\n new ProxmoxVE.Acme.Inputs.CertificateDomainArgs\n {\n Domain = \"pve.example.com\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// First, create an ACME account\n\t\texample, err := proxmoxve.NewAcmeAccount(ctx, \"example\", \u0026proxmoxve.AcmeAccountArgs{\n\t\t\tName: pulumi.String(\"production\"),\n\t\t\tContact: pulumi.String(\"admin@example.com\"),\n\t\t\tDirectory: pulumi.String(\"https://acme-v02.api.letsencrypt.org/directory\"),\n\t\t\tTos: pulumi.String(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Order a certificate for the node\n\t\t_, err = acme.NewCertificate(ctx, \"example\", \u0026acme.CertificateArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tAccount: example.Name,\n\t\t\tDomains: acme.CertificateDomainArray{\n\t\t\t\t\u0026acme.CertificateDomainArgs{\n\t\t\t\t\tDomain: pulumi.String(\"pve.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccount;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;\nimport com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // First, create an ACME account\n var example = new AcmeAccount(\"example\", AcmeAccountArgs.builder()\n .name(\"production\")\n .contact(\"admin@example.com\")\n .directory(\"https://acme-v02.api.letsencrypt.org/directory\")\n .tos(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n .build());\n\n // Order a certificate for the node\n var exampleCertificate = new Certificate(\"exampleCertificate\", CertificateArgs.builder()\n .nodeName(\"pve\")\n .account(example.name())\n .domains(CertificateDomainArgs.builder()\n .domain(\"pve.example.com\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # First, create an ACME account\n example:\n type: proxmoxve:AcmeAccount\n properties:\n name: production\n contact: admin@example.com\n directory: https://acme-v02.api.letsencrypt.org/directory\n tos: https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\n # Order a certificate for the node\n exampleCertificate:\n type: proxmoxve:Acme:Certificate\n name: example\n properties:\n nodeName: pve\n account: ${example.name}\n domains:\n - domain: pve.example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### ACME Certificate with DNS-01 Challenge\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// Create an ACME account\nconst example = new proxmoxve.AcmeAccount(\"example\", {\n name: \"production\",\n contact: \"admin@example.com\",\n directory: \"https://acme-v02.api.letsencrypt.org/directory\",\n tos: \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n});\n// Configure a DNS plugin (Desec example)\nconst desec = new proxmoxve.AcmeDnsPlugin(\"desec\", {\n plugin: \"desec\",\n api: \"desec\",\n data: {\n DEDYN_TOKEN: dedynToken,\n },\n});\n// Order a certificate using the DNS plugin\nconst test = new proxmoxve.acme.Certificate(\"test\", {\n nodeName: \"pve\",\n account: example.name,\n force: false,\n domains: [{\n domain: \"pve.example.dedyn.io\",\n plugin: desec.plugin,\n }],\n}, {\n dependsOn: [\n example,\n desec,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# Create an ACME account\nexample = proxmoxve.AcmeAccount(\"example\",\n name=\"production\",\n contact=\"admin@example.com\",\n directory=\"https://acme-v02.api.letsencrypt.org/directory\",\n tos=\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n# Configure a DNS plugin (Desec example)\ndesec = proxmoxve.AcmeDnsPlugin(\"desec\",\n plugin=\"desec\",\n api=\"desec\",\n data={\n \"DEDYN_TOKEN\": dedyn_token,\n })\n# Order a certificate using the DNS plugin\ntest = proxmoxve.acme.Certificate(\"test\",\n node_name=\"pve\",\n account=example.name,\n force=False,\n domains=[{\n \"domain\": \"pve.example.dedyn.io\",\n \"plugin\": desec.plugin,\n }],\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n desec,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Create an ACME account\n var example = new ProxmoxVE.AcmeAccount(\"example\", new()\n {\n Name = \"production\",\n Contact = \"admin@example.com\",\n Directory = \"https://acme-v02.api.letsencrypt.org/directory\",\n Tos = \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n });\n\n // Configure a DNS plugin (Desec example)\n var desec = new ProxmoxVE.AcmeDnsPlugin(\"desec\", new()\n {\n Plugin = \"desec\",\n Api = \"desec\",\n Data = \n {\n { \"DEDYN_TOKEN\", dedynToken },\n },\n });\n\n // Order a certificate using the DNS plugin\n var test = new ProxmoxVE.Acme.Certificate(\"test\", new()\n {\n NodeName = \"pve\",\n Account = example.Name,\n Force = false,\n Domains = new[]\n {\n new ProxmoxVE.Acme.Inputs.CertificateDomainArgs\n {\n Domain = \"pve.example.dedyn.io\",\n Plugin = desec.Plugin,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n desec,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Create an ACME account\n\t\texample, err := proxmoxve.NewAcmeAccount(ctx, \"example\", \u0026proxmoxve.AcmeAccountArgs{\n\t\t\tName: pulumi.String(\"production\"),\n\t\t\tContact: pulumi.String(\"admin@example.com\"),\n\t\t\tDirectory: pulumi.String(\"https://acme-v02.api.letsencrypt.org/directory\"),\n\t\t\tTos: pulumi.String(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Configure a DNS plugin (Desec example)\n\t\tdesec, err := proxmoxve.NewAcmeDnsPlugin(ctx, \"desec\", \u0026proxmoxve.AcmeDnsPluginArgs{\n\t\t\tPlugin: pulumi.String(\"desec\"),\n\t\t\tApi: pulumi.String(\"desec\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"DEDYN_TOKEN\": pulumi.Any(dedynToken),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Order a certificate using the DNS plugin\n\t\t_, err = acme.NewCertificate(ctx, \"test\", \u0026acme.CertificateArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tAccount: example.Name,\n\t\t\tForce: pulumi.Bool(false),\n\t\t\tDomains: acme.CertificateDomainArray{\n\t\t\t\t\u0026acme.CertificateDomainArgs{\n\t\t\t\t\tDomain: pulumi.String(\"pve.example.dedyn.io\"),\n\t\t\t\t\tPlugin: desec.Plugin,\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tdesec,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccount;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPlugin;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPluginArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;\nimport com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // Create an ACME account\n var example = new AcmeAccount(\"example\", AcmeAccountArgs.builder()\n .name(\"production\")\n .contact(\"admin@example.com\")\n .directory(\"https://acme-v02.api.letsencrypt.org/directory\")\n .tos(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n .build());\n\n // Configure a DNS plugin (Desec example)\n var desec = new AcmeDnsPlugin(\"desec\", AcmeDnsPluginArgs.builder()\n .plugin(\"desec\")\n .api(\"desec\")\n .data(Map.of(\"DEDYN_TOKEN\", dedynToken))\n .build());\n\n // Order a certificate using the DNS plugin\n var test = new Certificate(\"test\", CertificateArgs.builder()\n .nodeName(\"pve\")\n .account(example.name())\n .force(false)\n .domains(CertificateDomainArgs.builder()\n .domain(\"pve.example.dedyn.io\")\n .plugin(desec.plugin())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n desec)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Create an ACME account\n example:\n type: proxmoxve:AcmeAccount\n properties:\n name: production\n contact: admin@example.com\n directory: https://acme-v02.api.letsencrypt.org/directory\n tos: https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\n # Configure a DNS plugin (Desec example)\n desec:\n type: proxmoxve:AcmeDnsPlugin\n properties:\n plugin: desec\n api: desec\n data:\n DEDYN_TOKEN: ${dedynToken}\n # Order a certificate using the DNS plugin\n test:\n type: proxmoxve:Acme:Certificate\n properties:\n nodeName: pve\n account: ${example.name}\n force: false\n domains:\n - domain: pve.example.dedyn.io\n plugin: ${desec.plugin}\n options:\n dependsOn:\n - ${example}\n - ${desec}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Force Certificate Renewal\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst exampleForce = new proxmoxve.acme.Certificate(\"example_force\", {\n nodeName: \"pve\",\n account: example.name,\n force: true,\n domains: [{\n domain: \"pve.example.com\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample_force = proxmoxve.acme.Certificate(\"example_force\",\n node_name=\"pve\",\n account=example[\"name\"],\n force=True,\n domains=[{\n \"domain\": \"pve.example.com\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleForce = new ProxmoxVE.Acme.Certificate(\"example_force\", new()\n {\n NodeName = \"pve\",\n Account = example.Name,\n Force = true,\n Domains = new[]\n {\n new ProxmoxVE.Acme.Inputs.CertificateDomainArgs\n {\n Domain = \"pve.example.com\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := acme.NewCertificate(ctx, \"example_force\", \u0026acme.CertificateArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tAccount: pulumi.Any(example.Name),\n\t\t\tForce: pulumi.Bool(true),\n\t\t\tDomains: acme.CertificateDomainArray{\n\t\t\t\t\u0026acme.CertificateDomainArgs{\n\t\t\t\t\tDomain: pulumi.String(\"pve.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;\nimport com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleForce = new Certificate(\"exampleForce\", CertificateArgs.builder()\n .nodeName(\"pve\")\n .account(example.name())\n .force(true)\n .domains(CertificateDomainArgs.builder()\n .domain(\"pve.example.com\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleForce:\n type: proxmoxve:Acme:Certificate\n name: example_force\n properties:\n nodeName: pve\n account: ${example.name}\n force: true # This will trigger renewal on every apply\n domains:\n - domain: pve.example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Related Resources\n\n- \u003cspan pulumi-lang-nodejs=\"`proxmoxve.AcmeAccount`\" pulumi-lang-dotnet=\"`proxmoxve.AcmeAccount`\" pulumi-lang-go=\"`AcmeAccount`\" pulumi-lang-python=\"`AcmeAccount`\" pulumi-lang-yaml=\"`proxmoxve.AcmeAccount`\" pulumi-lang-java=\"`proxmoxve.AcmeAccount`\"\u003e`proxmoxve.AcmeAccount`\u003c/span\u003e - Manages ACME accounts\n- \u003cspan pulumi-lang-nodejs=\"`proxmoxve.AcmeDnsPlugin`\" pulumi-lang-dotnet=\"`proxmoxve.AcmeDnsPlugin`\" pulumi-lang-go=\"`AcmeDnsPlugin`\" pulumi-lang-python=\"`AcmeDnsPlugin`\" pulumi-lang-yaml=\"`proxmoxve.AcmeDnsPlugin`\" pulumi-lang-java=\"`proxmoxve.AcmeDnsPlugin`\"\u003e`proxmoxve.AcmeDnsPlugin`\u003c/span\u003e - Manages ACME DNS plugins for DNS-01 challenges\n- \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Certifi`\" pulumi-lang-dotnet=\"`proxmoxve.Certifi`\" pulumi-lang-go=\"`Certifi`\" pulumi-lang-python=\"`Certifi`\" pulumi-lang-yaml=\"`proxmoxve.Certifi`\" pulumi-lang-java=\"`proxmoxve.Certifi`\"\u003e`proxmoxve.Certifi`\u003c/span\u003e - Manages custom SSL/TLS certificates (non-ACME)\n\n## Import\n\nACME certificates can be imported using the node name:\n\n#!/usr/bin/env sh\n\nACME certificates can be imported using the node name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Acme/certificate:Certificate example pve\n```\n\n","properties":{"account":{"type":"string","description":"The ACME account name to use for ordering the certificate."},"certificate":{"type":"string","description":"The PEM-encoded certificate data.","language":{"csharp":{"name":"certificatePem"}}},"domains":{"type":"array","items":{"$ref":"#/types/proxmoxve:Acme/CertificateDomain:CertificateDomain"},"description":"The list of domains to include in the certificate. At least one domain is required."},"fingerprint":{"type":"string","description":"The certificate fingerprint."},"force":{"type":"boolean","description":"Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply."},"issuer":{"type":"string","description":"The certificate issuer."},"nodeName":{"type":"string","description":"The name of the Proxmox VE node for which to order/manage the ACME certificate."},"notAfter":{"type":"string","description":"The certificate expiration timestamp."},"notBefore":{"type":"string","description":"The certificate start timestamp."},"subject":{"type":"string","description":"The certificate subject."},"subjectAlternativeNames":{"type":"array","items":{"type":"string"},"description":"The certificate subject alternative names (SANs)."}},"required":["account","certificate","domains","fingerprint","force","issuer","nodeName","notAfter","notBefore","subject","subjectAlternativeNames"],"inputProperties":{"account":{"type":"string","description":"The ACME account name to use for ordering the certificate."},"domains":{"type":"array","items":{"$ref":"#/types/proxmoxve:Acme/CertificateDomain:CertificateDomain"},"description":"The list of domains to include in the certificate. At least one domain is required."},"force":{"type":"boolean","description":"Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply."},"nodeName":{"type":"string","description":"The name of the Proxmox VE node for which to order/manage the ACME certificate."}},"requiredInputs":["account","domains","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering Certificate resources.\n","properties":{"account":{"type":"string","description":"The ACME account name to use for ordering the certificate."},"certificate":{"type":"string","description":"The PEM-encoded certificate data.","language":{"csharp":{"name":"certificatePem"}}},"domains":{"type":"array","items":{"$ref":"#/types/proxmoxve:Acme/CertificateDomain:CertificateDomain"},"description":"The list of domains to include in the certificate. At least one domain is required."},"fingerprint":{"type":"string","description":"The certificate fingerprint."},"force":{"type":"boolean","description":"Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply."},"issuer":{"type":"string","description":"The certificate issuer."},"nodeName":{"type":"string","description":"The name of the Proxmox VE node for which to order/manage the ACME certificate."},"notAfter":{"type":"string","description":"The certificate expiration timestamp."},"notBefore":{"type":"string","description":"The certificate start timestamp."},"subject":{"type":"string","description":"The certificate subject."},"subjectAlternativeNames":{"type":"array","items":{"type":"string"},"description":"The certificate subject alternative names (SANs)."}},"type":"object"}},"proxmoxve:Apt/repository:Repository":{"description":"Manages an APT repository of a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.apt.Repository(\"example\", {\n enabled: true,\n filePath: \"/etc/apt/sources.list\",\n index: 0,\n node: \"pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.apt.Repository(\"example\",\n enabled=True,\n file_path=\"/etc/apt/sources.list\",\n index=0,\n node=\"pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Apt.Repository(\"example\", new()\n {\n Enabled = true,\n FilePath = \"/etc/apt/sources.list\",\n Index = 0,\n Node = \"pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apt.NewRepository(ctx, \"example\", \u0026apt.RepositoryArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tFilePath: pulumi.String(\"/etc/apt/sources.list\"),\n\t\t\tIndex: pulumi.Int(0),\n\t\t\tNode: pulumi.String(\"pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.Repository;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Repository(\"example\", RepositoryArgs.builder()\n .enabled(true)\n .filePath(\"/etc/apt/sources.list\")\n .index(0)\n .node(\"pve\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Apt:Repository\n properties:\n enabled: true\n filePath: /etc/apt/sources.list\n index: 0\n node: pve\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nAn APT repository can be imported using a comma-separated list consisting of the name of the Proxmox VE node,\n\nthe absolute source list file path, and the index in the exact same order, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Apt/repository:Repository example pve,/etc/apt/sources.list,0\n```\n\n","properties":{"comment":{"type":"string","description":"The associated comment.\n"},"components":{"type":"array","items":{"type":"string"},"description":"The list of components.\n"},"enabled":{"type":"boolean","description":"Indicates the activation status.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"fileType":{"type":"string","description":"The format of the defining source list file.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"packageTypes":{"type":"array","items":{"type":"string"},"description":"The list of package types.\n"},"suites":{"type":"array","items":{"type":"string"},"description":"The list of package distributions.\n"},"uris":{"type":"array","items":{"type":"string"},"description":"The list of repository URIs.\n"}},"required":["comment","components","enabled","filePath","fileType","index","node","packageTypes","suites","uris"],"inputProperties":{"enabled":{"type":"boolean","description":"Indicates the activation status.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"requiredInputs":["filePath","index","node"],"stateInputs":{"description":"Input properties used for looking up and filtering Repository resources.\n","properties":{"comment":{"type":"string","description":"The associated comment.\n"},"components":{"type":"array","items":{"type":"string"},"description":"The list of components.\n"},"enabled":{"type":"boolean","description":"Indicates the activation status.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"fileType":{"type":"string","description":"The format of the defining source list file.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"packageTypes":{"type":"array","items":{"type":"string"},"description":"The list of package types.\n"},"suites":{"type":"array","items":{"type":"string"},"description":"The list of package distributions.\n"},"uris":{"type":"array","items":{"type":"string"},"description":"The list of repository URIs.\n"}},"type":"object"}},"proxmoxve:Apt/standard/repository:Repository":{"description":"Manages an APT standard repository of a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.apt.standard.Repository(\"example\", {\n handle: \"no-subscription\",\n node: \"pve\",\n});\nconst exampleRepository = new proxmoxve.apt.Repository(\"example\", {\n enabled: true,\n filePath: example.filePath,\n index: example.index,\n node: example.node,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.apt.standard.Repository(\"example\",\n handle=\"no-subscription\",\n node=\"pve\")\nexample_repository = proxmoxve.apt.Repository(\"example\",\n enabled=True,\n file_path=example.file_path,\n index=example.index,\n node=example.node)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Apt.Standard.Repository(\"example\", new()\n {\n Handle = \"no-subscription\",\n Node = \"pve\",\n });\n\n var exampleRepository = new ProxmoxVE.Apt.Repository(\"example\", new()\n {\n Enabled = true,\n FilePath = example.FilePath,\n Index = example.Index,\n Node = example.Node,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := apt.NewRepository(ctx, \"example\", \u0026apt.RepositoryArgs{\n\t\t\tHandle: pulumi.String(\"no-subscription\"),\n\t\t\tNode: pulumi.String(\"pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apt.NewRepository(ctx, \"example\", \u0026apt.RepositoryArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tFilePath: example.FilePath,\n\t\t\tIndex: example.Index,\n\t\t\tNode: example.Node,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.Repository;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Repository(\"example\", RepositoryArgs.builder()\n .handle(\"no-subscription\")\n .node(\"pve\")\n .build());\n\n var exampleRepository = new Repository(\"exampleRepository\", RepositoryArgs.builder()\n .enabled(true)\n .filePath(example.filePath())\n .index(example.index())\n .node(example.node())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Apt/standard:Repository\n properties:\n handle: no-subscription\n node: pve\n exampleRepository:\n type: proxmoxve:Apt:Repository\n name: example\n properties:\n enabled: true\n filePath: ${example.filePath}\n index: ${example.index}\n node: ${example.node}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nAn APT standard repository can be imported using a comma-separated list consisting of the name of the Proxmox VE node,\n\nand the standard repository handle in the exact same order, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Apt/standard/repository:Repository example pve,no-subscription\n```\n\n","properties":{"description":{"type":"string","description":"The description of the APT standard repository.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this standard repository.\n"},"handle":{"type":"string","description":"The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"name":{"type":"string","description":"The name of the APT standard repository.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"status":{"type":"integer","description":"Indicates the activation status.\n"}},"required":["description","filePath","handle","index","name","node","status"],"inputProperties":{"handle":{"type":"string","description":"The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"requiredInputs":["handle","node"],"stateInputs":{"description":"Input properties used for looking up and filtering Repository resources.\n","properties":{"description":{"type":"string","description":"The description of the APT standard repository.\n"},"filePath":{"type":"string","description":"The absolute path of the source list file that contains this standard repository.\n"},"handle":{"type":"string","description":"The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"name":{"type":"string","description":"The name of the APT standard repository.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"},"status":{"type":"integer","description":"Indicates the activation status.\n"}},"type":"object"}},"proxmoxve:CT/container:Container":{"description":"Manages a container.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as random from \"@pulumi/random\";\nimport * as std from \"@pulumi/std\";\nimport * as tls from \"@pulumi/tls\";\n\nexport = async () =\u003e {\n const ubuntu2504LxcImg = new proxmoxve.download.File(\"ubuntu_2504_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n url: \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n const ubuntuContainerPassword = new random.RandomPassword(\"ubuntu_container_password\", {\n length: 16,\n overrideSpecial: \"_%@\",\n special: true,\n });\n const ubuntuContainerKey = new tls.PrivateKey(\"ubuntu_container_key\", {\n algorithm: \"RSA\",\n rsaBits: 2048,\n });\n const ubuntuContainer = new proxmoxve.ct.Container(\"ubuntu_container\", {\n description: \"Managed by Pulumi\",\n nodeName: \"first-node\",\n vmId: 1234,\n unprivileged: true,\n features: {\n nesting: true,\n },\n initialization: {\n hostname: \"terraform-provider-proxmox-ubuntu-container\",\n ipConfigs: [{\n ipv4: {\n address: \"dhcp\",\n },\n }],\n userAccount: {\n keys: [std.trimspaceOutput({\n input: ubuntuContainerKey.publicKeyOpenssh,\n }).apply(invoke =\u003e invoke.result)],\n password: ubuntuContainerPassword.result,\n },\n },\n networkInterfaces: [{\n name: \"veth0\",\n }],\n disk: {\n datastoreId: \"local-lvm\",\n size: 4,\n },\n operatingSystem: {\n templateFileId: ubuntu2504LxcImg.id,\n type: \"ubuntu\",\n },\n mountPoints: [\n {\n volume: \"/mnt/bindmounts/shared\",\n path: \"/mnt/shared\",\n },\n {\n volume: \"local-lvm\",\n size: \"10G\",\n path: \"/mnt/volume\",\n },\n {\n volume: \"local-lvm:subvol-108-disk-101\",\n size: \"10G\",\n path: \"/mnt/data\",\n },\n ],\n startup: {\n order: 3,\n upDelay: 60,\n downDelay: 60,\n },\n });\n return {\n ubuntuContainerPassword: ubuntuContainerPassword.result,\n ubuntuContainerPrivateKey: ubuntuContainerKey.privateKeyPem,\n ubuntuContainerPublicKey: ubuntuContainerKey.publicKeyOpenssh,\n };\n}\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_random as random\nimport pulumi_std as std\nimport pulumi_tls as tls\n\nubuntu2504_lxc_img = proxmoxve.download.File(\"ubuntu_2504_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n url=\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\nubuntu_container_password = random.RandomPassword(\"ubuntu_container_password\",\n length=16,\n override_special=\"_%@\",\n special=True)\nubuntu_container_key = tls.PrivateKey(\"ubuntu_container_key\",\n algorithm=\"RSA\",\n rsa_bits=2048)\nubuntu_container = proxmoxve.ct.Container(\"ubuntu_container\",\n description=\"Managed by Pulumi\",\n node_name=\"first-node\",\n vm_id=1234,\n unprivileged=True,\n features={\n \"nesting\": True,\n },\n initialization={\n \"hostname\": \"terraform-provider-proxmox-ubuntu-container\",\n \"ip_configs\": [{\n \"ipv4\": {\n \"address\": \"dhcp\",\n },\n }],\n \"user_account\": {\n \"keys\": [std.trimspace_output(input=ubuntu_container_key.public_key_openssh).apply(lambda invoke: invoke.result)],\n \"password\": ubuntu_container_password.result,\n },\n },\n network_interfaces=[{\n \"name\": \"veth0\",\n }],\n disk={\n \"datastore_id\": \"local-lvm\",\n \"size\": 4,\n },\n operating_system={\n \"template_file_id\": ubuntu2504_lxc_img.id,\n \"type\": \"ubuntu\",\n },\n mount_points=[\n {\n \"volume\": \"/mnt/bindmounts/shared\",\n \"path\": \"/mnt/shared\",\n },\n {\n \"volume\": \"local-lvm\",\n \"size\": \"10G\",\n \"path\": \"/mnt/volume\",\n },\n {\n \"volume\": \"local-lvm:subvol-108-disk-101\",\n \"size\": \"10G\",\n \"path\": \"/mnt/data\",\n },\n ],\n startup={\n \"order\": 3,\n \"up_delay\": 60,\n \"down_delay\": 60,\n })\npulumi.export(\"ubuntuContainerPassword\", ubuntu_container_password.result)\npulumi.export(\"ubuntuContainerPrivateKey\", ubuntu_container_key.private_key_pem)\npulumi.export(\"ubuntuContainerPublicKey\", ubuntu_container_key.public_key_openssh)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Random = Pulumi.Random;\nusing Std = Pulumi.Std;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntu2504LxcImg = new ProxmoxVE.Download.File(\"ubuntu_2504_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n Url = \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n\n var ubuntuContainerPassword = new Random.RandomPassword(\"ubuntu_container_password\", new()\n {\n Length = 16,\n OverrideSpecial = \"_%@\",\n Special = true,\n });\n\n var ubuntuContainerKey = new Tls.PrivateKey(\"ubuntu_container_key\", new()\n {\n Algorithm = \"RSA\",\n RsaBits = 2048,\n });\n\n var ubuntuContainer = new ProxmoxVE.CT.Container(\"ubuntu_container\", new()\n {\n Description = \"Managed by Pulumi\",\n NodeName = \"first-node\",\n VmId = 1234,\n Unprivileged = true,\n Features = new ProxmoxVE.CT.Inputs.ContainerFeaturesArgs\n {\n Nesting = true,\n },\n Initialization = new ProxmoxVE.CT.Inputs.ContainerInitializationArgs\n {\n Hostname = \"terraform-provider-proxmox-ubuntu-container\",\n IpConfigs = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigArgs\n {\n Ipv4 = new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigIpv4Args\n {\n Address = \"dhcp\",\n },\n },\n },\n UserAccount = new ProxmoxVE.CT.Inputs.ContainerInitializationUserAccountArgs\n {\n Keys = new[]\n {\n Std.Trimspace.Invoke(new()\n {\n Input = ubuntuContainerKey.PublicKeyOpenssh,\n }).Apply(invoke =\u003e invoke.Result),\n },\n Password = ubuntuContainerPassword.Result,\n },\n },\n NetworkInterfaces = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerNetworkInterfaceArgs\n {\n Name = \"veth0\",\n },\n },\n Disk = new ProxmoxVE.CT.Inputs.ContainerDiskArgs\n {\n DatastoreId = \"local-lvm\",\n Size = 4,\n },\n OperatingSystem = new ProxmoxVE.CT.Inputs.ContainerOperatingSystemArgs\n {\n TemplateFileId = ubuntu2504LxcImg.Id,\n Type = \"ubuntu\",\n },\n MountPoints = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"/mnt/bindmounts/shared\",\n Path = \"/mnt/shared\",\n },\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"local-lvm\",\n Size = \"10G\",\n Path = \"/mnt/volume\",\n },\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"local-lvm:subvol-108-disk-101\",\n Size = \"10G\",\n Path = \"/mnt/data\",\n },\n },\n Startup = new ProxmoxVE.CT.Inputs.ContainerStartupArgs\n {\n Order = 3,\n UpDelay = 60,\n DownDelay = 60,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ubuntuContainerPassword\"] = ubuntuContainerPassword.Result,\n [\"ubuntuContainerPrivateKey\"] = ubuntuContainerKey.PrivateKeyPem,\n [\"ubuntuContainerPublicKey\"] = ubuntuContainerKey.PublicKeyOpenssh,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ct\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/download\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntu2504LxcImg, err := download.NewFile(ctx, \"ubuntu_2504_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tUrl: pulumi.String(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerPassword, err := random.NewRandomPassword(ctx, \"ubuntu_container_password\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tOverrideSpecial: pulumi.String(\"_%@\"),\n\t\t\tSpecial: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerKey, err := tls.NewPrivateKey(ctx, \"ubuntu_container_key\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t\tRsaBits: pulumi.Int(2048),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ct.NewContainer(ctx, \"ubuntu_container\", \u0026ct.ContainerArgs{\n\t\t\tDescription: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tVmId: pulumi.Int(1234),\n\t\t\tUnprivileged: pulumi.Bool(true),\n\t\t\tFeatures: \u0026ct.ContainerFeaturesArgs{\n\t\t\t\tNesting: pulumi.Bool(true),\n\t\t\t},\n\t\t\tInitialization: \u0026ct.ContainerInitializationArgs{\n\t\t\t\tHostname: pulumi.String(\"terraform-provider-proxmox-ubuntu-container\"),\n\t\t\t\tIpConfigs: ct.ContainerInitializationIpConfigArray{\n\t\t\t\t\t\u0026ct.ContainerInitializationIpConfigArgs{\n\t\t\t\t\t\tIpv4: \u0026ct.ContainerInitializationIpConfigIpv4Args{\n\t\t\t\t\t\t\tAddress: pulumi.String(\"dhcp\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUserAccount: \u0026ct.ContainerInitializationUserAccountArgs{\n\t\t\t\t\tKeys: pulumi.StringArray{\n\t\t\t\t\t\tstd.TrimspaceOutput(ctx, std.TrimspaceOutputArgs{\n\t\t\t\t\t\t\tInput: ubuntuContainerKey.PublicKeyOpenssh,\n\t\t\t\t\t\t}, nil).ApplyT(func(invoke std.TrimspaceResult) (*string, error) {\n\t\t\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t},\n\t\t\t\t\tPassword: ubuntuContainerPassword.Result,\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: ct.ContainerNetworkInterfaceArray{\n\t\t\t\t\u0026ct.ContainerNetworkInterfaceArgs{\n\t\t\t\t\tName: pulumi.String(\"veth0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisk: \u0026ct.ContainerDiskArgs{\n\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\tSize: pulumi.Int(4),\n\t\t\t},\n\t\t\tOperatingSystem: \u0026ct.ContainerOperatingSystemArgs{\n\t\t\t\tTemplateFileId: ubuntu2504LxcImg.ID(),\n\t\t\t\tType: pulumi.String(\"ubuntu\"),\n\t\t\t},\n\t\t\tMountPoints: ct.ContainerMountPointArray{\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"/mnt/bindmounts/shared\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/shared\"),\n\t\t\t\t},\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSize: pulumi.String(\"10G\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/volume\"),\n\t\t\t\t},\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"local-lvm:subvol-108-disk-101\"),\n\t\t\t\t\tSize: pulumi.String(\"10G\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/data\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStartup: \u0026ct.ContainerStartupArgs{\n\t\t\t\tOrder: pulumi.Int(3),\n\t\t\t\tUpDelay: pulumi.Int(60),\n\t\t\t\tDownDelay: pulumi.Int(60),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ubuntuContainerPassword\", ubuntuContainerPassword.Result)\n\t\tctx.Export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.PrivateKeyPem)\n\t\tctx.Export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.PublicKeyOpenssh)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Download.File;\nimport io.muehlbachler.pulumi.proxmoxve.Download.FileArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport io.muehlbachler.pulumi.proxmoxve.CT.Container;\nimport io.muehlbachler.pulumi.proxmoxve.CT.ContainerArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerFeaturesArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationUserAccountArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerNetworkInterfaceArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerDiskArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerOperatingSystemArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerMountPointArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerStartupArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntu2504LxcImg = new File(\"ubuntu2504LxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .url(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\n .build());\n\n var ubuntuContainerPassword = new RandomPassword(\"ubuntuContainerPassword\", RandomPasswordArgs.builder()\n .length(16)\n .overrideSpecial(\"_%@\")\n .special(true)\n .build());\n\n var ubuntuContainerKey = new PrivateKey(\"ubuntuContainerKey\", PrivateKeyArgs.builder()\n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var ubuntuContainer = new Container(\"ubuntuContainer\", ContainerArgs.builder()\n .description(\"Managed by Pulumi\")\n .nodeName(\"first-node\")\n .vmId(1234)\n .unprivileged(true)\n .features(ContainerFeaturesArgs.builder()\n .nesting(true)\n .build())\n .initialization(ContainerInitializationArgs.builder()\n .hostname(\"terraform-provider-proxmox-ubuntu-container\")\n .ipConfigs(ContainerInitializationIpConfigArgs.builder()\n .ipv4(ContainerInitializationIpConfigIpv4Args.builder()\n .address(\"dhcp\")\n .build())\n .build())\n .userAccount(ContainerInitializationUserAccountArgs.builder()\n .keys(StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(ubuntuContainerKey.publicKeyOpenssh())\n .build()).applyValue(_invoke -\u003e _invoke.result()))\n .password(ubuntuContainerPassword.result())\n .build())\n .build())\n .networkInterfaces(ContainerNetworkInterfaceArgs.builder()\n .name(\"veth0\")\n .build())\n .disk(ContainerDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .size(4)\n .build())\n .operatingSystem(ContainerOperatingSystemArgs.builder()\n .templateFileId(ubuntu2504LxcImg.id())\n .type(\"ubuntu\")\n .build())\n .mountPoints( \n ContainerMountPointArgs.builder()\n .volume(\"/mnt/bindmounts/shared\")\n .path(\"/mnt/shared\")\n .build(),\n ContainerMountPointArgs.builder()\n .volume(\"local-lvm\")\n .size(\"10G\")\n .path(\"/mnt/volume\")\n .build(),\n ContainerMountPointArgs.builder()\n .volume(\"local-lvm:subvol-108-disk-101\")\n .size(\"10G\")\n .path(\"/mnt/data\")\n .build())\n .startup(ContainerStartupArgs.builder()\n .order(3)\n .upDelay(60)\n .downDelay(60)\n .build())\n .build());\n\n ctx.export(\"ubuntuContainerPassword\", ubuntuContainerPassword.result());\n ctx.export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.privateKeyPem());\n ctx.export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.publicKeyOpenssh());\n }\n}\n```\n```yaml\nresources:\n ubuntuContainer:\n type: proxmoxve:CT:Container\n name: ubuntu_container\n properties:\n description: Managed by Pulumi\n nodeName: first-node\n vmId: 1234 # newer linux distributions require unprivileged user namespaces\n unprivileged: true\n features:\n nesting: true\n initialization:\n hostname: terraform-provider-proxmox-ubuntu-container\n ipConfigs:\n - ipv4:\n address: dhcp\n userAccount:\n keys:\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${ubuntuContainerKey.publicKeyOpenssh}\n return: result\n password: ${ubuntuContainerPassword.result}\n networkInterfaces:\n - name: veth0\n disk:\n datastoreId: local-lvm\n size: 4\n operatingSystem:\n templateFileId: ${ubuntu2504LxcImg.id}\n type: ubuntu\n mountPoints:\n - volume: /mnt/bindmounts/shared\n path: /mnt/shared\n - volume: local-lvm\n size: 10G\n path: /mnt/volume\n - volume: local-lvm:subvol-108-disk-101\n size: 10G\n path: /mnt/data\n startup:\n order: '3'\n upDelay: '60'\n downDelay: '60'\n ubuntu2504LxcImg:\n type: proxmoxve:Download:File\n name: ubuntu_2504_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n url: https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\n ubuntuContainerPassword:\n type: random:RandomPassword\n name: ubuntu_container_password\n properties:\n length: 16\n overrideSpecial: _%@\n special: true\n ubuntuContainerKey:\n type: tls:PrivateKey\n name: ubuntu_container_key\n properties:\n algorithm: RSA\n rsaBits: 2048\noutputs:\n ubuntuContainerPassword: ${ubuntuContainerPassword.result}\n ubuntuContainerPrivateKey: ${ubuntuContainerKey.privateKeyPem}\n ubuntuContainerPublicKey: ${ubuntuContainerKey.publicKeyOpenssh}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `node_name` and the `vm_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:CT/container:Container ubuntu_container first-node/1234\n```\n\n","properties":{"clone":{"$ref":"#/types/proxmoxve:CT/ContainerClone:ContainerClone","description":"The cloning configuration.\n"},"console":{"$ref":"#/types/proxmoxve:CT/ContainerConsole:ContainerConsole","description":"The console configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:CT/ContainerCpu:ContainerCpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description.\n"},"devicePassthroughs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough"},"description":"Device to pass through to the container (multiple blocks supported).\n"},"disk":{"$ref":"#/types/proxmoxve:CT/ContainerDisk:ContainerDisk","description":"The disk configuration.\n"},"environmentVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of runtime environment variables for the container init process.\n"},"features":{"$ref":"#/types/proxmoxve:CT/ContainerFeatures:ContainerFeatures","description":"The container feature flags. Changing flags (except nesting) is only allowed for `root@pam` authenticated user.\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"initialization":{"$ref":"#/types/proxmoxve:CT/ContainerInitialization:ContainerInitialization","description":"The initialization configuration.\n"},"ipv4":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv4 addresses per network devices. Returns the first address for each network device, if multiple addresses are assigned.\n"},"ipv6":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv6 addresses per network device. Returns the first address for each network device, if multiple addresses are assigned.\n"},"memory":{"$ref":"#/types/proxmoxve:CT/ContainerMemory:ContainerMemory","description":"The memory configuration.\n"},"mountPoints":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint"},"description":"A mount point"},"networkInterfaces":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface"},"description":"A network interface (multiple blocks\nsupported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the container to.\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the container to.\n"},"protection":{"type":"boolean","description":"Whether to set the protection flag of the container (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). This will prevent the container itself and its disk for remove/update operations.\n"},"startOnBoot":{"type":"boolean","description":"Automatically start container when the host\nsystem boots (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"started":{"type":"boolean","description":"Whether to start the container (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:CT/ContainerStartup:ContainerStartup","description":"Defines startup and shutdown behavior of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags the container tags. This is only meta\ninformation (defaults to `[]`). Note: Proxmox always sorts the container tags and set them to lowercase.\nIf tag contains capital letters, then Proxmox will always report a\ndifference on the resource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle\nmeta-argument to ignore changes to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"timeoutClone":{"type":"integer","description":"Timeout for cloning a container in seconds (defaults to 1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a container in seconds (defaults to 1800).\n"},"timeoutDelete":{"type":"integer","description":"Timeout for deleting a container in seconds (defaults to 60).\n"},"timeoutStart":{"type":"integer","description":"Start container timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (\u003cspan pulumi-lang-nodejs=\"`timeoutCreate`\" pulumi-lang-dotnet=\"`TimeoutCreate`\" pulumi-lang-go=\"`timeoutCreate`\" pulumi-lang-python=\"`timeout_create`\" pulumi-lang-yaml=\"`timeoutCreate`\" pulumi-lang-java=\"`timeoutCreate`\"\u003e`timeout_create`\u003c/span\u003e / \u003cspan pulumi-lang-nodejs=\"`timeoutClone`\" pulumi-lang-dotnet=\"`TimeoutClone`\" pulumi-lang-go=\"`timeoutClone`\" pulumi-lang-python=\"`timeout_clone`\" pulumi-lang-yaml=\"`timeoutClone`\" pulumi-lang-java=\"`timeoutClone`\"\u003e`timeout_clone`\u003c/span\u003e) is used instead."},"timeoutUpdate":{"type":"integer","description":"Timeout for updating a container in seconds (defaults to 1800).\n"},"unprivileged":{"type":"boolean","description":"Whether the container runs as unprivileged on the host (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"vmId":{"type":"integer","description":"The container identifier\n"},"waitForIp":{"$ref":"#/types/proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp","description":"Configuration for waiting for specific IP address types when the container starts.\n"}},"required":["ipv4","ipv6","nodeName","vmId"],"inputProperties":{"clone":{"$ref":"#/types/proxmoxve:CT/ContainerClone:ContainerClone","description":"The cloning configuration.\n"},"console":{"$ref":"#/types/proxmoxve:CT/ContainerConsole:ContainerConsole","description":"The console configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:CT/ContainerCpu:ContainerCpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description.\n"},"devicePassthroughs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough"},"description":"Device to pass through to the container (multiple blocks supported).\n"},"disk":{"$ref":"#/types/proxmoxve:CT/ContainerDisk:ContainerDisk","description":"The disk configuration.\n"},"environmentVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of runtime environment variables for the container init process.\n"},"features":{"$ref":"#/types/proxmoxve:CT/ContainerFeatures:ContainerFeatures","description":"The container feature flags. Changing flags (except nesting) is only allowed for `root@pam` authenticated user.\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"initialization":{"$ref":"#/types/proxmoxve:CT/ContainerInitialization:ContainerInitialization","description":"The initialization configuration.\n"},"memory":{"$ref":"#/types/proxmoxve:CT/ContainerMemory:ContainerMemory","description":"The memory configuration.\n"},"mountPoints":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint"},"description":"A mount point","willReplaceOnChanges":true},"networkInterfaces":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface"},"description":"A network interface (multiple blocks\nsupported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the container to.\n","willReplaceOnChanges":true},"operatingSystem":{"$ref":"#/types/proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem","description":"The Operating System configuration.\n","willReplaceOnChanges":true},"poolId":{"type":"string","description":"The identifier for a pool to assign the container to.\n","willReplaceOnChanges":true},"protection":{"type":"boolean","description":"Whether to set the protection flag of the container (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). This will prevent the container itself and its disk for remove/update operations.\n"},"startOnBoot":{"type":"boolean","description":"Automatically start container when the host\nsystem boots (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"started":{"type":"boolean","description":"Whether to start the container (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:CT/ContainerStartup:ContainerStartup","description":"Defines startup and shutdown behavior of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags the container tags. This is only meta\ninformation (defaults to `[]`). Note: Proxmox always sorts the container tags and set them to lowercase.\nIf tag contains capital letters, then Proxmox will always report a\ndifference on the resource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle\nmeta-argument to ignore changes to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a container in seconds (defaults to 1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a container in seconds (defaults to 1800).\n"},"timeoutDelete":{"type":"integer","description":"Timeout for deleting a container in seconds (defaults to 60).\n"},"timeoutStart":{"type":"integer","description":"Start container timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (\u003cspan pulumi-lang-nodejs=\"`timeoutCreate`\" pulumi-lang-dotnet=\"`TimeoutCreate`\" pulumi-lang-go=\"`timeoutCreate`\" pulumi-lang-python=\"`timeout_create`\" pulumi-lang-yaml=\"`timeoutCreate`\" pulumi-lang-java=\"`timeoutCreate`\"\u003e`timeout_create`\u003c/span\u003e / \u003cspan pulumi-lang-nodejs=\"`timeoutClone`\" pulumi-lang-dotnet=\"`TimeoutClone`\" pulumi-lang-go=\"`timeoutClone`\" pulumi-lang-python=\"`timeout_clone`\" pulumi-lang-yaml=\"`timeoutClone`\" pulumi-lang-java=\"`timeoutClone`\"\u003e`timeout_clone`\u003c/span\u003e) is used instead."},"timeoutUpdate":{"type":"integer","description":"Timeout for updating a container in seconds (defaults to 1800).\n"},"unprivileged":{"type":"boolean","description":"Whether the container runs as unprivileged on the host (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The container identifier\n"},"waitForIp":{"$ref":"#/types/proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp","description":"Configuration for waiting for specific IP address types when the container starts.\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering Container resources.\n","properties":{"clone":{"$ref":"#/types/proxmoxve:CT/ContainerClone:ContainerClone","description":"The cloning configuration.\n"},"console":{"$ref":"#/types/proxmoxve:CT/ContainerConsole:ContainerConsole","description":"The console configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:CT/ContainerCpu:ContainerCpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description.\n"},"devicePassthroughs":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerDevicePassthrough:ContainerDevicePassthrough"},"description":"Device to pass through to the container (multiple blocks supported).\n"},"disk":{"$ref":"#/types/proxmoxve:CT/ContainerDisk:ContainerDisk","description":"The disk configuration.\n"},"environmentVariables":{"type":"object","additionalProperties":{"type":"string"},"description":"A map of runtime environment variables for the container init process.\n"},"features":{"$ref":"#/types/proxmoxve:CT/ContainerFeatures:ContainerFeatures","description":"The container feature flags. Changing flags (except nesting) is only allowed for `root@pam` authenticated user.\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"initialization":{"$ref":"#/types/proxmoxve:CT/ContainerInitialization:ContainerInitialization","description":"The initialization configuration.\n"},"ipv4":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv4 addresses per network devices. Returns the first address for each network device, if multiple addresses are assigned.\n"},"ipv6":{"type":"object","additionalProperties":{"type":"string"},"description":"The map of IPv6 addresses per network device. Returns the first address for each network device, if multiple addresses are assigned.\n"},"memory":{"$ref":"#/types/proxmoxve:CT/ContainerMemory:ContainerMemory","description":"The memory configuration.\n"},"mountPoints":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint"},"description":"A mount point","willReplaceOnChanges":true},"networkInterfaces":{"type":"array","items":{"$ref":"#/types/proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface"},"description":"A network interface (multiple blocks\nsupported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the container to.\n","willReplaceOnChanges":true},"operatingSystem":{"$ref":"#/types/proxmoxve:CT/ContainerOperatingSystem:ContainerOperatingSystem","description":"The Operating System configuration.\n","willReplaceOnChanges":true},"poolId":{"type":"string","description":"The identifier for a pool to assign the container to.\n","willReplaceOnChanges":true},"protection":{"type":"boolean","description":"Whether to set the protection flag of the container (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). This will prevent the container itself and its disk for remove/update operations.\n"},"startOnBoot":{"type":"boolean","description":"Automatically start container when the host\nsystem boots (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"started":{"type":"boolean","description":"Whether to start the container (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:CT/ContainerStartup:ContainerStartup","description":"Defines startup and shutdown behavior of the container.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags the container tags. This is only meta\ninformation (defaults to `[]`). Note: Proxmox always sorts the container tags and set them to lowercase.\nIf tag contains capital letters, then Proxmox will always report a\ndifference on the resource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle\nmeta-argument to ignore changes to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a container in seconds (defaults to 1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a container in seconds (defaults to 1800).\n"},"timeoutDelete":{"type":"integer","description":"Timeout for deleting a container in seconds (defaults to 60).\n"},"timeoutStart":{"type":"integer","description":"Start container timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (\u003cspan pulumi-lang-nodejs=\"`timeoutCreate`\" pulumi-lang-dotnet=\"`TimeoutCreate`\" pulumi-lang-go=\"`timeoutCreate`\" pulumi-lang-python=\"`timeout_create`\" pulumi-lang-yaml=\"`timeoutCreate`\" pulumi-lang-java=\"`timeoutCreate`\"\u003e`timeout_create`\u003c/span\u003e / \u003cspan pulumi-lang-nodejs=\"`timeoutClone`\" pulumi-lang-dotnet=\"`TimeoutClone`\" pulumi-lang-go=\"`timeoutClone`\" pulumi-lang-python=\"`timeout_clone`\" pulumi-lang-yaml=\"`timeoutClone`\" pulumi-lang-java=\"`timeoutClone`\"\u003e`timeout_clone`\u003c/span\u003e) is used instead."},"timeoutUpdate":{"type":"integer","description":"Timeout for updating a container in seconds (defaults to 1800).\n"},"unprivileged":{"type":"boolean","description":"Whether the container runs as unprivileged on the host (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"vmId":{"type":"integer","description":"The container identifier\n"},"waitForIp":{"$ref":"#/types/proxmoxve:CT/ContainerWaitForIp:ContainerWaitForIp","description":"Configuration for waiting for specific IP address types when the container starts.\n"}},"type":"object"}},"proxmoxve:Cluster/options:Options":{"description":"Manages Proxmox VE Cluster Datacenter options.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst options = new proxmoxve.cluster.Options(\"options\", {\n language: \"en\",\n keyboard: \"pl\",\n emailFrom: \"ged@gont.earthsea\",\n bandwidthLimitMigration: 555555,\n bandwidthLimitDefault: 666666,\n maxWorkers: 5,\n migrationCidr: \"10.0.0.0/8\",\n migrationType: \"secure\",\n nextId: {\n lower: 100,\n upper: 999999999,\n },\n notify: {\n haFencingMode: \"never\",\n haFencingTarget: \"default-matcher\",\n packageUpdates: \"always\",\n packageUpdatesTarget: \"default-matcher\",\n packageReplication: \"always\",\n packageReplicationTarget: \"default-matcher\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noptions = proxmoxve.cluster.Options(\"options\",\n language=\"en\",\n keyboard=\"pl\",\n email_from=\"ged@gont.earthsea\",\n bandwidth_limit_migration=555555,\n bandwidth_limit_default=666666,\n max_workers=5,\n migration_cidr=\"10.0.0.0/8\",\n migration_type=\"secure\",\n next_id={\n \"lower\": 100,\n \"upper\": 999999999,\n },\n notify={\n \"ha_fencing_mode\": \"never\",\n \"ha_fencing_target\": \"default-matcher\",\n \"package_updates\": \"always\",\n \"package_updates_target\": \"default-matcher\",\n \"package_replication\": \"always\",\n \"package_replication_target\": \"default-matcher\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var options = new ProxmoxVE.Cluster.Options(\"options\", new()\n {\n Language = \"en\",\n Keyboard = \"pl\",\n EmailFrom = \"ged@gont.earthsea\",\n BandwidthLimitMigration = 555555,\n BandwidthLimitDefault = 666666,\n MaxWorkers = 5,\n MigrationCidr = \"10.0.0.0/8\",\n MigrationType = \"secure\",\n NextId = new ProxmoxVE.Cluster.Inputs.OptionsNextIdArgs\n {\n Lower = 100,\n Upper = 999999999,\n },\n Notify = new ProxmoxVE.Cluster.Inputs.OptionsNotifyArgs\n {\n HaFencingMode = \"never\",\n HaFencingTarget = \"default-matcher\",\n PackageUpdates = \"always\",\n PackageUpdatesTarget = \"default-matcher\",\n PackageReplication = \"always\",\n PackageReplicationTarget = \"default-matcher\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/cluster\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cluster.NewOptions(ctx, \"options\", \u0026cluster.OptionsArgs{\n\t\t\tLanguage: pulumi.String(\"en\"),\n\t\t\tKeyboard: pulumi.String(\"pl\"),\n\t\t\tEmailFrom: pulumi.String(\"ged@gont.earthsea\"),\n\t\t\tBandwidthLimitMigration: pulumi.Int(555555),\n\t\t\tBandwidthLimitDefault: pulumi.Int(666666),\n\t\t\tMaxWorkers: pulumi.Int(5),\n\t\t\tMigrationCidr: pulumi.String(\"10.0.0.0/8\"),\n\t\t\tMigrationType: pulumi.String(\"secure\"),\n\t\t\tNextId: \u0026cluster.OptionsNextIdArgs{\n\t\t\t\tLower: pulumi.Int(100),\n\t\t\t\tUpper: pulumi.Int(999999999),\n\t\t\t},\n\t\t\tNotify: \u0026cluster.OptionsNotifyArgs{\n\t\t\t\tHaFencingMode: pulumi.String(\"never\"),\n\t\t\t\tHaFencingTarget: pulumi.String(\"default-matcher\"),\n\t\t\t\tPackageUpdates: pulumi.String(\"always\"),\n\t\t\t\tPackageUpdatesTarget: pulumi.String(\"default-matcher\"),\n\t\t\t\tPackageReplication: \"always\",\n\t\t\t\tPackageReplicationTarget: \"default-matcher\",\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Cluster.Options;\nimport io.muehlbachler.pulumi.proxmoxve.Cluster.OptionsArgs;\nimport com.pulumi.proxmoxve.Cluster.inputs.OptionsNextIdArgs;\nimport com.pulumi.proxmoxve.Cluster.inputs.OptionsNotifyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var options = new Options(\"options\", OptionsArgs.builder()\n .language(\"en\")\n .keyboard(\"pl\")\n .emailFrom(\"ged@gont.earthsea\")\n .bandwidthLimitMigration(555555)\n .bandwidthLimitDefault(666666)\n .maxWorkers(5)\n .migrationCidr(\"10.0.0.0/8\")\n .migrationType(\"secure\")\n .nextId(OptionsNextIdArgs.builder()\n .lower(100)\n .upper(999999999)\n .build())\n .notify(OptionsNotifyArgs.builder()\n .haFencingMode(\"never\")\n .haFencingTarget(\"default-matcher\")\n .packageUpdates(\"always\")\n .packageUpdatesTarget(\"default-matcher\")\n .packageReplication(\"always\")\n .packageReplicationTarget(\"default-matcher\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n options:\n type: proxmoxve:Cluster:Options\n properties:\n language: en\n keyboard: pl\n emailFrom: ged@gont.earthsea\n bandwidthLimitMigration: 555555\n bandwidthLimitDefault: 666666\n maxWorkers: 5\n migrationCidr: 10.0.0.0/8\n migrationType: secure\n nextId:\n lower: 100\n upper: 9.99999999e+08\n notify:\n haFencingMode: never\n haFencingTarget: default-matcher\n packageUpdates: always\n packageUpdatesTarget: default-matcher\n packageReplication: always\n packageReplicationTarget: default-matcher\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nCluster options are global and can be imported using e.g.:\n\n```sh\n$ pulumi import proxmoxve:Cluster/options:Options options cluster\n```\n\n","properties":{"bandwidthLimitClone":{"type":"integer","description":"Clone I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitDefault":{"type":"integer","description":"Default I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMigration":{"type":"integer","description":"Migration I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMove":{"type":"integer","description":"Move I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitRestore":{"type":"integer","description":"Restore I/O bandwidth limit in KiB/s.\n"},"console":{"type":"string","description":"Select the default Console viewer. Must be \u003cspan pulumi-lang-nodejs=\"`applet`\" pulumi-lang-dotnet=\"`Applet`\" pulumi-lang-go=\"`applet`\" pulumi-lang-python=\"`applet`\" pulumi-lang-yaml=\"`applet`\" pulumi-lang-java=\"`applet`\"\u003e`applet`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`vv`\" pulumi-lang-dotnet=\"`Vv`\" pulumi-lang-go=\"`vv`\" pulumi-lang-python=\"`vv`\" pulumi-lang-yaml=\"`vv`\" pulumi-lang-java=\"`vv`\"\u003e`vv`\u003c/span\u003e| \u003cspan pulumi-lang-nodejs=\"`html5`\" pulumi-lang-dotnet=\"`Html5`\" pulumi-lang-go=\"`html5`\" pulumi-lang-python=\"`html5`\" pulumi-lang-yaml=\"`html5`\" pulumi-lang-java=\"`html5`\"\u003e`html5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`xtermjs`\" pulumi-lang-dotnet=\"`Xtermjs`\" pulumi-lang-go=\"`xtermjs`\" pulumi-lang-python=\"`xtermjs`\" pulumi-lang-yaml=\"`xtermjs`\" pulumi-lang-java=\"`xtermjs`\"\u003e`xtermjs`\u003c/span\u003e. You can either use the builtin java applet (VNC; deprecated and maps to html5), an external virt-viewer compatible application (SPICE), an HTML5 based vnc viewer (noVNC), or an HTML5 based console client (xtermjs). If the selected viewer is not available (e.g. SPICE not activated for the VM), the fallback is noVNC.\n"},"crsHa":{"type":"string","description":"Cluster resource scheduling setting for HA. Must be \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e).\n"},"crsHaRebalanceOnStart":{"type":"boolean","description":"Cluster resource scheduling setting for HA rebalance on start.\n"},"description":{"type":"string","description":"Datacenter description. Shown in the web-interface datacenter notes panel. This is saved as comment inside the configuration file.\n"},"emailFrom":{"type":"string","description":"email address to send notification from (default is root@$hostname).\n"},"haShutdownPolicy":{"type":"string","description":"Cluster wide HA shutdown policy (). Must be \u003cspan pulumi-lang-nodejs=\"`freeze`\" pulumi-lang-dotnet=\"`Freeze`\" pulumi-lang-go=\"`freeze`\" pulumi-lang-python=\"`freeze`\" pulumi-lang-yaml=\"`freeze`\" pulumi-lang-java=\"`freeze`\"\u003e`freeze`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`failover`\" pulumi-lang-dotnet=\"`Failover`\" pulumi-lang-go=\"`failover`\" pulumi-lang-python=\"`failover`\" pulumi-lang-yaml=\"`failover`\" pulumi-lang-java=\"`failover`\"\u003e`failover`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`migrate`\" pulumi-lang-dotnet=\"`Migrate`\" pulumi-lang-go=\"`migrate`\" pulumi-lang-python=\"`migrate`\" pulumi-lang-yaml=\"`migrate`\" pulumi-lang-java=\"`migrate`\"\u003e`migrate`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e).\n"},"httpProxy":{"type":"string","description":"Specify external http proxy which is used for downloads (example: `http://username:password@host:port/`).\n"},"keyboard":{"type":"string","description":"Default keyboard layout for vnc server. Must be \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | `de-ch` | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | `en-gb` | `en-us` | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fi`\" pulumi-lang-dotnet=\"`Fi`\" pulumi-lang-go=\"`fi`\" pulumi-lang-python=\"`fi`\" pulumi-lang-yaml=\"`fi`\" pulumi-lang-java=\"`fi`\"\u003e`fi`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | `fr-be` | `fr-ca` | `fr-ch` | \u003cspan pulumi-lang-nodejs=\"`hu`\" pulumi-lang-dotnet=\"`Hu`\" pulumi-lang-go=\"`hu`\" pulumi-lang-python=\"`hu`\" pulumi-lang-yaml=\"`hu`\" pulumi-lang-java=\"`hu`\"\u003e`hu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`is`\" pulumi-lang-dotnet=\"`Is`\" pulumi-lang-go=\"`is`\" pulumi-lang-python=\"`is`\" pulumi-lang-yaml=\"`is`\" pulumi-lang-java=\"`is`\"\u003e`is`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lt`\" pulumi-lang-dotnet=\"`Lt`\" pulumi-lang-go=\"`lt`\" pulumi-lang-python=\"`lt`\" pulumi-lang-yaml=\"`lt`\" pulumi-lang-java=\"`lt`\"\u003e`lt`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`mk`\" pulumi-lang-dotnet=\"`Mk`\" pulumi-lang-go=\"`mk`\" pulumi-lang-python=\"`mk`\" pulumi-lang-yaml=\"`mk`\" pulumi-lang-java=\"`mk`\"\u003e`mk`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nl`\" pulumi-lang-dotnet=\"`Nl`\" pulumi-lang-go=\"`nl`\" pulumi-lang-python=\"`nl`\" pulumi-lang-yaml=\"`nl`\" pulumi-lang-java=\"`nl`\"\u003e`nl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`no`\" pulumi-lang-dotnet=\"`No`\" pulumi-lang-go=\"`no`\" pulumi-lang-python=\"`no`\" pulumi-lang-yaml=\"`no`\" pulumi-lang-java=\"`no`\"\u003e`no`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pt`\" pulumi-lang-dotnet=\"`Pt`\" pulumi-lang-go=\"`pt`\" pulumi-lang-python=\"`pt`\" pulumi-lang-yaml=\"`pt`\" pulumi-lang-java=\"`pt`\"\u003e`pt`\u003c/span\u003e | `pt-br` | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e.\n"},"language":{"type":"string","description":"Default GUI language. Must be \u003cspan pulumi-lang-nodejs=\"`ca`\" pulumi-lang-dotnet=\"`Ca`\" pulumi-lang-go=\"`ca`\" pulumi-lang-python=\"`ca`\" pulumi-lang-yaml=\"`ca`\" pulumi-lang-java=\"`ca`\"\u003e`ca`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`en`\" pulumi-lang-dotnet=\"`En`\" pulumi-lang-go=\"`en`\" pulumi-lang-python=\"`en`\" pulumi-lang-yaml=\"`en`\" pulumi-lang-java=\"`en`\"\u003e`en`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`eu`\" pulumi-lang-dotnet=\"`Eu`\" pulumi-lang-go=\"`eu`\" pulumi-lang-python=\"`eu`\" pulumi-lang-yaml=\"`eu`\" pulumi-lang-java=\"`eu`\"\u003e`eu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fa`\" pulumi-lang-dotnet=\"`Fa`\" pulumi-lang-go=\"`fa`\" pulumi-lang-python=\"`fa`\" pulumi-lang-yaml=\"`fa`\" pulumi-lang-java=\"`fa`\"\u003e`fa`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`he`\" pulumi-lang-dotnet=\"`He`\" pulumi-lang-go=\"`he`\" pulumi-lang-python=\"`he`\" pulumi-lang-yaml=\"`he`\" pulumi-lang-java=\"`he`\"\u003e`he`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nb`\" pulumi-lang-dotnet=\"`Nb`\" pulumi-lang-go=\"`nb`\" pulumi-lang-python=\"`nb`\" pulumi-lang-yaml=\"`nb`\" pulumi-lang-java=\"`nb`\"\u003e`nb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nn`\" pulumi-lang-dotnet=\"`Nn`\" pulumi-lang-go=\"`nn`\" pulumi-lang-python=\"`nn`\" pulumi-lang-yaml=\"`nn`\" pulumi-lang-java=\"`nn`\"\u003e`nn`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | `pt_BR` | \u003cspan pulumi-lang-nodejs=\"`ru`\" pulumi-lang-dotnet=\"`Ru`\" pulumi-lang-go=\"`ru`\" pulumi-lang-python=\"`ru`\" pulumi-lang-yaml=\"`ru`\" pulumi-lang-java=\"`ru`\"\u003e`ru`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e | `zh_CN` | `zh_TW`.\n"},"macPrefix":{"type":"string","description":"Prefix for autogenerated MAC addresses.\n"},"maxWorkers":{"type":"integer","description":"Defines how many workers (per node) are maximal started on actions like 'stopall VMs' or task from the ha-manager.\n"},"migrationCidr":{"type":"string","description":"Cluster wide migration network CIDR.\n"},"migrationType":{"type":"string","description":"Cluster wide migration type. Must be \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`insecure`\" pulumi-lang-dotnet=\"`Insecure`\" pulumi-lang-go=\"`insecure`\" pulumi-lang-python=\"`insecure`\" pulumi-lang-yaml=\"`insecure`\" pulumi-lang-java=\"`insecure`\"\u003e`insecure`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e).\n"},"nextId":{"$ref":"#/types/proxmoxve:Cluster/OptionsNextId:OptionsNextId","description":"The ranges for the next free VM ID auto-selection pool.\n"},"notify":{"$ref":"#/types/proxmoxve:Cluster/OptionsNotify:OptionsNotify","description":"Cluster-wide notification settings.\n"}},"required":["crsHa","macPrefix"],"inputProperties":{"bandwidthLimitClone":{"type":"integer","description":"Clone I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitDefault":{"type":"integer","description":"Default I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMigration":{"type":"integer","description":"Migration I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMove":{"type":"integer","description":"Move I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitRestore":{"type":"integer","description":"Restore I/O bandwidth limit in KiB/s.\n"},"console":{"type":"string","description":"Select the default Console viewer. Must be \u003cspan pulumi-lang-nodejs=\"`applet`\" pulumi-lang-dotnet=\"`Applet`\" pulumi-lang-go=\"`applet`\" pulumi-lang-python=\"`applet`\" pulumi-lang-yaml=\"`applet`\" pulumi-lang-java=\"`applet`\"\u003e`applet`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`vv`\" pulumi-lang-dotnet=\"`Vv`\" pulumi-lang-go=\"`vv`\" pulumi-lang-python=\"`vv`\" pulumi-lang-yaml=\"`vv`\" pulumi-lang-java=\"`vv`\"\u003e`vv`\u003c/span\u003e| \u003cspan pulumi-lang-nodejs=\"`html5`\" pulumi-lang-dotnet=\"`Html5`\" pulumi-lang-go=\"`html5`\" pulumi-lang-python=\"`html5`\" pulumi-lang-yaml=\"`html5`\" pulumi-lang-java=\"`html5`\"\u003e`html5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`xtermjs`\" pulumi-lang-dotnet=\"`Xtermjs`\" pulumi-lang-go=\"`xtermjs`\" pulumi-lang-python=\"`xtermjs`\" pulumi-lang-yaml=\"`xtermjs`\" pulumi-lang-java=\"`xtermjs`\"\u003e`xtermjs`\u003c/span\u003e. You can either use the builtin java applet (VNC; deprecated and maps to html5), an external virt-viewer compatible application (SPICE), an HTML5 based vnc viewer (noVNC), or an HTML5 based console client (xtermjs). If the selected viewer is not available (e.g. SPICE not activated for the VM), the fallback is noVNC.\n"},"crsHa":{"type":"string","description":"Cluster resource scheduling setting for HA. Must be \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e).\n"},"crsHaRebalanceOnStart":{"type":"boolean","description":"Cluster resource scheduling setting for HA rebalance on start.\n"},"description":{"type":"string","description":"Datacenter description. Shown in the web-interface datacenter notes panel. This is saved as comment inside the configuration file.\n"},"emailFrom":{"type":"string","description":"email address to send notification from (default is root@$hostname).\n"},"haShutdownPolicy":{"type":"string","description":"Cluster wide HA shutdown policy (). Must be \u003cspan pulumi-lang-nodejs=\"`freeze`\" pulumi-lang-dotnet=\"`Freeze`\" pulumi-lang-go=\"`freeze`\" pulumi-lang-python=\"`freeze`\" pulumi-lang-yaml=\"`freeze`\" pulumi-lang-java=\"`freeze`\"\u003e`freeze`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`failover`\" pulumi-lang-dotnet=\"`Failover`\" pulumi-lang-go=\"`failover`\" pulumi-lang-python=\"`failover`\" pulumi-lang-yaml=\"`failover`\" pulumi-lang-java=\"`failover`\"\u003e`failover`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`migrate`\" pulumi-lang-dotnet=\"`Migrate`\" pulumi-lang-go=\"`migrate`\" pulumi-lang-python=\"`migrate`\" pulumi-lang-yaml=\"`migrate`\" pulumi-lang-java=\"`migrate`\"\u003e`migrate`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e).\n"},"httpProxy":{"type":"string","description":"Specify external http proxy which is used for downloads (example: `http://username:password@host:port/`).\n"},"keyboard":{"type":"string","description":"Default keyboard layout for vnc server. Must be \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | `de-ch` | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | `en-gb` | `en-us` | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fi`\" pulumi-lang-dotnet=\"`Fi`\" pulumi-lang-go=\"`fi`\" pulumi-lang-python=\"`fi`\" pulumi-lang-yaml=\"`fi`\" pulumi-lang-java=\"`fi`\"\u003e`fi`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | `fr-be` | `fr-ca` | `fr-ch` | \u003cspan pulumi-lang-nodejs=\"`hu`\" pulumi-lang-dotnet=\"`Hu`\" pulumi-lang-go=\"`hu`\" pulumi-lang-python=\"`hu`\" pulumi-lang-yaml=\"`hu`\" pulumi-lang-java=\"`hu`\"\u003e`hu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`is`\" pulumi-lang-dotnet=\"`Is`\" pulumi-lang-go=\"`is`\" pulumi-lang-python=\"`is`\" pulumi-lang-yaml=\"`is`\" pulumi-lang-java=\"`is`\"\u003e`is`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lt`\" pulumi-lang-dotnet=\"`Lt`\" pulumi-lang-go=\"`lt`\" pulumi-lang-python=\"`lt`\" pulumi-lang-yaml=\"`lt`\" pulumi-lang-java=\"`lt`\"\u003e`lt`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`mk`\" pulumi-lang-dotnet=\"`Mk`\" pulumi-lang-go=\"`mk`\" pulumi-lang-python=\"`mk`\" pulumi-lang-yaml=\"`mk`\" pulumi-lang-java=\"`mk`\"\u003e`mk`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nl`\" pulumi-lang-dotnet=\"`Nl`\" pulumi-lang-go=\"`nl`\" pulumi-lang-python=\"`nl`\" pulumi-lang-yaml=\"`nl`\" pulumi-lang-java=\"`nl`\"\u003e`nl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`no`\" pulumi-lang-dotnet=\"`No`\" pulumi-lang-go=\"`no`\" pulumi-lang-python=\"`no`\" pulumi-lang-yaml=\"`no`\" pulumi-lang-java=\"`no`\"\u003e`no`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pt`\" pulumi-lang-dotnet=\"`Pt`\" pulumi-lang-go=\"`pt`\" pulumi-lang-python=\"`pt`\" pulumi-lang-yaml=\"`pt`\" pulumi-lang-java=\"`pt`\"\u003e`pt`\u003c/span\u003e | `pt-br` | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e.\n"},"language":{"type":"string","description":"Default GUI language. Must be \u003cspan pulumi-lang-nodejs=\"`ca`\" pulumi-lang-dotnet=\"`Ca`\" pulumi-lang-go=\"`ca`\" pulumi-lang-python=\"`ca`\" pulumi-lang-yaml=\"`ca`\" pulumi-lang-java=\"`ca`\"\u003e`ca`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`en`\" pulumi-lang-dotnet=\"`En`\" pulumi-lang-go=\"`en`\" pulumi-lang-python=\"`en`\" pulumi-lang-yaml=\"`en`\" pulumi-lang-java=\"`en`\"\u003e`en`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`eu`\" pulumi-lang-dotnet=\"`Eu`\" pulumi-lang-go=\"`eu`\" pulumi-lang-python=\"`eu`\" pulumi-lang-yaml=\"`eu`\" pulumi-lang-java=\"`eu`\"\u003e`eu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fa`\" pulumi-lang-dotnet=\"`Fa`\" pulumi-lang-go=\"`fa`\" pulumi-lang-python=\"`fa`\" pulumi-lang-yaml=\"`fa`\" pulumi-lang-java=\"`fa`\"\u003e`fa`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`he`\" pulumi-lang-dotnet=\"`He`\" pulumi-lang-go=\"`he`\" pulumi-lang-python=\"`he`\" pulumi-lang-yaml=\"`he`\" pulumi-lang-java=\"`he`\"\u003e`he`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nb`\" pulumi-lang-dotnet=\"`Nb`\" pulumi-lang-go=\"`nb`\" pulumi-lang-python=\"`nb`\" pulumi-lang-yaml=\"`nb`\" pulumi-lang-java=\"`nb`\"\u003e`nb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nn`\" pulumi-lang-dotnet=\"`Nn`\" pulumi-lang-go=\"`nn`\" pulumi-lang-python=\"`nn`\" pulumi-lang-yaml=\"`nn`\" pulumi-lang-java=\"`nn`\"\u003e`nn`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | `pt_BR` | \u003cspan pulumi-lang-nodejs=\"`ru`\" pulumi-lang-dotnet=\"`Ru`\" pulumi-lang-go=\"`ru`\" pulumi-lang-python=\"`ru`\" pulumi-lang-yaml=\"`ru`\" pulumi-lang-java=\"`ru`\"\u003e`ru`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e | `zh_CN` | `zh_TW`.\n"},"macPrefix":{"type":"string","description":"Prefix for autogenerated MAC addresses.\n"},"maxWorkers":{"type":"integer","description":"Defines how many workers (per node) are maximal started on actions like 'stopall VMs' or task from the ha-manager.\n"},"migrationCidr":{"type":"string","description":"Cluster wide migration network CIDR.\n"},"migrationType":{"type":"string","description":"Cluster wide migration type. Must be \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`insecure`\" pulumi-lang-dotnet=\"`Insecure`\" pulumi-lang-go=\"`insecure`\" pulumi-lang-python=\"`insecure`\" pulumi-lang-yaml=\"`insecure`\" pulumi-lang-java=\"`insecure`\"\u003e`insecure`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e).\n"},"nextId":{"$ref":"#/types/proxmoxve:Cluster/OptionsNextId:OptionsNextId","description":"The ranges for the next free VM ID auto-selection pool.\n"},"notify":{"$ref":"#/types/proxmoxve:Cluster/OptionsNotify:OptionsNotify","description":"Cluster-wide notification settings.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Options resources.\n","properties":{"bandwidthLimitClone":{"type":"integer","description":"Clone I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitDefault":{"type":"integer","description":"Default I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMigration":{"type":"integer","description":"Migration I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitMove":{"type":"integer","description":"Move I/O bandwidth limit in KiB/s.\n"},"bandwidthLimitRestore":{"type":"integer","description":"Restore I/O bandwidth limit in KiB/s.\n"},"console":{"type":"string","description":"Select the default Console viewer. Must be \u003cspan pulumi-lang-nodejs=\"`applet`\" pulumi-lang-dotnet=\"`Applet`\" pulumi-lang-go=\"`applet`\" pulumi-lang-python=\"`applet`\" pulumi-lang-yaml=\"`applet`\" pulumi-lang-java=\"`applet`\"\u003e`applet`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`vv`\" pulumi-lang-dotnet=\"`Vv`\" pulumi-lang-go=\"`vv`\" pulumi-lang-python=\"`vv`\" pulumi-lang-yaml=\"`vv`\" pulumi-lang-java=\"`vv`\"\u003e`vv`\u003c/span\u003e| \u003cspan pulumi-lang-nodejs=\"`html5`\" pulumi-lang-dotnet=\"`Html5`\" pulumi-lang-go=\"`html5`\" pulumi-lang-python=\"`html5`\" pulumi-lang-yaml=\"`html5`\" pulumi-lang-java=\"`html5`\"\u003e`html5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`xtermjs`\" pulumi-lang-dotnet=\"`Xtermjs`\" pulumi-lang-go=\"`xtermjs`\" pulumi-lang-python=\"`xtermjs`\" pulumi-lang-yaml=\"`xtermjs`\" pulumi-lang-java=\"`xtermjs`\"\u003e`xtermjs`\u003c/span\u003e. You can either use the builtin java applet (VNC; deprecated and maps to html5), an external virt-viewer compatible application (SPICE), an HTML5 based vnc viewer (noVNC), or an HTML5 based console client (xtermjs). If the selected viewer is not available (e.g. SPICE not activated for the VM), the fallback is noVNC.\n"},"crsHa":{"type":"string","description":"Cluster resource scheduling setting for HA. Must be \u003cspan pulumi-lang-nodejs=\"`static`\" pulumi-lang-dotnet=\"`Static`\" pulumi-lang-go=\"`static`\" pulumi-lang-python=\"`static`\" pulumi-lang-yaml=\"`static`\" pulumi-lang-java=\"`static`\"\u003e`static`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`basic`\" pulumi-lang-dotnet=\"`Basic`\" pulumi-lang-go=\"`basic`\" pulumi-lang-python=\"`basic`\" pulumi-lang-yaml=\"`basic`\" pulumi-lang-java=\"`basic`\"\u003e`basic`\u003c/span\u003e).\n"},"crsHaRebalanceOnStart":{"type":"boolean","description":"Cluster resource scheduling setting for HA rebalance on start.\n"},"description":{"type":"string","description":"Datacenter description. Shown in the web-interface datacenter notes panel. This is saved as comment inside the configuration file.\n"},"emailFrom":{"type":"string","description":"email address to send notification from (default is root@$hostname).\n"},"haShutdownPolicy":{"type":"string","description":"Cluster wide HA shutdown policy (). Must be \u003cspan pulumi-lang-nodejs=\"`freeze`\" pulumi-lang-dotnet=\"`Freeze`\" pulumi-lang-go=\"`freeze`\" pulumi-lang-python=\"`freeze`\" pulumi-lang-yaml=\"`freeze`\" pulumi-lang-java=\"`freeze`\"\u003e`freeze`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`failover`\" pulumi-lang-dotnet=\"`Failover`\" pulumi-lang-go=\"`failover`\" pulumi-lang-python=\"`failover`\" pulumi-lang-yaml=\"`failover`\" pulumi-lang-java=\"`failover`\"\u003e`failover`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`migrate`\" pulumi-lang-dotnet=\"`Migrate`\" pulumi-lang-go=\"`migrate`\" pulumi-lang-python=\"`migrate`\" pulumi-lang-yaml=\"`migrate`\" pulumi-lang-java=\"`migrate`\"\u003e`migrate`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`conditional`\" pulumi-lang-dotnet=\"`Conditional`\" pulumi-lang-go=\"`conditional`\" pulumi-lang-python=\"`conditional`\" pulumi-lang-yaml=\"`conditional`\" pulumi-lang-java=\"`conditional`\"\u003e`conditional`\u003c/span\u003e).\n"},"httpProxy":{"type":"string","description":"Specify external http proxy which is used for downloads (example: `http://username:password@host:port/`).\n"},"keyboard":{"type":"string","description":"Default keyboard layout for vnc server. Must be \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | `de-ch` | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | `en-gb` | `en-us` | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fi`\" pulumi-lang-dotnet=\"`Fi`\" pulumi-lang-go=\"`fi`\" pulumi-lang-python=\"`fi`\" pulumi-lang-yaml=\"`fi`\" pulumi-lang-java=\"`fi`\"\u003e`fi`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | `fr-be` | `fr-ca` | `fr-ch` | \u003cspan pulumi-lang-nodejs=\"`hu`\" pulumi-lang-dotnet=\"`Hu`\" pulumi-lang-go=\"`hu`\" pulumi-lang-python=\"`hu`\" pulumi-lang-yaml=\"`hu`\" pulumi-lang-java=\"`hu`\"\u003e`hu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`is`\" pulumi-lang-dotnet=\"`Is`\" pulumi-lang-go=\"`is`\" pulumi-lang-python=\"`is`\" pulumi-lang-yaml=\"`is`\" pulumi-lang-java=\"`is`\"\u003e`is`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lt`\" pulumi-lang-dotnet=\"`Lt`\" pulumi-lang-go=\"`lt`\" pulumi-lang-python=\"`lt`\" pulumi-lang-yaml=\"`lt`\" pulumi-lang-java=\"`lt`\"\u003e`lt`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`mk`\" pulumi-lang-dotnet=\"`Mk`\" pulumi-lang-go=\"`mk`\" pulumi-lang-python=\"`mk`\" pulumi-lang-yaml=\"`mk`\" pulumi-lang-java=\"`mk`\"\u003e`mk`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nl`\" pulumi-lang-dotnet=\"`Nl`\" pulumi-lang-go=\"`nl`\" pulumi-lang-python=\"`nl`\" pulumi-lang-yaml=\"`nl`\" pulumi-lang-java=\"`nl`\"\u003e`nl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`no`\" pulumi-lang-dotnet=\"`No`\" pulumi-lang-go=\"`no`\" pulumi-lang-python=\"`no`\" pulumi-lang-yaml=\"`no`\" pulumi-lang-java=\"`no`\"\u003e`no`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pt`\" pulumi-lang-dotnet=\"`Pt`\" pulumi-lang-go=\"`pt`\" pulumi-lang-python=\"`pt`\" pulumi-lang-yaml=\"`pt`\" pulumi-lang-java=\"`pt`\"\u003e`pt`\u003c/span\u003e | `pt-br` | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e.\n"},"language":{"type":"string","description":"Default GUI language. Must be \u003cspan pulumi-lang-nodejs=\"`ca`\" pulumi-lang-dotnet=\"`Ca`\" pulumi-lang-go=\"`ca`\" pulumi-lang-python=\"`ca`\" pulumi-lang-yaml=\"`ca`\" pulumi-lang-java=\"`ca`\"\u003e`ca`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`da`\" pulumi-lang-dotnet=\"`Da`\" pulumi-lang-go=\"`da`\" pulumi-lang-python=\"`da`\" pulumi-lang-yaml=\"`da`\" pulumi-lang-java=\"`da`\"\u003e`da`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`de`\" pulumi-lang-dotnet=\"`De`\" pulumi-lang-go=\"`de`\" pulumi-lang-python=\"`de`\" pulumi-lang-yaml=\"`de`\" pulumi-lang-java=\"`de`\"\u003e`de`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`en`\" pulumi-lang-dotnet=\"`En`\" pulumi-lang-go=\"`en`\" pulumi-lang-python=\"`en`\" pulumi-lang-yaml=\"`en`\" pulumi-lang-java=\"`en`\"\u003e`en`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`eu`\" pulumi-lang-dotnet=\"`Eu`\" pulumi-lang-go=\"`eu`\" pulumi-lang-python=\"`eu`\" pulumi-lang-yaml=\"`eu`\" pulumi-lang-java=\"`eu`\"\u003e`eu`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fa`\" pulumi-lang-dotnet=\"`Fa`\" pulumi-lang-go=\"`fa`\" pulumi-lang-python=\"`fa`\" pulumi-lang-yaml=\"`fa`\" pulumi-lang-java=\"`fa`\"\u003e`fa`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`fr`\" pulumi-lang-dotnet=\"`Fr`\" pulumi-lang-go=\"`fr`\" pulumi-lang-python=\"`fr`\" pulumi-lang-yaml=\"`fr`\" pulumi-lang-java=\"`fr`\"\u003e`fr`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`he`\" pulumi-lang-dotnet=\"`He`\" pulumi-lang-go=\"`he`\" pulumi-lang-python=\"`he`\" pulumi-lang-yaml=\"`he`\" pulumi-lang-java=\"`he`\"\u003e`he`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`it`\" pulumi-lang-dotnet=\"`It`\" pulumi-lang-go=\"`it`\" pulumi-lang-python=\"`it`\" pulumi-lang-yaml=\"`it`\" pulumi-lang-java=\"`it`\"\u003e`it`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`ja`\" pulumi-lang-dotnet=\"`Ja`\" pulumi-lang-go=\"`ja`\" pulumi-lang-python=\"`ja`\" pulumi-lang-yaml=\"`ja`\" pulumi-lang-java=\"`ja`\"\u003e`ja`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nb`\" pulumi-lang-dotnet=\"`Nb`\" pulumi-lang-go=\"`nb`\" pulumi-lang-python=\"`nb`\" pulumi-lang-yaml=\"`nb`\" pulumi-lang-java=\"`nb`\"\u003e`nb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`nn`\" pulumi-lang-dotnet=\"`Nn`\" pulumi-lang-go=\"`nn`\" pulumi-lang-python=\"`nn`\" pulumi-lang-yaml=\"`nn`\" pulumi-lang-java=\"`nn`\"\u003e`nn`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`pl`\" pulumi-lang-dotnet=\"`Pl`\" pulumi-lang-go=\"`pl`\" pulumi-lang-python=\"`pl`\" pulumi-lang-yaml=\"`pl`\" pulumi-lang-java=\"`pl`\"\u003e`pl`\u003c/span\u003e | `pt_BR` | \u003cspan pulumi-lang-nodejs=\"`ru`\" pulumi-lang-dotnet=\"`Ru`\" pulumi-lang-go=\"`ru`\" pulumi-lang-python=\"`ru`\" pulumi-lang-yaml=\"`ru`\" pulumi-lang-java=\"`ru`\"\u003e`ru`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sl`\" pulumi-lang-dotnet=\"`Sl`\" pulumi-lang-go=\"`sl`\" pulumi-lang-python=\"`sl`\" pulumi-lang-yaml=\"`sl`\" pulumi-lang-java=\"`sl`\"\u003e`sl`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sv`\" pulumi-lang-dotnet=\"`Sv`\" pulumi-lang-go=\"`sv`\" pulumi-lang-python=\"`sv`\" pulumi-lang-yaml=\"`sv`\" pulumi-lang-java=\"`sv`\"\u003e`sv`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tr`\" pulumi-lang-dotnet=\"`Tr`\" pulumi-lang-go=\"`tr`\" pulumi-lang-python=\"`tr`\" pulumi-lang-yaml=\"`tr`\" pulumi-lang-java=\"`tr`\"\u003e`tr`\u003c/span\u003e | `zh_CN` | `zh_TW`.\n"},"macPrefix":{"type":"string","description":"Prefix for autogenerated MAC addresses.\n"},"maxWorkers":{"type":"integer","description":"Defines how many workers (per node) are maximal started on actions like 'stopall VMs' or task from the ha-manager.\n"},"migrationCidr":{"type":"string","description":"Cluster wide migration network CIDR.\n"},"migrationType":{"type":"string","description":"Cluster wide migration type. Must be \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`insecure`\" pulumi-lang-dotnet=\"`Insecure`\" pulumi-lang-go=\"`insecure`\" pulumi-lang-python=\"`insecure`\" pulumi-lang-yaml=\"`insecure`\" pulumi-lang-java=\"`insecure`\"\u003e`insecure`\u003c/span\u003e (default is \u003cspan pulumi-lang-nodejs=\"`secure`\" pulumi-lang-dotnet=\"`Secure`\" pulumi-lang-go=\"`secure`\" pulumi-lang-python=\"`secure`\" pulumi-lang-yaml=\"`secure`\" pulumi-lang-java=\"`secure`\"\u003e`secure`\u003c/span\u003e).\n"},"nextId":{"$ref":"#/types/proxmoxve:Cluster/OptionsNextId:OptionsNextId","description":"The ranges for the next free VM ID auto-selection pool.\n"},"notify":{"$ref":"#/types/proxmoxve:Cluster/OptionsNotify:OptionsNotify","description":"Cluster-wide notification settings.\n"}},"type":"object"}},"proxmoxve:Download/file:File":{"description":"Manages files upload using PVE download-url API. It can be fully compatible and faster replacement for image files created using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Storage.File`\" pulumi-lang-dotnet=\"`proxmoxve.Storage.File`\" pulumi-lang-go=\"`Storage.File`\" pulumi-lang-python=\"`Storage.File`\" pulumi-lang-yaml=\"`proxmoxve.Storage.File`\" pulumi-lang-java=\"`proxmoxve.Storage.File`\"\u003e`proxmoxve.Storage.File`\u003c/span\u003e. Supports images for VMs (ISO and disk images) and LXC (CT Templates).\n\n\u003e Besides the `Datastore.AllocateTemplate` privilege, this resource requires both the `Sys.Audit` and `Sys.Modify` privileges.\u003cbr\u003e\u003cbr\u003e\nFor more details, see the [`download-url`](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/storage/{storage}/download-url) API documentation under the \"Required permissions\" section.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst release20231228Debian12BookwormQcow2Img = new proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64-20231228-1609.img\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum: \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksumAlgorithm: \"sha512\",\n});\nconst release20231228Debian12BookwormQcow2 = new proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2\", {\n contentType: \"import\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64-20231228-1609.qcow2\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum: \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksumAlgorithm: \"sha512\",\n});\nconst latestDebian12BookwormQcow2Img = new proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64.qcow2.img\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n});\nconst latestDebian12BookwormQcow2 = new proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2\", {\n contentType: \"import\",\n datastoreId: \"local\",\n fileName: \"debian-12-generic-amd64.qcow2\",\n nodeName: \"pve\",\n url: \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n});\nconst latestUbuntu22JammyQcow2Img = new proxmoxve.download.File(\"latest_ubuntu_22_jammy_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\",\n});\nconst latestStaticUbuntu24NobleQcow2Img = new proxmoxve.download.File(\"latest_static_ubuntu_24_noble_qcow2_img\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\",\n overwrite: false,\n});\nconst release20231211Ubuntu22JammyLxcImg = new proxmoxve.download.File(\"release_20231211_ubuntu_22_jammy_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\",\n checksum: \"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\",\n checksumAlgorithm: \"sha256\",\n uploadTimeout: 4444,\n});\nconst latestUbuntu22JammyLxcImg = new proxmoxve.download.File(\"latest_ubuntu_22_jammy_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n url: \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nrelease20231228_debian12_bookworm_qcow2_img = proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64-20231228-1609.img\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum=\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksum_algorithm=\"sha512\")\nrelease20231228_debian12_bookworm_qcow2 = proxmoxve.download.File(\"release_20231228_debian_12_bookworm_qcow2\",\n content_type=\"import\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64-20231228-1609.qcow2\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n checksum=\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n checksum_algorithm=\"sha512\")\nlatest_debian12_bookworm_qcow2_img = proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64.qcow2.img\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\nlatest_debian12_bookworm_qcow2 = proxmoxve.download.File(\"latest_debian_12_bookworm_qcow2\",\n content_type=\"import\",\n datastore_id=\"local\",\n file_name=\"debian-12-generic-amd64.qcow2\",\n node_name=\"pve\",\n url=\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\nlatest_ubuntu22_jammy_qcow2_img = proxmoxve.download.File(\"latest_ubuntu_22_jammy_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\")\nlatest_static_ubuntu24_noble_qcow2_img = proxmoxve.download.File(\"latest_static_ubuntu_24_noble_qcow2_img\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\",\n overwrite=False)\nrelease20231211_ubuntu22_jammy_lxc_img = proxmoxve.download.File(\"release_20231211_ubuntu_22_jammy_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\",\n checksum=\"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\",\n checksum_algorithm=\"sha256\",\n upload_timeout=4444)\nlatest_ubuntu22_jammy_lxc_img = proxmoxve.download.File(\"latest_ubuntu_22_jammy_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"pve\",\n url=\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var release20231228Debian12BookwormQcow2Img = new ProxmoxVE.Download.File(\"release_20231228_debian_12_bookworm_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64-20231228-1609.img\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n Checksum = \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n ChecksumAlgorithm = \"sha512\",\n });\n\n var release20231228Debian12BookwormQcow2 = new ProxmoxVE.Download.File(\"release_20231228_debian_12_bookworm_qcow2\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64-20231228-1609.qcow2\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\",\n Checksum = \"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\",\n ChecksumAlgorithm = \"sha512\",\n });\n\n var latestDebian12BookwormQcow2Img = new ProxmoxVE.Download.File(\"latest_debian_12_bookworm_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64.qcow2.img\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n });\n\n var latestDebian12BookwormQcow2 = new ProxmoxVE.Download.File(\"latest_debian_12_bookworm_qcow2\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n FileName = \"debian-12-generic-amd64.qcow2\",\n NodeName = \"pve\",\n Url = \"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\",\n });\n\n var latestUbuntu22JammyQcow2Img = new ProxmoxVE.Download.File(\"latest_ubuntu_22_jammy_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\",\n });\n\n var latestStaticUbuntu24NobleQcow2Img = new ProxmoxVE.Download.File(\"latest_static_ubuntu_24_noble_qcow2_img\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\",\n Overwrite = false,\n });\n\n var release20231211Ubuntu22JammyLxcImg = new ProxmoxVE.Download.File(\"release_20231211_ubuntu_22_jammy_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\",\n Checksum = \"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\",\n ChecksumAlgorithm = \"sha256\",\n UploadTimeout = 4444,\n });\n\n var latestUbuntu22JammyLxcImg = new ProxmoxVE.Download.File(\"latest_ubuntu_22_jammy_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n Url = \"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/download\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := download.NewFile(ctx, \"release_20231228_debian_12_bookworm_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64-20231228-1609.img\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\"),\n\t\t\tChecksum: pulumi.String(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\"),\n\t\t\tChecksumAlgorithm: pulumi.String(\"sha512\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"release_20231228_debian_12_bookworm_qcow2\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64-20231228-1609.qcow2\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\"),\n\t\t\tChecksum: pulumi.String(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\"),\n\t\t\tChecksumAlgorithm: pulumi.String(\"sha512\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_debian_12_bookworm_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64.qcow2.img\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_debian_12_bookworm_qcow2\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tFileName: pulumi.String(\"debian-12-generic-amd64.qcow2\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_ubuntu_22_jammy_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_static_ubuntu_24_noble_qcow2_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\"),\n\t\t\tOverwrite: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"release_20231211_ubuntu_22_jammy_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\"),\n\t\t\tChecksum: pulumi.String(\"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\"),\n\t\t\tChecksumAlgorithm: pulumi.String(\"sha256\"),\n\t\t\tUploadTimeout: pulumi.Int(4444),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = download.NewFile(ctx, \"latest_ubuntu_22_jammy_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tUrl: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Download.File;\nimport io.muehlbachler.pulumi.proxmoxve.Download.FileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var release20231228Debian12BookwormQcow2Img = new File(\"release20231228Debian12BookwormQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64-20231228-1609.img\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\")\n .checksum(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\")\n .checksumAlgorithm(\"sha512\")\n .build());\n\n var release20231228Debian12BookwormQcow2 = new File(\"release20231228Debian12BookwormQcow2\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64-20231228-1609.qcow2\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\")\n .checksum(\"d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\")\n .checksumAlgorithm(\"sha512\")\n .build());\n\n var latestDebian12BookwormQcow2Img = new File(\"latestDebian12BookwormQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64.qcow2.img\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\n .build());\n\n var latestDebian12BookwormQcow2 = new File(\"latestDebian12BookwormQcow2\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .fileName(\"debian-12-generic-amd64.qcow2\")\n .nodeName(\"pve\")\n .url(\"https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\")\n .build());\n\n var latestUbuntu22JammyQcow2Img = new File(\"latestUbuntu22JammyQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\")\n .build());\n\n var latestStaticUbuntu24NobleQcow2Img = new File(\"latestStaticUbuntu24NobleQcow2Img\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\")\n .overwrite(false)\n .build());\n\n var release20231211Ubuntu22JammyLxcImg = new File(\"release20231211Ubuntu22JammyLxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\")\n .checksum(\"c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\")\n .checksumAlgorithm(\"sha256\")\n .uploadTimeout(4444)\n .build());\n\n var latestUbuntu22JammyLxcImg = new File(\"latestUbuntu22JammyLxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .url(\"https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n release20231228Debian12BookwormQcow2Img:\n type: proxmoxve:Download:File\n name: release_20231228_debian_12_bookworm_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n fileName: debian-12-generic-amd64-20231228-1609.img\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\n checksum: d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\n checksumAlgorithm: sha512\n release20231228Debian12BookwormQcow2:\n type: proxmoxve:Download:File\n name: release_20231228_debian_12_bookworm_qcow2\n properties:\n contentType: import\n datastoreId: local\n fileName: debian-12-generic-amd64-20231228-1609.qcow2\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/20231228-1609/debian-12-generic-amd64-20231228-1609.qcow2\n checksum: d2fbcf11fb28795842e91364d8c7b69f1870db09ff299eb94e4fbbfa510eb78d141e74c1f4bf6dfa0b7e33d0c3b66e6751886feadb4e9916f778bab1776bdf1b\n checksumAlgorithm: sha512\n latestDebian12BookwormQcow2Img:\n type: proxmoxve:Download:File\n name: latest_debian_12_bookworm_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n fileName: debian-12-generic-amd64.qcow2.img\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\n latestDebian12BookwormQcow2:\n type: proxmoxve:Download:File\n name: latest_debian_12_bookworm_qcow2\n properties:\n contentType: import\n datastoreId: local\n fileName: debian-12-generic-amd64.qcow2\n nodeName: pve\n url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2\n latestUbuntu22JammyQcow2Img:\n type: proxmoxve:Download:File\n name: latest_ubuntu_22_jammy_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img\n latestStaticUbuntu24NobleQcow2Img:\n type: proxmoxve:Download:File\n name: latest_static_ubuntu_24_noble_qcow2_img\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img\n overwrite: false\n release20231211Ubuntu22JammyLxcImg:\n type: proxmoxve:Download:File\n name: release_20231211_ubuntu_22_jammy_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/releases/22.04/release-20231211/ubuntu-22.04-server-cloudimg-amd64-root.tar.xz\n checksum: c9997dcfea5d826fd04871f960c513665f2e87dd7450bba99f68a97e60e4586e\n checksumAlgorithm: sha256\n uploadTimeout: 4444\n latestUbuntu22JammyLxcImg:\n type: proxmoxve:Download:File\n name: latest_ubuntu_22_jammy_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: pve\n url: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"checksum":{"type":"string","description":"The expected checksum of the file.\n"},"checksumAlgorithm":{"type":"string","description":"The algorithm to calculate the checksum of the file. Must be \u003cspan pulumi-lang-nodejs=\"`md5`\" pulumi-lang-dotnet=\"`Md5`\" pulumi-lang-go=\"`md5`\" pulumi-lang-python=\"`md5`\" pulumi-lang-yaml=\"`md5`\" pulumi-lang-java=\"`md5`\"\u003e`md5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha1`\" pulumi-lang-dotnet=\"`Sha1`\" pulumi-lang-go=\"`sha1`\" pulumi-lang-python=\"`sha1`\" pulumi-lang-yaml=\"`sha1`\" pulumi-lang-java=\"`sha1`\"\u003e`sha1`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha224`\" pulumi-lang-dotnet=\"`Sha224`\" pulumi-lang-go=\"`sha224`\" pulumi-lang-python=\"`sha224`\" pulumi-lang-yaml=\"`sha224`\" pulumi-lang-java=\"`sha224`\"\u003e`sha224`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha256`\" pulumi-lang-dotnet=\"`Sha256`\" pulumi-lang-go=\"`sha256`\" pulumi-lang-python=\"`sha256`\" pulumi-lang-yaml=\"`sha256`\" pulumi-lang-java=\"`sha256`\"\u003e`sha256`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha384`\" pulumi-lang-dotnet=\"`Sha384`\" pulumi-lang-go=\"`sha384`\" pulumi-lang-python=\"`sha384`\" pulumi-lang-yaml=\"`sha384`\" pulumi-lang-java=\"`sha384`\"\u003e`sha384`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha512`\" pulumi-lang-dotnet=\"`Sha512`\" pulumi-lang-go=\"`sha512`\" pulumi-lang-python=\"`sha512`\" pulumi-lang-yaml=\"`sha512`\" pulumi-lang-java=\"`sha512`\"\u003e`sha512`\u003c/span\u003e.\n"},"contentType":{"type":"string","description":"The file content type. Must be \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e for VM images or \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e for LXC images.\n"},"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"decompressionAlgorithm":{"type":"string","description":"Decompress the downloaded file using the specified compression algorithm. Must be one of \u003cspan pulumi-lang-nodejs=\"`gz`\" pulumi-lang-dotnet=\"`Gz`\" pulumi-lang-go=\"`gz`\" pulumi-lang-python=\"`gz`\" pulumi-lang-yaml=\"`gz`\" pulumi-lang-java=\"`gz`\"\u003e`gz`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lzo`\" pulumi-lang-dotnet=\"`Lzo`\" pulumi-lang-go=\"`lzo`\" pulumi-lang-python=\"`lzo`\" pulumi-lang-yaml=\"`lzo`\" pulumi-lang-java=\"`lzo`\"\u003e`lzo`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`zst`\" pulumi-lang-dotnet=\"`Zst`\" pulumi-lang-go=\"`zst`\" pulumi-lang-python=\"`zst`\" pulumi-lang-yaml=\"`zst`\" pulumi-lang-java=\"`zst`\"\u003e`zst`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`bz2`\" pulumi-lang-dotnet=\"`Bz2`\" pulumi-lang-go=\"`bz2`\" pulumi-lang-python=\"`bz2`\" pulumi-lang-yaml=\"`bz2`\" pulumi-lang-java=\"`bz2`\"\u003e`bz2`\u003c/span\u003e.\n"},"fileName":{"type":"string","description":"The file name. If not provided, it is calculated using \u003cspan pulumi-lang-nodejs=\"`url`\" pulumi-lang-dotnet=\"`Url`\" pulumi-lang-go=\"`url`\" pulumi-lang-python=\"`url`\" pulumi-lang-yaml=\"`url`\" pulumi-lang-java=\"`url`\"\u003e`url`\u003c/span\u003e. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the file already exists, an error will be returned.\n"},"size":{"type":"integer","description":"The file size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The file download timeout seconds. Default is 600 (10min).\n"},"url":{"type":"string","description":"The URL to download the file from. Must match regex: `https?://.*`.\n"},"verify":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, no SSL/TLS certificates will be verified.\n"}},"required":["contentType","datastoreId","fileName","nodeName","overwrite","overwriteUnmanaged","size","uploadTimeout","url","verify"],"inputProperties":{"checksum":{"type":"string","description":"The expected checksum of the file.\n"},"checksumAlgorithm":{"type":"string","description":"The algorithm to calculate the checksum of the file. Must be \u003cspan pulumi-lang-nodejs=\"`md5`\" pulumi-lang-dotnet=\"`Md5`\" pulumi-lang-go=\"`md5`\" pulumi-lang-python=\"`md5`\" pulumi-lang-yaml=\"`md5`\" pulumi-lang-java=\"`md5`\"\u003e`md5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha1`\" pulumi-lang-dotnet=\"`Sha1`\" pulumi-lang-go=\"`sha1`\" pulumi-lang-python=\"`sha1`\" pulumi-lang-yaml=\"`sha1`\" pulumi-lang-java=\"`sha1`\"\u003e`sha1`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha224`\" pulumi-lang-dotnet=\"`Sha224`\" pulumi-lang-go=\"`sha224`\" pulumi-lang-python=\"`sha224`\" pulumi-lang-yaml=\"`sha224`\" pulumi-lang-java=\"`sha224`\"\u003e`sha224`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha256`\" pulumi-lang-dotnet=\"`Sha256`\" pulumi-lang-go=\"`sha256`\" pulumi-lang-python=\"`sha256`\" pulumi-lang-yaml=\"`sha256`\" pulumi-lang-java=\"`sha256`\"\u003e`sha256`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha384`\" pulumi-lang-dotnet=\"`Sha384`\" pulumi-lang-go=\"`sha384`\" pulumi-lang-python=\"`sha384`\" pulumi-lang-yaml=\"`sha384`\" pulumi-lang-java=\"`sha384`\"\u003e`sha384`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha512`\" pulumi-lang-dotnet=\"`Sha512`\" pulumi-lang-go=\"`sha512`\" pulumi-lang-python=\"`sha512`\" pulumi-lang-yaml=\"`sha512`\" pulumi-lang-java=\"`sha512`\"\u003e`sha512`\u003c/span\u003e.\n"},"contentType":{"type":"string","description":"The file content type. Must be \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e for VM images or \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e for LXC images.\n"},"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"decompressionAlgorithm":{"type":"string","description":"Decompress the downloaded file using the specified compression algorithm. Must be one of \u003cspan pulumi-lang-nodejs=\"`gz`\" pulumi-lang-dotnet=\"`Gz`\" pulumi-lang-go=\"`gz`\" pulumi-lang-python=\"`gz`\" pulumi-lang-yaml=\"`gz`\" pulumi-lang-java=\"`gz`\"\u003e`gz`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lzo`\" pulumi-lang-dotnet=\"`Lzo`\" pulumi-lang-go=\"`lzo`\" pulumi-lang-python=\"`lzo`\" pulumi-lang-yaml=\"`lzo`\" pulumi-lang-java=\"`lzo`\"\u003e`lzo`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`zst`\" pulumi-lang-dotnet=\"`Zst`\" pulumi-lang-go=\"`zst`\" pulumi-lang-python=\"`zst`\" pulumi-lang-yaml=\"`zst`\" pulumi-lang-java=\"`zst`\"\u003e`zst`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`bz2`\" pulumi-lang-dotnet=\"`Bz2`\" pulumi-lang-go=\"`bz2`\" pulumi-lang-python=\"`bz2`\" pulumi-lang-yaml=\"`bz2`\" pulumi-lang-java=\"`bz2`\"\u003e`bz2`\u003c/span\u003e.\n"},"fileName":{"type":"string","description":"The file name. If not provided, it is calculated using \u003cspan pulumi-lang-nodejs=\"`url`\" pulumi-lang-dotnet=\"`Url`\" pulumi-lang-go=\"`url`\" pulumi-lang-python=\"`url`\" pulumi-lang-yaml=\"`url`\" pulumi-lang-java=\"`url`\"\u003e`url`\u003c/span\u003e. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the file already exists, an error will be returned.\n"},"uploadTimeout":{"type":"integer","description":"The file download timeout seconds. Default is 600 (10min).\n"},"url":{"type":"string","description":"The URL to download the file from. Must match regex: `https?://.*`.\n"},"verify":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, no SSL/TLS certificates will be verified.\n"}},"requiredInputs":["contentType","datastoreId","nodeName","url"],"stateInputs":{"description":"Input properties used for looking up and filtering File resources.\n","properties":{"checksum":{"type":"string","description":"The expected checksum of the file.\n"},"checksumAlgorithm":{"type":"string","description":"The algorithm to calculate the checksum of the file. Must be \u003cspan pulumi-lang-nodejs=\"`md5`\" pulumi-lang-dotnet=\"`Md5`\" pulumi-lang-go=\"`md5`\" pulumi-lang-python=\"`md5`\" pulumi-lang-yaml=\"`md5`\" pulumi-lang-java=\"`md5`\"\u003e`md5`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha1`\" pulumi-lang-dotnet=\"`Sha1`\" pulumi-lang-go=\"`sha1`\" pulumi-lang-python=\"`sha1`\" pulumi-lang-yaml=\"`sha1`\" pulumi-lang-java=\"`sha1`\"\u003e`sha1`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha224`\" pulumi-lang-dotnet=\"`Sha224`\" pulumi-lang-go=\"`sha224`\" pulumi-lang-python=\"`sha224`\" pulumi-lang-yaml=\"`sha224`\" pulumi-lang-java=\"`sha224`\"\u003e`sha224`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha256`\" pulumi-lang-dotnet=\"`Sha256`\" pulumi-lang-go=\"`sha256`\" pulumi-lang-python=\"`sha256`\" pulumi-lang-yaml=\"`sha256`\" pulumi-lang-java=\"`sha256`\"\u003e`sha256`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha384`\" pulumi-lang-dotnet=\"`Sha384`\" pulumi-lang-go=\"`sha384`\" pulumi-lang-python=\"`sha384`\" pulumi-lang-yaml=\"`sha384`\" pulumi-lang-java=\"`sha384`\"\u003e`sha384`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`sha512`\" pulumi-lang-dotnet=\"`Sha512`\" pulumi-lang-go=\"`sha512`\" pulumi-lang-python=\"`sha512`\" pulumi-lang-yaml=\"`sha512`\" pulumi-lang-java=\"`sha512`\"\u003e`sha512`\u003c/span\u003e.\n"},"contentType":{"type":"string","description":"The file content type. Must be \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e for VM images or \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e for LXC images.\n"},"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"decompressionAlgorithm":{"type":"string","description":"Decompress the downloaded file using the specified compression algorithm. Must be one of \u003cspan pulumi-lang-nodejs=\"`gz`\" pulumi-lang-dotnet=\"`Gz`\" pulumi-lang-go=\"`gz`\" pulumi-lang-python=\"`gz`\" pulumi-lang-yaml=\"`gz`\" pulumi-lang-java=\"`gz`\"\u003e`gz`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`lzo`\" pulumi-lang-dotnet=\"`Lzo`\" pulumi-lang-go=\"`lzo`\" pulumi-lang-python=\"`lzo`\" pulumi-lang-yaml=\"`lzo`\" pulumi-lang-java=\"`lzo`\"\u003e`lzo`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`zst`\" pulumi-lang-dotnet=\"`Zst`\" pulumi-lang-go=\"`zst`\" pulumi-lang-python=\"`zst`\" pulumi-lang-yaml=\"`zst`\" pulumi-lang-java=\"`zst`\"\u003e`zst`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`bz2`\" pulumi-lang-dotnet=\"`Bz2`\" pulumi-lang-go=\"`bz2`\" pulumi-lang-python=\"`bz2`\" pulumi-lang-yaml=\"`bz2`\" pulumi-lang-java=\"`bz2`\"\u003e`bz2`\u003c/span\u003e.\n"},"fileName":{"type":"string","description":"The file name. If not provided, it is calculated using \u003cspan pulumi-lang-nodejs=\"`url`\" pulumi-lang-dotnet=\"`Url`\" pulumi-lang-go=\"`url`\" pulumi-lang-python=\"`url`\" pulumi-lang-yaml=\"`url`\" pulumi-lang-java=\"`url`\"\u003e`url`\u003c/span\u003e. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the file already exists, an error will be returned.\n"},"size":{"type":"integer","description":"The file size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The file download timeout seconds. Default is 600 (10min).\n"},"url":{"type":"string","description":"The URL to download the file from. Must match regex: `https?://.*`.\n"},"verify":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, no SSL/TLS certificates will be verified.\n"}},"type":"object"}},"proxmoxve:HA/hAGroup:HAGroup":{"description":"Manages a High Availability group in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.ha.HAGroup(\"example\", {\n group: \"example\",\n comment: \"This is a comment.\",\n nodes: {\n node1: null,\n node2: 2,\n node3: 1,\n },\n restricted: true,\n noFailback: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.ha.HAGroup(\"example\",\n group=\"example\",\n comment=\"This is a comment.\",\n nodes={\n \"node1\": None,\n \"node2\": 2,\n \"node3\": 1,\n },\n restricted=True,\n no_failback=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.HA.HAGroup(\"example\", new()\n {\n Group = \"example\",\n Comment = \"This is a comment.\",\n Nodes = \n {\n { \"node1\", null },\n { \"node2\", 2 },\n { \"node3\", 1 },\n },\n Restricted = true,\n NoFailback = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ha.NewHAGroup(ctx, \"example\", \u0026ha.HAGroupArgs{\n\t\t\tGroup: pulumi.String(\"example\"),\n\t\t\tComment: pulumi.String(\"This is a comment.\"),\n\t\t\tNodes: pulumi.IntMap{\n\t\t\t\t\"node1\": nil,\n\t\t\t\t\"node2\": pulumi.Int(2),\n\t\t\t\t\"node3\": pulumi.Int(1),\n\t\t\t},\n\t\t\tRestricted: pulumi.Bool(true),\n\t\t\tNoFailback: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAGroup;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new HAGroup(\"example\", HAGroupArgs.builder()\n .group(\"example\")\n .comment(\"This is a comment.\")\n .nodes(Map.ofEntries(\n Map.entry(\"node1\", null),\n Map.entry(\"node2\", 2),\n Map.entry(\"node3\", 1)\n ))\n .restricted(true)\n .noFailback(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:HA:HAGroup\n properties:\n group: example\n comment: This is a comment.\n nodes:\n node1: null\n node2: 2\n node3: 1\n restricted: true\n noFailback: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nHA groups can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:HA/hAGroup:HAGroup example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment associated with this group\n"},"group":{"type":"string","description":"The identifier of the High Availability group to manage.\n"},"noFailback":{"type":"boolean","description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"nodes":{"type":"object","additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n"},"restricted":{"type":"boolean","description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"required":["group","noFailback","nodes","restricted"],"inputProperties":{"comment":{"type":"string","description":"The comment associated with this group\n"},"group":{"type":"string","description":"The identifier of the High Availability group to manage.\n"},"noFailback":{"type":"boolean","description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"nodes":{"type":"object","additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n"},"restricted":{"type":"boolean","description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"requiredInputs":["group","nodes"],"stateInputs":{"description":"Input properties used for looking up and filtering HAGroup resources.\n","properties":{"comment":{"type":"string","description":"The comment associated with this group\n"},"group":{"type":"string","description":"The identifier of the High Availability group to manage.\n"},"noFailback":{"type":"boolean","description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"},"nodes":{"type":"object","additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n"},"restricted":{"type":"boolean","description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group. Defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:HA/hAResource:HAResource":{"description":"Manages Proxmox HA resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.ha.HAResource(\"example\", {\n resourceId: \"vm:123\",\n state: \"started\",\n group: \"example\",\n comment: \"Managed by Pulumi\",\n}, {\n dependsOn: [exampleProxmoxVirtualEnvironmentHagroup],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.ha.HAResource(\"example\",\n resource_id=\"vm:123\",\n state=\"started\",\n group=\"example\",\n comment=\"Managed by Pulumi\",\n opts = pulumi.ResourceOptions(depends_on=[example_proxmox_virtual_environment_hagroup]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.HA.HAResource(\"example\", new()\n {\n ResourceId = \"vm:123\",\n State = \"started\",\n Group = \"example\",\n Comment = \"Managed by Pulumi\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleProxmoxVirtualEnvironmentHagroup,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := ha.NewHAResource(ctx, \"example\", \u0026ha.HAResourceArgs{\n\t\t\tResourceId: pulumi.String(\"vm:123\"),\n\t\t\tState: pulumi.String(\"started\"),\n\t\t\tGroup: pulumi.String(\"example\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleProxmoxVirtualEnvironmentHagroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAResource;\nimport io.muehlbachler.pulumi.proxmoxve.HA.HAResourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new HAResource(\"example\", HAResourceArgs.builder()\n .resourceId(\"vm:123\")\n .state(\"started\")\n .group(\"example\")\n .comment(\"Managed by Pulumi\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(exampleProxmoxVirtualEnvironmentHagroup)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:HA:HAResource\n properties:\n resourceId: vm:123\n state: started\n group: example\n comment: Managed by Pulumi\n options:\n dependsOn:\n - ${exampleProxmoxVirtualEnvironmentHagroup}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nHA resources can be imported using their identifiers, e.g.:\n\n```sh\n$ pulumi import proxmoxve:HA/hAResource:HAResource example vm:123\n```\n\n","properties":{"comment":{"type":"string","description":"The comment associated with this resource.\n"},"group":{"type":"string","description":"The identifier of the High Availability group this resource is a member of.\n"},"maxRelocate":{"type":"integer","description":"The maximal number of relocation attempts.\n"},"maxRestart":{"type":"integer","description":"The maximal number of restart attempts.\n"},"resourceId":{"type":"string","description":"The Proxmox HA resource identifier\n"},"state":{"type":"string","description":"The desired state of the resource.\n"},"type":{"type":"string","description":"The type of HA resources to create. If unset, it will be deduced from the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e.\n"}},"required":["resourceId","state","type"],"inputProperties":{"comment":{"type":"string","description":"The comment associated with this resource.\n"},"group":{"type":"string","description":"The identifier of the High Availability group this resource is a member of.\n"},"maxRelocate":{"type":"integer","description":"The maximal number of relocation attempts.\n"},"maxRestart":{"type":"integer","description":"The maximal number of restart attempts.\n"},"resourceId":{"type":"string","description":"The Proxmox HA resource identifier\n"},"state":{"type":"string","description":"The desired state of the resource.\n"},"type":{"type":"string","description":"The type of HA resources to create. If unset, it will be deduced from the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e.\n"}},"requiredInputs":["resourceId"],"stateInputs":{"description":"Input properties used for looking up and filtering HAResource resources.\n","properties":{"comment":{"type":"string","description":"The comment associated with this resource.\n"},"group":{"type":"string","description":"The identifier of the High Availability group this resource is a member of.\n"},"maxRelocate":{"type":"integer","description":"The maximal number of relocation attempts.\n"},"maxRestart":{"type":"integer","description":"The maximal number of restart attempts.\n"},"resourceId":{"type":"string","description":"The Proxmox HA resource identifier\n"},"state":{"type":"string","description":"The desired state of the resource.\n"},"type":{"type":"string","description":"The type of HA resources to create. If unset, it will be deduced from the \u003cspan pulumi-lang-nodejs=\"`resourceId`\" pulumi-lang-dotnet=\"`ResourceId`\" pulumi-lang-go=\"`resourceId`\" pulumi-lang-python=\"`resource_id`\" pulumi-lang-yaml=\"`resourceId`\" pulumi-lang-java=\"`resourceId`\"\u003e`resource_id`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:Hardware/mapping/dir:Dir":{"description":"Manages a directory mapping in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.hardware.mapping.Dir(\"example\", {\n comment: \"This is a comment\",\n name: \"example\",\n maps: [{\n node: \"pve\",\n path: \"/mnt/data\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.hardware.mapping.Dir(\"example\",\n comment=\"This is a comment\",\n name=\"example\",\n maps=[{\n \"node\": \"pve\",\n \"path\": \"/mnt/data\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Hardware.Mapping.Dir(\"example\", new()\n {\n Comment = \"This is a comment\",\n Name = \"example\",\n Maps = new[]\n {\n new ProxmoxVE.Hardware.Mapping.Inputs.DirMapArgs\n {\n Node = \"pve\",\n Path = \"/mnt/data\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.NewDir(ctx, \"example\", \u0026hardware.DirArgs{\n\t\t\tComment: pulumi.String(\"This is a comment\"),\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tMaps: mapping.DirMapTypeArray{\n\t\t\t\t\u0026mapping.DirMapTypeArgs{\n\t\t\t\t\tNode: pulumi.String(\"pve\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/data\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.Dir;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.DirArgs;\nimport com.pulumi.proxmoxve.Hardware.inputs.DirMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Dir(\"example\", DirArgs.builder()\n .comment(\"This is a comment\")\n .name(\"example\")\n .maps(DirMapArgs.builder()\n .node(\"pve\")\n .path(\"/mnt/data\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Hardware/mapping:Dir\n properties:\n comment: This is a comment\n name: example\n maps:\n - node: pve\n path: /mnt/data\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nA directory mapping can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Hardware/mapping/dir:Dir example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment of this directory mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/DirMap:DirMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this directory mapping.\n"}},"required":["maps","name"],"inputProperties":{"comment":{"type":"string","description":"The comment of this directory mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/DirMap:DirMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this directory mapping.\n"}},"requiredInputs":["maps"],"stateInputs":{"description":"Input properties used for looking up and filtering Dir resources.\n","properties":{"comment":{"type":"string","description":"The comment of this directory mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/DirMap:DirMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this directory mapping.\n"}},"type":"object"}},"proxmoxve:Hardware/mapping/pci:Pci":{"description":"Manages a PCI hardware mapping in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.hardware.mapping.Pci(\"example\", {\n comment: \"This is a comment\",\n name: \"example\",\n maps: [{\n comment: \"This is a device specific comment\",\n id: \"8086:5916\",\n iommuGroup: 0,\n node: \"pve\",\n path: \"0000:00:02.0\",\n subsystemId: \"8086:2068\",\n }],\n mediatedDevices: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.hardware.mapping.Pci(\"example\",\n comment=\"This is a comment\",\n name=\"example\",\n maps=[{\n \"comment\": \"This is a device specific comment\",\n \"id\": \"8086:5916\",\n \"iommu_group\": 0,\n \"node\": \"pve\",\n \"path\": \"0000:00:02.0\",\n \"subsystem_id\": \"8086:2068\",\n }],\n mediated_devices=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Hardware.Mapping.Pci(\"example\", new()\n {\n Comment = \"This is a comment\",\n Name = \"example\",\n Maps = new[]\n {\n new ProxmoxVE.Hardware.Mapping.Inputs.PciMapArgs\n {\n Comment = \"This is a device specific comment\",\n Id = \"8086:5916\",\n IommuGroup = 0,\n Node = \"pve\",\n Path = \"0000:00:02.0\",\n SubsystemId = \"8086:2068\",\n },\n },\n MediatedDevices = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.NewPci(ctx, \"example\", \u0026hardware.PciArgs{\n\t\t\tComment: pulumi.String(\"This is a comment\"),\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tMaps: mapping.PciMapTypeArray{\n\t\t\t\t\u0026mapping.PciMapTypeArgs{\n\t\t\t\t\tComment: pulumi.String(\"This is a device specific comment\"),\n\t\t\t\t\tId: pulumi.String(\"8086:5916\"),\n\t\t\t\t\tIommuGroup: pulumi.Int(0),\n\t\t\t\t\tNode: pulumi.String(\"pve\"),\n\t\t\t\t\tPath: pulumi.String(\"0000:00:02.0\"),\n\t\t\t\t\tSubsystemId: pulumi.String(\"8086:2068\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMediatedDevices: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.Pci;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.PciArgs;\nimport com.pulumi.proxmoxve.Hardware.inputs.PciMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Pci(\"example\", PciArgs.builder()\n .comment(\"This is a comment\")\n .name(\"example\")\n .maps(PciMapArgs.builder()\n .comment(\"This is a device specific comment\")\n .id(\"8086:5916\")\n .iommuGroup(0)\n .node(\"pve\")\n .path(\"0000:00:02.0\")\n .subsystemId(\"8086:2068\")\n .build())\n .mediatedDevices(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Hardware/mapping:Pci\n properties:\n comment: This is a comment\n name: example\n maps:\n - comment: This is a device specific comment\n id: 8086:5916\n iommuGroup: 0\n node: pve\n path: 0000:00:02.0\n subsystemId: 8086:2068\n mediatedDevices: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nA PCI hardware mapping can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Hardware/mapping/pci:Pci example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment of this PCI hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/PciMap:PciMap"},"description":"The actual map of devices for the PCI hardware mapping.\n"},"mediatedDevices":{"type":"boolean","description":"Indicates whether to enable mediated devices.\n"},"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"required":["maps","mediatedDevices","name"],"inputProperties":{"comment":{"type":"string","description":"The comment of this PCI hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/PciMap:PciMap"},"description":"The actual map of devices for the PCI hardware mapping.\n"},"mediatedDevices":{"type":"boolean","description":"Indicates whether to enable mediated devices.\n"},"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"requiredInputs":["maps"],"stateInputs":{"description":"Input properties used for looking up and filtering Pci resources.\n","properties":{"comment":{"type":"string","description":"The comment of this PCI hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/PciMap:PciMap"},"description":"The actual map of devices for the PCI hardware mapping.\n"},"mediatedDevices":{"type":"boolean","description":"Indicates whether to enable mediated devices.\n"},"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"type":"object"}},"proxmoxve:Hardware/mapping/usb:Usb":{"description":"Manages a USB hardware mapping in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.hardware.mapping.Usb(\"example\", {\n comment: \"This is a comment\",\n name: \"example\",\n maps: [{\n comment: \"This is a device specific comment\",\n id: \"8087:0a2b\",\n node: \"pve\",\n path: \"1-8.2\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.hardware.mapping.Usb(\"example\",\n comment=\"This is a comment\",\n name=\"example\",\n maps=[{\n \"comment\": \"This is a device specific comment\",\n \"id\": \"8087:0a2b\",\n \"node\": \"pve\",\n \"path\": \"1-8.2\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Hardware.Mapping.Usb(\"example\", new()\n {\n Comment = \"This is a comment\",\n Name = \"example\",\n Maps = new[]\n {\n new ProxmoxVE.Hardware.Mapping.Inputs.UsbMapArgs\n {\n Comment = \"This is a device specific comment\",\n Id = \"8087:0a2b\",\n Node = \"pve\",\n Path = \"1-8.2\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.NewUsb(ctx, \"example\", \u0026hardware.UsbArgs{\n\t\t\tComment: pulumi.String(\"This is a comment\"),\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tMaps: mapping.UsbMapTypeArray{\n\t\t\t\t\u0026mapping.UsbMapTypeArgs{\n\t\t\t\t\tComment: pulumi.String(\"This is a device specific comment\"),\n\t\t\t\t\tId: pulumi.String(\"8087:0a2b\"),\n\t\t\t\t\tNode: pulumi.String(\"pve\"),\n\t\t\t\t\tPath: pulumi.String(\"1-8.2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.Usb;\nimport io.muehlbachler.pulumi.proxmoxve.Hardware.UsbArgs;\nimport com.pulumi.proxmoxve.Hardware.inputs.UsbMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Usb(\"example\", UsbArgs.builder()\n .comment(\"This is a comment\")\n .name(\"example\")\n .maps(UsbMapArgs.builder()\n .comment(\"This is a device specific comment\")\n .id(\"8087:0a2b\")\n .node(\"pve\")\n .path(\"1-8.2\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Hardware/mapping:Usb\n properties:\n comment: This is a comment\n name: example\n maps:\n - comment: This is a device specific comment\n id: 8087:0a2b\n node: pve\n path: 1-8.2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nA USB hardware mapping can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Hardware/mapping/usb:Usb example example\n```\n\n","properties":{"comment":{"type":"string","description":"The comment of this USB hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/UsbMap:UsbMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this hardware mapping.\n"}},"required":["maps","name"],"inputProperties":{"comment":{"type":"string","description":"The comment of this USB hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/UsbMap:UsbMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this hardware mapping.\n"}},"requiredInputs":["maps"],"stateInputs":{"description":"Input properties used for looking up and filtering Usb resources.\n","properties":{"comment":{"type":"string","description":"The comment of this USB hardware mapping.\n"},"maps":{"type":"array","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/UsbMap:UsbMap"},"description":"The actual map of devices for the hardware mapping.\n"},"name":{"type":"string","description":"The name of this hardware mapping.\n"}},"type":"object"}},"proxmoxve:Metrics/metricsServer:MetricsServer":{"description":"Manages PVE metrics server.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst influxdbServer = new proxmoxve.metrics.MetricsServer(\"influxdb_server\", {\n name: \"example_influxdb_server\",\n server: \"192.168.3.2\",\n port: 8089,\n type: \"influxdb\",\n});\nconst graphiteServer = new proxmoxve.metrics.MetricsServer(\"graphite_server\", {\n name: \"example_graphite_server\",\n server: \"192.168.4.2\",\n port: 2003,\n type: \"graphite\",\n});\nconst opentelemetryServer = new proxmoxve.metrics.MetricsServer(\"opentelemetry_server\", {\n name: \"example_opentelemetry_server\",\n server: \"192.168.5.2\",\n port: 4318,\n type: \"opentelemetry\",\n opentelemetryProto: \"http\",\n opentelemetryPath: \"/v1/metrics\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ninfluxdb_server = proxmoxve.metrics.MetricsServer(\"influxdb_server\",\n name=\"example_influxdb_server\",\n server=\"192.168.3.2\",\n port=8089,\n type=\"influxdb\")\ngraphite_server = proxmoxve.metrics.MetricsServer(\"graphite_server\",\n name=\"example_graphite_server\",\n server=\"192.168.4.2\",\n port=2003,\n type=\"graphite\")\nopentelemetry_server = proxmoxve.metrics.MetricsServer(\"opentelemetry_server\",\n name=\"example_opentelemetry_server\",\n server=\"192.168.5.2\",\n port=4318,\n type=\"opentelemetry\",\n opentelemetry_proto=\"http\",\n opentelemetry_path=\"/v1/metrics\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var influxdbServer = new ProxmoxVE.Metrics.MetricsServer(\"influxdb_server\", new()\n {\n Name = \"example_influxdb_server\",\n Server = \"192.168.3.2\",\n Port = 8089,\n Type = \"influxdb\",\n });\n\n var graphiteServer = new ProxmoxVE.Metrics.MetricsServer(\"graphite_server\", new()\n {\n Name = \"example_graphite_server\",\n Server = \"192.168.4.2\",\n Port = 2003,\n Type = \"graphite\",\n });\n\n var opentelemetryServer = new ProxmoxVE.Metrics.MetricsServer(\"opentelemetry_server\", new()\n {\n Name = \"example_opentelemetry_server\",\n Server = \"192.168.5.2\",\n Port = 4318,\n Type = \"opentelemetry\",\n OpentelemetryProto = \"http\",\n OpentelemetryPath = \"/v1/metrics\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/metrics\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := metrics.NewMetricsServer(ctx, \"influxdb_server\", \u0026metrics.MetricsServerArgs{\n\t\t\tName: pulumi.String(\"example_influxdb_server\"),\n\t\t\tServer: pulumi.String(\"192.168.3.2\"),\n\t\t\tPort: pulumi.Int(8089),\n\t\t\tType: pulumi.String(\"influxdb\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = metrics.NewMetricsServer(ctx, \"graphite_server\", \u0026metrics.MetricsServerArgs{\n\t\t\tName: pulumi.String(\"example_graphite_server\"),\n\t\t\tServer: pulumi.String(\"192.168.4.2\"),\n\t\t\tPort: pulumi.Int(2003),\n\t\t\tType: pulumi.String(\"graphite\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = metrics.NewMetricsServer(ctx, \"opentelemetry_server\", \u0026metrics.MetricsServerArgs{\n\t\t\tName: pulumi.String(\"example_opentelemetry_server\"),\n\t\t\tServer: pulumi.String(\"192.168.5.2\"),\n\t\t\tPort: pulumi.Int(4318),\n\t\t\tType: pulumi.String(\"opentelemetry\"),\n\t\t\tOpentelemetryProto: pulumi.String(\"http\"),\n\t\t\tOpentelemetryPath: pulumi.String(\"/v1/metrics\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Metrics.MetricsServer;\nimport io.muehlbachler.pulumi.proxmoxve.Metrics.MetricsServerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var influxdbServer = new MetricsServer(\"influxdbServer\", MetricsServerArgs.builder()\n .name(\"example_influxdb_server\")\n .server(\"192.168.3.2\")\n .port(8089)\n .type(\"influxdb\")\n .build());\n\n var graphiteServer = new MetricsServer(\"graphiteServer\", MetricsServerArgs.builder()\n .name(\"example_graphite_server\")\n .server(\"192.168.4.2\")\n .port(2003)\n .type(\"graphite\")\n .build());\n\n var opentelemetryServer = new MetricsServer(\"opentelemetryServer\", MetricsServerArgs.builder()\n .name(\"example_opentelemetry_server\")\n .server(\"192.168.5.2\")\n .port(4318)\n .type(\"opentelemetry\")\n .opentelemetryProto(\"http\")\n .opentelemetryPath(\"/v1/metrics\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n influxdbServer:\n type: proxmoxve:Metrics:MetricsServer\n name: influxdb_server\n properties:\n name: example_influxdb_server\n server: 192.168.3.2\n port: 8089\n type: influxdb\n graphiteServer:\n type: proxmoxve:Metrics:MetricsServer\n name: graphite_server\n properties:\n name: example_graphite_server\n server: 192.168.4.2\n port: 2003\n type: graphite\n opentelemetryServer:\n type: proxmoxve:Metrics:MetricsServer\n name: opentelemetry_server\n properties:\n name: example_opentelemetry_server\n server: 192.168.5.2\n port: 4318\n type: opentelemetry\n opentelemetryProto: http\n opentelemetryPath: /v1/metrics\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n```sh\n$ pulumi import proxmoxve:Metrics/metricsServer:MetricsServer example example\n```\n\n","properties":{"disable":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable this metric server.\n"},"graphitePath":{"type":"string","description":"Root graphite path (ex: `proxmox.mycluster.mykey`).\n"},"graphiteProto":{"type":"string","description":"Protocol to send graphite data. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxApiPathPrefix":{"type":"string","description":"An API path prefix inserted between `\u003chost\u003e:\u003cport\u003e/` and `/api2/`. Can be useful if the InfluxDB service runs behind a reverse proxy.\n"},"influxBucket":{"type":"string","description":"The InfluxDB bucket/db. Only necessary when using the http v2 api.\n"},"influxDbProto":{"type":"string","description":"Protocol for InfluxDB. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxMaxBodySize":{"type":"integer","description":"InfluxDB max-body-size in bytes. Requests are batched up to this size. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`25000000`\" pulumi-lang-dotnet=\"`25000000`\" pulumi-lang-go=\"`25000000`\" pulumi-lang-python=\"`25000000`\" pulumi-lang-yaml=\"`25000000`\" pulumi-lang-java=\"`25000000`\"\u003e`25000000`\u003c/span\u003e.\n"},"influxOrganization":{"type":"string","description":"The InfluxDB organization. Only necessary when using the http v2 api. Has no meaning when using v2 compatibility api.\n"},"influxToken":{"type":"string","description":"The InfluxDB access token. Only necessary when using the http v2 api. If the v2 compatibility api is used, use `user:password` instead.\n","secret":true},"influxVerify":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e to disable certificate verification for https endpoints.\n"},"mtu":{"type":"integer","description":"MTU (maximum transmission unit) for metrics transmission over UDP. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1500`\" pulumi-lang-dotnet=\"`1500`\" pulumi-lang-go=\"`1500`\" pulumi-lang-python=\"`1500`\" pulumi-lang-yaml=\"`1500`\" pulumi-lang-java=\"`1500`\"\u003e`1500`\u003c/span\u003e (allowed \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e - \u003cspan pulumi-lang-nodejs=\"`65536`\" pulumi-lang-dotnet=\"`65536`\" pulumi-lang-go=\"`65536`\" pulumi-lang-python=\"`65536`\" pulumi-lang-yaml=\"`65536`\" pulumi-lang-java=\"`65536`\"\u003e`65536`\u003c/span\u003e).\n"},"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"},"opentelemetryPath":{"type":"string","description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n"},"opentelemetryProto":{"type":"string","description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e.\n"},"port":{"type":"integer","description":"Server network port.\n"},"server":{"type":"string","description":"Server dns name or IP address.\n"},"timeout":{"type":"integer","description":"TCP socket timeout in seconds. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e.\n"},"type":{"type":"string","description":"Plugin type. Choice is between \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n"}},"required":["name","port","server","type"],"inputProperties":{"disable":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable this metric server.\n"},"graphitePath":{"type":"string","description":"Root graphite path (ex: `proxmox.mycluster.mykey`).\n"},"graphiteProto":{"type":"string","description":"Protocol to send graphite data. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxApiPathPrefix":{"type":"string","description":"An API path prefix inserted between `\u003chost\u003e:\u003cport\u003e/` and `/api2/`. Can be useful if the InfluxDB service runs behind a reverse proxy.\n"},"influxBucket":{"type":"string","description":"The InfluxDB bucket/db. Only necessary when using the http v2 api.\n"},"influxDbProto":{"type":"string","description":"Protocol for InfluxDB. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxMaxBodySize":{"type":"integer","description":"InfluxDB max-body-size in bytes. Requests are batched up to this size. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`25000000`\" pulumi-lang-dotnet=\"`25000000`\" pulumi-lang-go=\"`25000000`\" pulumi-lang-python=\"`25000000`\" pulumi-lang-yaml=\"`25000000`\" pulumi-lang-java=\"`25000000`\"\u003e`25000000`\u003c/span\u003e.\n"},"influxOrganization":{"type":"string","description":"The InfluxDB organization. Only necessary when using the http v2 api. Has no meaning when using v2 compatibility api.\n"},"influxToken":{"type":"string","description":"The InfluxDB access token. Only necessary when using the http v2 api. If the v2 compatibility api is used, use `user:password` instead.\n","secret":true},"influxVerify":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e to disable certificate verification for https endpoints.\n"},"mtu":{"type":"integer","description":"MTU (maximum transmission unit) for metrics transmission over UDP. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1500`\" pulumi-lang-dotnet=\"`1500`\" pulumi-lang-go=\"`1500`\" pulumi-lang-python=\"`1500`\" pulumi-lang-yaml=\"`1500`\" pulumi-lang-java=\"`1500`\"\u003e`1500`\u003c/span\u003e (allowed \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e - \u003cspan pulumi-lang-nodejs=\"`65536`\" pulumi-lang-dotnet=\"`65536`\" pulumi-lang-go=\"`65536`\" pulumi-lang-python=\"`65536`\" pulumi-lang-yaml=\"`65536`\" pulumi-lang-java=\"`65536`\"\u003e`65536`\u003c/span\u003e).\n"},"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"},"opentelemetryPath":{"type":"string","description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n"},"opentelemetryProto":{"type":"string","description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e.\n"},"port":{"type":"integer","description":"Server network port.\n"},"server":{"type":"string","description":"Server dns name or IP address.\n"},"timeout":{"type":"integer","description":"TCP socket timeout in seconds. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e.\n"},"type":{"type":"string","description":"Plugin type. Choice is between \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n"}},"requiredInputs":["port","server","type"],"stateInputs":{"description":"Input properties used for looking up and filtering MetricsServer resources.\n","properties":{"disable":{"type":"boolean","description":"Set this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e to disable this metric server.\n"},"graphitePath":{"type":"string","description":"Root graphite path (ex: `proxmox.mycluster.mykey`).\n"},"graphiteProto":{"type":"string","description":"Protocol to send graphite data. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`tcp`\" pulumi-lang-dotnet=\"`Tcp`\" pulumi-lang-go=\"`tcp`\" pulumi-lang-python=\"`tcp`\" pulumi-lang-yaml=\"`tcp`\" pulumi-lang-java=\"`tcp`\"\u003e`tcp`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxApiPathPrefix":{"type":"string","description":"An API path prefix inserted between `\u003chost\u003e:\u003cport\u003e/` and `/api2/`. Can be useful if the InfluxDB service runs behind a reverse proxy.\n"},"influxBucket":{"type":"string","description":"The InfluxDB bucket/db. Only necessary when using the http v2 api.\n"},"influxDbProto":{"type":"string","description":"Protocol for InfluxDB. Choice is between \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`udp`\" pulumi-lang-dotnet=\"`Udp`\" pulumi-lang-go=\"`udp`\" pulumi-lang-python=\"`udp`\" pulumi-lang-yaml=\"`udp`\" pulumi-lang-java=\"`udp`\"\u003e`udp`\u003c/span\u003e.\n"},"influxMaxBodySize":{"type":"integer","description":"InfluxDB max-body-size in bytes. Requests are batched up to this size. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`25000000`\" pulumi-lang-dotnet=\"`25000000`\" pulumi-lang-go=\"`25000000`\" pulumi-lang-python=\"`25000000`\" pulumi-lang-yaml=\"`25000000`\" pulumi-lang-java=\"`25000000`\"\u003e`25000000`\u003c/span\u003e.\n"},"influxOrganization":{"type":"string","description":"The InfluxDB organization. Only necessary when using the http v2 api. Has no meaning when using v2 compatibility api.\n"},"influxToken":{"type":"string","description":"The InfluxDB access token. Only necessary when using the http v2 api. If the v2 compatibility api is used, use `user:password` instead.\n","secret":true},"influxVerify":{"type":"boolean","description":"Set to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e to disable certificate verification for https endpoints.\n"},"mtu":{"type":"integer","description":"MTU (maximum transmission unit) for metrics transmission over UDP. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1500`\" pulumi-lang-dotnet=\"`1500`\" pulumi-lang-go=\"`1500`\" pulumi-lang-python=\"`1500`\" pulumi-lang-yaml=\"`1500`\" pulumi-lang-java=\"`1500`\"\u003e`1500`\u003c/span\u003e (allowed \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e - \u003cspan pulumi-lang-nodejs=\"`65536`\" pulumi-lang-dotnet=\"`65536`\" pulumi-lang-go=\"`65536`\" pulumi-lang-python=\"`65536`\" pulumi-lang-yaml=\"`65536`\" pulumi-lang-java=\"`65536`\"\u003e`65536`\u003c/span\u003e).\n"},"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"},"opentelemetryPath":{"type":"string","description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n"},"opentelemetryProto":{"type":"string","description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e.\n"},"port":{"type":"integer","description":"Server network port.\n"},"server":{"type":"string","description":"Server dns name or IP address.\n"},"timeout":{"type":"integer","description":"TCP socket timeout in seconds. If not set, PVE default is \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e.\n"},"type":{"type":"string","description":"Plugin type. Choice is between \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:Network/firewall:Firewall":{"description":"Manages firewall options on the cluster level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.network.Firewall(\"example\", {\n enabled: false,\n ebtables: false,\n inputPolicy: \"DROP\",\n outputPolicy: \"ACCEPT\",\n forwardPolicy: \"ACCEPT\",\n logRatelimit: {\n enabled: false,\n burst: 10,\n rate: \"5/second\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.network.Firewall(\"example\",\n enabled=False,\n ebtables=False,\n input_policy=\"DROP\",\n output_policy=\"ACCEPT\",\n forward_policy=\"ACCEPT\",\n log_ratelimit={\n \"enabled\": False,\n \"burst\": 10,\n \"rate\": \"5/second\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Network.Firewall(\"example\", new()\n {\n Enabled = false,\n Ebtables = false,\n InputPolicy = \"DROP\",\n OutputPolicy = \"ACCEPT\",\n ForwardPolicy = \"ACCEPT\",\n LogRatelimit = new ProxmoxVE.Network.Inputs.FirewallLogRatelimitArgs\n {\n Enabled = false,\n Burst = 10,\n Rate = \"5/second\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewall(ctx, \"example\", \u0026network.FirewallArgs{\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tEbtables: pulumi.Bool(false),\n\t\t\tInputPolicy: pulumi.String(\"DROP\"),\n\t\t\tOutputPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tForwardPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tLogRatelimit: \u0026network.FirewallLogRatelimitArgs{\n\t\t\t\tEnabled: pulumi.Bool(false),\n\t\t\t\tBurst: pulumi.Int(10),\n\t\t\t\tRate: pulumi.String(\"5/second\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.Firewall;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallLogRatelimitArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Firewall(\"example\", FirewallArgs.builder()\n .enabled(false)\n .ebtables(false)\n .inputPolicy(\"DROP\")\n .outputPolicy(\"ACCEPT\")\n .forwardPolicy(\"ACCEPT\")\n .logRatelimit(FirewallLogRatelimitArgs.builder()\n .enabled(false)\n .burst(10)\n .rate(\"5/second\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Network:Firewall\n properties:\n enabled: false\n ebtables: false\n inputPolicy: DROP\n outputPolicy: ACCEPT\n forwardPolicy: ACCEPT\n logRatelimit:\n enabled: false\n burst: 10\n rate: 5/second\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nBe careful not to use this resource multiple times for the same node.\n\n## Import\n\nInstances can be imported without an ID, but you still need to pass one, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewall:Firewall example example\n```\n\n","properties":{"ebtables":{"type":"boolean","description":"Enable ebtables rules cluster wide.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall cluster wide.\n"},"forwardPolicy":{"type":"string","description":"The default forward policy (`ACCEPT`, `DROP`).\n"},"inputPolicy":{"type":"string","description":"The default input policy (`ACCEPT`, `DROP`, `REJECT`).\n"},"logRatelimit":{"$ref":"#/types/proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit","description":"The log rate limit.\n"},"outputPolicy":{"type":"string","description":"The default output policy (`ACCEPT`, `DROP`, `REJECT`).\n"}},"inputProperties":{"ebtables":{"type":"boolean","description":"Enable ebtables rules cluster wide.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall cluster wide.\n"},"forwardPolicy":{"type":"string","description":"The default forward policy (`ACCEPT`, `DROP`).\n"},"inputPolicy":{"type":"string","description":"The default input policy (`ACCEPT`, `DROP`, `REJECT`).\n"},"logRatelimit":{"$ref":"#/types/proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit","description":"The log rate limit.\n"},"outputPolicy":{"type":"string","description":"The default output policy (`ACCEPT`, `DROP`, `REJECT`).\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Firewall resources.\n","properties":{"ebtables":{"type":"boolean","description":"Enable ebtables rules cluster wide.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall cluster wide.\n"},"forwardPolicy":{"type":"string","description":"The default forward policy (`ACCEPT`, `DROP`).\n"},"inputPolicy":{"type":"string","description":"The default input policy (`ACCEPT`, `DROP`, `REJECT`).\n"},"logRatelimit":{"$ref":"#/types/proxmoxve:Network/FirewallLogRatelimit:FirewallLogRatelimit","description":"The log rate limit.\n"},"outputPolicy":{"type":"string","description":"The default output policy (`ACCEPT`, `DROP`, `REJECT`).\n"}},"type":"object"}},"proxmoxve:Network/firewallAlias:FirewallAlias":{"description":"Aliases are used to see what devices or group of devices are affected by a rule.\nWe can create aliases to identify an IP address or a network. Aliases can be\ncreated on the cluster level, on VM / Container level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst localNetwork = new proxmoxve.network.FirewallAlias(\"local_network\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n name: \"local_network\",\n cidr: \"192.168.0.0/23\",\n comment: \"Managed by Pulumi\",\n}, {\n dependsOn: [example],\n});\nconst ubuntuVm = new proxmoxve.network.FirewallAlias(\"ubuntu_vm\", {\n name: \"ubuntu\",\n cidr: \"192.168.0.1\",\n comment: \"Managed by Pulumi\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nlocal_network = proxmoxve.network.FirewallAlias(\"local_network\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n name=\"local_network\",\n cidr=\"192.168.0.0/23\",\n comment=\"Managed by Pulumi\",\n opts = pulumi.ResourceOptions(depends_on=[example]))\nubuntu_vm = proxmoxve.network.FirewallAlias(\"ubuntu_vm\",\n name=\"ubuntu\",\n cidr=\"192.168.0.1\",\n comment=\"Managed by Pulumi\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var localNetwork = new ProxmoxVE.Network.FirewallAlias(\"local_network\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Name = \"local_network\",\n Cidr = \"192.168.0.0/23\",\n Comment = \"Managed by Pulumi\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n },\n });\n\n var ubuntuVm = new ProxmoxVE.Network.FirewallAlias(\"ubuntu_vm\", new()\n {\n Name = \"ubuntu\",\n Cidr = \"192.168.0.1\",\n Comment = \"Managed by Pulumi\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallAlias(ctx, \"local_network\", \u0026network.FirewallAliasArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tName: pulumi.String(\"local_network\"),\n\t\t\tCidr: pulumi.String(\"192.168.0.0/23\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = network.NewFirewallAlias(ctx, \"ubuntu_vm\", \u0026network.FirewallAliasArgs{\n\t\t\tName: pulumi.String(\"ubuntu\"),\n\t\t\tCidr: pulumi.String(\"192.168.0.1\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallAlias;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallAliasArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var localNetwork = new FirewallAlias(\"localNetwork\", FirewallAliasArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .name(\"local_network\")\n .cidr(\"192.168.0.0/23\")\n .comment(\"Managed by Pulumi\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(example)\n .build());\n\n var ubuntuVm = new FirewallAlias(\"ubuntuVm\", FirewallAliasArgs.builder()\n .name(\"ubuntu\")\n .cidr(\"192.168.0.1\")\n .comment(\"Managed by Pulumi\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n localNetwork:\n type: proxmoxve:Network:FirewallAlias\n name: local_network\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n name: local_network\n cidr: 192.168.0.0/23\n comment: Managed by Pulumi\n options:\n dependsOn:\n - ${example}\n ubuntuVm:\n type: proxmoxve:Network:FirewallAlias\n name: ubuntu_vm\n properties:\n name: ubuntu\n cidr: 192.168.0.1\n comment: Managed by Pulumi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"cidr":{"type":"string","description":"Network/IP specification in CIDR format.\n"},"comment":{"type":"string","description":"Alias comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level aliases.\n"},"name":{"type":"string","description":"Alias name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level aliases.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level aliases.\n"}},"required":["cidr","name"],"inputProperties":{"cidr":{"type":"string","description":"Network/IP specification in CIDR format.\n"},"comment":{"type":"string","description":"Alias comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level aliases.\n"},"name":{"type":"string","description":"Alias name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level aliases.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level aliases.\n"}},"requiredInputs":["cidr"],"stateInputs":{"description":"Input properties used for looking up and filtering FirewallAlias resources.\n","properties":{"cidr":{"type":"string","description":"Network/IP specification in CIDR format.\n"},"comment":{"type":"string","description":"Alias comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level aliases.\n"},"name":{"type":"string","description":"Alias name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level aliases.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level aliases.\n"}},"type":"object"}},"proxmoxve:Network/firewallIPSet:FirewallIPSet":{"description":"An IPSet allows us to group multiple IP addresses, IP subnets and aliases. IPSets can be\ncreated on the cluster level, on VM / Container level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ipset = new proxmoxve.network.FirewallIPSet(\"ipset\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n name: \"local_network\",\n comment: \"Managed by Pulumi\",\n cidrs: [\n {\n name: \"192.168.0.0/23\",\n comment: \"Local network 1\",\n },\n {\n name: \"192.168.0.1\",\n comment: \"Server 1\",\n nomatch: true,\n },\n {\n name: \"192.168.2.1\",\n comment: \"Server 1\",\n },\n ],\n}, {\n dependsOn: [example],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nipset = proxmoxve.network.FirewallIPSet(\"ipset\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n name=\"local_network\",\n comment=\"Managed by Pulumi\",\n cidrs=[\n {\n \"name\": \"192.168.0.0/23\",\n \"comment\": \"Local network 1\",\n },\n {\n \"name\": \"192.168.0.1\",\n \"comment\": \"Server 1\",\n \"nomatch\": True,\n },\n {\n \"name\": \"192.168.2.1\",\n \"comment\": \"Server 1\",\n },\n ],\n opts = pulumi.ResourceOptions(depends_on=[example]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ipset = new ProxmoxVE.Network.FirewallIPSet(\"ipset\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Name = \"local_network\",\n Comment = \"Managed by Pulumi\",\n Cidrs = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallIPSetCidrArgs\n {\n Name = \"192.168.0.0/23\",\n Comment = \"Local network 1\",\n },\n new ProxmoxVE.Network.Inputs.FirewallIPSetCidrArgs\n {\n Name = \"192.168.0.1\",\n Comment = \"Server 1\",\n Nomatch = true,\n },\n new ProxmoxVE.Network.Inputs.FirewallIPSetCidrArgs\n {\n Name = \"192.168.2.1\",\n Comment = \"Server 1\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallIPSet(ctx, \"ipset\", \u0026network.FirewallIPSetArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tName: pulumi.String(\"local_network\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tCidrs: network.FirewallIPSetCidrArray{\n\t\t\t\t\u0026network.FirewallIPSetCidrArgs{\n\t\t\t\t\tName: pulumi.String(\"192.168.0.0/23\"),\n\t\t\t\t\tComment: pulumi.String(\"Local network 1\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallIPSetCidrArgs{\n\t\t\t\t\tName: pulumi.String(\"192.168.0.1\"),\n\t\t\t\t\tComment: pulumi.String(\"Server 1\"),\n\t\t\t\t\tNomatch: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallIPSetCidrArgs{\n\t\t\t\t\tName: pulumi.String(\"192.168.2.1\"),\n\t\t\t\t\tComment: pulumi.String(\"Server 1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallIPSet;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallIPSetArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallIPSetCidrArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ipset = new FirewallIPSet(\"ipset\", FirewallIPSetArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .name(\"local_network\")\n .comment(\"Managed by Pulumi\")\n .cidrs( \n FirewallIPSetCidrArgs.builder()\n .name(\"192.168.0.0/23\")\n .comment(\"Local network 1\")\n .build(),\n FirewallIPSetCidrArgs.builder()\n .name(\"192.168.0.1\")\n .comment(\"Server 1\")\n .nomatch(true)\n .build(),\n FirewallIPSetCidrArgs.builder()\n .name(\"192.168.2.1\")\n .comment(\"Server 1\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(example)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ipset:\n type: proxmoxve:Network:FirewallIPSet\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n name: local_network\n comment: Managed by Pulumi\n cidrs:\n - name: 192.168.0.0/23\n comment: Local network 1\n - name: 192.168.0.1\n comment: Server 1\n nomatch: true\n - name: 192.168.2.1\n comment: Server 1\n options:\n dependsOn:\n - ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container IPSet\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e/\u003cipset_name\u003e`\n\nExample uses node name `pve` and container ID `100` and ipset name `local_network`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallIPSet:FirewallIPSet container_ipset container/pve/100/local_network\n```\n\n","properties":{"cidrs":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr"},"description":"IP/CIDR block (multiple blocks supported).\n"},"comment":{"type":"string","description":"IPSet comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level ipsets.\n"},"name":{"type":"string","description":"IPSet name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level ipsets.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level ipsets.\n"}},"required":["name"],"inputProperties":{"cidrs":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr"},"description":"IP/CIDR block (multiple blocks supported).\n","willReplaceOnChanges":true},"comment":{"type":"string","description":"IPSet comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level ipsets.\n"},"name":{"type":"string","description":"IPSet name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level ipsets.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level ipsets.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering FirewallIPSet resources.\n","properties":{"cidrs":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallIPSetCidr:FirewallIPSetCidr"},"description":"IP/CIDR block (multiple blocks supported).\n","willReplaceOnChanges":true},"comment":{"type":"string","description":"IPSet comment.\n"},"containerId":{"type":"integer","description":"Container ID. Leave empty for cluster level ipsets.\n"},"name":{"type":"string","description":"IPSet name.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level ipsets.\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for cluster level ipsets.\n"}},"type":"object"}},"proxmoxve:Network/firewallOptions:FirewallOptions":{"description":"Manages firewall options on VM / Container level.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.network.FirewallOptions(\"example\", {\n nodeName: exampleProxmoxVirtualEnvironmentVm.nodeName,\n vmId: exampleProxmoxVirtualEnvironmentVm.vmId,\n dhcp: true,\n enabled: false,\n ipfilter: true,\n logLevelIn: \"info\",\n logLevelOut: \"info\",\n macfilter: false,\n ndp: true,\n inputPolicy: \"ACCEPT\",\n outputPolicy: \"ACCEPT\",\n radv: true,\n}, {\n dependsOn: [exampleProxmoxVirtualEnvironmentVm],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.network.FirewallOptions(\"example\",\n node_name=example_proxmox_virtual_environment_vm[\"nodeName\"],\n vm_id=example_proxmox_virtual_environment_vm[\"vmId\"],\n dhcp=True,\n enabled=False,\n ipfilter=True,\n log_level_in=\"info\",\n log_level_out=\"info\",\n macfilter=False,\n ndp=True,\n input_policy=\"ACCEPT\",\n output_policy=\"ACCEPT\",\n radv=True,\n opts = pulumi.ResourceOptions(depends_on=[example_proxmox_virtual_environment_vm]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Network.FirewallOptions(\"example\", new()\n {\n NodeName = exampleProxmoxVirtualEnvironmentVm.NodeName,\n VmId = exampleProxmoxVirtualEnvironmentVm.VmId,\n Dhcp = true,\n Enabled = false,\n Ipfilter = true,\n LogLevelIn = \"info\",\n LogLevelOut = \"info\",\n Macfilter = false,\n Ndp = true,\n InputPolicy = \"ACCEPT\",\n OutputPolicy = \"ACCEPT\",\n Radv = true,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleProxmoxVirtualEnvironmentVm,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallOptions(ctx, \"example\", \u0026network.FirewallOptionsArgs{\n\t\t\tNodeName: pulumi.Any(exampleProxmoxVirtualEnvironmentVm.NodeName),\n\t\t\tVmId: pulumi.Any(exampleProxmoxVirtualEnvironmentVm.VmId),\n\t\t\tDhcp: pulumi.Bool(true),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t\tIpfilter: pulumi.Bool(true),\n\t\t\tLogLevelIn: pulumi.String(\"info\"),\n\t\t\tLogLevelOut: pulumi.String(\"info\"),\n\t\t\tMacfilter: pulumi.Bool(false),\n\t\t\tNdp: pulumi.Bool(true),\n\t\t\tInputPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tOutputPolicy: pulumi.String(\"ACCEPT\"),\n\t\t\tRadv: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleProxmoxVirtualEnvironmentVm,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallOptions;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallOptionsArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new FirewallOptions(\"example\", FirewallOptionsArgs.builder()\n .nodeName(exampleProxmoxVirtualEnvironmentVm.nodeName())\n .vmId(exampleProxmoxVirtualEnvironmentVm.vmId())\n .dhcp(true)\n .enabled(false)\n .ipfilter(true)\n .logLevelIn(\"info\")\n .logLevelOut(\"info\")\n .macfilter(false)\n .ndp(true)\n .inputPolicy(\"ACCEPT\")\n .outputPolicy(\"ACCEPT\")\n .radv(true)\n .build(), CustomResourceOptions.builder()\n .dependsOn(exampleProxmoxVirtualEnvironmentVm)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Network:FirewallOptions\n properties:\n nodeName: ${exampleProxmoxVirtualEnvironmentVm.nodeName}\n vmId: ${exampleProxmoxVirtualEnvironmentVm.vmId}\n dhcp: true\n enabled: false\n ipfilter: true\n logLevelIn: info\n logLevelOut: info\n macfilter: false\n ndp: true\n inputPolicy: ACCEPT\n outputPolicy: ACCEPT\n radv: true\n options:\n dependsOn:\n - ${exampleProxmoxVirtualEnvironmentVm}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container Firewall Options\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e`\n\nExample uses node name `pve` and container ID `100`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallOptions:FirewallOptions container_firewall_options container/pve/100\n```\n\n","properties":{"containerId":{"type":"integer","description":"Container ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n"},"dhcp":{"type":"boolean","description":"Enable DHCP.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall.\n"},"inputPolicy":{"type":"string","description":"The default input\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"ipfilter":{"type":"boolean","description":"Enable default IP filters. This is equivalent to\nadding an empty `ipfilter-net\u003cid\u003e` ipset for every interface. Such ipsets\nimplicitly contain sane default restrictions such as restricting IPv6 link\nlocal addresses to the one derived from the interface's MAC address. For\ncontainers the configured IP addresses will be implicitly added.\n"},"logLevelIn":{"type":"string","description":"Log level for incoming\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macfilter":{"type":"boolean","description":"Enable/disable MAC address filter.\n"},"ndp":{"type":"boolean","description":"Enable NDP (Neighbor Discovery Protocol).\n"},"nodeName":{"type":"string","description":"Node name.\n"},"outputPolicy":{"type":"string","description":"The default output\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"radv":{"type":"boolean","description":"Enable Router Advertisement.\n"},"vmId":{"type":"integer","description":"VM ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n"}},"required":["nodeName"],"inputProperties":{"containerId":{"type":"integer","description":"Container ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n"},"dhcp":{"type":"boolean","description":"Enable DHCP.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall.\n"},"inputPolicy":{"type":"string","description":"The default input\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"ipfilter":{"type":"boolean","description":"Enable default IP filters. This is equivalent to\nadding an empty `ipfilter-net\u003cid\u003e` ipset for every interface. Such ipsets\nimplicitly contain sane default restrictions such as restricting IPv6 link\nlocal addresses to the one derived from the interface's MAC address. For\ncontainers the configured IP addresses will be implicitly added.\n"},"logLevelIn":{"type":"string","description":"Log level for incoming\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macfilter":{"type":"boolean","description":"Enable/disable MAC address filter.\n"},"ndp":{"type":"boolean","description":"Enable NDP (Neighbor Discovery Protocol).\n"},"nodeName":{"type":"string","description":"Node name.\n"},"outputPolicy":{"type":"string","description":"The default output\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"radv":{"type":"boolean","description":"Enable Router Advertisement.\n"},"vmId":{"type":"integer","description":"VM ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering FirewallOptions resources.\n","properties":{"containerId":{"type":"integer","description":"Container ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n"},"dhcp":{"type":"boolean","description":"Enable DHCP.\n"},"enabled":{"type":"boolean","description":"Enable or disable the firewall.\n"},"inputPolicy":{"type":"string","description":"The default input\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"ipfilter":{"type":"boolean","description":"Enable default IP filters. This is equivalent to\nadding an empty `ipfilter-net\u003cid\u003e` ipset for every interface. Such ipsets\nimplicitly contain sane default restrictions such as restricting IPv6 link\nlocal addresses to the one derived from the interface's MAC address. For\ncontainers the configured IP addresses will be implicitly added.\n"},"logLevelIn":{"type":"string","description":"Log level for incoming\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing\npackets (\u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"macfilter":{"type":"boolean","description":"Enable/disable MAC address filter.\n"},"ndp":{"type":"boolean","description":"Enable NDP (Neighbor Discovery Protocol).\n"},"nodeName":{"type":"string","description":"Node name.\n"},"outputPolicy":{"type":"string","description":"The default output\npolicy (`ACCEPT`, `DROP`, `REJECT`).\n"},"radv":{"type":"boolean","description":"Enable Router Advertisement.\n"},"vmId":{"type":"integer","description":"VM ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n"}},"type":"object"}},"proxmoxve:Network/firewallRules:FirewallRules":{"description":"Manages cluster-level, node-level or VM/container-level firewall rules.\n\n\u003e Before creating a new \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-dotnet=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-go=\"`Network.FirewallRules`\" pulumi-lang-python=\"`Network.FirewallRules`\" pulumi-lang-yaml=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-java=\"`proxmoxve.Network.FirewallRules`\"\u003e`proxmoxve.Network.FirewallRules`\u003c/span\u003e resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst inbound = new proxmoxve.network.FirewallRules(\"inbound\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n rules: [\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTP\",\n dest: \"192.168.1.5\",\n dport: \"80\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTPS\",\n dest: \"192.168.1.5\",\n dport: \"443\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n securityGroup: exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name,\n comment: \"From security group\",\n iface: \"net0\",\n },\n ],\n}, {\n dependsOn: [\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ninbound = proxmoxve.network.FirewallRules(\"inbound\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n rules=[\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTP\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"80\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTPS\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"443\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"security_group\": example_proxmox_virtual_environment_cluster_firewall_security_group[\"name\"],\n \"comment\": \"From security group\",\n \"iface\": \"net0\",\n },\n ],\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n example_proxmox_virtual_environment_cluster_firewall_security_group,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var inbound = new ProxmoxVE.Network.FirewallRules(\"inbound\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Rules = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTP\",\n Dest = \"192.168.1.5\",\n Dport = \"80\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTPS\",\n Dest = \"192.168.1.5\",\n Dport = \"443\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n SecurityGroup = exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name,\n Comment = \"From security group\",\n Iface = \"net0\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallRules(ctx, \"inbound\", \u0026network.FirewallRulesArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tRules: network.FirewallRulesRuleArray{\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTP\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"80\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTPS\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"443\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tSecurityGroup: pulumi.Any(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name),\n\t\t\t\t\tComment: pulumi.String(\"From security group\"),\n\t\t\t\t\tIface: pulumi.String(\"net0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\texampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRules;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRulesArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallRulesRuleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var inbound = new FirewallRules(\"inbound\", FirewallRulesArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .rules( \n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTP\")\n .dest(\"192.168.1.5\")\n .dport(\"80\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTPS\")\n .dest(\"192.168.1.5\")\n .dport(\"443\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .securityGroup(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name())\n .comment(\"From security group\")\n .iface(\"net0\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n inbound:\n type: proxmoxve:Network:FirewallRules\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n rules:\n - type: in\n action: ACCEPT\n comment: Allow HTTP\n dest: 192.168.1.5\n dport: '80'\n proto: tcp\n log: info\n - type: in\n action: ACCEPT\n comment: Allow HTTPS\n dest: 192.168.1.5\n dport: '443'\n proto: tcp\n log: info\n - securityGroup: ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name}\n comment: From security group\n iface: net0\n options:\n dependsOn:\n - ${example}\n - ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container Rules\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e`\n\nExample uses node name `pve` and container ID `100`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallRules:FirewallRules container_rules container/pve/100\n```\n\n","properties":{"containerId":{"type":"integer","description":"Container ID. Leave empty for node/cluster level rules.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level rules.\n"},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallRulesRule:FirewallRulesRule"},"description":"Firewall rule block (multiple blocks supported).\nThe provider supports two types of the \u003cspan pulumi-lang-nodejs=\"`rule`\" pulumi-lang-dotnet=\"`Rule`\" pulumi-lang-go=\"`rule`\" pulumi-lang-python=\"`rule`\" pulumi-lang-yaml=\"`rule`\" pulumi-lang-java=\"`rule`\"\u003e`rule`\u003c/span\u003e blocks:\n- A rule definition block, which includes the following arguments:\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for node/cluster level rules.\n"}},"inputProperties":{"containerId":{"type":"integer","description":"Container ID. Leave empty for node/cluster level rules.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level rules.\n"},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallRulesRule:FirewallRulesRule"},"description":"Firewall rule block (multiple blocks supported).\nThe provider supports two types of the \u003cspan pulumi-lang-nodejs=\"`rule`\" pulumi-lang-dotnet=\"`Rule`\" pulumi-lang-go=\"`rule`\" pulumi-lang-python=\"`rule`\" pulumi-lang-yaml=\"`rule`\" pulumi-lang-java=\"`rule`\"\u003e`rule`\u003c/span\u003e blocks:\n- A rule definition block, which includes the following arguments:\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for node/cluster level rules.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering FirewallRules resources.\n","properties":{"containerId":{"type":"integer","description":"Container ID. Leave empty for node/cluster level rules.\n"},"nodeName":{"type":"string","description":"Node name. Leave empty for cluster level rules.\n"},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallRulesRule:FirewallRulesRule"},"description":"Firewall rule block (multiple blocks supported).\nThe provider supports two types of the \u003cspan pulumi-lang-nodejs=\"`rule`\" pulumi-lang-dotnet=\"`Rule`\" pulumi-lang-go=\"`rule`\" pulumi-lang-python=\"`rule`\" pulumi-lang-yaml=\"`rule`\" pulumi-lang-java=\"`rule`\"\u003e`rule`\u003c/span\u003e blocks:\n- A rule definition block, which includes the following arguments:\n"},"vmId":{"type":"integer","description":"VM ID. Leave empty for node/cluster level rules.\n"}},"type":"object"}},"proxmoxve:Network/firewallSecurityGroup:FirewallSecurityGroup":{"description":"A security group is a collection of rules, defined at cluster level, which can\nbe used in all VMs' rules. For example, you can define a group named “webserver”\nwith rules to open the http and https ports.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst webserver = new proxmoxve.network.FirewallSecurityGroup(\"webserver\", {\n name: \"webserver\",\n comment: \"Managed by Pulumi\",\n rules: [\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTP\",\n dest: \"192.168.1.5\",\n dport: \"80\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTPS\",\n dest: \"192.168.1.5\",\n dport: \"443\",\n proto: \"tcp\",\n log: \"info\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nwebserver = proxmoxve.network.FirewallSecurityGroup(\"webserver\",\n name=\"webserver\",\n comment=\"Managed by Pulumi\",\n rules=[\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTP\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"80\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTPS\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"443\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var webserver = new ProxmoxVE.Network.FirewallSecurityGroup(\"webserver\", new()\n {\n Name = \"webserver\",\n Comment = \"Managed by Pulumi\",\n Rules = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallSecurityGroupRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTP\",\n Dest = \"192.168.1.5\",\n Dport = \"80\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallSecurityGroupRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTPS\",\n Dest = \"192.168.1.5\",\n Dport = \"443\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallSecurityGroup(ctx, \"webserver\", \u0026network.FirewallSecurityGroupArgs{\n\t\t\tName: pulumi.String(\"webserver\"),\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tRules: network.FirewallSecurityGroupRuleArray{\n\t\t\t\t\u0026network.FirewallSecurityGroupRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTP\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"80\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallSecurityGroupRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTPS\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"443\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallSecurityGroup;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallSecurityGroupArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallSecurityGroupRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var webserver = new FirewallSecurityGroup(\"webserver\", FirewallSecurityGroupArgs.builder()\n .name(\"webserver\")\n .comment(\"Managed by Pulumi\")\n .rules( \n FirewallSecurityGroupRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTP\")\n .dest(\"192.168.1.5\")\n .dport(\"80\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallSecurityGroupRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTPS\")\n .dest(\"192.168.1.5\")\n .dport(\"443\")\n .proto(\"tcp\")\n .log(\"info\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n webserver:\n type: proxmoxve:Network:FirewallSecurityGroup\n properties:\n name: webserver\n comment: Managed by Pulumi\n rules:\n - type: in\n action: ACCEPT\n comment: Allow HTTP\n dest: 192.168.1.5\n dport: '80'\n proto: tcp\n log: info\n - type: in\n action: ACCEPT\n comment: Allow HTTPS\n dest: 192.168.1.5\n dport: '443'\n proto: tcp\n log: info\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallSecurityGroup:FirewallSecurityGroup webserver webserver\n```\n\n","properties":{"comment":{"type":"string","description":"Security group comment.\n"},"containerId":{"type":"integer","description":"The ID of the container to manage the firewall for."},"name":{"type":"string","description":"Security group name.\n"},"nodeName":{"type":"string","description":"The name of the node."},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule"},"description":"Firewall rule block (multiple blocks supported).\n"},"vmId":{"type":"integer","description":"The ID of the VM to manage the firewall for."}},"required":["name"],"inputProperties":{"comment":{"type":"string","description":"Security group comment.\n"},"containerId":{"type":"integer","description":"The ID of the container to manage the firewall for."},"name":{"type":"string","description":"Security group name.\n"},"nodeName":{"type":"string","description":"The name of the node."},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule"},"description":"Firewall rule block (multiple blocks supported).\n"},"vmId":{"type":"integer","description":"The ID of the VM to manage the firewall for."}},"stateInputs":{"description":"Input properties used for looking up and filtering FirewallSecurityGroup resources.\n","properties":{"comment":{"type":"string","description":"Security group comment.\n"},"containerId":{"type":"integer","description":"The ID of the container to manage the firewall for."},"name":{"type":"string","description":"Security group name.\n"},"nodeName":{"type":"string","description":"The name of the node."},"rules":{"type":"array","items":{"$ref":"#/types/proxmoxve:Network/FirewallSecurityGroupRule:FirewallSecurityGroupRule"},"description":"Firewall rule block (multiple blocks supported).\n"},"vmId":{"type":"integer","description":"The ID of the VM to manage the firewall for."}},"type":"object"}},"proxmoxve:Network/networkBridge:NetworkBridge":{"description":"Manages a Linux Bridge network interface in a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst vlan99 = new proxmoxve.network.NetworkVlan(\"vlan99\", {\n nodeName: \"pve\",\n name: \"ens18.99\",\n});\nconst vmbr99 = new proxmoxve.network.NetworkBridge(\"vmbr99\", {\n nodeName: \"pve\",\n name: \"vmbr99\",\n address: \"99.99.99.99/16\",\n comment: \"vmbr99 comment\",\n ports: [\"ens18.99\"],\n}, {\n dependsOn: [vlan99],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nvlan99 = proxmoxve.network.NetworkVlan(\"vlan99\",\n node_name=\"pve\",\n name=\"ens18.99\")\nvmbr99 = proxmoxve.network.NetworkBridge(\"vmbr99\",\n node_name=\"pve\",\n name=\"vmbr99\",\n address=\"99.99.99.99/16\",\n comment=\"vmbr99 comment\",\n ports=[\"ens18.99\"],\n opts = pulumi.ResourceOptions(depends_on=[vlan99]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vlan99 = new ProxmoxVE.Network.NetworkVlan(\"vlan99\", new()\n {\n NodeName = \"pve\",\n Name = \"ens18.99\",\n });\n\n var vmbr99 = new ProxmoxVE.Network.NetworkBridge(\"vmbr99\", new()\n {\n NodeName = \"pve\",\n Name = \"vmbr99\",\n Address = \"99.99.99.99/16\",\n Comment = \"vmbr99 comment\",\n Ports = new[]\n {\n \"ens18.99\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vlan99,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvlan99, err := network.NewNetworkVlan(ctx, \"vlan99\", \u0026network.NetworkVlanArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"ens18.99\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = network.NewNetworkBridge(ctx, \"vmbr99\", \u0026network.NetworkBridgeArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"vmbr99\"),\n\t\t\tAddress: pulumi.String(\"99.99.99.99/16\"),\n\t\t\tComment: pulumi.String(\"vmbr99 comment\"),\n\t\t\tPorts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"ens18.99\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvlan99,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlan;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlanArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkBridge;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkBridgeArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vlan99 = new NetworkVlan(\"vlan99\", NetworkVlanArgs.builder()\n .nodeName(\"pve\")\n .name(\"ens18.99\")\n .build());\n\n var vmbr99 = new NetworkBridge(\"vmbr99\", NetworkBridgeArgs.builder()\n .nodeName(\"pve\")\n .name(\"vmbr99\")\n .address(\"99.99.99.99/16\")\n .comment(\"vmbr99 comment\")\n .ports(\"ens18.99\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(vlan99)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vmbr99:\n type: proxmoxve:Network:NetworkBridge\n properties:\n nodeName: pve\n name: vmbr99\n address: 99.99.99.99/16\n comment: vmbr99 comment\n ports:\n - ens18.99\n options:\n dependsOn:\n - ${vlan99}\n vlan99:\n type: proxmoxve:Network:NetworkVlan\n properties:\n nodeName: pve\n name: ens18.99\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n#Interfaces can be imported using the `node_name:iface` format, e.g.\n\n```sh\n$ pulumi import proxmoxve:Network/networkBridge:NetworkBridge vmbr99 pve:vmbr99\n```\n\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Commonly vmbr[N], where 0 ≤ N ≤ 4094 (vmbr0 - vmbr4094), but can be any alphanumeric string that starts with a character and is at most 10 characters long.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"ports":{"type":"array","items":{"type":"string"},"description":"The interface bridge ports.\n"},"vlanAware":{"type":"boolean","description":"Whether the interface bridge is VLAN aware (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"required":["autostart","name","nodeName","vlanAware"],"inputProperties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Commonly vmbr[N], where 0 ≤ N ≤ 4094 (vmbr0 - vmbr4094), but can be any alphanumeric string that starts with a character and is at most 10 characters long.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"ports":{"type":"array","items":{"type":"string"},"description":"The interface bridge ports.\n"},"vlanAware":{"type":"boolean","description":"Whether the interface bridge is VLAN aware (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering NetworkBridge resources.\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Commonly vmbr[N], where 0 ≤ N ≤ 4094 (vmbr0 - vmbr4094), but can be any alphanumeric string that starts with a character and is at most 10 characters long.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"ports":{"type":"array","items":{"type":"string"},"description":"The interface bridge ports.\n"},"vlanAware":{"type":"boolean","description":"Whether the interface bridge is VLAN aware (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"}},"type":"object"}},"proxmoxve:Network/networkVlan:NetworkVlan":{"description":"Manages a Linux VLAN network interface in a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// using VLAN tag\nconst vlan99 = new proxmoxve.network.NetworkVlan(\"vlan99\", {\n nodeName: \"pve\",\n name: \"eno0.99\",\n comment: \"VLAN 99\",\n});\n// using custom network interface name\nconst vlan98 = new proxmoxve.network.NetworkVlan(\"vlan98\", {\n nodeName: \"pve\",\n name: \"vlan_lab\",\n \"interface\": \"eno0\",\n vlan: 98,\n comment: \"VLAN 98\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# using VLAN tag\nvlan99 = proxmoxve.network.NetworkVlan(\"vlan99\",\n node_name=\"pve\",\n name=\"eno0.99\",\n comment=\"VLAN 99\")\n# using custom network interface name\nvlan98 = proxmoxve.network.NetworkVlan(\"vlan98\",\n node_name=\"pve\",\n name=\"vlan_lab\",\n interface=\"eno0\",\n vlan=98,\n comment=\"VLAN 98\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // using VLAN tag\n var vlan99 = new ProxmoxVE.Network.NetworkVlan(\"vlan99\", new()\n {\n NodeName = \"pve\",\n Name = \"eno0.99\",\n Comment = \"VLAN 99\",\n });\n\n // using custom network interface name\n var vlan98 = new ProxmoxVE.Network.NetworkVlan(\"vlan98\", new()\n {\n NodeName = \"pve\",\n Name = \"vlan_lab\",\n Interface = \"eno0\",\n Vlan = 98,\n Comment = \"VLAN 98\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// using VLAN tag\n\t\t_, err := network.NewNetworkVlan(ctx, \"vlan99\", \u0026network.NetworkVlanArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"eno0.99\"),\n\t\t\tComment: pulumi.String(\"VLAN 99\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// using custom network interface name\n\t\t_, err = network.NewNetworkVlan(ctx, \"vlan98\", \u0026network.NetworkVlanArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"vlan_lab\"),\n\t\t\tInterface: pulumi.String(\"eno0\"),\n\t\t\tVlan: pulumi.Int(98),\n\t\t\tComment: pulumi.String(\"VLAN 98\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlan;\nimport io.muehlbachler.pulumi.proxmoxve.Network.NetworkVlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // using VLAN tag\n var vlan99 = new NetworkVlan(\"vlan99\", NetworkVlanArgs.builder()\n .nodeName(\"pve\")\n .name(\"eno0.99\")\n .comment(\"VLAN 99\")\n .build());\n\n // using custom network interface name\n var vlan98 = new NetworkVlan(\"vlan98\", NetworkVlanArgs.builder()\n .nodeName(\"pve\")\n .name(\"vlan_lab\")\n .interface_(\"eno0\")\n .vlan(98)\n .comment(\"VLAN 98\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # using VLAN tag\n vlan99:\n type: proxmoxve:Network:NetworkVlan\n properties:\n nodeName: pve\n name: eno0.99\n comment: VLAN 99\n # using custom network interface name\n vlan98:\n type: proxmoxve:Network:NetworkVlan\n properties:\n nodeName: pve\n name: vlan_lab\n interface: eno0\n vlan: 98\n comment: VLAN 98\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n#Interfaces can be imported using the `node_name:iface` format, e.g.\n\n```sh\n$ pulumi import proxmoxve:Network/networkVlan:NetworkVlan vlan99 pve:vlan99\n```\n\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"interface":{"type":"string","description":"The VLAN raw device. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Either add the VLAN tag number to an existing interface name, e.g. `ens18.21` (and do not set \u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e), or use custom name, e.g. \u003cspan pulumi-lang-nodejs=\"`vlanLab`\" pulumi-lang-dotnet=\"`VlanLab`\" pulumi-lang-go=\"`vlanLab`\" pulumi-lang-python=\"`vlan_lab`\" pulumi-lang-yaml=\"`vlanLab`\" pulumi-lang-java=\"`vlanLab`\"\u003e`vlan_lab`\u003c/span\u003e (\u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e are then required).\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"vlan":{"type":"integer","description":"The VLAN tag. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"}},"required":["autostart","interface","name","nodeName","vlan"],"inputProperties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"interface":{"type":"string","description":"The VLAN raw device. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Either add the VLAN tag number to an existing interface name, e.g. `ens18.21` (and do not set \u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e), or use custom name, e.g. \u003cspan pulumi-lang-nodejs=\"`vlanLab`\" pulumi-lang-dotnet=\"`VlanLab`\" pulumi-lang-go=\"`vlanLab`\" pulumi-lang-python=\"`vlan_lab`\" pulumi-lang-yaml=\"`vlanLab`\" pulumi-lang-java=\"`vlanLab`\"\u003e`vlan_lab`\u003c/span\u003e (\u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e are then required).\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"vlan":{"type":"integer","description":"The VLAN tag. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering NetworkVlan resources.\n","properties":{"address":{"type":"string","description":"The interface IPv4/CIDR address.\n"},"address6":{"type":"string","description":"The interface IPv6/CIDR address.\n"},"autostart":{"type":"boolean","description":"Automatically start interface on boot (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"comment":{"type":"string","description":"Comment for the interface.\n"},"gateway":{"type":"string","description":"Default gateway address.\n"},"gateway6":{"type":"string","description":"Default IPv6 gateway address.\n"},"interface":{"type":"string","description":"The VLAN raw device. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"},"mtu":{"type":"integer","description":"The interface MTU.\n"},"name":{"type":"string","description":"The interface name. Either add the VLAN tag number to an existing interface name, e.g. `ens18.21` (and do not set \u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e), or use custom name, e.g. \u003cspan pulumi-lang-nodejs=\"`vlanLab`\" pulumi-lang-dotnet=\"`VlanLab`\" pulumi-lang-go=\"`vlanLab`\" pulumi-lang-python=\"`vlan_lab`\" pulumi-lang-yaml=\"`vlanLab`\" pulumi-lang-java=\"`vlanLab`\"\u003e`vlan_lab`\u003c/span\u003e (\u003cspan pulumi-lang-nodejs=\"`interface`\" pulumi-lang-dotnet=\"`Interface`\" pulumi-lang-go=\"`interface`\" pulumi-lang-python=\"`interface`\" pulumi-lang-yaml=\"`interface`\" pulumi-lang-java=\"`interface`\"\u003e`interface`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`vlan`\" pulumi-lang-dotnet=\"`Vlan`\" pulumi-lang-go=\"`vlan`\" pulumi-lang-python=\"`vlan`\" pulumi-lang-yaml=\"`vlan`\" pulumi-lang-java=\"`vlan`\"\u003e`vlan`\u003c/span\u003e are then required).\n"},"nodeName":{"type":"string","description":"The name of the node.\n"},"vlan":{"type":"integer","description":"The VLAN tag. See also \u003cspan pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\"\u003e`name`\u003c/span\u003e.\n"}},"type":"object"}},"proxmoxve:Node/firewall:Firewall":{"description":"Manages Proxmox VE Node Firewall options.\n\n\u003e This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst node_pve1 = new proxmoxve.node.Firewall(\"node-pve1\", {\n nodeName: \"pve1\",\n enabled: false,\n});\nconst pve2 = new proxmoxve.node.Firewall(\"pve2\", {\n nodeName: \"pve2\",\n enabled: true,\n logLevelIn: \"alert\",\n logLevelOut: \"alert\",\n logLevelForward: \"alert\",\n ndp: true,\n nftables: true,\n nosmurfs: true,\n smurfLogLevel: \"alert\",\n tcpFlagsLogLevel: \"alert\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nnode_pve1 = proxmoxve.node.Firewall(\"node-pve1\",\n node_name=\"pve1\",\n enabled=False)\npve2 = proxmoxve.node.Firewall(\"pve2\",\n node_name=\"pve2\",\n enabled=True,\n log_level_in=\"alert\",\n log_level_out=\"alert\",\n log_level_forward=\"alert\",\n ndp=True,\n nftables=True,\n nosmurfs=True,\n smurf_log_level=\"alert\",\n tcp_flags_log_level=\"alert\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var node_pve1 = new ProxmoxVE.Node.Firewall(\"node-pve1\", new()\n {\n NodeName = \"pve1\",\n Enabled = false,\n });\n\n var pve2 = new ProxmoxVE.Node.Firewall(\"pve2\", new()\n {\n NodeName = \"pve2\",\n Enabled = true,\n LogLevelIn = \"alert\",\n LogLevelOut = \"alert\",\n LogLevelForward = \"alert\",\n Ndp = true,\n Nftables = true,\n Nosmurfs = true,\n SmurfLogLevel = \"alert\",\n TcpFlagsLogLevel = \"alert\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/node\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := node.NewFirewall(ctx, \"node-pve1\", \u0026node.FirewallArgs{\n\t\t\tNodeName: pulumi.String(\"pve1\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = node.NewFirewall(ctx, \"pve2\", \u0026node.FirewallArgs{\n\t\t\tNodeName: pulumi.String(\"pve2\"),\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tLogLevelIn: pulumi.String(\"alert\"),\n\t\t\tLogLevelOut: pulumi.String(\"alert\"),\n\t\t\tLogLevelForward: pulumi.String(\"alert\"),\n\t\t\tNdp: pulumi.Bool(true),\n\t\t\tNftables: pulumi.Bool(true),\n\t\t\tNosmurfs: pulumi.Bool(true),\n\t\t\tSmurfLogLevel: pulumi.String(\"alert\"),\n\t\t\tTcpFlagsLogLevel: pulumi.String(\"alert\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Node.Firewall;\nimport io.muehlbachler.pulumi.proxmoxve.Node.FirewallArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var node_pve1 = new Firewall(\"node-pve1\", FirewallArgs.builder()\n .nodeName(\"pve1\")\n .enabled(false)\n .build());\n\n var pve2 = new Firewall(\"pve2\", FirewallArgs.builder()\n .nodeName(\"pve2\")\n .enabled(true)\n .logLevelIn(\"alert\")\n .logLevelOut(\"alert\")\n .logLevelForward(\"alert\")\n .ndp(true)\n .nftables(true)\n .nosmurfs(true)\n .smurfLogLevel(\"alert\")\n .tcpFlagsLogLevel(\"alert\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n node-pve1:\n type: proxmoxve:Node:Firewall\n properties:\n nodeName: pve1\n enabled: false\n pve2:\n type: proxmoxve:Node:Firewall\n properties:\n nodeName: pve2\n enabled: true\n logLevelIn: alert\n logLevelOut: alert\n logLevelForward: alert\n ndp: true\n nftables: true\n nosmurfs: true\n smurfLogLevel: alert\n tcpFlagsLogLevel: alert\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1\n```\n\n","properties":{"enabled":{"type":"boolean","description":"Enable host firewall rules (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"logLevelForward":{"type":"string","description":"Log level for forwarded traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelIn":{"type":"string","description":"Log level for incoming traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"ndp":{"type":"boolean","description":"Enable NDP - Neighbor Discovery Protocol (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"nfConntrackMax":{"type":"integer","description":"Maximum number of tracked connections (defaults to \u003cspan pulumi-lang-nodejs=\"`262144`\" pulumi-lang-dotnet=\"`262144`\" pulumi-lang-go=\"`262144`\" pulumi-lang-python=\"`262144`\" pulumi-lang-yaml=\"`262144`\" pulumi-lang-java=\"`262144`\"\u003e`262144`\u003c/span\u003e). Minimum value is \u003cspan pulumi-lang-nodejs=\"`32768`\" pulumi-lang-dotnet=\"`32768`\" pulumi-lang-go=\"`32768`\" pulumi-lang-python=\"`32768`\" pulumi-lang-yaml=\"`32768`\" pulumi-lang-java=\"`32768`\"\u003e`32768`\u003c/span\u003e.\n"},"nfConntrackTcpTimeoutEstablished":{"type":"integer","description":"Conntrack established timeout in seconds (defaults to \u003cspan pulumi-lang-nodejs=\"`432000`\" pulumi-lang-dotnet=\"`432000`\" pulumi-lang-go=\"`432000`\" pulumi-lang-python=\"`432000`\" pulumi-lang-yaml=\"`432000`\" pulumi-lang-java=\"`432000`\"\u003e`432000`\u003c/span\u003e - 5 days). Minimum value is \u003cspan pulumi-lang-nodejs=\"`7875`\" pulumi-lang-dotnet=\"`7875`\" pulumi-lang-go=\"`7875`\" pulumi-lang-python=\"`7875`\" pulumi-lang-yaml=\"`7875`\" pulumi-lang-java=\"`7875`\"\u003e`7875`\u003c/span\u003e.\n"},"nftables":{"type":"boolean","description":"Enable nftables based firewall (tech preview, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"nodeName":{"type":"string","description":"The cluster node name.\n"},"nosmurfs":{"type":"boolean","description":"Enable SMURFS filter (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"smurfLogLevel":{"type":"string","description":"Log level for SMURFS filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"tcpFlagsLogLevel":{"type":"string","description":"Log level for illegal tcp flags filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"}},"required":["enabled","logLevelForward","logLevelIn","logLevelOut","ndp","nfConntrackMax","nfConntrackTcpTimeoutEstablished","nftables","nodeName","nosmurfs","smurfLogLevel","tcpFlagsLogLevel"],"inputProperties":{"enabled":{"type":"boolean","description":"Enable host firewall rules (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"logLevelForward":{"type":"string","description":"Log level for forwarded traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelIn":{"type":"string","description":"Log level for incoming traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"ndp":{"type":"boolean","description":"Enable NDP - Neighbor Discovery Protocol (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"nfConntrackMax":{"type":"integer","description":"Maximum number of tracked connections (defaults to \u003cspan pulumi-lang-nodejs=\"`262144`\" pulumi-lang-dotnet=\"`262144`\" pulumi-lang-go=\"`262144`\" pulumi-lang-python=\"`262144`\" pulumi-lang-yaml=\"`262144`\" pulumi-lang-java=\"`262144`\"\u003e`262144`\u003c/span\u003e). Minimum value is \u003cspan pulumi-lang-nodejs=\"`32768`\" pulumi-lang-dotnet=\"`32768`\" pulumi-lang-go=\"`32768`\" pulumi-lang-python=\"`32768`\" pulumi-lang-yaml=\"`32768`\" pulumi-lang-java=\"`32768`\"\u003e`32768`\u003c/span\u003e.\n"},"nfConntrackTcpTimeoutEstablished":{"type":"integer","description":"Conntrack established timeout in seconds (defaults to \u003cspan pulumi-lang-nodejs=\"`432000`\" pulumi-lang-dotnet=\"`432000`\" pulumi-lang-go=\"`432000`\" pulumi-lang-python=\"`432000`\" pulumi-lang-yaml=\"`432000`\" pulumi-lang-java=\"`432000`\"\u003e`432000`\u003c/span\u003e - 5 days). Minimum value is \u003cspan pulumi-lang-nodejs=\"`7875`\" pulumi-lang-dotnet=\"`7875`\" pulumi-lang-go=\"`7875`\" pulumi-lang-python=\"`7875`\" pulumi-lang-yaml=\"`7875`\" pulumi-lang-java=\"`7875`\"\u003e`7875`\u003c/span\u003e.\n"},"nftables":{"type":"boolean","description":"Enable nftables based firewall (tech preview, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"nodeName":{"type":"string","description":"The cluster node name.\n"},"nosmurfs":{"type":"boolean","description":"Enable SMURFS filter (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"smurfLogLevel":{"type":"string","description":"Log level for SMURFS filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"tcpFlagsLogLevel":{"type":"string","description":"Log level for illegal tcp flags filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering Firewall resources.\n","properties":{"enabled":{"type":"boolean","description":"Enable host firewall rules (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"logLevelForward":{"type":"string","description":"Log level for forwarded traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelIn":{"type":"string","description":"Log level for incoming traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"logLevelOut":{"type":"string","description":"Log level for outgoing traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"ndp":{"type":"boolean","description":"Enable NDP - Neighbor Discovery Protocol (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"nfConntrackMax":{"type":"integer","description":"Maximum number of tracked connections (defaults to \u003cspan pulumi-lang-nodejs=\"`262144`\" pulumi-lang-dotnet=\"`262144`\" pulumi-lang-go=\"`262144`\" pulumi-lang-python=\"`262144`\" pulumi-lang-yaml=\"`262144`\" pulumi-lang-java=\"`262144`\"\u003e`262144`\u003c/span\u003e). Minimum value is \u003cspan pulumi-lang-nodejs=\"`32768`\" pulumi-lang-dotnet=\"`32768`\" pulumi-lang-go=\"`32768`\" pulumi-lang-python=\"`32768`\" pulumi-lang-yaml=\"`32768`\" pulumi-lang-java=\"`32768`\"\u003e`32768`\u003c/span\u003e.\n"},"nfConntrackTcpTimeoutEstablished":{"type":"integer","description":"Conntrack established timeout in seconds (defaults to \u003cspan pulumi-lang-nodejs=\"`432000`\" pulumi-lang-dotnet=\"`432000`\" pulumi-lang-go=\"`432000`\" pulumi-lang-python=\"`432000`\" pulumi-lang-yaml=\"`432000`\" pulumi-lang-java=\"`432000`\"\u003e`432000`\u003c/span\u003e - 5 days). Minimum value is \u003cspan pulumi-lang-nodejs=\"`7875`\" pulumi-lang-dotnet=\"`7875`\" pulumi-lang-go=\"`7875`\" pulumi-lang-python=\"`7875`\" pulumi-lang-yaml=\"`7875`\" pulumi-lang-java=\"`7875`\"\u003e`7875`\u003c/span\u003e.\n"},"nftables":{"type":"boolean","description":"Enable nftables based firewall (tech preview, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"nodeName":{"type":"string","description":"The cluster node name.\n"},"nosmurfs":{"type":"boolean","description":"Enable SMURFS filter (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"smurfLogLevel":{"type":"string","description":"Log level for SMURFS filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"},"tcpFlagsLogLevel":{"type":"string","description":"Log level for illegal tcp flags filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n"}},"type":"object"}},"proxmoxve:Oci/image:Image":{"description":"Manages OCI images pulled from OCI registries using PVE oci-registry-pull API. Pulls OCI container images and stores them as tar files in Proxmox VE datastores.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuLatest = new proxmoxve.oci.Image(\"ubuntu_latest\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/ubuntu:latest\",\n});\nconst nginx = new proxmoxve.oci.Image(\"nginx\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/nginx:alpine\",\n fileName: \"custom_image_name.tar\",\n});\nconst debian = new proxmoxve.oci.Image(\"debian\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/debian:bookworm\",\n uploadTimeout: 900,\n overwrite: false,\n overwriteUnmanaged: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_latest = proxmoxve.oci.Image(\"ubuntu_latest\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/ubuntu:latest\")\nnginx = proxmoxve.oci.Image(\"nginx\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/nginx:alpine\",\n file_name=\"custom_image_name.tar\")\ndebian = proxmoxve.oci.Image(\"debian\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/debian:bookworm\",\n upload_timeout=900,\n overwrite=False,\n overwrite_unmanaged=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuLatest = new ProxmoxVE.Oci.Image(\"ubuntu_latest\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/ubuntu:latest\",\n });\n\n var nginx = new ProxmoxVE.Oci.Image(\"nginx\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/nginx:alpine\",\n FileName = \"custom_image_name.tar\",\n });\n\n var debian = new ProxmoxVE.Oci.Image(\"debian\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/debian:bookworm\",\n UploadTimeout = 900,\n Overwrite = false,\n OverwriteUnmanaged = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/oci\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oci.NewImage(ctx, \"ubuntu_latest\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/ubuntu:latest\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oci.NewImage(ctx, \"nginx\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/nginx:alpine\"),\n\t\t\tFileName: pulumi.String(\"custom_image_name.tar\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oci.NewImage(ctx, \"debian\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/debian:bookworm\"),\n\t\t\tUploadTimeout: pulumi.Int(900),\n\t\t\tOverwrite: pulumi.Bool(false),\n\t\t\tOverwriteUnmanaged: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Oci.Image;\nimport io.muehlbachler.pulumi.proxmoxve.Oci.ImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuLatest = new Image(\"ubuntuLatest\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/ubuntu:latest\")\n .build());\n\n var nginx = new Image(\"nginx\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/nginx:alpine\")\n .fileName(\"custom_image_name.tar\")\n .build());\n\n var debian = new Image(\"debian\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/debian:bookworm\")\n .uploadTimeout(900)\n .overwrite(false)\n .overwriteUnmanaged(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuLatest:\n type: proxmoxve:Oci:Image\n name: ubuntu_latest\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/ubuntu:latest\n nginx:\n type: proxmoxve:Oci:Image\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/nginx:alpine\n fileName: custom_image_name.tar\n debian:\n type: proxmoxve:Oci:Image\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/debian:bookworm\n uploadTimeout: 900\n overwrite: false\n overwriteUnmanaged: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"fileName":{"type":"string","description":"The file name for the pulled OCI image. If not provided, it will be generated automatically. The file will be stored as a .tar file.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and the OCI image size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and an OCI image with the same name already exists in the datastore, it will be deleted and the new image will be pulled. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the image already exists, an error will be returned.\n"},"reference":{"type":"string","description":"The reference to the OCI image.\n"},"size":{"type":"integer","description":"The image size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The OCI image pull timeout in seconds. Default is 600 (10min).\n"}},"required":["datastoreId","fileName","nodeName","overwrite","overwriteUnmanaged","reference","size","uploadTimeout"],"inputProperties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"fileName":{"type":"string","description":"The file name for the pulled OCI image. If not provided, it will be generated automatically. The file will be stored as a .tar file.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and the OCI image size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and an OCI image with the same name already exists in the datastore, it will be deleted and the new image will be pulled. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the image already exists, an error will be returned.\n"},"reference":{"type":"string","description":"The reference to the OCI image.\n"},"uploadTimeout":{"type":"integer","description":"The OCI image pull timeout in seconds. Default is 600 (10min).\n"}},"requiredInputs":["datastoreId","nodeName","reference"],"stateInputs":{"description":"Input properties used for looking up and filtering Image resources.\n","properties":{"datastoreId":{"type":"string","description":"The identifier for the target datastore.\n"},"fileName":{"type":"string","description":"The file name for the pulled OCI image. If not provided, it will be generated automatically. The file will be stored as a .tar file.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and the OCI image size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n"},"overwriteUnmanaged":{"type":"boolean","description":"If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and an OCI image with the same name already exists in the datastore, it will be deleted and the new image will be pulled. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e and the image already exists, an error will be returned.\n"},"reference":{"type":"string","description":"The reference to the OCI image.\n"},"size":{"type":"integer","description":"The image size in PVE.\n"},"uploadTimeout":{"type":"integer","description":"The OCI image pull timeout in seconds. Default is 600 (10min).\n"}},"type":"object"}},"proxmoxve:Permission/group:Group":{"description":"Manages a user group.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsTeam = new proxmoxve.permission.Group(\"operations_team\", {\n comment: \"Managed by Pulumi\",\n groupId: \"operations-team\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_team = proxmoxve.permission.Group(\"operations_team\",\n comment=\"Managed by Pulumi\",\n group_id=\"operations-team\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsTeam = new ProxmoxVE.Permission.Group(\"operations_team\", new()\n {\n Comment = \"Managed by Pulumi\",\n GroupId = \"operations-team\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.NewGroup(ctx, \"operations_team\", \u0026permission.GroupArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tGroupId: pulumi.String(\"operations-team\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Group;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.GroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsTeam = new Group(\"operationsTeam\", GroupArgs.builder()\n .comment(\"Managed by Pulumi\")\n .groupId(\"operations-team\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsTeam:\n type: proxmoxve:Permission:Group\n name: operations_team\n properties:\n comment: Managed by Pulumi\n groupId: operations-team\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `group_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/group:Group operations_team operations-team\n```\n\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/GroupAcl:GroupAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The group comment.\n"},"groupId":{"type":"string","description":"The group identifier.\n"},"members":{"type":"array","items":{"type":"string"},"description":"The group members as a list of `username@realm` entries\n"}},"required":["groupId","members"],"inputProperties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/GroupAcl:GroupAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The group comment.\n"},"groupId":{"type":"string","description":"The group identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["groupId"],"stateInputs":{"description":"Input properties used for looking up and filtering Group resources.\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/GroupAcl:GroupAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The group comment.\n"},"groupId":{"type":"string","description":"The group identifier.\n","willReplaceOnChanges":true},"members":{"type":"array","items":{"type":"string"},"description":"The group members as a list of `username@realm` entries\n"}},"type":"object"}},"proxmoxve:Permission/pool:Pool":{"description":"Manages a resource pool.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsPool = new proxmoxve.permission.Pool(\"operations_pool\", {\n comment: \"Managed by Pulumi\",\n poolId: \"operations-pool\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_pool = proxmoxve.permission.Pool(\"operations_pool\",\n comment=\"Managed by Pulumi\",\n pool_id=\"operations-pool\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsPool = new ProxmoxVE.Permission.Pool(\"operations_pool\", new()\n {\n Comment = \"Managed by Pulumi\",\n PoolId = \"operations-pool\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.NewPool(ctx, \"operations_pool\", \u0026permission.PoolArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tPoolId: pulumi.String(\"operations-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Pool;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.PoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsPool = new Pool(\"operationsPool\", PoolArgs.builder()\n .comment(\"Managed by Pulumi\")\n .poolId(\"operations-pool\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsPool:\n type: proxmoxve:Permission:Pool\n name: operations_pool\n properties:\n comment: Managed by Pulumi\n poolId: operations-pool\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `pool_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/pool:Pool operations_pool operations-pool\n```\n\n","properties":{"comment":{"type":"string","description":"The pool comment.\n"},"members":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/PoolMember:PoolMember"},"description":"The pool members.\n"},"poolId":{"type":"string","description":"The pool identifier.\n"}},"required":["members","poolId"],"inputProperties":{"comment":{"type":"string","description":"The pool comment.\n"},"poolId":{"type":"string","description":"The pool identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["poolId"],"stateInputs":{"description":"Input properties used for looking up and filtering Pool resources.\n","properties":{"comment":{"type":"string","description":"The pool comment.\n"},"members":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/PoolMember:PoolMember"},"description":"The pool members.\n"},"poolId":{"type":"string","description":"The pool identifier.\n","willReplaceOnChanges":true}},"type":"object"}},"proxmoxve:Permission/role:Role":{"description":"Manages a role.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsMonitoring = new proxmoxve.permission.Role(\"operations_monitoring\", {\n roleId: \"operations-monitoring\",\n privileges: [\"VM.GuestAgent.Audit\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_monitoring = proxmoxve.permission.Role(\"operations_monitoring\",\n role_id=\"operations-monitoring\",\n privileges=[\"VM.GuestAgent.Audit\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsMonitoring = new ProxmoxVE.Permission.Role(\"operations_monitoring\", new()\n {\n RoleId = \"operations-monitoring\",\n Privileges = new[]\n {\n \"VM.GuestAgent.Audit\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.NewRole(ctx, \"operations_monitoring\", \u0026permission.RoleArgs{\n\t\t\tRoleId: pulumi.String(\"operations-monitoring\"),\n\t\t\tPrivileges: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"VM.GuestAgent.Audit\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Role;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.RoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsMonitoring = new Role(\"operationsMonitoring\", RoleArgs.builder()\n .roleId(\"operations-monitoring\")\n .privileges(\"VM.GuestAgent.Audit\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsMonitoring:\n type: proxmoxve:Permission:Role\n name: operations_monitoring\n properties:\n roleId: operations-monitoring\n privileges:\n - VM.GuestAgent.Audit\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `role_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/role:Role operations_monitoring operations-monitoring\n```\n\n","properties":{"privileges":{"type":"array","items":{"type":"string"},"description":"The role privileges.\n"},"roleId":{"type":"string","description":"The role identifier.\n"}},"required":["privileges","roleId"],"inputProperties":{"privileges":{"type":"array","items":{"type":"string"},"description":"The role privileges.\n"},"roleId":{"type":"string","description":"The role identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["privileges","roleId"],"stateInputs":{"description":"Input properties used for looking up and filtering Role resources.\n","properties":{"privileges":{"type":"array","items":{"type":"string"},"description":"The role privileges.\n"},"roleId":{"type":"string","description":"The role identifier.\n","willReplaceOnChanges":true}},"type":"object"}},"proxmoxve:Permission/user:User":{"description":"Manages a user.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsMonitoring = new proxmoxve.permission.Role(\"operations_monitoring\", {\n roleId: \"operations-monitoring\",\n privileges: [\"VM.GuestAgent.Audit\"],\n});\nconst operationsAutomation = new proxmoxve.permission.User(\"operations_automation\", {\n acls: [{\n path: \"/vms/1234\",\n propagate: true,\n roleId: operationsMonitoring.roleId,\n }],\n comment: \"Managed by Pulumi\",\n password: \"a-strong-password\",\n userId: \"operations-automation@pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_monitoring = proxmoxve.permission.Role(\"operations_monitoring\",\n role_id=\"operations-monitoring\",\n privileges=[\"VM.GuestAgent.Audit\"])\noperations_automation = proxmoxve.permission.User(\"operations_automation\",\n acls=[{\n \"path\": \"/vms/1234\",\n \"propagate\": True,\n \"role_id\": operations_monitoring.role_id,\n }],\n comment=\"Managed by Pulumi\",\n password=\"a-strong-password\",\n user_id=\"operations-automation@pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsMonitoring = new ProxmoxVE.Permission.Role(\"operations_monitoring\", new()\n {\n RoleId = \"operations-monitoring\",\n Privileges = new[]\n {\n \"VM.GuestAgent.Audit\",\n },\n });\n\n var operationsAutomation = new ProxmoxVE.Permission.User(\"operations_automation\", new()\n {\n Acls = new[]\n {\n new ProxmoxVE.Permission.Inputs.UserAclArgs\n {\n Path = \"/vms/1234\",\n Propagate = true,\n RoleId = operationsMonitoring.RoleId,\n },\n },\n Comment = \"Managed by Pulumi\",\n Password = \"a-strong-password\",\n UserId = \"operations-automation@pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toperationsMonitoring, err := permission.NewRole(ctx, \"operations_monitoring\", \u0026permission.RoleArgs{\n\t\t\tRoleId: pulumi.String(\"operations-monitoring\"),\n\t\t\tPrivileges: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"VM.GuestAgent.Audit\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = permission.NewUser(ctx, \"operations_automation\", \u0026permission.UserArgs{\n\t\t\tAcls: permission.UserAclArray{\n\t\t\t\t\u0026permission.UserAclArgs{\n\t\t\t\t\tPath: pulumi.String(\"/vms/1234\"),\n\t\t\t\t\tPropagate: pulumi.Bool(true),\n\t\t\t\t\tRoleId: operationsMonitoring.RoleId,\n\t\t\t\t},\n\t\t\t},\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tPassword: pulumi.String(\"a-strong-password\"),\n\t\t\tUserId: pulumi.String(\"operations-automation@pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Role;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.RoleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.User;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.UserArgs;\nimport com.pulumi.proxmoxve.Permission.inputs.UserAclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsMonitoring = new Role(\"operationsMonitoring\", RoleArgs.builder()\n .roleId(\"operations-monitoring\")\n .privileges(\"VM.GuestAgent.Audit\")\n .build());\n\n var operationsAutomation = new User(\"operationsAutomation\", UserArgs.builder()\n .acls(UserAclArgs.builder()\n .path(\"/vms/1234\")\n .propagate(true)\n .roleId(operationsMonitoring.roleId())\n .build())\n .comment(\"Managed by Pulumi\")\n .password(\"a-strong-password\")\n .userId(\"operations-automation@pve\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsAutomation:\n type: proxmoxve:Permission:User\n name: operations_automation\n properties:\n acls:\n - path: /vms/1234\n propagate: true\n roleId: ${operationsMonitoring.roleId}\n comment: Managed by Pulumi\n password: a-strong-password\n userId: operations-automation@pve\n operationsMonitoring:\n type: proxmoxve:Permission:Role\n name: operations_monitoring\n properties:\n roleId: operations-monitoring\n privileges:\n - VM.GuestAgent.Audit\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `user_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Permission/user:User operations_automation operations-automation@pve\n```\n\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/UserAcl:UserAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The user comment.\n"},"email":{"type":"string","description":"The user's email address.\n"},"enabled":{"type":"boolean","description":"Whether the user account is enabled.\n"},"expirationDate":{"type":"string","description":"The user account's expiration date (RFC 3339).\n"},"firstName":{"type":"string","description":"The user's first name.\n"},"groups":{"type":"array","items":{"type":"string"},"description":"The user's groups.\n"},"keys":{"type":"string","description":"The user's keys.\n"},"lastName":{"type":"string","description":"The user's last name.\n"},"password":{"type":"string","description":"The user's password. Required for PVE or PAM realms.\n","secret":true},"userId":{"type":"string","description":"The user identifier.\n"}},"required":["userId"],"inputProperties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/UserAcl:UserAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The user comment.\n"},"email":{"type":"string","description":"The user's email address.\n"},"enabled":{"type":"boolean","description":"Whether the user account is enabled.\n"},"expirationDate":{"type":"string","description":"The user account's expiration date (RFC 3339).\n"},"firstName":{"type":"string","description":"The user's first name.\n"},"groups":{"type":"array","items":{"type":"string"},"description":"The user's groups.\n"},"keys":{"type":"string","description":"The user's keys.\n"},"lastName":{"type":"string","description":"The user's last name.\n"},"password":{"type":"string","description":"The user's password. Required for PVE or PAM realms.\n","secret":true},"userId":{"type":"string","description":"The user identifier.\n","willReplaceOnChanges":true}},"requiredInputs":["userId"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"acls":{"type":"array","items":{"$ref":"#/types/proxmoxve:Permission/UserAcl:UserAcl"},"description":"The access control list (multiple blocks supported).\n"},"comment":{"type":"string","description":"The user comment.\n"},"email":{"type":"string","description":"The user's email address.\n"},"enabled":{"type":"boolean","description":"Whether the user account is enabled.\n"},"expirationDate":{"type":"string","description":"The user account's expiration date (RFC 3339).\n"},"firstName":{"type":"string","description":"The user's first name.\n"},"groups":{"type":"array","items":{"type":"string"},"description":"The user's groups.\n"},"keys":{"type":"string","description":"The user's keys.\n"},"lastName":{"type":"string","description":"The user's last name.\n"},"password":{"type":"string","description":"The user's password. Required for PVE or PAM realms.\n","secret":true},"userId":{"type":"string","description":"The user identifier.\n","willReplaceOnChanges":true}},"type":"object"}},"proxmoxve:Pool/membership:Membership":{"description":"Manages resource pool memberships for containers, virtual machines and storages\n\n\u003e This resource requires the `Pool.Allocate` permission on the pool path (e.g., `/pool/{poolid}`).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst testVm1 = new proxmoxve.vm.VirtualMachine(\"test_vm1\", {\n vmId: 1234,\n nodeName: \"pve\",\n started: false,\n});\nconst testPool = new proxmoxve.permission.Pool(\"test_pool\", {poolId: \"test-pool\"});\nconst vmMembership = new proxmoxve.pool.Membership(\"vm_membership\", {\n poolId: testPool.id,\n vmId: testVm1.id,\n});\nconst storageMembership = new proxmoxve.pool.Membership(\"storage_membership\", {\n poolId: testPool.id,\n storageId: \"local-lvm\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ntest_vm1 = proxmoxve.vm.VirtualMachine(\"test_vm1\",\n vm_id=1234,\n node_name=\"pve\",\n started=False)\ntest_pool = proxmoxve.permission.Pool(\"test_pool\", pool_id=\"test-pool\")\nvm_membership = proxmoxve.pool.Membership(\"vm_membership\",\n pool_id=test_pool.id,\n vm_id=test_vm1.id)\nstorage_membership = proxmoxve.pool.Membership(\"storage_membership\",\n pool_id=test_pool.id,\n storage_id=\"local-lvm\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testVm1 = new ProxmoxVE.VM.VirtualMachine(\"test_vm1\", new()\n {\n VmId = 1234,\n NodeName = \"pve\",\n Started = false,\n });\n\n var testPool = new ProxmoxVE.Permission.Pool(\"test_pool\", new()\n {\n PoolId = \"test-pool\",\n });\n\n var vmMembership = new ProxmoxVE.Pool.Membership(\"vm_membership\", new()\n {\n PoolId = testPool.Id,\n VmId = testVm1.Id,\n });\n\n var storageMembership = new ProxmoxVE.Pool.Membership(\"storage_membership\", new()\n {\n PoolId = testPool.Id,\n StorageId = \"local-lvm\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/pool\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestVm1, err := vm.NewVirtualMachine(ctx, \"test_vm1\", \u0026vm.VirtualMachineArgs{\n\t\t\tVmId: pulumi.Int(1234),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tStarted: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestPool, err := permission.NewPool(ctx, \"test_pool\", \u0026permission.PoolArgs{\n\t\t\tPoolId: pulumi.String(\"test-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pool.NewMembership(ctx, \"vm_membership\", \u0026pool.MembershipArgs{\n\t\t\tPoolId: testPool.ID(),\n\t\t\tVmId: testVm1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pool.NewMembership(ctx, \"storage_membership\", \u0026pool.MembershipArgs{\n\t\t\tPoolId: testPool.ID(),\n\t\t\tStorageId: pulumi.String(\"local-lvm\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachine;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachineArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Pool;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.PoolArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Pool.Membership;\nimport io.muehlbachler.pulumi.proxmoxve.Pool.MembershipArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var testVm1 = new VirtualMachine(\"testVm1\", VirtualMachineArgs.builder()\n .vmId(1234)\n .nodeName(\"pve\")\n .started(false)\n .build());\n\n var testPool = new Pool(\"testPool\", PoolArgs.builder()\n .poolId(\"test-pool\")\n .build());\n\n var vmMembership = new Membership(\"vmMembership\", MembershipArgs.builder()\n .poolId(testPool.id())\n .vmId(testVm1.id())\n .build());\n\n var storageMembership = new Membership(\"storageMembership\", MembershipArgs.builder()\n .poolId(testPool.id())\n .storageId(\"local-lvm\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testVm1:\n type: proxmoxve:VM:VirtualMachine\n name: test_vm1\n properties:\n vmId: 1234\n nodeName: pve\n started: false\n testPool:\n type: proxmoxve:Permission:Pool\n name: test_pool\n properties:\n poolId: test-pool\n vmMembership:\n type: proxmoxve:Pool:Membership\n name: vm_membership\n properties:\n poolId: ${testPool.id}\n vmId: ${testVm1.id}\n storageMembership:\n type: proxmoxve:Pool:Membership\n name: storage_membership\n properties:\n poolId: ${testPool.id}\n storageId: local-lvm\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nResource pool membership can be imported using its unique identifier, e.g.: {pool_id}/{type}/{member_id}\n\n```sh\n$ pulumi import proxmoxve:Pool/membership:Membership example_membership test-pool/vm/102\n```\n\n","properties":{"poolId":{"type":"string","description":"Resource pool id\n"},"storageId":{"type":"string","description":"Storage id\n"},"type":{"type":"string","description":"Resource pool membership type (can be \u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e for VMs and CTs or \u003cspan pulumi-lang-nodejs=\"`storage`\" pulumi-lang-dotnet=\"`Storage`\" pulumi-lang-go=\"`storage`\" pulumi-lang-python=\"`storage`\" pulumi-lang-yaml=\"`storage`\" pulumi-lang-java=\"`storage`\"\u003e`storage`\u003c/span\u003e for storages)\n"},"vmId":{"type":"integer","description":"VM or CT id\n"}},"required":["poolId","type"],"inputProperties":{"poolId":{"type":"string","description":"Resource pool id\n"},"storageId":{"type":"string","description":"Storage id\n"},"vmId":{"type":"integer","description":"VM or CT id\n"}},"requiredInputs":["poolId"],"stateInputs":{"description":"Input properties used for looking up and filtering Membership resources.\n","properties":{"poolId":{"type":"string","description":"Resource pool id\n"},"storageId":{"type":"string","description":"Storage id\n"},"type":{"type":"string","description":"Resource pool membership type (can be \u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e for VMs and CTs or \u003cspan pulumi-lang-nodejs=\"`storage`\" pulumi-lang-dotnet=\"`Storage`\" pulumi-lang-go=\"`storage`\" pulumi-lang-python=\"`storage`\" pulumi-lang-yaml=\"`storage`\" pulumi-lang-java=\"`storage`\"\u003e`storage`\u003c/span\u003e for storages)\n"},"vmId":{"type":"integer","description":"VM or CT id\n"}},"type":"object"}},"proxmoxve:Realm/ldap:Ldap":{"description":"\n\n## Import\n\n#!/usr/bin/env sh\n\nLDAP realms can be imported using the realm identifier, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Realm/ldap:Ldap example example.com\n```\n\n-\u003e When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform.\n\n","properties":{"baseDn":{"type":"string","description":"LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com').\n"},"bindDn":{"type":"string","description":"LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com').\n"},"bindPassword":{"type":"string","description":"Password for the bind DN. Note: stored in Proxmox but not returned by API.\n","secret":true},"caPath":{"type":"string","description":"Path to CA certificate file for SSL verification.\n"},"caseSensitive":{"type":"boolean","description":"Enable case-sensitive username matching.\n"},"certKeyPath":{"type":"string","description":"Path to client certificate key.\n"},"certPath":{"type":"string","description":"Path to client certificate for SSL authentication.\n"},"comment":{"type":"string","description":"Description of the realm.\n"},"default":{"type":"boolean","description":"Use this realm as the default for login.\n"},"filter":{"type":"string","description":"LDAP filter for user searches.\n"},"groupClasses":{"type":"string","description":"LDAP objectClasses for groups (comma-separated).\n"},"groupDn":{"type":"string","description":"LDAP base DN for group searches.\n"},"groupFilter":{"type":"string","description":"LDAP filter for group searches.\n"},"groupNameAttr":{"type":"string","description":"LDAP attribute representing the group name.\n"},"mode":{"type":"string","description":"LDAP connection mode (ldap, ldaps, ldap+starttls).\n"},"port":{"type":"integer","description":"LDAP server port. Default: 389 (LDAP) or 636 (LDAPS).\n"},"realm":{"type":"string","description":"Realm identifier (e.g., 'example.com').\n"},"secure":{"type":"boolean","description":"Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP.\n","deprecationMessage":"Deprecated by Proxmox: use mode instead."},"server1":{"type":"string","description":"Primary LDAP server hostname or IP address.\n"},"server2":{"type":"string","description":"Fallback LDAP server hostname or IP address.\n"},"sslVersion":{"type":"string","description":"SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3).\n"},"syncAttributes":{"type":"string","description":"Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName').\n"},"syncDefaultsOptions":{"type":"string","description":"Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'.\n"},"userAttr":{"type":"string","description":"LDAP attribute representing the username.\n"},"userClasses":{"type":"string","description":"LDAP objectClasses for users (comma-separated).\n"},"verify":{"type":"boolean","description":"Verify LDAP server SSL certificate.\n"}},"required":["baseDn","caseSensitive","default","realm","secure","server1","userAttr","verify"],"inputProperties":{"baseDn":{"type":"string","description":"LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com').\n"},"bindDn":{"type":"string","description":"LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com').\n"},"bindPassword":{"type":"string","description":"Password for the bind DN. Note: stored in Proxmox but not returned by API.\n","secret":true},"caPath":{"type":"string","description":"Path to CA certificate file for SSL verification.\n"},"caseSensitive":{"type":"boolean","description":"Enable case-sensitive username matching.\n"},"certKeyPath":{"type":"string","description":"Path to client certificate key.\n"},"certPath":{"type":"string","description":"Path to client certificate for SSL authentication.\n"},"comment":{"type":"string","description":"Description of the realm.\n"},"default":{"type":"boolean","description":"Use this realm as the default for login.\n"},"filter":{"type":"string","description":"LDAP filter for user searches.\n"},"groupClasses":{"type":"string","description":"LDAP objectClasses for groups (comma-separated).\n"},"groupDn":{"type":"string","description":"LDAP base DN for group searches.\n"},"groupFilter":{"type":"string","description":"LDAP filter for group searches.\n"},"groupNameAttr":{"type":"string","description":"LDAP attribute representing the group name.\n"},"mode":{"type":"string","description":"LDAP connection mode (ldap, ldaps, ldap+starttls).\n"},"port":{"type":"integer","description":"LDAP server port. Default: 389 (LDAP) or 636 (LDAPS).\n"},"realm":{"type":"string","description":"Realm identifier (e.g., 'example.com').\n"},"secure":{"type":"boolean","description":"Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP.\n","deprecationMessage":"Deprecated by Proxmox: use mode instead."},"server1":{"type":"string","description":"Primary LDAP server hostname or IP address.\n"},"server2":{"type":"string","description":"Fallback LDAP server hostname or IP address.\n"},"sslVersion":{"type":"string","description":"SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3).\n"},"syncAttributes":{"type":"string","description":"Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName').\n"},"syncDefaultsOptions":{"type":"string","description":"Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'.\n"},"userAttr":{"type":"string","description":"LDAP attribute representing the username.\n"},"userClasses":{"type":"string","description":"LDAP objectClasses for users (comma-separated).\n"},"verify":{"type":"boolean","description":"Verify LDAP server SSL certificate.\n"}},"requiredInputs":["baseDn","realm","server1"],"stateInputs":{"description":"Input properties used for looking up and filtering Ldap resources.\n","properties":{"baseDn":{"type":"string","description":"LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com').\n"},"bindDn":{"type":"string","description":"LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com').\n"},"bindPassword":{"type":"string","description":"Password for the bind DN. Note: stored in Proxmox but not returned by API.\n","secret":true},"caPath":{"type":"string","description":"Path to CA certificate file for SSL verification.\n"},"caseSensitive":{"type":"boolean","description":"Enable case-sensitive username matching.\n"},"certKeyPath":{"type":"string","description":"Path to client certificate key.\n"},"certPath":{"type":"string","description":"Path to client certificate for SSL authentication.\n"},"comment":{"type":"string","description":"Description of the realm.\n"},"default":{"type":"boolean","description":"Use this realm as the default for login.\n"},"filter":{"type":"string","description":"LDAP filter for user searches.\n"},"groupClasses":{"type":"string","description":"LDAP objectClasses for groups (comma-separated).\n"},"groupDn":{"type":"string","description":"LDAP base DN for group searches.\n"},"groupFilter":{"type":"string","description":"LDAP filter for group searches.\n"},"groupNameAttr":{"type":"string","description":"LDAP attribute representing the group name.\n"},"mode":{"type":"string","description":"LDAP connection mode (ldap, ldaps, ldap+starttls).\n"},"port":{"type":"integer","description":"LDAP server port. Default: 389 (LDAP) or 636 (LDAPS).\n"},"realm":{"type":"string","description":"Realm identifier (e.g., 'example.com').\n"},"secure":{"type":"boolean","description":"Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP.\n","deprecationMessage":"Deprecated by Proxmox: use mode instead."},"server1":{"type":"string","description":"Primary LDAP server hostname or IP address.\n"},"server2":{"type":"string","description":"Fallback LDAP server hostname or IP address.\n"},"sslVersion":{"type":"string","description":"SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3).\n"},"syncAttributes":{"type":"string","description":"Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName').\n"},"syncDefaultsOptions":{"type":"string","description":"Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'.\n"},"userAttr":{"type":"string","description":"LDAP attribute representing the username.\n"},"userClasses":{"type":"string","description":"LDAP objectClasses for users (comma-separated).\n"},"verify":{"type":"boolean","description":"Verify LDAP server SSL certificate.\n"}},"type":"object"}},"proxmoxve:Realm/sync:Sync":{"description":"\n\n## Import\n\n#!/usr/bin/env sh\n\nRealm sync resources can be imported by realm name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Realm/sync:Sync example example.com\n```\n\nImporting only populates the `realm` and `id` attributes; other fields must\n\nbe set in configuration.\n\n","properties":{"dryRun":{"type":"boolean","description":"Only simulate the sync without applying changes.\n"},"enableNew":{"type":"boolean","description":"Enable newly synced users.\n"},"full":{"type":"boolean","description":"Perform a full sync.\n","deprecationMessage":"Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead."},"purge":{"type":"boolean","description":"Purge removed entries.\n","deprecationMessage":"Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead."},"realm":{"type":"string","description":"Name of the realm to synchronize.\n"},"removeVanished":{"type":"string","description":"How to handle vanished entries (e.g. `acl;properties;entry` or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n"},"scope":{"type":"string","description":"Sync scope: users, groups, or both.\n"}},"required":["realm"],"inputProperties":{"dryRun":{"type":"boolean","description":"Only simulate the sync without applying changes.\n"},"enableNew":{"type":"boolean","description":"Enable newly synced users.\n"},"full":{"type":"boolean","description":"Perform a full sync.\n","deprecationMessage":"Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead."},"purge":{"type":"boolean","description":"Purge removed entries.\n","deprecationMessage":"Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead."},"realm":{"type":"string","description":"Name of the realm to synchronize.\n"},"removeVanished":{"type":"string","description":"How to handle vanished entries (e.g. `acl;properties;entry` or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n"},"scope":{"type":"string","description":"Sync scope: users, groups, or both.\n"}},"requiredInputs":["realm"],"stateInputs":{"description":"Input properties used for looking up and filtering Sync resources.\n","properties":{"dryRun":{"type":"boolean","description":"Only simulate the sync without applying changes.\n"},"enableNew":{"type":"boolean","description":"Enable newly synced users.\n"},"full":{"type":"boolean","description":"Perform a full sync.\n","deprecationMessage":"Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead."},"purge":{"type":"boolean","description":"Purge removed entries.\n","deprecationMessage":"Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead."},"realm":{"type":"string","description":"Name of the realm to synchronize.\n"},"removeVanished":{"type":"string","description":"How to handle vanished entries (e.g. `acl;properties;entry` or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n"},"scope":{"type":"string","description":"Sync scope: users, groups, or both.\n"}},"type":"object"}},"proxmoxve:SDNFabric/oSPF:OSPF":{"description":"OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OSPF(\"main\", {\n ospfId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n area: \"0\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OSPF(\"main\",\n ospf_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\",\n area=\"0\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OSPF(\"main\", new()\n {\n OspfId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n Area = \"0\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnfabric.NewOSPF(ctx, \"main\", \u0026sdnfabric.OSPFArgs{\n\t\t\tOspfId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tArea: pulumi.String(\"0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPF;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPFArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OSPF(\"main\", OSPFArgs.builder()\n .ospfId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .area(\"0\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OSPF\n properties:\n ospfId: main-fabric\n ipPrefix: 10.0.0.0/16\n area: '0'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"area":{"type":"string","description":"OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n"},"ipPrefix":{"type":"string","description":"IPv4 prefix cidr for the fabric.\n"},"ospfId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"required":["area","ospfId","ipPrefix"],"inputProperties":{"area":{"type":"string","description":"OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n"},"ipPrefix":{"type":"string","description":"IPv4 prefix cidr for the fabric.\n"},"ospfId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"requiredInputs":["area","ospfId","ipPrefix"],"stateInputs":{"description":"Input properties used for looking up and filtering OSPF resources.\n","properties":{"area":{"type":"string","description":"OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n"},"ipPrefix":{"type":"string","description":"IPv4 prefix cidr for the fabric.\n"},"ospfId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"type":"object"}},"proxmoxve:SDNFabric/openFabric:OpenFabric":{"description":"OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OpenFabric(\"main\", {\n fabricId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OpenFabric(\"main\",\n fabric_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OpenFabric(\"main\", new()\n {\n FabricId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnfabric.NewOpenFabric(ctx, \"main\", \u0026sdnfabric.OpenFabricArgs{\n\t\t\tFabricId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabric;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OpenFabric(\"main\", OpenFabricArgs.builder()\n .fabricId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OpenFabric\n properties:\n fabricId: main-fabric\n ipPrefix: 10.0.0.0/16\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"csnpInterval":{"type":"integer","description":"The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n"},"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"helloInterval":{"type":"integer","description":"The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n"},"ip6Prefix":{"type":"string","description":"IPv6 prefix cidr for the fabric.\n"},"ipPrefix":{"type":"string","description":"IPv4 prefix cidr for the fabric.\n"}},"required":["fabricId"],"inputProperties":{"csnpInterval":{"type":"integer","description":"The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n"},"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"helloInterval":{"type":"integer","description":"The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n"},"ip6Prefix":{"type":"string","description":"IPv6 prefix cidr for the fabric.\n"},"ipPrefix":{"type":"string","description":"IPv4 prefix cidr for the fabric.\n"}},"requiredInputs":["fabricId"],"stateInputs":{"description":"Input properties used for looking up and filtering OpenFabric resources.\n","properties":{"csnpInterval":{"type":"integer","description":"The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n"},"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"helloInterval":{"type":"integer","description":"The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n"},"ip6Prefix":{"type":"string","description":"IPv6 prefix cidr for the fabric.\n"},"ipPrefix":{"type":"string","description":"IPv4 prefix cidr for the fabric.\n"}},"type":"object"}},"proxmoxve:SDNZone/evpn:Evpn":{"description":"EVPN Zone in Proxmox SDN. The EVPN zone creates a routable Layer 3 network, capable of spanning across multiple clusters.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Evpn(\"example\", {\n zoneId: \"evpn1\",\n nodes: [\"pve\"],\n controller: \"evpn-controller1\",\n vrfVxlan: 4000,\n advertiseSubnets: true,\n disableArpNdSuppression: false,\n exitNodes: [\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exitNodesLocalRouting: true,\n primaryExitNode: \"pve-exit1\",\n rtImport: \"65000:65000\",\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Evpn(\"example\",\n zone_id=\"evpn1\",\n nodes=[\"pve\"],\n controller=\"evpn-controller1\",\n vrf_vxlan=4000,\n advertise_subnets=True,\n disable_arp_nd_suppression=False,\n exit_nodes=[\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exit_nodes_local_routing=True,\n primary_exit_node=\"pve-exit1\",\n rt_import=\"65000:65000\",\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Evpn(\"example\", new()\n {\n ZoneId = \"evpn1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Controller = \"evpn-controller1\",\n VrfVxlan = 4000,\n AdvertiseSubnets = true,\n DisableArpNdSuppression = false,\n ExitNodes = new[]\n {\n \"pve-exit1\",\n \"pve-exit2\",\n },\n ExitNodesLocalRouting = true,\n PrimaryExitNode = \"pve-exit1\",\n RtImport = \"65000:65000\",\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewEvpn(ctx, \"example\", \u0026sdnzone.EvpnArgs{\n\t\t\tZoneId: pulumi.String(\"evpn1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tController: pulumi.String(\"evpn-controller1\"),\n\t\t\tVrfVxlan: pulumi.Int(4000),\n\t\t\tAdvertiseSubnets: pulumi.Bool(true),\n\t\t\tDisableArpNdSuppression: pulumi.Bool(false),\n\t\t\tExitNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve-exit1\"),\n\t\t\t\tpulumi.String(\"pve-exit2\"),\n\t\t\t},\n\t\t\tExitNodesLocalRouting: pulumi.Bool(true),\n\t\t\tPrimaryExitNode: pulumi.String(\"pve-exit1\"),\n\t\t\tRtImport: pulumi.String(\"65000:65000\"),\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Evpn;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.EvpnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Evpn(\"example\", EvpnArgs.builder()\n .zoneId(\"evpn1\")\n .nodes(\"pve\")\n .controller(\"evpn-controller1\")\n .vrfVxlan(4000)\n .advertiseSubnets(true)\n .disableArpNdSuppression(false)\n .exitNodes( \n \"pve-exit1\",\n \"pve-exit2\")\n .exitNodesLocalRouting(true)\n .primaryExitNode(\"pve-exit1\")\n .rtImport(\"65000:65000\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Evpn\n properties:\n zoneId: evpn1\n nodes:\n - pve\n controller: evpn-controller1\n vrfVxlan: 4000 # Optional attributes\n advertiseSubnets: true\n disableArpNdSuppression: false\n exitNodes:\n - pve-exit1\n - pve-exit2\n exitNodesLocalRouting: true\n primaryExitNode: pve-exit1\n rtImport: 65000:65000\n mtu: 1450 # Generic optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nEVPN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/evpn:Evpn example evpn1\n```\n\n","properties":{"advertiseSubnets":{"type":"boolean","description":"Enable subnet advertisement for EVPN.\n"},"controller":{"type":"string","description":"EVPN controller address.\n"},"disableArpNdSuppression":{"type":"boolean","description":"Disable ARP/ND suppression for EVPN.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"exitNodes":{"type":"array","items":{"type":"string"},"description":"List of exit nodes for EVPN.\n"},"exitNodesLocalRouting":{"type":"boolean","description":"Enable local routing for EVPN exit nodes.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"primaryExitNode":{"type":"string","description":"Primary exit node for EVPN.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"rtImport":{"type":"string","description":"Route target import for EVPN.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"vrfVxlan":{"type":"integer","description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["advertiseSubnets","controller","disableArpNdSuppression","exitNodes","exitNodesLocalRouting","zoneId","mtu","nodes","pending","state","vrfVxlan"],"inputProperties":{"advertiseSubnets":{"type":"boolean","description":"Enable subnet advertisement for EVPN.\n"},"controller":{"type":"string","description":"EVPN controller address.\n"},"disableArpNdSuppression":{"type":"boolean","description":"Disable ARP/ND suppression for EVPN.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"exitNodes":{"type":"array","items":{"type":"string"},"description":"List of exit nodes for EVPN.\n"},"exitNodesLocalRouting":{"type":"boolean","description":"Enable local routing for EVPN exit nodes.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"primaryExitNode":{"type":"string","description":"Primary exit node for EVPN.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"rtImport":{"type":"string","description":"Route target import for EVPN.\n"},"vrfVxlan":{"type":"integer","description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["controller","zoneId","vrfVxlan"],"stateInputs":{"description":"Input properties used for looking up and filtering Evpn resources.\n","properties":{"advertiseSubnets":{"type":"boolean","description":"Enable subnet advertisement for EVPN.\n"},"controller":{"type":"string","description":"EVPN controller address.\n"},"disableArpNdSuppression":{"type":"boolean","description":"Disable ARP/ND suppression for EVPN.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"exitNodes":{"type":"array","items":{"type":"string"},"description":"List of exit nodes for EVPN.\n"},"exitNodesLocalRouting":{"type":"boolean","description":"Enable local routing for EVPN exit nodes.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"primaryExitNode":{"type":"string","description":"Primary exit node for EVPN.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"rtImport":{"type":"string","description":"Route target import for EVPN.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"vrfVxlan":{"type":"integer","description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/qinq:Qinq":{"description":"QinQ Zone in Proxmox SDN. QinQ also known as VLAN stacking, that uses multiple layers of VLAN tags for isolation. The QinQ zone defines the outer VLAN tag (the Service VLAN) whereas the inner VLAN tag is defined by the VNet. Your physical network switches must support stacked VLANs for this configuration. Due to the double stacking of tags, you need 4 more bytes for QinQ VLANs. For example, you must reduce the MTU to 1496 if you physical interface MTU is 1500.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Qinq(\"example\", {\n zoneId: \"qinq1\",\n bridge: \"vmbr0\",\n serviceVlan: 100,\n serviceVlanProtocol: \"802.1ad\",\n mtu: 1496,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Qinq(\"example\",\n zone_id=\"qinq1\",\n bridge=\"vmbr0\",\n service_vlan=100,\n service_vlan_protocol=\"802.1ad\",\n mtu=1496,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Qinq(\"example\", new()\n {\n ZoneId = \"qinq1\",\n Bridge = \"vmbr0\",\n ServiceVlan = 100,\n ServiceVlanProtocol = \"802.1ad\",\n Mtu = 1496,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewQinq(ctx, \"example\", \u0026sdnzone.QinqArgs{\n\t\t\tZoneId: pulumi.String(\"qinq1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tServiceVlan: pulumi.Int(100),\n\t\t\tServiceVlanProtocol: pulumi.String(\"802.1ad\"),\n\t\t\tMtu: pulumi.Int(1496),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Qinq;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.QinqArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Qinq(\"example\", QinqArgs.builder()\n .zoneId(\"qinq1\")\n .bridge(\"vmbr0\")\n .serviceVlan(100)\n .serviceVlanProtocol(\"802.1ad\")\n .mtu(1496)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Qinq\n properties:\n zoneId: qinq1\n bridge: vmbr0\n serviceVlan: 100\n serviceVlanProtocol: 802.1ad\n mtu: 1496 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nQinQ SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/qinq:Qinq example qinq1\n```\n\n","properties":{"bridge":{"type":"string","description":"A local, VLAN-aware bridge that is already configured on each local node\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"serviceVlan":{"type":"integer","description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n"},"serviceVlanProtocol":{"type":"string","description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["bridge","zoneId","mtu","nodes","pending","serviceVlan","serviceVlanProtocol","state"],"inputProperties":{"bridge":{"type":"string","description":"A local, VLAN-aware bridge that is already configured on each local node\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"serviceVlan":{"type":"integer","description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n"},"serviceVlanProtocol":{"type":"string","description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["bridge","zoneId","serviceVlan"],"stateInputs":{"description":"Input properties used for looking up and filtering Qinq resources.\n","properties":{"bridge":{"type":"string","description":"A local, VLAN-aware bridge that is already configured on each local node\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"serviceVlan":{"type":"integer","description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n"},"serviceVlanProtocol":{"type":"string","description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/simple:Simple":{"description":"Simple Zone in Proxmox SDN. It will create an isolated VNet bridge. This bridge is not linked to a physical interface, and VM traffic is only local on each the node. It can be used in NAT or routed setups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Simple(\"example\", {\n zoneId: \"simple1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Simple(\"example\",\n zone_id=\"simple1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Simple(\"example\", new()\n {\n ZoneId = \"simple1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewSimple(ctx, \"example\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"simple1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Simple(\"example\", SimpleArgs.builder()\n .zoneId(\"simple1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Simple\n properties:\n zoneId: simple1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSimple SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/simple:Simple example simple1\n```\n\n","properties":{"dhcp":{"type":"string","description":"The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["zoneId","mtu","nodes","pending","state"],"inputProperties":{"dhcp":{"type":"string","description":"The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["zoneId"],"stateInputs":{"description":"Input properties used for looking up and filtering Simple resources.\n","properties":{"dhcp":{"type":"string","description":"The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/vlan:Vlan":{"description":"VLAN Zone in Proxmox SDN. It uses an existing local Linux or OVS bridge to connect to the node's physical interface. It uses VLAN tagging defined in the VNet to isolate the network segments. This allows connectivity of VMs between different nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vlan(\"example\", {\n zoneId: \"vlan1\",\n bridge: \"vmbr0\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vlan(\"example\",\n zone_id=\"vlan1\",\n bridge=\"vmbr0\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vlan(\"example\", new()\n {\n ZoneId = \"vlan1\",\n Bridge = \"vmbr0\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVlan(ctx, \"example\", \u0026sdnzone.VlanArgs{\n\t\t\tZoneId: pulumi.String(\"vlan1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vlan(\"example\", VlanArgs.builder()\n .zoneId(\"vlan1\")\n .bridge(\"vmbr0\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vlan\n properties:\n zoneId: vlan1\n bridge: vmbr0\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vlan:Vlan example vlan1\n```\n\n","properties":{"bridge":{"type":"string","description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["bridge","zoneId","mtu","nodes","pending","state"],"inputProperties":{"bridge":{"type":"string","description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["bridge","zoneId"],"stateInputs":{"description":"Input properties used for looking up and filtering Vlan resources.\n","properties":{"bridge":{"type":"string","description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n"},"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:SDNZone/vxlan:Vxlan":{"description":"VXLAN Zone in Proxmox SDN. It establishes a tunnel (overlay) on top of an existing network (underlay). This encapsulates layer 2 Ethernet frames within layer 4 UDP datagrams using the default destination port 4789. You have to configure the underlay network yourself to enable UDP connectivity between all peers. Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes lower than the outgoing physical interface.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vxlan(\"example\", {\n zoneId: \"vxlan1\",\n peers: [\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vxlan(\"example\",\n zone_id=\"vxlan1\",\n peers=[\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vxlan(\"example\", new()\n {\n ZoneId = \"vxlan1\",\n Peers = new[]\n {\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n },\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVxlan(ctx, \"example\", \u0026sdnzone.VxlanArgs{\n\t\t\tZoneId: pulumi.String(\"vxlan1\"),\n\t\t\tPeers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.0.0.1\"),\n\t\t\t\tpulumi.String(\"10.0.0.2\"),\n\t\t\t\tpulumi.String(\"10.0.0.3\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vxlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VxlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vxlan(\"example\", VxlanArgs.builder()\n .zoneId(\"vxlan1\")\n .peers( \n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vxlan\n properties:\n zoneId: vxlan1\n peers:\n - 10.0.0.1\n - 10.0.0.2\n - 10.0.0.3\n mtu: 1450 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVXLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vxlan:Vxlan example vxlan1\n```\n\n","properties":{"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"peers":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"required":["zoneId","mtu","nodes","peers","pending","state"],"inputProperties":{"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"peers":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"requiredInputs":["zoneId","peers"],"stateInputs":{"description":"Input properties used for looking up and filtering Vxlan resources.\n","properties":{"dns":{"type":"string","description":"DNS API server address.\n"},"dnsZone":{"type":"string","description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n"},"ipam":{"type":"string","description":"IP Address Management system.\n"},"mtu":{"type":"integer","description":"MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"The Proxmox nodes which the zone and associated VNets should be deployed on\n"},"peers":{"type":"array","items":{"type":"string"},"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n"},"pending":{"type":"boolean","description":"Indicates if the zone has pending configuration changes that need to be applied.\n"},"reverseDns":{"type":"string","description":"Reverse DNS API server address.\n"},"state":{"type":"string","description":"Indicates the current state of the zone.\n"},"zoneId":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object"}},"proxmoxve:Sdn/applier:Applier":{"description":"**EXPERIMENTAL** Triggers Proxmox's SDN **Apply** (equivalent to `PUT /cluster/sdn`).Intended to be used with \u003cspan pulumi-lang-nodejs=\"`replaceTriggeredBy`\" pulumi-lang-dotnet=\"`ReplaceTriggeredBy`\" pulumi-lang-go=\"`replaceTriggeredBy`\" pulumi-lang-python=\"`replace_triggered_by`\" pulumi-lang-yaml=\"`replaceTriggeredBy`\" pulumi-lang-java=\"`replaceTriggeredBy`\"\u003e`replace_triggered_by`\u003c/span\u003e so it runs after SDN objects change.\n\n","properties":{"onCreate":{"type":"boolean","description":"Whether to apply SDN configuration on resource creation. Defaults to true.\n"},"onDestroy":{"type":"boolean","description":"Whether to apply SDN configuration on resource destruction. Defaults to true.\n"}},"required":["onCreate","onDestroy"],"inputProperties":{"onCreate":{"type":"boolean","description":"Whether to apply SDN configuration on resource creation. Defaults to true.\n"},"onDestroy":{"type":"boolean","description":"Whether to apply SDN configuration on resource destruction. Defaults to true.\n"}},"stateInputs":{"description":"Input properties used for looking up and filtering Applier resources.\n","properties":{"onCreate":{"type":"boolean","description":"Whether to apply SDN configuration on resource creation. Defaults to true.\n"},"onDestroy":{"type":"boolean","description":"Whether to apply SDN configuration on resource destruction. Defaults to true.\n"}},"type":"object"}},"proxmoxve:Sdn/fabric/node/openfabric:Openfabric":{"description":"OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OpenFabric(\"main\", {\n fabricId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n});\nconst mainOpenfabric = new proxmoxve.sdn.fabric.node.Openfabric(\"main\", {\n fabricId: main.fabricId,\n nodeId: \"pve\",\n ip: \"10.0.0.1\",\n interfaceNames: [\n \"nic0\",\n \"nic1\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OpenFabric(\"main\",\n fabric_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\")\nmain_openfabric = proxmoxve.sdn.fabric.node.Openfabric(\"main\",\n fabric_id=main.fabric_id,\n node_id=\"pve\",\n ip=\"10.0.0.1\",\n interface_names=[\n \"nic0\",\n \"nic1\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OpenFabric(\"main\", new()\n {\n FabricId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n });\n\n var mainOpenfabric = new ProxmoxVE.Sdn.Fabric.Node.Openfabric(\"main\", new()\n {\n FabricId = main.FabricId,\n NodeId = \"pve\",\n Ip = \"10.0.0.1\",\n InterfaceNames = new[]\n {\n \"nic0\",\n \"nic1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := sdnfabric.NewOpenFabric(ctx, \"main\", \u0026sdnfabric.OpenFabricArgs{\n\t\t\tFabricId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sdn.NewOpenfabric(ctx, \"main\", \u0026sdn.OpenfabricArgs{\n\t\t\tFabricId: main.FabricId,\n\t\t\tNodeId: pulumi.String(\"pve\"),\n\t\t\tIp: pulumi.String(\"10.0.0.1\"),\n\t\t\tInterfaceNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"nic0\"),\n\t\t\t\tpulumi.String(\"nic1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabric;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabricArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Openfabric;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.OpenfabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OpenFabric(\"main\", OpenFabricArgs.builder()\n .fabricId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .build());\n\n var mainOpenfabric = new Openfabric(\"mainOpenfabric\", OpenfabricArgs.builder()\n .fabricId(main.fabricId())\n .nodeId(\"pve\")\n .ip(\"10.0.0.1\")\n .interfaceNames( \n \"nic0\",\n \"nic1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OpenFabric\n properties:\n fabricId: main-fabric\n ipPrefix: 10.0.0.0/16\n mainOpenfabric:\n type: proxmoxve:Sdn/fabric/node:Openfabric\n name: main\n properties:\n fabricId: ${main.fabricId}\n nodeId: pve\n ip: 10.0.0.1\n interfaceNames:\n - nic0\n - nic1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"interfaceNames":{"type":"array","items":{"type":"string"},"description":"Set of interfaces associated with the fabric node.\n"},"ip":{"type":"string","description":"IPv4 address for the fabric node.\n"},"ip6":{"type":"string","description":"IPv6 address for the fabric node.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"required":["fabricId","interfaceNames","nodeId"],"inputProperties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"interfaceNames":{"type":"array","items":{"type":"string"},"description":"Set of interfaces associated with the fabric node.\n"},"ip":{"type":"string","description":"IPv4 address for the fabric node.\n"},"ip6":{"type":"string","description":"IPv6 address for the fabric node.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"requiredInputs":["fabricId","interfaceNames","nodeId"],"stateInputs":{"description":"Input properties used for looking up and filtering Openfabric resources.\n","properties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"interfaceNames":{"type":"array","items":{"type":"string"},"description":"Set of interfaces associated with the fabric node.\n"},"ip":{"type":"string","description":"IPv4 address for the fabric node.\n"},"ip6":{"type":"string","description":"IPv6 address for the fabric node.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"type":"object"}},"proxmoxve:Sdn/fabric/node/ospf:Ospf":{"description":"OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OSPF(\"main\", {\n ospfId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n area: \"0\",\n});\nconst mainOspf = new proxmoxve.sdn.fabric.node.Ospf(\"main\", {\n fabricId: main.ospfId,\n nodeId: \"pve\",\n ip: \"10.0.0.1\",\n interfaceNames: [\n \"nic0\",\n \"nic1\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OSPF(\"main\",\n ospf_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\",\n area=\"0\")\nmain_ospf = proxmoxve.sdn.fabric.node.Ospf(\"main\",\n fabric_id=main.ospf_id,\n node_id=\"pve\",\n ip=\"10.0.0.1\",\n interface_names=[\n \"nic0\",\n \"nic1\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OSPF(\"main\", new()\n {\n OspfId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n Area = \"0\",\n });\n\n var mainOspf = new ProxmoxVE.Sdn.Fabric.Node.Ospf(\"main\", new()\n {\n FabricId = main.OspfId,\n NodeId = \"pve\",\n Ip = \"10.0.0.1\",\n InterfaceNames = new[]\n {\n \"nic0\",\n \"nic1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := sdnfabric.NewOSPF(ctx, \"main\", \u0026sdnfabric.OSPFArgs{\n\t\t\tOspfId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tArea: pulumi.String(\"0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sdn.NewOspf(ctx, \"main\", \u0026sdn.OspfArgs{\n\t\t\tFabricId: main.OspfId,\n\t\t\tNodeId: pulumi.String(\"pve\"),\n\t\t\tIp: pulumi.String(\"10.0.0.1\"),\n\t\t\tInterfaceNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"nic0\"),\n\t\t\t\tpulumi.String(\"nic1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPF;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPFArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Ospf;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.OspfArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OSPF(\"main\", OSPFArgs.builder()\n .ospfId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .area(\"0\")\n .build());\n\n var mainOspf = new Ospf(\"mainOspf\", OspfArgs.builder()\n .fabricId(main.ospfId())\n .nodeId(\"pve\")\n .ip(\"10.0.0.1\")\n .interfaceNames( \n \"nic0\",\n \"nic1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OSPF\n properties:\n ospfId: main-fabric\n ipPrefix: 10.0.0.0/16\n area: '0'\n mainOspf:\n type: proxmoxve:Sdn/fabric/node:Ospf\n name: main\n properties:\n fabricId: ${main.ospfId}\n nodeId: pve\n ip: 10.0.0.1\n interfaceNames:\n - nic0\n - nic1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"interfaceNames":{"type":"array","items":{"type":"string"},"description":"Set of interfaces associated with the fabric node.\n"},"ip":{"type":"string","description":"IPv4 address for the fabric node.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric node.\n"}},"required":["fabricId","interfaceNames","ip","nodeId"],"inputProperties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"interfaceNames":{"type":"array","items":{"type":"string"},"description":"Set of interfaces associated with the fabric node.\n"},"ip":{"type":"string","description":"IPv4 address for the fabric node.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric node.\n"}},"requiredInputs":["fabricId","interfaceNames","ip","nodeId"],"stateInputs":{"description":"Input properties used for looking up and filtering Ospf resources.\n","properties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"interfaceNames":{"type":"array","items":{"type":"string"},"description":"Set of interfaces associated with the fabric node.\n"},"ip":{"type":"string","description":"IPv4 address for the fabric node.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric node.\n"}},"type":"object"}},"proxmoxve:Sdn/subnet:Subnet":{"description":"Manages SDN Subnets in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n nodes: [\"pve\"],\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - Basic vnet\nconst exampleVnet1 = new proxmoxve.sdn.Vnet(\"example_vnet_1\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - VNet with alias and port isolation\nconst exampleVnet2 = new proxmoxve.sdn.Vnet(\"example_vnet_2\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Example VNet 2\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// Basic Subnet\nconst basicSubnet = new proxmoxve.sdn.Subnet(\"basic_subnet\", {\n cidr: \"192.168.1.0/24\",\n vnet: exampleVnet1.vnetId,\n gateway: \"192.168.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// Subnet with DHCP Configuration\nconst dhcpSubnet = new proxmoxve.sdn.Subnet(\"dhcp_subnet\", {\n cidr: \"192.168.2.0/24\",\n vnet: exampleVnet2.vnetId,\n gateway: \"192.168.2.1\",\n dhcpDnsServer: \"192.168.2.53\",\n dnsZonePrefix: \"internal.example.com\",\n snat: true,\n dhcpRange: {\n startAddress: \"192.168.2.10\",\n endAddress: \"192.168.2.100\",\n },\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst subnetApplier = new proxmoxve.sdn.Applier(\"subnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n nodes=[\"pve\"],\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - Basic vnet\nexample_vnet1 = proxmoxve.sdn.Vnet(\"example_vnet_1\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - VNet with alias and port isolation\nexample_vnet2 = proxmoxve.sdn.Vnet(\"example_vnet_2\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Example VNet 2\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic Subnet\nbasic_subnet = proxmoxve.sdn.Subnet(\"basic_subnet\",\n cidr=\"192.168.1.0/24\",\n vnet=example_vnet1.vnet_id,\n gateway=\"192.168.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Subnet with DHCP Configuration\ndhcp_subnet = proxmoxve.sdn.Subnet(\"dhcp_subnet\",\n cidr=\"192.168.2.0/24\",\n vnet=example_vnet2.vnet_id,\n gateway=\"192.168.2.1\",\n dhcp_dns_server=\"192.168.2.53\",\n dns_zone_prefix=\"internal.example.com\",\n snat=True,\n dhcp_range={\n \"start_address\": \"192.168.2.10\",\n \"end_address\": \"192.168.2.100\",\n },\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nsubnet_applier = proxmoxve.sdn.Applier(\"subnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n example_vnet1,\n example_vnet2,\n basic_subnet,\n dhcp_subnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_1\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_2\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Example VNet 2\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic Subnet\n var basicSubnet = new ProxmoxVE.Sdn.Subnet(\"basic_subnet\", new()\n {\n Cidr = \"192.168.1.0/24\",\n Vnet = exampleVnet1.VnetId,\n Gateway = \"192.168.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new ProxmoxVE.Sdn.Subnet(\"dhcp_subnet\", new()\n {\n Cidr = \"192.168.2.0/24\",\n Vnet = exampleVnet2.VnetId,\n Gateway = \"192.168.2.1\",\n DhcpDnsServer = \"192.168.2.53\",\n DnsZonePrefix = \"internal.example.com\",\n Snat = true,\n DhcpRange = new ProxmoxVE.Sdn.Inputs.SubnetDhcpRangeArgs\n {\n StartAddress = \"192.168.2.10\",\n EndAddress = \"192.168.2.100\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var subnetApplier = new ProxmoxVE.Sdn.Applier(\"subnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - Basic vnet\n\t\texampleVnet1, err := sdn.NewVnet(ctx, \"example_vnet_1\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - VNet with alias and port isolation\n\t\texampleVnet2, err := sdn.NewVnet(ctx, \"example_vnet_2\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Example VNet 2\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic Subnet\n\t\tbasicSubnet, err := sdn.NewSubnet(ctx, \"basic_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.1.0/24\"),\n\t\t\tVnet: exampleVnet1.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Subnet with DHCP Configuration\n\t\tdhcpSubnet, err := sdn.NewSubnet(ctx, \"dhcp_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.2.0/24\"),\n\t\t\tVnet: exampleVnet2.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.2.1\"),\n\t\t\tDhcpDnsServer: pulumi.String(\"192.168.2.53\"),\n\t\t\tDnsZonePrefix: pulumi.String(\"internal.example.com\"),\n\t\t\tSnat: pulumi.Bool(true),\n\t\t\tDhcpRange: \u0026sdn.SubnetDhcpRangeArgs{\n\t\t\t\tStartAddress: pulumi.String(\"192.168.2.10\"),\n\t\t\t\tEndAddress: pulumi.String(\"192.168.2.100\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"subnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\texampleVnet1,\n\t\t\texampleVnet2,\n\t\t\tbasicSubnet,\n\t\t\tdhcpSubnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Subnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.SubnetArgs;\nimport com.pulumi.proxmoxve.Sdn.inputs.SubnetDhcpRangeArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .nodes(\"pve\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new Vnet(\"exampleVnet1\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new Vnet(\"exampleVnet2\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Example VNet 2\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic Subnet\n var basicSubnet = new Subnet(\"basicSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.1.0/24\")\n .vnet(exampleVnet1.vnetId())\n .gateway(\"192.168.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new Subnet(\"dhcpSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.2.0/24\")\n .vnet(exampleVnet2.vnetId())\n .gateway(\"192.168.2.1\")\n .dhcpDnsServer(\"192.168.2.53\")\n .dnsZonePrefix(\"internal.example.com\")\n .snat(true)\n .dhcpRange(SubnetDhcpRangeArgs.builder()\n .startAddress(\"192.168.2.10\")\n .endAddress(\"192.168.2.100\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var subnetApplier = new Applier(\"subnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n nodes:\n - pve\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - Basic vnet\n exampleVnet1:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_1\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - VNet with alias and port isolation\n exampleVnet2:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_2\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Example VNet 2\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # Basic Subnet\n basicSubnet:\n type: proxmoxve:Sdn:Subnet\n name: basic_subnet\n properties:\n cidr: 192.168.1.0/24\n vnet: ${exampleVnet1.vnetId}\n gateway: 192.168.1.1\n options:\n dependsOn:\n - ${finalizer}\n # Subnet with DHCP Configuration\n dhcpSubnet:\n type: proxmoxve:Sdn:Subnet\n name: dhcp_subnet\n properties:\n cidr: 192.168.2.0/24\n vnet: ${exampleVnet2.vnetId}\n gateway: 192.168.2.1\n dhcpDnsServer: 192.168.2.53\n dnsZonePrefix: internal.example.com\n snat: true\n dhcpRange:\n startAddress: 192.168.2.10\n endAddress: 192.168.2.100\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n subnetApplier:\n type: proxmoxve:Sdn:Applier\n name: subnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${exampleVnet1}\n - ${exampleVnet2}\n - ${basicSubnet}\n - ${dhcpSubnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN subnet can be imported using its unique identifier in the format: \u003cvnet\u003e/\u003csubnet-id\u003e\n\nThe \u003csubnet-id\u003e is the canonical ID from Proxmox, e.g., \"zone1-192.168.1.0-24\"\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet basic_subnet vnet1/zone1-192.168.1.0-24\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet dhcp_subnet vnet2/zone2-192.168.2.0-24\n```\n\n","properties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpDnsServer":{"type":"string","description":"The DNS server used for DHCP.\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"type":"string","description":"Prefix used for DNS zone delegation.\n"},"gateway":{"type":"string","description":"The gateway address for the subnet.\n"},"snat":{"type":"boolean","description":"Whether SNAT is enabled for the subnet.\n"},"vnet":{"type":"string","description":"The VNet to which this subnet belongs.\n"}},"required":["cidr","vnet"],"inputProperties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpDnsServer":{"type":"string","description":"The DNS server used for DHCP.\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"type":"string","description":"Prefix used for DNS zone delegation.\n"},"gateway":{"type":"string","description":"The gateway address for the subnet.\n"},"snat":{"type":"boolean","description":"Whether SNAT is enabled for the subnet.\n"},"vnet":{"type":"string","description":"The VNet to which this subnet belongs.\n"}},"requiredInputs":["cidr","vnet"],"stateInputs":{"description":"Input properties used for looking up and filtering Subnet resources.\n","properties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpDnsServer":{"type":"string","description":"The DNS server used for DHCP.\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"type":"string","description":"Prefix used for DNS zone delegation.\n"},"gateway":{"type":"string","description":"The gateway address for the subnet.\n"},"snat":{"type":"boolean","description":"Whether SNAT is enabled for the subnet.\n"},"vnet":{"type":"string","description":"The VNet to which this subnet belongs.\n"}},"type":"object"}},"proxmoxve:Sdn/vnet:Vnet":{"description":"Manages Proxmox VE SDN VNet.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// Basic VNet (Simple)\nconst basicVnet = new proxmoxve.sdn.Vnet(\"basic_vnet\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// VNet with Alias and Port Isolation\nconst isolatedVnet = new proxmoxve.sdn.Vnet(\"isolated_vnet\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Isolated VNet\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst vnetApplier = new proxmoxve.sdn.Applier(\"vnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic VNet (Simple)\nbasic_vnet = proxmoxve.sdn.Vnet(\"basic_vnet\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# VNet with Alias and Port Isolation\nisolated_vnet = proxmoxve.sdn.Vnet(\"isolated_vnet\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Isolated VNet\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nvnet_applier = proxmoxve.sdn.Applier(\"vnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n basic_vnet,\n isolated_vnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic VNet (Simple)\n var basicVnet = new ProxmoxVE.Sdn.Vnet(\"basic_vnet\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new ProxmoxVE.Sdn.Vnet(\"isolated_vnet\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Isolated VNet\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var vnetApplier = new ProxmoxVE.Sdn.Applier(\"vnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic VNet (Simple)\n\t\tbasicVnet, err := sdn.NewVnet(ctx, \"basic_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// VNet with Alias and Port Isolation\n\t\tisolatedVnet, err := sdn.NewVnet(ctx, \"isolated_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Isolated VNet\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"vnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\tbasicVnet,\n\t\t\tisolatedVnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic VNet (Simple)\n var basicVnet = new Vnet(\"basicVnet\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new Vnet(\"isolatedVnet\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Isolated VNet\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var vnetApplier = new Applier(\"vnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # Basic VNet (Simple)\n basicVnet:\n type: proxmoxve:Sdn:Vnet\n name: basic_vnet\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # VNet with Alias and Port Isolation\n isolatedVnet:\n type: proxmoxve:Sdn:Vnet\n name: isolated_vnet\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Isolated VNet\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n vnetApplier:\n type: proxmoxve:Sdn:Applier\n name: vnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${basicVnet}\n - ${isolatedVnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN vnet can be imported using its unique identifier (vnet ID)\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet basic_vnet vnet1\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet isolated_vnet vnet2\n```\n\n","properties":{"alias":{"type":"string","description":"An optional alias for this VNet.\n"},"isolatePorts":{"type":"boolean","description":"Isolate ports within this VNet.\n"},"tag":{"type":"integer","description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n"},"vlanAware":{"type":"boolean","description":"Allow VM VLANs to pass through this VNet.\n"},"vnetId":{"type":"string","description":"The unique identifier of the SDN VNet.\n"},"zone":{"type":"string","description":"The zone to which this VNet belongs.\n"}},"required":["vnetId","zone"],"inputProperties":{"alias":{"type":"string","description":"An optional alias for this VNet.\n"},"isolatePorts":{"type":"boolean","description":"Isolate ports within this VNet.\n"},"tag":{"type":"integer","description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n"},"vlanAware":{"type":"boolean","description":"Allow VM VLANs to pass through this VNet.\n"},"vnetId":{"type":"string","description":"The unique identifier of the SDN VNet.\n"},"zone":{"type":"string","description":"The zone to which this VNet belongs.\n"}},"requiredInputs":["vnetId","zone"],"stateInputs":{"description":"Input properties used for looking up and filtering Vnet resources.\n","properties":{"alias":{"type":"string","description":"An optional alias for this VNet.\n"},"isolatePorts":{"type":"boolean","description":"Isolate ports within this VNet.\n"},"tag":{"type":"integer","description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n"},"vlanAware":{"type":"boolean","description":"Allow VM VLANs to pass through this VNet.\n"},"vnetId":{"type":"string","description":"The unique identifier of the SDN VNet.\n"},"zone":{"type":"string","description":"The zone to which this VNet belongs.\n"}},"type":"object"}},"proxmoxve:Storage/cIFS:CIFS":{"description":"Manages an SMB/CIFS based storage server in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.CIFS(\"example\", {\n cifsId: \"example-cifs\",\n nodes: [\"pve\"],\n server: \"10.0.0.20\",\n share: \"proxmox\",\n username: \"cifs-user\",\n password: \"cifs-password\",\n contents: [\"images\"],\n domain: \"WORKGROUP\",\n subdirectory: \"terraform\",\n preallocation: \"metadata\",\n snapshotAsVolumeChain: true,\n backups: {\n maxProtectedBackups: 5,\n keepDaily: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.CIFS(\"example\",\n cifs_id=\"example-cifs\",\n nodes=[\"pve\"],\n server=\"10.0.0.20\",\n share=\"proxmox\",\n username=\"cifs-user\",\n password=\"cifs-password\",\n contents=[\"images\"],\n domain=\"WORKGROUP\",\n subdirectory=\"terraform\",\n preallocation=\"metadata\",\n snapshot_as_volume_chain=True,\n backups={\n \"max_protected_backups\": 5,\n \"keep_daily\": 7,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.CIFS(\"example\", new()\n {\n CifsId = \"example-cifs\",\n Nodes = new[]\n {\n \"pve\",\n },\n Server = \"10.0.0.20\",\n Share = \"proxmox\",\n Username = \"cifs-user\",\n Password = \"cifs-password\",\n Contents = new[]\n {\n \"images\",\n },\n Domain = \"WORKGROUP\",\n Subdirectory = \"terraform\",\n Preallocation = \"metadata\",\n SnapshotAsVolumeChain = true,\n Backups = new ProxmoxVE.Storage.Inputs.CIFSBackupsArgs\n {\n MaxProtectedBackups = 5,\n KeepDaily = 7,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewCIFS(ctx, \"example\", \u0026storage.CIFSArgs{\n\t\t\tCifsId: pulumi.String(\"example-cifs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tServer: pulumi.String(\"10.0.0.20\"),\n\t\t\tShare: pulumi.String(\"proxmox\"),\n\t\t\tUsername: pulumi.String(\"cifs-user\"),\n\t\t\tPassword: pulumi.String(\"cifs-password\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tDomain: pulumi.String(\"WORKGROUP\"),\n\t\t\tSubdirectory: pulumi.String(\"terraform\"),\n\t\t\tPreallocation: pulumi.String(\"metadata\"),\n\t\t\tSnapshotAsVolumeChain: pulumi.Bool(true),\n\t\t\tBackups: \u0026storage.CIFSBackupsArgs{\n\t\t\t\tMaxProtectedBackups: pulumi.Int(5),\n\t\t\t\tKeepDaily: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.CIFS;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.CIFSArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.CIFSBackupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new CIFS(\"example\", CIFSArgs.builder()\n .cifsId(\"example-cifs\")\n .nodes(\"pve\")\n .server(\"10.0.0.20\")\n .share(\"proxmox\")\n .username(\"cifs-user\")\n .password(\"cifs-password\")\n .contents(\"images\")\n .domain(\"WORKGROUP\")\n .subdirectory(\"terraform\")\n .preallocation(\"metadata\")\n .snapshotAsVolumeChain(true)\n .backups(CIFSBackupsArgs.builder()\n .maxProtectedBackups(5)\n .keepDaily(7)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:CIFS\n properties:\n cifsId: example-cifs\n nodes:\n - pve\n server: 10.0.0.20\n share: proxmox\n username: cifs-user\n password: cifs-password\n contents:\n - images\n domain: WORKGROUP\n subdirectory: terraform\n preallocation: metadata\n snapshotAsVolumeChain: true\n backups:\n maxProtectedBackups: 5\n keepDaily: 7\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/CIFSBackups:CIFSBackups","description":"Configure backup retention settings for the storage type.\n"},"cifsId":{"type":"string","description":"The unique identifier of the storage.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"domain":{"type":"string","description":"The SMB/CIFS domain.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"password":{"type":"string","description":"The password for authenticating with the SMB/CIFS server.\n","secret":true},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"server":{"type":"string","description":"The IP address or DNS name of the SMB/CIFS server.\n"},"share":{"type":"string","description":"The name of the SMB/CIFS share.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"snapshotAsVolumeChain":{"type":"boolean","description":"Enable support for creating snapshots through volume backing-chains.\n"},"subdirectory":{"type":"string","description":"A subdirectory to mount within the share.\n"},"username":{"type":"string","description":"The username for authenticating with the SMB/CIFS server.\n"}},"required":["contents","disable","cifsId","nodes","password","server","share","shared","username"],"inputProperties":{"backups":{"$ref":"#/types/proxmoxve:Storage/CIFSBackups:CIFSBackups","description":"Configure backup retention settings for the storage type.\n"},"cifsId":{"type":"string","description":"The unique identifier of the storage.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"domain":{"type":"string","description":"The SMB/CIFS domain.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"password":{"type":"string","description":"The password for authenticating with the SMB/CIFS server.\n","secret":true},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"server":{"type":"string","description":"The IP address or DNS name of the SMB/CIFS server.\n"},"share":{"type":"string","description":"The name of the SMB/CIFS share.\n"},"snapshotAsVolumeChain":{"type":"boolean","description":"Enable support for creating snapshots through volume backing-chains.\n"},"subdirectory":{"type":"string","description":"A subdirectory to mount within the share.\n"},"username":{"type":"string","description":"The username for authenticating with the SMB/CIFS server.\n"}},"requiredInputs":["cifsId","password","server","share","username"],"stateInputs":{"description":"Input properties used for looking up and filtering CIFS resources.\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/CIFSBackups:CIFSBackups","description":"Configure backup retention settings for the storage type.\n"},"cifsId":{"type":"string","description":"The unique identifier of the storage.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"domain":{"type":"string","description":"The SMB/CIFS domain.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"password":{"type":"string","description":"The password for authenticating with the SMB/CIFS server.\n","secret":true},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"server":{"type":"string","description":"The IP address or DNS name of the SMB/CIFS server.\n"},"share":{"type":"string","description":"The name of the SMB/CIFS share.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"snapshotAsVolumeChain":{"type":"boolean","description":"Enable support for creating snapshots through volume backing-chains.\n"},"subdirectory":{"type":"string","description":"A subdirectory to mount within the share.\n"},"username":{"type":"string","description":"The username for authenticating with the SMB/CIFS server.\n"}},"type":"object"}},"proxmoxve:Storage/directory:Directory":{"description":"Manages directory-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.Directory(\"example\", {\n directoryId: \"example-dir\",\n path: \"/var/lib/vz\",\n nodes: [\"pve\"],\n contents: [\"images\"],\n shared: true,\n disable: false,\n backups: {\n maxProtectedBackups: 5,\n keepDaily: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.Directory(\"example\",\n directory_id=\"example-dir\",\n path=\"/var/lib/vz\",\n nodes=[\"pve\"],\n contents=[\"images\"],\n shared=True,\n disable=False,\n backups={\n \"max_protected_backups\": 5,\n \"keep_daily\": 7,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.Directory(\"example\", new()\n {\n DirectoryId = \"example-dir\",\n Path = \"/var/lib/vz\",\n Nodes = new[]\n {\n \"pve\",\n },\n Contents = new[]\n {\n \"images\",\n },\n Shared = true,\n Disable = false,\n Backups = new ProxmoxVE.Storage.Inputs.DirectoryBackupsArgs\n {\n MaxProtectedBackups = 5,\n KeepDaily = 7,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewDirectory(ctx, \"example\", \u0026storage.DirectoryArgs{\n\t\t\tDirectoryId: pulumi.String(\"example-dir\"),\n\t\t\tPath: pulumi.String(\"/var/lib/vz\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tShared: pulumi.Bool(true),\n\t\t\tDisable: pulumi.Bool(false),\n\t\t\tBackups: \u0026storage.DirectoryBackupsArgs{\n\t\t\t\tMaxProtectedBackups: pulumi.Int(5),\n\t\t\t\tKeepDaily: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.Directory;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.DirectoryArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.DirectoryBackupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Directory(\"example\", DirectoryArgs.builder()\n .directoryId(\"example-dir\")\n .path(\"/var/lib/vz\")\n .nodes(\"pve\")\n .contents(\"images\")\n .shared(true)\n .disable(false)\n .backups(DirectoryBackupsArgs.builder()\n .maxProtectedBackups(5)\n .keepDaily(7)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:Directory\n properties:\n directoryId: example-dir\n path: /var/lib/vz\n nodes:\n - pve\n contents:\n - images\n shared: true\n disable: false\n backups:\n maxProtectedBackups: 5\n keepDaily: 7\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/DirectoryBackups:DirectoryBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"directoryId":{"type":"string","description":"The unique identifier of the storage.\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"path":{"type":"string","description":"The path to the directory on the Proxmox node.\n"},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"}},"required":["contents","disable","directoryId","nodes","path","shared"],"inputProperties":{"backups":{"$ref":"#/types/proxmoxve:Storage/DirectoryBackups:DirectoryBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"directoryId":{"type":"string","description":"The unique identifier of the storage.\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"path":{"type":"string","description":"The path to the directory on the Proxmox node.\n"},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"}},"requiredInputs":["directoryId","path"],"stateInputs":{"description":"Input properties used for looking up and filtering Directory resources.\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/DirectoryBackups:DirectoryBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"directoryId":{"type":"string","description":"The unique identifier of the storage.\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"path":{"type":"string","description":"The path to the directory on the Proxmox node.\n"},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"}},"type":"object"}},"proxmoxve:Storage/file:File":{"description":"Use this resource to upload files to a Proxmox VE node. The file can be a backup, an ISO image, a Disk Image, a snippet, or a container template depending on the \u003cspan pulumi-lang-nodejs=\"`contentType`\" pulumi-lang-dotnet=\"`ContentType`\" pulumi-lang-go=\"`contentType`\" pulumi-lang-python=\"`content_type`\" pulumi-lang-yaml=\"`contentType`\" pulumi-lang-java=\"`contentType`\"\u003e`content_type`\u003c/span\u003e attribute.\n\n## Example Usage\n\n### Backups (\u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e)\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003e The provider currently does not support restoring backups. You can use the Proxmox VE web interface or the \u003cspan pulumi-lang-nodejs=\"`qmrestore`\" pulumi-lang-dotnet=\"`Qmrestore`\" pulumi-lang-go=\"`qmrestore`\" pulumi-lang-python=\"`qmrestore`\" pulumi-lang-yaml=\"`qmrestore`\" pulumi-lang-java=\"`qmrestore`\"\u003e`qmrestore`\u003c/span\u003e / `pct restore` command to restore VM / Container from a backup.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst backup = new proxmoxve.storage.File(\"backup\", {\n contentType: \"backup\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nbackup = proxmoxve.storage.File(\"backup\",\n content_type=\"backup\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup = new ProxmoxVE.Storage.File(\"backup\", new()\n {\n ContentType = \"backup\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"backup\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"backup\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var backup = new File(\"backup\", FileArgs.builder()\n .contentType(\"backup\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup:\n type: proxmoxve:Storage:File\n properties:\n contentType: backup\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Images\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003e Importing Disks is not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource with \u003cspan pulumi-lang-nodejs=\"`contentType \" pulumi-lang-dotnet=\"`ContentType \" pulumi-lang-go=\"`contentType \" pulumi-lang-python=\"`content_type \" pulumi-lang-yaml=\"`contentType \" pulumi-lang-java=\"`contentType \"\u003e`content_type \u003c/span\u003e= \"import\"`.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"import\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"import\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: import\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Snippets\n\n\u003e Snippets are not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource.\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as std from \"@pulumi/std\";\n\nconst cloudConfig = new proxmoxve.storage.File(\"cloud_config\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceRaw: {\n data: std.trimspace({\n input: example.publicKeyOpenssh,\n }).then(invoke =\u003e `#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - ${invoke.result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n`),\n fileName: \"example.cloud-config.yaml\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_std as std\n\ncloud_config = proxmoxve.storage.File(\"cloud_config\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_raw={\n \"data\": f\"\"\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {std.trimspace(input=example[\"publicKeyOpenssh\"]).result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"\"\",\n \"file_name\": \"example.cloud-config.yaml\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudConfig = new ProxmoxVE.Storage.File(\"cloud_config\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = Std.Trimspace.Invoke(new()\n {\n Input = example.PublicKeyOpenssh,\n }).Apply(invoke =\u003e @$\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {invoke.Result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"),\n FileName = \"example.cloud-config.yaml\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinvokeTrimspace, err := std.Trimspace(ctx, \u0026std.TrimspaceArgs{\n\t\t\tInput: example.PublicKeyOpenssh,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewFile(ctx, \"cloud_config\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.Sprintf(`#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %v\n sudo: ALL=(ALL) NOPASSWD:ALL\n`, invokeTrimspace.Result),\n\t\t\t\tFileName: pulumi.String(\"example.cloud-config.yaml\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudConfig = new File(\"cloudConfig\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %s\n sudo: ALL=(ALL) NOPASSWD:ALL\n\", StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(example.publicKeyOpenssh())\n .build()).result()))\n .fileName(\"example.cloud-config.yaml\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudConfig:\n type: proxmoxve:Storage:File\n name: cloud_config\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n sourceRaw:\n data:\n fn::join:\n - \"\"\n - - \"#cloud-config\\nchpasswd:\\n list: |\\n ubuntu:example\\n expire: false\\nhostname: example-hostname\\npackages:\\n - qemu-guest-agent\\nusers:\\n - default\\n - name: ubuntu\\n groups: sudo\\n shell: /bin/bash\\n ssh-authorized-keys:\\n - \"\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${example.publicKeyOpenssh}\n return: result\n - |2\n sudo: ALL=(ALL) NOPASSWD:ALL\n fileName: example.cloud-config.yaml\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nThe \u003cspan pulumi-lang-nodejs=\"`fileMode`\" pulumi-lang-dotnet=\"`FileMode`\" pulumi-lang-go=\"`fileMode`\" pulumi-lang-python=\"`file_mode`\" pulumi-lang-yaml=\"`fileMode`\" pulumi-lang-java=\"`fileMode`\"\u003e`file_mode`\u003c/span\u003e attribute can be used to make a script file executable, e.g. when referencing the file in the \u003cspan pulumi-lang-nodejs=\"`hookScriptFileId`\" pulumi-lang-dotnet=\"`HookScriptFileId`\" pulumi-lang-go=\"`hookScriptFileId`\" pulumi-lang-python=\"`hook_script_file_id`\" pulumi-lang-yaml=\"`hookScriptFileId`\" pulumi-lang-java=\"`hookScriptFileId`\"\u003e`hook_script_file_id`\u003c/span\u003e attribute of a container or a VM resource which is a requirement enforced by the Proxmox VE API.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst hookScript = new proxmoxve.storage.File(\"hook_script\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n fileMode: \"0700\",\n sourceRaw: {\n data: `#!/usr/bin/env bash\n\necho \\\\\"Running hook script\\\\\"\n`,\n fileName: \"prepare-hook.sh\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nhook_script = proxmoxve.storage.File(\"hook_script\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n file_mode=\"0700\",\n source_raw={\n \"data\": \"\"\"#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n\"\"\",\n \"file_name\": \"prepare-hook.sh\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hookScript = new ProxmoxVE.Storage.File(\"hook_script\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n FileMode = \"0700\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = @\"#!/usr/bin/env bash\n\necho \\\"\"Running hook script\\\"\"\n\",\n FileName = \"prepare-hook.sh\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"hook_script\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tFileMode: pulumi.String(\"0700\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.String(\"#!/usr/bin/env bash\\n\\necho \\\\\\\"Running hook script\\\\\\\"\\n\"),\n\t\t\t\tFileName: pulumi.String(\"prepare-hook.sh\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hookScript = new File(\"hookScript\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .fileMode(\"0700\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n \"\"\")\n .fileName(\"prepare-hook.sh\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hookScript:\n type: proxmoxve:Storage:File\n name: hook_script\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n fileMode: '0700'\n sourceRaw:\n data: |\n #!/usr/bin/env bash\n\n echo \\\"Running hook script\\\"\n fileName: prepare-hook.sh\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Container Template (\u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e)\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for container images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n sourceFile: {\n path: \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n source_file={\n \"path\": \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n sourceFile:\n path: http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nThe Proxmox VE API endpoint for file uploads does not support chunked transfer\nencoding, which means that we must first store the source file as a temporary\nfile locally before uploading it.\n\nYou must ensure that you have at least `Size-in-MB * 2 + 1` MB of storage space\navailable (twice the size plus overhead because a multipart payload needs to be\ncreated as another temporary file).\n\nBy default, if the specified file already exists, the resource will\nunconditionally replace it and take ownership of the resource. On destruction,\nthe file will be deleted as if it did not exist before. If you want to prevent\nthe resource from replacing the file, set \u003cspan pulumi-lang-nodejs=\"`overwrite`\" pulumi-lang-dotnet=\"`Overwrite`\" pulumi-lang-go=\"`overwrite`\" pulumi-lang-python=\"`overwrite`\" pulumi-lang-yaml=\"`overwrite`\" pulumi-lang-java=\"`overwrite`\"\u003e`overwrite`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n\n## Import\n\nInstances can be imported using the `node_name`, `datastore_id`, `content_type`\n\nand the `file_name` in the following format:\n\ntext\n\nnode_name:datastore_id/content_type/file_name\n\nExample:\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Storage/file:File cloud_config pve/local:snippets/example.cloud-config.yaml\n```\n\n","properties":{"contentType":{"type":"string","description":"The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n"},"datastoreId":{"type":"string","description":"The datastore id.\n"},"fileMode":{"type":"string","description":"The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n"},"fileModificationDate":{"type":"string","description":"The file modification date (RFC 3339).\n"},"fileName":{"type":"string","description":"The file name.\n"},"fileSize":{"type":"integer","description":"The file size in bytes.\n"},"fileTag":{"type":"string","description":"The file tag.\n"},"nodeName":{"type":"string","description":"The node name.\n"},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"sourceFile":{"$ref":"#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile","description":"The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n"},"sourceRaw":{"$ref":"#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw","description":"The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n"},"timeoutUpload":{"type":"integer","description":"Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n"}},"required":["contentType","datastoreId","fileModificationDate","fileName","fileSize","fileTag","nodeName"],"inputProperties":{"contentType":{"type":"string","description":"The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n","willReplaceOnChanges":true},"datastoreId":{"type":"string","description":"The datastore id.\n","willReplaceOnChanges":true},"fileMode":{"type":"string","description":"The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"sourceFile":{"$ref":"#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile","description":"The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n","willReplaceOnChanges":true},"sourceRaw":{"$ref":"#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw","description":"The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutUpload":{"type":"integer","description":"Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n"}},"requiredInputs":["datastoreId","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering File resources.\n","properties":{"contentType":{"type":"string","description":"The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n","willReplaceOnChanges":true},"datastoreId":{"type":"string","description":"The datastore id.\n","willReplaceOnChanges":true},"fileMode":{"type":"string","description":"The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n","willReplaceOnChanges":true},"fileModificationDate":{"type":"string","description":"The file modification date (RFC 3339).\n","willReplaceOnChanges":true},"fileName":{"type":"string","description":"The file name.\n"},"fileSize":{"type":"integer","description":"The file size in bytes.\n","willReplaceOnChanges":true},"fileTag":{"type":"string","description":"The file tag.\n","willReplaceOnChanges":true},"nodeName":{"type":"string","description":"The node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"sourceFile":{"$ref":"#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile","description":"The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n","willReplaceOnChanges":true},"sourceRaw":{"$ref":"#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw","description":"The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutUpload":{"type":"integer","description":"Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n"}},"type":"object"}},"proxmoxve:Storage/lVM:LVM":{"description":"Manages LVM-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.LVM(\"example\", {\n lvmId: \"example-lvm\",\n nodes: [\"pve\"],\n volumeGroup: \"vg0\",\n contents: [\"images\"],\n wipeRemovedVolumes: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.LVM(\"example\",\n lvm_id=\"example-lvm\",\n nodes=[\"pve\"],\n volume_group=\"vg0\",\n contents=[\"images\"],\n wipe_removed_volumes=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.LVM(\"example\", new()\n {\n LvmId = \"example-lvm\",\n Nodes = new[]\n {\n \"pve\",\n },\n VolumeGroup = \"vg0\",\n Contents = new[]\n {\n \"images\",\n },\n WipeRemovedVolumes = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewLVM(ctx, \"example\", \u0026storage.LVMArgs{\n\t\t\tLvmId: pulumi.String(\"example-lvm\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tVolumeGroup: pulumi.String(\"vg0\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tWipeRemovedVolumes: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVM;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVMArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new LVM(\"example\", LVMArgs.builder()\n .lvmId(\"example-lvm\")\n .nodes(\"pve\")\n .volumeGroup(\"vg0\")\n .contents(\"images\")\n .wipeRemovedVolumes(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:LVM\n properties:\n lvmId: example-lvm\n nodes:\n - pve\n volumeGroup: vg0\n contents:\n - images\n wipeRemovedVolumes: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"lvmId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"volumeGroup":{"type":"string","description":"The name of the volume group to use.\n"},"wipeRemovedVolumes":{"type":"boolean","description":"Whether to zero-out data when removing LVMs.\n"}},"required":["contents","disable","lvmId","nodes","shared","volumeGroup","wipeRemovedVolumes"],"inputProperties":{"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"lvmId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"volumeGroup":{"type":"string","description":"The name of the volume group to use.\n"},"wipeRemovedVolumes":{"type":"boolean","description":"Whether to zero-out data when removing LVMs.\n"}},"requiredInputs":["lvmId","volumeGroup"],"stateInputs":{"description":"Input properties used for looking up and filtering LVM resources.\n","properties":{"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"lvmId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"volumeGroup":{"type":"string","description":"The name of the volume group to use.\n"},"wipeRemovedVolumes":{"type":"boolean","description":"Whether to zero-out data when removing LVMs.\n"}},"type":"object"}},"proxmoxve:Storage/lVMThin:LVMThin":{"description":"Manages thin LVM-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.LVMThin(\"example\", {\n lvmThinId: \"example-lvmthin\",\n nodes: [\"pve\"],\n volumeGroup: \"vg0\",\n thinPool: \"data\",\n contents: [\"images\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.LVMThin(\"example\",\n lvm_thin_id=\"example-lvmthin\",\n nodes=[\"pve\"],\n volume_group=\"vg0\",\n thin_pool=\"data\",\n contents=[\"images\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.LVMThin(\"example\", new()\n {\n LvmThinId = \"example-lvmthin\",\n Nodes = new[]\n {\n \"pve\",\n },\n VolumeGroup = \"vg0\",\n ThinPool = \"data\",\n Contents = new[]\n {\n \"images\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewLVMThin(ctx, \"example\", \u0026storage.LVMThinArgs{\n\t\t\tLvmThinId: pulumi.String(\"example-lvmthin\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tVolumeGroup: pulumi.String(\"vg0\"),\n\t\t\tThinPool: pulumi.String(\"data\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVMThin;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVMThinArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new LVMThin(\"example\", LVMThinArgs.builder()\n .lvmThinId(\"example-lvmthin\")\n .nodes(\"pve\")\n .volumeGroup(\"vg0\")\n .thinPool(\"data\")\n .contents(\"images\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:LVMThin\n properties:\n lvmThinId: example-lvmthin\n nodes:\n - pve\n volumeGroup: vg0\n thinPool: data\n contents:\n - images\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"lvmThinId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"thinPool":{"type":"string","description":"The name of the LVM thin pool to use.\n"},"volumeGroup":{"type":"string","description":"The name of the volume group to use.\n"}},"required":["contents","disable","lvmThinId","nodes","shared","thinPool","volumeGroup"],"inputProperties":{"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"lvmThinId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"thinPool":{"type":"string","description":"The name of the LVM thin pool to use.\n"},"volumeGroup":{"type":"string","description":"The name of the volume group to use.\n"}},"requiredInputs":["lvmThinId","thinPool","volumeGroup"],"stateInputs":{"description":"Input properties used for looking up and filtering LVMThin resources.\n","properties":{"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"lvmThinId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"thinPool":{"type":"string","description":"The name of the LVM thin pool to use.\n"},"volumeGroup":{"type":"string","description":"The name of the volume group to use.\n"}},"type":"object"}},"proxmoxve:Storage/nFS:NFS":{"description":"Manages an NFS-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.NFS(\"example\", {\n nfsId: \"example-nfs\",\n nodes: [\"pve\"],\n server: \"10.0.0.10\",\n \"export\": \"/exports/proxmox\",\n contents: [\n \"images\",\n \"iso\",\n \"backup\",\n ],\n options: \"vers=4.2\",\n preallocation: \"metadata\",\n snapshotAsVolumeChain: true,\n backups: {\n maxProtectedBackups: 5,\n keepDaily: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.NFS(\"example\",\n nfs_id=\"example-nfs\",\n nodes=[\"pve\"],\n server=\"10.0.0.10\",\n export=\"/exports/proxmox\",\n contents=[\n \"images\",\n \"iso\",\n \"backup\",\n ],\n options=\"vers=4.2\",\n preallocation=\"metadata\",\n snapshot_as_volume_chain=True,\n backups={\n \"max_protected_backups\": 5,\n \"keep_daily\": 7,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.NFS(\"example\", new()\n {\n NfsId = \"example-nfs\",\n Nodes = new[]\n {\n \"pve\",\n },\n Server = \"10.0.0.10\",\n Export = \"/exports/proxmox\",\n Contents = new[]\n {\n \"images\",\n \"iso\",\n \"backup\",\n },\n Options = \"vers=4.2\",\n Preallocation = \"metadata\",\n SnapshotAsVolumeChain = true,\n Backups = new ProxmoxVE.Storage.Inputs.NFSBackupsArgs\n {\n MaxProtectedBackups = 5,\n KeepDaily = 7,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewNFS(ctx, \"example\", \u0026storage.NFSArgs{\n\t\t\tNfsId: pulumi.String(\"example-nfs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tServer: pulumi.String(\"10.0.0.10\"),\n\t\t\tExport: pulumi.String(\"/exports/proxmox\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t\tpulumi.String(\"iso\"),\n\t\t\t\tpulumi.String(\"backup\"),\n\t\t\t},\n\t\t\tOptions: pulumi.String(\"vers=4.2\"),\n\t\t\tPreallocation: pulumi.String(\"metadata\"),\n\t\t\tSnapshotAsVolumeChain: pulumi.Bool(true),\n\t\t\tBackups: \u0026storage.NFSBackupsArgs{\n\t\t\t\tMaxProtectedBackups: pulumi.Int(5),\n\t\t\t\tKeepDaily: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.NFS;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.NFSArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.NFSBackupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new NFS(\"example\", NFSArgs.builder()\n .nfsId(\"example-nfs\")\n .nodes(\"pve\")\n .server(\"10.0.0.10\")\n .export(\"/exports/proxmox\")\n .contents( \n \"images\",\n \"iso\",\n \"backup\")\n .options(\"vers=4.2\")\n .preallocation(\"metadata\")\n .snapshotAsVolumeChain(true)\n .backups(NFSBackupsArgs.builder()\n .maxProtectedBackups(5)\n .keepDaily(7)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:NFS\n properties:\n nfsId: example-nfs\n nodes:\n - pve\n server: 10.0.0.10\n export: /exports/proxmox\n contents:\n - images\n - iso\n - backup\n options: vers=4.2\n preallocation: metadata\n snapshotAsVolumeChain: true\n backups:\n maxProtectedBackups: 5\n keepDaily: 7\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/NFSBackups:NFSBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"export":{"type":"string","description":"The path of the NFS export.\n"},"nfsId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"options":{"type":"string","description":"The options to pass to the NFS service.\n"},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"server":{"type":"string","description":"The IP address or DNS name of the NFS server.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"snapshotAsVolumeChain":{"type":"boolean","description":"Enable support for creating snapshots through volume backing-chains.\n"}},"required":["contents","disable","export","nfsId","nodes","server","shared"],"inputProperties":{"backups":{"$ref":"#/types/proxmoxve:Storage/NFSBackups:NFSBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"export":{"type":"string","description":"The path of the NFS export.\n"},"nfsId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"options":{"type":"string","description":"The options to pass to the NFS service.\n"},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"server":{"type":"string","description":"The IP address or DNS name of the NFS server.\n"},"snapshotAsVolumeChain":{"type":"boolean","description":"Enable support for creating snapshots through volume backing-chains.\n"}},"requiredInputs":["export","nfsId","server"],"stateInputs":{"description":"Input properties used for looking up and filtering NFS resources.\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/NFSBackups:NFSBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"export":{"type":"string","description":"The path of the NFS export.\n"},"nfsId":{"type":"string","description":"The unique identifier of the storage.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"options":{"type":"string","description":"The options to pass to the NFS service.\n"},"preallocation":{"type":"string","description":"The preallocation mode for raw and qcow2 images.\n"},"server":{"type":"string","description":"The IP address or DNS name of the NFS server.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"snapshotAsVolumeChain":{"type":"boolean","description":"Enable support for creating snapshots through volume backing-chains.\n"}},"type":"object"}},"proxmoxve:Storage/pBS:PBS":{"description":"Manages a Proxmox Backup Server (PBS) storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.PBS(\"example\", {\n pbsId: \"example-pbs\",\n nodes: [\"pve\"],\n server: \"pbs.example.local\",\n datastore: \"backup\",\n username: \"pbs-user\",\n password: \"pbs-password\",\n fingerprint: \"AA:BB:CC:DD:EE:FF\",\n contents: [\"backup\"],\n generateEncryptionKey: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.PBS(\"example\",\n pbs_id=\"example-pbs\",\n nodes=[\"pve\"],\n server=\"pbs.example.local\",\n datastore=\"backup\",\n username=\"pbs-user\",\n password=\"pbs-password\",\n fingerprint=\"AA:BB:CC:DD:EE:FF\",\n contents=[\"backup\"],\n generate_encryption_key=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.PBS(\"example\", new()\n {\n PbsId = \"example-pbs\",\n Nodes = new[]\n {\n \"pve\",\n },\n Server = \"pbs.example.local\",\n Datastore = \"backup\",\n Username = \"pbs-user\",\n Password = \"pbs-password\",\n Fingerprint = \"AA:BB:CC:DD:EE:FF\",\n Contents = new[]\n {\n \"backup\",\n },\n GenerateEncryptionKey = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewPBS(ctx, \"example\", \u0026storage.PBSArgs{\n\t\t\tPbsId: pulumi.String(\"example-pbs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tServer: pulumi.String(\"pbs.example.local\"),\n\t\t\tDatastore: pulumi.String(\"backup\"),\n\t\t\tUsername: pulumi.String(\"pbs-user\"),\n\t\t\tPassword: pulumi.String(\"pbs-password\"),\n\t\t\tFingerprint: pulumi.String(\"AA:BB:CC:DD:EE:FF\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"backup\"),\n\t\t\t},\n\t\t\tGenerateEncryptionKey: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.PBS;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.PBSArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new PBS(\"example\", PBSArgs.builder()\n .pbsId(\"example-pbs\")\n .nodes(\"pve\")\n .server(\"pbs.example.local\")\n .datastore(\"backup\")\n .username(\"pbs-user\")\n .password(\"pbs-password\")\n .fingerprint(\"AA:BB:CC:DD:EE:FF\")\n .contents(\"backup\")\n .generateEncryptionKey(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:PBS\n properties:\n pbsId: example-pbs\n nodes:\n - pve\n server: pbs.example.local\n datastore: backup\n username: pbs-user\n password: pbs-password\n fingerprint: AA:BB:CC:DD:EE:FF\n contents:\n - backup\n generateEncryptionKey: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/PBSBackups:PBSBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"datastore":{"type":"string","description":"The name of the datastore on the Proxmox Backup Server.\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"encryptionKey":{"type":"string","description":"An existing encryption key for the datastore. This is a sensitive value. Conflicts with \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e.\n","secret":true},"encryptionKeyFingerprint":{"type":"string","description":"The SHA256 fingerprint of the encryption key currently in use.\n"},"fingerprint":{"type":"string","description":"The SHA256 fingerprint of the Proxmox Backup Server's certificate.\n"},"generateEncryptionKey":{"type":"boolean","description":"If set to true, Proxmox will generate a new encryption key. The key will be stored in the \u003cspan pulumi-lang-nodejs=\"`generatedEncryptionKey`\" pulumi-lang-dotnet=\"`GeneratedEncryptionKey`\" pulumi-lang-go=\"`generatedEncryptionKey`\" pulumi-lang-python=\"`generated_encryption_key`\" pulumi-lang-yaml=\"`generatedEncryptionKey`\" pulumi-lang-java=\"`generatedEncryptionKey`\"\u003e`generated_encryption_key`\u003c/span\u003e attribute. Conflicts with \u003cspan pulumi-lang-nodejs=\"`encryptionKey`\" pulumi-lang-dotnet=\"`EncryptionKey`\" pulumi-lang-go=\"`encryptionKey`\" pulumi-lang-python=\"`encryption_key`\" pulumi-lang-yaml=\"`encryptionKey`\" pulumi-lang-java=\"`encryptionKey`\"\u003e`encryption_key`\u003c/span\u003e.\n"},"generatedEncryptionKey":{"type":"string","description":"The encryption key returned by Proxmox when \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e is true.\n","secret":true},"namespace":{"type":"string","description":"The namespace to use on the Proxmox Backup Server.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"password":{"type":"string","description":"The password for authenticating with the Proxmox Backup Server.\n","secret":true},"pbsId":{"type":"string","description":"The unique identifier of the storage.\n"},"server":{"type":"string","description":"The IP address or DNS name of the Proxmox Backup Server.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"username":{"type":"string","description":"The username for authenticating with the Proxmox Backup Server.\n"}},"required":["contents","datastore","disable","encryptionKeyFingerprint","generatedEncryptionKey","pbsId","nodes","password","server","shared","username"],"inputProperties":{"backups":{"$ref":"#/types/proxmoxve:Storage/PBSBackups:PBSBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"datastore":{"type":"string","description":"The name of the datastore on the Proxmox Backup Server.\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"encryptionKey":{"type":"string","description":"An existing encryption key for the datastore. This is a sensitive value. Conflicts with \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e.\n","secret":true},"fingerprint":{"type":"string","description":"The SHA256 fingerprint of the Proxmox Backup Server's certificate.\n"},"generateEncryptionKey":{"type":"boolean","description":"If set to true, Proxmox will generate a new encryption key. The key will be stored in the \u003cspan pulumi-lang-nodejs=\"`generatedEncryptionKey`\" pulumi-lang-dotnet=\"`GeneratedEncryptionKey`\" pulumi-lang-go=\"`generatedEncryptionKey`\" pulumi-lang-python=\"`generated_encryption_key`\" pulumi-lang-yaml=\"`generatedEncryptionKey`\" pulumi-lang-java=\"`generatedEncryptionKey`\"\u003e`generated_encryption_key`\u003c/span\u003e attribute. Conflicts with \u003cspan pulumi-lang-nodejs=\"`encryptionKey`\" pulumi-lang-dotnet=\"`EncryptionKey`\" pulumi-lang-go=\"`encryptionKey`\" pulumi-lang-python=\"`encryption_key`\" pulumi-lang-yaml=\"`encryptionKey`\" pulumi-lang-java=\"`encryptionKey`\"\u003e`encryption_key`\u003c/span\u003e.\n"},"namespace":{"type":"string","description":"The namespace to use on the Proxmox Backup Server.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"password":{"type":"string","description":"The password for authenticating with the Proxmox Backup Server.\n","secret":true},"pbsId":{"type":"string","description":"The unique identifier of the storage.\n"},"server":{"type":"string","description":"The IP address or DNS name of the Proxmox Backup Server.\n"},"username":{"type":"string","description":"The username for authenticating with the Proxmox Backup Server.\n"}},"requiredInputs":["datastore","pbsId","password","server","username"],"stateInputs":{"description":"Input properties used for looking up and filtering PBS resources.\n","properties":{"backups":{"$ref":"#/types/proxmoxve:Storage/PBSBackups:PBSBackups","description":"Configure backup retention settings for the storage type.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"datastore":{"type":"string","description":"The name of the datastore on the Proxmox Backup Server.\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"encryptionKey":{"type":"string","description":"An existing encryption key for the datastore. This is a sensitive value. Conflicts with \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e.\n","secret":true},"encryptionKeyFingerprint":{"type":"string","description":"The SHA256 fingerprint of the encryption key currently in use.\n"},"fingerprint":{"type":"string","description":"The SHA256 fingerprint of the Proxmox Backup Server's certificate.\n"},"generateEncryptionKey":{"type":"boolean","description":"If set to true, Proxmox will generate a new encryption key. The key will be stored in the \u003cspan pulumi-lang-nodejs=\"`generatedEncryptionKey`\" pulumi-lang-dotnet=\"`GeneratedEncryptionKey`\" pulumi-lang-go=\"`generatedEncryptionKey`\" pulumi-lang-python=\"`generated_encryption_key`\" pulumi-lang-yaml=\"`generatedEncryptionKey`\" pulumi-lang-java=\"`generatedEncryptionKey`\"\u003e`generated_encryption_key`\u003c/span\u003e attribute. Conflicts with \u003cspan pulumi-lang-nodejs=\"`encryptionKey`\" pulumi-lang-dotnet=\"`EncryptionKey`\" pulumi-lang-go=\"`encryptionKey`\" pulumi-lang-python=\"`encryption_key`\" pulumi-lang-yaml=\"`encryptionKey`\" pulumi-lang-java=\"`encryptionKey`\"\u003e`encryption_key`\u003c/span\u003e.\n"},"generatedEncryptionKey":{"type":"string","description":"The encryption key returned by Proxmox when \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e is true.\n","secret":true},"namespace":{"type":"string","description":"The namespace to use on the Proxmox Backup Server.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"password":{"type":"string","description":"The password for authenticating with the Proxmox Backup Server.\n","secret":true},"pbsId":{"type":"string","description":"The unique identifier of the storage.\n"},"server":{"type":"string","description":"The IP address or DNS name of the Proxmox Backup Server.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"username":{"type":"string","description":"The username for authenticating with the Proxmox Backup Server.\n"}},"type":"object"}},"proxmoxve:Storage/zFSPool:ZFSPool":{"description":"Manages ZFS-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.ZFSPool(\"example\", {\n zfsPoolId: \"example-zfs\",\n nodes: [\"pve\"],\n zfsPool: \"rpool/data\",\n contents: [\"images\"],\n thinProvision: true,\n blocksize: \"64k\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.ZFSPool(\"example\",\n zfs_pool_id=\"example-zfs\",\n nodes=[\"pve\"],\n zfs_pool=\"rpool/data\",\n contents=[\"images\"],\n thin_provision=True,\n blocksize=\"64k\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.ZFSPool(\"example\", new()\n {\n ZfsPoolId = \"example-zfs\",\n Nodes = new[]\n {\n \"pve\",\n },\n ZfsPool = \"rpool/data\",\n Contents = new[]\n {\n \"images\",\n },\n ThinProvision = true,\n Blocksize = \"64k\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewZFSPool(ctx, \"example\", \u0026storage.ZFSPoolArgs{\n\t\t\tZfsPoolId: pulumi.String(\"example-zfs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tZfsPool: pulumi.String(\"rpool/data\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tThinProvision: pulumi.Bool(true),\n\t\t\tBlocksize: pulumi.String(\"64k\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.ZFSPool;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.ZFSPoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new ZFSPool(\"example\", ZFSPoolArgs.builder()\n .zfsPoolId(\"example-zfs\")\n .nodes(\"pve\")\n .zfsPool(\"rpool/data\")\n .contents(\"images\")\n .thinProvision(true)\n .blocksize(\"64k\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:ZFSPool\n properties:\n zfsPoolId: example-zfs\n nodes:\n - pve\n zfsPool: rpool/data\n contents:\n - images\n thinProvision: true\n blocksize: 64k\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"blocksize":{"type":"string","description":"Block size for newly created volumes (e.g. \u003cspan pulumi-lang-nodejs=\"`4k`\" pulumi-lang-dotnet=\"`4k`\" pulumi-lang-go=\"`4k`\" pulumi-lang-python=\"`4k`\" pulumi-lang-yaml=\"`4k`\" pulumi-lang-java=\"`4k`\"\u003e`4k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`8k`\" pulumi-lang-dotnet=\"`8k`\" pulumi-lang-go=\"`8k`\" pulumi-lang-python=\"`8k`\" pulumi-lang-yaml=\"`8k`\" pulumi-lang-java=\"`8k`\"\u003e`8k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`16k`\" pulumi-lang-dotnet=\"`16k`\" pulumi-lang-go=\"`16k`\" pulumi-lang-python=\"`16k`\" pulumi-lang-yaml=\"`16k`\" pulumi-lang-java=\"`16k`\"\u003e`16k`\u003c/span\u003e). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"thinProvision":{"type":"boolean","description":"Whether to enable thin provisioning (\u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e). Thin provisioning allows flexible disk allocation without pre-allocating full space.\n"},"zfsPool":{"type":"string","description":"The name of the ZFS storage pool to use (e.g. \u003cspan pulumi-lang-nodejs=\"`tank`\" pulumi-lang-dotnet=\"`Tank`\" pulumi-lang-go=\"`tank`\" pulumi-lang-python=\"`tank`\" pulumi-lang-yaml=\"`tank`\" pulumi-lang-java=\"`tank`\"\u003e`tank`\u003c/span\u003e, `rpool/data`).\n"},"zfsPoolId":{"type":"string","description":"The unique identifier of the storage.\n"}},"required":["contents","disable","zfsPoolId","nodes","shared","zfsPool"],"inputProperties":{"blocksize":{"type":"string","description":"Block size for newly created volumes (e.g. \u003cspan pulumi-lang-nodejs=\"`4k`\" pulumi-lang-dotnet=\"`4k`\" pulumi-lang-go=\"`4k`\" pulumi-lang-python=\"`4k`\" pulumi-lang-yaml=\"`4k`\" pulumi-lang-java=\"`4k`\"\u003e`4k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`8k`\" pulumi-lang-dotnet=\"`8k`\" pulumi-lang-go=\"`8k`\" pulumi-lang-python=\"`8k`\" pulumi-lang-yaml=\"`8k`\" pulumi-lang-java=\"`8k`\"\u003e`8k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`16k`\" pulumi-lang-dotnet=\"`16k`\" pulumi-lang-go=\"`16k`\" pulumi-lang-python=\"`16k`\" pulumi-lang-yaml=\"`16k`\" pulumi-lang-java=\"`16k`\"\u003e`16k`\u003c/span\u003e). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"thinProvision":{"type":"boolean","description":"Whether to enable thin provisioning (\u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e). Thin provisioning allows flexible disk allocation without pre-allocating full space.\n"},"zfsPool":{"type":"string","description":"The name of the ZFS storage pool to use (e.g. \u003cspan pulumi-lang-nodejs=\"`tank`\" pulumi-lang-dotnet=\"`Tank`\" pulumi-lang-go=\"`tank`\" pulumi-lang-python=\"`tank`\" pulumi-lang-yaml=\"`tank`\" pulumi-lang-java=\"`tank`\"\u003e`tank`\u003c/span\u003e, `rpool/data`).\n"},"zfsPoolId":{"type":"string","description":"The unique identifier of the storage.\n"}},"requiredInputs":["zfsPoolId","zfsPool"],"stateInputs":{"description":"Input properties used for looking up and filtering ZFSPool resources.\n","properties":{"blocksize":{"type":"string","description":"Block size for newly created volumes (e.g. \u003cspan pulumi-lang-nodejs=\"`4k`\" pulumi-lang-dotnet=\"`4k`\" pulumi-lang-go=\"`4k`\" pulumi-lang-python=\"`4k`\" pulumi-lang-yaml=\"`4k`\" pulumi-lang-java=\"`4k`\"\u003e`4k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`8k`\" pulumi-lang-dotnet=\"`8k`\" pulumi-lang-go=\"`8k`\" pulumi-lang-python=\"`8k`\" pulumi-lang-yaml=\"`8k`\" pulumi-lang-java=\"`8k`\"\u003e`8k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`16k`\" pulumi-lang-dotnet=\"`16k`\" pulumi-lang-go=\"`16k`\" pulumi-lang-python=\"`16k`\" pulumi-lang-yaml=\"`16k`\" pulumi-lang-java=\"`16k`\"\u003e`16k`\u003c/span\u003e). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency.\n"},"contents":{"type":"array","items":{"type":"string"},"description":"The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n"},"disable":{"type":"boolean","description":"Whether the storage is disabled.\n"},"nodes":{"type":"array","items":{"type":"string"},"description":"A list of nodes where this storage is available.\n"},"shared":{"type":"boolean","description":"Whether the storage is shared across all nodes.\n"},"thinProvision":{"type":"boolean","description":"Whether to enable thin provisioning (\u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e). Thin provisioning allows flexible disk allocation without pre-allocating full space.\n"},"zfsPool":{"type":"string","description":"The name of the ZFS storage pool to use (e.g. \u003cspan pulumi-lang-nodejs=\"`tank`\" pulumi-lang-dotnet=\"`Tank`\" pulumi-lang-go=\"`tank`\" pulumi-lang-python=\"`tank`\" pulumi-lang-yaml=\"`tank`\" pulumi-lang-java=\"`tank`\"\u003e`tank`\u003c/span\u003e, `rpool/data`).\n"},"zfsPoolId":{"type":"string","description":"The unique identifier of the storage.\n"}},"type":"object"}},"proxmoxve:User/token:Token":{"description":"User API tokens.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// if creating a user token, the user must be created first\nconst user = new proxmoxve.permission.User(\"user\", {\n comment: \"Managed by Pulumi\",\n email: \"user@pve\",\n enabled: true,\n expirationDate: \"2034-01-01T22:00:00Z\",\n userId: \"user@pve\",\n});\nconst userToken = new proxmoxve.user.Token(\"user_token\", {\n comment: \"Managed by Pulumi\",\n expirationDate: \"2033-01-01T22:00:00Z\",\n tokenName: \"tk1\",\n userId: user.userId,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# if creating a user token, the user must be created first\nuser = proxmoxve.permission.User(\"user\",\n comment=\"Managed by Pulumi\",\n email=\"user@pve\",\n enabled=True,\n expiration_date=\"2034-01-01T22:00:00Z\",\n user_id=\"user@pve\")\nuser_token = proxmoxve.user.Token(\"user_token\",\n comment=\"Managed by Pulumi\",\n expiration_date=\"2033-01-01T22:00:00Z\",\n token_name=\"tk1\",\n user_id=user.user_id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // if creating a user token, the user must be created first\n var user = new ProxmoxVE.Permission.User(\"user\", new()\n {\n Comment = \"Managed by Pulumi\",\n Email = \"user@pve\",\n Enabled = true,\n ExpirationDate = \"2034-01-01T22:00:00Z\",\n UserId = \"user@pve\",\n });\n\n var userToken = new ProxmoxVE.User.Token(\"user_token\", new()\n {\n Comment = \"Managed by Pulumi\",\n ExpirationDate = \"2033-01-01T22:00:00Z\",\n TokenName = \"tk1\",\n UserId = user.UserId,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/user\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// if creating a user token, the user must be created first\n\t\tuser, err := permission.NewUser(ctx, \"user\", \u0026permission.UserArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tEmail: pulumi.String(\"user@pve\"),\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tExpirationDate: pulumi.String(\"2034-01-01T22:00:00Z\"),\n\t\t\tUserId: pulumi.String(\"user@pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = user.NewToken(ctx, \"user_token\", \u0026user.TokenArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tExpirationDate: pulumi.String(\"2033-01-01T22:00:00Z\"),\n\t\t\tTokenName: pulumi.String(\"tk1\"),\n\t\t\tUserId: user.UserId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.User;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.UserArgs;\nimport io.muehlbachler.pulumi.proxmoxve.User.Token;\nimport io.muehlbachler.pulumi.proxmoxve.User.TokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // if creating a user token, the user must be created first\n var user = new User(\"user\", UserArgs.builder()\n .comment(\"Managed by Pulumi\")\n .email(\"user@pve\")\n .enabled(true)\n .expirationDate(\"2034-01-01T22:00:00Z\")\n .userId(\"user@pve\")\n .build());\n\n var userToken = new Token(\"userToken\", TokenArgs.builder()\n .comment(\"Managed by Pulumi\")\n .expirationDate(\"2033-01-01T22:00:00Z\")\n .tokenName(\"tk1\")\n .userId(user.userId())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # if creating a user token, the user must be created first\n user:\n type: proxmoxve:Permission:User\n properties:\n comment: Managed by Pulumi\n email: user@pve\n enabled: true\n expirationDate: 2034-01-01T22:00:00Z\n userId: user@pve\n userToken:\n type: proxmoxve:User:Token\n name: user_token\n properties:\n comment: Managed by Pulumi\n expirationDate: 2033-01-01T22:00:00Z\n tokenName: tk1\n userId: ${user.userId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\n#Tokens can be imported using they identifiers in format `user_id!token_name` format, e.g.:\n\n```sh\n$ pulumi import proxmoxve:User/token:Token token1 user@pve!token1\n```\n\n","properties":{"comment":{"type":"string","description":"Comment for the token.\n"},"expirationDate":{"type":"string","description":"Expiration date for the token.\n"},"privilegesSeparation":{"type":"boolean","description":"Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n"},"tokenName":{"type":"string","description":"User-specific token identifier.\n"},"userId":{"type":"string","description":"User identifier.\n"},"value":{"type":"string","description":"API token value used for authentication. It is populated only when creating a new token, and can't be retrieved at import.\n","secret":true}},"required":["privilegesSeparation","tokenName","userId","value"],"inputProperties":{"comment":{"type":"string","description":"Comment for the token.\n"},"expirationDate":{"type":"string","description":"Expiration date for the token.\n"},"privilegesSeparation":{"type":"boolean","description":"Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n"},"tokenName":{"type":"string","description":"User-specific token identifier.\n"},"userId":{"type":"string","description":"User identifier.\n"}},"requiredInputs":["tokenName","userId"],"stateInputs":{"description":"Input properties used for looking up and filtering Token resources.\n","properties":{"comment":{"type":"string","description":"Comment for the token.\n"},"expirationDate":{"type":"string","description":"Expiration date for the token.\n"},"privilegesSeparation":{"type":"boolean","description":"Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n"},"tokenName":{"type":"string","description":"User-specific token identifier.\n"},"userId":{"type":"string","description":"User identifier.\n"},"value":{"type":"string","description":"API token value used for authentication. It is populated only when creating a new token, and can't be retrieved at import.\n","secret":true}},"type":"object"}},"proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine":{"description":"## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// Example 1: Basic clone with minimal management\nconst basicClone = new proxmoxve.vm.ClonedVirtualMachine(\"basic_clone\", {\n nodeName: \"pve\",\n name: \"basic-clone\",\n clone: {\n sourceVmId: 100,\n full: true,\n },\n cpu: {\n cores: 4,\n },\n});\n// Example 2: Clone with explicit network management\nconst networkManaged = new proxmoxve.vm.ClonedVirtualMachine(\"network_managed\", {\n nodeName: \"pve\",\n name: \"network-clone\",\n clone: {\n sourceVmId: 100,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n tag: 100,\n },\n net1: {\n bridge: \"vmbr1\",\n model: \"virtio\",\n firewall: true,\n macAddress: \"BC:24:11:2E:C5:00\",\n },\n },\n cpu: {\n cores: 2,\n },\n});\n// Example 3: Clone with disk management\nconst diskManaged = new proxmoxve.vm.ClonedVirtualMachine(\"disk_managed\", {\n nodeName: \"pve\",\n name: \"disk-clone\",\n clone: {\n sourceVmId: 100,\n targetDatastore: \"local-lvm\",\n },\n disk: {\n scsi0: {\n datastoreId: \"local-lvm\",\n sizeGb: 50,\n discard: \"on\",\n ssd: true,\n },\n scsi1: {\n datastoreId: \"local-lvm\",\n sizeGb: 100,\n backup: false,\n },\n },\n});\n// Example 4: Clone with explicit device deletion\nconst selectiveDelete = new proxmoxve.vm.ClonedVirtualMachine(\"selective_delete\", {\n nodeName: \"pve\",\n name: \"minimal-clone\",\n clone: {\n sourceVmId: 100,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n },\n },\n \"delete\": {\n networks: [\n \"net1\",\n \"net2\",\n ],\n },\n});\n// Example 5: Full-featured clone with multiple settings\nconst fullFeatured = new proxmoxve.vm.ClonedVirtualMachine(\"full_featured\", {\n nodeName: \"pve\",\n name: \"production-vm\",\n description: \"Production VM cloned from template\",\n tags: [\n \"production\",\n \"web\",\n ],\n clone: {\n sourceVmId: 100,\n sourceNodeName: \"pve\",\n full: true,\n targetDatastore: \"local-lvm\",\n retries: 3,\n },\n cpu: {\n cores: 8,\n sockets: 1,\n architecture: \"x86_64\",\n type: \"host\",\n },\n memory: {\n size: 8192,\n balloon: 2048,\n shares: 2000,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n tag: 100,\n firewall: true,\n rateLimit: 100,\n },\n },\n disk: {\n scsi0: {\n datastoreId: \"local-lvm\",\n sizeGb: 100,\n discard: \"on\",\n iothread: true,\n ssd: true,\n cache: \"writethrough\",\n },\n },\n vga: {\n type: \"std\",\n memory: 16,\n },\n \"delete\": {\n disks: [\"ide2\"],\n },\n stopOnDestroy: false,\n purgeOnDestroy: true,\n deleteUnreferencedDisksOnDestroy: false,\n timeouts: {\n create: \"30m\",\n update: \"30m\",\n \"delete\": \"10m\",\n },\n});\n// Example 6: Linked clone for testing\nconst testClone = new proxmoxve.vm.ClonedVirtualMachine(\"test_clone\", {\n nodeName: \"pve\",\n name: \"test-vm\",\n clone: {\n sourceVmId: 100,\n full: false,\n },\n cpu: {\n cores: 2,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n },\n },\n});\n// Example 7: Clone with pool assignment\nconst pooledClone = new proxmoxve.vm.ClonedVirtualMachine(\"pooled_clone\", {\n nodeName: \"pve\",\n name: \"pooled-vm\",\n clone: {\n sourceVmId: 100,\n poolId: \"production\",\n },\n cpu: {\n cores: 4,\n },\n});\n// Example 8: Import existing cloned VM\nconst imported = new proxmoxve.vm.ClonedVirtualMachine(\"imported\", {\n vmId: \"123\",\n nodeName: \"pve\",\n clone: {\n sourceVmId: 100,\n },\n cpu: {\n cores: 4,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# Example 1: Basic clone with minimal management\nbasic_clone = proxmoxve.vm.ClonedVirtualMachine(\"basic_clone\",\n node_name=\"pve\",\n name=\"basic-clone\",\n clone={\n \"source_vm_id\": 100,\n \"full\": True,\n },\n cpu={\n \"cores\": 4,\n })\n# Example 2: Clone with explicit network management\nnetwork_managed = proxmoxve.vm.ClonedVirtualMachine(\"network_managed\",\n node_name=\"pve\",\n name=\"network-clone\",\n clone={\n \"source_vm_id\": 100,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n \"tag\": 100,\n },\n \"net1\": {\n \"bridge\": \"vmbr1\",\n \"model\": \"virtio\",\n \"firewall\": True,\n \"mac_address\": \"BC:24:11:2E:C5:00\",\n },\n },\n cpu={\n \"cores\": 2,\n })\n# Example 3: Clone with disk management\ndisk_managed = proxmoxve.vm.ClonedVirtualMachine(\"disk_managed\",\n node_name=\"pve\",\n name=\"disk-clone\",\n clone={\n \"source_vm_id\": 100,\n \"target_datastore\": \"local-lvm\",\n },\n disk={\n \"scsi0\": {\n \"datastore_id\": \"local-lvm\",\n \"size_gb\": 50,\n \"discard\": \"on\",\n \"ssd\": True,\n },\n \"scsi1\": {\n \"datastore_id\": \"local-lvm\",\n \"size_gb\": 100,\n \"backup\": False,\n },\n })\n# Example 4: Clone with explicit device deletion\nselective_delete = proxmoxve.vm.ClonedVirtualMachine(\"selective_delete\",\n node_name=\"pve\",\n name=\"minimal-clone\",\n clone={\n \"source_vm_id\": 100,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n },\n },\n delete={\n \"networks\": [\n \"net1\",\n \"net2\",\n ],\n })\n# Example 5: Full-featured clone with multiple settings\nfull_featured = proxmoxve.vm.ClonedVirtualMachine(\"full_featured\",\n node_name=\"pve\",\n name=\"production-vm\",\n description=\"Production VM cloned from template\",\n tags=[\n \"production\",\n \"web\",\n ],\n clone={\n \"source_vm_id\": 100,\n \"source_node_name\": \"pve\",\n \"full\": True,\n \"target_datastore\": \"local-lvm\",\n \"retries\": 3,\n },\n cpu={\n \"cores\": 8,\n \"sockets\": 1,\n \"architecture\": \"x86_64\",\n \"type\": \"host\",\n },\n memory={\n \"size\": 8192,\n \"balloon\": 2048,\n \"shares\": 2000,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n \"tag\": 100,\n \"firewall\": True,\n \"rate_limit\": 100,\n },\n },\n disk={\n \"scsi0\": {\n \"datastore_id\": \"local-lvm\",\n \"size_gb\": 100,\n \"discard\": \"on\",\n \"iothread\": True,\n \"ssd\": True,\n \"cache\": \"writethrough\",\n },\n },\n vga={\n \"type\": \"std\",\n \"memory\": 16,\n },\n delete={\n \"disks\": [\"ide2\"],\n },\n stop_on_destroy=False,\n purge_on_destroy=True,\n delete_unreferenced_disks_on_destroy=False,\n timeouts={\n \"create\": \"30m\",\n \"update\": \"30m\",\n \"delete\": \"10m\",\n })\n# Example 6: Linked clone for testing\ntest_clone = proxmoxve.vm.ClonedVirtualMachine(\"test_clone\",\n node_name=\"pve\",\n name=\"test-vm\",\n clone={\n \"source_vm_id\": 100,\n \"full\": False,\n },\n cpu={\n \"cores\": 2,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n },\n })\n# Example 7: Clone with pool assignment\npooled_clone = proxmoxve.vm.ClonedVirtualMachine(\"pooled_clone\",\n node_name=\"pve\",\n name=\"pooled-vm\",\n clone={\n \"source_vm_id\": 100,\n \"pool_id\": \"production\",\n },\n cpu={\n \"cores\": 4,\n })\n# Example 8: Import existing cloned VM\nimported = proxmoxve.vm.ClonedVirtualMachine(\"imported\",\n vm_id=\"123\",\n node_name=\"pve\",\n clone={\n \"source_vm_id\": 100,\n },\n cpu={\n \"cores\": 4,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Example 1: Basic clone with minimal management\n var basicClone = new ProxmoxVE.VM.ClonedVirtualMachine(\"basic_clone\", new()\n {\n NodeName = \"pve\",\n Name = \"basic-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n Full = true,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 4,\n },\n });\n\n // Example 2: Clone with explicit network management\n var networkManaged = new ProxmoxVE.VM.ClonedVirtualMachine(\"network_managed\", new()\n {\n NodeName = \"pve\",\n Name = \"network-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n Tag = 100,\n } },\n { \"net1\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr1\",\n Model = \"virtio\",\n Firewall = true,\n MacAddress = \"BC:24:11:2E:C5:00\",\n } },\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 2,\n },\n });\n\n // Example 3: Clone with disk management\n var diskManaged = new ProxmoxVE.VM.ClonedVirtualMachine(\"disk_managed\", new()\n {\n NodeName = \"pve\",\n Name = \"disk-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n TargetDatastore = \"local-lvm\",\n },\n Disk = \n {\n { \"scsi0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n SizeGb = 50,\n Discard = \"on\",\n Ssd = true,\n } },\n { \"scsi1\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n SizeGb = 100,\n Backup = false,\n } },\n },\n });\n\n // Example 4: Clone with explicit device deletion\n var selectiveDelete = new ProxmoxVE.VM.ClonedVirtualMachine(\"selective_delete\", new()\n {\n NodeName = \"pve\",\n Name = \"minimal-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n } },\n },\n Delete = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDeleteArgs\n {\n Networks = new[]\n {\n \"net1\",\n \"net2\",\n },\n },\n });\n\n // Example 5: Full-featured clone with multiple settings\n var fullFeatured = new ProxmoxVE.VM.ClonedVirtualMachine(\"full_featured\", new()\n {\n NodeName = \"pve\",\n Name = \"production-vm\",\n Description = \"Production VM cloned from template\",\n Tags = new[]\n {\n \"production\",\n \"web\",\n },\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n SourceNodeName = \"pve\",\n Full = true,\n TargetDatastore = \"local-lvm\",\n Retries = 3,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 8,\n Sockets = 1,\n Architecture = \"x86_64\",\n Type = \"host\",\n },\n Memory = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineMemoryArgs\n {\n Size = 8192,\n Balloon = 2048,\n Shares = 2000,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n Tag = 100,\n Firewall = true,\n RateLimit = 100,\n } },\n },\n Disk = \n {\n { \"scsi0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n SizeGb = 100,\n Discard = \"on\",\n Iothread = true,\n Ssd = true,\n Cache = \"writethrough\",\n } },\n },\n Vga = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineVgaArgs\n {\n Type = \"std\",\n Memory = 16,\n },\n Delete = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDeleteArgs\n {\n Disks = new[]\n {\n \"ide2\",\n },\n },\n StopOnDestroy = false,\n PurgeOnDestroy = true,\n DeleteUnreferencedDisksOnDestroy = false,\n Timeouts = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineTimeoutsArgs\n {\n Create = \"30m\",\n Update = \"30m\",\n Delete = \"10m\",\n },\n });\n\n // Example 6: Linked clone for testing\n var testClone = new ProxmoxVE.VM.ClonedVirtualMachine(\"test_clone\", new()\n {\n NodeName = \"pve\",\n Name = \"test-vm\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n Full = false,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 2,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n } },\n },\n });\n\n // Example 7: Clone with pool assignment\n var pooledClone = new ProxmoxVE.VM.ClonedVirtualMachine(\"pooled_clone\", new()\n {\n NodeName = \"pve\",\n Name = \"pooled-vm\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n PoolId = \"production\",\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 4,\n },\n });\n\n // Example 8: Import existing cloned VM\n var imported = new ProxmoxVE.VM.ClonedVirtualMachine(\"imported\", new()\n {\n VmId = \"123\",\n NodeName = \"pve\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 4,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Example 1: Basic clone with minimal management\n\t\t_, err := vm.NewClonedVirtualMachine(ctx, \"basic_clone\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"basic-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tFull: pulumi.Bool(true),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(4),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 2: Clone with explicit network management\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"network_managed\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"network-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t\tTag: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t\t\"net1\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr1\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t\tFirewall: pulumi.Bool(true),\n\t\t\t\t\tMacAddress: pulumi.String(\"BC:24:11:2E:C5:00\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 3: Clone with disk management\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"disk_managed\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"disk-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tTargetDatastore: pulumi.String(\"local-lvm\"),\n\t\t\t},\n\t\t\tDisk: vm.ClonedVirtualMachineDiskMap{\n\t\t\t\t\"scsi0\": \u0026vm.ClonedVirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSizeGb: pulumi.Int(50),\n\t\t\t\t\tDiscard: pulumi.String(\"on\"),\n\t\t\t\t\tSsd: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\t\"scsi1\": \u0026vm.ClonedVirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSizeGb: pulumi.Int(100),\n\t\t\t\t\tBackup: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 4: Clone with explicit device deletion\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"selective_delete\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"minimal-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDelete: \u0026vm.ClonedVirtualMachineDeleteArgs{\n\t\t\t\tNetworks: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"net1\"),\n\t\t\t\t\tpulumi.String(\"net2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 5: Full-featured clone with multiple settings\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"full_featured\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"production-vm\"),\n\t\t\tDescription: pulumi.String(\"Production VM cloned from template\"),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"production\"),\n\t\t\t\tpulumi.String(\"web\"),\n\t\t\t},\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tSourceNodeName: pulumi.String(\"pve\"),\n\t\t\t\tFull: pulumi.Bool(true),\n\t\t\t\tTargetDatastore: pulumi.String(\"local-lvm\"),\n\t\t\t\tRetries: pulumi.Int(3),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(8),\n\t\t\t\tSockets: pulumi.Int(1),\n\t\t\t\tArchitecture: pulumi.String(\"x86_64\"),\n\t\t\t\tType: pulumi.String(\"host\"),\n\t\t\t},\n\t\t\tMemory: \u0026vm.ClonedVirtualMachineMemoryArgs{\n\t\t\t\tSize: pulumi.Int(8192),\n\t\t\t\tBalloon: pulumi.Int(2048),\n\t\t\t\tShares: pulumi.Int(2000),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t\tTag: pulumi.Int(100),\n\t\t\t\t\tFirewall: pulumi.Bool(true),\n\t\t\t\t\tRateLimit: pulumi.Float64(100),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisk: vm.ClonedVirtualMachineDiskMap{\n\t\t\t\t\"scsi0\": \u0026vm.ClonedVirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSizeGb: pulumi.Int(100),\n\t\t\t\t\tDiscard: pulumi.String(\"on\"),\n\t\t\t\t\tIothread: pulumi.Bool(true),\n\t\t\t\t\tSsd: pulumi.Bool(true),\n\t\t\t\t\tCache: pulumi.String(\"writethrough\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVga: \u0026vm.ClonedVirtualMachineVgaArgs{\n\t\t\t\tType: pulumi.String(\"std\"),\n\t\t\t\tMemory: pulumi.Int(16),\n\t\t\t},\n\t\t\tDelete: \u0026vm.ClonedVirtualMachineDeleteArgs{\n\t\t\t\tDisks: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ide2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStopOnDestroy: pulumi.Bool(false),\n\t\t\tPurgeOnDestroy: pulumi.Bool(true),\n\t\t\tDeleteUnreferencedDisksOnDestroy: pulumi.Bool(false),\n\t\t\tTimeouts: \u0026vm.ClonedVirtualMachineTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"30m\"),\n\t\t\t\tUpdate: pulumi.String(\"30m\"),\n\t\t\t\tDelete: pulumi.String(\"10m\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 6: Linked clone for testing\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"test_clone\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"test-vm\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tFull: pulumi.Bool(false),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(2),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 7: Clone with pool assignment\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"pooled_clone\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"pooled-vm\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tPoolId: pulumi.String(\"production\"),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(4),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 8: Import existing cloned VM\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"imported\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tVmId: pulumi.String(\"123\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(4),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.VM.ClonedVirtualMachine;\nimport io.muehlbachler.pulumi.proxmoxve.VM.ClonedVirtualMachineArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCloneArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCpuArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineDeleteArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineMemoryArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineVgaArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineTimeoutsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // Example 1: Basic clone with minimal management\n var basicClone = new ClonedVirtualMachine(\"basicClone\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"basic-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .full(true)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(4)\n .build())\n .build());\n\n // Example 2: Clone with explicit network management\n var networkManaged = new ClonedVirtualMachine(\"networkManaged\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"network-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .build())\n .network(Map.ofEntries(\n Map.entry(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .tag(100)\n .build()),\n Map.entry(\"net1\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr1\")\n .model(\"virtio\")\n .firewall(true)\n .macAddress(\"BC:24:11:2E:C5:00\")\n .build())\n ))\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(2)\n .build())\n .build());\n\n // Example 3: Clone with disk management\n var diskManaged = new ClonedVirtualMachine(\"diskManaged\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"disk-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .targetDatastore(\"local-lvm\")\n .build())\n .disk(Map.ofEntries(\n Map.entry(\"scsi0\", ClonedVirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .sizeGb(50)\n .discard(\"on\")\n .ssd(true)\n .build()),\n Map.entry(\"scsi1\", ClonedVirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .sizeGb(100)\n .backup(false)\n .build())\n ))\n .build());\n\n // Example 4: Clone with explicit device deletion\n var selectiveDelete = new ClonedVirtualMachine(\"selectiveDelete\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"minimal-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .build())\n .network(Map.of(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .build()))\n .delete(ClonedVirtualMachineDeleteArgs.builder()\n .networks( \n \"net1\",\n \"net2\")\n .build())\n .build());\n\n // Example 5: Full-featured clone with multiple settings\n var fullFeatured = new ClonedVirtualMachine(\"fullFeatured\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"production-vm\")\n .description(\"Production VM cloned from template\")\n .tags( \n \"production\",\n \"web\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .sourceNodeName(\"pve\")\n .full(true)\n .targetDatastore(\"local-lvm\")\n .retries(3)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(8)\n .sockets(1)\n .architecture(\"x86_64\")\n .type(\"host\")\n .build())\n .memory(ClonedVirtualMachineMemoryArgs.builder()\n .size(8192)\n .balloon(2048)\n .shares(2000)\n .build())\n .network(Map.of(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .tag(100)\n .firewall(true)\n .rateLimit(100.0)\n .build()))\n .disk(Map.of(\"scsi0\", ClonedVirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .sizeGb(100)\n .discard(\"on\")\n .iothread(true)\n .ssd(true)\n .cache(\"writethrough\")\n .build()))\n .vga(ClonedVirtualMachineVgaArgs.builder()\n .type(\"std\")\n .memory(16)\n .build())\n .delete(ClonedVirtualMachineDeleteArgs.builder()\n .disks(\"ide2\")\n .build())\n .stopOnDestroy(false)\n .purgeOnDestroy(true)\n .deleteUnreferencedDisksOnDestroy(false)\n .timeouts(ClonedVirtualMachineTimeoutsArgs.builder()\n .create(\"30m\")\n .update(\"30m\")\n .delete(\"10m\")\n .build())\n .build());\n\n // Example 6: Linked clone for testing\n var testClone = new ClonedVirtualMachine(\"testClone\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"test-vm\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .full(false)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(2)\n .build())\n .network(Map.of(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .build()))\n .build());\n\n // Example 7: Clone with pool assignment\n var pooledClone = new ClonedVirtualMachine(\"pooledClone\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"pooled-vm\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .poolId(\"production\")\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(4)\n .build())\n .build());\n\n // Example 8: Import existing cloned VM\n var imported = new ClonedVirtualMachine(\"imported\", ClonedVirtualMachineArgs.builder()\n .vmId(\"123\")\n .nodeName(\"pve\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(4)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Example 1: Basic clone with minimal management\n basicClone:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: basic_clone\n properties:\n nodeName: pve\n name: basic-clone\n clone:\n sourceVmId: 100\n full: true\n cpu:\n cores: 4\n # Example 2: Clone with explicit network management\n networkManaged:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: network_managed\n properties:\n nodeName: pve\n name: network-clone\n clone:\n sourceVmId: 100\n network:\n net0:\n bridge: vmbr0\n model: virtio\n tag: 100\n net1:\n bridge: vmbr1\n model: virtio\n firewall: true\n macAddress: BC:24:11:2E:C5:00\n cpu:\n cores: 2\n # Example 3: Clone with disk management\n diskManaged:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: disk_managed\n properties:\n nodeName: pve\n name: disk-clone\n clone:\n sourceVmId: 100\n targetDatastore: local-lvm\n disk:\n scsi0:\n datastoreId: local-lvm\n sizeGb: 50\n discard: on\n ssd: true\n scsi1:\n datastoreId: local-lvm\n sizeGb: 100\n backup: false\n # Example 4: Clone with explicit device deletion\n selectiveDelete:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: selective_delete\n properties:\n nodeName: pve\n name: minimal-clone\n clone:\n sourceVmId: 100\n network:\n net0:\n bridge: vmbr0\n model: virtio\n delete:\n networks:\n - net1\n - net2\n # Example 5: Full-featured clone with multiple settings\n fullFeatured:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: full_featured\n properties:\n nodeName: pve\n name: production-vm\n description: Production VM cloned from template\n tags:\n - production\n - web\n clone:\n sourceVmId: 100\n sourceNodeName: pve\n full: true\n targetDatastore: local-lvm\n retries: 3\n cpu:\n cores: 8\n sockets: 1\n architecture: x86_64\n type: host\n memory:\n size: 8192\n balloon: 2048\n shares: 2000\n network:\n net0:\n bridge: vmbr0\n model: virtio\n tag: 100\n firewall: true\n rateLimit: 100\n disk:\n scsi0:\n datastoreId: local-lvm\n sizeGb: 100\n discard: on\n iothread: true\n ssd: true\n cache: writethrough\n vga:\n type: std\n memory: 16\n delete:\n disks:\n - ide2\n stopOnDestroy: false # Shutdown gracefully instead of force stop\n purgeOnDestroy: true\n deleteUnreferencedDisksOnDestroy: false # Safety: don't delete unmanaged disks\n timeouts:\n create: 30m\n update: 30m\n delete: 10m\n # Example 6: Linked clone for testing\n testClone:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: test_clone\n properties:\n nodeName: pve\n name: test-vm\n clone:\n sourceVmId: 100\n full: false\n cpu:\n cores: 2\n network:\n net0:\n bridge: vmbr0\n model: virtio\n # Example 7: Clone with pool assignment\n pooledClone:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: pooled_clone\n properties:\n nodeName: pve\n name: pooled-vm\n clone:\n sourceVmId: 100\n poolId: production\n cpu:\n cores: 4\n # Example 8: Import existing cloned VM\n imported:\n type: proxmoxve:VM:ClonedVirtualMachine\n properties:\n vmId: 123 # VM ID to manage\n nodeName: pve\n clone:\n sourceVmId: 100\n cpu:\n cores: 4\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone","description":"Clone settings. Changes require recreation.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu","description":"The CPU configuration.\n"},"delete":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete","description":"Explicit deletions to perform after cloning/updating. Entries persist across applies.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean"},"description":{"type":"string","description":"Optional VM description applied after cloning.\n"},"disk":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk"},"description":"Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.\n"},"memory":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory","description":"Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e sets the total available RAM, while \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e sets the guaranteed floor. The host can reclaim memory between these values when needed.\n"},"name":{"type":"string","description":"Optional VM name override applied after cloning.\n"},"network":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork"},"description":"Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.\n"},"nodeName":{"type":"string","description":"Target node for the cloned VM.\n"},"purgeOnDestroy":{"type":"boolean","description":"Purge backup configuration on destroy.\n"},"rng":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Stop the VM on destroy (instead of shutdown).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags applied after cloning.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"},"vmId":{"type":"string","description":"The VM identifier in the Proxmox cluster.\n"}},"required":["clone","deleteUnreferencedDisksOnDestroy","vmId","name","nodeName","purgeOnDestroy","stopOnDestroy"],"inputProperties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone","description":"Clone settings. Changes require recreation.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu","description":"The CPU configuration.\n"},"delete":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete","description":"Explicit deletions to perform after cloning/updating. Entries persist across applies.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean"},"description":{"type":"string","description":"Optional VM description applied after cloning.\n"},"disk":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk"},"description":"Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.\n"},"memory":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory","description":"Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e sets the total available RAM, while \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e sets the guaranteed floor. The host can reclaim memory between these values when needed.\n"},"name":{"type":"string","description":"Optional VM name override applied after cloning.\n"},"network":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork"},"description":"Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.\n"},"nodeName":{"type":"string","description":"Target node for the cloned VM.\n"},"purgeOnDestroy":{"type":"boolean","description":"Purge backup configuration on destroy.\n"},"rng":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Stop the VM on destroy (instead of shutdown).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags applied after cloning.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"},"vmId":{"type":"string","description":"The VM identifier in the Proxmox cluster.\n"}},"requiredInputs":["clone","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering ClonedVirtualMachine resources.\n","properties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone","description":"Clone settings. Changes require recreation.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu","description":"The CPU configuration.\n"},"delete":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete","description":"Explicit deletions to perform after cloning/updating. Entries persist across applies.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean"},"description":{"type":"string","description":"Optional VM description applied after cloning.\n"},"disk":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk"},"description":"Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.\n"},"memory":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory","description":"Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e sets the total available RAM, while \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e sets the guaranteed floor. The host can reclaim memory between these values when needed.\n"},"name":{"type":"string","description":"Optional VM name override applied after cloning.\n"},"network":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork"},"description":"Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.\n"},"nodeName":{"type":"string","description":"Target node for the cloned VM.\n"},"purgeOnDestroy":{"type":"boolean","description":"Purge backup configuration on destroy.\n"},"rng":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Stop the VM on destroy (instead of shutdown).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags applied after cloning.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"},"vmId":{"type":"string","description":"The VM identifier in the Proxmox cluster.\n"}},"type":"object"}},"proxmoxve:VM/virtualMachine2:VirtualMachine2":{"description":"!\u003e **DO NOT USE**\nThis is an experimental implementation of a Proxmox VM resource using Plugin Framework.\u003cbr\u003e\u003cbr\u003eIt is a Proof of Concept, highly experimental and **will** change in future. It does not support all features of the Proxmox API for VMs and **MUST NOT** be used in production.\n\n\u003e Many attributes are marked as **optional** _and_ **computed** in the schema,\nhence you may seem added to the plan with \"(known after apply)\" status, even if they are not set in the configuration.\nThis is done to support the \u003cspan pulumi-lang-nodejs=\"`clone`\" pulumi-lang-dotnet=\"`Clone`\" pulumi-lang-go=\"`clone`\" pulumi-lang-python=\"`clone`\" pulumi-lang-yaml=\"`clone`\" pulumi-lang-java=\"`clone`\"\u003e`clone`\u003c/span\u003e operation, when a VM is created from an existing VM or template,\nand the source attributes are copied to the clone.\u003cbr\u003e\u003cbr\u003e\nComputed attributes allow the provider to set those attributes without user input.\nThe attributes are also marked as optional to allow the practitioner to set (or overwrite) them if needed.\n","properties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Set to true to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"description":{"type":"string","description":"The description of the VM.\n"},"name":{"type":"string","description":"The name of the VM. Doesn't have to be unique.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"purgeOnDestroy":{"type":"boolean","description":"Set to true to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rng":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Set to true to stop (rather than shutdown) the VM on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Set to true to create a VM template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"}},"required":["cdrom","cpu","deleteUnreferencedDisksOnDestroy","name","nodeName","purgeOnDestroy","rng","stopOnDestroy","tags","vga"],"inputProperties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Set to true to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"description":{"type":"string","description":"The description of the VM.\n"},"name":{"type":"string","description":"The name of the VM. Doesn't have to be unique.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"purgeOnDestroy":{"type":"boolean","description":"Set to true to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rng":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Set to true to stop (rather than shutdown) the VM on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Set to true to create a VM template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering VirtualMachine2 resources.\n","properties":{"cdrom":{"type":"object","additionalProperties":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom"},"description":"The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Set to true to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"description":{"type":"string","description":"The description of the VM.\n"},"name":{"type":"string","description":"The name of the VM. Doesn't have to be unique.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"purgeOnDestroy":{"type":"boolean","description":"Set to true to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rng":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng","description":"Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n"},"stopOnDestroy":{"type":"boolean","description":"Set to true to stop (rather than shutdown) the VM on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Set to true to create a VM template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga","description":"Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n"}},"type":"object"}},"proxmoxve:VM/virtualMachine:VirtualMachine":{"description":"\n\n## Import\n\nInstances can be imported using the `node_name` and the `vm_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:VM/virtualMachine:VirtualMachine ubuntu_vm first-node/4321\n```\n\n","properties":{"acpi":{"type":"boolean","description":"Whether to enable ACPI (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"agent":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent","description":"The QEMU agent configuration.\n"},"amdSev":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev","description":"Secure Encrypted Virtualization (SEV) features by AMD CPUs.\n"},"audioDevice":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice","description":"An audio device.\n"},"bios":{"type":"string","description":"The BIOS implementation (defaults to \u003cspan pulumi-lang-nodejs=\"`seabios`\" pulumi-lang-dotnet=\"`Seabios`\" pulumi-lang-go=\"`seabios`\" pulumi-lang-python=\"`seabios`\" pulumi-lang-yaml=\"`seabios`\" pulumi-lang-java=\"`seabios`\"\u003e`seabios`\u003c/span\u003e).\n"},"bootOrders":{"type":"array","items":{"type":"string"},"description":"Specify a list of devices to boot from in the order they appear in the list.\n"},"cdrom":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom","description":"The CD-ROM configuration.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachineClone:VirtualMachineClone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Whether to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"description":{"type":"string","description":"The description.\n"},"disks":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk"},"description":"A disk (multiple blocks supported).\n"},"efiDisk":{"$ref":"#/types/proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk","description":"The efi disk device (required if \u003cspan pulumi-lang-nodejs=\"`bios`\" pulumi-lang-dotnet=\"`Bios`\" pulumi-lang-go=\"`bios`\" pulumi-lang-python=\"`bios`\" pulumi-lang-yaml=\"`bios`\" pulumi-lang-java=\"`bios`\"\u003e`bios`\u003c/span\u003e is set\nto \u003cspan pulumi-lang-nodejs=\"`ovmf`\" pulumi-lang-dotnet=\"`Ovmf`\" pulumi-lang-go=\"`ovmf`\" pulumi-lang-python=\"`ovmf`\" pulumi-lang-yaml=\"`ovmf`\" pulumi-lang-java=\"`ovmf`\"\u003e`ovmf`\u003c/span\u003e)\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"hostpcis":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci"},"description":"A host PCI device mapping (multiple blocks supported).\n"},"hotplug":{"type":"string","description":"Selectively enable hotplug features. Supported values\nare \u003cspan pulumi-lang-nodejs=\"`cpu`\" pulumi-lang-dotnet=\"`Cpu`\" pulumi-lang-go=\"`cpu`\" pulumi-lang-python=\"`cpu`\" pulumi-lang-yaml=\"`cpu`\" pulumi-lang-java=\"`cpu`\"\u003e`cpu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`disk`\" pulumi-lang-dotnet=\"`Disk`\" pulumi-lang-go=\"`disk`\" pulumi-lang-python=\"`disk`\" pulumi-lang-yaml=\"`disk`\" pulumi-lang-java=\"`disk`\"\u003e`disk`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`memory`\" pulumi-lang-dotnet=\"`Memory`\" pulumi-lang-go=\"`memory`\" pulumi-lang-python=\"`memory`\" pulumi-lang-yaml=\"`memory`\" pulumi-lang-java=\"`memory`\"\u003e`memory`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`usb`\" pulumi-lang-dotnet=\"`Usb`\" pulumi-lang-go=\"`usb`\" pulumi-lang-python=\"`usb`\" pulumi-lang-yaml=\"`usb`\" pulumi-lang-java=\"`usb`\"\u003e`usb`\u003c/span\u003e. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable all,\nor \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e to enable all. If not set, PVE defaults to `network,disk,usb`.\n"},"initialization":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization","description":"The cloud-init configuration.\n"},"ipv4Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv4 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"ipv6Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv6 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"keyboardLayout":{"type":"string","description":"The keyboard layout (defaults to `en-us`).\n"},"kvmArguments":{"type":"string","description":"Arbitrary arguments passed to kvm.\n"},"macAddresses":{"type":"array","items":{"type":"string"},"description":"The MAC addresses published by the QEMU agent with fallback\nto the network device configuration, if the agent is disabled\n"},"machine":{"type":"string","description":"The VM machine type (defaults to \u003cspan pulumi-lang-nodejs=\"`pc`\" pulumi-lang-dotnet=\"`Pc`\" pulumi-lang-go=\"`pc`\" pulumi-lang-python=\"`pc`\" pulumi-lang-yaml=\"`pc`\" pulumi-lang-java=\"`pc`\"\u003e`pc`\u003c/span\u003e).\n"},"memory":{"$ref":"#/types/proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory","description":"The memory configuration.\n"},"migrate":{"type":"boolean","description":"Migrate the VM on node change instead of re-creating\nit (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The virtual machine name.\n"},"networkDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice"},"description":"A network device (multiple blocks supported).\n"},"networkInterfaceNames":{"type":"array","items":{"type":"string"},"description":"The network interface names published by the QEMU\nagent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"nodeName":{"type":"string","description":"The name of the node to assign the virtual machine\nto.\n"},"numas":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma"},"description":"The NUMA configuration.\n"},"onBoot":{"type":"boolean","description":"Specifies whether a VM will be started during system\nboot. (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the virtual machine to.\n"},"protection":{"type":"boolean","description":"Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"purgeOnDestroy":{"type":"boolean","description":"Whether to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"reboot":{"type":"boolean","description":"Reboot the VM after initial creation (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"rebootAfterUpdate":{"type":"boolean","description":"Reboot the VM after update if needed (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rngs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineRng:VirtualMachineRng"},"description":"The random number generator configuration. Can only be set by `root@pam.`\n"},"scsiHardware":{"type":"string","description":"The SCSI hardware type (defaults to\n`virtio-scsi-pci`).\n"},"serialDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice"},"description":"A serial device (multiple blocks supported).\n"},"smbios":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios","description":"The SMBIOS (type1) settings for the VM.\n"},"started":{"type":"boolean","description":"Whether to start the virtual machine (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup","description":"Defines startup and shutdown behavior of the VM.\n"},"stopOnDestroy":{"type":"boolean","description":"Whether to stop rather than shutdown on VM destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"tabletDevice":{"type":"boolean","description":"Whether to enable the USB tablet device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags of the VM. This is only meta information (\ndefaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in\ntemplate is not sorted, then Proxmox will always report a difference on the\nresource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle meta-argument to ignore\nchanges to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"timeoutClone":{"type":"integer","description":"Timeout for cloning a VM in seconds (defaults to\n1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a VM in seconds (defaults to\n1800).\n"},"timeoutMigrate":{"type":"integer","description":"Timeout for migrating the VM (defaults to\n1800).\n"},"timeoutMoveDisk":{"type":"integer","description":"Disk move timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create /\u003cspan pulumi-lang-nodejs=\" timeoutClone \" pulumi-lang-dotnet=\" TimeoutClone \" pulumi-lang-go=\" timeoutClone \" pulumi-lang-python=\" timeout_clone \" pulumi-lang-yaml=\" timeoutClone \" pulumi-lang-java=\" timeoutClone \"\u003e timeout_clone \u003c/span\u003e/ timeout_migrate) is used instead."},"timeoutReboot":{"type":"integer","description":"Timeout for rebooting a VM in seconds (defaults\nto 1800).\n"},"timeoutShutdownVm":{"type":"integer","description":"Timeout for shutting down a VM in seconds (\ndefaults to 1800).\n"},"timeoutStartVm":{"type":"integer","description":"Timeout for starting a VM in seconds (defaults\nto 1800).\n"},"timeoutStopVm":{"type":"integer","description":"Timeout for stopping a VM in seconds (defaults\nto 300).\n"},"tpmState":{"$ref":"#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState","description":"The TPM state device. The VM must be stopped before\nadding, removing, or moving a TPM state device; the provider automatically\nhandles the shutdown/start cycle. Changing \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e requires recreating the\nVM because Proxmox only supports setting the TPM version at creation time.\n"},"usbs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb"},"description":"A host USB device mapping (multiple blocks supported).\n"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVga:VirtualMachineVga","description":"The VGA configuration.\n"},"virtiofs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof"},"description":"Virtiofs share\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"},"watchdog":{"$ref":"#/types/proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog","description":"The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).\n"}},"required":["bootOrders","hotplug","ipv4Addresses","ipv6Addresses","macAddresses","name","networkDevices","networkInterfaceNames","nodeName","vga","vmId"],"inputProperties":{"acpi":{"type":"boolean","description":"Whether to enable ACPI (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"agent":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent","description":"The QEMU agent configuration.\n"},"amdSev":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev","description":"Secure Encrypted Virtualization (SEV) features by AMD CPUs.\n","willReplaceOnChanges":true},"audioDevice":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice","description":"An audio device.\n"},"bios":{"type":"string","description":"The BIOS implementation (defaults to \u003cspan pulumi-lang-nodejs=\"`seabios`\" pulumi-lang-dotnet=\"`Seabios`\" pulumi-lang-go=\"`seabios`\" pulumi-lang-python=\"`seabios`\" pulumi-lang-yaml=\"`seabios`\" pulumi-lang-java=\"`seabios`\"\u003e`seabios`\u003c/span\u003e).\n"},"bootOrders":{"type":"array","items":{"type":"string"},"description":"Specify a list of devices to boot from in the order they appear in the list.\n"},"cdrom":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom","description":"The CD-ROM configuration.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachineClone:VirtualMachineClone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Whether to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"description":{"type":"string","description":"The description.\n"},"disks":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk"},"description":"A disk (multiple blocks supported).\n"},"efiDisk":{"$ref":"#/types/proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk","description":"The efi disk device (required if \u003cspan pulumi-lang-nodejs=\"`bios`\" pulumi-lang-dotnet=\"`Bios`\" pulumi-lang-go=\"`bios`\" pulumi-lang-python=\"`bios`\" pulumi-lang-yaml=\"`bios`\" pulumi-lang-java=\"`bios`\"\u003e`bios`\u003c/span\u003e is set\nto \u003cspan pulumi-lang-nodejs=\"`ovmf`\" pulumi-lang-dotnet=\"`Ovmf`\" pulumi-lang-go=\"`ovmf`\" pulumi-lang-python=\"`ovmf`\" pulumi-lang-yaml=\"`ovmf`\" pulumi-lang-java=\"`ovmf`\"\u003e`ovmf`\u003c/span\u003e)\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"hostpcis":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci"},"description":"A host PCI device mapping (multiple blocks supported).\n"},"hotplug":{"type":"string","description":"Selectively enable hotplug features. Supported values\nare \u003cspan pulumi-lang-nodejs=\"`cpu`\" pulumi-lang-dotnet=\"`Cpu`\" pulumi-lang-go=\"`cpu`\" pulumi-lang-python=\"`cpu`\" pulumi-lang-yaml=\"`cpu`\" pulumi-lang-java=\"`cpu`\"\u003e`cpu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`disk`\" pulumi-lang-dotnet=\"`Disk`\" pulumi-lang-go=\"`disk`\" pulumi-lang-python=\"`disk`\" pulumi-lang-yaml=\"`disk`\" pulumi-lang-java=\"`disk`\"\u003e`disk`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`memory`\" pulumi-lang-dotnet=\"`Memory`\" pulumi-lang-go=\"`memory`\" pulumi-lang-python=\"`memory`\" pulumi-lang-yaml=\"`memory`\" pulumi-lang-java=\"`memory`\"\u003e`memory`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`usb`\" pulumi-lang-dotnet=\"`Usb`\" pulumi-lang-go=\"`usb`\" pulumi-lang-python=\"`usb`\" pulumi-lang-yaml=\"`usb`\" pulumi-lang-java=\"`usb`\"\u003e`usb`\u003c/span\u003e. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable all,\nor \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e to enable all. If not set, PVE defaults to `network,disk,usb`.\n"},"initialization":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization","description":"The cloud-init configuration.\n"},"keyboardLayout":{"type":"string","description":"The keyboard layout (defaults to `en-us`).\n"},"kvmArguments":{"type":"string","description":"Arbitrary arguments passed to kvm.\n"},"macAddresses":{"type":"array","items":{"type":"string"},"description":"The MAC addresses published by the QEMU agent with fallback\nto the network device configuration, if the agent is disabled\n"},"machine":{"type":"string","description":"The VM machine type (defaults to \u003cspan pulumi-lang-nodejs=\"`pc`\" pulumi-lang-dotnet=\"`Pc`\" pulumi-lang-go=\"`pc`\" pulumi-lang-python=\"`pc`\" pulumi-lang-yaml=\"`pc`\" pulumi-lang-java=\"`pc`\"\u003e`pc`\u003c/span\u003e).\n"},"memory":{"$ref":"#/types/proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory","description":"The memory configuration.\n"},"migrate":{"type":"boolean","description":"Migrate the VM on node change instead of re-creating\nit (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The virtual machine name.\n"},"networkDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice"},"description":"A network device (multiple blocks supported).\n"},"nodeName":{"type":"string","description":"The name of the node to assign the virtual machine\nto.\n"},"numas":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma"},"description":"The NUMA configuration.\n"},"onBoot":{"type":"boolean","description":"Specifies whether a VM will be started during system\nboot. (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the virtual machine to.\n"},"protection":{"type":"boolean","description":"Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"purgeOnDestroy":{"type":"boolean","description":"Whether to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"reboot":{"type":"boolean","description":"Reboot the VM after initial creation (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"rebootAfterUpdate":{"type":"boolean","description":"Reboot the VM after update if needed (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rngs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineRng:VirtualMachineRng"},"description":"The random number generator configuration. Can only be set by `root@pam.`\n"},"scsiHardware":{"type":"string","description":"The SCSI hardware type (defaults to\n`virtio-scsi-pci`).\n"},"serialDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice"},"description":"A serial device (multiple blocks supported).\n"},"smbios":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios","description":"The SMBIOS (type1) settings for the VM.\n"},"started":{"type":"boolean","description":"Whether to start the virtual machine (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup","description":"Defines startup and shutdown behavior of the VM.\n"},"stopOnDestroy":{"type":"boolean","description":"Whether to stop rather than shutdown on VM destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"tabletDevice":{"type":"boolean","description":"Whether to enable the USB tablet device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags of the VM. This is only meta information (\ndefaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in\ntemplate is not sorted, then Proxmox will always report a difference on the\nresource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle meta-argument to ignore\nchanges to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a VM in seconds (defaults to\n1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a VM in seconds (defaults to\n1800).\n"},"timeoutMigrate":{"type":"integer","description":"Timeout for migrating the VM (defaults to\n1800).\n"},"timeoutMoveDisk":{"type":"integer","description":"Disk move timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create /\u003cspan pulumi-lang-nodejs=\" timeoutClone \" pulumi-lang-dotnet=\" TimeoutClone \" pulumi-lang-go=\" timeoutClone \" pulumi-lang-python=\" timeout_clone \" pulumi-lang-yaml=\" timeoutClone \" pulumi-lang-java=\" timeoutClone \"\u003e timeout_clone \u003c/span\u003e/ timeout_migrate) is used instead."},"timeoutReboot":{"type":"integer","description":"Timeout for rebooting a VM in seconds (defaults\nto 1800).\n"},"timeoutShutdownVm":{"type":"integer","description":"Timeout for shutting down a VM in seconds (\ndefaults to 1800).\n"},"timeoutStartVm":{"type":"integer","description":"Timeout for starting a VM in seconds (defaults\nto 1800).\n"},"timeoutStopVm":{"type":"integer","description":"Timeout for stopping a VM in seconds (defaults\nto 300).\n"},"tpmState":{"$ref":"#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState","description":"The TPM state device. The VM must be stopped before\nadding, removing, or moving a TPM state device; the provider automatically\nhandles the shutdown/start cycle. Changing \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e requires recreating the\nVM because Proxmox only supports setting the TPM version at creation time.\n"},"usbs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb"},"description":"A host USB device mapping (multiple blocks supported).\n"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVga:VirtualMachineVga","description":"The VGA configuration.\n"},"virtiofs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof"},"description":"Virtiofs share\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"},"watchdog":{"$ref":"#/types/proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog","description":"The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).\n"}},"requiredInputs":["nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering VirtualMachine resources.\n","properties":{"acpi":{"type":"boolean","description":"Whether to enable ACPI (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"agent":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent","description":"The QEMU agent configuration.\n"},"amdSev":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev","description":"Secure Encrypted Virtualization (SEV) features by AMD CPUs.\n","willReplaceOnChanges":true},"audioDevice":{"$ref":"#/types/proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice","description":"An audio device.\n"},"bios":{"type":"string","description":"The BIOS implementation (defaults to \u003cspan pulumi-lang-nodejs=\"`seabios`\" pulumi-lang-dotnet=\"`Seabios`\" pulumi-lang-go=\"`seabios`\" pulumi-lang-python=\"`seabios`\" pulumi-lang-yaml=\"`seabios`\" pulumi-lang-java=\"`seabios`\"\u003e`seabios`\u003c/span\u003e).\n"},"bootOrders":{"type":"array","items":{"type":"string"},"description":"Specify a list of devices to boot from in the order they appear in the list.\n"},"cdrom":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom","description":"The CD-ROM configuration.\n"},"clone":{"$ref":"#/types/proxmoxve:VM/VirtualMachineClone:VirtualMachineClone","description":"The cloning configuration.\n"},"cpu":{"$ref":"#/types/proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu","description":"The CPU configuration.\n"},"deleteUnreferencedDisksOnDestroy":{"type":"boolean","description":"Whether to delete unreferenced disks on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"description":{"type":"string","description":"The description.\n"},"disks":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk"},"description":"A disk (multiple blocks supported).\n"},"efiDisk":{"$ref":"#/types/proxmoxve:VM/VirtualMachineEfiDisk:VirtualMachineEfiDisk","description":"The efi disk device (required if \u003cspan pulumi-lang-nodejs=\"`bios`\" pulumi-lang-dotnet=\"`Bios`\" pulumi-lang-go=\"`bios`\" pulumi-lang-python=\"`bios`\" pulumi-lang-yaml=\"`bios`\" pulumi-lang-java=\"`bios`\"\u003e`bios`\u003c/span\u003e is set\nto \u003cspan pulumi-lang-nodejs=\"`ovmf`\" pulumi-lang-dotnet=\"`Ovmf`\" pulumi-lang-go=\"`ovmf`\" pulumi-lang-python=\"`ovmf`\" pulumi-lang-yaml=\"`ovmf`\" pulumi-lang-java=\"`ovmf`\"\u003e`ovmf`\u003c/span\u003e)\n"},"hookScriptFileId":{"type":"string","description":"The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute).\n"},"hostpcis":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineHostpci:VirtualMachineHostpci"},"description":"A host PCI device mapping (multiple blocks supported).\n"},"hotplug":{"type":"string","description":"Selectively enable hotplug features. Supported values\nare \u003cspan pulumi-lang-nodejs=\"`cpu`\" pulumi-lang-dotnet=\"`Cpu`\" pulumi-lang-go=\"`cpu`\" pulumi-lang-python=\"`cpu`\" pulumi-lang-yaml=\"`cpu`\" pulumi-lang-java=\"`cpu`\"\u003e`cpu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`disk`\" pulumi-lang-dotnet=\"`Disk`\" pulumi-lang-go=\"`disk`\" pulumi-lang-python=\"`disk`\" pulumi-lang-yaml=\"`disk`\" pulumi-lang-java=\"`disk`\"\u003e`disk`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`memory`\" pulumi-lang-dotnet=\"`Memory`\" pulumi-lang-go=\"`memory`\" pulumi-lang-python=\"`memory`\" pulumi-lang-yaml=\"`memory`\" pulumi-lang-java=\"`memory`\"\u003e`memory`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`usb`\" pulumi-lang-dotnet=\"`Usb`\" pulumi-lang-go=\"`usb`\" pulumi-lang-python=\"`usb`\" pulumi-lang-yaml=\"`usb`\" pulumi-lang-java=\"`usb`\"\u003e`usb`\u003c/span\u003e. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable all,\nor \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e to enable all. If not set, PVE defaults to `network,disk,usb`.\n"},"initialization":{"$ref":"#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization","description":"The cloud-init configuration.\n"},"ipv4Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv4 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"ipv6Addresses":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The IPv6 addresses per network interface published by the\nQEMU agent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"keyboardLayout":{"type":"string","description":"The keyboard layout (defaults to `en-us`).\n"},"kvmArguments":{"type":"string","description":"Arbitrary arguments passed to kvm.\n"},"macAddresses":{"type":"array","items":{"type":"string"},"description":"The MAC addresses published by the QEMU agent with fallback\nto the network device configuration, if the agent is disabled\n"},"machine":{"type":"string","description":"The VM machine type (defaults to \u003cspan pulumi-lang-nodejs=\"`pc`\" pulumi-lang-dotnet=\"`Pc`\" pulumi-lang-go=\"`pc`\" pulumi-lang-python=\"`pc`\" pulumi-lang-yaml=\"`pc`\" pulumi-lang-java=\"`pc`\"\u003e`pc`\u003c/span\u003e).\n"},"memory":{"$ref":"#/types/proxmoxve:VM/VirtualMachineMemory:VirtualMachineMemory","description":"The memory configuration.\n"},"migrate":{"type":"boolean","description":"Migrate the VM on node change instead of re-creating\nit (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"name":{"type":"string","description":"The virtual machine name.\n"},"networkDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNetworkDevice:VirtualMachineNetworkDevice"},"description":"A network device (multiple blocks supported).\n"},"networkInterfaceNames":{"type":"array","items":{"type":"string"},"description":"The network interface names published by the QEMU\nagent (empty list when `agent.enabled` is \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"nodeName":{"type":"string","description":"The name of the node to assign the virtual machine\nto.\n"},"numas":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineNuma:VirtualMachineNuma"},"description":"The NUMA configuration.\n"},"onBoot":{"type":"boolean","description":"Specifies whether a VM will be started during system\nboot. (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"operatingSystem":{"$ref":"#/types/proxmoxve:VM/VirtualMachineOperatingSystem:VirtualMachineOperatingSystem","description":"The Operating System configuration.\n"},"poolId":{"type":"string","description":"The identifier for a pool to assign the virtual machine to.\n"},"protection":{"type":"boolean","description":"Sets the protection flag of the VM. This will disable the remove VM and remove disk operations (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"purgeOnDestroy":{"type":"boolean","description":"Whether to purge the VM from backup configurations on destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e)\n"},"reboot":{"type":"boolean","description":"Reboot the VM after initial creation (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n"},"rebootAfterUpdate":{"type":"boolean","description":"Reboot the VM after update if needed (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"rngs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineRng:VirtualMachineRng"},"description":"The random number generator configuration. Can only be set by `root@pam.`\n"},"scsiHardware":{"type":"string","description":"The SCSI hardware type (defaults to\n`virtio-scsi-pci`).\n"},"serialDevices":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSerialDevice:VirtualMachineSerialDevice"},"description":"A serial device (multiple blocks supported).\n"},"smbios":{"$ref":"#/types/proxmoxve:VM/VirtualMachineSmbios:VirtualMachineSmbios","description":"The SMBIOS (type1) settings for the VM.\n"},"started":{"type":"boolean","description":"Whether to start the virtual machine (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"startup":{"$ref":"#/types/proxmoxve:VM/VirtualMachineStartup:VirtualMachineStartup","description":"Defines startup and shutdown behavior of the VM.\n"},"stopOnDestroy":{"type":"boolean","description":"Whether to stop rather than shutdown on VM destroy (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n"},"tabletDevice":{"type":"boolean","description":"Whether to enable the USB tablet device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags of the VM. This is only meta information (\ndefaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in\ntemplate is not sorted, then Proxmox will always report a difference on the\nresource. You may use the \u003cspan pulumi-lang-nodejs=\"`ignoreChanges`\" pulumi-lang-dotnet=\"`IgnoreChanges`\" pulumi-lang-go=\"`ignoreChanges`\" pulumi-lang-python=\"`ignore_changes`\" pulumi-lang-yaml=\"`ignoreChanges`\" pulumi-lang-java=\"`ignoreChanges`\"\u003e`ignore_changes`\u003c/span\u003e lifecycle meta-argument to ignore\nchanges to this attribute.\n"},"template":{"type":"boolean","description":"Whether to create a template (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n","willReplaceOnChanges":true},"timeoutClone":{"type":"integer","description":"Timeout for cloning a VM in seconds (defaults to\n1800).\n"},"timeoutCreate":{"type":"integer","description":"Timeout for creating a VM in seconds (defaults to\n1800).\n"},"timeoutMigrate":{"type":"integer","description":"Timeout for migrating the VM (defaults to\n1800).\n"},"timeoutMoveDisk":{"type":"integer","description":"Disk move timeout","deprecationMessage":"This field is deprecated and will be removed in a future release. An overall operation timeout (timeout_create /\u003cspan pulumi-lang-nodejs=\" timeoutClone \" pulumi-lang-dotnet=\" TimeoutClone \" pulumi-lang-go=\" timeoutClone \" pulumi-lang-python=\" timeout_clone \" pulumi-lang-yaml=\" timeoutClone \" pulumi-lang-java=\" timeoutClone \"\u003e timeout_clone \u003c/span\u003e/ timeout_migrate) is used instead."},"timeoutReboot":{"type":"integer","description":"Timeout for rebooting a VM in seconds (defaults\nto 1800).\n"},"timeoutShutdownVm":{"type":"integer","description":"Timeout for shutting down a VM in seconds (\ndefaults to 1800).\n"},"timeoutStartVm":{"type":"integer","description":"Timeout for starting a VM in seconds (defaults\nto 1800).\n"},"timeoutStopVm":{"type":"integer","description":"Timeout for stopping a VM in seconds (defaults\nto 300).\n"},"tpmState":{"$ref":"#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState","description":"The TPM state device. The VM must be stopped before\nadding, removing, or moving a TPM state device; the provider automatically\nhandles the shutdown/start cycle. Changing \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e requires recreating the\nVM because Proxmox only supports setting the TPM version at creation time.\n"},"usbs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineUsb:VirtualMachineUsb"},"description":"A host USB device mapping (multiple blocks supported).\n"},"vga":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVga:VirtualMachineVga","description":"The VGA configuration.\n"},"virtiofs":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/VirtualMachineVirtiof:VirtualMachineVirtiof"},"description":"Virtiofs share\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"},"watchdog":{"$ref":"#/types/proxmoxve:VM/VirtualMachineWatchdog:VirtualMachineWatchdog","description":"The watchdog configuration. Once enabled (by a guest action), the watchdog must be periodically polled by an agent inside the guest or else the watchdog will reset the guest (or execute the respective action specified).\n"}},"type":"object"}},"proxmoxve:index/acl:Acl":{"description":"Manages ACLs on the Proxmox cluster.\n\nACLs are used to control access to resources in the Proxmox cluster.\nEach ACL consists of a path, a user, group or token, a role, and a flag to allow propagation of permissions.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsAutomation = new proxmoxve.permission.User(\"operations_automation\", {\n comment: \"Managed by Pulumi\",\n password: \"a-strong-password\",\n userId: \"operations-automation@pve\",\n});\nconst operationsMonitoring = new proxmoxve.permission.Role(\"operations_monitoring\", {\n roleId: \"operations-monitoring\",\n privileges: [\"VM.GuestAgent.Audit\"],\n});\nconst operationsAutomationMonitoring = new proxmoxve.Acl(\"operations_automation_monitoring\", {\n userId: operationsAutomation.userId,\n roleId: operationsMonitoring.roleId,\n path: \"/vms/1234\",\n propagate: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_automation = proxmoxve.permission.User(\"operations_automation\",\n comment=\"Managed by Pulumi\",\n password=\"a-strong-password\",\n user_id=\"operations-automation@pve\")\noperations_monitoring = proxmoxve.permission.Role(\"operations_monitoring\",\n role_id=\"operations-monitoring\",\n privileges=[\"VM.GuestAgent.Audit\"])\noperations_automation_monitoring = proxmoxve.Acl(\"operations_automation_monitoring\",\n user_id=operations_automation.user_id,\n role_id=operations_monitoring.role_id,\n path=\"/vms/1234\",\n propagate=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsAutomation = new ProxmoxVE.Permission.User(\"operations_automation\", new()\n {\n Comment = \"Managed by Pulumi\",\n Password = \"a-strong-password\",\n UserId = \"operations-automation@pve\",\n });\n\n var operationsMonitoring = new ProxmoxVE.Permission.Role(\"operations_monitoring\", new()\n {\n RoleId = \"operations-monitoring\",\n Privileges = new[]\n {\n \"VM.GuestAgent.Audit\",\n },\n });\n\n var operationsAutomationMonitoring = new ProxmoxVE.Acl(\"operations_automation_monitoring\", new()\n {\n UserId = operationsAutomation.UserId,\n RoleId = operationsMonitoring.RoleId,\n Path = \"/vms/1234\",\n Propagate = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toperationsAutomation, err := permission.NewUser(ctx, \"operations_automation\", \u0026permission.UserArgs{\n\t\t\tComment: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tPassword: pulumi.String(\"a-strong-password\"),\n\t\t\tUserId: pulumi.String(\"operations-automation@pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toperationsMonitoring, err := permission.NewRole(ctx, \"operations_monitoring\", \u0026permission.RoleArgs{\n\t\t\tRoleId: pulumi.String(\"operations-monitoring\"),\n\t\t\tPrivileges: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"VM.GuestAgent.Audit\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.NewAcl(ctx, \"operations_automation_monitoring\", \u0026proxmoxve.AclArgs{\n\t\t\tUserId: operationsAutomation.UserId,\n\t\t\tRoleId: operationsMonitoring.RoleId,\n\t\t\tPath: pulumi.String(\"/vms/1234\"),\n\t\t\tPropagate: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.User;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.UserArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.Role;\nimport io.muehlbachler.pulumi.proxmoxve.Permission.RoleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Acl;\nimport io.muehlbachler.pulumi.proxmoxve.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var operationsAutomation = new User(\"operationsAutomation\", UserArgs.builder()\n .comment(\"Managed by Pulumi\")\n .password(\"a-strong-password\")\n .userId(\"operations-automation@pve\")\n .build());\n\n var operationsMonitoring = new Role(\"operationsMonitoring\", RoleArgs.builder()\n .roleId(\"operations-monitoring\")\n .privileges(\"VM.GuestAgent.Audit\")\n .build());\n\n var operationsAutomationMonitoring = new Acl(\"operationsAutomationMonitoring\", AclArgs.builder()\n .userId(operationsAutomation.userId())\n .roleId(operationsMonitoring.roleId())\n .path(\"/vms/1234\")\n .propagate(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n operationsAutomation:\n type: proxmoxve:Permission:User\n name: operations_automation\n properties:\n comment: Managed by Pulumi\n password: a-strong-password\n userId: operations-automation@pve\n operationsMonitoring:\n type: proxmoxve:Permission:Role\n name: operations_monitoring\n properties:\n roleId: operations-monitoring\n privileges:\n - VM.GuestAgent.Audit\n operationsAutomationMonitoring:\n type: proxmoxve:Acl\n name: operations_automation_monitoring\n properties:\n userId: ${operationsAutomation.userId}\n roleId: ${operationsMonitoring.roleId}\n path: /vms/1234\n propagate: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nACL can be imported using its unique identifier, e.g.: {path}?{group|user@realm|user@realm!token}?{role}\n\n```sh\n$ pulumi import proxmoxve:index/acl:Acl operations_automation_monitoring /?monitor@pve?operations-monitoring\n```\n\n","properties":{"groupId":{"type":"string","description":"The group the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"path":{"type":"string","description":"Access control path\n"},"propagate":{"type":"boolean","description":"Allow to propagate (inherit) permissions.\n"},"roleId":{"type":"string","description":"The role to apply\n"},"tokenId":{"type":"string","description":"The token the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"userId":{"type":"string","description":"The user the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e)\n"}},"required":["path","propagate","roleId"],"inputProperties":{"groupId":{"type":"string","description":"The group the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"path":{"type":"string","description":"Access control path\n"},"propagate":{"type":"boolean","description":"Allow to propagate (inherit) permissions.\n"},"roleId":{"type":"string","description":"The role to apply\n"},"tokenId":{"type":"string","description":"The token the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"userId":{"type":"string","description":"The user the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e)\n"}},"requiredInputs":["path","roleId"],"stateInputs":{"description":"Input properties used for looking up and filtering Acl resources.\n","properties":{"groupId":{"type":"string","description":"The group the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"path":{"type":"string","description":"Access control path\n"},"propagate":{"type":"boolean","description":"Allow to propagate (inherit) permissions.\n"},"roleId":{"type":"string","description":"The role to apply\n"},"tokenId":{"type":"string","description":"The token the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`userId`\" pulumi-lang-dotnet=\"`UserId`\" pulumi-lang-go=\"`userId`\" pulumi-lang-python=\"`user_id`\" pulumi-lang-yaml=\"`userId`\" pulumi-lang-java=\"`userId`\"\u003e`user_id`\u003c/span\u003e)\n"},"userId":{"type":"string","description":"The user the ACL should apply to (mutually exclusive with \u003cspan pulumi-lang-nodejs=\"`groupId`\" pulumi-lang-dotnet=\"`GroupId`\" pulumi-lang-go=\"`groupId`\" pulumi-lang-python=\"`group_id`\" pulumi-lang-yaml=\"`groupId`\" pulumi-lang-java=\"`groupId`\"\u003e`group_id`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`tokenId`\" pulumi-lang-dotnet=\"`TokenId`\" pulumi-lang-go=\"`tokenId`\" pulumi-lang-python=\"`token_id`\" pulumi-lang-yaml=\"`tokenId`\" pulumi-lang-java=\"`tokenId`\"\u003e`token_id`\u003c/span\u003e)\n"}},"type":"object"}},"proxmoxve:index/acmeAccount:AcmeAccount":{"description":"Manages an ACME account in a Proxmox VE cluster.\n\n\u003e This resource requires `root@pam` authentication.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.AcmeAccount(\"example\", {\n name: \"example\",\n contact: \"example@email.com\",\n directory: \"https://acme-staging-v02.api.letsencrypt.org/directory\",\n tos: \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.AcmeAccount(\"example\",\n name=\"example\",\n contact=\"example@email.com\",\n directory=\"https://acme-staging-v02.api.letsencrypt.org/directory\",\n tos=\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.AcmeAccount(\"example\", new()\n {\n Name = \"example\",\n Contact = \"example@email.com\",\n Directory = \"https://acme-staging-v02.api.letsencrypt.org/directory\",\n Tos = \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewAcmeAccount(ctx, \"example\", \u0026proxmoxve.AcmeAccountArgs{\n\t\t\tName: pulumi.String(\"example\"),\n\t\t\tContact: pulumi.String(\"example@email.com\"),\n\t\t\tDirectory: pulumi.String(\"https://acme-staging-v02.api.letsencrypt.org/directory\"),\n\t\t\tTos: pulumi.String(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccount;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new AcmeAccount(\"example\", AcmeAccountArgs.builder()\n .name(\"example\")\n .contact(\"example@email.com\")\n .directory(\"https://acme-staging-v02.api.letsencrypt.org/directory\")\n .tos(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:AcmeAccount\n properties:\n name: example\n contact: example@email.com\n directory: https://acme-staging-v02.api.letsencrypt.org/directory\n tos: https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nACME accounts can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:index/acmeAccount:AcmeAccount example example\n```\n\n","properties":{"contact":{"type":"string","description":"The contact email addresses.\n"},"createdAt":{"type":"string","description":"The timestamp of the ACME account creation.\n"},"directory":{"type":"string","description":"The URL of the ACME CA directory endpoint.\n"},"eabHmacKey":{"type":"string","description":"The HMAC key for External Account Binding.\n"},"eabKid":{"type":"string","description":"The Key Identifier for External Account Binding.\n"},"location":{"type":"string","description":"The location of the ACME account.\n"},"name":{"type":"string","description":"The ACME account config file name.\n"},"tos":{"type":"string","description":"The URL of CA TermsOfService - setting this indicates agreement.\n"}},"required":["contact","createdAt","location","name"],"inputProperties":{"contact":{"type":"string","description":"The contact email addresses.\n"},"directory":{"type":"string","description":"The URL of the ACME CA directory endpoint.\n"},"eabHmacKey":{"type":"string","description":"The HMAC key for External Account Binding.\n"},"eabKid":{"type":"string","description":"The Key Identifier for External Account Binding.\n"},"name":{"type":"string","description":"The ACME account config file name.\n"},"tos":{"type":"string","description":"The URL of CA TermsOfService - setting this indicates agreement.\n"}},"requiredInputs":["contact"],"stateInputs":{"description":"Input properties used for looking up and filtering AcmeAccount resources.\n","properties":{"contact":{"type":"string","description":"The contact email addresses.\n"},"createdAt":{"type":"string","description":"The timestamp of the ACME account creation.\n"},"directory":{"type":"string","description":"The URL of the ACME CA directory endpoint.\n"},"eabHmacKey":{"type":"string","description":"The HMAC key for External Account Binding.\n"},"eabKid":{"type":"string","description":"The Key Identifier for External Account Binding.\n"},"location":{"type":"string","description":"The location of the ACME account.\n"},"name":{"type":"string","description":"The ACME account config file name.\n"},"tos":{"type":"string","description":"The URL of CA TermsOfService - setting this indicates agreement.\n"}},"type":"object"}},"proxmoxve:index/acmeDnsPlugin:AcmeDnsPlugin":{"description":"Manages an ACME plugin in a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.AcmeDnsPlugin(\"example\", {\n plugin: \"test\",\n api: \"aws\",\n data: {\n AWS_ACCESS_KEY_ID: \"EXAMPLE\",\n AWS_SECRET_ACCESS_KEY: \"EXAMPLE\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.AcmeDnsPlugin(\"example\",\n plugin=\"test\",\n api=\"aws\",\n data={\n \"AWS_ACCESS_KEY_ID\": \"EXAMPLE\",\n \"AWS_SECRET_ACCESS_KEY\": \"EXAMPLE\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.AcmeDnsPlugin(\"example\", new()\n {\n Plugin = \"test\",\n Api = \"aws\",\n Data = \n {\n { \"AWS_ACCESS_KEY_ID\", \"EXAMPLE\" },\n { \"AWS_SECRET_ACCESS_KEY\", \"EXAMPLE\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewAcmeDnsPlugin(ctx, \"example\", \u0026proxmoxve.AcmeDnsPluginArgs{\n\t\t\tPlugin: pulumi.String(\"test\"),\n\t\t\tApi: pulumi.String(\"aws\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"AWS_ACCESS_KEY_ID\": pulumi.String(\"EXAMPLE\"),\n\t\t\t\t\"AWS_SECRET_ACCESS_KEY\": pulumi.String(\"EXAMPLE\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPlugin;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPluginArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new AcmeDnsPlugin(\"example\", AcmeDnsPluginArgs.builder()\n .plugin(\"test\")\n .api(\"aws\")\n .data(Map.ofEntries(\n Map.entry(\"AWS_ACCESS_KEY_ID\", \"EXAMPLE\"),\n Map.entry(\"AWS_SECRET_ACCESS_KEY\", \"EXAMPLE\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:AcmeDnsPlugin\n properties:\n plugin: test\n api: aws\n data:\n AWS_ACCESS_KEY_ID: EXAMPLE\n AWS_SECRET_ACCESS_KEY: EXAMPLE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nACME accounts can be imported using their name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:index/acmeDnsPlugin:AcmeDnsPlugin example test\n```\n\n","properties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"SHA1 digest of the current configuration. Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"disable":{"type":"boolean","description":"Flag to disable the config.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"required":["api","digest","plugin","validationDelay"],"inputProperties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"SHA1 digest of the current configuration. Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"disable":{"type":"boolean","description":"Flag to disable the config.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"requiredInputs":["api","plugin"],"stateInputs":{"description":"Input properties used for looking up and filtering AcmeDnsPlugin resources.\n","properties":{"api":{"type":"string","description":"API plugin name.\n"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"DNS plugin data.\n"},"digest":{"type":"string","description":"SHA1 digest of the current configuration. Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n"},"disable":{"type":"boolean","description":"Flag to disable the config.\n"},"plugin":{"type":"string","description":"ACME Plugin ID name.\n"},"validationDelay":{"type":"integer","description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n"}},"type":"object"}},"proxmoxve:index/certifi:Certifi":{"description":"Manages the custom SSL/TLS certificate for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as tls from \"@pulumi/tls\";\n\nconst proxmoxVirtualEnvironmentCertificate = new tls.PrivateKey(\"proxmox_virtual_environment_certificate\", {\n algorithm: \"RSA\",\n rsaBits: 2048,\n});\nconst proxmoxVirtualEnvironmentCertificateSelfSignedCert = new tls.SelfSignedCert(\"proxmox_virtual_environment_certificate\", {\n keyAlgorithm: proxmoxVirtualEnvironmentCertificate.algorithm,\n privateKeyPem: proxmoxVirtualEnvironmentCertificate.privateKeyPem,\n subject: {\n commonName: \"example.com\",\n organization: \"Terraform Provider for Proxmox\",\n },\n validityPeriodHours: 8760,\n allowedUses: [\n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\",\n ],\n});\nconst example = new proxmoxve.Certifi(\"example\", {\n certificate: proxmoxVirtualEnvironmentCertificateSelfSignedCert.certPem,\n nodeName: \"first-node\",\n privateKey: proxmoxVirtualEnvironmentCertificate.privateKeyPem,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_tls as tls\n\nproxmox_virtual_environment_certificate = tls.PrivateKey(\"proxmox_virtual_environment_certificate\",\n algorithm=\"RSA\",\n rsa_bits=2048)\nproxmox_virtual_environment_certificate_self_signed_cert = tls.SelfSignedCert(\"proxmox_virtual_environment_certificate\",\n key_algorithm=proxmox_virtual_environment_certificate.algorithm,\n private_key_pem=proxmox_virtual_environment_certificate.private_key_pem,\n subject={\n \"common_name\": \"example.com\",\n \"organization\": \"Terraform Provider for Proxmox\",\n },\n validity_period_hours=8760,\n allowed_uses=[\n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\",\n ])\nexample = proxmoxve.Certifi(\"example\",\n certificate=proxmox_virtual_environment_certificate_self_signed_cert.cert_pem,\n node_name=\"first-node\",\n private_key=proxmox_virtual_environment_certificate.private_key_pem)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var proxmoxVirtualEnvironmentCertificate = new Tls.PrivateKey(\"proxmox_virtual_environment_certificate\", new()\n {\n Algorithm = \"RSA\",\n RsaBits = 2048,\n });\n\n var proxmoxVirtualEnvironmentCertificateSelfSignedCert = new Tls.SelfSignedCert(\"proxmox_virtual_environment_certificate\", new()\n {\n KeyAlgorithm = proxmoxVirtualEnvironmentCertificate.Algorithm,\n PrivateKeyPem = proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n Subject = new Tls.Inputs.SelfSignedCertSubjectArgs\n {\n CommonName = \"example.com\",\n Organization = \"Terraform Provider for Proxmox\",\n },\n ValidityPeriodHours = 8760,\n AllowedUses = new[]\n {\n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\",\n },\n });\n\n var example = new ProxmoxVE.Certifi(\"example\", new()\n {\n Certificate = proxmoxVirtualEnvironmentCertificateSelfSignedCert.CertPem,\n NodeName = \"first-node\",\n PrivateKey = proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproxmoxVirtualEnvironmentCertificate, err := tls.NewPrivateKey(ctx, \"proxmox_virtual_environment_certificate\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t\tRsaBits: pulumi.Int(2048),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproxmoxVirtualEnvironmentCertificateSelfSignedCert, err := tls.NewSelfSignedCert(ctx, \"proxmox_virtual_environment_certificate\", \u0026tls.SelfSignedCertArgs{\n\t\t\tKeyAlgorithm: proxmoxVirtualEnvironmentCertificate.Algorithm,\n\t\t\tPrivateKeyPem: proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n\t\t\tSubject: \u0026tls.SelfSignedCertSubjectArgs{\n\t\t\t\tCommonName: pulumi.String(\"example.com\"),\n\t\t\t\tOrganization: pulumi.String(\"Terraform Provider for Proxmox\"),\n\t\t\t},\n\t\t\tValidityPeriodHours: pulumi.Int(8760),\n\t\t\tAllowedUses: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"key_encipherment\"),\n\t\t\t\tpulumi.String(\"digital_signature\"),\n\t\t\t\tpulumi.String(\"server_auth\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.NewCertifi(ctx, \"example\", \u0026proxmoxve.CertifiArgs{\n\t\t\tCertificate: proxmoxVirtualEnvironmentCertificateSelfSignedCert.CertPem,\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tPrivateKey: proxmoxVirtualEnvironmentCertificate.PrivateKeyPem,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Certifi;\nimport io.muehlbachler.pulumi.proxmoxve.CertifiArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var proxmoxVirtualEnvironmentCertificate = new PrivateKey(\"proxmoxVirtualEnvironmentCertificate\", PrivateKeyArgs.builder()\n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var proxmoxVirtualEnvironmentCertificateSelfSignedCert = new SelfSignedCert(\"proxmoxVirtualEnvironmentCertificateSelfSignedCert\", SelfSignedCertArgs.builder()\n .keyAlgorithm(proxmoxVirtualEnvironmentCertificate.algorithm())\n .privateKeyPem(proxmoxVirtualEnvironmentCertificate.privateKeyPem())\n .subject(SelfSignedCertSubjectArgs.builder()\n .commonName(\"example.com\")\n .organization(\"Terraform Provider for Proxmox\")\n .build())\n .validityPeriodHours(8760)\n .allowedUses( \n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\")\n .build());\n\n var example = new Certifi(\"example\", CertifiArgs.builder()\n .certificate(proxmoxVirtualEnvironmentCertificateSelfSignedCert.certPem())\n .nodeName(\"first-node\")\n .privateKey(proxmoxVirtualEnvironmentCertificate.privateKeyPem())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Certifi\n properties:\n certificate: ${proxmoxVirtualEnvironmentCertificateSelfSignedCert.certPem}\n nodeName: first-node\n privateKey: ${proxmoxVirtualEnvironmentCertificate.privateKeyPem}\n proxmoxVirtualEnvironmentCertificate:\n type: tls:PrivateKey\n name: proxmox_virtual_environment_certificate\n properties:\n algorithm: RSA\n rsaBits: 2048\n proxmoxVirtualEnvironmentCertificateSelfSignedCert:\n type: tls:SelfSignedCert\n name: proxmox_virtual_environment_certificate\n properties:\n keyAlgorithm: ${proxmoxVirtualEnvironmentCertificate.algorithm}\n privateKeyPem: ${proxmoxVirtualEnvironmentCertificate.privateKeyPem}\n subject:\n commonName: example.com\n organization: Terraform Provider for Proxmox\n validityPeriodHours: 8760\n allowedUses:\n - key_encipherment\n - digital_signature\n - server_auth\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","properties":{"certificate":{"type":"string","description":"The PEM encoded certificate.\n"},"certificateChain":{"type":"string","description":"The PEM encoded certificate chain.\n"},"expirationDate":{"type":"string","description":"The expiration date (RFC 3339).\n"},"fileName":{"type":"string","description":"The file name.\n"},"issuer":{"type":"string","description":"The issuer.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing certificate"},"privateKey":{"type":"string","description":"The PEM encoded private key.\n","secret":true},"publicKeySize":{"type":"integer","description":"The public key size.\n"},"publicKeyType":{"type":"string","description":"The public key type.\n"},"sslFingerprint":{"type":"string","description":"The SSL fingerprint.\n"},"startDate":{"type":"string","description":"The start date (RFC 3339).\n"},"subject":{"type":"string","description":"The subject.\n"},"subjectAlternativeNames":{"type":"array","items":{"type":"string"},"description":"The subject alternative names.\n"}},"required":["certificate","expirationDate","fileName","issuer","nodeName","privateKey","publicKeySize","publicKeyType","sslFingerprint","startDate","subject","subjectAlternativeNames"],"inputProperties":{"certificate":{"type":"string","description":"The PEM encoded certificate.\n"},"certificateChain":{"type":"string","description":"The PEM encoded certificate chain.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing certificate"},"privateKey":{"type":"string","description":"The PEM encoded private key.\n","secret":true}},"requiredInputs":["certificate","nodeName","privateKey"],"stateInputs":{"description":"Input properties used for looking up and filtering Certifi resources.\n","properties":{"certificate":{"type":"string","description":"The PEM encoded certificate.\n"},"certificateChain":{"type":"string","description":"The PEM encoded certificate chain.\n"},"expirationDate":{"type":"string","description":"The expiration date (RFC 3339).\n"},"fileName":{"type":"string","description":"The file name.\n"},"issuer":{"type":"string","description":"The issuer.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"overwrite":{"type":"boolean","description":"Whether to overwrite an existing certificate"},"privateKey":{"type":"string","description":"The PEM encoded private key.\n","secret":true},"publicKeySize":{"type":"integer","description":"The public key size.\n"},"publicKeyType":{"type":"string","description":"The public key type.\n"},"sslFingerprint":{"type":"string","description":"The SSL fingerprint.\n"},"startDate":{"type":"string","description":"The start date (RFC 3339).\n"},"subject":{"type":"string","description":"The subject.\n"},"subjectAlternativeNames":{"type":"array","items":{"type":"string"},"description":"The subject alternative names.\n"}},"type":"object"}},"proxmoxve:index/dNS:DNS":{"description":"Manages the DNS configuration for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeDnsConfiguration = proxmoxve.Network.getDNS({\n nodeName: \"first-node\",\n});\nconst firstNodeDnsConfigurationDNS = new proxmoxve.DNS(\"first_node_dns_configuration\", {\n domain: firstNodeDnsConfiguration.then(firstNodeDnsConfiguration =\u003e firstNodeDnsConfiguration.domain),\n nodeName: firstNodeDnsConfiguration.then(firstNodeDnsConfiguration =\u003e firstNodeDnsConfiguration.nodeName),\n servers: [\n \"1.1.1.1\",\n \"1.0.0.1\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_dns_configuration = proxmoxve.Network.get_dns(node_name=\"first-node\")\nfirst_node_dns_configuration_dns = proxmoxve.DNS(\"first_node_dns_configuration\",\n domain=first_node_dns_configuration.domain,\n node_name=first_node_dns_configuration.node_name,\n servers=[\n \"1.1.1.1\",\n \"1.0.0.1\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeDnsConfiguration = ProxmoxVE.Network.GetDNS.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n var firstNodeDnsConfigurationDNS = new ProxmoxVE.DNS(\"first_node_dns_configuration\", new()\n {\n Domain = firstNodeDnsConfiguration.Apply(getDNSResult =\u003e getDNSResult.Domain),\n NodeName = firstNodeDnsConfiguration.Apply(getDNSResult =\u003e getDNSResult.NodeName),\n Servers = new[]\n {\n \"1.1.1.1\",\n \"1.0.0.1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfirstNodeDnsConfiguration, err := network.GetDNS(ctx, \u0026network.GetDNSArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.NewDNS(ctx, \"first_node_dns_configuration\", \u0026proxmoxve.DNSArgs{\n\t\t\tDomain: pulumi.String(firstNodeDnsConfiguration.Domain),\n\t\t\tNodeName: pulumi.String(firstNodeDnsConfiguration.NodeName),\n\t\t\tServers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"1.1.1.1\"),\n\t\t\t\tpulumi.String(\"1.0.0.1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetDNSArgs;\nimport io.muehlbachler.pulumi.proxmoxve.DNS;\nimport io.muehlbachler.pulumi.proxmoxve.DNSArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNodeDnsConfiguration = NetworkFunctions.getDNS(GetDNSArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n var firstNodeDnsConfigurationDNS = new DNS(\"firstNodeDnsConfigurationDNS\", DNSArgs.builder()\n .domain(firstNodeDnsConfiguration.domain())\n .nodeName(firstNodeDnsConfiguration.nodeName())\n .servers( \n \"1.1.1.1\",\n \"1.0.0.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n firstNodeDnsConfigurationDNS:\n type: proxmoxve:DNS\n name: first_node_dns_configuration\n properties:\n domain: ${firstNodeDnsConfiguration.domain}\n nodeName: ${firstNodeDnsConfiguration.nodeName}\n servers:\n - 1.1.1.1\n - 1.0.0.1\nvariables:\n firstNodeDnsConfiguration:\n fn::invoke:\n function: proxmoxve:Network:getDNS\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nBe careful not to use this resource multiple times for the same node.\n\n## Import\n\nInstances can be imported using the `node_name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:index/dNS:DNS first_node first-node\n```\n\n","properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"servers":{"type":"array","items":{"type":"string"},"description":"The DNS servers.\n"}},"required":["domain","nodeName"],"inputProperties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"servers":{"type":"array","items":{"type":"string"},"description":"The DNS servers.\n"}},"requiredInputs":["domain","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering DNS resources.\n","properties":{"domain":{"type":"string","description":"The DNS search domain.\n"},"nodeName":{"type":"string","description":"A node name.\n","willReplaceOnChanges":true},"servers":{"type":"array","items":{"type":"string"},"description":"The DNS servers.\n"}},"type":"object"}},"proxmoxve:index/hosts:Hosts":{"description":"Manages the host entries on a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeHostEntries = new proxmoxve.Hosts(\"first_node_host_entries\", {\n nodeName: \"first-node\",\n entries: [{\n address: \"127.0.0.1\",\n hostnames: [\n \"localhost\",\n \"localhost.localdomain\",\n ],\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_host_entries = proxmoxve.Hosts(\"first_node_host_entries\",\n node_name=\"first-node\",\n entries=[{\n \"address\": \"127.0.0.1\",\n \"hostnames\": [\n \"localhost\",\n \"localhost.localdomain\",\n ],\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeHostEntries = new ProxmoxVE.Hosts(\"first_node_host_entries\", new()\n {\n NodeName = \"first-node\",\n Entries = new[]\n {\n new ProxmoxVE.Inputs.HostsEntryArgs\n {\n Address = \"127.0.0.1\",\n Hostnames = new[]\n {\n \"localhost\",\n \"localhost.localdomain\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewHosts(ctx, \"first_node_host_entries\", \u0026proxmoxve.HostsArgs{\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tEntries: []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"address\": \"127.0.0.1\",\n\t\t\t\t\t\"hostnames\": []string{\n\t\t\t\t\t\t\"localhost\",\n\t\t\t\t\t\t\"localhost.localdomain\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Hosts;\nimport io.muehlbachler.pulumi.proxmoxve.HostsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firstNodeHostEntries = new Hosts(\"firstNodeHostEntries\", HostsArgs.builder()\n .nodeName(\"first-node\")\n .entries(List.of(Map.ofEntries(\n Map.entry(\"address\", \"127.0.0.1\"),\n Map.entry(\"hostnames\", List.of( \n \"localhost\",\n \"localhost.localdomain\"))\n )))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n firstNodeHostEntries:\n type: proxmoxve:Hosts\n name: first_node_host_entries\n properties:\n nodeName: first-node\n entries:\n - address: 127.0.0.1\n hostnames:\n - localhost\n - localhost.localdomain\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nBe careful not to use this resource multiple times for the same node.\n\n## Import\n\nInstances can be imported using the `node_name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:index/hosts:Hosts first_node_host_entries first-node\n```\n\n","properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"The IP addresses.\n"},"digest":{"type":"string","description":"The SHA1 digest.\n"},"entries":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"The host entries (conversion of \u003cspan pulumi-lang-nodejs=\"`addresses`\" pulumi-lang-dotnet=\"`Addresses`\" pulumi-lang-go=\"`addresses`\" pulumi-lang-python=\"`addresses`\" pulumi-lang-yaml=\"`addresses`\" pulumi-lang-java=\"`addresses`\"\u003e`addresses`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`hostnames`\" pulumi-lang-dotnet=\"`Hostnames`\" pulumi-lang-go=\"`hostnames`\" pulumi-lang-python=\"`hostnames`\" pulumi-lang-yaml=\"`hostnames`\" pulumi-lang-java=\"`hostnames`\"\u003e`hostnames`\u003c/span\u003e into\nobjects).\n"},"entry":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"A host entry (multiple blocks supported).\n"},"hostnames":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The hostnames associated with each of the IP addresses.\n"},"nodeName":{"type":"string","description":"A node name.\n"}},"required":["addresses","digest","entries","entry","hostnames","nodeName"],"inputProperties":{"entry":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"A host entry (multiple blocks supported).\n"},"nodeName":{"type":"string","description":"A node name.\n"}},"requiredInputs":["entry","nodeName"],"stateInputs":{"description":"Input properties used for looking up and filtering Hosts resources.\n","properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"The IP addresses.\n"},"digest":{"type":"string","description":"The SHA1 digest.\n"},"entries":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"The host entries (conversion of \u003cspan pulumi-lang-nodejs=\"`addresses`\" pulumi-lang-dotnet=\"`Addresses`\" pulumi-lang-go=\"`addresses`\" pulumi-lang-python=\"`addresses`\" pulumi-lang-yaml=\"`addresses`\" pulumi-lang-java=\"`addresses`\"\u003e`addresses`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`hostnames`\" pulumi-lang-dotnet=\"`Hostnames`\" pulumi-lang-go=\"`hostnames`\" pulumi-lang-python=\"`hostnames`\" pulumi-lang-yaml=\"`hostnames`\" pulumi-lang-java=\"`hostnames`\"\u003e`hostnames`\u003c/span\u003e into\nobjects).\n"},"entry":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/HostsEntry:HostsEntry"},"description":"A host entry (multiple blocks supported).\n"},"hostnames":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"The hostnames associated with each of the IP addresses.\n"},"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object"}},"proxmoxve:index/time:Time":{"description":"Manages the time for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeTime = new proxmoxve.Time(\"first_node_time\", {\n nodeName: \"first-node\",\n timeZone: \"UTC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_time = proxmoxve.Time(\"first_node_time\",\n node_name=\"first-node\",\n time_zone=\"UTC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeTime = new ProxmoxVE.Time(\"first_node_time\", new()\n {\n NodeName = \"first-node\",\n TimeZone = \"UTC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.NewTime(ctx, \"first_node_time\", \u0026proxmoxve.TimeArgs{\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Time;\nimport io.muehlbachler.pulumi.proxmoxve.TimeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firstNodeTime = new Time(\"firstNodeTime\", TimeArgs.builder()\n .nodeName(\"first-node\")\n .timeZone(\"UTC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n firstNodeTime:\n type: proxmoxve:Time\n name: first_node_time\n properties:\n nodeName: first-node\n timeZone: UTC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `node_name`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:index/time:Time first_node first-node\n```\n\n","properties":{"localTime":{"type":"string","description":"The node's local time.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"timeZone":{"type":"string","description":"The node's time zone.\n"},"utcTime":{"type":"string","description":"The node's time formatted as UTC.\n"}},"required":["localTime","nodeName","timeZone","utcTime"],"inputProperties":{"nodeName":{"type":"string","description":"A node name.\n"},"timeZone":{"type":"string","description":"The node's time zone.\n"}},"requiredInputs":["nodeName","timeZone"],"stateInputs":{"description":"Input properties used for looking up and filtering Time resources.\n","properties":{"localTime":{"type":"string","description":"The node's local time.\n"},"nodeName":{"type":"string","description":"A node name.\n"},"timeZone":{"type":"string","description":"The node's time zone.\n"},"utcTime":{"type":"string","description":"The node's time formatted as UTC.\n"}},"type":"object"}}},"functions":{"proxmoxve:Acme/getAccount:getAccount":{"description":"Retrieves information about a specific ACME account.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch all ACME accounts...\nconst all = proxmoxve.Acme.getAccounts({});\n// ...which we will go through in order to fetch the whole data on each account.\nconst example = all.then(all =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: proxmoxve.Acme.getAccount({\n name: __value,\n}) })));\nexport const dataProxmoxVirtualEnvironmentAcmeAccount = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch all ACME accounts...\nall = proxmoxve.Acme.get_accounts()\n# ...which we will go through in order to fetch the whole data on each account.\nexample = {__key: proxmoxve.Acme.get_account(name=__value) for __key, __value in all.accounts}\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmeAccount\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch all ACME accounts...\n var all = ProxmoxVE.Acme.GetAccounts.Invoke();\n\n // ...which we will go through in order to fetch the whole data on each account.\n var example = ;\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmeAccount\"] = example,\n };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getAccount.\n","properties":{"name":{"type":"string","description":"The identifier of the ACME account to read.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getAccount.\n","properties":{"account":{"$ref":"#/types/proxmoxve:Acme/getAccountAccount:getAccountAccount","description":"The ACME account information.\n"},"directory":{"description":"The directory URL of the ACME account.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"location":{"description":"The location URL of the ACME account.\n","type":"string"},"name":{"description":"The identifier of the ACME account to read.\n","type":"string"},"tos":{"description":"The URL of the terms of service of the ACME account.\n","type":"string"}},"required":["account","directory","location","tos","id"],"type":"object"}},"proxmoxve:Acme/getAccounts:getAccounts":{"description":"Retrieves the list of ACME accounts.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Acme.getAccounts({});\nexport const dataProxmoxVirtualEnvironmentAcmeAccounts = example.then(example =\u003e example.accounts);\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Acme.get_accounts()\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmeAccounts\", example.accounts)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Acme.GetAccounts.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmeAccounts\"] = example.Apply(getAccountsResult =\u003e getAccountsResult.Accounts),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := acme.GetAccounts(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentAcmeAccounts\", example.Accounts)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Acme.AcmeFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AcmeFunctions.getAccounts(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentAcmeAccounts\", example.accounts());\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Acme:getAccounts\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentAcmeAccounts: ${example.accounts}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getAccounts.\n","properties":{"accounts":{"description":"The identifiers of the ACME accounts.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"}},"required":["accounts","id"],"type":"object"}},"proxmoxve:Acme/getPlugin:getPlugin":{"description":"Retrieves a single ACME plugin by plugin ID name.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Acme.getPlugin({\n plugin: \"standalone\",\n});\nexport const dataProxmoxVirtualEnvironmentAcmePlugin = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Acme.get_plugin(plugin=\"standalone\")\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmePlugin\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Acme.GetPlugin.Invoke(new()\n {\n Plugin = \"standalone\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmePlugin\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := acme.GetPlugin(ctx, \u0026acme.GetPluginArgs{\n\t\t\tPlugin: \"standalone\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentAcmePlugin\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Acme.AcmeFunctions;\nimport com.pulumi.proxmoxve.Acme.inputs.GetPluginArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AcmeFunctions.getPlugin(GetPluginArgs.builder()\n .plugin(\"standalone\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentAcmePlugin\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Acme:getPlugin\n arguments:\n plugin: standalone\noutputs:\n dataProxmoxVirtualEnvironmentAcmePlugin: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getPlugin.\n","properties":{"plugin":{"type":"string","description":"ACME Plugin ID name.\n"}},"type":"object","required":["plugin"]},"outputs":{"description":"A collection of values returned by getPlugin.\n","properties":{"api":{"description":"API plugin name.\n","type":"string"},"data":{"additionalProperties":{"type":"string"},"description":"DNS plugin data.\n","type":"object"},"digest":{"description":"Prevent changes if current configuration file has a different digest. This can be used to prevent concurrent modifications.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"plugin":{"description":"ACME Plugin ID name.\n","type":"string"},"type":{"description":"ACME challenge type (dns, standalone).\n","type":"string"},"validationDelay":{"description":"Extra delay in seconds to wait before requesting validation. Allows to cope with a long TTL of DNS records (0 - 172800).\n","type":"integer"}},"required":["api","data","digest","plugin","type","validationDelay","id"],"type":"object"}},"proxmoxve:Acme/getPlugins:getPlugins":{"description":"Retrieves the list of ACME plugins.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Acme.getPlugins({});\nexport const dataProxmoxVirtualEnvironmentAcmePlugins = example.then(example =\u003e example.plugins);\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Acme.get_plugins()\npulumi.export(\"dataProxmoxVirtualEnvironmentAcmePlugins\", example.plugins)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Acme.GetPlugins.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentAcmePlugins\"] = example.Apply(getPluginsResult =\u003e getPluginsResult.Plugins),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := acme.GetPlugins(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentAcmePlugins\", example.Plugins)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Acme.AcmeFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AcmeFunctions.getPlugins(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentAcmePlugins\", example.plugins());\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Acme:getPlugins\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentAcmePlugins: ${example.plugins}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getPlugins.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"plugins":{"description":"List of ACME plugins\n","items":{"$ref":"#/types/proxmoxve:Acme/getPluginsPlugin:getPluginsPlugin"},"type":"array"}},"required":["plugins","id"],"type":"object"}},"proxmoxve:Apt/getRepository:getRepository":{"description":"Retrieves an APT repository from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Apt.getRepository({\n filePath: \"/etc/apt/sources.list\",\n index: 0,\n node: \"pve\",\n});\nexport const proxmoxVirtualEnvironmentAptRepository = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Apt.get_repository(file_path=\"/etc/apt/sources.list\",\n index=0,\n node=\"pve\")\npulumi.export(\"proxmoxVirtualEnvironmentAptRepository\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Apt.GetRepository.Invoke(new()\n {\n FilePath = \"/etc/apt/sources.list\",\n Index = 0,\n Node = \"pve\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentAptRepository\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := apt.GetRepository(ctx, \u0026apt.GetRepositoryArgs{\n\t\t\tFilePath: \"/etc/apt/sources.list\",\n\t\t\tIndex: 0,\n\t\t\tNode: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"proxmoxVirtualEnvironmentAptRepository\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Apt.AptFunctions;\nimport com.pulumi.proxmoxve.Apt.inputs.GetRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = AptFunctions.getRepository(GetRepositoryArgs.builder()\n .filePath(\"/etc/apt/sources.list\")\n .index(0)\n .node(\"pve\")\n .build());\n\n ctx.export(\"proxmoxVirtualEnvironmentAptRepository\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Apt:getRepository\n arguments:\n filePath: /etc/apt/sources.list\n index: 0\n node: pve\noutputs:\n proxmoxVirtualEnvironmentAptRepository: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRepository.\n","properties":{"filePath":{"type":"string","description":"The absolute path of the source list file that contains this repository.\n"},"index":{"type":"integer","description":"The index within the defining source list file.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"type":"object","required":["filePath","index","node"]},"outputs":{"description":"A collection of values returned by getRepository.\n","properties":{"comment":{"description":"The associated comment.\n","type":"string"},"components":{"description":"The list of components.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Indicates the activation status.\n","type":"boolean"},"filePath":{"description":"The absolute path of the source list file that contains this repository.\n","type":"string"},"fileType":{"description":"The format of the defining source list file.\n","type":"string"},"id":{"description":"The unique identifier of this APT repository data source.\n","type":"string"},"index":{"description":"The index within the defining source list file.\n","type":"integer"},"node":{"description":"The name of the target Proxmox VE node.\n","type":"string"},"packageTypes":{"description":"The list of package types.\n","items":{"type":"string"},"type":"array"},"suites":{"description":"The list of package distributions.\n","items":{"type":"string"},"type":"array"},"uris":{"description":"The list of repository URIs.\n","items":{"type":"string"},"type":"array"}},"required":["comment","components","enabled","filePath","fileType","id","index","node","packageTypes","suites","uris"],"type":"object"}},"proxmoxve:Apt/standard/getRepository:getRepository":{"description":"Retrieves an APT standard repository from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Apt.standard.getRepository({\n handle: \"no-subscription\",\n node: \"pve\",\n});\nexport const proxmoxVirtualEnvironmentAptStandardRepository = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Apt.standard.get_repository(handle=\"no-subscription\",\n node=\"pve\")\npulumi.export(\"proxmoxVirtualEnvironmentAptStandardRepository\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Apt.Standard.GetRepository.Invoke(new()\n {\n Handle = \"no-subscription\",\n Node = \"pve\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentAptStandardRepository\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := apt.GetRepository(ctx, \u0026standard.GetRepositoryArgs{\n\t\t\tHandle: \"no-subscription\",\n\t\t\tNode: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"proxmoxVirtualEnvironmentAptStandardRepository\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Apt_standard.Apt_standardFunctions;\nimport com.pulumi.proxmoxve.Apt.inputs.GetRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Apt_standardFunctions.getRepository(GetRepositoryArgs.builder()\n .handle(\"no-subscription\")\n .node(\"pve\")\n .build());\n\n ctx.export(\"proxmoxVirtualEnvironmentAptStandardRepository\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Apt/standard:getRepository\n arguments:\n handle: no-subscription\n node: pve\noutputs:\n proxmoxVirtualEnvironmentAptStandardRepository: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRepository.\n","properties":{"handle":{"type":"string","description":"The handle of the APT standard repository.\n"},"node":{"type":"string","description":"The name of the target Proxmox VE node.\n"}},"type":"object","required":["handle","node"]},"outputs":{"description":"A collection of values returned by getRepository.\n","properties":{"description":{"description":"The description of the APT standard repository.\n","type":"string"},"filePath":{"description":"The absolute path of the source list file that contains this standard repository.\n","type":"string"},"handle":{"description":"The handle of the APT standard repository.\n","type":"string"},"id":{"description":"The unique identifier of this APT standard repository data source.\n","type":"string"},"index":{"description":"The index within the defining source list file.\n","type":"integer"},"name":{"description":"The name of the APT standard repository.\n","type":"string"},"node":{"description":"The name of the target Proxmox VE node.\n","type":"string"},"status":{"description":"Indicates the activation status.\n","type":"integer"}},"required":["description","filePath","handle","id","index","name","node","status"],"type":"object"}},"proxmoxve:Cluster/getNodes:getNodes":{"description":"Retrieves information about all available nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableNodes = proxmoxve.Cluster.getNodes({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_nodes = proxmoxve.Cluster.get_nodes()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableNodes = ProxmoxVE.Cluster.GetNodes.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/cluster\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cluster.GetNodes(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Cluster.ClusterFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableNodes = ClusterFunctions.getNodes(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableNodes:\n fn::invoke:\n function: proxmoxve:Cluster:getNodes\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getNodes.\n","properties":{"cpuCounts":{"description":"The CPU count for each node.\n","items":{"type":"integer"},"type":"array"},"cpuUtilizations":{"description":"The CPU utilization on each node.\n","items":{"type":"number"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"memoryAvailables":{"description":"The memory available on each node.\n","items":{"type":"integer"},"type":"array"},"memoryUseds":{"description":"The memory used on each node.\n","items":{"type":"integer"},"type":"array"},"names":{"description":"The node names.\n","items":{"type":"string"},"type":"array"},"onlines":{"description":"Whether a node is online.\n","items":{"type":"boolean"},"type":"array"},"sslFingerprints":{"description":"The SSL fingerprint for each node.\n","items":{"type":"string"},"type":"array"},"supportLevels":{"description":"The support level for each node.\n","items":{"type":"string"},"type":"array"},"uptimes":{"description":"The uptime in seconds for each node.\n","items":{"type":"integer"},"type":"array"}},"required":["cpuCounts","cpuUtilizations","memoryAvailables","memoryUseds","names","onlines","sslFingerprints","supportLevels","uptimes","id"],"type":"object"}},"proxmoxve:HA/getHAGroup:getHAGroup":{"description":"Retrieves information about a specific High Availability group.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch the set of HA group identifiers...\nconst all = proxmoxve.HA.getHAGroups({});\n// ...which we will go through in order to fetch the whole data on each group.\nconst example = all.then(all =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: proxmoxve.HA.getHAGroup({\n group: __value,\n}) })));\nexport const proxmoxVirtualEnvironmentHagroupsFull = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch the set of HA group identifiers...\nall = proxmoxve.HA.get_ha_groups()\n# ...which we will go through in order to fetch the whole data on each group.\nexample = {__key: proxmoxve.HA.get_ha_group(group=__value) for __key, __value in all.group_ids}\npulumi.export(\"proxmoxVirtualEnvironmentHagroupsFull\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch the set of HA group identifiers...\n var all = ProxmoxVE.HA.GetHAGroups.Invoke();\n\n // ...which we will go through in order to fetch the whole data on each group.\n var example = ;\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentHagroupsFull\"] = example,\n };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHAGroup.\n","properties":{"group":{"type":"string","description":"The identifier of the High Availability group to read.\n"}},"type":"object","required":["group"]},"outputs":{"description":"A collection of values returned by getHAGroup.\n","properties":{"comment":{"description":"The comment associated with this group\n","type":"string"},"group":{"description":"The identifier of the High Availability group to read.\n","type":"string"},"id":{"description":"The unique identifier of this resource.\n","type":"string"},"noFailback":{"description":"A flag that indicates that failing back to a higher priority node is disabled for this HA group.\n","type":"boolean"},"nodes":{"additionalProperties":{"type":"integer"},"description":"The member nodes for this group. They are provided as a map, where the keys are the node names and the values represent their priority: integers for known priorities or \u003cspan pulumi-lang-nodejs=\"`null`\" pulumi-lang-dotnet=\"`Null`\" pulumi-lang-go=\"`null`\" pulumi-lang-python=\"`null`\" pulumi-lang-yaml=\"`null`\" pulumi-lang-java=\"`null`\"\u003e`null`\u003c/span\u003e for unset priorities.\n","type":"object"},"restricted":{"description":"A flag that indicates that other nodes may not be used to run resources associated to this HA group.\n","type":"boolean"}},"required":["comment","group","id","noFailback","nodes","restricted"],"type":"object"}},"proxmoxve:HA/getHAGroups:getHAGroups":{"description":"Retrieves the list of High Availability groups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.HA.getHAGroups({});\nexport const dataProxmoxVirtualEnvironmentHagroups = example.then(example =\u003e example.groupIds);\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.HA.get_ha_groups()\npulumi.export(\"dataProxmoxVirtualEnvironmentHagroups\", example.group_ids)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.HA.GetHAGroups.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHagroups\"] = example.Apply(getHAGroupsResult =\u003e getHAGroupsResult.GroupIds),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := ha.GetHAGroups(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHagroups\", example.GroupIds)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.HA.HAFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = HAFunctions.getHAGroups(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHagroups\", example.groupIds());\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:HA:getHAGroups\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentHagroups: ${example.groupIds}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getHAGroups.\n","properties":{"groupIds":{"description":"The identifiers of the High Availability groups.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The unique identifier of this resource.\n","type":"string"}},"required":["groupIds","id"],"type":"object"}},"proxmoxve:HA/getHAResource:getHAResource":{"description":"Retrieves the list of High Availability resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch the set of all HA resource identifiers...\nconst all = proxmoxve.HA.getHAResources({});\n// ...which we will go through in order to fetch the whole record for each resource.\nconst example = all.then(all =\u003e .reduce((__obj, [__key, __value]) =\u003e ({ ...__obj, [__key]: proxmoxve.HA.getHAResource({\n resourceId: __value,\n}) })));\nexport const proxmoxVirtualEnvironmentHaresourcesFull = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch the set of all HA resource identifiers...\nall = proxmoxve.HA.get_ha_resources()\n# ...which we will go through in order to fetch the whole record for each resource.\nexample = {__key: proxmoxve.HA.get_ha_resource(resource_id=__value) for __key, __value in all.resource_ids}\npulumi.export(\"proxmoxVirtualEnvironmentHaresourcesFull\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch the set of all HA resource identifiers...\n var all = ProxmoxVE.HA.GetHAResources.Invoke();\n\n // ...which we will go through in order to fetch the whole record for each resource.\n var example = ;\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"proxmoxVirtualEnvironmentHaresourcesFull\"] = example,\n };\n});\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHAResource.\n","properties":{"resourceId":{"type":"string","description":"The identifier of the Proxmox HA resource to read.\n"}},"type":"object","required":["resourceId"]},"outputs":{"description":"A collection of values returned by getHAResource.\n","properties":{"comment":{"description":"The comment associated with this resource.\n","type":"string"},"group":{"description":"The identifier of the High Availability group this resource is a member of.\n","type":"string"},"id":{"description":"The unique identifier of this resource.\n","type":"string"},"maxRelocate":{"description":"The maximal number of relocation attempts.\n","type":"integer"},"maxRestart":{"description":"The maximal number of restart attempts.\n","type":"integer"},"resourceId":{"description":"The identifier of the Proxmox HA resource to read.\n","type":"string"},"state":{"description":"The desired state of the resource.\n","type":"string"},"type":{"description":"The type of High Availability resource (\u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`ct`\" pulumi-lang-dotnet=\"`Ct`\" pulumi-lang-go=\"`ct`\" pulumi-lang-python=\"`ct`\" pulumi-lang-yaml=\"`ct`\" pulumi-lang-java=\"`ct`\"\u003e`ct`\u003c/span\u003e).\n","type":"string"}},"required":["comment","group","id","maxRelocate","maxRestart","resourceId","state","type"],"type":"object"}},"proxmoxve:HA/getHAResources:getHAResources":{"description":"Retrieves the list of High Availability resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// This will fetch the set of all HA resource identifiers.\nconst exampleAll = proxmoxve.HA.getHAResources({});\n// This will fetch the set of HA resource identifiers that correspond to virtual machines.\nconst exampleVm = proxmoxve.HA.getHAResources({\n type: \"vm\",\n});\nexport const dataProxmoxVirtualEnvironmentHaresources = {\n all: exampleAll.then(exampleAll =\u003e exampleAll.resourceIds),\n vms: exampleVm.then(exampleVm =\u003e exampleVm.resourceIds),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# This will fetch the set of all HA resource identifiers.\nexample_all = proxmoxve.HA.get_ha_resources()\n# This will fetch the set of HA resource identifiers that correspond to virtual machines.\nexample_vm = proxmoxve.HA.get_ha_resources(type=\"vm\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHaresources\", {\n \"all\": example_all.resource_ids,\n \"vms\": example_vm.resource_ids,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // This will fetch the set of all HA resource identifiers.\n var exampleAll = ProxmoxVE.HA.GetHAResources.Invoke();\n\n // This will fetch the set of HA resource identifiers that correspond to virtual machines.\n var exampleVm = ProxmoxVE.HA.GetHAResources.Invoke(new()\n {\n Type = \"vm\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHaresources\"] = \n {\n { \"all\", exampleAll.Apply(getHAResourcesResult =\u003e getHAResourcesResult.ResourceIds) },\n { \"vms\", exampleVm.Apply(getHAResourcesResult =\u003e getHAResourcesResult.ResourceIds) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ha\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\n// This will fetch the set of all HA resource identifiers.\nexampleAll, err := ha.GetHAResources(ctx, \u0026ha.GetHAResourcesArgs{\n}, nil);\nif err != nil {\nreturn err\n}\n// This will fetch the set of HA resource identifiers that correspond to virtual machines.\nexampleVm, err := ha.GetHAResources(ctx, \u0026ha.GetHAResourcesArgs{\nType: pulumi.StringRef(\"vm\"),\n}, nil);\nif err != nil {\nreturn err\n}\nctx.Export(\"dataProxmoxVirtualEnvironmentHaresources\", interface{}Map{\n\"all\": exampleAll.ResourceIds,\n\"vms\": exampleVm.ResourceIds,\n})\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.HA.HAFunctions;\nimport com.pulumi.proxmoxve.HA.inputs.GetHAResourcesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // This will fetch the set of all HA resource identifiers.\n final var exampleAll = HAFunctions.getHAResources(GetHAResourcesArgs.builder()\n .build());\n\n // This will fetch the set of HA resource identifiers that correspond to virtual machines.\n final var exampleVm = HAFunctions.getHAResources(GetHAResourcesArgs.builder()\n .type(\"vm\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHaresources\", Map.ofEntries(\n Map.entry(\"all\", exampleAll.resourceIds()),\n Map.entry(\"vms\", exampleVm.resourceIds())\n ));\n }\n}\n```\n```yaml\nvariables:\n # This will fetch the set of all HA resource identifiers.\n exampleAll:\n fn::invoke:\n function: proxmoxve:HA:getHAResources\n arguments: {}\n # This will fetch the set of HA resource identifiers that correspond to virtual machines.\n exampleVm:\n fn::invoke:\n function: proxmoxve:HA:getHAResources\n arguments:\n type: vm\noutputs:\n dataProxmoxVirtualEnvironmentHaresources:\n all: ${exampleAll.resourceIds}\n vms: ${exampleVm.resourceIds}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHAResources.\n","properties":{"type":{"type":"string","description":"The type of High Availability resources to fetch (\u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`ct`\" pulumi-lang-dotnet=\"`Ct`\" pulumi-lang-go=\"`ct`\" pulumi-lang-python=\"`ct`\" pulumi-lang-yaml=\"`ct`\" pulumi-lang-java=\"`ct`\"\u003e`ct`\u003c/span\u003e). All resources will be fetched if this option is unset.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getHAResources.\n","properties":{"id":{"description":"The unique identifier of this resource.\n","type":"string"},"resourceIds":{"description":"The identifiers of the High Availability resources.\n","items":{"type":"string"},"type":"array"},"type":{"description":"The type of High Availability resources to fetch (\u003cspan pulumi-lang-nodejs=\"`vm`\" pulumi-lang-dotnet=\"`Vm`\" pulumi-lang-go=\"`vm`\" pulumi-lang-python=\"`vm`\" pulumi-lang-yaml=\"`vm`\" pulumi-lang-java=\"`vm`\"\u003e`vm`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`ct`\" pulumi-lang-dotnet=\"`Ct`\" pulumi-lang-go=\"`ct`\" pulumi-lang-python=\"`ct`\" pulumi-lang-yaml=\"`ct`\" pulumi-lang-java=\"`ct`\"\u003e`ct`\u003c/span\u003e). All resources will be fetched if this option is unset.\n","type":"string"}},"required":["id","resourceIds"],"type":"object"}},"proxmoxve:Hardware/getMappings:getMappings":{"description":"Retrieves a list of hardware mapping resources.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example_dir = proxmoxve.Hardware.getMappings({\n checkNode: \"pve\",\n type: \"dir\",\n});\nconst example_pci = proxmoxve.Hardware.getMappings({\n checkNode: \"pve\",\n type: \"pci\",\n});\nconst example_usb = proxmoxve.Hardware.getMappings({\n checkNode: \"pve\",\n type: \"usb\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingsPci = example_pci;\nexport const dataProxmoxVirtualEnvironmentHardwareMappingsUsb = example_usb;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample_dir = proxmoxve.Hardware.get_mappings(check_node=\"pve\",\n type=\"dir\")\nexample_pci = proxmoxve.Hardware.get_mappings(check_node=\"pve\",\n type=\"pci\")\nexample_usb = proxmoxve.Hardware.get_mappings(check_node=\"pve\",\n type=\"usb\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\", example_pci)\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\", example_usb)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example_dir = ProxmoxVE.Hardware.GetMappings.Invoke(new()\n {\n CheckNode = \"pve\",\n Type = \"dir\",\n });\n\n var example_pci = ProxmoxVE.Hardware.GetMappings.Invoke(new()\n {\n CheckNode = \"pve\",\n Type = \"pci\",\n });\n\n var example_usb = ProxmoxVE.Hardware.GetMappings.Invoke(new()\n {\n CheckNode = \"pve\",\n Type = \"usb\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\"] = example_pci,\n [\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\"] = example_usb,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := hardware.GetMappings(ctx, \u0026hardware.GetMappingsArgs{\n\t\t\tCheckNode: pulumi.StringRef(\"pve\"),\n\t\t\tType: \"dir\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample_pci, err := hardware.GetMappings(ctx, \u0026hardware.GetMappingsArgs{\n\t\t\tCheckNode: pulumi.StringRef(\"pve\"),\n\t\t\tType: \"pci\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample_usb, err := hardware.GetMappings(ctx, \u0026hardware.GetMappingsArgs{\n\t\t\tCheckNode: pulumi.StringRef(\"pve\"),\n\t\t\tType: \"usb\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\", example_pci)\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\", example_usb)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware.HardwareFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetMappingsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example-dir = HardwareFunctions.getMappings(GetMappingsArgs.builder()\n .checkNode(\"pve\")\n .type(\"dir\")\n .build());\n\n final var example-pci = HardwareFunctions.getMappings(GetMappingsArgs.builder()\n .checkNode(\"pve\")\n .type(\"pci\")\n .build());\n\n final var example-usb = HardwareFunctions.getMappings(GetMappingsArgs.builder()\n .checkNode(\"pve\")\n .type(\"usb\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsPci\", example_pci);\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingsUsb\", example_usb);\n }\n}\n```\n```yaml\nvariables:\n example-dir:\n fn::invoke:\n function: proxmoxve:Hardware:getMappings\n arguments:\n checkNode: pve\n type: dir\n example-pci:\n fn::invoke:\n function: proxmoxve:Hardware:getMappings\n arguments:\n checkNode: pve\n type: pci\n example-usb:\n fn::invoke:\n function: proxmoxve:Hardware:getMappings\n arguments:\n checkNode: pve\n type: usb\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingsPci: ${[\"example-pci\"]}\n dataProxmoxVirtualEnvironmentHardwareMappingsUsb: ${[\"example-usb\"]}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getMappings.\n","properties":{"checkNode":{"type":"string","description":"The name of the node whose configurations should be checked for correctness.\n"},"type":{"type":"string","description":"The type of the hardware mappings.\n"}},"type":"object","required":["type"]},"outputs":{"description":"A collection of values returned by getMappings.\n","properties":{"checkNode":{"description":"The name of the node whose configurations should be checked for correctness.\n","type":"string"},"checks":{"description":"Might contain relevant diagnostics about incorrect configurations.\n","items":{"$ref":"#/types/proxmoxve:Hardware/getMappingsCheck:getMappingsCheck"},"type":"array"},"id":{"description":"The unique identifier of this hardware mappings data source.\n","type":"string"},"ids":{"description":"The identifiers of the hardware mappings.\n","items":{"type":"string"},"type":"array"},"type":{"description":"The type of the hardware mappings.\n","type":"string"}},"required":["checks","id","ids","type"],"type":"object"}},"proxmoxve:Hardware/mapping/getDir:getDir":{"description":"Retrieves a directory mapping from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Hardware.mapping.getDir({\n name: \"example\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingDir = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Hardware.mapping.get_dir(name=\"example\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingDir\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Hardware.Mapping.GetDir.Invoke(new()\n {\n Name = \"example\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingDir\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := hardware.GetDir(ctx, \u0026mapping.GetDirArgs{\n\t\t\tName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingDir\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware_mapping.Hardware_mappingFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetDirArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Hardware_mappingFunctions.getDir(GetDirArgs.builder()\n .name(\"example\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingDir\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Hardware/mapping:getDir\n arguments:\n name: example\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingDir: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getDir.\n","properties":{"name":{"type":"string","description":"The name of this directory mapping.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getDir.\n","properties":{"comment":{"description":"The comment of this directory mapping.\n","type":"string"},"id":{"description":"The unique identifier of this directory mapping data source.\n","type":"string"},"maps":{"description":"The actual map of devices for the directory mapping.\n","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/getDirMap:getDirMap"},"type":"array"},"name":{"description":"The name of this directory mapping.\n","type":"string"}},"required":["comment","id","maps","name"],"type":"object"}},"proxmoxve:Hardware/mapping/getPci:getPci":{"description":"Retrieves a PCI hardware mapping from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Hardware.mapping.getPci({\n name: \"example\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingPci = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Hardware.mapping.get_pci(name=\"example\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingPci\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Hardware.Mapping.GetPci.Invoke(new()\n {\n Name = \"example\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingPci\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := hardware.GetPci(ctx, \u0026mapping.GetPciArgs{\n\t\t\tName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingPci\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware_mapping.Hardware_mappingFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetPciArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Hardware_mappingFunctions.getPci(GetPciArgs.builder()\n .name(\"example\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingPci\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Hardware/mapping:getPci\n arguments:\n name: example\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingPci: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getPci.\n","properties":{"name":{"type":"string","description":"The name of this PCI hardware mapping.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getPci.\n","properties":{"comment":{"description":"The comment of this PCI hardware mapping.\n","type":"string"},"id":{"description":"The unique identifier of this PCI hardware mapping data source.\n","type":"string"},"maps":{"description":"The actual map of devices for the hardware mapping.\n","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/getPciMap:getPciMap"},"type":"array"},"mediatedDevices":{"description":"Indicates whether to use with mediated devices.\n","type":"boolean"},"name":{"description":"The name of this PCI hardware mapping.\n","type":"string"}},"required":["comment","id","maps","mediatedDevices","name"],"type":"object"}},"proxmoxve:Hardware/mapping/getUsb:getUsb":{"description":"Retrieves a USB hardware mapping from a Proxmox VE cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Hardware.mapping.getUsb({\n name: \"example\",\n});\nexport const dataProxmoxVirtualEnvironmentHardwareMappingUsb = example;\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Hardware.mapping.get_usb(name=\"example\")\npulumi.export(\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Hardware.Mapping.GetUsb.Invoke(new()\n {\n Name = \"example\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/hardware\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := hardware.GetUsb(ctx, \u0026mapping.GetUsbArgs{\n\t\t\tName: \"example\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Hardware_mapping.Hardware_mappingFunctions;\nimport com.pulumi.proxmoxve.Hardware.inputs.GetUsbArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = Hardware_mappingFunctions.getUsb(GetUsbArgs.builder()\n .name(\"example\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentHardwareMappingUsb\", example);\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Hardware/mapping:getUsb\n arguments:\n name: example\noutputs:\n dataProxmoxVirtualEnvironmentHardwareMappingUsb: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUsb.\n","properties":{"name":{"type":"string","description":"The name of this USB hardware mapping.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getUsb.\n","properties":{"comment":{"description":"The comment of this USB hardware mapping.\n","type":"string"},"id":{"description":"The unique identifier of this USB hardware mapping data source.\n","type":"string"},"maps":{"description":"The actual map of devices for the hardware mapping.\n","items":{"$ref":"#/types/proxmoxve:Hardware/mapping/getUsbMap:getUsbMap"},"type":"array"},"name":{"description":"The name of this USB hardware mapping.\n","type":"string"}},"required":["comment","id","maps","name"],"type":"object"}},"proxmoxve:Metrics/getServer:getServer":{"description":"Retrieves information about a specific PVE metric server.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Metrics.getServer({\n name: \"example_influxdb\",\n});\nexport const dataProxmoxVirtualEnvironmentMetricsServer = {\n server: example.then(example =\u003e example.server),\n port: example.then(example =\u003e example.port),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Metrics.get_server(name=\"example_influxdb\")\npulumi.export(\"dataProxmoxVirtualEnvironmentMetricsServer\", {\n \"server\": example.server,\n \"port\": example.port,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Metrics.GetServer.Invoke(new()\n {\n Name = \"example_influxdb\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentMetricsServer\"] = \n {\n { \"server\", example.Apply(getServerResult =\u003e getServerResult.Server) },\n { \"port\", example.Apply(getServerResult =\u003e getServerResult.Port) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/metrics\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := metrics.GetServer(ctx, \u0026metrics.GetServerArgs{\n\t\t\tName: \"example_influxdb\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentMetricsServer\", pulumi.Map{\n\t\t\t\"server\": example.Server,\n\t\t\t\"port\": example.Port,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Metrics.MetricsFunctions;\nimport com.pulumi.proxmoxve.Metrics.inputs.GetServerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = MetricsFunctions.getServer(GetServerArgs.builder()\n .name(\"example_influxdb\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentMetricsServer\", Map.ofEntries(\n Map.entry(\"server\", example.server()),\n Map.entry(\"port\", example.port())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Metrics:getServer\n arguments:\n name: example_influxdb\noutputs:\n dataProxmoxVirtualEnvironmentMetricsServer:\n server: ${example.server}\n port: ${example.port}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getServer.\n","properties":{"name":{"type":"string","description":"Unique name that will be ID of this metric server in PVE.\n"}},"type":"object","required":["name"]},"outputs":{"description":"A collection of values returned by getServer.\n","properties":{"disable":{"description":"Indicates if the metric server is disabled.\n","type":"boolean"},"id":{"description":"The unique identifier of this resource.\n","type":"string"},"name":{"description":"Unique name that will be ID of this metric server in PVE.\n","type":"string"},"opentelemetryPath":{"description":"OpenTelemetry endpoint path (e.g., `/v1/metrics`).\n","type":"string"},"opentelemetryProto":{"description":"Protocol for OpenTelemetry. Choice is between \u003cspan pulumi-lang-nodejs=\"`http`\" pulumi-lang-dotnet=\"`Http`\" pulumi-lang-go=\"`http`\" pulumi-lang-python=\"`http`\" pulumi-lang-yaml=\"`http`\" pulumi-lang-java=\"`http`\"\u003e`http`\u003c/span\u003e | \u003cspan pulumi-lang-nodejs=\"`https`\" pulumi-lang-dotnet=\"`Https`\" pulumi-lang-go=\"`https`\" pulumi-lang-python=\"`https`\" pulumi-lang-yaml=\"`https`\" pulumi-lang-java=\"`https`\"\u003e`https`\u003c/span\u003e.\n","type":"string"},"port":{"description":"Server network port.\n","type":"integer"},"server":{"description":"Server dns name or IP address.\n","type":"string"},"type":{"description":"Plugin type. Either \u003cspan pulumi-lang-nodejs=\"`graphite`\" pulumi-lang-dotnet=\"`Graphite`\" pulumi-lang-go=\"`graphite`\" pulumi-lang-python=\"`graphite`\" pulumi-lang-yaml=\"`graphite`\" pulumi-lang-java=\"`graphite`\"\u003e`graphite`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`influxdb`\" pulumi-lang-dotnet=\"`Influxdb`\" pulumi-lang-go=\"`influxdb`\" pulumi-lang-python=\"`influxdb`\" pulumi-lang-yaml=\"`influxdb`\" pulumi-lang-java=\"`influxdb`\"\u003e`influxdb`\u003c/span\u003e, or \u003cspan pulumi-lang-nodejs=\"`opentelemetry`\" pulumi-lang-dotnet=\"`Opentelemetry`\" pulumi-lang-go=\"`opentelemetry`\" pulumi-lang-python=\"`opentelemetry`\" pulumi-lang-yaml=\"`opentelemetry`\" pulumi-lang-java=\"`opentelemetry`\"\u003e`opentelemetry`\u003c/span\u003e.\n","type":"string"}},"required":["disable","id","name","opentelemetryPath","opentelemetryProto","port","server","type"],"type":"object"}},"proxmoxve:Network/getDNS:getDNS":{"description":"Retrieves the DNS configuration for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNode = proxmoxve.Network.getDNS({\n nodeName: \"first-node\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node = proxmoxve.Network.get_dns(node_name=\"first-node\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNode = ProxmoxVE.Network.GetDNS.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.GetDNS(ctx, \u0026network.GetDNSArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetDNSArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNode = NetworkFunctions.getDNS(GetDNSArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n firstNode:\n fn::invoke:\n function: proxmoxve:Network:getDNS\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getDNS.\n","properties":{"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getDNS.\n","properties":{"domain":{"description":"The DNS search domain.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"type":"string"},"servers":{"description":"The DNS servers.\n","items":{"type":"string"},"type":"array"}},"required":["domain","nodeName","servers","id"],"type":"object"}},"proxmoxve:Network/getHosts:getHosts":{"description":"Retrieves all the host entries from a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeHostEntries = proxmoxve.Network.getHosts({\n nodeName: \"first-node\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_host_entries = proxmoxve.Network.get_hosts(node_name=\"first-node\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeHostEntries = ProxmoxVE.Network.GetHosts.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.GetHosts(ctx, \u0026network.GetHostsArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetHostsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNodeHostEntries = NetworkFunctions.getHosts(GetHostsArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n firstNodeHostEntries:\n fn::invoke:\n function: proxmoxve:Network:getHosts\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getHosts.\n","properties":{"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getHosts.\n","properties":{"addresses":{"description":"The IP addresses.\n","items":{"type":"string"},"type":"array"},"digest":{"description":"The SHA1 digest.\n","type":"string"},"entries":{"description":"The host entries (conversion of \u003cspan pulumi-lang-nodejs=\"`addresses`\" pulumi-lang-dotnet=\"`Addresses`\" pulumi-lang-go=\"`addresses`\" pulumi-lang-python=\"`addresses`\" pulumi-lang-yaml=\"`addresses`\" pulumi-lang-java=\"`addresses`\"\u003e`addresses`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`hostnames`\" pulumi-lang-dotnet=\"`Hostnames`\" pulumi-lang-go=\"`hostnames`\" pulumi-lang-python=\"`hostnames`\" pulumi-lang-yaml=\"`hostnames`\" pulumi-lang-java=\"`hostnames`\"\u003e`hostnames`\u003c/span\u003e into\nobjects).\n","items":{"$ref":"#/types/proxmoxve:Network/getHostsEntry:getHostsEntry"},"type":"array"},"hostnames":{"description":"The hostnames associated with each of the IP addresses.\n","items":{"items":{"type":"string"},"type":"array"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"type":"string"}},"required":["addresses","digest","entries","hostnames","nodeName","id"],"type":"object"}},"proxmoxve:Network/getTime:getTime":{"description":"Retrieves the current time for a specific node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst firstNodeTime = proxmoxve.Network.getTime({\n nodeName: \"first-node\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfirst_node_time = proxmoxve.Network.get_time(node_name=\"first-node\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firstNodeTime = ProxmoxVE.Network.GetTime.Invoke(new()\n {\n NodeName = \"first-node\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.GetTime(ctx, \u0026network.GetTimeArgs{\n\t\t\tNodeName: \"first-node\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport com.pulumi.proxmoxve.Network.inputs.GetTimeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var firstNodeTime = NetworkFunctions.getTime(GetTimeArgs.builder()\n .nodeName(\"first-node\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n firstNodeTime:\n fn::invoke:\n function: proxmoxve:Network:getTime\n arguments:\n nodeName: first-node\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getTime.\n","properties":{"nodeName":{"type":"string","description":"A node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getTime.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"localTime":{"description":"The node's local time.\n","type":"string"},"nodeName":{"type":"string"},"timeZone":{"description":"The node's time zone.\n","type":"string"},"utcTime":{"description":"The node's local time formatted as UTC.\n","type":"string"}},"required":["localTime","nodeName","timeZone","utcTime","id"],"type":"object"}},"proxmoxve:Network/getVersion:getVersion":{"description":"Retrieves API version details.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Network.getVersion({});\nexport const dataProxmoxVirtualEnvironmentVersion = {\n release: example.then(example =\u003e example.release),\n repositoryId: example.then(example =\u003e example.repositoryId),\n version: example.then(example =\u003e example.version),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Network.get_version()\npulumi.export(\"dataProxmoxVirtualEnvironmentVersion\", {\n \"release\": example.release,\n \"repositoryId\": example.repository_id,\n \"version\": example.version,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Network.GetVersion.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentVersion\"] = \n {\n { \"release\", example.Apply(getVersionResult =\u003e getVersionResult.Release) },\n { \"repositoryId\", example.Apply(getVersionResult =\u003e getVersionResult.RepositoryId) },\n { \"version\", example.Apply(getVersionResult =\u003e getVersionResult.Version) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := network.GetVersion(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentVersion\", pulumi.StringMap{\n\t\t\t\"release\": example.Release,\n\t\t\t\"repositoryId\": example.RepositoryId,\n\t\t\t\"version\": example.Version,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Network.NetworkFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = NetworkFunctions.getVersion(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentVersion\", Map.ofEntries(\n Map.entry(\"release\", example.release()),\n Map.entry(\"repositoryId\", example.repositoryId()),\n Map.entry(\"version\", example.version())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Network:getVersion\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentVersion:\n release: ${example.release}\n repositoryId: ${example.repositoryId}\n version: ${example.version}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getVersion.\n","properties":{"id":{"description":"Placeholder identifier attribute.\n","type":"string"},"release":{"description":"The current Proxmox VE point release in `x.y` format.\n","type":"string"},"repositoryId":{"description":"The short git revision from which this version was build.\n","type":"string"},"version":{"description":"The full pve-manager package version of this node.\n","type":"string"}},"required":["id","release","repositoryId","version"],"type":"object"}},"proxmoxve:Permission/getGroup:getGroup":{"description":"Retrieves information about a specific user group.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsTeam = proxmoxve.Permission.getGroup({\n groupId: \"operations-team\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_team = proxmoxve.Permission.get_group(group_id=\"operations-team\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsTeam = ProxmoxVE.Permission.GetGroup.Invoke(new()\n {\n GroupId = \"operations-team\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetGroup(ctx, \u0026permission.GetGroupArgs{\n\t\t\tGroupId: \"operations-team\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsTeam = PermissionFunctions.getGroup(GetGroupArgs.builder()\n .groupId(\"operations-team\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsTeam:\n fn::invoke:\n function: proxmoxve:Permission:getGroup\n arguments:\n groupId: operations-team\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getGroup.\n","properties":{"groupId":{"type":"string","description":"The group identifier.\n"}},"type":"object","required":["groupId"]},"outputs":{"description":"A collection of values returned by getGroup.\n","properties":{"acls":{"description":"The access control list.\n","items":{"$ref":"#/types/proxmoxve:Permission/getGroupAcl:getGroupAcl"},"type":"array"},"comment":{"description":"The group comment.\n","type":"string"},"groupId":{"type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"members":{"description":"The group members as a list with `username@realm` entries.\n","items":{"type":"string"},"type":"array"}},"required":["acls","comment","groupId","members","id"],"type":"object"}},"proxmoxve:Permission/getGroups:getGroups":{"description":"Retrieves basic information about all available user groups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableGroups = proxmoxve.Permission.getGroups({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_groups = proxmoxve.Permission.get_groups()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableGroups = ProxmoxVE.Permission.GetGroups.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetGroups(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableGroups = PermissionFunctions.getGroups(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableGroups:\n fn::invoke:\n function: proxmoxve:Permission:getGroups\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getGroups.\n","properties":{"comments":{"description":"The group comments.\n","items":{"type":"string"},"type":"array"},"groupIds":{"description":"The group identifiers.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"}},"required":["comments","groupIds","id"],"type":"object"}},"proxmoxve:Permission/getPool:getPool":{"description":"Retrieves information about a specific resource pool.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsPool = proxmoxve.Permission.getPool({\n poolId: \"operations\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_pool = proxmoxve.Permission.get_pool(pool_id=\"operations\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsPool = ProxmoxVE.Permission.GetPool.Invoke(new()\n {\n PoolId = \"operations\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetPool(ctx, \u0026permission.GetPoolArgs{\n\t\t\tPoolId: \"operations\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetPoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsPool = PermissionFunctions.getPool(GetPoolArgs.builder()\n .poolId(\"operations\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsPool:\n fn::invoke:\n function: proxmoxve:Permission:getPool\n arguments:\n poolId: operations\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getPool.\n","properties":{"poolId":{"type":"string","description":"The pool identifier.\n"}},"type":"object","required":["poolId"]},"outputs":{"description":"A collection of values returned by getPool.\n","properties":{"comment":{"description":"The pool comment.\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"members":{"description":"The pool members.\n","items":{"$ref":"#/types/proxmoxve:Permission/getPoolMember:getPoolMember"},"type":"array"},"poolId":{"type":"string"}},"required":["comment","members","poolId","id"],"type":"object"}},"proxmoxve:Permission/getPools:getPools":{"description":"Retrieves the identifiers for all the available resource pools.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availablePools = proxmoxve.Permission.getPools({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_pools = proxmoxve.Permission.get_pools()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availablePools = ProxmoxVE.Permission.GetPools.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetPools(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availablePools = PermissionFunctions.getPools(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availablePools:\n fn::invoke:\n function: proxmoxve:Permission:getPools\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getPools.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"poolIds":{"description":"The pool identifiers.\n","items":{"type":"string"},"type":"array"}},"required":["poolIds","id"],"type":"object"}},"proxmoxve:Permission/getRole:getRole":{"description":"Retrieves information about a specific role.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsRole = proxmoxve.Permission.getRole({\n roleId: \"operations\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_role = proxmoxve.Permission.get_role(role_id=\"operations\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsRole = ProxmoxVE.Permission.GetRole.Invoke(new()\n {\n RoleId = \"operations\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetRole(ctx, \u0026permission.GetRoleArgs{\n\t\t\tRoleId: \"operations\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsRole = PermissionFunctions.getRole(GetRoleArgs.builder()\n .roleId(\"operations\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsRole:\n fn::invoke:\n function: proxmoxve:Permission:getRole\n arguments:\n roleId: operations\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getRole.\n","properties":{"roleId":{"type":"string","description":"The role identifier.\n"}},"type":"object","required":["roleId"]},"outputs":{"description":"A collection of values returned by getRole.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"privileges":{"description":"The role privileges\n","items":{"type":"string"},"type":"array"},"roleId":{"type":"string"}},"required":["privileges","roleId","id"],"type":"object"}},"proxmoxve:Permission/getRoles:getRoles":{"description":"Retrieves information about all the available roles.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableRoles = proxmoxve.Permission.getRoles({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_roles = proxmoxve.Permission.get_roles()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableRoles = ProxmoxVE.Permission.GetRoles.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetRoles(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableRoles = PermissionFunctions.getRoles(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableRoles:\n fn::invoke:\n function: proxmoxve:Permission:getRoles\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getRoles.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"privileges":{"description":"The role privileges.\n","items":{"items":{"type":"string"},"type":"array"},"type":"array"},"roleIds":{"description":"The role identifiers.\n","items":{"type":"string"},"type":"array"},"specials":{"description":"Whether the role is special (built-in).\n","items":{"type":"boolean"},"type":"array"}},"required":["privileges","roleIds","specials","id"],"type":"object"}},"proxmoxve:Permission/getUser:getUser":{"description":"Retrieves information about a specific user.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst operationsUser = proxmoxve.Permission.getUser({\n userId: \"operation@pam\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\noperations_user = proxmoxve.Permission.get_user(user_id=\"operation@pam\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var operationsUser = ProxmoxVE.Permission.GetUser.Invoke(new()\n {\n UserId = \"operation@pam\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetUser(ctx, \u0026permission.GetUserArgs{\n\t\t\tUserId: \"operation@pam\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport com.pulumi.proxmoxve.Permission.inputs.GetUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var operationsUser = PermissionFunctions.getUser(GetUserArgs.builder()\n .userId(\"operation@pam\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n operationsUser:\n fn::invoke:\n function: proxmoxve:Permission:getUser\n arguments:\n userId: operation@pam\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getUser.\n","properties":{"userId":{"type":"string","description":"The user identifier.\n"}},"type":"object","required":["userId"]},"outputs":{"description":"A collection of values returned by getUser.\n","properties":{"acls":{"description":"The access control list.\n","items":{"$ref":"#/types/proxmoxve:Permission/getUserAcl:getUserAcl"},"type":"array"},"comment":{"description":"The user comment.\n","type":"string"},"email":{"description":"The user's email address.\n","type":"string"},"enabled":{"description":"Whether the user account is enabled.\n","type":"boolean"},"expirationDate":{"description":"The user account's expiration date (RFC 3339).\n","type":"string"},"firstName":{"description":"The user's first name.\n","type":"string"},"groups":{"description":"The user's groups.\n","items":{"type":"string"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"keys":{"description":"The user's keys.\n","type":"string"},"lastName":{"description":"The user's last name.\n","type":"string"},"userId":{"type":"string"}},"required":["acls","comment","email","enabled","expirationDate","firstName","groups","keys","lastName","userId","id"],"type":"object"}},"proxmoxve:Permission/getUsers:getUsers":{"description":"Retrieves information about all the available users.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst availableUsers = proxmoxve.Permission.getUsers({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\navailable_users = proxmoxve.Permission.get_users()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var availableUsers = ProxmoxVE.Permission.GetUsers.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/permission\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := permission.GetUsers(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Permission.PermissionFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var availableUsers = PermissionFunctions.getUsers(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n }\n}\n```\n```yaml\nvariables:\n availableUsers:\n fn::invoke:\n function: proxmoxve:Permission:getUsers\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getUsers.\n","properties":{"comments":{"description":"The user comments.\n","items":{"type":"string"},"type":"array"},"emails":{"description":"The users' email addresses.\n","items":{"type":"string"},"type":"array"},"enableds":{"description":"Whether a user account is enabled.\n","items":{"type":"boolean"},"type":"array"},"expirationDates":{"description":"The user accounts' expiration dates (RFC 3339).\n","items":{"type":"string"},"type":"array"},"firstNames":{"description":"The users' first names.\n","items":{"type":"string"},"type":"array"},"groups":{"description":"The users' groups.\n","items":{"items":{"type":"string"},"type":"array"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"keys":{"description":"The users' keys.\n","items":{"type":"string"},"type":"array"},"lastNames":{"description":"The users' last names.\n","items":{"type":"string"},"type":"array"},"userIds":{"description":"The user identifiers.\n","items":{"type":"string"},"type":"array"}},"required":["comments","emails","enableds","expirationDates","firstNames","groups","keys","lastNames","userIds","id"],"type":"object"}},"proxmoxve:SDNZone/getEvpn:getEvpn":{"description":"Retrieves information about an EVPN Zone in Proxmox SDN. The EVPN zone creates a routable Layer 3 network, capable of spanning across multiple clusters.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getEvpn({\n id: \"evpn1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneEvpn = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n controller: example.then(example =\u003e example.controller),\n vrfVxlan: example.then(example =\u003e example.vrfVxlan),\n advertiseSubnets: example.then(example =\u003e example.advertiseSubnets),\n disableArpNdSuppression: example.then(example =\u003e example.disableArpNdSuppression),\n exitNodes: example.then(example =\u003e example.exitNodes),\n exitNodesLocalRouting: example.then(example =\u003e example.exitNodesLocalRouting),\n primaryExitNode: example.then(example =\u003e example.primaryExitNode),\n rtImport: example.then(example =\u003e example.rtImport),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_evpn(id=\"evpn1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"controller\": example.controller,\n \"vrfVxlan\": example.vrf_vxlan,\n \"advertiseSubnets\": example.advertise_subnets,\n \"disableArpNdSuppression\": example.disable_arp_nd_suppression,\n \"exitNodes\": example.exit_nodes,\n \"exitNodesLocalRouting\": example.exit_nodes_local_routing,\n \"primaryExitNode\": example.primary_exit_node,\n \"rtImport\": example.rt_import,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetEvpn.Invoke(new()\n {\n Id = \"evpn1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\"] = \n {\n { \"id\", example.Apply(getEvpnResult =\u003e getEvpnResult.Id) },\n { \"nodes\", example.Apply(getEvpnResult =\u003e getEvpnResult.Nodes) },\n { \"controller\", example.Apply(getEvpnResult =\u003e getEvpnResult.Controller) },\n { \"vrfVxlan\", example.Apply(getEvpnResult =\u003e getEvpnResult.VrfVxlan) },\n { \"advertiseSubnets\", example.Apply(getEvpnResult =\u003e getEvpnResult.AdvertiseSubnets) },\n { \"disableArpNdSuppression\", example.Apply(getEvpnResult =\u003e getEvpnResult.DisableArpNdSuppression) },\n { \"exitNodes\", example.Apply(getEvpnResult =\u003e getEvpnResult.ExitNodes) },\n { \"exitNodesLocalRouting\", example.Apply(getEvpnResult =\u003e getEvpnResult.ExitNodesLocalRouting) },\n { \"primaryExitNode\", example.Apply(getEvpnResult =\u003e getEvpnResult.PrimaryExitNode) },\n { \"rtImport\", example.Apply(getEvpnResult =\u003e getEvpnResult.RtImport) },\n { \"mtu\", example.Apply(getEvpnResult =\u003e getEvpnResult.Mtu) },\n { \"dns\", example.Apply(getEvpnResult =\u003e getEvpnResult.Dns) },\n { \"dnsZone\", example.Apply(getEvpnResult =\u003e getEvpnResult.DnsZone) },\n { \"ipam\", example.Apply(getEvpnResult =\u003e getEvpnResult.Ipam) },\n { \"reverseDns\", example.Apply(getEvpnResult =\u003e getEvpnResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetEvpn(ctx, \u0026sdnzone.GetEvpnArgs{\n\t\t\tId: \"evpn1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"controller\": example.Controller,\n\t\t\t\"vrfVxlan\": example.VrfVxlan,\n\t\t\t\"advertiseSubnets\": example.AdvertiseSubnets,\n\t\t\t\"disableArpNdSuppression\": example.DisableArpNdSuppression,\n\t\t\t\"exitNodes\": example.ExitNodes,\n\t\t\t\"exitNodesLocalRouting\": example.ExitNodesLocalRouting,\n\t\t\t\"primaryExitNode\": example.PrimaryExitNode,\n\t\t\t\"rtImport\": example.RtImport,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetEvpnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getEvpn(GetEvpnArgs.builder()\n .id(\"evpn1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneEvpn\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"controller\", example.controller()),\n Map.entry(\"vrfVxlan\", example.vrfVxlan()),\n Map.entry(\"advertiseSubnets\", example.advertiseSubnets()),\n Map.entry(\"disableArpNdSuppression\", example.disableArpNdSuppression()),\n Map.entry(\"exitNodes\", example.exitNodes()),\n Map.entry(\"exitNodesLocalRouting\", example.exitNodesLocalRouting()),\n Map.entry(\"primaryExitNode\", example.primaryExitNode()),\n Map.entry(\"rtImport\", example.rtImport()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getEvpn\n arguments:\n id: evpn1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneEvpn:\n id: ${example.id}\n nodes: ${example.nodes}\n controller: ${example.controller}\n vrfVxlan: ${example.vrfVxlan}\n advertiseSubnets: ${example.advertiseSubnets}\n disableArpNdSuppression: ${example.disableArpNdSuppression}\n exitNodes: ${example.exitNodes}\n exitNodesLocalRouting: ${example.exitNodesLocalRouting}\n primaryExitNode: ${example.primaryExitNode}\n rtImport: ${example.rtImport}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getEvpn.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getEvpn.\n","properties":{"advertiseSubnets":{"description":"Enable subnet advertisement for EVPN.\n","type":"boolean"},"controller":{"description":"EVPN controller address.\n","type":"string"},"disableArpNdSuppression":{"description":"Disable ARP/ND suppression for EVPN.\n","type":"boolean"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"exitNodes":{"description":"List of exit nodes for EVPN.\n","items":{"type":"string"},"type":"array"},"exitNodesLocalRouting":{"description":"Enable local routing for EVPN exit nodes.\n","type":"boolean"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"primaryExitNode":{"description":"Primary exit node for EVPN.\n","type":"string"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"rtImport":{"description":"Route target import for EVPN. Must be in the format '\\n\\n:\\n\\n' (e.g., '65000:65000').\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"},"vrfVxlan":{"description":"VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n","type":"integer"}},"required":["advertiseSubnets","controller","disableArpNdSuppression","dns","dnsZone","exitNodes","exitNodesLocalRouting","id","ipam","mtu","nodes","pending","primaryExitNode","reverseDns","rtImport","state","vrfVxlan"],"type":"object"}},"proxmoxve:SDNZone/getQinq:getQinq":{"description":"Retrieves information about a QinQ Zone in Proxmox SDN. QinQ also known as VLAN stacking, that uses multiple layers of VLAN tags for isolation. The QinQ zone defines the outer VLAN tag (the Service VLAN) whereas the inner VLAN tag is defined by the VNet. Your physical network switches must support stacked VLANs for this configuration. Due to the double stacking of tags, you need 4 more bytes for QinQ VLANs. For example, you must reduce the MTU to 1496 if you physical interface MTU is 1500.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getQinq({\n id: \"qinq1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneQinq = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n bridge: example.then(example =\u003e example.bridge),\n serviceVlan: example.then(example =\u003e example.serviceVlan),\n serviceVlanProtocol: example.then(example =\u003e example.serviceVlanProtocol),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_qinq(id=\"qinq1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneQinq\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"bridge\": example.bridge,\n \"serviceVlan\": example.service_vlan,\n \"serviceVlanProtocol\": example.service_vlan_protocol,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetQinq.Invoke(new()\n {\n Id = \"qinq1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneQinq\"] = \n {\n { \"id\", example.Apply(getQinqResult =\u003e getQinqResult.Id) },\n { \"nodes\", example.Apply(getQinqResult =\u003e getQinqResult.Nodes) },\n { \"bridge\", example.Apply(getQinqResult =\u003e getQinqResult.Bridge) },\n { \"serviceVlan\", example.Apply(getQinqResult =\u003e getQinqResult.ServiceVlan) },\n { \"serviceVlanProtocol\", example.Apply(getQinqResult =\u003e getQinqResult.ServiceVlanProtocol) },\n { \"mtu\", example.Apply(getQinqResult =\u003e getQinqResult.Mtu) },\n { \"dns\", example.Apply(getQinqResult =\u003e getQinqResult.Dns) },\n { \"dnsZone\", example.Apply(getQinqResult =\u003e getQinqResult.DnsZone) },\n { \"ipam\", example.Apply(getQinqResult =\u003e getQinqResult.Ipam) },\n { \"reverseDns\", example.Apply(getQinqResult =\u003e getQinqResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetQinq(ctx, \u0026sdnzone.GetQinqArgs{\n\t\t\tId: \"qinq1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneQinq\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"bridge\": example.Bridge,\n\t\t\t\"serviceVlan\": example.ServiceVlan,\n\t\t\t\"serviceVlanProtocol\": example.ServiceVlanProtocol,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetQinqArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getQinq(GetQinqArgs.builder()\n .id(\"qinq1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneQinq\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"bridge\", example.bridge()),\n Map.entry(\"serviceVlan\", example.serviceVlan()),\n Map.entry(\"serviceVlanProtocol\", example.serviceVlanProtocol()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getQinq\n arguments:\n id: qinq1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneQinq:\n id: ${example.id}\n nodes: ${example.nodes}\n bridge: ${example.bridge}\n serviceVlan: ${example.serviceVlan}\n serviceVlanProtocol: ${example.serviceVlanProtocol}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getQinq.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getQinq.\n","properties":{"bridge":{"description":"A local, VLAN-aware bridge that is already configured on each local node\n","type":"string"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"serviceVlan":{"description":"Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n","type":"integer"},"serviceVlanProtocol":{"description":"Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["bridge","dns","dnsZone","id","ipam","mtu","nodes","pending","reverseDns","serviceVlan","serviceVlanProtocol","state"],"type":"object"}},"proxmoxve:SDNZone/getSimple:getSimple":{"description":"Retrieves information about a Simple Zone in Proxmox SDN. It will create an isolated VNet bridge. This bridge is not linked to a physical interface, and VM traffic is only local on each the node. It can be used in NAT or routed setups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getSimple({\n id: \"simple1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneSimple = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_simple(id=\"simple1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneSimple\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetSimple.Invoke(new()\n {\n Id = \"simple1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneSimple\"] = \n {\n { \"id\", example.Apply(getSimpleResult =\u003e getSimpleResult.Id) },\n { \"nodes\", example.Apply(getSimpleResult =\u003e getSimpleResult.Nodes) },\n { \"mtu\", example.Apply(getSimpleResult =\u003e getSimpleResult.Mtu) },\n { \"dns\", example.Apply(getSimpleResult =\u003e getSimpleResult.Dns) },\n { \"dnsZone\", example.Apply(getSimpleResult =\u003e getSimpleResult.DnsZone) },\n { \"ipam\", example.Apply(getSimpleResult =\u003e getSimpleResult.Ipam) },\n { \"reverseDns\", example.Apply(getSimpleResult =\u003e getSimpleResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetSimple(ctx, \u0026sdnzone.GetSimpleArgs{\n\t\t\tId: \"simple1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneSimple\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetSimpleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getSimple(GetSimpleArgs.builder()\n .id(\"simple1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneSimple\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getSimple\n arguments:\n id: simple1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneSimple:\n id: ${example.id}\n nodes: ${example.nodes}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getSimple.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getSimple.\n","properties":{"dhcp":{"description":"The type of the DHCP backend for this zone.\n","type":"string"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["dhcp","dns","dnsZone","id","ipam","mtu","nodes","pending","reverseDns","state"],"type":"object"}},"proxmoxve:SDNZone/getVlan:getVlan":{"description":"Retrieves information about a VLAN Zone in Proxmox SDN. It uses an existing local Linux or OVS bridge to connect to the node's physical interface. It uses VLAN tagging defined in the VNet to isolate the network segments. This allows connectivity of VMs between different nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getVlan({\n id: \"vlan1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneVlan = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n bridge: example.then(example =\u003e example.bridge),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_vlan(id=\"vlan1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneVlan\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"bridge\": example.bridge,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetVlan.Invoke(new()\n {\n Id = \"vlan1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneVlan\"] = \n {\n { \"id\", example.Apply(getVlanResult =\u003e getVlanResult.Id) },\n { \"nodes\", example.Apply(getVlanResult =\u003e getVlanResult.Nodes) },\n { \"bridge\", example.Apply(getVlanResult =\u003e getVlanResult.Bridge) },\n { \"mtu\", example.Apply(getVlanResult =\u003e getVlanResult.Mtu) },\n { \"dns\", example.Apply(getVlanResult =\u003e getVlanResult.Dns) },\n { \"dnsZone\", example.Apply(getVlanResult =\u003e getVlanResult.DnsZone) },\n { \"ipam\", example.Apply(getVlanResult =\u003e getVlanResult.Ipam) },\n { \"reverseDns\", example.Apply(getVlanResult =\u003e getVlanResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetVlan(ctx, \u0026sdnzone.GetVlanArgs{\n\t\t\tId: \"vlan1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneVlan\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"bridge\": example.Bridge,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetVlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getVlan(GetVlanArgs.builder()\n .id(\"vlan1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneVlan\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"bridge\", example.bridge()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getVlan\n arguments:\n id: vlan1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneVlan:\n id: ${example.id}\n nodes: ${example.nodes}\n bridge: ${example.bridge}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVlan.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getVlan.\n","properties":{"bridge":{"description":"The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n","type":"string"},"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["bridge","dns","dnsZone","id","ipam","mtu","nodes","pending","reverseDns","state"],"type":"object"}},"proxmoxve:SDNZone/getVxlan:getVxlan":{"description":"Retrieves information about a VXLAN Zone in Proxmox SDN. It establishes a tunnel (overlay) on top of an existing network (underlay). This encapsulates layer 2 Ethernet frames within layer 4 UDP datagrams using the default destination port 4789. You have to configure the underlay network yourself to enable UDP connectivity between all peers. Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes lower than the outgoing physical interface.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.SDNZone.getVxlan({\n id: \"vxlan1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZoneVxlan = {\n id: example.then(example =\u003e example.id),\n nodes: example.then(example =\u003e example.nodes),\n peers: example.then(example =\u003e example.peers),\n mtu: example.then(example =\u003e example.mtu),\n dns: example.then(example =\u003e example.dns),\n dnsZone: example.then(example =\u003e example.dnsZone),\n ipam: example.then(example =\u003e example.ipam),\n reverseDns: example.then(example =\u003e example.reverseDns),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.SDNZone.get_vxlan(id=\"vxlan1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\", {\n \"id\": example.id,\n \"nodes\": example.nodes,\n \"peers\": example.peers,\n \"mtu\": example.mtu,\n \"dns\": example.dns,\n \"dnsZone\": example.dns_zone,\n \"ipam\": example.ipam,\n \"reverseDns\": example.reverse_dns,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.SDNZone.GetVxlan.Invoke(new()\n {\n Id = \"vxlan1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\"] = \n {\n { \"id\", example.Apply(getVxlanResult =\u003e getVxlanResult.Id) },\n { \"nodes\", example.Apply(getVxlanResult =\u003e getVxlanResult.Nodes) },\n { \"peers\", example.Apply(getVxlanResult =\u003e getVxlanResult.Peers) },\n { \"mtu\", example.Apply(getVxlanResult =\u003e getVxlanResult.Mtu) },\n { \"dns\", example.Apply(getVxlanResult =\u003e getVxlanResult.Dns) },\n { \"dnsZone\", example.Apply(getVxlanResult =\u003e getVxlanResult.DnsZone) },\n { \"ipam\", example.Apply(getVxlanResult =\u003e getVxlanResult.Ipam) },\n { \"reverseDns\", example.Apply(getVxlanResult =\u003e getVxlanResult.ReverseDns) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdnzone.GetVxlan(ctx, \u0026sdnzone.GetVxlanArgs{\n\t\t\tId: \"vxlan1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"nodes\": example.Nodes,\n\t\t\t\"peers\": example.Peers,\n\t\t\t\"mtu\": example.Mtu,\n\t\t\t\"dns\": example.Dns,\n\t\t\t\"dnsZone\": example.DnsZone,\n\t\t\t\"ipam\": example.Ipam,\n\t\t\t\"reverseDns\": example.ReverseDns,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.SDNZone.SDNZoneFunctions;\nimport com.pulumi.proxmoxve.SDNZone.inputs.GetVxlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SDNZoneFunctions.getVxlan(GetVxlanArgs.builder()\n .id(\"vxlan1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZoneVxlan\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"nodes\", example.nodes()),\n Map.entry(\"peers\", example.peers()),\n Map.entry(\"mtu\", example.mtu()),\n Map.entry(\"dns\", example.dns()),\n Map.entry(\"dnsZone\", example.dnsZone()),\n Map.entry(\"ipam\", example.ipam()),\n Map.entry(\"reverseDns\", example.reverseDns())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:SDNZone:getVxlan\n arguments:\n id: vxlan1\noutputs:\n dataProxmoxVirtualEnvironmentSdnZoneVxlan:\n id: ${example.id}\n nodes: ${example.nodes}\n peers: ${example.peers}\n mtu: ${example.mtu}\n dns: ${example.dns}\n dnsZone: ${example.dnsZone}\n ipam: ${example.ipam}\n reverseDns: ${example.reverseDns}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVxlan.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN zone.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getVxlan.\n","properties":{"dns":{"description":"DNS API server address.\n","type":"string"},"dnsZone":{"description":"DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n","type":"string"},"id":{"description":"The unique identifier of the SDN zone.\n","type":"string"},"ipam":{"description":"IP Address Management system.\n","type":"string"},"mtu":{"description":"MTU value for the zone.\n","type":"integer"},"nodes":{"description":"The Proxmox nodes which the zone and associated VNets are deployed on\n","items":{"type":"string"},"type":"array"},"peers":{"description":"A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n","items":{"type":"string"},"type":"array"},"pending":{"description":"Indicates if the zone has pending configuration changes that need to be applied.\n","type":"boolean"},"reverseDns":{"description":"Reverse DNS API server address.\n","type":"string"},"state":{"description":"Indicates the current state of the zone.\n","type":"string"}},"required":["dns","dnsZone","id","ipam","mtu","nodes","peers","pending","reverseDns","state"],"type":"object"}},"proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric":{"description":"OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.getOpenfabric({\n id: \"main-fabric\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.get_openfabric(id=\"main-fabric\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.GetOpenfabric.Invoke(new()\n {\n Id = \"main-fabric\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOpenfabric(ctx, \u0026fabric.GetOpenfabricArgs{\n\t\t\tId: \"main-fabric\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabricFunctions.getOpenfabric(GetOpenfabricArgs.builder()\n .id(\"main-fabric\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric:getOpenfabric\n arguments:\n id: main-fabric\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOpenfabric.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getOpenfabric.\n","properties":{"csnpInterval":{"description":"The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n","type":"integer"},"helloInterval":{"description":"The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n","type":"integer"},"id":{"description":"The unique identifier of the SDN fabric.\n","type":"string"},"ip6Prefix":{"description":"IPv6 prefix cidr for the fabric.\n","type":"string"},"ipPrefix":{"description":"IPv4 prefix cidr for the fabric.\n","type":"string"}},"required":["csnpInterval","helloInterval","id","ip6Prefix","ipPrefix"],"type":"object"}},"proxmoxve:Sdn/fabric/getOspf:getOspf":{"description":"OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.getOspf({\n id: \"main-fabric\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.get_ospf(id=\"main-fabric\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.GetOspf.Invoke(new()\n {\n Id = \"main-fabric\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOspf(ctx, \u0026fabric.GetOspfArgs{\n\t\t\tId: \"main-fabric\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabricFunctions.getOspf(GetOspfArgs.builder()\n .id(\"main-fabric\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric:getOspf\n arguments:\n id: main-fabric\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOspf.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN fabric.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getOspf.\n","properties":{"area":{"description":"OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n","type":"string"},"id":{"description":"The unique identifier of the SDN fabric.\n","type":"string"},"ipPrefix":{"description":"IPv4 prefix cidr for the fabric.\n","type":"string"}},"required":["area","id","ipPrefix"],"type":"object"}},"proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric":{"description":"OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.node.getOpenfabric({\n fabricId: \"main-fabric\",\n nodeId: \"pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.node.get_openfabric(fabric_id=\"main-fabric\",\n node_id=\"pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.Node.GetOpenfabric.Invoke(new()\n {\n FabricId = \"main-fabric\",\n NodeId = \"pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOpenfabric(ctx, \u0026fabric/node.GetOpenfabricArgs{\n\t\t\tFabricId: \"main-fabric\",\n\t\t\tNodeId: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabric_nodeFunctions.getOpenfabric(GetOpenfabricArgs.builder()\n .fabricId(\"main-fabric\")\n .nodeId(\"pve\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric/node:getOpenfabric\n arguments:\n fabricId: main-fabric\n nodeId: pve\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOpenfabric.\n","properties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric node.\n"}},"type":"object","required":["fabricId","nodeId"]},"outputs":{"description":"A collection of values returned by getOpenfabric.\n","properties":{"fabricId":{"description":"The unique identifier of the SDN fabric.\n","type":"string"},"id":{"type":"string"},"interfaceNames":{"description":"Set of interface names associated with the fabric node.\n","items":{"type":"string"},"type":"array"},"ip":{"description":"IPv4 address for the fabric node.\n","type":"string"},"ip6":{"description":"IPv6 address for the fabric node.\n","type":"string"},"nodeId":{"description":"The unique identifier of the SDN fabric node.\n","type":"string"}},"required":["fabricId","id","interfaceNames","ip","ip6","nodeId"],"type":"object"}},"proxmoxve:Sdn/fabric/node/getOspf:getOspf":{"description":"OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.node.getOspf({\n fabricId: \"main-fabric\",\n nodeId: \"pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.node.get_ospf(fabric_id=\"main-fabric\",\n node_id=\"pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.Node.GetOspf.Invoke(new()\n {\n FabricId = \"main-fabric\",\n NodeId = \"pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOspf(ctx, \u0026fabric/node.GetOspfArgs{\n\t\t\tFabricId: \"main-fabric\",\n\t\t\tNodeId: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabric_nodeFunctions.getOspf(GetOspfArgs.builder()\n .fabricId(\"main-fabric\")\n .nodeId(\"pve\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric/node:getOspf\n arguments:\n fabricId: main-fabric\n nodeId: pve\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getOspf.\n","properties":{"fabricId":{"type":"string","description":"The unique identifier of the SDN fabric.\n"},"nodeId":{"type":"string","description":"The unique identifier of the SDN fabric node.\n"}},"type":"object","required":["fabricId","nodeId"]},"outputs":{"description":"A collection of values returned by getOspf.\n","properties":{"fabricId":{"description":"The unique identifier of the SDN fabric.\n","type":"string"},"id":{"type":"string"},"interfaceNames":{"description":"Set of interface names associated with the fabric node.\n","items":{"type":"string"},"type":"array"},"ip":{"description":"IPv4 address for the fabric node.\n","type":"string"},"nodeId":{"description":"The unique identifier of the SDN fabric node.\n","type":"string"}},"required":["fabricId","id","interfaceNames","ip","nodeId"],"type":"object"}},"proxmoxve:Sdn/getSubnet:getSubnet":{"description":"Retrieve details about a specific SDN Subnet in Proxmox VE.\n","inputs":{"description":"A collection of arguments for invoking getSubnet.\n","properties":{"cidr":{"type":"string","description":"A CIDR network address, for example 10.0.0.0/8\n"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/getSubnetDhcpRange:getSubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"vnet":{"type":"string","description":"The VNet this subnet belongs to.\n"}},"type":"object","required":["cidr","vnet"]},"outputs":{"description":"A collection of values returned by getSubnet.\n","properties":{"cidr":{"description":"A CIDR network address, for example 10.0.0.0/8\n","type":"string"},"dhcpDnsServer":{"description":"The DNS server used for DHCP.\n","type":"string"},"dhcpRange":{"$ref":"#/types/proxmoxve:Sdn/getSubnetDhcpRange:getSubnetDhcpRange","description":"DHCP range (start and end IPs).\n"},"dnsZonePrefix":{"description":"Prefix used for DNS zone delegation.\n","type":"string"},"gateway":{"description":"The gateway address for the subnet.\n","type":"string"},"id":{"description":"The full ID in the format 'vnet-id/subnet-id'.\n","type":"string"},"snat":{"description":"Whether SNAT is enabled for the subnet.\n","type":"boolean"},"vnet":{"description":"The VNet this subnet belongs to.\n","type":"string"}},"required":["cidr","dhcpDnsServer","dhcpRange","dnsZonePrefix","gateway","id","snat","vnet"],"type":"object"}},"proxmoxve:Sdn/getVnet:getVnet":{"description":"Retrieves information about an existing SDN VNet.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = proxmoxve.Sdn.getVnet({\n id: \"vnet1\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnVnet = {\n id: example.then(example =\u003e example.id),\n zone: example.then(example =\u003e example.zone),\n alias: example.then(example =\u003e example.alias),\n isolatePorts: example.then(example =\u003e example.isolatePorts),\n tag: example.then(example =\u003e example.tag),\n vlanAware: example.then(example =\u003e example.vlanAware),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.Sdn.get_vnet(id=\"vnet1\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnVnet\", {\n \"id\": example.id,\n \"zone\": example.zone,\n \"alias\": example.alias,\n \"isolatePorts\": example.isolate_ports,\n \"tag\": example.tag,\n \"vlanAware\": example.vlan_aware,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = ProxmoxVE.Sdn.GetVnet.Invoke(new()\n {\n Id = \"vnet1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnVnet\"] = \n {\n { \"id\", example.Apply(getVnetResult =\u003e getVnetResult.Id) },\n { \"zone\", example.Apply(getVnetResult =\u003e getVnetResult.Zone) },\n { \"alias\", example.Apply(getVnetResult =\u003e getVnetResult.Alias) },\n { \"isolatePorts\", example.Apply(getVnetResult =\u003e getVnetResult.IsolatePorts) },\n { \"tag\", example.Apply(getVnetResult =\u003e getVnetResult.Tag) },\n { \"vlanAware\", example.Apply(getVnetResult =\u003e getVnetResult.VlanAware) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := sdn.GetVnet(ctx, \u0026sdn.GetVnetArgs{\n\t\t\tId: \"vnet1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnVnet\", pulumi.Map{\n\t\t\t\"id\": example.Id,\n\t\t\t\"zone\": example.Zone,\n\t\t\t\"alias\": example.Alias,\n\t\t\t\"isolatePorts\": example.IsolatePorts,\n\t\t\t\"tag\": example.Tag,\n\t\t\t\"vlanAware\": example.VlanAware,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn.SdnFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetVnetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = SdnFunctions.getVnet(GetVnetArgs.builder()\n .id(\"vnet1\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnVnet\", Map.ofEntries(\n Map.entry(\"id\", example.id()),\n Map.entry(\"zone\", example.zone()),\n Map.entry(\"alias\", example.alias()),\n Map.entry(\"isolatePorts\", example.isolatePorts()),\n Map.entry(\"tag\", example.tag()),\n Map.entry(\"vlanAware\", example.vlanAware())\n ));\n }\n}\n```\n```yaml\nvariables:\n example:\n fn::invoke:\n function: proxmoxve:Sdn:getVnet\n arguments:\n id: vnet1\noutputs:\n dataProxmoxVirtualEnvironmentSdnVnet:\n id: ${example.id}\n zone: ${example.zone}\n alias: ${example.alias}\n isolatePorts: ${example.isolatePorts}\n tag: ${example.tag}\n vlanAware: ${example.vlanAware}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVnet.\n","properties":{"id":{"type":"string","description":"The unique identifier of the SDN VNet.\n"}},"type":"object","required":["id"]},"outputs":{"description":"A collection of values returned by getVnet.\n","properties":{"alias":{"description":"An optional alias for this VNet.\n","type":"string"},"id":{"description":"The unique identifier of the SDN VNet.\n","type":"string"},"isolatePorts":{"description":"Isolate ports within this VNet.\n","type":"boolean"},"tag":{"description":"Tag value for VLAN/VXLAN (can't be used with other zone types).\n","type":"integer"},"vlanAware":{"description":"Allow VM VLANs to pass through this VNet.\n","type":"boolean"},"zone":{"description":"The zone to which this VNet belongs.\n","type":"string"}},"required":["alias","id","isolatePorts","tag","vlanAware","zone"],"type":"object"}},"proxmoxve:Sdn/getVnets:getVnets":{"description":"Retrieves information about all SDN VNets in Proxmox. This data source lists all virtual networks configured in the Software-Defined Networking setup.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// List all SDN VNets\nconst all = proxmoxve.Sdn.getVnets({});\nexport const dataProxmoxVirtualEnvironmentSdnVnetsAll = {\n vnets: all.then(all =\u003e all.vnets),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# List all SDN VNets\nall = proxmoxve.Sdn.get_vnets()\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnVnetsAll\", {\n \"vnets\": all.vnets,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // List all SDN VNets\n var all = ProxmoxVE.Sdn.GetVnets.Invoke();\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnVnetsAll\"] = \n {\n { \"vnets\", all.Apply(getVnetsResult =\u003e getVnetsResult.Vnets) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// List all SDN VNets\n\t\tall, err := sdn.GetVnets(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnVnetsAll\", []sdn.GetVnetsVnetMap{\n\t\t\t\"vnets\": all.Vnets,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn.SdnFunctions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // List all SDN VNets\n final var all = SdnFunctions.getVnets(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnVnetsAll\", Map.of(\"vnets\", all.vnets()));\n }\n}\n```\n```yaml\nvariables:\n # List all SDN VNets\n all:\n fn::invoke:\n function: proxmoxve:Sdn:getVnets\n arguments: {}\noutputs:\n dataProxmoxVirtualEnvironmentSdnVnetsAll:\n vnets: ${all.vnets}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","outputs":{"description":"A collection of values returned by getVnets.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"vnets":{"description":"List of SDN VNets.\n","items":{"$ref":"#/types/proxmoxve:Sdn/getVnetsVnet:getVnetsVnet"},"type":"array"}},"required":["vnets","id"],"type":"object"}},"proxmoxve:Sdn/getZones:getZones":{"description":"Retrieves information about all SDN Zones in Proxmox. This data source can optionally filter zones by type.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// List all SDN zones\nconst all = proxmoxve.Sdn.getZones({});\n// List only EVPN zones\nconst evpnOnly = proxmoxve.Sdn.getZones({\n type: \"evpn\",\n});\n// List only Simple zones \nconst simpleOnly = proxmoxve.Sdn.getZones({\n type: \"simple\",\n});\nexport const dataProxmoxVirtualEnvironmentSdnZonesAll = {\n zones: all.then(all =\u003e all.zones),\n};\nexport const dataProxmoxVirtualEnvironmentSdnZonesFiltered = {\n evpnZones: evpnOnly.then(evpnOnly =\u003e evpnOnly.zones),\n simpleZones: simpleOnly.then(simpleOnly =\u003e simpleOnly.zones),\n};\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# List all SDN zones\nall = proxmoxve.Sdn.get_zones()\n# List only EVPN zones\nevpn_only = proxmoxve.Sdn.get_zones(type=\"evpn\")\n# List only Simple zones \nsimple_only = proxmoxve.Sdn.get_zones(type=\"simple\")\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZonesAll\", {\n \"zones\": all.zones,\n})\npulumi.export(\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\", {\n \"evpnZones\": evpn_only.zones,\n \"simpleZones\": simple_only.zones,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // List all SDN zones\n var all = ProxmoxVE.Sdn.GetZones.Invoke();\n\n // List only EVPN zones\n var evpnOnly = ProxmoxVE.Sdn.GetZones.Invoke(new()\n {\n Type = \"evpn\",\n });\n\n // List only Simple zones \n var simpleOnly = ProxmoxVE.Sdn.GetZones.Invoke(new()\n {\n Type = \"simple\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"dataProxmoxVirtualEnvironmentSdnZonesAll\"] = \n {\n { \"zones\", all.Apply(getZonesResult =\u003e getZonesResult.Zones) },\n },\n [\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\"] = \n {\n { \"evpnZones\", evpnOnly.Apply(getZonesResult =\u003e getZonesResult.Zones) },\n { \"simpleZones\", simpleOnly.Apply(getZonesResult =\u003e getZonesResult.Zones) },\n },\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// List all SDN zones\n\t\tall, err := sdn.GetZones(ctx, \u0026sdn.GetZonesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// List only EVPN zones\n\t\tevpnOnly, err := sdn.GetZones(ctx, \u0026sdn.GetZonesArgs{\n\t\t\tType: pulumi.StringRef(\"evpn\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// List only Simple zones\n\t\tsimpleOnly, err := sdn.GetZones(ctx, \u0026sdn.GetZonesArgs{\n\t\t\tType: pulumi.StringRef(\"simple\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZonesAll\", []sdn.GetZonesZoneMap{\n\t\t\t\"zones\": all.Zones,\n\t\t})\n\t\tctx.Export(\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\", []sdn.GetZonesZoneMap{\n\t\t\t\"evpnZones\": evpnOnly.Zones,\n\t\t\t\"simpleZones\": simpleOnly.Zones,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn.SdnFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetZonesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // List all SDN zones\n final var all = SdnFunctions.getZones(GetZonesArgs.builder()\n .build());\n\n // List only EVPN zones\n final var evpnOnly = SdnFunctions.getZones(GetZonesArgs.builder()\n .type(\"evpn\")\n .build());\n\n // List only Simple zones \n final var simpleOnly = SdnFunctions.getZones(GetZonesArgs.builder()\n .type(\"simple\")\n .build());\n\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZonesAll\", Map.of(\"zones\", all.zones()));\n ctx.export(\"dataProxmoxVirtualEnvironmentSdnZonesFiltered\", Map.ofEntries(\n Map.entry(\"evpnZones\", evpnOnly.zones()),\n Map.entry(\"simpleZones\", simpleOnly.zones())\n ));\n }\n}\n```\n```yaml\nvariables:\n # List all SDN zones\n all:\n fn::invoke:\n function: proxmoxve:Sdn:getZones\n arguments: {}\n # List only EVPN zones\n evpnOnly:\n fn::invoke:\n function: proxmoxve:Sdn:getZones\n arguments:\n type: evpn\n # List only Simple zones\n simpleOnly:\n fn::invoke:\n function: proxmoxve:Sdn:getZones\n arguments:\n type: simple\noutputs:\n dataProxmoxVirtualEnvironmentSdnZonesAll:\n zones: ${all.zones}\n dataProxmoxVirtualEnvironmentSdnZonesFiltered:\n evpnZones: ${evpnOnly.zones}\n simpleZones: ${simpleOnly.zones}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getZones.\n","properties":{"type":{"type":"string","description":"Filter zones by type (simple, vlan, qinq, vxlan, evpn).\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getZones.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"type":{"description":"Filter zones by type (simple, vlan, qinq, vxlan, evpn).\n","type":"string"},"zones":{"description":"List of SDN zones.\n","items":{"$ref":"#/types/proxmoxve:Sdn/getZonesZone:getZonesZone"},"type":"array"}},"required":["zones","id"],"type":"object"}},"proxmoxve:Storage/getDatastores:getDatastores":{"description":"Retrieves information about all the datastores available to a specific node.\n","inputs":{"description":"A collection of arguments for invoking getDatastores.\n","properties":{"datastores":{"type":"array","items":{"$ref":"#/types/proxmoxve:Storage/getDatastoresDatastore:getDatastoresDatastore"},"description":"The list of datastores.\n"},"filters":{"$ref":"#/types/proxmoxve:Storage/getDatastoresFilters:getDatastoresFilters","description":"The filters to apply to the stores.\n"},"nodeName":{"type":"string","description":"The name of the node to retrieve the stores from.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getDatastores.\n","properties":{"datastores":{"description":"The list of datastores.\n","items":{"$ref":"#/types/proxmoxve:Storage/getDatastoresDatastore:getDatastoresDatastore"},"type":"array"},"filters":{"$ref":"#/types/proxmoxve:Storage/getDatastoresFilters:getDatastoresFilters","description":"The filters to apply to the stores.\n"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"description":"The name of the node to retrieve the stores from.\n","type":"string"}},"required":["nodeName","id"],"type":"object"}},"proxmoxve:VM/getVirtualMachine:getVirtualMachine":{"description":"Retrieves information about a specific VM.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst testVm = proxmoxve.VM.getVirtualMachine({\n nodeName: \"test\",\n vmId: 100,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ntest_vm = proxmoxve.VM.get_virtual_machine(node_name=\"test\",\n vm_id=100)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testVm = ProxmoxVE.VM.GetVirtualMachine.Invoke(new()\n {\n NodeName = \"test\",\n VmId = 100,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vm.GetVirtualMachine(ctx, \u0026vm.GetVirtualMachineArgs{\n\t\t\tNodeName: \"test\",\n\t\t\tVmId: 100,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.VM.VMFunctions;\nimport com.pulumi.proxmoxve.VM.inputs.GetVirtualMachineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testVm = VMFunctions.getVirtualMachine(GetVirtualMachineArgs.builder()\n .nodeName(\"test\")\n .vmId(100)\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n testVm:\n fn::invoke:\n function: proxmoxve:VM:getVirtualMachine\n arguments:\n nodeName: test\n vmId: 100\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVirtualMachine.\n","properties":{"nodeName":{"type":"string","description":"The node name.\n"},"status":{"type":"string","description":"The status of the VM.\n"},"template":{"type":"boolean","description":"Whether the VM is a template.\n"},"vmId":{"type":"integer","description":"The VM identifier.\n"}},"type":"object","required":["nodeName","vmId"]},"outputs":{"description":"A collection of values returned by getVirtualMachine.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The virtual machine name.\n","type":"string"},"nodeName":{"type":"string"},"status":{"description":"The status of the VM.\n","type":"string"},"tags":{"description":"A list of tags of the VM.\n","items":{"type":"string"},"type":"array"},"template":{"description":"Whether the VM is a template.\n","type":"boolean"},"vmId":{"type":"integer"}},"required":["name","nodeName","tags","vmId","id"],"type":"object"}},"proxmoxve:VM/getVirtualMachines:getVirtualMachines":{"description":"Retrieves information about all VMs in the Proxmox cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuVms = proxmoxve.VM.getVirtualMachines({\n tags: [\"ubuntu\"],\n});\nconst ubuntuTemplates = proxmoxve.VM.getVirtualMachines({\n tags: [\n \"template\",\n \"latest\",\n ],\n filters: [\n {\n name: \"template\",\n values: [\"true\"],\n },\n {\n name: \"status\",\n values: [\"stopped\"],\n },\n {\n name: \"name\",\n regex: true,\n values: [\"^ubuntu-20.*$\"],\n },\n {\n name: \"node_name\",\n regex: true,\n values: [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_vms = proxmoxve.VM.get_virtual_machines(tags=[\"ubuntu\"])\nubuntu_templates = proxmoxve.VM.get_virtual_machines(tags=[\n \"template\",\n \"latest\",\n ],\n filters=[\n {\n \"name\": \"template\",\n \"values\": [\"true\"],\n },\n {\n \"name\": \"status\",\n \"values\": [\"stopped\"],\n },\n {\n \"name\": \"name\",\n \"regex\": True,\n \"values\": [\"^ubuntu-20.*$\"],\n },\n {\n \"name\": \"node_name\",\n \"regex\": True,\n \"values\": [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuVms = ProxmoxVE.VM.GetVirtualMachines.Invoke(new()\n {\n Tags = new[]\n {\n \"ubuntu\",\n },\n });\n\n var ubuntuTemplates = ProxmoxVE.VM.GetVirtualMachines.Invoke(new()\n {\n Tags = new[]\n {\n \"template\",\n \"latest\",\n },\n Filters = new[]\n {\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"template\",\n Values = new[]\n {\n \"true\",\n },\n },\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"status\",\n Values = new[]\n {\n \"stopped\",\n },\n },\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"name\",\n Regex = true,\n Values = new[]\n {\n \"^ubuntu-20.*$\",\n },\n },\n new ProxmoxVE.VM.Inputs.GetVirtualMachinesFilterInputArgs\n {\n Name = \"node_name\",\n Regex = true,\n Values = new[]\n {\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vm.GetVirtualMachines(ctx, \u0026vm.GetVirtualMachinesArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"ubuntu\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vm.GetVirtualMachines(ctx, \u0026vm.GetVirtualMachinesArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"template\",\n\t\t\t\t\"latest\",\n\t\t\t},\n\t\t\tFilters: []vm.GetVirtualMachinesFilter{\n\t\t\t\t{\n\t\t\t\t\tName: \"template\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"status\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"stopped\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"^ubuntu-20.*$\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"node_name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"node_us_[1-3]\",\n\t\t\t\t\t\t\"node_eu_[1-3]\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.VM.VMFunctions;\nimport com.pulumi.proxmoxve.VM.inputs.GetVirtualMachinesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var ubuntuVms = VMFunctions.getVirtualMachines(GetVirtualMachinesArgs.builder()\n .tags(\"ubuntu\")\n .build());\n\n final var ubuntuTemplates = VMFunctions.getVirtualMachines(GetVirtualMachinesArgs.builder()\n .tags( \n \"template\",\n \"latest\")\n .filters( \n GetVirtualMachinesFilterArgs.builder()\n .name(\"template\")\n .values(\"true\")\n .build(),\n GetVirtualMachinesFilterArgs.builder()\n .name(\"status\")\n .values(\"stopped\")\n .build(),\n GetVirtualMachinesFilterArgs.builder()\n .name(\"name\")\n .regex(true)\n .values(\"^ubuntu-20.*$\")\n .build(),\n GetVirtualMachinesFilterArgs.builder()\n .name(\"node_name\")\n .regex(true)\n .values( \n \"node_us_[1-3]\",\n \"node_eu_[1-3]\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n ubuntuVms:\n fn::invoke:\n function: proxmoxve:VM:getVirtualMachines\n arguments:\n tags:\n - ubuntu\n ubuntuTemplates:\n fn::invoke:\n function: proxmoxve:VM:getVirtualMachines\n arguments:\n tags:\n - template\n - latest\n filters:\n - name: template\n values:\n - true\n - name: status\n values:\n - stopped\n - name: name\n regex: true\n values:\n - ^ubuntu-20.*$\n - name: node_name\n regex: true\n values:\n - node_us_[1-3]\n - node_eu_[1-3]\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getVirtualMachines.\n","properties":{"filters":{"type":"array","items":{"$ref":"#/types/proxmoxve:VM/getVirtualMachinesFilter:getVirtualMachinesFilter"},"description":"Filter blocks. The VM must satisfy all filter blocks to be included in the result.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the VMs. The VM must have all\nthe tags to be included in the result.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getVirtualMachines.\n","properties":{"filters":{"items":{"$ref":"#/types/proxmoxve:VM/getVirtualMachinesFilter:getVirtualMachinesFilter"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"description":"The node name.\n","type":"string"},"tags":{"description":"A list of tags of the VM.\n","items":{"type":"string"},"type":"array"},"vms":{"description":"The VMs list.\n","items":{"$ref":"#/types/proxmoxve:VM/getVirtualMachinesVm:getVirtualMachinesVm"},"type":"array"}},"required":["vms","id"],"type":"object"}},"proxmoxve:index/getContainer:getContainer":{"description":"Retrieves information about a specific Container.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst testContainer = proxmoxve.getContainer({\n nodeName: \"test\",\n vmId: 100,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ntest_container = proxmoxve.get_container(node_name=\"test\",\n vm_id=100)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testContainer = ProxmoxVE.GetContainer.Invoke(new()\n {\n NodeName = \"test\",\n VmId = 100,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.GetContainer(ctx, \u0026proxmoxve.GetContainerArgs{\n\t\t\tNodeName: \"test\",\n\t\t\tVmId: 100,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetContainerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testContainer = ProxmoxveFunctions.getContainer(GetContainerArgs.builder()\n .nodeName(\"test\")\n .vmId(100)\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n testContainer:\n fn::invoke:\n function: proxmoxve:getContainer\n arguments:\n nodeName: test\n vmId: 100\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getContainer.\n","properties":{"nodeName":{"type":"string","description":"The node name.\n"},"status":{"type":"string","description":"The status of the container.\n"},"template":{"type":"boolean","description":"Whether the container is a template.\n"},"vmId":{"type":"integer","description":"The container identifier.\n"}},"type":"object","required":["nodeName","vmId"]},"outputs":{"description":"A collection of values returned by getContainer.\n","properties":{"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"The container name.\n","type":"string"},"nodeName":{"type":"string"},"status":{"description":"The status of the container.\n","type":"string"},"tags":{"description":"A list of tags of the container.\n","items":{"type":"string"},"type":"array"},"template":{"description":"Whether the container is a template.\n","type":"boolean"},"vmId":{"type":"integer"}},"required":["name","nodeName","tags","vmId","id"],"type":"object"}},"proxmoxve:index/getContainers:getContainers":{"description":"Retrieves information about all containers in the Proxmox cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainers = proxmoxve.getContainers({\n tags: [\"ubuntu\"],\n});\nconst ubuntuTemplates = proxmoxve.getContainers({\n tags: [\n \"template\",\n \"latest\",\n ],\n filters: [\n {\n name: \"template\",\n values: [\"true\"],\n },\n {\n name: \"status\",\n values: [\"stopped\"],\n },\n {\n name: \"name\",\n regex: true,\n values: [\"^ubuntu-20.*$\"],\n },\n {\n name: \"node_name\",\n regex: true,\n values: [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_containers = proxmoxve.get_containers(tags=[\"ubuntu\"])\nubuntu_templates = proxmoxve.get_containers(tags=[\n \"template\",\n \"latest\",\n ],\n filters=[\n {\n \"name\": \"template\",\n \"values\": [\"true\"],\n },\n {\n \"name\": \"status\",\n \"values\": [\"stopped\"],\n },\n {\n \"name\": \"name\",\n \"regex\": True,\n \"values\": [\"^ubuntu-20.*$\"],\n },\n {\n \"name\": \"node_name\",\n \"regex\": True,\n \"values\": [\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n ],\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainers = ProxmoxVE.GetContainers.Invoke(new()\n {\n Tags = new[]\n {\n \"ubuntu\",\n },\n });\n\n var ubuntuTemplates = ProxmoxVE.GetContainers.Invoke(new()\n {\n Tags = new[]\n {\n \"template\",\n \"latest\",\n },\n Filters = new[]\n {\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"template\",\n Values = new[]\n {\n \"true\",\n },\n },\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"status\",\n Values = new[]\n {\n \"stopped\",\n },\n },\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"name\",\n Regex = true,\n Values = new[]\n {\n \"^ubuntu-20.*$\",\n },\n },\n new ProxmoxVE.Inputs.GetContainersFilterInputArgs\n {\n Name = \"node_name\",\n Regex = true,\n Values = new[]\n {\n \"node_us_[1-3]\",\n \"node_eu_[1-3]\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.GetContainers(ctx, \u0026proxmoxve.GetContainersArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"ubuntu\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.GetContainers(ctx, \u0026proxmoxve.GetContainersArgs{\n\t\t\tTags: []string{\n\t\t\t\t\"template\",\n\t\t\t\t\"latest\",\n\t\t\t},\n\t\t\tFilters: []proxmoxve.GetContainersFilter{\n\t\t\t\t{\n\t\t\t\t\tName: \"template\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"true\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"status\",\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"stopped\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"^ubuntu-20.*$\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tName: \"node_name\",\n\t\t\t\t\tRegex: pulumi.BoolRef(true),\n\t\t\t\t\tValues: []string{\n\t\t\t\t\t\t\"node_us_[1-3]\",\n\t\t\t\t\t\t\"node_eu_[1-3]\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetContainersArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var ubuntuContainers = ProxmoxveFunctions.getContainers(GetContainersArgs.builder()\n .tags(\"ubuntu\")\n .build());\n\n final var ubuntuTemplates = ProxmoxveFunctions.getContainers(GetContainersArgs.builder()\n .tags( \n \"template\",\n \"latest\")\n .filters( \n GetContainersFilterArgs.builder()\n .name(\"template\")\n .values(\"true\")\n .build(),\n GetContainersFilterArgs.builder()\n .name(\"status\")\n .values(\"stopped\")\n .build(),\n GetContainersFilterArgs.builder()\n .name(\"name\")\n .regex(true)\n .values(\"^ubuntu-20.*$\")\n .build(),\n GetContainersFilterArgs.builder()\n .name(\"node_name\")\n .regex(true)\n .values( \n \"node_us_[1-3]\",\n \"node_eu_[1-3]\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n ubuntuContainers:\n fn::invoke:\n function: proxmoxve:getContainers\n arguments:\n tags:\n - ubuntu\n ubuntuTemplates:\n fn::invoke:\n function: proxmoxve:getContainers\n arguments:\n tags:\n - template\n - latest\n filters:\n - name: template\n values:\n - true\n - name: status\n values:\n - stopped\n - name: name\n regex: true\n values:\n - ^ubuntu-20.*$\n - name: node_name\n regex: true\n values:\n - node_us_[1-3]\n - node_eu_[1-3]\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getContainers.\n","properties":{"filters":{"type":"array","items":{"$ref":"#/types/proxmoxve:index/getContainersFilter:getContainersFilter"},"description":"Filter blocks. The container must satisfy all filter blocks to be included in the result.\n"},"nodeName":{"type":"string","description":"The node name. All cluster nodes will be queried in case this is omitted\n"},"tags":{"type":"array","items":{"type":"string"},"description":"A list of tags to filter the containers. The container must have all\nthe tags to be included in the result.\n"}},"type":"object"},"outputs":{"description":"A collection of values returned by getContainers.\n","properties":{"containers":{"description":"The containers list.\n","items":{"$ref":"#/types/proxmoxve:index/getContainersContainer:getContainersContainer"},"type":"array"},"filters":{"items":{"$ref":"#/types/proxmoxve:index/getContainersFilter:getContainersFilter"},"type":"array"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"nodeName":{"description":"The node name.\n","type":"string"},"tags":{"description":"A list of tags of the container.\n","items":{"type":"string"},"type":"array"}},"required":["containers","id"],"type":"object"}},"proxmoxve:index/getFile:getFile":{"description":"Retrieves information about an existing file in a Proxmox Virtual Environment node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuIso = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"iso\",\n fileName: \"ubuntu-22.04.3-live-server-amd64.iso\",\n});\nconst ubuntuContainerTemplate = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"vztmpl\",\n fileName: \"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\",\n});\nconst cloudInitSnippet = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"snippets\",\n fileName: \"cloud-init-config.yaml\",\n});\nconst importedFile = proxmoxve.getFile({\n nodeName: \"pve\",\n datastoreId: \"local\",\n contentType: \"import\",\n fileName: \"imported-config.yaml\",\n});\nexport const ubuntuIsoId = ubuntuIso.then(ubuntuIso =\u003e ubuntuIso.id);\nexport const ubuntuIsoSize = ubuntuIso.then(ubuntuIso =\u003e ubuntuIso.fileSize);\nexport const containerTemplateFormat = ubuntuContainerTemplate.then(ubuntuContainerTemplate =\u003e ubuntuContainerTemplate.fileFormat);\nconst example = new proxmoxve.vm.VirtualMachine(\"example\", {\n nodeName: \"pve\",\n vmId: 100,\n cdrom: {\n fileId: ubuntuIso.then(ubuntuIso =\u003e ubuntuIso.id),\n },\n cpu: {\n cores: 2,\n },\n memory: {\n dedicated: 2048,\n },\n disks: [{\n datastoreId: \"local-lvm\",\n fileFormat: \"qcow2\",\n size: 20,\n }],\n networkDevices: [{\n bridge: \"vmbr0\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_iso = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"iso\",\n file_name=\"ubuntu-22.04.3-live-server-amd64.iso\")\nubuntu_container_template = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"vztmpl\",\n file_name=\"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\")\ncloud_init_snippet = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"snippets\",\n file_name=\"cloud-init-config.yaml\")\nimported_file = proxmoxve.get_file(node_name=\"pve\",\n datastore_id=\"local\",\n content_type=\"import\",\n file_name=\"imported-config.yaml\")\npulumi.export(\"ubuntuIsoId\", ubuntu_iso.id)\npulumi.export(\"ubuntuIsoSize\", ubuntu_iso.file_size)\npulumi.export(\"containerTemplateFormat\", ubuntu_container_template.file_format)\nexample = proxmoxve.vm.VirtualMachine(\"example\",\n node_name=\"pve\",\n vm_id=100,\n cdrom={\n \"file_id\": ubuntu_iso.id,\n },\n cpu={\n \"cores\": 2,\n },\n memory={\n \"dedicated\": 2048,\n },\n disks=[{\n \"datastore_id\": \"local-lvm\",\n \"file_format\": \"qcow2\",\n \"size\": 20,\n }],\n network_devices=[{\n \"bridge\": \"vmbr0\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuIso = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"iso\",\n FileName = \"ubuntu-22.04.3-live-server-amd64.iso\",\n });\n\n var ubuntuContainerTemplate = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"vztmpl\",\n FileName = \"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\",\n });\n\n var cloudInitSnippet = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"snippets\",\n FileName = \"cloud-init-config.yaml\",\n });\n\n var importedFile = ProxmoxVE.GetFile.Invoke(new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n ContentType = \"import\",\n FileName = \"imported-config.yaml\",\n });\n\n var example = new ProxmoxVE.VM.VirtualMachine(\"example\", new()\n {\n NodeName = \"pve\",\n VmId = 100,\n Cdrom = new ProxmoxVE.VM.Inputs.VirtualMachineCdromArgs\n {\n FileId = ubuntuIso.Apply(getFileResult =\u003e getFileResult.Id),\n },\n Cpu = new ProxmoxVE.VM.Inputs.VirtualMachineCpuArgs\n {\n Cores = 2,\n },\n Memory = new ProxmoxVE.VM.Inputs.VirtualMachineMemoryArgs\n {\n Dedicated = 2048,\n },\n Disks = new[]\n {\n new ProxmoxVE.VM.Inputs.VirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n FileFormat = \"qcow2\",\n Size = 20,\n },\n },\n NetworkDevices = new[]\n {\n new ProxmoxVE.VM.Inputs.VirtualMachineNetworkDeviceArgs\n {\n Bridge = \"vmbr0\",\n },\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ubuntuIsoId\"] = ubuntuIso.Apply(getFileResult =\u003e getFileResult.Id),\n [\"ubuntuIsoSize\"] = ubuntuIso.Apply(getFileResult =\u003e getFileResult.FileSize),\n [\"containerTemplateFormat\"] = ubuntuContainerTemplate.Apply(getFileResult =\u003e getFileResult.FileFormat),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntuIso, err := proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"iso\",\n\t\t\tFileName: \"ubuntu-22.04.3-live-server-amd64.iso\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerTemplate, err := proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"vztmpl\",\n\t\t\tFileName: \"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"snippets\",\n\t\t\tFileName: \"cloud-init-config.yaml\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = proxmoxve.GetFile(ctx, \u0026proxmoxve.GetFileArgs{\n\t\t\tNodeName: \"pve\",\n\t\t\tDatastoreId: \"local\",\n\t\t\tContentType: \"import\",\n\t\t\tFileName: \"imported-config.yaml\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ubuntuIsoId\", ubuntuIso.Id)\n\t\tctx.Export(\"ubuntuIsoSize\", ubuntuIso.FileSize)\n\t\tctx.Export(\"containerTemplateFormat\", ubuntuContainerTemplate.FileFormat)\n\t\t_, err = vm.NewVirtualMachine(ctx, \"example\", \u0026vm.VirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tVmId: pulumi.Int(100),\n\t\t\tCdrom: \u0026vm.VirtualMachineCdromArgs{\n\t\t\t\tFileId: pulumi.String(ubuntuIso.Id),\n\t\t\t},\n\t\t\tCpu: \u0026vm.VirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(2),\n\t\t\t},\n\t\t\tMemory: \u0026vm.VirtualMachineMemoryArgs{\n\t\t\t\tDedicated: pulumi.Int(2048),\n\t\t\t},\n\t\t\tDisks: vm.VirtualMachineDiskArray{\n\t\t\t\t\u0026vm.VirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tFileFormat: pulumi.String(\"qcow2\"),\n\t\t\t\t\tSize: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkDevices: vm.VirtualMachineNetworkDeviceArray{\n\t\t\t\t\u0026vm.VirtualMachineNetworkDeviceArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetFileArgs;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachine;\nimport io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachineArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineCdromArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineCpuArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineMemoryArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineDiskArgs;\nimport com.pulumi.proxmoxve.VM.inputs.VirtualMachineNetworkDeviceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var ubuntuIso = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"iso\")\n .fileName(\"ubuntu-22.04.3-live-server-amd64.iso\")\n .build());\n\n final var ubuntuContainerTemplate = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"vztmpl\")\n .fileName(\"ubuntu-22.04-standard_22.04-1_amd64.tar.zst\")\n .build());\n\n final var cloudInitSnippet = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"snippets\")\n .fileName(\"cloud-init-config.yaml\")\n .build());\n\n final var importedFile = ProxmoxveFunctions.getFile(GetFileArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .contentType(\"import\")\n .fileName(\"imported-config.yaml\")\n .build());\n\n ctx.export(\"ubuntuIsoId\", ubuntuIso.id());\n ctx.export(\"ubuntuIsoSize\", ubuntuIso.fileSize());\n ctx.export(\"containerTemplateFormat\", ubuntuContainerTemplate.fileFormat());\n var example = new VirtualMachine(\"example\", VirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .vmId(100)\n .cdrom(VirtualMachineCdromArgs.builder()\n .fileId(ubuntuIso.id())\n .build())\n .cpu(VirtualMachineCpuArgs.builder()\n .cores(2)\n .build())\n .memory(VirtualMachineMemoryArgs.builder()\n .dedicated(2048)\n .build())\n .disks(VirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .fileFormat(\"qcow2\")\n .size(20)\n .build())\n .networkDevices(VirtualMachineNetworkDeviceArgs.builder()\n .bridge(\"vmbr0\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:VM:VirtualMachine\n properties:\n nodeName: pve\n vmId: 100\n cdrom:\n fileId: ${ubuntuIso.id}\n cpu:\n cores: 2\n memory:\n dedicated: 2048\n disks:\n - datastoreId: local-lvm\n fileFormat: qcow2\n size: 20\n networkDevices:\n - bridge: vmbr0\nvariables:\n ubuntuIso:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: iso\n fileName: ubuntu-22.04.3-live-server-amd64.iso\n ubuntuContainerTemplate:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: vztmpl\n fileName: ubuntu-22.04-standard_22.04-1_amd64.tar.zst\n cloudInitSnippet:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: snippets\n fileName: cloud-init-config.yaml\n importedFile:\n fn::invoke:\n function: proxmoxve:getFile\n arguments:\n nodeName: pve\n datastoreId: local\n contentType: import\n fileName: imported-config.yaml\noutputs:\n ubuntuIsoId: ${ubuntuIso.id}\n ubuntuIsoSize: ${ubuntuIso.fileSize}\n containerTemplateFormat: ${ubuntuContainerTemplate.fileFormat}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getFile.\n","properties":{"contentType":{"type":"string","description":"The content type of the file.\n"},"datastoreId":{"type":"string","description":"The identifier of the datastore.\n"},"fileName":{"type":"string","description":"The name of the file.\n"},"nodeName":{"type":"string","description":"The name of the node.\n"}},"type":"object","required":["contentType","datastoreId","fileName","nodeName"]},"outputs":{"description":"A collection of values returned by getFile.\n","properties":{"contentType":{"description":"The content type of the file.\n","type":"string"},"datastoreId":{"description":"The identifier of the datastore.\n","type":"string"},"fileFormat":{"description":"The format of the file.\n","type":"string"},"fileName":{"description":"The name of the file.\n","type":"string"},"fileSize":{"description":"The size of the file in bytes.\n","type":"integer"},"id":{"description":"The unique identifier of the file (volume ID).\n","type":"string"},"nodeName":{"description":"The name of the node.\n","type":"string"},"vmid":{"description":"The VM ID associated with the file (if applicable).\n","type":"integer"}},"required":["contentType","datastoreId","fileFormat","fileName","fileSize","id","nodeName","vmid"],"type":"object"}},"proxmoxve:index/getNode:getNode":{"description":"Retrieves information about node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst node = proxmoxve.getNode({});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nnode = proxmoxve.get_node()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var node = ProxmoxVE.GetNode.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := proxmoxve.GetNode(ctx, \u0026proxmoxve.GetNodeArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.ProxmoxveFunctions;\nimport com.pulumi.proxmoxve.inputs.GetNodeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var node = ProxmoxveFunctions.getNode(GetNodeArgs.builder()\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n node:\n fn::invoke:\n function: proxmoxve:getNode\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n","inputs":{"description":"A collection of arguments for invoking getNode.\n","properties":{"nodeName":{"type":"string","description":"The node name.\n"}},"type":"object","required":["nodeName"]},"outputs":{"description":"A collection of values returned by getNode.\n","properties":{"cpuCount":{"description":"The CPU count on the node.\n","type":"integer"},"cpuModel":{"description":"The CPU model on the node.\n","type":"string"},"cpuSockets":{"description":"The CPU utilization on the node.\n","type":"integer"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"memoryAvailable":{"description":"The memory available on the node.\n","type":"integer"},"memoryTotal":{"description":"The total memory on the node.\n","type":"integer"},"memoryUsed":{"description":"The memory used on the node.\n","type":"integer"},"nodeName":{"type":"string"},"uptime":{"description":"The uptime in seconds on the node.\n","type":"integer"}},"required":["cpuCount","cpuModel","cpuSockets","memoryAvailable","memoryTotal","memoryUsed","nodeName","uptime","id"],"type":"object"}},"proxmoxve:index/getVm2:getVm2":{"description":"!\u003e **DO NOT USE**\nThis is an experimental implementation of a Proxmox VM datasource using Plugin Framework.\n","inputs":{"description":"A collection of arguments for invoking getVm2.\n","properties":{"cpu":{"$ref":"#/types/proxmoxve:index/getVm2Cpu:getVm2Cpu","description":"The CPU configuration.\n"},"description":{"type":"string","description":"The description of the VM.\n"},"id":{"type":"integer","description":"The unique identifier of the VM in the Proxmox cluster.\n"},"name":{"type":"string","description":"The name of the VM.\n"},"nodeName":{"type":"string","description":"The name of the node where the VM is provisioned.\n"},"rng":{"$ref":"#/types/proxmoxve:index/getVm2Rng:getVm2Rng","description":"The RNG (Random Number Generator) configuration.\n"},"tags":{"type":"array","items":{"type":"string"},"description":"The tags assigned to the VM.\n"},"template":{"type":"boolean","description":"Whether the VM is a template.\n"},"timeouts":{"$ref":"#/types/proxmoxve:index/getVm2Timeouts:getVm2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:index/getVm2Vga:getVm2Vga","description":"The VGA configuration.\n"}},"type":"object","required":["id","nodeName"]},"outputs":{"description":"A collection of values returned by getVm2.\n","properties":{"cpu":{"$ref":"#/types/proxmoxve:index/getVm2Cpu:getVm2Cpu","description":"The CPU configuration.\n"},"description":{"description":"The description of the VM.\n","type":"string"},"id":{"description":"The unique identifier of the VM in the Proxmox cluster.\n","type":"integer"},"name":{"description":"The name of the VM.\n","type":"string"},"nodeName":{"description":"The name of the node where the VM is provisioned.\n","type":"string"},"rng":{"$ref":"#/types/proxmoxve:index/getVm2Rng:getVm2Rng","description":"The RNG (Random Number Generator) configuration.\n"},"tags":{"description":"The tags assigned to the VM.\n","items":{"type":"string"},"type":"array"},"template":{"description":"Whether the VM is a template.\n","type":"boolean"},"timeouts":{"$ref":"#/types/proxmoxve:index/getVm2Timeouts:getVm2Timeouts"},"vga":{"$ref":"#/types/proxmoxve:index/getVm2Vga:getVm2Vga","description":"The VGA configuration.\n"}},"required":["cpu","id","nodeName","rng","tags","vga"],"type":"object"}},"pulumi:providers:proxmoxve/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"type":"ref","$ref":"#/provider"}},"type":"pulumi:providers:proxmoxve/terraformConfig","required":["__self__"]},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}}}} \ No newline at end of file diff --git a/provider/cmd/pulumi-resource-proxmoxve/schema.json b/provider/cmd/pulumi-resource-proxmoxve/schema.json index bc5585ea..58512a79 100644 --- a/provider/cmd/pulumi-resource-proxmoxve/schema.json +++ b/provider/cmd/pulumi-resource-proxmoxve/schema.json @@ -131,6 +131,26 @@ } }, "types": { + "proxmoxve:Acme/CertificateDomain:CertificateDomain": { + "properties": { + "alias": { + "type": "string", + "description": "An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records.\n" + }, + "domain": { + "type": "string", + "description": "The domain name to include in the certificate.\n" + }, + "plugin": { + "type": "string", + "description": "The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used.\n" + } + }, + "type": "object", + "required": [ + "domain" + ] + }, "proxmoxve:Acme/getAccountAccount:getAccountAccount": { "properties": { "contacts": { @@ -309,6 +329,10 @@ }, "description": "List of extra mount options.\n" }, + "pathInDatastore": { + "type": "string", + "description": "The in-datastore path to the disk image.\nUse this attribute for cross-resource references.\n" + }, "quota": { "type": "boolean", "description": "Enable user quotas for the container rootfs\n" @@ -319,11 +343,17 @@ }, "size": { "type": "integer", - "description": "The size of the root filesystem in gigabytes (defaults\nto \u003cspan pulumi-lang-nodejs=\"`4`\" pulumi-lang-dotnet=\"`4`\" pulumi-lang-go=\"`4`\" pulumi-lang-python=\"`4`\" pulumi-lang-yaml=\"`4`\" pulumi-lang-java=\"`4`\"\u003e`4`\u003c/span\u003e). When set to 0 a directory or zfs/btrfs subvolume will be created.\nRequires \u003cspan pulumi-lang-nodejs=\"`datastoreId`\" pulumi-lang-dotnet=\"`DatastoreId`\" pulumi-lang-go=\"`datastoreId`\" pulumi-lang-python=\"`datastore_id`\" pulumi-lang-yaml=\"`datastoreId`\" pulumi-lang-java=\"`datastoreId`\"\u003e`datastore_id`\u003c/span\u003e to be set.\n", - "willReplaceOnChanges": true + "description": "The size of the root filesystem in gigabytes (defaults\nto \u003cspan pulumi-lang-nodejs=\"`4`\" pulumi-lang-dotnet=\"`4`\" pulumi-lang-go=\"`4`\" pulumi-lang-python=\"`4`\" pulumi-lang-yaml=\"`4`\" pulumi-lang-java=\"`4`\"\u003e`4`\u003c/span\u003e). When set to 0 a directory or zfs/btrfs subvolume will be created.\nRequires \u003cspan pulumi-lang-nodejs=\"`datastoreId`\" pulumi-lang-dotnet=\"`DatastoreId`\" pulumi-lang-go=\"`datastoreId`\" pulumi-lang-python=\"`datastore_id`\" pulumi-lang-yaml=\"`datastoreId`\" pulumi-lang-java=\"`datastoreId`\"\u003e`datastore_id`\u003c/span\u003e to be set.\n" } }, - "type": "object" + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "pathInDatastore" + ] + } + } }, "proxmoxve:CT/ContainerFeatures:ContainerFeatures": { "properties": { @@ -487,6 +517,10 @@ "type": "string", "description": "Path to the mount point as seen from inside the\ncontainer.\n" }, + "pathInDatastore": { + "type": "string", + "description": "The in-datastore path to the mount point volume.\nUse this attribute for cross-resource references instead of \u003cspan pulumi-lang-nodejs=\"`volume`\" pulumi-lang-dotnet=\"`Volume`\" pulumi-lang-go=\"`volume`\" pulumi-lang-python=\"`volume`\" pulumi-lang-yaml=\"`volume`\" pulumi-lang-java=\"`volume`\"\u003e`volume`\u003c/span\u003e.\n" + }, "quota": { "type": "boolean", "description": "Enable user quotas inside the container (not supported\nwith ZFS subvolumes).\n" @@ -505,18 +539,29 @@ }, "size": { "type": "string", - "description": "Volume size (only for volume mount points).\nCan be specified with a unit suffix (e.g. `10G`).\n" + "description": "Volume size (only for volume mount points).\nCan be specified with a unit suffix (e.g. `10G`).\n", + "willReplaceOnChanges": true }, "volume": { "type": "string", - "description": "Volume, device or directory to mount into the\ncontainer.\n" + "description": "Volume, device or directory to mount into the\ncontainer.\n", + "willReplaceOnChanges": true } }, "type": "object", "required": [ "path", "volume" - ] + ], + "language": { + "nodejs": { + "requiredOutputs": [ + "path", + "pathInDatastore", + "volume" + ] + } + } }, "proxmoxve:CT/ContainerNetworkInterface:ContainerNetworkInterface": { "properties": { @@ -1412,6 +1457,94 @@ } } }, + "proxmoxve:Storage/CIFSBackups:CIFSBackups": { + "properties": { + "keepAll": { + "type": "boolean", + "description": "Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n" + }, + "keepDaily": { + "type": "integer", + "description": "The number of daily backups to keep. Older backups will be removed.\n" + }, + "keepHourly": { + "type": "integer", + "description": "The number of hourly backups to keep. Older backups will be removed.\n" + }, + "keepLast": { + "type": "integer", + "description": "Specifies the number of the most recent backups to keep, regardless of their age.\n" + }, + "keepMonthly": { + "type": "integer", + "description": "The number of monthly backups to keep. Older backups will be removed.\n" + }, + "keepWeekly": { + "type": "integer", + "description": "The number of weekly backups to keep. Older backups will be removed.\n" + }, + "keepYearly": { + "type": "integer", + "description": "The number of yearly backups to keep. Older backups will be removed.\n" + }, + "maxProtectedBackups": { + "type": "integer", + "description": "The maximum number of protected backups per guest. Use '-1' for unlimited.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "keepAll" + ] + } + } + }, + "proxmoxve:Storage/DirectoryBackups:DirectoryBackups": { + "properties": { + "keepAll": { + "type": "boolean", + "description": "Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n" + }, + "keepDaily": { + "type": "integer", + "description": "The number of daily backups to keep. Older backups will be removed.\n" + }, + "keepHourly": { + "type": "integer", + "description": "The number of hourly backups to keep. Older backups will be removed.\n" + }, + "keepLast": { + "type": "integer", + "description": "Specifies the number of the most recent backups to keep, regardless of their age.\n" + }, + "keepMonthly": { + "type": "integer", + "description": "The number of monthly backups to keep. Older backups will be removed.\n" + }, + "keepWeekly": { + "type": "integer", + "description": "The number of weekly backups to keep. Older backups will be removed.\n" + }, + "keepYearly": { + "type": "integer", + "description": "The number of yearly backups to keep. Older backups will be removed.\n" + }, + "maxProtectedBackups": { + "type": "integer", + "description": "The maximum number of protected backups per guest. Use '-1' for unlimited.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "keepAll" + ] + } + } + }, "proxmoxve:Storage/FileSourceFile:FileSourceFile": { "properties": { "changed": { @@ -1474,6 +1607,94 @@ "fileName" ] }, + "proxmoxve:Storage/NFSBackups:NFSBackups": { + "properties": { + "keepAll": { + "type": "boolean", + "description": "Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n" + }, + "keepDaily": { + "type": "integer", + "description": "The number of daily backups to keep. Older backups will be removed.\n" + }, + "keepHourly": { + "type": "integer", + "description": "The number of hourly backups to keep. Older backups will be removed.\n" + }, + "keepLast": { + "type": "integer", + "description": "Specifies the number of the most recent backups to keep, regardless of their age.\n" + }, + "keepMonthly": { + "type": "integer", + "description": "The number of monthly backups to keep. Older backups will be removed.\n" + }, + "keepWeekly": { + "type": "integer", + "description": "The number of weekly backups to keep. Older backups will be removed.\n" + }, + "keepYearly": { + "type": "integer", + "description": "The number of yearly backups to keep. Older backups will be removed.\n" + }, + "maxProtectedBackups": { + "type": "integer", + "description": "The maximum number of protected backups per guest. Use '-1' for unlimited.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "keepAll" + ] + } + } + }, + "proxmoxve:Storage/PBSBackups:PBSBackups": { + "properties": { + "keepAll": { + "type": "boolean", + "description": "Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set.\n" + }, + "keepDaily": { + "type": "integer", + "description": "The number of daily backups to keep. Older backups will be removed.\n" + }, + "keepHourly": { + "type": "integer", + "description": "The number of hourly backups to keep. Older backups will be removed.\n" + }, + "keepLast": { + "type": "integer", + "description": "Specifies the number of the most recent backups to keep, regardless of their age.\n" + }, + "keepMonthly": { + "type": "integer", + "description": "The number of monthly backups to keep. Older backups will be removed.\n" + }, + "keepWeekly": { + "type": "integer", + "description": "The number of weekly backups to keep. Older backups will be removed.\n" + }, + "keepYearly": { + "type": "integer", + "description": "The number of yearly backups to keep. Older backups will be removed.\n" + }, + "maxProtectedBackups": { + "type": "integer", + "description": "The maximum number of protected backups per guest. Use '-1' for unlimited.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "keepAll" + ] + } + } + }, "proxmoxve:Storage/getDatastoresDatastore:getDatastoresDatastore": { "properties": { "active": { @@ -1552,47 +1773,69 @@ }, "type": "object" }, - "proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom": { + "proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom": { "properties": { "fileId": { "type": "string", "description": "The file ID of the CD-ROM, or `cdrom|none`. Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM empty. Use \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e to connect to the physical drive.\n" } }, - "type": "object", - "language": { - "nodejs": { - "requiredOutputs": [ - "fileId" - ] - } - } + "type": "object" }, - "proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone": { + "proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone": { "properties": { - "id": { + "bandwidthLimit": { "type": "integer", - "description": "The ID of the VM to clone.\n" + "description": "Clone bandwidth limit in MB/s.\n" + }, + "full": { + "type": "boolean", + "description": "Perform a full clone (true) or linked clone (false).\n" + }, + "poolId": { + "type": "string", + "description": "Pool to assign the cloned VM to.\n" }, "retries": { "type": "integer", - "description": "The number of retries to perform when cloning the VM (default: 3).\n" + "description": "Number of retries for clone operations.\n" + }, + "snapshotName": { + "type": "string", + "description": "Snapshot name to clone from.\n" + }, + "sourceNodeName": { + "type": "string", + "description": "Source node of the VM/template. Defaults to target node if unset.\n" + }, + "sourceVmId": { + "type": "integer", + "description": "Source VM/template ID to clone from.\n" + }, + "targetDatastore": { + "type": "string", + "description": "Target datastore for cloned disks.\n" + }, + "targetFormat": { + "type": "string", + "description": "Target disk format for clone (e.g., raw, qcow2).\n" } }, "type": "object", "required": [ - "id" + "sourceVmId" ], "language": { "nodejs": { "requiredOutputs": [ - "id", - "retries" + "full", + "retries", + "sourceVmId" ] } } }, - "proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu": { + "proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu": { "properties": { "affinity": { "type": "string", @@ -1600,7 +1843,7 @@ }, "architecture": { "type": "string", - "description": "The CPU architecture `\u003caarch64 | x86_64\u003e` (defaults to the host). Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n" + "description": "The CPU architecture `\u003caarch64 | x86_64\u003e` (defaults to the host). Setting \u003cspan pulumi-lang-nodejs=\"`architecture`\" pulumi-lang-dotnet=\"`Architecture`\" pulumi-lang-go=\"`architecture`\" pulumi-lang-python=\"`architecture`\" pulumi-lang-yaml=\"`architecture`\" pulumi-lang-java=\"`architecture`\"\u003e`architecture`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n" }, "cores": { "type": "integer", @@ -1638,260 +1881,264 @@ "description": "CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs.\n" } }, - "type": "object", - "language": { - "nodejs": { - "requiredOutputs": [ - "affinity", - "architecture", - "cores", - "flags", - "hotplugged", - "limit", - "numa", - "sockets", - "type", - "units" - ] - } - } + "type": "object" }, - "proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng": { + "proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete": { "properties": { - "maxBytes": { - "type": "integer", - "description": "Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous).\n" - }, - "period": { - "type": "integer", - "description": "Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous).\n" + "disks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Disk slots to delete (e.g., scsi2).\n" }, - "source": { - "type": "string", - "description": "The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n" + "networks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Network slots to delete (e.g., net1).\n" } }, - "type": "object", - "language": { - "nodejs": { - "requiredOutputs": [ - "maxBytes", - "period", - "source" - ] - } - } + "type": "object" }, - "proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts": { + "proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk": { "properties": { - "create": { + "aio": { "type": "string", - "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n" + "description": "AIO mode (io_uring, native, threads).\n" }, - "delete": { + "backup": { + "type": "boolean", + "description": "Include disk in backups.\n" + }, + "cache": { "type": "string", - "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n" + "description": "Cache mode.\n" }, - "read": { + "datastoreId": { "type": "string", - "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n" + "description": "Target datastore for new disks when file is not provided.\n" }, - "update": { + "discard": { "type": "string", - "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n" - } - }, - "type": "object" - }, - "proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga": { - "properties": { - "clipboard": { + "description": "Discard/trim behavior.\n" + }, + "file": { "type": "string", - "description": "Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e is available. Migration with VNC clipboard is not supported by Proxmox.\n" + "description": "Existing volume reference (e.g., local-lvm:vm-100-disk-0).\n" }, - "memory": { - "type": "integer", - "description": "The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n" + "format": { + "type": "string", + "description": "Disk format (raw, qcow2, vmdk).\n" }, - "type": { + "importFrom": { "type": "string", - "description": "The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n" - } - }, - "type": "object", - "language": { - "nodejs": { - "requiredOutputs": [ - "clipboard", - "memory", - "type" - ] - } - } - }, - "proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent": { - "properties": { - "enabled": { + "description": "Import source volume/file id.\n" + }, + "iothread": { "type": "boolean", - "description": "Whether to enable the QEMU agent (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + "description": "Use IO thread.\n" }, - "timeout": { + "media": { "type": "string", - "description": "The maximum amount of time to wait for data from\nthe QEMU agent to become available ( defaults to \u003cspan pulumi-lang-nodejs=\"`15m`\" pulumi-lang-dotnet=\"`15m`\" pulumi-lang-go=\"`15m`\" pulumi-lang-python=\"`15m`\" pulumi-lang-yaml=\"`15m`\" pulumi-lang-java=\"`15m`\"\u003e`15m`\u003c/span\u003e).\n" + "description": "Disk media (e.g., disk, cdrom).\n" }, - "trim": { + "replicate": { "type": "boolean", - "description": "Whether to enable the FSTRIM feature in the QEMU agent\n(defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + "description": "Consider disk for replication.\n" }, - "type": { + "serial": { "type": "string", - "description": "The QEMU agent interface type (defaults to \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e).\n" + "description": "Disk serial number.\n" }, - "waitForIp": { - "$ref": "#/types/proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp", - "description": "Configuration for waiting for specific IP address types when the VM starts.\n" + "sizeGb": { + "type": "integer", + "description": "Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set \u003cspan pulumi-lang-nodejs=\"`sizeGb`\" pulumi-lang-dotnet=\"`SizeGb`\" pulumi-lang-go=\"`sizeGb`\" pulumi-lang-python=\"`size_gb`\" pulumi-lang-yaml=\"`sizeGb`\" pulumi-lang-java=\"`sizeGb`\"\u003e`size_gb`\u003c/span\u003e to a value smaller than the current disk size will result in an error. Only disk expansion is allowed.\n" + }, + "ssd": { + "type": "boolean", + "description": "Mark disk as SSD.\n" } }, "type": "object" }, - "proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp": { + "proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory": { "properties": { - "ipv4": { - "type": "boolean", - "description": "Wait for at least one IPv4 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + "balloon": { + "type": "integer", + "description": "Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e disables the balloon driver entirely (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n" }, - "ipv6": { + "hugepages": { + "type": "string", + "description": "Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. \n\n**Options:**\n- \u003cspan pulumi-lang-nodejs=\"`2`\" pulumi-lang-dotnet=\"`2`\" pulumi-lang-go=\"`2`\" pulumi-lang-python=\"`2`\" pulumi-lang-yaml=\"`2`\" pulumi-lang-java=\"`2`\"\u003e`2`\u003c/span\u003e - Use 2 MiB hugepages\n- \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e - Use 1 GiB hugepages\n- \u003cspan pulumi-lang-nodejs=\"`any`\" pulumi-lang-dotnet=\"`Any`\" pulumi-lang-go=\"`any`\" pulumi-lang-python=\"`any`\" pulumi-lang-yaml=\"`any`\" pulumi-lang-java=\"`any`\"\u003e`any`\u003c/span\u003e - Use any available hugepage size\n" + }, + "keepHugepages": { "type": "boolean", - "description": "Wait for at least one IPv6 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nWhen \u003cspan pulumi-lang-nodejs=\"`waitForIp`\" pulumi-lang-dotnet=\"`WaitForIp`\" pulumi-lang-go=\"`waitForIp`\" pulumi-lang-python=\"`wait_for_ip`\" pulumi-lang-yaml=\"`waitForIp`\" pulumi-lang-java=\"`waitForIp`\"\u003e`wait_for_ip`\u003c/span\u003e is not specified or both \u003cspan pulumi-lang-nodejs=\"`ipv4`\" pulumi-lang-dotnet=\"`Ipv4`\" pulumi-lang-go=\"`ipv4`\" pulumi-lang-python=\"`ipv4`\" pulumi-lang-yaml=\"`ipv4`\" pulumi-lang-java=\"`ipv4`\"\u003e`ipv4`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ipv6`\" pulumi-lang-dotnet=\"`Ipv6`\" pulumi-lang-go=\"`ipv6`\" pulumi-lang-python=\"`ipv6`\" pulumi-lang-yaml=\"`ipv6`\" pulumi-lang-java=\"`ipv6`\"\u003e`ipv6`\u003c/span\u003e are \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, the provider waits for any valid global unicast address (IPv4 or IPv6). In dual-stack networks where DHCPv6 responds faster, this may result in only IPv6 addresses being available. Set `ipv4 = true` to ensure IPv4 address availability.\n" + "description": "Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e keeps them allocated for faster VM startup (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "shares": { + "type": "integer", + "description": "CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to \u003cspan pulumi-lang-nodejs=\"`1000`\" pulumi-lang-dotnet=\"`1000`\" pulumi-lang-go=\"`1000`\" pulumi-lang-python=\"`1000`\" pulumi-lang-yaml=\"`1000`\" pulumi-lang-java=\"`1000`\"\u003e`1000`\u003c/span\u003e).\n" + }, + "size": { + "type": "integer", + "description": "Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon \u003e 0), memory between \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to \u003cspan pulumi-lang-nodejs=\"`512`\" pulumi-lang-dotnet=\"`512`\" pulumi-lang-go=\"`512`\" pulumi-lang-python=\"`512`\" pulumi-lang-yaml=\"`512`\" pulumi-lang-java=\"`512`\"\u003e`512`\u003c/span\u003e MiB).\n" } }, "type": "object" }, - "proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev": { + "proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork": { "properties": { - "allowSmt": { - "type": "boolean", - "description": "Sets policy bit to allow Simultaneous Multi Threading (SMT)\n(Ignored unless for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + "bridge": { + "type": "string", + "description": "Bridge name.\n" }, - "kernelHashes": { + "firewall": { "type": "boolean", - "description": "Add kernel hashes to guest firmware for measured linux kernel launch (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + "description": "Enable firewall on this interface.\n" }, - "noDebug": { + "linkDown": { "type": "boolean", - "description": "Sets policy bit to disallow debugging of guest (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + "description": "Keep link down.\n" }, - "noKeySharing": { - "type": "boolean", - "description": "Sets policy bit to disallow key sharing with other guests (Ignored for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nThe \u003cspan pulumi-lang-nodejs=\"`amdSev`\" pulumi-lang-dotnet=\"`AmdSev`\" pulumi-lang-go=\"`amdSev`\" pulumi-lang-python=\"`amd_sev`\" pulumi-lang-yaml=\"`amdSev`\" pulumi-lang-java=\"`amdSev`\"\u003e`amd_sev`\u003c/span\u003e setting is only allowed for a `root@pam` authenticated user.\n" + "macAddress": { + "type": "string", + "description": "MAC address (computed if omitted).\n" }, - "type": { + "model": { "type": "string", - "description": "Enable standard SEV with \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e or enable experimental SEV-ES with the \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e option or enable experimental SEV-SNP with the \u003cspan pulumi-lang-nodejs=\"`snp`\" pulumi-lang-dotnet=\"`Snp`\" pulumi-lang-go=\"`snp`\" pulumi-lang-python=\"`snp`\" pulumi-lang-yaml=\"`snp`\" pulumi-lang-java=\"`snp`\"\u003e`snp`\u003c/span\u003e option (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n" + "description": "NIC model (e.g., virtio, e1000).\n" + }, + "mtu": { + "type": "integer", + "description": "Interface MTU.\n" + }, + "queues": { + "type": "integer", + "description": "Number of multiqueue NIC queues.\n" + }, + "rateLimit": { + "type": "number", + "description": "Rate limit (MB/s).\n" + }, + "tag": { + "type": "integer", + "description": "VLAN tag.\n" + }, + "trunks": { + "type": "array", + "items": { + "type": "integer" + }, + "description": "Trunk VLAN IDs.\n" } }, "type": "object" }, - "proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice": { + "proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng": { "properties": { - "device": { - "type": "string", - "description": "The device (defaults to `intel-hda`).\n- `AC97` - Intel 82801AA AC97 Audio.\n- `ich9-intel-hda` - Intel HD Audio Controller (ich9).\n- `intel-hda` - Intel HD Audio.\n" + "maxBytes": { + "type": "integer", + "description": "Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous).\n" }, - "driver": { - "type": "string", - "description": "The driver (defaults to \u003cspan pulumi-lang-nodejs=\"`spice`\" pulumi-lang-dotnet=\"`Spice`\" pulumi-lang-go=\"`spice`\" pulumi-lang-python=\"`spice`\" pulumi-lang-yaml=\"`spice`\" pulumi-lang-java=\"`spice`\"\u003e`spice`\u003c/span\u003e).\n" + "period": { + "type": "integer", + "description": "Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous).\n" }, - "enabled": { - "type": "boolean", - "description": "Whether to enable the audio device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + "source": { + "type": "string", + "description": "The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n" } }, "type": "object" }, - "proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom": { + "proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts": { "properties": { - "enabled": { - "type": "boolean", - "description": "Whether to enable the CD-ROM drive (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). *Deprecated*. The attribute will be removed in the next version of the provider.\nSet \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n", - "deprecationMessage": "Remove this attribute's configuration as it is no longer used and the attribute will be removed in the next version of the provider. Set \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CDROM drive empty." + "create": { + "type": "string", + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n" }, - "fileId": { + "delete": { "type": "string", - "description": "A file ID for an ISO file (defaults to \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e as\nin the physical drive). Use \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n" + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n" }, - "interface": { + "read": { "type": "string", - "description": "A hardware interface to connect CD-ROM drive to (defaults to \u003cspan pulumi-lang-nodejs=\"`ide3`\" pulumi-lang-dotnet=\"`Ide3`\" pulumi-lang-go=\"`ide3`\" pulumi-lang-python=\"`ide3`\" pulumi-lang-yaml=\"`ide3`\" pulumi-lang-java=\"`ide3`\"\u003e`ide3`\u003c/span\u003e).\n\"Must be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. \" +\n\"Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n" + }, + "update": { + "type": "string", + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n" } }, "type": "object" }, - "proxmoxve:VM/VirtualMachineClone:VirtualMachineClone": { + "proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga": { "properties": { - "datastoreId": { - "type": "string", - "description": "The identifier for the target datastore.\n", - "willReplaceOnChanges": true - }, - "full": { - "type": "boolean", - "description": "Full or linked clone (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n", - "willReplaceOnChanges": true - }, - "nodeName": { + "clipboard": { "type": "string", - "description": "The name of the source node (leave blank, if\nequal to the \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e argument).\n", - "willReplaceOnChanges": true + "description": "Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e is available. Migration with VNC clipboard is not supported by Proxmox.\n" }, - "retries": { + "memory": { "type": "integer", - "description": "Number of retries in Proxmox for clone vm.\nSometimes Proxmox errors with timeout when creating multiple clones at\nonce.\n", - "willReplaceOnChanges": true + "description": "The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n" }, - "vmId": { - "type": "integer", - "description": "The identifier for the source VM.\n", - "willReplaceOnChanges": true + "type": { + "type": "string", + "description": "The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n" + } + }, + "type": "object" + }, + "proxmoxve:VM/VirtualMachine2Cdrom:VirtualMachine2Cdrom": { + "properties": { + "fileId": { + "type": "string", + "description": "The file ID of the CD-ROM, or `cdrom|none`. Defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM empty. Use \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e to connect to the physical drive.\n" } }, "type": "object", - "required": [ - "vmId" - ] + "language": { + "nodejs": { + "requiredOutputs": [ + "fileId" + ] + } + } }, - "proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu": { + "proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu": { "properties": { "affinity": { "type": "string", - "description": "The CPU cores that are used to run the VM’s vCPU. The\nvalue is a list of CPU IDs, separated by commas. The CPU IDs are zero-based.\nFor example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four\nCPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n" + "description": "The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n" }, "architecture": { "type": "string", - "description": "The CPU architecture (defaults to \u003cspan pulumi-lang-nodejs=\"`x8664`\" pulumi-lang-dotnet=\"`X8664`\" pulumi-lang-go=\"`x8664`\" pulumi-lang-python=\"`x86_64`\" pulumi-lang-yaml=\"`x8664`\" pulumi-lang-java=\"`x8664`\"\u003e`x86_64`\u003c/span\u003e).\n" + "description": "The CPU architecture `\u003caarch64 | x86_64\u003e` (defaults to the host). Setting \u003cspan pulumi-lang-nodejs=\"`architecture`\" pulumi-lang-dotnet=\"`Architecture`\" pulumi-lang-go=\"`architecture`\" pulumi-lang-python=\"`architecture`\" pulumi-lang-yaml=\"`architecture`\" pulumi-lang-java=\"`architecture`\"\u003e`architecture`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n" }, "cores": { "type": "integer", - "description": "The number of CPU cores (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n" + "description": "The number of CPU cores per socket (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n" }, "flags": { "type": "array", "items": { "type": "string" }, - "description": "The CPU flags.\n- `+aes`/`-aes` - Activate AES instruction set for HW acceleration.\n- `+amd-no-ssb`/`-amd-no-ssb` - Notifies guest OS that host is not\nvulnerable for Spectre on AMD CPUs.\n- `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with\nAMD CPUs, best used with \"virt-ssbd\".\n- `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested\nvirtualization (only supported on Intel CPUs).\n- `+hv-tlbflush`/`-hv-tlbflush` - Improve performance in overcommitted\nWindows guests (may lead to guest BSOD on old CPUs).\n- `+ibpb`/`-ibpb` - Allows improved Spectre mitigation on AMD CPUs.\n- `+md-clear`/`-md-clear` - Required to let the guest OS know if MDS is\nmitigated correctly.\n- `+pcid`/`-pcid` - Meltdown fix cost reduction on Westmere, Sandy- and\nIvy Bridge Intel CPUs.\n- `+pdpe1gb`/`-pdpe1gb` - Allows guest OS to use 1 GB size pages, if\nhost HW supports it.\n- `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with\nIntel CPUs.\n- `+ssbd`/`-ssbd` - Protection for \"Speculative Store Bypass\" for Intel\nmodels.\n- `+virt-ssbd`/`-virt-ssbd` - Basis for \"Speculative Store Bypass\"\nprotection for AMD models.\n" + "description": "Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: \u003cspan pulumi-lang-nodejs=\"`pcid`\" pulumi-lang-dotnet=\"`Pcid`\" pulumi-lang-go=\"`pcid`\" pulumi-lang-python=\"`pcid`\" pulumi-lang-yaml=\"`pcid`\" pulumi-lang-java=\"`pcid`\"\u003e`pcid`\u003c/span\u003e, `spec-ctrl`, \u003cspan pulumi-lang-nodejs=\"`ibpb`\" pulumi-lang-dotnet=\"`Ibpb`\" pulumi-lang-go=\"`ibpb`\" pulumi-lang-python=\"`ibpb`\" pulumi-lang-yaml=\"`ibpb`\" pulumi-lang-java=\"`ibpb`\"\u003e`ibpb`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`ssbd`\" pulumi-lang-dotnet=\"`Ssbd`\" pulumi-lang-go=\"`ssbd`\" pulumi-lang-python=\"`ssbd`\" pulumi-lang-yaml=\"`ssbd`\" pulumi-lang-java=\"`ssbd`\"\u003e`ssbd`\u003c/span\u003e, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, \u003cspan pulumi-lang-nodejs=\"`pdpe1gb`\" pulumi-lang-dotnet=\"`Pdpe1gb`\" pulumi-lang-go=\"`pdpe1gb`\" pulumi-lang-python=\"`pdpe1gb`\" pulumi-lang-yaml=\"`pdpe1gb`\" pulumi-lang-java=\"`pdpe1gb`\"\u003e`pdpe1gb`\u003c/span\u003e, `md-clear`, `hv-tlbflush`, `hv-evmcs`, \u003cspan pulumi-lang-nodejs=\"`aes`\" pulumi-lang-dotnet=\"`Aes`\" pulumi-lang-go=\"`aes`\" pulumi-lang-python=\"`aes`\" pulumi-lang-yaml=\"`aes`\" pulumi-lang-java=\"`aes`\"\u003e`aes`\u003c/span\u003e.\n" }, "hotplugged": { "type": "integer", - "description": "The number of hotplugged vCPUs (defaults\nto \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n" + "description": "The number of hotplugged vCPUs (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n" }, "limit": { "type": "integer", - "description": "Limit of CPU usage, `0...128`. (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e -- no limit).\n" + "description": "Limit of CPU usage (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e which means no limit).\n" }, "numa": { "type": "boolean", - "description": "Enable/disable NUMA. (default to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n" + "description": "Enable NUMA (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" }, "sockets": { "type": "integer", @@ -1899,60 +2146,328 @@ }, "type": { "type": "string", - "description": "The emulated CPU type, it's recommended to\nuse `x86-64-v2-AES` (defaults to \u003cspan pulumi-lang-nodejs=\"`qemu64`\" pulumi-lang-dotnet=\"`Qemu64`\" pulumi-lang-go=\"`qemu64`\" pulumi-lang-python=\"`qemu64`\" pulumi-lang-yaml=\"`qemu64`\" pulumi-lang-java=\"`qemu64`\"\u003e`qemu64`\u003c/span\u003e).\n" + "description": "Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to \u003cspan pulumi-lang-nodejs=\"`kvm64`\" pulumi-lang-dotnet=\"`Kvm64`\" pulumi-lang-go=\"`kvm64`\" pulumi-lang-python=\"`kvm64`\" pulumi-lang-yaml=\"`kvm64`\" pulumi-lang-java=\"`kvm64`\"\u003e`kvm64`\u003c/span\u003e). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information.\n" }, "units": { "type": "integer", - "description": "The CPU units. PVE default is \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e for cgroups v1 and \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e for cgroups v2.\n" + "description": "CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs.\n" } }, "type": "object", "language": { "nodejs": { "requiredOutputs": [ + "affinity", + "architecture", + "cores", + "flags", + "hotplugged", + "limit", + "numa", + "sockets", + "type", "units" ] } } }, - "proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk": { + "proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng": { "properties": { - "aio": { - "type": "string", - "description": "The disk AIO mode (defaults to \u003cspan pulumi-lang-nodejs=\"`ioUring`\" pulumi-lang-dotnet=\"`IoUring`\" pulumi-lang-go=\"`ioUring`\" pulumi-lang-python=\"`io_uring`\" pulumi-lang-yaml=\"`ioUring`\" pulumi-lang-java=\"`ioUring`\"\u003e`io_uring`\u003c/span\u003e).\n" - }, - "backup": { - "type": "boolean", - "description": "Whether the drive should be included when making backups (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" - }, - "cache": { - "type": "string", - "description": "The cache type (defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n" + "maxBytes": { + "type": "integer", + "description": "Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous).\n" }, - "datastoreId": { - "type": "string", - "description": "The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n" + "period": { + "type": "integer", + "description": "Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous).\n" }, - "discard": { + "source": { "type": "string", - "description": "Whether to pass discard/trim requests to the\nunderlying storage. Supported values are \u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e/\u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e).\n" - }, - "fileFormat": { + "description": "The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "maxBytes", + "period", + "source" + ] + } + } + }, + "proxmoxve:VM/VirtualMachine2Timeouts:VirtualMachine2Timeouts": { + "properties": { + "create": { "type": "string", - "description": "The file format.\n" + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n" }, - "fileId": { + "delete": { "type": "string", - "description": "The file ID for a disk image when importing a disk into VM. The ID format is\n`\u003cdatastore_id\u003e:\u003ccontent_type\u003e/\u003cfile_name\u003e`, for example `local:iso/centos8.img`. Can be also taken from\n\u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource. *Deprecated*, use \u003cspan pulumi-lang-nodejs=\"`importFrom`\" pulumi-lang-dotnet=\"`ImportFrom`\" pulumi-lang-go=\"`importFrom`\" pulumi-lang-python=\"`import_from`\" pulumi-lang-yaml=\"`importFrom`\" pulumi-lang-java=\"`importFrom`\"\u003e`import_from`\u003c/span\u003e instead.\n", - "willReplaceOnChanges": true + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n" }, - "importFrom": { + "read": { "type": "string", - "description": "The file ID for a disk image to import into VM. The image must be of \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e content type.\nThe ID format is `\u003cdatastore_id\u003e:import/\u003cfile_name\u003e`, for example `local:import/centos8.qcow2`. Can be also taken from\na disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks.\n" + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Read operations occur during any refresh or planning operation when refresh is enabled.\n" }, - "interface": { + "update": { "type": "string", - "description": "The disk interface for Proxmox, currently \u003cspan pulumi-lang-nodejs=\"`scsi`\" pulumi-lang-dotnet=\"`Scsi`\" pulumi-lang-go=\"`scsi`\" pulumi-lang-python=\"`scsi`\" pulumi-lang-yaml=\"`scsi`\" pulumi-lang-java=\"`scsi`\"\u003e`scsi`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`sata`\" pulumi-lang-dotnet=\"`Sata`\" pulumi-lang-go=\"`sata`\" pulumi-lang-python=\"`sata`\" pulumi-lang-yaml=\"`sata`\" pulumi-lang-java=\"`sata`\"\u003e`sata`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e interfaces are supported. Append the disk index at\nthe end, for example, \u003cspan pulumi-lang-nodejs=\"`virtio0`\" pulumi-lang-dotnet=\"`Virtio0`\" pulumi-lang-go=\"`virtio0`\" pulumi-lang-python=\"`virtio0`\" pulumi-lang-yaml=\"`virtio0`\" pulumi-lang-java=\"`virtio0`\"\u003e`virtio0`\u003c/span\u003e for the first virtio disk, \u003cspan pulumi-lang-nodejs=\"`virtio1`\" pulumi-lang-dotnet=\"`Virtio1`\" pulumi-lang-go=\"`virtio1`\" pulumi-lang-python=\"`virtio1`\" pulumi-lang-yaml=\"`virtio1`\" pulumi-lang-java=\"`virtio1`\"\u003e`virtio1`\u003c/span\u003e for\nthe second, etc.\n" + "description": "A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n" + } + }, + "type": "object" + }, + "proxmoxve:VM/VirtualMachine2Vga:VirtualMachine2Vga": { + "properties": { + "clipboard": { + "type": "string", + "description": "Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only \u003cspan pulumi-lang-nodejs=\"`vnc`\" pulumi-lang-dotnet=\"`Vnc`\" pulumi-lang-go=\"`vnc`\" pulumi-lang-python=\"`vnc`\" pulumi-lang-yaml=\"`vnc`\" pulumi-lang-java=\"`vnc`\"\u003e`vnc`\u003c/span\u003e is available. Migration with VNC clipboard is not supported by Proxmox.\n" + }, + "memory": { + "type": "integer", + "description": "The VGA memory in megabytes (4-512 MB). Has no effect with serial display.\n" + }, + "type": { + "type": "string", + "description": "The VGA type (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "clipboard", + "memory", + "type" + ] + } + } + }, + "proxmoxve:VM/VirtualMachineAgent:VirtualMachineAgent": { + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether to enable the QEMU agent (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "timeout": { + "type": "string", + "description": "The maximum amount of time to wait for data from\nthe QEMU agent to become available ( defaults to \u003cspan pulumi-lang-nodejs=\"`15m`\" pulumi-lang-dotnet=\"`15m`\" pulumi-lang-go=\"`15m`\" pulumi-lang-python=\"`15m`\" pulumi-lang-yaml=\"`15m`\" pulumi-lang-java=\"`15m`\"\u003e`15m`\u003c/span\u003e).\n" + }, + "trim": { + "type": "boolean", + "description": "Whether to enable the FSTRIM feature in the QEMU agent\n(defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "type": { + "type": "string", + "description": "The QEMU agent interface type (defaults to \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e).\n" + }, + "waitForIp": { + "$ref": "#/types/proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp", + "description": "Configuration for waiting for specific IP address types when the VM starts.\n" + } + }, + "type": "object" + }, + "proxmoxve:VM/VirtualMachineAgentWaitForIp:VirtualMachineAgentWaitForIp": { + "properties": { + "ipv4": { + "type": "boolean", + "description": "Wait for at least one IPv4 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "ipv6": { + "type": "boolean", + "description": "Wait for at least one IPv6 address (non-loopback, non-link-local) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nWhen \u003cspan pulumi-lang-nodejs=\"`waitForIp`\" pulumi-lang-dotnet=\"`WaitForIp`\" pulumi-lang-go=\"`waitForIp`\" pulumi-lang-python=\"`wait_for_ip`\" pulumi-lang-yaml=\"`waitForIp`\" pulumi-lang-java=\"`waitForIp`\"\u003e`wait_for_ip`\u003c/span\u003e is not specified or both \u003cspan pulumi-lang-nodejs=\"`ipv4`\" pulumi-lang-dotnet=\"`Ipv4`\" pulumi-lang-go=\"`ipv4`\" pulumi-lang-python=\"`ipv4`\" pulumi-lang-yaml=\"`ipv4`\" pulumi-lang-java=\"`ipv4`\"\u003e`ipv4`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ipv6`\" pulumi-lang-dotnet=\"`Ipv6`\" pulumi-lang-go=\"`ipv6`\" pulumi-lang-python=\"`ipv6`\" pulumi-lang-yaml=\"`ipv6`\" pulumi-lang-java=\"`ipv6`\"\u003e`ipv6`\u003c/span\u003e are \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, the provider waits for any valid global unicast address (IPv4 or IPv6). In dual-stack networks where DHCPv6 responds faster, this may result in only IPv6 addresses being available. Set `ipv4 = true` to ensure IPv4 address availability.\n" + } + }, + "type": "object" + }, + "proxmoxve:VM/VirtualMachineAmdSev:VirtualMachineAmdSev": { + "properties": { + "allowSmt": { + "type": "boolean", + "description": "Sets policy bit to allow Simultaneous Multi Threading (SMT)\n(Ignored unless for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "kernelHashes": { + "type": "boolean", + "description": "Add kernel hashes to guest firmware for measured linux kernel launch (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "noDebug": { + "type": "boolean", + "description": "Sets policy bit to disallow debugging of guest (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "noKeySharing": { + "type": "boolean", + "description": "Sets policy bit to disallow key sharing with other guests (Ignored for SEV-SNP) (defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n\nThe \u003cspan pulumi-lang-nodejs=\"`amdSev`\" pulumi-lang-dotnet=\"`AmdSev`\" pulumi-lang-go=\"`amdSev`\" pulumi-lang-python=\"`amd_sev`\" pulumi-lang-yaml=\"`amdSev`\" pulumi-lang-java=\"`amdSev`\"\u003e`amd_sev`\u003c/span\u003e setting is only allowed for a `root@pam` authenticated user.\n" + }, + "type": { + "type": "string", + "description": "Enable standard SEV with \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e or enable experimental SEV-ES with the \u003cspan pulumi-lang-nodejs=\"`es`\" pulumi-lang-dotnet=\"`Es`\" pulumi-lang-go=\"`es`\" pulumi-lang-python=\"`es`\" pulumi-lang-yaml=\"`es`\" pulumi-lang-java=\"`es`\"\u003e`es`\u003c/span\u003e option or enable experimental SEV-SNP with the \u003cspan pulumi-lang-nodejs=\"`snp`\" pulumi-lang-dotnet=\"`Snp`\" pulumi-lang-go=\"`snp`\" pulumi-lang-python=\"`snp`\" pulumi-lang-yaml=\"`snp`\" pulumi-lang-java=\"`snp`\"\u003e`snp`\u003c/span\u003e option (defaults to \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e).\n" + } + }, + "type": "object" + }, + "proxmoxve:VM/VirtualMachineAudioDevice:VirtualMachineAudioDevice": { + "properties": { + "device": { + "type": "string", + "description": "The device (defaults to `intel-hda`).\n- `AC97` - Intel 82801AA AC97 Audio.\n- `ich9-intel-hda` - Intel HD Audio Controller (ich9).\n- `intel-hda` - Intel HD Audio.\n" + }, + "driver": { + "type": "string", + "description": "The driver (defaults to \u003cspan pulumi-lang-nodejs=\"`spice`\" pulumi-lang-dotnet=\"`Spice`\" pulumi-lang-go=\"`spice`\" pulumi-lang-python=\"`spice`\" pulumi-lang-yaml=\"`spice`\" pulumi-lang-java=\"`spice`\"\u003e`spice`\u003c/span\u003e).\n" + }, + "enabled": { + "type": "boolean", + "description": "Whether to enable the audio device (defaults\nto \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + } + }, + "type": "object" + }, + "proxmoxve:VM/VirtualMachineCdrom:VirtualMachineCdrom": { + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether to enable the CD-ROM drive (defaults\nto \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e). *Deprecated*. The attribute will be removed in the next version of the provider.\nSet \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n", + "deprecationMessage": "Remove this attribute's configuration as it is no longer used and the attribute will be removed in the next version of the provider. Set \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CDROM drive empty." + }, + "fileId": { + "type": "string", + "description": "A file ID for an ISO file (defaults to \u003cspan pulumi-lang-nodejs=\"`cdrom`\" pulumi-lang-dotnet=\"`Cdrom`\" pulumi-lang-go=\"`cdrom`\" pulumi-lang-python=\"`cdrom`\" pulumi-lang-yaml=\"`cdrom`\" pulumi-lang-java=\"`cdrom`\"\u003e`cdrom`\u003c/span\u003e as\nin the physical drive). Use \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e to leave the CD-ROM drive empty.\n" + }, + "interface": { + "type": "string", + "description": "A hardware interface to connect CD-ROM drive to (defaults to \u003cspan pulumi-lang-nodejs=\"`ide3`\" pulumi-lang-dotnet=\"`Ide3`\" pulumi-lang-go=\"`ide3`\" pulumi-lang-python=\"`ide3`\" pulumi-lang-yaml=\"`ide3`\" pulumi-lang-java=\"`ide3`\"\u003e`ide3`\u003c/span\u003e).\n\"Must be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. \" +\n\"Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" + } + }, + "type": "object" + }, + "proxmoxve:VM/VirtualMachineClone:VirtualMachineClone": { + "properties": { + "datastoreId": { + "type": "string", + "description": "The identifier for the target datastore.\n", + "willReplaceOnChanges": true + }, + "full": { + "type": "boolean", + "description": "Full or linked clone (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n", + "willReplaceOnChanges": true + }, + "nodeName": { + "type": "string", + "description": "The name of the source node (leave blank, if\nequal to the \u003cspan pulumi-lang-nodejs=\"`nodeName`\" pulumi-lang-dotnet=\"`NodeName`\" pulumi-lang-go=\"`nodeName`\" pulumi-lang-python=\"`node_name`\" pulumi-lang-yaml=\"`nodeName`\" pulumi-lang-java=\"`nodeName`\"\u003e`node_name`\u003c/span\u003e argument).\n", + "willReplaceOnChanges": true + }, + "retries": { + "type": "integer", + "description": "Number of retries in Proxmox for clone vm.\nSometimes Proxmox errors with timeout when creating multiple clones at\nonce.\n", + "willReplaceOnChanges": true + }, + "vmId": { + "type": "integer", + "description": "The identifier for the source VM.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "vmId" + ] + }, + "proxmoxve:VM/VirtualMachineCpu:VirtualMachineCpu": { + "properties": { + "affinity": { + "type": "string", + "description": "The CPU cores that are used to run the VM’s vCPU. The\nvalue is a list of CPU IDs, separated by commas. The CPU IDs are zero-based.\nFor example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four\nCPU cores. Setting \u003cspan pulumi-lang-nodejs=\"`affinity`\" pulumi-lang-dotnet=\"`Affinity`\" pulumi-lang-go=\"`affinity`\" pulumi-lang-python=\"`affinity`\" pulumi-lang-yaml=\"`affinity`\" pulumi-lang-java=\"`affinity`\"\u003e`affinity`\u003c/span\u003e is only allowed for `root@pam` authenticated user.\n" + }, + "architecture": { + "type": "string", + "description": "The CPU architecture (defaults to \u003cspan pulumi-lang-nodejs=\"`x8664`\" pulumi-lang-dotnet=\"`X8664`\" pulumi-lang-go=\"`x8664`\" pulumi-lang-python=\"`x86_64`\" pulumi-lang-yaml=\"`x8664`\" pulumi-lang-java=\"`x8664`\"\u003e`x86_64`\u003c/span\u003e).\n" + }, + "cores": { + "type": "integer", + "description": "The number of CPU cores (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n" + }, + "flags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The CPU flags.\n- `+aes`/`-aes` - Activate AES instruction set for HW acceleration.\n- `+amd-no-ssb`/`-amd-no-ssb` - Notifies guest OS that host is not\nvulnerable for Spectre on AMD CPUs.\n- `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with\nAMD CPUs, best used with \"virt-ssbd\".\n- `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested\nvirtualization (only supported on Intel CPUs).\n- `+hv-tlbflush`/`-hv-tlbflush` - Improve performance in overcommitted\nWindows guests (may lead to guest BSOD on old CPUs).\n- `+ibpb`/`-ibpb` - Allows improved Spectre mitigation on AMD CPUs.\n- `+md-clear`/`-md-clear` - Required to let the guest OS know if MDS is\nmitigated correctly.\n- `+pcid`/`-pcid` - Meltdown fix cost reduction on Westmere, Sandy- and\nIvy Bridge Intel CPUs.\n- `+pdpe1gb`/`-pdpe1gb` - Allows guest OS to use 1 GB size pages, if\nhost HW supports it.\n- `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with\nIntel CPUs.\n- `+ssbd`/`-ssbd` - Protection for \"Speculative Store Bypass\" for Intel\nmodels.\n- `+virt-ssbd`/`-virt-ssbd` - Basis for \"Speculative Store Bypass\"\nprotection for AMD models.\n" + }, + "hotplugged": { + "type": "integer", + "description": "The number of hotplugged vCPUs (defaults\nto \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e).\n" + }, + "limit": { + "type": "integer", + "description": "Limit of CPU usage, `0...128`. (defaults to \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e -- no limit).\n" + }, + "numa": { + "type": "boolean", + "description": "Enable/disable NUMA. (default to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e)\n" + }, + "sockets": { + "type": "integer", + "description": "The number of CPU sockets (defaults to \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e).\n" + }, + "type": { + "type": "string", + "description": "The emulated CPU type, it's recommended to\nuse `x86-64-v2-AES` (defaults to \u003cspan pulumi-lang-nodejs=\"`qemu64`\" pulumi-lang-dotnet=\"`Qemu64`\" pulumi-lang-go=\"`qemu64`\" pulumi-lang-python=\"`qemu64`\" pulumi-lang-yaml=\"`qemu64`\" pulumi-lang-java=\"`qemu64`\"\u003e`qemu64`\u003c/span\u003e).\n" + }, + "units": { + "type": "integer", + "description": "The CPU units. PVE default is \u003cspan pulumi-lang-nodejs=\"`1024`\" pulumi-lang-dotnet=\"`1024`\" pulumi-lang-go=\"`1024`\" pulumi-lang-python=\"`1024`\" pulumi-lang-yaml=\"`1024`\" pulumi-lang-java=\"`1024`\"\u003e`1024`\u003c/span\u003e for cgroups v1 and \u003cspan pulumi-lang-nodejs=\"`100`\" pulumi-lang-dotnet=\"`100`\" pulumi-lang-go=\"`100`\" pulumi-lang-python=\"`100`\" pulumi-lang-yaml=\"`100`\" pulumi-lang-java=\"`100`\"\u003e`100`\u003c/span\u003e for cgroups v2.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "units" + ] + } + } + }, + "proxmoxve:VM/VirtualMachineDisk:VirtualMachineDisk": { + "properties": { + "aio": { + "type": "string", + "description": "The disk AIO mode (defaults to \u003cspan pulumi-lang-nodejs=\"`ioUring`\" pulumi-lang-dotnet=\"`IoUring`\" pulumi-lang-go=\"`ioUring`\" pulumi-lang-python=\"`io_uring`\" pulumi-lang-yaml=\"`ioUring`\" pulumi-lang-java=\"`ioUring`\"\u003e`io_uring`\u003c/span\u003e).\n" + }, + "backup": { + "type": "boolean", + "description": "Whether the drive should be included when making backups (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "cache": { + "type": "string", + "description": "The cache type (defaults to \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n" + }, + "datastoreId": { + "type": "string", + "description": "The identifier for the datastore to create\nthe disk in (defaults to `local-lvm`).\n" + }, + "discard": { + "type": "string", + "description": "Whether to pass discard/trim requests to the\nunderlying storage. Supported values are \u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e/\u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e (defaults\nto \u003cspan pulumi-lang-nodejs=\"`ignore`\" pulumi-lang-dotnet=\"`Ignore`\" pulumi-lang-go=\"`ignore`\" pulumi-lang-python=\"`ignore`\" pulumi-lang-yaml=\"`ignore`\" pulumi-lang-java=\"`ignore`\"\u003e`ignore`\u003c/span\u003e).\n" + }, + "fileFormat": { + "type": "string", + "description": "The file format.\n" + }, + "fileId": { + "type": "string", + "description": "The file ID for a disk image when importing a disk into VM. The ID format is\n`\u003cdatastore_id\u003e:\u003ccontent_type\u003e/\u003cfile_name\u003e`, for example `local:iso/centos8.img`. Can be also taken from\n\u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource. Prefer \u003cspan pulumi-lang-nodejs=\"`importFrom`\" pulumi-lang-dotnet=\"`ImportFrom`\" pulumi-lang-go=\"`importFrom`\" pulumi-lang-python=\"`import_from`\" pulumi-lang-yaml=\"`importFrom`\" pulumi-lang-java=\"`importFrom`\"\u003e`import_from`\u003c/span\u003e for uncompressed images.\nUse \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded\nwith \u003cspan pulumi-lang-nodejs=\"`contentType \" pulumi-lang-dotnet=\"`ContentType \" pulumi-lang-go=\"`contentType \" pulumi-lang-python=\"`content_type \" pulumi-lang-yaml=\"`contentType \" pulumi-lang-java=\"`contentType \"\u003e`content_type \u003c/span\u003e= \"iso\"` and \u003cspan pulumi-lang-nodejs=\"`decompressionAlgorithm`\" pulumi-lang-dotnet=\"`DecompressionAlgorithm`\" pulumi-lang-go=\"`decompressionAlgorithm`\" pulumi-lang-python=\"`decompression_algorithm`\" pulumi-lang-yaml=\"`decompressionAlgorithm`\" pulumi-lang-java=\"`decompressionAlgorithm`\"\u003e`decompression_algorithm`\u003c/span\u003e set. See the\nCreate a VM from a Cloud Image guide for examples.\n", + "willReplaceOnChanges": true + }, + "importFrom": { + "type": "string", + "description": "The file ID for a disk image to import into VM. The image must be of \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e content type\n(uncompressed images only). The ID format is `\u003cdatastore_id\u003e:import/\u003cfile_name\u003e`, for example `local:import/centos8.qcow2`.\nCan be also taken from \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource. Note: compressed images downloaded with\n\u003cspan pulumi-lang-nodejs=\"`decompressionAlgorithm`\" pulumi-lang-dotnet=\"`DecompressionAlgorithm`\" pulumi-lang-go=\"`decompressionAlgorithm`\" pulumi-lang-python=\"`decompression_algorithm`\" pulumi-lang-yaml=\"`decompressionAlgorithm`\" pulumi-lang-java=\"`decompressionAlgorithm`\"\u003e`decompression_algorithm`\u003c/span\u003e cannot use \u003cspan pulumi-lang-nodejs=\"`importFrom`\" pulumi-lang-dotnet=\"`ImportFrom`\" pulumi-lang-go=\"`importFrom`\" pulumi-lang-python=\"`import_from`\" pulumi-lang-yaml=\"`importFrom`\" pulumi-lang-java=\"`importFrom`\"\u003e`import_from`\u003c/span\u003e; use \u003cspan pulumi-lang-nodejs=\"`fileId`\" pulumi-lang-dotnet=\"`FileId`\" pulumi-lang-go=\"`fileId`\" pulumi-lang-python=\"`file_id`\" pulumi-lang-yaml=\"`fileId`\" pulumi-lang-java=\"`fileId`\"\u003e`file_id`\u003c/span\u003e instead.\n" + }, + "interface": { + "type": "string", + "description": "The disk interface for Proxmox, currently \u003cspan pulumi-lang-nodejs=\"`scsi`\" pulumi-lang-dotnet=\"`Scsi`\" pulumi-lang-go=\"`scsi`\" pulumi-lang-python=\"`scsi`\" pulumi-lang-yaml=\"`scsi`\" pulumi-lang-java=\"`scsi`\"\u003e`scsi`\u003c/span\u003e,\n\u003cspan pulumi-lang-nodejs=\"`sata`\" pulumi-lang-dotnet=\"`Sata`\" pulumi-lang-go=\"`sata`\" pulumi-lang-python=\"`sata`\" pulumi-lang-yaml=\"`sata`\" pulumi-lang-java=\"`sata`\"\u003e`sata`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`virtio`\" pulumi-lang-dotnet=\"`Virtio`\" pulumi-lang-go=\"`virtio`\" pulumi-lang-python=\"`virtio`\" pulumi-lang-yaml=\"`virtio`\" pulumi-lang-java=\"`virtio`\"\u003e`virtio`\u003c/span\u003e interfaces are supported. Append the disk index at\nthe end, for example, \u003cspan pulumi-lang-nodejs=\"`virtio0`\" pulumi-lang-dotnet=\"`Virtio0`\" pulumi-lang-go=\"`virtio0`\" pulumi-lang-python=\"`virtio0`\" pulumi-lang-yaml=\"`virtio0`\" pulumi-lang-java=\"`virtio0`\"\u003e`virtio0`\u003c/span\u003e for the first virtio disk, \u003cspan pulumi-lang-nodejs=\"`virtio1`\" pulumi-lang-dotnet=\"`Virtio1`\" pulumi-lang-go=\"`virtio1`\" pulumi-lang-python=\"`virtio1`\" pulumi-lang-yaml=\"`virtio1`\" pulumi-lang-java=\"`virtio1`\"\u003e`virtio1`\u003c/span\u003e for\nthe second, etc.\n" }, "iothread": { "type": "boolean", @@ -2471,8 +2986,7 @@ }, "version": { "type": "string", - "description": "TPM state device version. Can be `v1.2` or `v2.0`.\n(defaults to `v2.0`).\n", - "willReplaceOnChanges": true + "description": "TPM state device version. Can be `v1.2` or `v2.0`.\n(defaults to `v2.0`).\n" } }, "type": "object" @@ -2864,31 +3378,7 @@ "values" ] }, - "proxmoxve:index/getVm2Clone:getVm2Clone": { - "properties": { - "id": { - "type": "integer", - "description": "The ID of the VM to clone.\n" - }, - "retries": { - "type": "integer", - "description": "The number of retries to perform when cloning the VM (default: 3).\n" - } - }, - "type": "object", - "required": [ - "id", - "retries" - ], - "language": { - "nodejs": { - "requiredInputs": [ - "id" - ] - } - } - }, - "proxmoxve:index/getVm2Cpu:getVm2Cpu": { + "proxmoxve:index/getVm2Cpu:getVm2Cpu": { "properties": { "affinity": { "type": "string", @@ -3150,6 +3640,166 @@ } }, "resources": { + "proxmoxve:Acme/certificate:Certificate": { + "description": "Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node.\n\n## Example Usage\n\n### Basic ACME Certificate with HTTP-01 Challenge\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// First, create an ACME account\nconst example = new proxmoxve.AcmeAccount(\"example\", {\n name: \"production\",\n contact: \"admin@example.com\",\n directory: \"https://acme-v02.api.letsencrypt.org/directory\",\n tos: \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n});\n// Order a certificate for the node\nconst exampleCertificate = new proxmoxve.acme.Certificate(\"example\", {\n nodeName: \"pve\",\n account: example.name,\n domains: [{\n domain: \"pve.example.com\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# First, create an ACME account\nexample = proxmoxve.AcmeAccount(\"example\",\n name=\"production\",\n contact=\"admin@example.com\",\n directory=\"https://acme-v02.api.letsencrypt.org/directory\",\n tos=\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n# Order a certificate for the node\nexample_certificate = proxmoxve.acme.Certificate(\"example\",\n node_name=\"pve\",\n account=example.name,\n domains=[{\n \"domain\": \"pve.example.com\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // First, create an ACME account\n var example = new ProxmoxVE.AcmeAccount(\"example\", new()\n {\n Name = \"production\",\n Contact = \"admin@example.com\",\n Directory = \"https://acme-v02.api.letsencrypt.org/directory\",\n Tos = \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n });\n\n // Order a certificate for the node\n var exampleCertificate = new ProxmoxVE.Acme.Certificate(\"example\", new()\n {\n NodeName = \"pve\",\n Account = example.Name,\n Domains = new[]\n {\n new ProxmoxVE.Acme.Inputs.CertificateDomainArgs\n {\n Domain = \"pve.example.com\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// First, create an ACME account\n\t\texample, err := proxmoxve.NewAcmeAccount(ctx, \"example\", \u0026proxmoxve.AcmeAccountArgs{\n\t\t\tName: pulumi.String(\"production\"),\n\t\t\tContact: pulumi.String(\"admin@example.com\"),\n\t\t\tDirectory: pulumi.String(\"https://acme-v02.api.letsencrypt.org/directory\"),\n\t\t\tTos: pulumi.String(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Order a certificate for the node\n\t\t_, err = acme.NewCertificate(ctx, \"example\", \u0026acme.CertificateArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tAccount: example.Name,\n\t\t\tDomains: acme.CertificateDomainArray{\n\t\t\t\t\u0026acme.CertificateDomainArgs{\n\t\t\t\t\tDomain: pulumi.String(\"pve.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccount;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;\nimport com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // First, create an ACME account\n var example = new AcmeAccount(\"example\", AcmeAccountArgs.builder()\n .name(\"production\")\n .contact(\"admin@example.com\")\n .directory(\"https://acme-v02.api.letsencrypt.org/directory\")\n .tos(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n .build());\n\n // Order a certificate for the node\n var exampleCertificate = new Certificate(\"exampleCertificate\", CertificateArgs.builder()\n .nodeName(\"pve\")\n .account(example.name())\n .domains(CertificateDomainArgs.builder()\n .domain(\"pve.example.com\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # First, create an ACME account\n example:\n type: proxmoxve:AcmeAccount\n properties:\n name: production\n contact: admin@example.com\n directory: https://acme-v02.api.letsencrypt.org/directory\n tos: https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\n # Order a certificate for the node\n exampleCertificate:\n type: proxmoxve:Acme:Certificate\n name: example\n properties:\n nodeName: pve\n account: ${example.name}\n domains:\n - domain: pve.example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### ACME Certificate with DNS-01 Challenge\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// Create an ACME account\nconst example = new proxmoxve.AcmeAccount(\"example\", {\n name: \"production\",\n contact: \"admin@example.com\",\n directory: \"https://acme-v02.api.letsencrypt.org/directory\",\n tos: \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n});\n// Configure a DNS plugin (Desec example)\nconst desec = new proxmoxve.AcmeDnsPlugin(\"desec\", {\n plugin: \"desec\",\n api: \"desec\",\n data: {\n DEDYN_TOKEN: dedynToken,\n },\n});\n// Order a certificate using the DNS plugin\nconst test = new proxmoxve.acme.Certificate(\"test\", {\n nodeName: \"pve\",\n account: example.name,\n force: false,\n domains: [{\n domain: \"pve.example.dedyn.io\",\n plugin: desec.plugin,\n }],\n}, {\n dependsOn: [\n example,\n desec,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# Create an ACME account\nexample = proxmoxve.AcmeAccount(\"example\",\n name=\"production\",\n contact=\"admin@example.com\",\n directory=\"https://acme-v02.api.letsencrypt.org/directory\",\n tos=\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n# Configure a DNS plugin (Desec example)\ndesec = proxmoxve.AcmeDnsPlugin(\"desec\",\n plugin=\"desec\",\n api=\"desec\",\n data={\n \"DEDYN_TOKEN\": dedyn_token,\n })\n# Order a certificate using the DNS plugin\ntest = proxmoxve.acme.Certificate(\"test\",\n node_name=\"pve\",\n account=example.name,\n force=False,\n domains=[{\n \"domain\": \"pve.example.dedyn.io\",\n \"plugin\": desec.plugin,\n }],\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n desec,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Create an ACME account\n var example = new ProxmoxVE.AcmeAccount(\"example\", new()\n {\n Name = \"production\",\n Contact = \"admin@example.com\",\n Directory = \"https://acme-v02.api.letsencrypt.org/directory\",\n Tos = \"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\",\n });\n\n // Configure a DNS plugin (Desec example)\n var desec = new ProxmoxVE.AcmeDnsPlugin(\"desec\", new()\n {\n Plugin = \"desec\",\n Api = \"desec\",\n Data = \n {\n { \"DEDYN_TOKEN\", dedynToken },\n },\n });\n\n // Order a certificate using the DNS plugin\n var test = new ProxmoxVE.Acme.Certificate(\"test\", new()\n {\n NodeName = \"pve\",\n Account = example.Name,\n Force = false,\n Domains = new[]\n {\n new ProxmoxVE.Acme.Inputs.CertificateDomainArgs\n {\n Domain = \"pve.example.dedyn.io\",\n Plugin = desec.Plugin,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n desec,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Create an ACME account\n\t\texample, err := proxmoxve.NewAcmeAccount(ctx, \"example\", \u0026proxmoxve.AcmeAccountArgs{\n\t\t\tName: pulumi.String(\"production\"),\n\t\t\tContact: pulumi.String(\"admin@example.com\"),\n\t\t\tDirectory: pulumi.String(\"https://acme-v02.api.letsencrypt.org/directory\"),\n\t\t\tTos: pulumi.String(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Configure a DNS plugin (Desec example)\n\t\tdesec, err := proxmoxve.NewAcmeDnsPlugin(ctx, \"desec\", \u0026proxmoxve.AcmeDnsPluginArgs{\n\t\t\tPlugin: pulumi.String(\"desec\"),\n\t\t\tApi: pulumi.String(\"desec\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"DEDYN_TOKEN\": pulumi.Any(dedynToken),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Order a certificate using the DNS plugin\n\t\t_, err = acme.NewCertificate(ctx, \"test\", \u0026acme.CertificateArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tAccount: example.Name,\n\t\t\tForce: pulumi.Bool(false),\n\t\t\tDomains: acme.CertificateDomainArray{\n\t\t\t\t\u0026acme.CertificateDomainArgs{\n\t\t\t\t\tDomain: pulumi.String(\"pve.example.dedyn.io\"),\n\t\t\t\t\tPlugin: desec.Plugin,\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tdesec,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccount;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPlugin;\nimport io.muehlbachler.pulumi.proxmoxve.AcmeDnsPluginArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;\nimport com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // Create an ACME account\n var example = new AcmeAccount(\"example\", AcmeAccountArgs.builder()\n .name(\"production\")\n .contact(\"admin@example.com\")\n .directory(\"https://acme-v02.api.letsencrypt.org/directory\")\n .tos(\"https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\")\n .build());\n\n // Configure a DNS plugin (Desec example)\n var desec = new AcmeDnsPlugin(\"desec\", AcmeDnsPluginArgs.builder()\n .plugin(\"desec\")\n .api(\"desec\")\n .data(Map.of(\"DEDYN_TOKEN\", dedynToken))\n .build());\n\n // Order a certificate using the DNS plugin\n var test = new Certificate(\"test\", CertificateArgs.builder()\n .nodeName(\"pve\")\n .account(example.name())\n .force(false)\n .domains(CertificateDomainArgs.builder()\n .domain(\"pve.example.dedyn.io\")\n .plugin(desec.plugin())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n desec)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Create an ACME account\n example:\n type: proxmoxve:AcmeAccount\n properties:\n name: production\n contact: admin@example.com\n directory: https://acme-v02.api.letsencrypt.org/directory\n tos: https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf\n # Configure a DNS plugin (Desec example)\n desec:\n type: proxmoxve:AcmeDnsPlugin\n properties:\n plugin: desec\n api: desec\n data:\n DEDYN_TOKEN: ${dedynToken}\n # Order a certificate using the DNS plugin\n test:\n type: proxmoxve:Acme:Certificate\n properties:\n nodeName: pve\n account: ${example.name}\n force: false\n domains:\n - domain: pve.example.dedyn.io\n plugin: ${desec.plugin}\n options:\n dependsOn:\n - ${example}\n - ${desec}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Force Certificate Renewal\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst exampleForce = new proxmoxve.acme.Certificate(\"example_force\", {\n nodeName: \"pve\",\n account: example.name,\n force: true,\n domains: [{\n domain: \"pve.example.com\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample_force = proxmoxve.acme.Certificate(\"example_force\",\n node_name=\"pve\",\n account=example[\"name\"],\n force=True,\n domains=[{\n \"domain\": \"pve.example.com\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleForce = new ProxmoxVE.Acme.Certificate(\"example_force\", new()\n {\n NodeName = \"pve\",\n Account = example.Name,\n Force = true,\n Domains = new[]\n {\n new ProxmoxVE.Acme.Inputs.CertificateDomainArgs\n {\n Domain = \"pve.example.com\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := acme.NewCertificate(ctx, \"example_force\", \u0026acme.CertificateArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tAccount: pulumi.Any(example.Name),\n\t\t\tForce: pulumi.Bool(true),\n\t\t\tDomains: acme.CertificateDomainArray{\n\t\t\t\t\u0026acme.CertificateDomainArgs{\n\t\t\t\t\tDomain: pulumi.String(\"pve.example.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;\nimport io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;\nimport com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleForce = new Certificate(\"exampleForce\", CertificateArgs.builder()\n .nodeName(\"pve\")\n .account(example.name())\n .force(true)\n .domains(CertificateDomainArgs.builder()\n .domain(\"pve.example.com\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleForce:\n type: proxmoxve:Acme:Certificate\n name: example_force\n properties:\n nodeName: pve\n account: ${example.name}\n force: true # This will trigger renewal on every apply\n domains:\n - domain: pve.example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Related Resources\n\n- \u003cspan pulumi-lang-nodejs=\"`proxmoxve.AcmeAccount`\" pulumi-lang-dotnet=\"`proxmoxve.AcmeAccount`\" pulumi-lang-go=\"`AcmeAccount`\" pulumi-lang-python=\"`AcmeAccount`\" pulumi-lang-yaml=\"`proxmoxve.AcmeAccount`\" pulumi-lang-java=\"`proxmoxve.AcmeAccount`\"\u003e`proxmoxve.AcmeAccount`\u003c/span\u003e - Manages ACME accounts\n- \u003cspan pulumi-lang-nodejs=\"`proxmoxve.AcmeDnsPlugin`\" pulumi-lang-dotnet=\"`proxmoxve.AcmeDnsPlugin`\" pulumi-lang-go=\"`AcmeDnsPlugin`\" pulumi-lang-python=\"`AcmeDnsPlugin`\" pulumi-lang-yaml=\"`proxmoxve.AcmeDnsPlugin`\" pulumi-lang-java=\"`proxmoxve.AcmeDnsPlugin`\"\u003e`proxmoxve.AcmeDnsPlugin`\u003c/span\u003e - Manages ACME DNS plugins for DNS-01 challenges\n- \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Certifi`\" pulumi-lang-dotnet=\"`proxmoxve.Certifi`\" pulumi-lang-go=\"`Certifi`\" pulumi-lang-python=\"`Certifi`\" pulumi-lang-yaml=\"`proxmoxve.Certifi`\" pulumi-lang-java=\"`proxmoxve.Certifi`\"\u003e`proxmoxve.Certifi`\u003c/span\u003e - Manages custom SSL/TLS certificates (non-ACME)\n\n## Import\n\nACME certificates can be imported using the node name:\n\n#!/usr/bin/env sh\n\nACME certificates can be imported using the node name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Acme/certificate:Certificate example pve\n```\n\n", + "properties": { + "account": { + "type": "string", + "description": "The ACME account name to use for ordering the certificate." + }, + "certificate": { + "type": "string", + "description": "The PEM-encoded certificate data.", + "language": { + "csharp": { + "name": "certificatePem" + } + } + }, + "domains": { + "type": "array", + "items": { + "$ref": "#/types/proxmoxve:Acme/CertificateDomain:CertificateDomain" + }, + "description": "The list of domains to include in the certificate. At least one domain is required." + }, + "fingerprint": { + "type": "string", + "description": "The certificate fingerprint." + }, + "force": { + "type": "boolean", + "description": "Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply." + }, + "issuer": { + "type": "string", + "description": "The certificate issuer." + }, + "nodeName": { + "type": "string", + "description": "The name of the Proxmox VE node for which to order/manage the ACME certificate." + }, + "notAfter": { + "type": "string", + "description": "The certificate expiration timestamp." + }, + "notBefore": { + "type": "string", + "description": "The certificate start timestamp." + }, + "subject": { + "type": "string", + "description": "The certificate subject." + }, + "subjectAlternativeNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The certificate subject alternative names (SANs)." + } + }, + "required": [ + "account", + "certificate", + "domains", + "fingerprint", + "force", + "issuer", + "nodeName", + "notAfter", + "notBefore", + "subject", + "subjectAlternativeNames" + ], + "inputProperties": { + "account": { + "type": "string", + "description": "The ACME account name to use for ordering the certificate." + }, + "domains": { + "type": "array", + "items": { + "$ref": "#/types/proxmoxve:Acme/CertificateDomain:CertificateDomain" + }, + "description": "The list of domains to include in the certificate. At least one domain is required." + }, + "force": { + "type": "boolean", + "description": "Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply." + }, + "nodeName": { + "type": "string", + "description": "The name of the Proxmox VE node for which to order/manage the ACME certificate." + } + }, + "requiredInputs": [ + "account", + "domains", + "nodeName" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Certificate resources.\n", + "properties": { + "account": { + "type": "string", + "description": "The ACME account name to use for ordering the certificate." + }, + "certificate": { + "type": "string", + "description": "The PEM-encoded certificate data.", + "language": { + "csharp": { + "name": "certificatePem" + } + } + }, + "domains": { + "type": "array", + "items": { + "$ref": "#/types/proxmoxve:Acme/CertificateDomain:CertificateDomain" + }, + "description": "The list of domains to include in the certificate. At least one domain is required." + }, + "fingerprint": { + "type": "string", + "description": "The certificate fingerprint." + }, + "force": { + "type": "boolean", + "description": "Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply." + }, + "issuer": { + "type": "string", + "description": "The certificate issuer." + }, + "nodeName": { + "type": "string", + "description": "The name of the Proxmox VE node for which to order/manage the ACME certificate." + }, + "notAfter": { + "type": "string", + "description": "The certificate expiration timestamp." + }, + "notBefore": { + "type": "string", + "description": "The certificate start timestamp." + }, + "subject": { + "type": "string", + "description": "The certificate subject." + }, + "subjectAlternativeNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The certificate subject alternative names (SANs)." + } + }, + "type": "object" + } + }, "proxmoxve:Apt/repository:Repository": { "description": "Manages an APT repository of a Proxmox VE node.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.apt.Repository(\"example\", {\n enabled: true,\n filePath: \"/etc/apt/sources.list\",\n index: 0,\n node: \"pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.apt.Repository(\"example\",\n enabled=True,\n file_path=\"/etc/apt/sources.list\",\n index=0,\n node=\"pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Apt.Repository(\"example\", new()\n {\n Enabled = true,\n FilePath = \"/etc/apt/sources.list\",\n Index = 0,\n Node = \"pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/apt\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apt.NewRepository(ctx, \"example\", \u0026apt.RepositoryArgs{\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tFilePath: pulumi.String(\"/etc/apt/sources.list\"),\n\t\t\tIndex: pulumi.Int(0),\n\t\t\tNode: pulumi.String(\"pve\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.Repository;\nimport io.muehlbachler.pulumi.proxmoxve.Apt.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Repository(\"example\", RepositoryArgs.builder()\n .enabled(true)\n .filePath(\"/etc/apt/sources.list\")\n .index(0)\n .node(\"pve\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Apt:Repository\n properties:\n enabled: true\n filePath: /etc/apt/sources.list\n index: 0\n node: pve\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nAn APT repository can be imported using a comma-separated list consisting of the name of the Proxmox VE node,\n\nthe absolute source list file path, and the index in the exact same order, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Apt/repository:Repository example pve,/etc/apt/sources.list,0\n```\n\n", "properties": { @@ -3313,7 +3963,7 @@ }, "handle": { "type": "string", - "description": "The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n" + "description": "The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n" }, "index": { "type": "integer", @@ -3344,7 +3994,7 @@ "inputProperties": { "handle": { "type": "string", - "description": "The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n" + "description": "The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n" }, "node": { "type": "string", @@ -3368,7 +4018,7 @@ }, "handle": { "type": "string", - "description": "The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n" + "description": "The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | \u003cspan pulumi-lang-nodejs=\"`enterprise`\" pulumi-lang-dotnet=\"`Enterprise`\" pulumi-lang-go=\"`enterprise`\" pulumi-lang-python=\"`enterprise`\" pulumi-lang-yaml=\"`enterprise`\" pulumi-lang-java=\"`enterprise`\"\u003e`enterprise`\u003c/span\u003e | `no-subscription` | \u003cspan pulumi-lang-nodejs=\"`test`\" pulumi-lang-dotnet=\"`Test`\" pulumi-lang-go=\"`test`\" pulumi-lang-python=\"`test`\" pulumi-lang-yaml=\"`test`\" pulumi-lang-java=\"`test`\"\u003e`test`\u003c/span\u003e.\n" }, "index": { "type": "integer", @@ -3391,7 +4041,7 @@ } }, "proxmoxve:CT/container:Container": { - "description": "Manages a container.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as random from \"@pulumi/random\";\nimport * as std from \"@pulumi/std\";\nimport * as tls from \"@pulumi/tls\";\n\nexport = async () =\u003e {\n const ubuntu2504LxcImg = new proxmoxve.download.File(\"ubuntu_2504_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n url: \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n const ubuntuContainerPassword = new random.RandomPassword(\"ubuntu_container_password\", {\n length: 16,\n overrideSpecial: \"_%@\",\n special: true,\n });\n const ubuntuContainerKey = new tls.PrivateKey(\"ubuntu_container_key\", {\n algorithm: \"RSA\",\n rsaBits: 2048,\n });\n const ubuntuContainer = new proxmoxve.ct.Container(\"ubuntu_container\", {\n description: \"Managed by Pulumi\",\n nodeName: \"first-node\",\n vmId: 1234,\n unprivileged: true,\n features: {\n nesting: true,\n },\n initialization: {\n hostname: \"terraform-provider-proxmox-ubuntu-container\",\n ipConfigs: [{\n ipv4: {\n address: \"dhcp\",\n },\n }],\n userAccount: {\n keys: [std.trimspaceOutput({\n input: ubuntuContainerKey.publicKeyOpenssh,\n }).apply(invoke =\u003e invoke.result)],\n password: ubuntuContainerPassword.result,\n },\n },\n networkInterfaces: [{\n name: \"veth0\",\n }],\n disk: {\n datastoreId: \"local-lvm\",\n size: 4,\n },\n operatingSystem: {\n templateFileId: ubuntu2504LxcImg.id,\n type: \"ubuntu\",\n },\n mountPoints: [\n {\n volume: \"/mnt/bindmounts/shared\",\n path: \"/mnt/shared\",\n },\n {\n volume: \"local-lvm\",\n size: \"10G\",\n path: \"/mnt/volume\",\n },\n ],\n startup: {\n order: 3,\n upDelay: 60,\n downDelay: 60,\n },\n });\n return {\n ubuntuContainerPassword: ubuntuContainerPassword.result,\n ubuntuContainerPrivateKey: ubuntuContainerKey.privateKeyPem,\n ubuntuContainerPublicKey: ubuntuContainerKey.publicKeyOpenssh,\n };\n}\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_random as random\nimport pulumi_std as std\nimport pulumi_tls as tls\n\nubuntu2504_lxc_img = proxmoxve.download.File(\"ubuntu_2504_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n url=\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\nubuntu_container_password = random.RandomPassword(\"ubuntu_container_password\",\n length=16,\n override_special=\"_%@\",\n special=True)\nubuntu_container_key = tls.PrivateKey(\"ubuntu_container_key\",\n algorithm=\"RSA\",\n rsa_bits=2048)\nubuntu_container = proxmoxve.ct.Container(\"ubuntu_container\",\n description=\"Managed by Pulumi\",\n node_name=\"first-node\",\n vm_id=1234,\n unprivileged=True,\n features={\n \"nesting\": True,\n },\n initialization={\n \"hostname\": \"terraform-provider-proxmox-ubuntu-container\",\n \"ip_configs\": [{\n \"ipv4\": {\n \"address\": \"dhcp\",\n },\n }],\n \"user_account\": {\n \"keys\": [std.trimspace_output(input=ubuntu_container_key.public_key_openssh).apply(lambda invoke: invoke.result)],\n \"password\": ubuntu_container_password.result,\n },\n },\n network_interfaces=[{\n \"name\": \"veth0\",\n }],\n disk={\n \"datastore_id\": \"local-lvm\",\n \"size\": 4,\n },\n operating_system={\n \"template_file_id\": ubuntu2504_lxc_img.id,\n \"type\": \"ubuntu\",\n },\n mount_points=[\n {\n \"volume\": \"/mnt/bindmounts/shared\",\n \"path\": \"/mnt/shared\",\n },\n {\n \"volume\": \"local-lvm\",\n \"size\": \"10G\",\n \"path\": \"/mnt/volume\",\n },\n ],\n startup={\n \"order\": 3,\n \"up_delay\": 60,\n \"down_delay\": 60,\n })\npulumi.export(\"ubuntuContainerPassword\", ubuntu_container_password.result)\npulumi.export(\"ubuntuContainerPrivateKey\", ubuntu_container_key.private_key_pem)\npulumi.export(\"ubuntuContainerPublicKey\", ubuntu_container_key.public_key_openssh)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Random = Pulumi.Random;\nusing Std = Pulumi.Std;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntu2504LxcImg = new ProxmoxVE.Download.File(\"ubuntu_2504_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n Url = \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n\n var ubuntuContainerPassword = new Random.RandomPassword(\"ubuntu_container_password\", new()\n {\n Length = 16,\n OverrideSpecial = \"_%@\",\n Special = true,\n });\n\n var ubuntuContainerKey = new Tls.PrivateKey(\"ubuntu_container_key\", new()\n {\n Algorithm = \"RSA\",\n RsaBits = 2048,\n });\n\n var ubuntuContainer = new ProxmoxVE.CT.Container(\"ubuntu_container\", new()\n {\n Description = \"Managed by Pulumi\",\n NodeName = \"first-node\",\n VmId = 1234,\n Unprivileged = true,\n Features = new ProxmoxVE.CT.Inputs.ContainerFeaturesArgs\n {\n Nesting = true,\n },\n Initialization = new ProxmoxVE.CT.Inputs.ContainerInitializationArgs\n {\n Hostname = \"terraform-provider-proxmox-ubuntu-container\",\n IpConfigs = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigArgs\n {\n Ipv4 = new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigIpv4Args\n {\n Address = \"dhcp\",\n },\n },\n },\n UserAccount = new ProxmoxVE.CT.Inputs.ContainerInitializationUserAccountArgs\n {\n Keys = new[]\n {\n Std.Trimspace.Invoke(new()\n {\n Input = ubuntuContainerKey.PublicKeyOpenssh,\n }).Apply(invoke =\u003e invoke.Result),\n },\n Password = ubuntuContainerPassword.Result,\n },\n },\n NetworkInterfaces = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerNetworkInterfaceArgs\n {\n Name = \"veth0\",\n },\n },\n Disk = new ProxmoxVE.CT.Inputs.ContainerDiskArgs\n {\n DatastoreId = \"local-lvm\",\n Size = 4,\n },\n OperatingSystem = new ProxmoxVE.CT.Inputs.ContainerOperatingSystemArgs\n {\n TemplateFileId = ubuntu2504LxcImg.Id,\n Type = \"ubuntu\",\n },\n MountPoints = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"/mnt/bindmounts/shared\",\n Path = \"/mnt/shared\",\n },\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"local-lvm\",\n Size = \"10G\",\n Path = \"/mnt/volume\",\n },\n },\n Startup = new ProxmoxVE.CT.Inputs.ContainerStartupArgs\n {\n Order = 3,\n UpDelay = 60,\n DownDelay = 60,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ubuntuContainerPassword\"] = ubuntuContainerPassword.Result,\n [\"ubuntuContainerPrivateKey\"] = ubuntuContainerKey.PrivateKeyPem,\n [\"ubuntuContainerPublicKey\"] = ubuntuContainerKey.PublicKeyOpenssh,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ct\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/download\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntu2504LxcImg, err := download.NewFile(ctx, \"ubuntu_2504_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tUrl: pulumi.String(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerPassword, err := random.NewRandomPassword(ctx, \"ubuntu_container_password\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tOverrideSpecial: pulumi.String(\"_%@\"),\n\t\t\tSpecial: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerKey, err := tls.NewPrivateKey(ctx, \"ubuntu_container_key\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t\tRsaBits: pulumi.Int(2048),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ct.NewContainer(ctx, \"ubuntu_container\", \u0026ct.ContainerArgs{\n\t\t\tDescription: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tVmId: pulumi.Int(1234),\n\t\t\tUnprivileged: pulumi.Bool(true),\n\t\t\tFeatures: \u0026ct.ContainerFeaturesArgs{\n\t\t\t\tNesting: pulumi.Bool(true),\n\t\t\t},\n\t\t\tInitialization: \u0026ct.ContainerInitializationArgs{\n\t\t\t\tHostname: pulumi.String(\"terraform-provider-proxmox-ubuntu-container\"),\n\t\t\t\tIpConfigs: ct.ContainerInitializationIpConfigArray{\n\t\t\t\t\t\u0026ct.ContainerInitializationIpConfigArgs{\n\t\t\t\t\t\tIpv4: \u0026ct.ContainerInitializationIpConfigIpv4Args{\n\t\t\t\t\t\t\tAddress: pulumi.String(\"dhcp\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUserAccount: \u0026ct.ContainerInitializationUserAccountArgs{\n\t\t\t\t\tKeys: pulumi.StringArray{\n\t\t\t\t\t\tstd.TrimspaceOutput(ctx, std.TrimspaceOutputArgs{\n\t\t\t\t\t\t\tInput: ubuntuContainerKey.PublicKeyOpenssh,\n\t\t\t\t\t\t}, nil).ApplyT(func(invoke std.TrimspaceResult) (*string, error) {\n\t\t\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t},\n\t\t\t\t\tPassword: ubuntuContainerPassword.Result,\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: ct.ContainerNetworkInterfaceArray{\n\t\t\t\t\u0026ct.ContainerNetworkInterfaceArgs{\n\t\t\t\t\tName: pulumi.String(\"veth0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisk: \u0026ct.ContainerDiskArgs{\n\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\tSize: pulumi.Int(4),\n\t\t\t},\n\t\t\tOperatingSystem: \u0026ct.ContainerOperatingSystemArgs{\n\t\t\t\tTemplateFileId: ubuntu2504LxcImg.ID(),\n\t\t\t\tType: pulumi.String(\"ubuntu\"),\n\t\t\t},\n\t\t\tMountPoints: ct.ContainerMountPointArray{\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"/mnt/bindmounts/shared\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/shared\"),\n\t\t\t\t},\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSize: pulumi.String(\"10G\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/volume\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStartup: \u0026ct.ContainerStartupArgs{\n\t\t\t\tOrder: pulumi.Int(3),\n\t\t\t\tUpDelay: pulumi.Int(60),\n\t\t\t\tDownDelay: pulumi.Int(60),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ubuntuContainerPassword\", ubuntuContainerPassword.Result)\n\t\tctx.Export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.PrivateKeyPem)\n\t\tctx.Export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.PublicKeyOpenssh)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Download.File;\nimport io.muehlbachler.pulumi.proxmoxve.Download.FileArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport io.muehlbachler.pulumi.proxmoxve.CT.Container;\nimport io.muehlbachler.pulumi.proxmoxve.CT.ContainerArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerFeaturesArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationUserAccountArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerNetworkInterfaceArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerDiskArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerOperatingSystemArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerMountPointArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerStartupArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntu2504LxcImg = new File(\"ubuntu2504LxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .url(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\n .build());\n\n var ubuntuContainerPassword = new RandomPassword(\"ubuntuContainerPassword\", RandomPasswordArgs.builder()\n .length(16)\n .overrideSpecial(\"_%@\")\n .special(true)\n .build());\n\n var ubuntuContainerKey = new PrivateKey(\"ubuntuContainerKey\", PrivateKeyArgs.builder()\n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var ubuntuContainer = new Container(\"ubuntuContainer\", ContainerArgs.builder()\n .description(\"Managed by Pulumi\")\n .nodeName(\"first-node\")\n .vmId(1234)\n .unprivileged(true)\n .features(ContainerFeaturesArgs.builder()\n .nesting(true)\n .build())\n .initialization(ContainerInitializationArgs.builder()\n .hostname(\"terraform-provider-proxmox-ubuntu-container\")\n .ipConfigs(ContainerInitializationIpConfigArgs.builder()\n .ipv4(ContainerInitializationIpConfigIpv4Args.builder()\n .address(\"dhcp\")\n .build())\n .build())\n .userAccount(ContainerInitializationUserAccountArgs.builder()\n .keys(StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(ubuntuContainerKey.publicKeyOpenssh())\n .build()).applyValue(_invoke -\u003e _invoke.result()))\n .password(ubuntuContainerPassword.result())\n .build())\n .build())\n .networkInterfaces(ContainerNetworkInterfaceArgs.builder()\n .name(\"veth0\")\n .build())\n .disk(ContainerDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .size(4)\n .build())\n .operatingSystem(ContainerOperatingSystemArgs.builder()\n .templateFileId(ubuntu2504LxcImg.id())\n .type(\"ubuntu\")\n .build())\n .mountPoints( \n ContainerMountPointArgs.builder()\n .volume(\"/mnt/bindmounts/shared\")\n .path(\"/mnt/shared\")\n .build(),\n ContainerMountPointArgs.builder()\n .volume(\"local-lvm\")\n .size(\"10G\")\n .path(\"/mnt/volume\")\n .build())\n .startup(ContainerStartupArgs.builder()\n .order(3)\n .upDelay(60)\n .downDelay(60)\n .build())\n .build());\n\n ctx.export(\"ubuntuContainerPassword\", ubuntuContainerPassword.result());\n ctx.export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.privateKeyPem());\n ctx.export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.publicKeyOpenssh());\n }\n}\n```\n```yaml\nresources:\n ubuntuContainer:\n type: proxmoxve:CT:Container\n name: ubuntu_container\n properties:\n description: Managed by Pulumi\n nodeName: first-node\n vmId: 1234 # newer linux distributions require unprivileged user namespaces\n unprivileged: true\n features:\n nesting: true\n initialization:\n hostname: terraform-provider-proxmox-ubuntu-container\n ipConfigs:\n - ipv4:\n address: dhcp\n userAccount:\n keys:\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${ubuntuContainerKey.publicKeyOpenssh}\n return: result\n password: ${ubuntuContainerPassword.result}\n networkInterfaces:\n - name: veth0\n disk:\n datastoreId: local-lvm\n size: 4\n operatingSystem:\n templateFileId: ${ubuntu2504LxcImg.id}\n type: ubuntu\n mountPoints:\n - volume: /mnt/bindmounts/shared\n path: /mnt/shared\n - volume: local-lvm\n size: 10G\n path: /mnt/volume\n startup:\n order: '3'\n upDelay: '60'\n downDelay: '60'\n ubuntu2504LxcImg:\n type: proxmoxve:Download:File\n name: ubuntu_2504_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n url: https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\n ubuntuContainerPassword:\n type: random:RandomPassword\n name: ubuntu_container_password\n properties:\n length: 16\n overrideSpecial: _%@\n special: true\n ubuntuContainerKey:\n type: tls:PrivateKey\n name: ubuntu_container_key\n properties:\n algorithm: RSA\n rsaBits: 2048\noutputs:\n ubuntuContainerPassword: ${ubuntuContainerPassword.result}\n ubuntuContainerPrivateKey: ${ubuntuContainerKey.privateKeyPem}\n ubuntuContainerPublicKey: ${ubuntuContainerKey.publicKeyOpenssh}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `node_name` and the `vm_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:CT/container:Container ubuntu_container first-node/1234\n```\n\n", + "description": "Manages a container.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as random from \"@pulumi/random\";\nimport * as std from \"@pulumi/std\";\nimport * as tls from \"@pulumi/tls\";\n\nexport = async () =\u003e {\n const ubuntu2504LxcImg = new proxmoxve.download.File(\"ubuntu_2504_lxc_img\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n url: \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n const ubuntuContainerPassword = new random.RandomPassword(\"ubuntu_container_password\", {\n length: 16,\n overrideSpecial: \"_%@\",\n special: true,\n });\n const ubuntuContainerKey = new tls.PrivateKey(\"ubuntu_container_key\", {\n algorithm: \"RSA\",\n rsaBits: 2048,\n });\n const ubuntuContainer = new proxmoxve.ct.Container(\"ubuntu_container\", {\n description: \"Managed by Pulumi\",\n nodeName: \"first-node\",\n vmId: 1234,\n unprivileged: true,\n features: {\n nesting: true,\n },\n initialization: {\n hostname: \"terraform-provider-proxmox-ubuntu-container\",\n ipConfigs: [{\n ipv4: {\n address: \"dhcp\",\n },\n }],\n userAccount: {\n keys: [std.trimspaceOutput({\n input: ubuntuContainerKey.publicKeyOpenssh,\n }).apply(invoke =\u003e invoke.result)],\n password: ubuntuContainerPassword.result,\n },\n },\n networkInterfaces: [{\n name: \"veth0\",\n }],\n disk: {\n datastoreId: \"local-lvm\",\n size: 4,\n },\n operatingSystem: {\n templateFileId: ubuntu2504LxcImg.id,\n type: \"ubuntu\",\n },\n mountPoints: [\n {\n volume: \"/mnt/bindmounts/shared\",\n path: \"/mnt/shared\",\n },\n {\n volume: \"local-lvm\",\n size: \"10G\",\n path: \"/mnt/volume\",\n },\n {\n volume: \"local-lvm:subvol-108-disk-101\",\n size: \"10G\",\n path: \"/mnt/data\",\n },\n ],\n startup: {\n order: 3,\n upDelay: 60,\n downDelay: 60,\n },\n });\n return {\n ubuntuContainerPassword: ubuntuContainerPassword.result,\n ubuntuContainerPrivateKey: ubuntuContainerKey.privateKeyPem,\n ubuntuContainerPublicKey: ubuntuContainerKey.publicKeyOpenssh,\n };\n}\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_random as random\nimport pulumi_std as std\nimport pulumi_tls as tls\n\nubuntu2504_lxc_img = proxmoxve.download.File(\"ubuntu_2504_lxc_img\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n url=\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\nubuntu_container_password = random.RandomPassword(\"ubuntu_container_password\",\n length=16,\n override_special=\"_%@\",\n special=True)\nubuntu_container_key = tls.PrivateKey(\"ubuntu_container_key\",\n algorithm=\"RSA\",\n rsa_bits=2048)\nubuntu_container = proxmoxve.ct.Container(\"ubuntu_container\",\n description=\"Managed by Pulumi\",\n node_name=\"first-node\",\n vm_id=1234,\n unprivileged=True,\n features={\n \"nesting\": True,\n },\n initialization={\n \"hostname\": \"terraform-provider-proxmox-ubuntu-container\",\n \"ip_configs\": [{\n \"ipv4\": {\n \"address\": \"dhcp\",\n },\n }],\n \"user_account\": {\n \"keys\": [std.trimspace_output(input=ubuntu_container_key.public_key_openssh).apply(lambda invoke: invoke.result)],\n \"password\": ubuntu_container_password.result,\n },\n },\n network_interfaces=[{\n \"name\": \"veth0\",\n }],\n disk={\n \"datastore_id\": \"local-lvm\",\n \"size\": 4,\n },\n operating_system={\n \"template_file_id\": ubuntu2504_lxc_img.id,\n \"type\": \"ubuntu\",\n },\n mount_points=[\n {\n \"volume\": \"/mnt/bindmounts/shared\",\n \"path\": \"/mnt/shared\",\n },\n {\n \"volume\": \"local-lvm\",\n \"size\": \"10G\",\n \"path\": \"/mnt/volume\",\n },\n {\n \"volume\": \"local-lvm:subvol-108-disk-101\",\n \"size\": \"10G\",\n \"path\": \"/mnt/data\",\n },\n ],\n startup={\n \"order\": 3,\n \"up_delay\": 60,\n \"down_delay\": 60,\n })\npulumi.export(\"ubuntuContainerPassword\", ubuntu_container_password.result)\npulumi.export(\"ubuntuContainerPrivateKey\", ubuntu_container_key.private_key_pem)\npulumi.export(\"ubuntuContainerPublicKey\", ubuntu_container_key.public_key_openssh)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Random = Pulumi.Random;\nusing Std = Pulumi.Std;\nusing Tls = Pulumi.Tls;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntu2504LxcImg = new ProxmoxVE.Download.File(\"ubuntu_2504_lxc_img\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n Url = \"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\",\n });\n\n var ubuntuContainerPassword = new Random.RandomPassword(\"ubuntu_container_password\", new()\n {\n Length = 16,\n OverrideSpecial = \"_%@\",\n Special = true,\n });\n\n var ubuntuContainerKey = new Tls.PrivateKey(\"ubuntu_container_key\", new()\n {\n Algorithm = \"RSA\",\n RsaBits = 2048,\n });\n\n var ubuntuContainer = new ProxmoxVE.CT.Container(\"ubuntu_container\", new()\n {\n Description = \"Managed by Pulumi\",\n NodeName = \"first-node\",\n VmId = 1234,\n Unprivileged = true,\n Features = new ProxmoxVE.CT.Inputs.ContainerFeaturesArgs\n {\n Nesting = true,\n },\n Initialization = new ProxmoxVE.CT.Inputs.ContainerInitializationArgs\n {\n Hostname = \"terraform-provider-proxmox-ubuntu-container\",\n IpConfigs = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigArgs\n {\n Ipv4 = new ProxmoxVE.CT.Inputs.ContainerInitializationIpConfigIpv4Args\n {\n Address = \"dhcp\",\n },\n },\n },\n UserAccount = new ProxmoxVE.CT.Inputs.ContainerInitializationUserAccountArgs\n {\n Keys = new[]\n {\n Std.Trimspace.Invoke(new()\n {\n Input = ubuntuContainerKey.PublicKeyOpenssh,\n }).Apply(invoke =\u003e invoke.Result),\n },\n Password = ubuntuContainerPassword.Result,\n },\n },\n NetworkInterfaces = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerNetworkInterfaceArgs\n {\n Name = \"veth0\",\n },\n },\n Disk = new ProxmoxVE.CT.Inputs.ContainerDiskArgs\n {\n DatastoreId = \"local-lvm\",\n Size = 4,\n },\n OperatingSystem = new ProxmoxVE.CT.Inputs.ContainerOperatingSystemArgs\n {\n TemplateFileId = ubuntu2504LxcImg.Id,\n Type = \"ubuntu\",\n },\n MountPoints = new[]\n {\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"/mnt/bindmounts/shared\",\n Path = \"/mnt/shared\",\n },\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"local-lvm\",\n Size = \"10G\",\n Path = \"/mnt/volume\",\n },\n new ProxmoxVE.CT.Inputs.ContainerMountPointArgs\n {\n Volume = \"local-lvm:subvol-108-disk-101\",\n Size = \"10G\",\n Path = \"/mnt/data\",\n },\n },\n Startup = new ProxmoxVE.CT.Inputs.ContainerStartupArgs\n {\n Order = 3,\n UpDelay = 60,\n DownDelay = 60,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"ubuntuContainerPassword\"] = ubuntuContainerPassword.Result,\n [\"ubuntuContainerPrivateKey\"] = ubuntuContainerKey.PrivateKeyPem,\n [\"ubuntuContainerPublicKey\"] = ubuntuContainerKey.PublicKeyOpenssh,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/ct\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/download\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi-tls/sdk/v5/go/tls\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tubuntu2504LxcImg, err := download.NewFile(ctx, \"ubuntu_2504_lxc_img\", \u0026download.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tUrl: pulumi.String(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerPassword, err := random.NewRandomPassword(ctx, \"ubuntu_container_password\", \u0026random.RandomPasswordArgs{\n\t\t\tLength: pulumi.Int(16),\n\t\t\tOverrideSpecial: pulumi.String(\"_%@\"),\n\t\t\tSpecial: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tubuntuContainerKey, err := tls.NewPrivateKey(ctx, \"ubuntu_container_key\", \u0026tls.PrivateKeyArgs{\n\t\t\tAlgorithm: pulumi.String(\"RSA\"),\n\t\t\tRsaBits: pulumi.Int(2048),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = ct.NewContainer(ctx, \"ubuntu_container\", \u0026ct.ContainerArgs{\n\t\t\tDescription: pulumi.String(\"Managed by Pulumi\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tVmId: pulumi.Int(1234),\n\t\t\tUnprivileged: pulumi.Bool(true),\n\t\t\tFeatures: \u0026ct.ContainerFeaturesArgs{\n\t\t\t\tNesting: pulumi.Bool(true),\n\t\t\t},\n\t\t\tInitialization: \u0026ct.ContainerInitializationArgs{\n\t\t\t\tHostname: pulumi.String(\"terraform-provider-proxmox-ubuntu-container\"),\n\t\t\t\tIpConfigs: ct.ContainerInitializationIpConfigArray{\n\t\t\t\t\t\u0026ct.ContainerInitializationIpConfigArgs{\n\t\t\t\t\t\tIpv4: \u0026ct.ContainerInitializationIpConfigIpv4Args{\n\t\t\t\t\t\t\tAddress: pulumi.String(\"dhcp\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUserAccount: \u0026ct.ContainerInitializationUserAccountArgs{\n\t\t\t\t\tKeys: pulumi.StringArray{\n\t\t\t\t\t\tstd.TrimspaceOutput(ctx, std.TrimspaceOutputArgs{\n\t\t\t\t\t\t\tInput: ubuntuContainerKey.PublicKeyOpenssh,\n\t\t\t\t\t\t}, nil).ApplyT(func(invoke std.TrimspaceResult) (*string, error) {\n\t\t\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t},\n\t\t\t\t\tPassword: ubuntuContainerPassword.Result,\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: ct.ContainerNetworkInterfaceArray{\n\t\t\t\t\u0026ct.ContainerNetworkInterfaceArgs{\n\t\t\t\t\tName: pulumi.String(\"veth0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisk: \u0026ct.ContainerDiskArgs{\n\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\tSize: pulumi.Int(4),\n\t\t\t},\n\t\t\tOperatingSystem: \u0026ct.ContainerOperatingSystemArgs{\n\t\t\t\tTemplateFileId: ubuntu2504LxcImg.ID(),\n\t\t\t\tType: pulumi.String(\"ubuntu\"),\n\t\t\t},\n\t\t\tMountPoints: ct.ContainerMountPointArray{\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"/mnt/bindmounts/shared\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/shared\"),\n\t\t\t\t},\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSize: pulumi.String(\"10G\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/volume\"),\n\t\t\t\t},\n\t\t\t\t\u0026ct.ContainerMountPointArgs{\n\t\t\t\t\tVolume: pulumi.String(\"local-lvm:subvol-108-disk-101\"),\n\t\t\t\t\tSize: pulumi.String(\"10G\"),\n\t\t\t\t\tPath: pulumi.String(\"/mnt/data\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStartup: \u0026ct.ContainerStartupArgs{\n\t\t\t\tOrder: pulumi.Int(3),\n\t\t\t\tUpDelay: pulumi.Int(60),\n\t\t\t\tDownDelay: pulumi.Int(60),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"ubuntuContainerPassword\", ubuntuContainerPassword.Result)\n\t\tctx.Export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.PrivateKeyPem)\n\t\tctx.Export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.PublicKeyOpenssh)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Download.File;\nimport io.muehlbachler.pulumi.proxmoxve.Download.FileArgs;\nimport com.pulumi.random.RandomPassword;\nimport com.pulumi.random.RandomPasswordArgs;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport io.muehlbachler.pulumi.proxmoxve.CT.Container;\nimport io.muehlbachler.pulumi.proxmoxve.CT.ContainerArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerFeaturesArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerInitializationUserAccountArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerNetworkInterfaceArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerDiskArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerOperatingSystemArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerMountPointArgs;\nimport com.pulumi.proxmoxve.CT.inputs.ContainerStartupArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntu2504LxcImg = new File(\"ubuntu2504LxcImg\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .url(\"https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\")\n .build());\n\n var ubuntuContainerPassword = new RandomPassword(\"ubuntuContainerPassword\", RandomPasswordArgs.builder()\n .length(16)\n .overrideSpecial(\"_%@\")\n .special(true)\n .build());\n\n var ubuntuContainerKey = new PrivateKey(\"ubuntuContainerKey\", PrivateKeyArgs.builder()\n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var ubuntuContainer = new Container(\"ubuntuContainer\", ContainerArgs.builder()\n .description(\"Managed by Pulumi\")\n .nodeName(\"first-node\")\n .vmId(1234)\n .unprivileged(true)\n .features(ContainerFeaturesArgs.builder()\n .nesting(true)\n .build())\n .initialization(ContainerInitializationArgs.builder()\n .hostname(\"terraform-provider-proxmox-ubuntu-container\")\n .ipConfigs(ContainerInitializationIpConfigArgs.builder()\n .ipv4(ContainerInitializationIpConfigIpv4Args.builder()\n .address(\"dhcp\")\n .build())\n .build())\n .userAccount(ContainerInitializationUserAccountArgs.builder()\n .keys(StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(ubuntuContainerKey.publicKeyOpenssh())\n .build()).applyValue(_invoke -\u003e _invoke.result()))\n .password(ubuntuContainerPassword.result())\n .build())\n .build())\n .networkInterfaces(ContainerNetworkInterfaceArgs.builder()\n .name(\"veth0\")\n .build())\n .disk(ContainerDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .size(4)\n .build())\n .operatingSystem(ContainerOperatingSystemArgs.builder()\n .templateFileId(ubuntu2504LxcImg.id())\n .type(\"ubuntu\")\n .build())\n .mountPoints( \n ContainerMountPointArgs.builder()\n .volume(\"/mnt/bindmounts/shared\")\n .path(\"/mnt/shared\")\n .build(),\n ContainerMountPointArgs.builder()\n .volume(\"local-lvm\")\n .size(\"10G\")\n .path(\"/mnt/volume\")\n .build(),\n ContainerMountPointArgs.builder()\n .volume(\"local-lvm:subvol-108-disk-101\")\n .size(\"10G\")\n .path(\"/mnt/data\")\n .build())\n .startup(ContainerStartupArgs.builder()\n .order(3)\n .upDelay(60)\n .downDelay(60)\n .build())\n .build());\n\n ctx.export(\"ubuntuContainerPassword\", ubuntuContainerPassword.result());\n ctx.export(\"ubuntuContainerPrivateKey\", ubuntuContainerKey.privateKeyPem());\n ctx.export(\"ubuntuContainerPublicKey\", ubuntuContainerKey.publicKeyOpenssh());\n }\n}\n```\n```yaml\nresources:\n ubuntuContainer:\n type: proxmoxve:CT:Container\n name: ubuntu_container\n properties:\n description: Managed by Pulumi\n nodeName: first-node\n vmId: 1234 # newer linux distributions require unprivileged user namespaces\n unprivileged: true\n features:\n nesting: true\n initialization:\n hostname: terraform-provider-proxmox-ubuntu-container\n ipConfigs:\n - ipv4:\n address: dhcp\n userAccount:\n keys:\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${ubuntuContainerKey.publicKeyOpenssh}\n return: result\n password: ${ubuntuContainerPassword.result}\n networkInterfaces:\n - name: veth0\n disk:\n datastoreId: local-lvm\n size: 4\n operatingSystem:\n templateFileId: ${ubuntu2504LxcImg.id}\n type: ubuntu\n mountPoints:\n - volume: /mnt/bindmounts/shared\n path: /mnt/shared\n - volume: local-lvm\n size: 10G\n path: /mnt/volume\n - volume: local-lvm:subvol-108-disk-101\n size: 10G\n path: /mnt/data\n startup:\n order: '3'\n upDelay: '60'\n downDelay: '60'\n ubuntu2504LxcImg:\n type: proxmoxve:Download:File\n name: ubuntu_2504_lxc_img\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n url: https://mirrors.servercentral.com/ubuntu-cloud-images/releases/25.04/release/ubuntu-25.04-server-cloudimg-amd64-root.tar.xz\n ubuntuContainerPassword:\n type: random:RandomPassword\n name: ubuntu_container_password\n properties:\n length: 16\n overrideSpecial: _%@\n special: true\n ubuntuContainerKey:\n type: tls:PrivateKey\n name: ubuntu_container_key\n properties:\n algorithm: RSA\n rsaBits: 2048\noutputs:\n ubuntuContainerPassword: ${ubuntuContainerPassword.result}\n ubuntuContainerPrivateKey: ${ubuntuContainerKey.privateKeyPem}\n ubuntuContainerPublicKey: ${ubuntuContainerKey.publicKeyOpenssh}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstances can be imported using the `node_name` and the `vm_id`, e.g.,\n\nbash\n\n```sh\n$ pulumi import proxmoxve:CT/container:Container ubuntu_container first-node/1234\n```\n\n", "properties": { "clone": { "$ref": "#/types/proxmoxve:CT/ContainerClone:ContainerClone", @@ -3576,8 +4226,7 @@ }, "disk": { "$ref": "#/types/proxmoxve:CT/ContainerDisk:ContainerDisk", - "description": "The disk configuration.\n", - "willReplaceOnChanges": true + "description": "The disk configuration.\n" }, "environmentVariables": { "type": "object", @@ -3607,7 +4256,8 @@ "items": { "$ref": "#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint" }, - "description": "A mount point" + "description": "A mount point", + "willReplaceOnChanges": true }, "networkInterfaces": { "type": "array", @@ -3725,8 +4375,7 @@ }, "disk": { "$ref": "#/types/proxmoxve:CT/ContainerDisk:ContainerDisk", - "description": "The disk configuration.\n", - "willReplaceOnChanges": true + "description": "The disk configuration.\n" }, "environmentVariables": { "type": "object", @@ -3770,7 +4419,8 @@ "items": { "$ref": "#/types/proxmoxve:CT/ContainerMountPoint:ContainerMountPoint" }, - "description": "A mount point" + "description": "A mount point", + "willReplaceOnChanges": true }, "networkInterfaces": { "type": "array", @@ -4149,8 +4799,7 @@ "description": "The node name.\n" }, "overwrite": { - "type": "boolean", - "description": "By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and file size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n" + "type": "boolean" }, "overwriteUnmanaged": { "type": "boolean", @@ -4215,8 +4864,7 @@ "description": "The node name.\n" }, "overwrite": { - "type": "boolean", - "description": "By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and file size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n" + "type": "boolean" }, "overwriteUnmanaged": { "type": "boolean", @@ -4273,8 +4921,7 @@ "description": "The node name.\n" }, "overwrite": { - "type": "boolean", - "description": "By default \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e. If \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e and file size has changed in the datastore, it will be replaced. If \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e, there will be no check.\n" + "type": "boolean" }, "overwriteUnmanaged": { "type": "boolean", @@ -5229,7 +5876,7 @@ "properties": { "containerId": { "type": "integer", - "description": "Container ID.\n" + "description": "Container ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n" }, "dhcp": { "type": "boolean", @@ -5277,7 +5924,7 @@ }, "vmId": { "type": "integer", - "description": "VM ID.\n" + "description": "VM ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n" } }, "required": [ @@ -5286,7 +5933,7 @@ "inputProperties": { "containerId": { "type": "integer", - "description": "Container ID.\n" + "description": "Container ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n" }, "dhcp": { "type": "boolean", @@ -5334,7 +5981,7 @@ }, "vmId": { "type": "integer", - "description": "VM ID.\n" + "description": "VM ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n" } }, "requiredInputs": [ @@ -5345,7 +5992,7 @@ "properties": { "containerId": { "type": "integer", - "description": "Container ID.\n" + "description": "Container ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n" }, "dhcp": { "type": "boolean", @@ -5393,14 +6040,14 @@ }, "vmId": { "type": "integer", - "description": "VM ID.\n" + "description": "VM ID. **Exactly one of \u003cspan pulumi-lang-nodejs=\"`vmId`\" pulumi-lang-dotnet=\"`VmId`\" pulumi-lang-go=\"`vmId`\" pulumi-lang-python=\"`vm_id`\" pulumi-lang-yaml=\"`vmId`\" pulumi-lang-java=\"`vmId`\"\u003e`vm_id`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`containerId`\" pulumi-lang-dotnet=\"`ContainerId`\" pulumi-lang-go=\"`containerId`\" pulumi-lang-python=\"`container_id`\" pulumi-lang-yaml=\"`containerId`\" pulumi-lang-java=\"`containerId`\"\u003e`container_id`\u003c/span\u003e must be specified.**\n" } }, "type": "object" } }, "proxmoxve:Network/firewallRules:FirewallRules": { - "description": "Manages cluster-level, node-level or VM/container-level firewall rules.\n\n\u003e **Note:** Before creating a new \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-dotnet=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-go=\"`Network.FirewallRules`\" pulumi-lang-python=\"`Network.FirewallRules`\" pulumi-lang-yaml=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-java=\"`proxmoxve.Network.FirewallRules`\"\u003e`proxmoxve.Network.FirewallRules`\u003c/span\u003e resource, verify that no rules already exist for the target (cluster, node, VM, or container).\n\u003e If rules are already configured, import them first using the appropriate import command.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst inbound = new proxmoxve.network.FirewallRules(\"inbound\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n rules: [\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTP\",\n dest: \"192.168.1.5\",\n dport: \"80\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTPS\",\n dest: \"192.168.1.5\",\n dport: \"443\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n securityGroup: exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name,\n comment: \"From security group\",\n iface: \"net0\",\n },\n ],\n}, {\n dependsOn: [\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ninbound = proxmoxve.network.FirewallRules(\"inbound\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n rules=[\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTP\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"80\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTPS\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"443\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"security_group\": example_proxmox_virtual_environment_cluster_firewall_security_group[\"name\"],\n \"comment\": \"From security group\",\n \"iface\": \"net0\",\n },\n ],\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n example_proxmox_virtual_environment_cluster_firewall_security_group,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var inbound = new ProxmoxVE.Network.FirewallRules(\"inbound\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Rules = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTP\",\n Dest = \"192.168.1.5\",\n Dport = \"80\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTPS\",\n Dest = \"192.168.1.5\",\n Dport = \"443\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n SecurityGroup = exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name,\n Comment = \"From security group\",\n Iface = \"net0\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallRules(ctx, \"inbound\", \u0026network.FirewallRulesArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tRules: network.FirewallRulesRuleArray{\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTP\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"80\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTPS\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"443\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tSecurityGroup: pulumi.Any(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name),\n\t\t\t\t\tComment: pulumi.String(\"From security group\"),\n\t\t\t\t\tIface: pulumi.String(\"net0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\texampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRules;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRulesArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallRulesRuleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var inbound = new FirewallRules(\"inbound\", FirewallRulesArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .rules( \n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTP\")\n .dest(\"192.168.1.5\")\n .dport(\"80\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTPS\")\n .dest(\"192.168.1.5\")\n .dport(\"443\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .securityGroup(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name())\n .comment(\"From security group\")\n .iface(\"net0\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n inbound:\n type: proxmoxve:Network:FirewallRules\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n rules:\n - type: in\n action: ACCEPT\n comment: Allow HTTP\n dest: 192.168.1.5\n dport: '80'\n proto: tcp\n log: info\n - type: in\n action: ACCEPT\n comment: Allow HTTPS\n dest: 192.168.1.5\n dport: '443'\n proto: tcp\n log: info\n - securityGroup: ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name}\n comment: From security group\n iface: net0\n options:\n dependsOn:\n - ${example}\n - ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container Rules\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e`\n\nExample uses node name `pve` and container ID `100`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallRules:FirewallRules container_rules container/pve/100\n```\n\n", + "description": "Manages cluster-level, node-level or VM/container-level firewall rules.\n\n\u003e Before creating a new \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-dotnet=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-go=\"`Network.FirewallRules`\" pulumi-lang-python=\"`Network.FirewallRules`\" pulumi-lang-yaml=\"`proxmoxve.Network.FirewallRules`\" pulumi-lang-java=\"`proxmoxve.Network.FirewallRules`\"\u003e`proxmoxve.Network.FirewallRules`\u003c/span\u003e resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst inbound = new proxmoxve.network.FirewallRules(\"inbound\", {\n nodeName: example.nodeName,\n vmId: example.vmId,\n rules: [\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTP\",\n dest: \"192.168.1.5\",\n dport: \"80\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n type: \"in\",\n action: \"ACCEPT\",\n comment: \"Allow HTTPS\",\n dest: \"192.168.1.5\",\n dport: \"443\",\n proto: \"tcp\",\n log: \"info\",\n },\n {\n securityGroup: exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name,\n comment: \"From security group\",\n iface: \"net0\",\n },\n ],\n}, {\n dependsOn: [\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\ninbound = proxmoxve.network.FirewallRules(\"inbound\",\n node_name=example[\"nodeName\"],\n vm_id=example[\"vmId\"],\n rules=[\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTP\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"80\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"type\": \"in\",\n \"action\": \"ACCEPT\",\n \"comment\": \"Allow HTTPS\",\n \"dest\": \"192.168.1.5\",\n \"dport\": \"443\",\n \"proto\": \"tcp\",\n \"log\": \"info\",\n },\n {\n \"security_group\": example_proxmox_virtual_environment_cluster_firewall_security_group[\"name\"],\n \"comment\": \"From security group\",\n \"iface\": \"net0\",\n },\n ],\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n example_proxmox_virtual_environment_cluster_firewall_security_group,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var inbound = new ProxmoxVE.Network.FirewallRules(\"inbound\", new()\n {\n NodeName = example.NodeName,\n VmId = example.VmId,\n Rules = new[]\n {\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTP\",\n Dest = \"192.168.1.5\",\n Dport = \"80\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n Type = \"in\",\n Action = \"ACCEPT\",\n Comment = \"Allow HTTPS\",\n Dest = \"192.168.1.5\",\n Dport = \"443\",\n Proto = \"tcp\",\n Log = \"info\",\n },\n new ProxmoxVE.Network.Inputs.FirewallRulesRuleArgs\n {\n SecurityGroup = exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name,\n Comment = \"From security group\",\n Iface = \"net0\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/network\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := network.NewFirewallRules(ctx, \"inbound\", \u0026network.FirewallRulesArgs{\n\t\t\tNodeName: pulumi.Any(example.NodeName),\n\t\t\tVmId: pulumi.Any(example.VmId),\n\t\t\tRules: network.FirewallRulesRuleArray{\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTP\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"80\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tType: pulumi.String(\"in\"),\n\t\t\t\t\tAction: pulumi.String(\"ACCEPT\"),\n\t\t\t\t\tComment: pulumi.String(\"Allow HTTPS\"),\n\t\t\t\t\tDest: pulumi.String(\"192.168.1.5\"),\n\t\t\t\t\tDport: pulumi.String(\"443\"),\n\t\t\t\t\tProto: pulumi.String(\"tcp\"),\n\t\t\t\t\tLog: pulumi.String(\"info\"),\n\t\t\t\t},\n\t\t\t\t\u0026network.FirewallRulesRuleArgs{\n\t\t\t\t\tSecurityGroup: pulumi.Any(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.Name),\n\t\t\t\t\tComment: pulumi.String(\"From security group\"),\n\t\t\t\t\tIface: pulumi.String(\"net0\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\texampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRules;\nimport io.muehlbachler.pulumi.proxmoxve.Network.FirewallRulesArgs;\nimport com.pulumi.proxmoxve.Network.inputs.FirewallRulesRuleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var inbound = new FirewallRules(\"inbound\", FirewallRulesArgs.builder()\n .nodeName(example.nodeName())\n .vmId(example.vmId())\n .rules( \n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTP\")\n .dest(\"192.168.1.5\")\n .dport(\"80\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .type(\"in\")\n .action(\"ACCEPT\")\n .comment(\"Allow HTTPS\")\n .dest(\"192.168.1.5\")\n .dport(\"443\")\n .proto(\"tcp\")\n .log(\"info\")\n .build(),\n FirewallRulesRuleArgs.builder()\n .securityGroup(exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name())\n .comment(\"From security group\")\n .iface(\"net0\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n inbound:\n type: proxmoxve:Network:FirewallRules\n properties:\n nodeName: ${example.nodeName}\n vmId: ${example.vmId}\n rules:\n - type: in\n action: ACCEPT\n comment: Allow HTTP\n dest: 192.168.1.5\n dport: '80'\n proto: tcp\n log: info\n - type: in\n action: ACCEPT\n comment: Allow HTTPS\n dest: 192.168.1.5\n dport: '443'\n proto: tcp\n log: info\n - securityGroup: ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup.name}\n comment: From security group\n iface: net0\n options:\n dependsOn:\n - ${example}\n - ${exampleProxmoxVirtualEnvironmentClusterFirewallSecurityGroup}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n### Container Rules\n\nUse the import ID format: `container/\u003cnode_name\u003e/\u003ccontainer_id\u003e`\n\nExample uses node name `pve` and container ID `100`.\n\n**Example:**\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Network/firewallRules:FirewallRules container_rules container/pve/100\n```\n\n", "properties": { "containerId": { "type": "integer", @@ -5884,6 +6531,180 @@ "type": "object" } }, + "proxmoxve:Node/firewall:Firewall": { + "description": "Manages Proxmox VE Node Firewall options.\n\n\u003e This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options).\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst node_pve1 = new proxmoxve.node.Firewall(\"node-pve1\", {\n nodeName: \"pve1\",\n enabled: false,\n});\nconst pve2 = new proxmoxve.node.Firewall(\"pve2\", {\n nodeName: \"pve2\",\n enabled: true,\n logLevelIn: \"alert\",\n logLevelOut: \"alert\",\n logLevelForward: \"alert\",\n ndp: true,\n nftables: true,\n nosmurfs: true,\n smurfLogLevel: \"alert\",\n tcpFlagsLogLevel: \"alert\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nnode_pve1 = proxmoxve.node.Firewall(\"node-pve1\",\n node_name=\"pve1\",\n enabled=False)\npve2 = proxmoxve.node.Firewall(\"pve2\",\n node_name=\"pve2\",\n enabled=True,\n log_level_in=\"alert\",\n log_level_out=\"alert\",\n log_level_forward=\"alert\",\n ndp=True,\n nftables=True,\n nosmurfs=True,\n smurf_log_level=\"alert\",\n tcp_flags_log_level=\"alert\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var node_pve1 = new ProxmoxVE.Node.Firewall(\"node-pve1\", new()\n {\n NodeName = \"pve1\",\n Enabled = false,\n });\n\n var pve2 = new ProxmoxVE.Node.Firewall(\"pve2\", new()\n {\n NodeName = \"pve2\",\n Enabled = true,\n LogLevelIn = \"alert\",\n LogLevelOut = \"alert\",\n LogLevelForward = \"alert\",\n Ndp = true,\n Nftables = true,\n Nosmurfs = true,\n SmurfLogLevel = \"alert\",\n TcpFlagsLogLevel = \"alert\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/node\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := node.NewFirewall(ctx, \"node-pve1\", \u0026node.FirewallArgs{\n\t\t\tNodeName: pulumi.String(\"pve1\"),\n\t\t\tEnabled: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = node.NewFirewall(ctx, \"pve2\", \u0026node.FirewallArgs{\n\t\t\tNodeName: pulumi.String(\"pve2\"),\n\t\t\tEnabled: pulumi.Bool(true),\n\t\t\tLogLevelIn: pulumi.String(\"alert\"),\n\t\t\tLogLevelOut: pulumi.String(\"alert\"),\n\t\t\tLogLevelForward: pulumi.String(\"alert\"),\n\t\t\tNdp: pulumi.Bool(true),\n\t\t\tNftables: pulumi.Bool(true),\n\t\t\tNosmurfs: pulumi.Bool(true),\n\t\t\tSmurfLogLevel: pulumi.String(\"alert\"),\n\t\t\tTcpFlagsLogLevel: pulumi.String(\"alert\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Node.Firewall;\nimport io.muehlbachler.pulumi.proxmoxve.Node.FirewallArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var node_pve1 = new Firewall(\"node-pve1\", FirewallArgs.builder()\n .nodeName(\"pve1\")\n .enabled(false)\n .build());\n\n var pve2 = new Firewall(\"pve2\", FirewallArgs.builder()\n .nodeName(\"pve2\")\n .enabled(true)\n .logLevelIn(\"alert\")\n .logLevelOut(\"alert\")\n .logLevelForward(\"alert\")\n .ndp(true)\n .nftables(true)\n .nosmurfs(true)\n .smurfLogLevel(\"alert\")\n .tcpFlagsLogLevel(\"alert\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n node-pve1:\n type: proxmoxve:Node:Firewall\n properties:\n nodeName: pve1\n enabled: false\n pve2:\n type: proxmoxve:Node:Firewall\n properties:\n nodeName: pve2\n enabled: true\n logLevelIn: alert\n logLevelOut: alert\n logLevelForward: alert\n ndp: true\n nftables: true\n nosmurfs: true\n smurfLogLevel: alert\n tcpFlagsLogLevel: alert\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1\n```\n\n", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable host firewall rules (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "logLevelForward": { + "type": "string", + "description": "Log level for forwarded traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "logLevelIn": { + "type": "string", + "description": "Log level for incoming traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "logLevelOut": { + "type": "string", + "description": "Log level for outgoing traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "ndp": { + "type": "boolean", + "description": "Enable NDP - Neighbor Discovery Protocol (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "nfConntrackMax": { + "type": "integer", + "description": "Maximum number of tracked connections (defaults to \u003cspan pulumi-lang-nodejs=\"`262144`\" pulumi-lang-dotnet=\"`262144`\" pulumi-lang-go=\"`262144`\" pulumi-lang-python=\"`262144`\" pulumi-lang-yaml=\"`262144`\" pulumi-lang-java=\"`262144`\"\u003e`262144`\u003c/span\u003e). Minimum value is \u003cspan pulumi-lang-nodejs=\"`32768`\" pulumi-lang-dotnet=\"`32768`\" pulumi-lang-go=\"`32768`\" pulumi-lang-python=\"`32768`\" pulumi-lang-yaml=\"`32768`\" pulumi-lang-java=\"`32768`\"\u003e`32768`\u003c/span\u003e.\n" + }, + "nfConntrackTcpTimeoutEstablished": { + "type": "integer", + "description": "Conntrack established timeout in seconds (defaults to \u003cspan pulumi-lang-nodejs=\"`432000`\" pulumi-lang-dotnet=\"`432000`\" pulumi-lang-go=\"`432000`\" pulumi-lang-python=\"`432000`\" pulumi-lang-yaml=\"`432000`\" pulumi-lang-java=\"`432000`\"\u003e`432000`\u003c/span\u003e - 5 days). Minimum value is \u003cspan pulumi-lang-nodejs=\"`7875`\" pulumi-lang-dotnet=\"`7875`\" pulumi-lang-go=\"`7875`\" pulumi-lang-python=\"`7875`\" pulumi-lang-yaml=\"`7875`\" pulumi-lang-java=\"`7875`\"\u003e`7875`\u003c/span\u003e.\n" + }, + "nftables": { + "type": "boolean", + "description": "Enable nftables based firewall (tech preview, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "nodeName": { + "type": "string", + "description": "The cluster node name.\n" + }, + "nosmurfs": { + "type": "boolean", + "description": "Enable SMURFS filter (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "smurfLogLevel": { + "type": "string", + "description": "Log level for SMURFS filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "tcpFlagsLogLevel": { + "type": "string", + "description": "Log level for illegal tcp flags filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + } + }, + "required": [ + "enabled", + "logLevelForward", + "logLevelIn", + "logLevelOut", + "ndp", + "nfConntrackMax", + "nfConntrackTcpTimeoutEstablished", + "nftables", + "nodeName", + "nosmurfs", + "smurfLogLevel", + "tcpFlagsLogLevel" + ], + "inputProperties": { + "enabled": { + "type": "boolean", + "description": "Enable host firewall rules (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "logLevelForward": { + "type": "string", + "description": "Log level for forwarded traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "logLevelIn": { + "type": "string", + "description": "Log level for incoming traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "logLevelOut": { + "type": "string", + "description": "Log level for outgoing traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "ndp": { + "type": "boolean", + "description": "Enable NDP - Neighbor Discovery Protocol (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "nfConntrackMax": { + "type": "integer", + "description": "Maximum number of tracked connections (defaults to \u003cspan pulumi-lang-nodejs=\"`262144`\" pulumi-lang-dotnet=\"`262144`\" pulumi-lang-go=\"`262144`\" pulumi-lang-python=\"`262144`\" pulumi-lang-yaml=\"`262144`\" pulumi-lang-java=\"`262144`\"\u003e`262144`\u003c/span\u003e). Minimum value is \u003cspan pulumi-lang-nodejs=\"`32768`\" pulumi-lang-dotnet=\"`32768`\" pulumi-lang-go=\"`32768`\" pulumi-lang-python=\"`32768`\" pulumi-lang-yaml=\"`32768`\" pulumi-lang-java=\"`32768`\"\u003e`32768`\u003c/span\u003e.\n" + }, + "nfConntrackTcpTimeoutEstablished": { + "type": "integer", + "description": "Conntrack established timeout in seconds (defaults to \u003cspan pulumi-lang-nodejs=\"`432000`\" pulumi-lang-dotnet=\"`432000`\" pulumi-lang-go=\"`432000`\" pulumi-lang-python=\"`432000`\" pulumi-lang-yaml=\"`432000`\" pulumi-lang-java=\"`432000`\"\u003e`432000`\u003c/span\u003e - 5 days). Minimum value is \u003cspan pulumi-lang-nodejs=\"`7875`\" pulumi-lang-dotnet=\"`7875`\" pulumi-lang-go=\"`7875`\" pulumi-lang-python=\"`7875`\" pulumi-lang-yaml=\"`7875`\" pulumi-lang-java=\"`7875`\"\u003e`7875`\u003c/span\u003e.\n" + }, + "nftables": { + "type": "boolean", + "description": "Enable nftables based firewall (tech preview, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "nodeName": { + "type": "string", + "description": "The cluster node name.\n" + }, + "nosmurfs": { + "type": "boolean", + "description": "Enable SMURFS filter (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "smurfLogLevel": { + "type": "string", + "description": "Log level for SMURFS filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "tcpFlagsLogLevel": { + "type": "string", + "description": "Log level for illegal tcp flags filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + } + }, + "requiredInputs": [ + "nodeName" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Firewall resources.\n", + "properties": { + "enabled": { + "type": "boolean", + "description": "Enable host firewall rules (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "logLevelForward": { + "type": "string", + "description": "Log level for forwarded traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "logLevelIn": { + "type": "string", + "description": "Log level for incoming traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "logLevelOut": { + "type": "string", + "description": "Log level for outgoing traffic. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "ndp": { + "type": "boolean", + "description": "Enable NDP - Neighbor Discovery Protocol (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "nfConntrackMax": { + "type": "integer", + "description": "Maximum number of tracked connections (defaults to \u003cspan pulumi-lang-nodejs=\"`262144`\" pulumi-lang-dotnet=\"`262144`\" pulumi-lang-go=\"`262144`\" pulumi-lang-python=\"`262144`\" pulumi-lang-yaml=\"`262144`\" pulumi-lang-java=\"`262144`\"\u003e`262144`\u003c/span\u003e). Minimum value is \u003cspan pulumi-lang-nodejs=\"`32768`\" pulumi-lang-dotnet=\"`32768`\" pulumi-lang-go=\"`32768`\" pulumi-lang-python=\"`32768`\" pulumi-lang-yaml=\"`32768`\" pulumi-lang-java=\"`32768`\"\u003e`32768`\u003c/span\u003e.\n" + }, + "nfConntrackTcpTimeoutEstablished": { + "type": "integer", + "description": "Conntrack established timeout in seconds (defaults to \u003cspan pulumi-lang-nodejs=\"`432000`\" pulumi-lang-dotnet=\"`432000`\" pulumi-lang-go=\"`432000`\" pulumi-lang-python=\"`432000`\" pulumi-lang-yaml=\"`432000`\" pulumi-lang-java=\"`432000`\"\u003e`432000`\u003c/span\u003e - 5 days). Minimum value is \u003cspan pulumi-lang-nodejs=\"`7875`\" pulumi-lang-dotnet=\"`7875`\" pulumi-lang-go=\"`7875`\" pulumi-lang-python=\"`7875`\" pulumi-lang-yaml=\"`7875`\" pulumi-lang-java=\"`7875`\"\u003e`7875`\u003c/span\u003e.\n" + }, + "nftables": { + "type": "boolean", + "description": "Enable nftables based firewall (tech preview, defaults to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e).\n" + }, + "nodeName": { + "type": "string", + "description": "The cluster node name.\n" + }, + "nosmurfs": { + "type": "boolean", + "description": "Enable SMURFS filter (defaults to \u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "smurfLogLevel": { + "type": "string", + "description": "Log level for SMURFS filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + }, + "tcpFlagsLogLevel": { + "type": "string", + "description": "Log level for illegal tcp flags filter. Must be one of: \u003cspan pulumi-lang-nodejs=\"`emerg`\" pulumi-lang-dotnet=\"`Emerg`\" pulumi-lang-go=\"`emerg`\" pulumi-lang-python=\"`emerg`\" pulumi-lang-yaml=\"`emerg`\" pulumi-lang-java=\"`emerg`\"\u003e`emerg`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`alert`\" pulumi-lang-dotnet=\"`Alert`\" pulumi-lang-go=\"`alert`\" pulumi-lang-python=\"`alert`\" pulumi-lang-yaml=\"`alert`\" pulumi-lang-java=\"`alert`\"\u003e`alert`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`crit`\" pulumi-lang-dotnet=\"`Crit`\" pulumi-lang-go=\"`crit`\" pulumi-lang-python=\"`crit`\" pulumi-lang-yaml=\"`crit`\" pulumi-lang-java=\"`crit`\"\u003e`crit`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`err`\" pulumi-lang-dotnet=\"`Err`\" pulumi-lang-go=\"`err`\" pulumi-lang-python=\"`err`\" pulumi-lang-yaml=\"`err`\" pulumi-lang-java=\"`err`\"\u003e`err`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`warning`\" pulumi-lang-dotnet=\"`Warning`\" pulumi-lang-go=\"`warning`\" pulumi-lang-python=\"`warning`\" pulumi-lang-yaml=\"`warning`\" pulumi-lang-java=\"`warning`\"\u003e`warning`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`notice`\" pulumi-lang-dotnet=\"`Notice`\" pulumi-lang-go=\"`notice`\" pulumi-lang-python=\"`notice`\" pulumi-lang-yaml=\"`notice`\" pulumi-lang-java=\"`notice`\"\u003e`notice`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`info`\" pulumi-lang-dotnet=\"`Info`\" pulumi-lang-go=\"`info`\" pulumi-lang-python=\"`info`\" pulumi-lang-yaml=\"`info`\" pulumi-lang-java=\"`info`\"\u003e`info`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`debug`\" pulumi-lang-dotnet=\"`Debug`\" pulumi-lang-go=\"`debug`\" pulumi-lang-python=\"`debug`\" pulumi-lang-yaml=\"`debug`\" pulumi-lang-java=\"`debug`\"\u003e`debug`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e (defaults to \u003cspan pulumi-lang-nodejs=\"`nolog`\" pulumi-lang-dotnet=\"`Nolog`\" pulumi-lang-go=\"`nolog`\" pulumi-lang-python=\"`nolog`\" pulumi-lang-yaml=\"`nolog`\" pulumi-lang-java=\"`nolog`\"\u003e`nolog`\u003c/span\u003e).\n" + } + }, + "type": "object" + } + }, "proxmoxve:Oci/image:Image": { "description": "Manages OCI images pulled from OCI registries using PVE oci-registry-pull API. Pulls OCI container images and stores them as tar files in Proxmox VE datastores.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuLatest = new proxmoxve.oci.Image(\"ubuntu_latest\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/ubuntu:latest\",\n});\nconst nginx = new proxmoxve.oci.Image(\"nginx\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/nginx:alpine\",\n fileName: \"custom_image_name.tar\",\n});\nconst debian = new proxmoxve.oci.Image(\"debian\", {\n nodeName: \"pve\",\n datastoreId: \"local\",\n reference: \"docker.io/library/debian:bookworm\",\n uploadTimeout: 900,\n overwrite: false,\n overwriteUnmanaged: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_latest = proxmoxve.oci.Image(\"ubuntu_latest\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/ubuntu:latest\")\nnginx = proxmoxve.oci.Image(\"nginx\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/nginx:alpine\",\n file_name=\"custom_image_name.tar\")\ndebian = proxmoxve.oci.Image(\"debian\",\n node_name=\"pve\",\n datastore_id=\"local\",\n reference=\"docker.io/library/debian:bookworm\",\n upload_timeout=900,\n overwrite=False,\n overwrite_unmanaged=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuLatest = new ProxmoxVE.Oci.Image(\"ubuntu_latest\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/ubuntu:latest\",\n });\n\n var nginx = new ProxmoxVE.Oci.Image(\"nginx\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/nginx:alpine\",\n FileName = \"custom_image_name.tar\",\n });\n\n var debian = new ProxmoxVE.Oci.Image(\"debian\", new()\n {\n NodeName = \"pve\",\n DatastoreId = \"local\",\n Reference = \"docker.io/library/debian:bookworm\",\n UploadTimeout = 900,\n Overwrite = false,\n OverwriteUnmanaged = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/oci\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oci.NewImage(ctx, \"ubuntu_latest\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/ubuntu:latest\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oci.NewImage(ctx, \"nginx\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/nginx:alpine\"),\n\t\t\tFileName: pulumi.String(\"custom_image_name.tar\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oci.NewImage(ctx, \"debian\", \u0026oci.ImageArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tReference: pulumi.String(\"docker.io/library/debian:bookworm\"),\n\t\t\tUploadTimeout: pulumi.Int(900),\n\t\t\tOverwrite: pulumi.Bool(false),\n\t\t\tOverwriteUnmanaged: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Oci.Image;\nimport io.muehlbachler.pulumi.proxmoxve.Oci.ImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuLatest = new Image(\"ubuntuLatest\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/ubuntu:latest\")\n .build());\n\n var nginx = new Image(\"nginx\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/nginx:alpine\")\n .fileName(\"custom_image_name.tar\")\n .build());\n\n var debian = new Image(\"debian\", ImageArgs.builder()\n .nodeName(\"pve\")\n .datastoreId(\"local\")\n .reference(\"docker.io/library/debian:bookworm\")\n .uploadTimeout(900)\n .overwrite(false)\n .overwriteUnmanaged(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuLatest:\n type: proxmoxve:Oci:Image\n name: ubuntu_latest\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/ubuntu:latest\n nginx:\n type: proxmoxve:Oci:Image\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/nginx:alpine\n fileName: custom_image_name.tar\n debian:\n type: proxmoxve:Oci:Image\n properties:\n nodeName: pve\n datastoreId: local\n reference: docker.io/library/debian:bookworm\n uploadTimeout: 900\n overwrite: false\n overwriteUnmanaged: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "properties": { @@ -6439,424 +7260,613 @@ "type": "object" } }, - "proxmoxve:SDNZone/evpn:Evpn": { - "description": "EVPN Zone in Proxmox SDN. The EVPN zone creates a routable Layer 3 network, capable of spanning across multiple clusters.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Evpn(\"example\", {\n zoneId: \"evpn1\",\n nodes: [\"pve\"],\n controller: \"evpn-controller1\",\n vrfVxlan: 4000,\n advertiseSubnets: true,\n disableArpNdSuppression: false,\n exitNodes: [\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exitNodesLocalRouting: true,\n primaryExitNode: \"pve-exit1\",\n rtImport: \"65000:65000\",\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Evpn(\"example\",\n zone_id=\"evpn1\",\n nodes=[\"pve\"],\n controller=\"evpn-controller1\",\n vrf_vxlan=4000,\n advertise_subnets=True,\n disable_arp_nd_suppression=False,\n exit_nodes=[\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exit_nodes_local_routing=True,\n primary_exit_node=\"pve-exit1\",\n rt_import=\"65000:65000\",\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Evpn(\"example\", new()\n {\n ZoneId = \"evpn1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Controller = \"evpn-controller1\",\n VrfVxlan = 4000,\n AdvertiseSubnets = true,\n DisableArpNdSuppression = false,\n ExitNodes = new[]\n {\n \"pve-exit1\",\n \"pve-exit2\",\n },\n ExitNodesLocalRouting = true,\n PrimaryExitNode = \"pve-exit1\",\n RtImport = \"65000:65000\",\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewEvpn(ctx, \"example\", \u0026sdnzone.EvpnArgs{\n\t\t\tZoneId: pulumi.String(\"evpn1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tController: pulumi.String(\"evpn-controller1\"),\n\t\t\tVrfVxlan: pulumi.Int(4000),\n\t\t\tAdvertiseSubnets: pulumi.Bool(true),\n\t\t\tDisableArpNdSuppression: pulumi.Bool(false),\n\t\t\tExitNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve-exit1\"),\n\t\t\t\tpulumi.String(\"pve-exit2\"),\n\t\t\t},\n\t\t\tExitNodesLocalRouting: pulumi.Bool(true),\n\t\t\tPrimaryExitNode: pulumi.String(\"pve-exit1\"),\n\t\t\tRtImport: pulumi.String(\"65000:65000\"),\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Evpn;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.EvpnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Evpn(\"example\", EvpnArgs.builder()\n .zoneId(\"evpn1\")\n .nodes(\"pve\")\n .controller(\"evpn-controller1\")\n .vrfVxlan(4000)\n .advertiseSubnets(true)\n .disableArpNdSuppression(false)\n .exitNodes( \n \"pve-exit1\",\n \"pve-exit2\")\n .exitNodesLocalRouting(true)\n .primaryExitNode(\"pve-exit1\")\n .rtImport(\"65000:65000\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Evpn\n properties:\n zoneId: evpn1\n nodes:\n - pve\n controller: evpn-controller1\n vrfVxlan: 4000 # Optional attributes\n advertiseSubnets: true\n disableArpNdSuppression: false\n exitNodes:\n - pve-exit1\n - pve-exit2\n exitNodesLocalRouting: true\n primaryExitNode: pve-exit1\n rtImport: 65000:65000\n mtu: 1450 # Generic optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nEVPN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/evpn:Evpn example evpn1\n```\n\n", + "proxmoxve:Realm/ldap:Ldap": { + "description": "\n\n## Import\n\n#!/usr/bin/env sh\n\nLDAP realms can be imported using the realm identifier, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Realm/ldap:Ldap example example.com\n```\n\n-\u003e When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform.\n\n", "properties": { - "advertiseSubnets": { - "type": "boolean", - "description": "Enable subnet advertisement for EVPN.\n" + "baseDn": { + "type": "string", + "description": "LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com').\n" }, - "controller": { + "bindDn": { "type": "string", - "description": "EVPN controller address.\n" + "description": "LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com').\n" }, - "disableArpNdSuppression": { + "bindPassword": { + "type": "string", + "description": "Password for the bind DN. Note: stored in Proxmox but not returned by API.\n", + "secret": true + }, + "caPath": { + "type": "string", + "description": "Path to CA certificate file for SSL verification.\n" + }, + "caseSensitive": { "type": "boolean", - "description": "Disable ARP/ND suppression for EVPN.\n" + "description": "Enable case-sensitive username matching.\n" }, - "dns": { + "certKeyPath": { "type": "string", - "description": "DNS API server address.\n" + "description": "Path to client certificate key.\n" }, - "dnsZone": { + "certPath": { "type": "string", - "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" + "description": "Path to client certificate for SSL authentication.\n" }, - "exitNodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of exit nodes for EVPN.\n" + "comment": { + "type": "string", + "description": "Description of the realm.\n" }, - "exitNodesLocalRouting": { + "default": { "type": "boolean", - "description": "Enable local routing for EVPN exit nodes.\n" + "description": "Use this realm as the default for login.\n" }, - "ipam": { + "filter": { "type": "string", - "description": "IP Address Management system.\n" + "description": "LDAP filter for user searches.\n" }, - "mtu": { + "groupClasses": { + "type": "string", + "description": "LDAP objectClasses for groups (comma-separated).\n" + }, + "groupDn": { + "type": "string", + "description": "LDAP base DN for group searches.\n" + }, + "groupFilter": { + "type": "string", + "description": "LDAP filter for group searches.\n" + }, + "groupNameAttr": { + "type": "string", + "description": "LDAP attribute representing the group name.\n" + }, + "mode": { + "type": "string", + "description": "LDAP connection mode (ldap, ldaps, ldap+starttls).\n" + }, + "port": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "LDAP server port. Default: 389 (LDAP) or 636 (LDAPS).\n" }, - "nodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + "realm": { + "type": "string", + "description": "Realm identifier (e.g., 'example.com').\n" }, - "pending": { + "secure": { "type": "boolean", - "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" + "description": "Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP.\n", + "deprecationMessage": "Deprecated by Proxmox: use mode instead." }, - "primaryExitNode": { + "server1": { "type": "string", - "description": "Primary exit node for EVPN.\n" + "description": "Primary LDAP server hostname or IP address.\n" }, - "reverseDns": { + "server2": { "type": "string", - "description": "Reverse DNS API server address.\n" + "description": "Fallback LDAP server hostname or IP address.\n" }, - "rtImport": { + "sslVersion": { "type": "string", - "description": "Route target import for EVPN.\n" + "description": "SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3).\n" }, - "state": { + "syncAttributes": { "type": "string", - "description": "Indicates the current state of the zone.\n" + "description": "Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName').\n" }, - "vrfVxlan": { - "type": "integer", - "description": "VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n" + "syncDefaultsOptions": { + "type": "string", + "description": "Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'.\n" }, - "zoneId": { + "userAttr": { "type": "string", - "description": "The unique identifier of the SDN zone.\n" + "description": "LDAP attribute representing the username.\n" + }, + "userClasses": { + "type": "string", + "description": "LDAP objectClasses for users (comma-separated).\n" + }, + "verify": { + "type": "boolean", + "description": "Verify LDAP server SSL certificate.\n" } }, "required": [ - "controller", - "exitNodes", - "zoneId", - "nodes", - "pending", - "state", - "vrfVxlan" + "baseDn", + "caseSensitive", + "default", + "realm", + "secure", + "server1", + "userAttr", + "verify" ], "inputProperties": { - "advertiseSubnets": { - "type": "boolean", - "description": "Enable subnet advertisement for EVPN.\n" + "baseDn": { + "type": "string", + "description": "LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com').\n" }, - "controller": { + "bindDn": { "type": "string", - "description": "EVPN controller address.\n" + "description": "LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com').\n" }, - "disableArpNdSuppression": { + "bindPassword": { + "type": "string", + "description": "Password for the bind DN. Note: stored in Proxmox but not returned by API.\n", + "secret": true + }, + "caPath": { + "type": "string", + "description": "Path to CA certificate file for SSL verification.\n" + }, + "caseSensitive": { "type": "boolean", - "description": "Disable ARP/ND suppression for EVPN.\n" + "description": "Enable case-sensitive username matching.\n" }, - "dns": { + "certKeyPath": { "type": "string", - "description": "DNS API server address.\n" + "description": "Path to client certificate key.\n" }, - "dnsZone": { + "certPath": { "type": "string", - "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" + "description": "Path to client certificate for SSL authentication.\n" }, - "exitNodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of exit nodes for EVPN.\n" + "comment": { + "type": "string", + "description": "Description of the realm.\n" }, - "exitNodesLocalRouting": { + "default": { "type": "boolean", - "description": "Enable local routing for EVPN exit nodes.\n" + "description": "Use this realm as the default for login.\n" }, - "ipam": { + "filter": { "type": "string", - "description": "IP Address Management system.\n" + "description": "LDAP filter for user searches.\n" }, - "mtu": { - "type": "integer", - "description": "MTU value for the zone.\n" + "groupClasses": { + "type": "string", + "description": "LDAP objectClasses for groups (comma-separated).\n" }, - "nodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + "groupDn": { + "type": "string", + "description": "LDAP base DN for group searches.\n" }, - "primaryExitNode": { + "groupFilter": { "type": "string", - "description": "Primary exit node for EVPN.\n" + "description": "LDAP filter for group searches.\n" }, - "reverseDns": { + "groupNameAttr": { "type": "string", - "description": "Reverse DNS API server address.\n" + "description": "LDAP attribute representing the group name.\n" }, - "rtImport": { + "mode": { "type": "string", - "description": "Route target import for EVPN.\n" + "description": "LDAP connection mode (ldap, ldaps, ldap+starttls).\n" }, - "vrfVxlan": { + "port": { "type": "integer", - "description": "VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n" + "description": "LDAP server port. Default: 389 (LDAP) or 636 (LDAPS).\n" }, - "zoneId": { + "realm": { "type": "string", - "description": "The unique identifier of the SDN zone.\n" + "description": "Realm identifier (e.g., 'example.com').\n" + }, + "secure": { + "type": "boolean", + "description": "Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP.\n", + "deprecationMessage": "Deprecated by Proxmox: use mode instead." + }, + "server1": { + "type": "string", + "description": "Primary LDAP server hostname or IP address.\n" + }, + "server2": { + "type": "string", + "description": "Fallback LDAP server hostname or IP address.\n" + }, + "sslVersion": { + "type": "string", + "description": "SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3).\n" + }, + "syncAttributes": { + "type": "string", + "description": "Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName').\n" + }, + "syncDefaultsOptions": { + "type": "string", + "description": "Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'.\n" + }, + "userAttr": { + "type": "string", + "description": "LDAP attribute representing the username.\n" + }, + "userClasses": { + "type": "string", + "description": "LDAP objectClasses for users (comma-separated).\n" + }, + "verify": { + "type": "boolean", + "description": "Verify LDAP server SSL certificate.\n" } }, "requiredInputs": [ - "controller", - "zoneId", - "vrfVxlan" + "baseDn", + "realm", + "server1" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Evpn resources.\n", + "description": "Input properties used for looking up and filtering Ldap resources.\n", "properties": { - "advertiseSubnets": { - "type": "boolean", - "description": "Enable subnet advertisement for EVPN.\n" + "baseDn": { + "type": "string", + "description": "LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com').\n" }, - "controller": { + "bindDn": { "type": "string", - "description": "EVPN controller address.\n" + "description": "LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com').\n" }, - "disableArpNdSuppression": { + "bindPassword": { + "type": "string", + "description": "Password for the bind DN. Note: stored in Proxmox but not returned by API.\n", + "secret": true + }, + "caPath": { + "type": "string", + "description": "Path to CA certificate file for SSL verification.\n" + }, + "caseSensitive": { "type": "boolean", - "description": "Disable ARP/ND suppression for EVPN.\n" + "description": "Enable case-sensitive username matching.\n" }, - "dns": { + "certKeyPath": { "type": "string", - "description": "DNS API server address.\n" + "description": "Path to client certificate key.\n" }, - "dnsZone": { + "certPath": { "type": "string", - "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" + "description": "Path to client certificate for SSL authentication.\n" }, - "exitNodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of exit nodes for EVPN.\n" + "comment": { + "type": "string", + "description": "Description of the realm.\n" }, - "exitNodesLocalRouting": { + "default": { "type": "boolean", - "description": "Enable local routing for EVPN exit nodes.\n" + "description": "Use this realm as the default for login.\n" }, - "ipam": { + "filter": { "type": "string", - "description": "IP Address Management system.\n" + "description": "LDAP filter for user searches.\n" }, - "mtu": { + "groupClasses": { + "type": "string", + "description": "LDAP objectClasses for groups (comma-separated).\n" + }, + "groupDn": { + "type": "string", + "description": "LDAP base DN for group searches.\n" + }, + "groupFilter": { + "type": "string", + "description": "LDAP filter for group searches.\n" + }, + "groupNameAttr": { + "type": "string", + "description": "LDAP attribute representing the group name.\n" + }, + "mode": { + "type": "string", + "description": "LDAP connection mode (ldap, ldaps, ldap+starttls).\n" + }, + "port": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "LDAP server port. Default: 389 (LDAP) or 636 (LDAPS).\n" }, - "nodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + "realm": { + "type": "string", + "description": "Realm identifier (e.g., 'example.com').\n" }, - "pending": { + "secure": { "type": "boolean", - "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" + "description": "Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP.\n", + "deprecationMessage": "Deprecated by Proxmox: use mode instead." }, - "primaryExitNode": { + "server1": { "type": "string", - "description": "Primary exit node for EVPN.\n" + "description": "Primary LDAP server hostname or IP address.\n" }, - "reverseDns": { + "server2": { "type": "string", - "description": "Reverse DNS API server address.\n" + "description": "Fallback LDAP server hostname or IP address.\n" }, - "rtImport": { + "sslVersion": { "type": "string", - "description": "Route target import for EVPN.\n" + "description": "SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3).\n" }, - "state": { + "syncAttributes": { "type": "string", - "description": "Indicates the current state of the zone.\n" + "description": "Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName').\n" }, - "vrfVxlan": { - "type": "integer", - "description": "VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n" + "syncDefaultsOptions": { + "type": "string", + "description": "Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'.\n" }, - "zoneId": { + "userAttr": { "type": "string", - "description": "The unique identifier of the SDN zone.\n" + "description": "LDAP attribute representing the username.\n" + }, + "userClasses": { + "type": "string", + "description": "LDAP objectClasses for users (comma-separated).\n" + }, + "verify": { + "type": "boolean", + "description": "Verify LDAP server SSL certificate.\n" } }, "type": "object" } }, - "proxmoxve:SDNZone/qinq:Qinq": { - "description": "QinQ Zone in Proxmox SDN. QinQ also known as VLAN stacking, that uses multiple layers of VLAN tags for isolation. The QinQ zone defines the outer VLAN tag (the Service VLAN) whereas the inner VLAN tag is defined by the VNet. Your physical network switches must support stacked VLANs for this configuration. Due to the double stacking of tags, you need 4 more bytes for QinQ VLANs. For example, you must reduce the MTU to 1496 if you physical interface MTU is 1500.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Qinq(\"example\", {\n zoneId: \"qinq1\",\n bridge: \"vmbr0\",\n serviceVlan: 100,\n serviceVlanProtocol: \"802.1ad\",\n mtu: 1496,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Qinq(\"example\",\n zone_id=\"qinq1\",\n bridge=\"vmbr0\",\n service_vlan=100,\n service_vlan_protocol=\"802.1ad\",\n mtu=1496,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Qinq(\"example\", new()\n {\n ZoneId = \"qinq1\",\n Bridge = \"vmbr0\",\n ServiceVlan = 100,\n ServiceVlanProtocol = \"802.1ad\",\n Mtu = 1496,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewQinq(ctx, \"example\", \u0026sdnzone.QinqArgs{\n\t\t\tZoneId: pulumi.String(\"qinq1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tServiceVlan: pulumi.Int(100),\n\t\t\tServiceVlanProtocol: pulumi.String(\"802.1ad\"),\n\t\t\tMtu: pulumi.Int(1496),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Qinq;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.QinqArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Qinq(\"example\", QinqArgs.builder()\n .zoneId(\"qinq1\")\n .bridge(\"vmbr0\")\n .serviceVlan(100)\n .serviceVlanProtocol(\"802.1ad\")\n .mtu(1496)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Qinq\n properties:\n zoneId: qinq1\n bridge: vmbr0\n serviceVlan: 100\n serviceVlanProtocol: 802.1ad\n mtu: 1496 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nQinQ SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/qinq:Qinq example qinq1\n```\n\n", + "proxmoxve:Realm/sync:Sync": { + "description": "\n\n## Import\n\n#!/usr/bin/env sh\n\nRealm sync resources can be imported by realm name, e.g.:\n\n```sh\n$ pulumi import proxmoxve:Realm/sync:Sync example example.com\n```\n\nImporting only populates the `realm` and `id` attributes; other fields must\n\nbe set in configuration.\n\n", "properties": { - "bridge": { - "type": "string", - "description": "A local, VLAN-aware bridge that is already configured on each local node\n" + "dryRun": { + "type": "boolean", + "description": "Only simulate the sync without applying changes.\n" }, - "dns": { - "type": "string", - "description": "DNS API server address.\n" + "enableNew": { + "type": "boolean", + "description": "Enable newly synced users.\n" }, - "dnsZone": { - "type": "string", - "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" + "full": { + "type": "boolean", + "description": "Perform a full sync.\n", + "deprecationMessage": "Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead." }, - "ipam": { + "purge": { + "type": "boolean", + "description": "Purge removed entries.\n", + "deprecationMessage": "Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead." + }, + "realm": { "type": "string", - "description": "IP Address Management system.\n" + "description": "Name of the realm to synchronize.\n" }, - "mtu": { - "type": "integer", - "description": "MTU value for the zone.\n" + "removeVanished": { + "type": "string", + "description": "How to handle vanished entries (e.g. `acl;properties;entry` or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n" }, - "nodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + "scope": { + "type": "string", + "description": "Sync scope: users, groups, or both.\n" + } + }, + "required": [ + "realm" + ], + "inputProperties": { + "dryRun": { + "type": "boolean", + "description": "Only simulate the sync without applying changes.\n" }, - "pending": { + "enableNew": { "type": "boolean", - "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" + "description": "Enable newly synced users.\n" }, - "reverseDns": { - "type": "string", - "description": "Reverse DNS API server address.\n" + "full": { + "type": "boolean", + "description": "Perform a full sync.\n", + "deprecationMessage": "Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead." }, - "serviceVlan": { - "type": "integer", - "description": "Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n" + "purge": { + "type": "boolean", + "description": "Purge removed entries.\n", + "deprecationMessage": "Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead." }, - "serviceVlanProtocol": { + "realm": { "type": "string", - "description": "Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n" + "description": "Name of the realm to synchronize.\n" }, - "state": { + "removeVanished": { "type": "string", - "description": "Indicates the current state of the zone.\n" + "description": "How to handle vanished entries (e.g. `acl;properties;entry` or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n" }, - "zoneId": { + "scope": { "type": "string", - "description": "The unique identifier of the SDN zone.\n" + "description": "Sync scope: users, groups, or both.\n" } }, - "required": [ - "bridge", - "zoneId", - "nodes", - "pending", - "serviceVlan", - "state" + "requiredInputs": [ + "realm" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Sync resources.\n", + "properties": { + "dryRun": { + "type": "boolean", + "description": "Only simulate the sync without applying changes.\n" + }, + "enableNew": { + "type": "boolean", + "description": "Enable newly synced users.\n" + }, + "full": { + "type": "boolean", + "description": "Perform a full sync.\n", + "deprecationMessage": "Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead." + }, + "purge": { + "type": "boolean", + "description": "Purge removed entries.\n", + "deprecationMessage": "Deprecated by Proxmox: use\u003cspan pulumi-lang-nodejs=\" removeVanished \" pulumi-lang-dotnet=\" RemoveVanished \" pulumi-lang-go=\" removeVanished \" pulumi-lang-python=\" remove_vanished \" pulumi-lang-yaml=\" removeVanished \" pulumi-lang-java=\" removeVanished \"\u003e remove_vanished \u003c/span\u003einstead." + }, + "realm": { + "type": "string", + "description": "Name of the realm to synchronize.\n" + }, + "removeVanished": { + "type": "string", + "description": "How to handle vanished entries (e.g. `acl;properties;entry` or \u003cspan pulumi-lang-nodejs=\"`none`\" pulumi-lang-dotnet=\"`None`\" pulumi-lang-go=\"`none`\" pulumi-lang-python=\"`none`\" pulumi-lang-yaml=\"`none`\" pulumi-lang-java=\"`none`\"\u003e`none`\u003c/span\u003e).\n" + }, + "scope": { + "type": "string", + "description": "Sync scope: users, groups, or both.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:SDNFabric/oSPF:OSPF": { + "description": "OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OSPF(\"main\", {\n ospfId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n area: \"0\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OSPF(\"main\",\n ospf_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\",\n area=\"0\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OSPF(\"main\", new()\n {\n OspfId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n Area = \"0\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnfabric.NewOSPF(ctx, \"main\", \u0026sdnfabric.OSPFArgs{\n\t\t\tOspfId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tArea: pulumi.String(\"0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPF;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPFArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OSPF(\"main\", OSPFArgs.builder()\n .ospfId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .area(\"0\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OSPF\n properties:\n ospfId: main-fabric\n ipPrefix: 10.0.0.0/16\n area: '0'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "area": { + "type": "string", + "description": "OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n" + }, + "ipPrefix": { + "type": "string", + "description": "IPv4 prefix cidr for the fabric.\n" + }, + "ospfId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + } + }, + "required": [ + "area", + "ospfId", + "ipPrefix" ], "inputProperties": { - "bridge": { + "area": { "type": "string", - "description": "A local, VLAN-aware bridge that is already configured on each local node\n" + "description": "OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n" }, - "dns": { + "ipPrefix": { "type": "string", - "description": "DNS API server address.\n" + "description": "IPv4 prefix cidr for the fabric.\n" }, - "dnsZone": { + "ospfId": { "type": "string", - "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" + "description": "The unique identifier of the SDN fabric.\n" + } + }, + "requiredInputs": [ + "area", + "ospfId", + "ipPrefix" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering OSPF resources.\n", + "properties": { + "area": { + "type": "string", + "description": "OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n" + }, + "ipPrefix": { + "type": "string", + "description": "IPv4 prefix cidr for the fabric.\n" + }, + "ospfId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + } }, - "ipam": { + "type": "object" + } + }, + "proxmoxve:SDNFabric/openFabric:OpenFabric": { + "description": "OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OpenFabric(\"main\", {\n fabricId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OpenFabric(\"main\",\n fabric_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OpenFabric(\"main\", new()\n {\n FabricId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnfabric.NewOpenFabric(ctx, \"main\", \u0026sdnfabric.OpenFabricArgs{\n\t\t\tFabricId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabric;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OpenFabric(\"main\", OpenFabricArgs.builder()\n .fabricId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OpenFabric\n properties:\n fabricId: main-fabric\n ipPrefix: 10.0.0.0/16\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "csnpInterval": { + "type": "integer", + "description": "The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n" + }, + "fabricId": { "type": "string", - "description": "IP Address Management system.\n" + "description": "The unique identifier of the SDN fabric.\n" }, - "mtu": { + "helloInterval": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n" }, - "nodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + "ip6Prefix": { + "type": "string", + "description": "IPv6 prefix cidr for the fabric.\n" }, - "reverseDns": { + "ipPrefix": { "type": "string", - "description": "Reverse DNS API server address.\n" + "description": "IPv4 prefix cidr for the fabric.\n" + } + }, + "required": [ + "fabricId" + ], + "inputProperties": { + "csnpInterval": { + "type": "integer", + "description": "The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n" }, - "serviceVlan": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + }, + "helloInterval": { "type": "integer", - "description": "Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n" + "description": "The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n" }, - "serviceVlanProtocol": { + "ip6Prefix": { "type": "string", - "description": "Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n" + "description": "IPv6 prefix cidr for the fabric.\n" }, - "zoneId": { + "ipPrefix": { "type": "string", - "description": "The unique identifier of the SDN zone.\n" + "description": "IPv4 prefix cidr for the fabric.\n" } }, "requiredInputs": [ - "bridge", - "zoneId", - "serviceVlan" + "fabricId" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Qinq resources.\n", + "description": "Input properties used for looking up and filtering OpenFabric resources.\n", "properties": { - "bridge": { - "type": "string", - "description": "A local, VLAN-aware bridge that is already configured on each local node\n" - }, - "dns": { - "type": "string", - "description": "DNS API server address.\n" - }, - "dnsZone": { - "type": "string", - "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" - }, - "ipam": { - "type": "string", - "description": "IP Address Management system.\n" - }, - "mtu": { + "csnpInterval": { "type": "integer", - "description": "MTU value for the zone.\n" - }, - "nodes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" - }, - "pending": { - "type": "boolean", - "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" + "description": "The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n" }, - "reverseDns": { + "fabricId": { "type": "string", - "description": "Reverse DNS API server address.\n" + "description": "The unique identifier of the SDN fabric.\n" }, - "serviceVlan": { + "helloInterval": { "type": "integer", - "description": "Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n" - }, - "serviceVlanProtocol": { - "type": "string", - "description": "Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n" + "description": "The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n" }, - "state": { + "ip6Prefix": { "type": "string", - "description": "Indicates the current state of the zone.\n" + "description": "IPv6 prefix cidr for the fabric.\n" }, - "zoneId": { + "ipPrefix": { "type": "string", - "description": "The unique identifier of the SDN zone.\n" + "description": "IPv4 prefix cidr for the fabric.\n" } }, "type": "object" } }, - "proxmoxve:SDNZone/simple:Simple": { - "description": "Simple Zone in Proxmox SDN. It will create an isolated VNet bridge. This bridge is not linked to a physical interface, and VM traffic is only local on each the node. It can be used in NAT or routed setups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Simple(\"example\", {\n zoneId: \"simple1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Simple(\"example\",\n zone_id=\"simple1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Simple(\"example\", new()\n {\n ZoneId = \"simple1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewSimple(ctx, \"example\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"simple1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Simple(\"example\", SimpleArgs.builder()\n .zoneId(\"simple1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Simple\n properties:\n zoneId: simple1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSimple SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/simple:Simple example simple1\n```\n\n", + "proxmoxve:SDNZone/evpn:Evpn": { + "description": "EVPN Zone in Proxmox SDN. The EVPN zone creates a routable Layer 3 network, capable of spanning across multiple clusters.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Evpn(\"example\", {\n zoneId: \"evpn1\",\n nodes: [\"pve\"],\n controller: \"evpn-controller1\",\n vrfVxlan: 4000,\n advertiseSubnets: true,\n disableArpNdSuppression: false,\n exitNodes: [\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exitNodesLocalRouting: true,\n primaryExitNode: \"pve-exit1\",\n rtImport: \"65000:65000\",\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Evpn(\"example\",\n zone_id=\"evpn1\",\n nodes=[\"pve\"],\n controller=\"evpn-controller1\",\n vrf_vxlan=4000,\n advertise_subnets=True,\n disable_arp_nd_suppression=False,\n exit_nodes=[\n \"pve-exit1\",\n \"pve-exit2\",\n ],\n exit_nodes_local_routing=True,\n primary_exit_node=\"pve-exit1\",\n rt_import=\"65000:65000\",\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Evpn(\"example\", new()\n {\n ZoneId = \"evpn1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Controller = \"evpn-controller1\",\n VrfVxlan = 4000,\n AdvertiseSubnets = true,\n DisableArpNdSuppression = false,\n ExitNodes = new[]\n {\n \"pve-exit1\",\n \"pve-exit2\",\n },\n ExitNodesLocalRouting = true,\n PrimaryExitNode = \"pve-exit1\",\n RtImport = \"65000:65000\",\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewEvpn(ctx, \"example\", \u0026sdnzone.EvpnArgs{\n\t\t\tZoneId: pulumi.String(\"evpn1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tController: pulumi.String(\"evpn-controller1\"),\n\t\t\tVrfVxlan: pulumi.Int(4000),\n\t\t\tAdvertiseSubnets: pulumi.Bool(true),\n\t\t\tDisableArpNdSuppression: pulumi.Bool(false),\n\t\t\tExitNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve-exit1\"),\n\t\t\t\tpulumi.String(\"pve-exit2\"),\n\t\t\t},\n\t\t\tExitNodesLocalRouting: pulumi.Bool(true),\n\t\t\tPrimaryExitNode: pulumi.String(\"pve-exit1\"),\n\t\t\tRtImport: pulumi.String(\"65000:65000\"),\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Evpn;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.EvpnArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Evpn(\"example\", EvpnArgs.builder()\n .zoneId(\"evpn1\")\n .nodes(\"pve\")\n .controller(\"evpn-controller1\")\n .vrfVxlan(4000)\n .advertiseSubnets(true)\n .disableArpNdSuppression(false)\n .exitNodes( \n \"pve-exit1\",\n \"pve-exit2\")\n .exitNodesLocalRouting(true)\n .primaryExitNode(\"pve-exit1\")\n .rtImport(\"65000:65000\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Evpn\n properties:\n zoneId: evpn1\n nodes:\n - pve\n controller: evpn-controller1\n vrfVxlan: 4000 # Optional attributes\n advertiseSubnets: true\n disableArpNdSuppression: false\n exitNodes:\n - pve-exit1\n - pve-exit2\n exitNodesLocalRouting: true\n primaryExitNode: pve-exit1\n rtImport: 65000:65000\n mtu: 1450 # Generic optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nEVPN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/evpn:Evpn example evpn1\n```\n\n", "properties": { - "dhcp": { + "advertiseSubnets": { + "type": "boolean", + "description": "Enable subnet advertisement for EVPN.\n" + }, + "controller": { "type": "string", - "description": "The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n" + "description": "EVPN controller address.\n" + }, + "disableArpNdSuppression": { + "type": "boolean", + "description": "Disable ARP/ND suppression for EVPN.\n" }, "dns": { "type": "string", @@ -6866,13 +7876,24 @@ "type": "string", "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, + "exitNodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of exit nodes for EVPN.\n" + }, + "exitNodesLocalRouting": { + "type": "boolean", + "description": "Enable local routing for EVPN exit nodes.\n" + }, "ipam": { "type": "string", "description": "IP Address Management system.\n" }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -6885,29 +7906,56 @@ "type": "boolean", "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" }, + "primaryExitNode": { + "type": "string", + "description": "Primary exit node for EVPN.\n" + }, "reverseDns": { "type": "string", "description": "Reverse DNS API server address.\n" }, + "rtImport": { + "type": "string", + "description": "Route target import for EVPN.\n" + }, "state": { "type": "string", "description": "Indicates the current state of the zone.\n" }, + "vrfVxlan": { + "type": "integer", + "description": "VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n" + }, "zoneId": { "type": "string", "description": "The unique identifier of the SDN zone.\n" } }, "required": [ + "advertiseSubnets", + "controller", + "disableArpNdSuppression", + "exitNodes", + "exitNodesLocalRouting", "zoneId", + "mtu", "nodes", "pending", - "state" + "state", + "vrfVxlan" ], "inputProperties": { - "dhcp": { + "advertiseSubnets": { + "type": "boolean", + "description": "Enable subnet advertisement for EVPN.\n" + }, + "controller": { "type": "string", - "description": "The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n" + "description": "EVPN controller address.\n" + }, + "disableArpNdSuppression": { + "type": "boolean", + "description": "Disable ARP/ND suppression for EVPN.\n" }, "dns": { "type": "string", @@ -6917,13 +7965,24 @@ "type": "string", "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, + "exitNodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of exit nodes for EVPN.\n" + }, + "exitNodesLocalRouting": { + "type": "boolean", + "description": "Enable local routing for EVPN exit nodes.\n" + }, "ipam": { "type": "string", "description": "IP Address Management system.\n" }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -6932,24 +7991,46 @@ }, "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" }, + "primaryExitNode": { + "type": "string", + "description": "Primary exit node for EVPN.\n" + }, "reverseDns": { "type": "string", "description": "Reverse DNS API server address.\n" }, + "rtImport": { + "type": "string", + "description": "Route target import for EVPN.\n" + }, + "vrfVxlan": { + "type": "integer", + "description": "VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n" + }, "zoneId": { "type": "string", "description": "The unique identifier of the SDN zone.\n" } }, "requiredInputs": [ - "zoneId" + "controller", + "zoneId", + "vrfVxlan" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Simple resources.\n", + "description": "Input properties used for looking up and filtering Evpn resources.\n", "properties": { - "dhcp": { + "advertiseSubnets": { + "type": "boolean", + "description": "Enable subnet advertisement for EVPN.\n" + }, + "controller": { "type": "string", - "description": "The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n" + "description": "EVPN controller address.\n" + }, + "disableArpNdSuppression": { + "type": "boolean", + "description": "Disable ARP/ND suppression for EVPN.\n" }, "dns": { "type": "string", @@ -6959,13 +8040,24 @@ "type": "string", "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, + "exitNodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of exit nodes for EVPN.\n" + }, + "exitNodesLocalRouting": { + "type": "boolean", + "description": "Enable local routing for EVPN exit nodes.\n" + }, "ipam": { "type": "string", "description": "IP Address Management system.\n" }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -6978,14 +8070,26 @@ "type": "boolean", "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" }, + "primaryExitNode": { + "type": "string", + "description": "Primary exit node for EVPN.\n" + }, "reverseDns": { "type": "string", "description": "Reverse DNS API server address.\n" }, + "rtImport": { + "type": "string", + "description": "Route target import for EVPN.\n" + }, "state": { "type": "string", "description": "Indicates the current state of the zone.\n" }, + "vrfVxlan": { + "type": "integer", + "description": "VRF VXLAN-ID used for dedicated routing interconnect between VNets. It must be different than the VXLAN-ID of the VNets.\n" + }, "zoneId": { "type": "string", "description": "The unique identifier of the SDN zone.\n" @@ -6994,12 +8098,12 @@ "type": "object" } }, - "proxmoxve:SDNZone/vlan:Vlan": { - "description": "VLAN Zone in Proxmox SDN. It uses an existing local Linux or OVS bridge to connect to the node's physical interface. It uses VLAN tagging defined in the VNet to isolate the network segments. This allows connectivity of VMs between different nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vlan(\"example\", {\n zoneId: \"vlan1\",\n bridge: \"vmbr0\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vlan(\"example\",\n zone_id=\"vlan1\",\n bridge=\"vmbr0\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vlan(\"example\", new()\n {\n ZoneId = \"vlan1\",\n Bridge = \"vmbr0\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVlan(ctx, \"example\", \u0026sdnzone.VlanArgs{\n\t\t\tZoneId: pulumi.String(\"vlan1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vlan(\"example\", VlanArgs.builder()\n .zoneId(\"vlan1\")\n .bridge(\"vmbr0\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vlan\n properties:\n zoneId: vlan1\n bridge: vmbr0\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vlan:Vlan example vlan1\n```\n\n", + "proxmoxve:SDNZone/qinq:Qinq": { + "description": "QinQ Zone in Proxmox SDN. QinQ also known as VLAN stacking, that uses multiple layers of VLAN tags for isolation. The QinQ zone defines the outer VLAN tag (the Service VLAN) whereas the inner VLAN tag is defined by the VNet. Your physical network switches must support stacked VLANs for this configuration. Due to the double stacking of tags, you need 4 more bytes for QinQ VLANs. For example, you must reduce the MTU to 1496 if you physical interface MTU is 1500.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Qinq(\"example\", {\n zoneId: \"qinq1\",\n bridge: \"vmbr0\",\n serviceVlan: 100,\n serviceVlanProtocol: \"802.1ad\",\n mtu: 1496,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Qinq(\"example\",\n zone_id=\"qinq1\",\n bridge=\"vmbr0\",\n service_vlan=100,\n service_vlan_protocol=\"802.1ad\",\n mtu=1496,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Qinq(\"example\", new()\n {\n ZoneId = \"qinq1\",\n Bridge = \"vmbr0\",\n ServiceVlan = 100,\n ServiceVlanProtocol = \"802.1ad\",\n Mtu = 1496,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewQinq(ctx, \"example\", \u0026sdnzone.QinqArgs{\n\t\t\tZoneId: pulumi.String(\"qinq1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tServiceVlan: pulumi.Int(100),\n\t\t\tServiceVlanProtocol: pulumi.String(\"802.1ad\"),\n\t\t\tMtu: pulumi.Int(1496),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Qinq;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.QinqArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Qinq(\"example\", QinqArgs.builder()\n .zoneId(\"qinq1\")\n .bridge(\"vmbr0\")\n .serviceVlan(100)\n .serviceVlanProtocol(\"802.1ad\")\n .mtu(1496)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Qinq\n properties:\n zoneId: qinq1\n bridge: vmbr0\n serviceVlan: 100\n serviceVlanProtocol: 802.1ad\n mtu: 1496 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nQinQ SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/qinq:Qinq example qinq1\n```\n\n", "properties": { "bridge": { "type": "string", - "description": "The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n" + "description": "A local, VLAN-aware bridge that is already configured on each local node\n" }, "dns": { "type": "string", @@ -7015,7 +8119,7 @@ }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -7032,6 +8136,14 @@ "type": "string", "description": "Reverse DNS API server address.\n" }, + "serviceVlan": { + "type": "integer", + "description": "Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n" + }, + "serviceVlanProtocol": { + "type": "string", + "description": "Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n" + }, "state": { "type": "string", "description": "Indicates the current state of the zone.\n" @@ -7044,14 +8156,17 @@ "required": [ "bridge", "zoneId", + "mtu", "nodes", "pending", + "serviceVlan", + "serviceVlanProtocol", "state" ], "inputProperties": { "bridge": { "type": "string", - "description": "The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n" + "description": "A local, VLAN-aware bridge that is already configured on each local node\n" }, "dns": { "type": "string", @@ -7067,7 +8182,7 @@ }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -7080,6 +8195,14 @@ "type": "string", "description": "Reverse DNS API server address.\n" }, + "serviceVlan": { + "type": "integer", + "description": "Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n" + }, + "serviceVlanProtocol": { + "type": "string", + "description": "Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n" + }, "zoneId": { "type": "string", "description": "The unique identifier of the SDN zone.\n" @@ -7087,14 +8210,15 @@ }, "requiredInputs": [ "bridge", - "zoneId" + "zoneId", + "serviceVlan" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Vlan resources.\n", + "description": "Input properties used for looking up and filtering Qinq resources.\n", "properties": { "bridge": { "type": "string", - "description": "The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n" + "description": "A local, VLAN-aware bridge that is already configured on each local node\n" }, "dns": { "type": "string", @@ -7110,7 +8234,7 @@ }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -7127,6 +8251,14 @@ "type": "string", "description": "Reverse DNS API server address.\n" }, + "serviceVlan": { + "type": "integer", + "description": "Service VLAN tag for QinQ. The tag must be between \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`4094`\" pulumi-lang-dotnet=\"`4094`\" pulumi-lang-go=\"`4094`\" pulumi-lang-python=\"`4094`\" pulumi-lang-yaml=\"`4094`\" pulumi-lang-java=\"`4094`\"\u003e`4094`\u003c/span\u003e.\n" + }, + "serviceVlanProtocol": { + "type": "string", + "description": "Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`.\n" + }, "state": { "type": "string", "description": "Indicates the current state of the zone.\n" @@ -7139,9 +8271,13 @@ "type": "object" } }, - "proxmoxve:SDNZone/vxlan:Vxlan": { - "description": "VXLAN Zone in Proxmox SDN. It establishes a tunnel (overlay) on top of an existing network (underlay). This encapsulates layer 2 Ethernet frames within layer 4 UDP datagrams using the default destination port 4789. You have to configure the underlay network yourself to enable UDP connectivity between all peers. Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes lower than the outgoing physical interface.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vxlan(\"example\", {\n zoneId: \"vxlan1\",\n peers: [\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vxlan(\"example\",\n zone_id=\"vxlan1\",\n peers=[\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vxlan(\"example\", new()\n {\n ZoneId = \"vxlan1\",\n Peers = new[]\n {\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n },\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVxlan(ctx, \"example\", \u0026sdnzone.VxlanArgs{\n\t\t\tZoneId: pulumi.String(\"vxlan1\"),\n\t\t\tPeers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.0.0.1\"),\n\t\t\t\tpulumi.String(\"10.0.0.2\"),\n\t\t\t\tpulumi.String(\"10.0.0.3\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vxlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VxlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vxlan(\"example\", VxlanArgs.builder()\n .zoneId(\"vxlan1\")\n .peers( \n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vxlan\n properties:\n zoneId: vxlan1\n peers:\n - 10.0.0.1\n - 10.0.0.2\n - 10.0.0.3\n mtu: 1450 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVXLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vxlan:Vxlan example vxlan1\n```\n\n", + "proxmoxve:SDNZone/simple:Simple": { + "description": "Simple Zone in Proxmox SDN. It will create an isolated VNet bridge. This bridge is not linked to a physical interface, and VM traffic is only local on each the node. It can be used in NAT or routed setups.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Simple(\"example\", {\n zoneId: \"simple1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Simple(\"example\",\n zone_id=\"simple1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Simple(\"example\", new()\n {\n ZoneId = \"simple1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewSimple(ctx, \"example\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"simple1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Simple(\"example\", SimpleArgs.builder()\n .zoneId(\"simple1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Simple\n properties:\n zoneId: simple1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSimple SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/simple:Simple example simple1\n```\n\n", "properties": { + "dhcp": { + "type": "string", + "description": "The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n" + }, "dns": { "type": "string", "description": "DNS API server address.\n" @@ -7156,7 +8292,7 @@ }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -7165,13 +8301,6 @@ }, "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n" - }, "pending": { "type": "boolean", "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" @@ -7191,12 +8320,16 @@ }, "required": [ "zoneId", + "mtu", "nodes", - "peers", "pending", "state" ], "inputProperties": { + "dhcp": { + "type": "string", + "description": "The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n" + }, "dns": { "type": "string", "description": "DNS API server address.\n" @@ -7211,7 +8344,7 @@ }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -7220,13 +8353,6 @@ }, "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n" - }, "reverseDns": { "type": "string", "description": "Reverse DNS API server address.\n" @@ -7237,12 +8363,15 @@ } }, "requiredInputs": [ - "zoneId", - "peers" + "zoneId" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Vxlan resources.\n", + "description": "Input properties used for looking up and filtering Simple resources.\n", "properties": { + "dhcp": { + "type": "string", + "description": "The type of the DHCP backend for this zone. Currently the only supported value is \u003cspan pulumi-lang-nodejs=\"`dnsmasq`\" pulumi-lang-dotnet=\"`Dnsmasq`\" pulumi-lang-go=\"`dnsmasq`\" pulumi-lang-python=\"`dnsmasq`\" pulumi-lang-yaml=\"`dnsmasq`\" pulumi-lang-java=\"`dnsmasq`\"\u003e`dnsmasq`\u003c/span\u003e.\n" + }, "dns": { "type": "string", "description": "DNS API server address.\n" @@ -7257,7 +8386,7 @@ }, "mtu": { "type": "integer", - "description": "MTU value for the zone.\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, "nodes": { "type": "array", @@ -7266,13 +8395,6 @@ }, "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n" - }, "pending": { "type": "boolean", "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" @@ -7293,409 +8415,2039 @@ "type": "object" } }, - "proxmoxve:Sdn/applier:Applier": { - "description": "**EXPERIMENTAL** Triggers Proxmox's SDN **Apply** (equivalent to `PUT /cluster/sdn`).Intended to be used with \u003cspan pulumi-lang-nodejs=\"`replaceTriggeredBy`\" pulumi-lang-dotnet=\"`ReplaceTriggeredBy`\" pulumi-lang-go=\"`replaceTriggeredBy`\" pulumi-lang-python=\"`replace_triggered_by`\" pulumi-lang-yaml=\"`replaceTriggeredBy`\" pulumi-lang-java=\"`replaceTriggeredBy`\"\u003e`replace_triggered_by`\u003c/span\u003e so it runs after SDN objects change.\n\n", + "proxmoxve:SDNZone/vlan:Vlan": { + "description": "VLAN Zone in Proxmox SDN. It uses an existing local Linux or OVS bridge to connect to the node's physical interface. It uses VLAN tagging defined in the VNet to isolate the network segments. This allows connectivity of VMs between different nodes.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vlan(\"example\", {\n zoneId: \"vlan1\",\n bridge: \"vmbr0\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vlan(\"example\",\n zone_id=\"vlan1\",\n bridge=\"vmbr0\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vlan(\"example\", new()\n {\n ZoneId = \"vlan1\",\n Bridge = \"vmbr0\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVlan(ctx, \"example\", \u0026sdnzone.VlanArgs{\n\t\t\tZoneId: pulumi.String(\"vlan1\"),\n\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vlan(\"example\", VlanArgs.builder()\n .zoneId(\"vlan1\")\n .bridge(\"vmbr0\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vlan\n properties:\n zoneId: vlan1\n bridge: vmbr0\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vlan:Vlan example vlan1\n```\n\n", "properties": { - "onCreate": { - "type": "boolean", - "description": "Whether to apply SDN configuration on resource creation. Defaults to true.\n" - }, - "onDestroy": { - "type": "boolean", - "description": "Whether to apply SDN configuration on resource destruction. Defaults to true.\n" - } - }, - "required": [ - "onCreate", - "onDestroy" - ], - "inputProperties": { - "onCreate": { - "type": "boolean", - "description": "Whether to apply SDN configuration on resource creation. Defaults to true.\n" + "bridge": { + "type": "string", + "description": "The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n" }, - "onDestroy": { - "type": "boolean", - "description": "Whether to apply SDN configuration on resource destruction. Defaults to true.\n" - } - }, - "stateInputs": { - "description": "Input properties used for looking up and filtering Applier resources.\n", - "properties": { - "onCreate": { - "type": "boolean", - "description": "Whether to apply SDN configuration on resource creation. Defaults to true.\n" - }, - "onDestroy": { - "type": "boolean", - "description": "Whether to apply SDN configuration on resource destruction. Defaults to true.\n" - } + "dns": { + "type": "string", + "description": "DNS API server address.\n" }, - "type": "object" - } - }, - "proxmoxve:Sdn/subnet:Subnet": { - "description": "Manages SDN Subnets in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n nodes: [\"pve\"],\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - Basic vnet\nconst exampleVnet1 = new proxmoxve.sdn.Vnet(\"example_vnet_1\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - VNet with alias and port isolation\nconst exampleVnet2 = new proxmoxve.sdn.Vnet(\"example_vnet_2\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Example VNet 2\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// Basic Subnet\nconst basicSubnet = new proxmoxve.sdn.Subnet(\"basic_subnet\", {\n cidr: \"192.168.1.0/24\",\n vnet: exampleVnet1.vnetId,\n gateway: \"192.168.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// Subnet with DHCP Configuration\nconst dhcpSubnet = new proxmoxve.sdn.Subnet(\"dhcp_subnet\", {\n cidr: \"192.168.2.0/24\",\n vnet: exampleVnet2.vnetId,\n gateway: \"192.168.2.1\",\n dhcpDnsServer: \"192.168.2.53\",\n dnsZonePrefix: \"internal.example.com\",\n snat: true,\n dhcpRange: {\n startAddress: \"192.168.2.10\",\n endAddress: \"192.168.2.100\",\n },\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst subnetApplier = new proxmoxve.sdn.Applier(\"subnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n nodes=[\"pve\"],\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - Basic vnet\nexample_vnet1 = proxmoxve.sdn.Vnet(\"example_vnet_1\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - VNet with alias and port isolation\nexample_vnet2 = proxmoxve.sdn.Vnet(\"example_vnet_2\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Example VNet 2\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic Subnet\nbasic_subnet = proxmoxve.sdn.Subnet(\"basic_subnet\",\n cidr=\"192.168.1.0/24\",\n vnet=example_vnet1.vnet_id,\n gateway=\"192.168.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Subnet with DHCP Configuration\ndhcp_subnet = proxmoxve.sdn.Subnet(\"dhcp_subnet\",\n cidr=\"192.168.2.0/24\",\n vnet=example_vnet2.vnet_id,\n gateway=\"192.168.2.1\",\n dhcp_dns_server=\"192.168.2.53\",\n dns_zone_prefix=\"internal.example.com\",\n snat=True,\n dhcp_range={\n \"start_address\": \"192.168.2.10\",\n \"end_address\": \"192.168.2.100\",\n },\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nsubnet_applier = proxmoxve.sdn.Applier(\"subnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n example_vnet1,\n example_vnet2,\n basic_subnet,\n dhcp_subnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_1\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_2\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Example VNet 2\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic Subnet\n var basicSubnet = new ProxmoxVE.Sdn.Subnet(\"basic_subnet\", new()\n {\n Cidr = \"192.168.1.0/24\",\n Vnet = exampleVnet1.VnetId,\n Gateway = \"192.168.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new ProxmoxVE.Sdn.Subnet(\"dhcp_subnet\", new()\n {\n Cidr = \"192.168.2.0/24\",\n Vnet = exampleVnet2.VnetId,\n Gateway = \"192.168.2.1\",\n DhcpDnsServer = \"192.168.2.53\",\n DnsZonePrefix = \"internal.example.com\",\n Snat = true,\n DhcpRange = new ProxmoxVE.Sdn.Inputs.SubnetDhcpRangeArgs\n {\n StartAddress = \"192.168.2.10\",\n EndAddress = \"192.168.2.100\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var subnetApplier = new ProxmoxVE.Sdn.Applier(\"subnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - Basic vnet\n\t\texampleVnet1, err := sdn.NewVnet(ctx, \"example_vnet_1\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - VNet with alias and port isolation\n\t\texampleVnet2, err := sdn.NewVnet(ctx, \"example_vnet_2\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Example VNet 2\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic Subnet\n\t\tbasicSubnet, err := sdn.NewSubnet(ctx, \"basic_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.1.0/24\"),\n\t\t\tVnet: exampleVnet1.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Subnet with DHCP Configuration\n\t\tdhcpSubnet, err := sdn.NewSubnet(ctx, \"dhcp_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.2.0/24\"),\n\t\t\tVnet: exampleVnet2.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.2.1\"),\n\t\t\tDhcpDnsServer: pulumi.String(\"192.168.2.53\"),\n\t\t\tDnsZonePrefix: pulumi.String(\"internal.example.com\"),\n\t\t\tSnat: pulumi.Bool(true),\n\t\t\tDhcpRange: \u0026sdn.SubnetDhcpRangeArgs{\n\t\t\t\tStartAddress: pulumi.String(\"192.168.2.10\"),\n\t\t\t\tEndAddress: pulumi.String(\"192.168.2.100\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"subnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\texampleVnet1,\n\t\t\texampleVnet2,\n\t\t\tbasicSubnet,\n\t\t\tdhcpSubnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Subnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.SubnetArgs;\nimport com.pulumi.proxmoxve.Sdn.inputs.SubnetDhcpRangeArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .nodes(\"pve\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new Vnet(\"exampleVnet1\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new Vnet(\"exampleVnet2\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Example VNet 2\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic Subnet\n var basicSubnet = new Subnet(\"basicSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.1.0/24\")\n .vnet(exampleVnet1.vnetId())\n .gateway(\"192.168.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new Subnet(\"dhcpSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.2.0/24\")\n .vnet(exampleVnet2.vnetId())\n .gateway(\"192.168.2.1\")\n .dhcpDnsServer(\"192.168.2.53\")\n .dnsZonePrefix(\"internal.example.com\")\n .snat(true)\n .dhcpRange(SubnetDhcpRangeArgs.builder()\n .startAddress(\"192.168.2.10\")\n .endAddress(\"192.168.2.100\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var subnetApplier = new Applier(\"subnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n nodes:\n - pve\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - Basic vnet\n exampleVnet1:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_1\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - VNet with alias and port isolation\n exampleVnet2:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_2\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Example VNet 2\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # Basic Subnet\n basicSubnet:\n type: proxmoxve:Sdn:Subnet\n name: basic_subnet\n properties:\n cidr: 192.168.1.0/24\n vnet: ${exampleVnet1.vnetId}\n gateway: 192.168.1.1\n options:\n dependsOn:\n - ${finalizer}\n # Subnet with DHCP Configuration\n dhcpSubnet:\n type: proxmoxve:Sdn:Subnet\n name: dhcp_subnet\n properties:\n cidr: 192.168.2.0/24\n vnet: ${exampleVnet2.vnetId}\n gateway: 192.168.2.1\n dhcpDnsServer: 192.168.2.53\n dnsZonePrefix: internal.example.com\n snat: true\n dhcpRange:\n startAddress: 192.168.2.10\n endAddress: 192.168.2.100\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n subnetApplier:\n type: proxmoxve:Sdn:Applier\n name: subnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${exampleVnet1}\n - ${exampleVnet2}\n - ${basicSubnet}\n - ${dhcpSubnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN subnet can be imported using its unique identifier in the format: \u003cvnet\u003e/\u003csubnet-id\u003e\n\nThe \u003csubnet-id\u003e is the canonical ID from Proxmox, e.g., \"zone1-192.168.1.0-24\"\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet basic_subnet vnet1/zone1-192.168.1.0-24\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet dhcp_subnet vnet2/zone2-192.168.2.0-24\n```\n\n", - "properties": { - "cidr": { + "dnsZone": { "type": "string", - "description": "A CIDR network address, for example 10.0.0.0/8\n" + "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, - "dhcpDnsServer": { + "ipam": { "type": "string", - "description": "The DNS server used for DHCP.\n" + "description": "IP Address Management system.\n" }, - "dhcpRange": { - "$ref": "#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange", - "description": "DHCP range (start and end IPs).\n" + "mtu": { + "type": "integer", + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, - "dnsZonePrefix": { - "type": "string", - "description": "Prefix used for DNS zone delegation.\n" + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" }, - "gateway": { + "pending": { + "type": "boolean", + "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" + }, + "reverseDns": { "type": "string", - "description": "The gateway address for the subnet.\n" + "description": "Reverse DNS API server address.\n" }, - "snat": { - "type": "boolean", - "description": "Whether SNAT is enabled for the subnet.\n" + "state": { + "type": "string", + "description": "Indicates the current state of the zone.\n" }, - "vnet": { + "zoneId": { "type": "string", - "description": "The VNet to which this subnet belongs.\n" + "description": "The unique identifier of the SDN zone.\n" } }, "required": [ - "cidr", - "vnet" + "bridge", + "zoneId", + "mtu", + "nodes", + "pending", + "state" ], "inputProperties": { - "cidr": { + "bridge": { "type": "string", - "description": "A CIDR network address, for example 10.0.0.0/8\n" + "description": "The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n" }, - "dhcpDnsServer": { + "dns": { "type": "string", - "description": "The DNS server used for DHCP.\n" - }, - "dhcpRange": { - "$ref": "#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange", - "description": "DHCP range (start and end IPs).\n" + "description": "DNS API server address.\n" }, - "dnsZonePrefix": { + "dnsZone": { "type": "string", - "description": "Prefix used for DNS zone delegation.\n" + "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, - "gateway": { + "ipam": { "type": "string", - "description": "The gateway address for the subnet.\n" + "description": "IP Address Management system.\n" }, - "snat": { - "type": "boolean", - "description": "Whether SNAT is enabled for the subnet.\n" + "mtu": { + "type": "integer", + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, - "vnet": { + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + }, + "reverseDns": { "type": "string", - "description": "The VNet to which this subnet belongs.\n" + "description": "Reverse DNS API server address.\n" + }, + "zoneId": { + "type": "string", + "description": "The unique identifier of the SDN zone.\n" } }, "requiredInputs": [ - "cidr", - "vnet" + "bridge", + "zoneId" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Subnet resources.\n", + "description": "Input properties used for looking up and filtering Vlan resources.\n", "properties": { - "cidr": { + "bridge": { "type": "string", - "description": "A CIDR network address, for example 10.0.0.0/8\n" + "description": "The local bridge or OVS switch, already configured on *each* node that allows node-to-node connection.\n" }, - "dhcpDnsServer": { + "dns": { "type": "string", - "description": "The DNS server used for DHCP.\n" - }, - "dhcpRange": { - "$ref": "#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange", - "description": "DHCP range (start and end IPs).\n" + "description": "DNS API server address.\n" }, - "dnsZonePrefix": { + "dnsZone": { "type": "string", - "description": "Prefix used for DNS zone delegation.\n" + "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, - "gateway": { + "ipam": { "type": "string", - "description": "The gateway address for the subnet.\n" + "description": "IP Address Management system.\n" }, - "snat": { - "type": "boolean", - "description": "Whether SNAT is enabled for the subnet.\n" + "mtu": { + "type": "integer", + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, - "vnet": { - "type": "string", - "description": "The VNet to which this subnet belongs.\n" + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + }, + "pending": { + "type": "boolean", + "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" + }, + "reverseDns": { + "type": "string", + "description": "Reverse DNS API server address.\n" + }, + "state": { + "type": "string", + "description": "Indicates the current state of the zone.\n" + }, + "zoneId": { + "type": "string", + "description": "The unique identifier of the SDN zone.\n" } }, "type": "object" } }, - "proxmoxve:Sdn/vnet:Vnet": { - "description": "Manages Proxmox VE SDN VNet.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// Basic VNet (Simple)\nconst basicVnet = new proxmoxve.sdn.Vnet(\"basic_vnet\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// VNet with Alias and Port Isolation\nconst isolatedVnet = new proxmoxve.sdn.Vnet(\"isolated_vnet\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Isolated VNet\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst vnetApplier = new proxmoxve.sdn.Applier(\"vnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic VNet (Simple)\nbasic_vnet = proxmoxve.sdn.Vnet(\"basic_vnet\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# VNet with Alias and Port Isolation\nisolated_vnet = proxmoxve.sdn.Vnet(\"isolated_vnet\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Isolated VNet\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nvnet_applier = proxmoxve.sdn.Applier(\"vnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n basic_vnet,\n isolated_vnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic VNet (Simple)\n var basicVnet = new ProxmoxVE.Sdn.Vnet(\"basic_vnet\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new ProxmoxVE.Sdn.Vnet(\"isolated_vnet\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Isolated VNet\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var vnetApplier = new ProxmoxVE.Sdn.Applier(\"vnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic VNet (Simple)\n\t\tbasicVnet, err := sdn.NewVnet(ctx, \"basic_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// VNet with Alias and Port Isolation\n\t\tisolatedVnet, err := sdn.NewVnet(ctx, \"isolated_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Isolated VNet\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"vnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\tbasicVnet,\n\t\t\tisolatedVnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic VNet (Simple)\n var basicVnet = new Vnet(\"basicVnet\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new Vnet(\"isolatedVnet\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Isolated VNet\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var vnetApplier = new Applier(\"vnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # Basic VNet (Simple)\n basicVnet:\n type: proxmoxve:Sdn:Vnet\n name: basic_vnet\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # VNet with Alias and Port Isolation\n isolatedVnet:\n type: proxmoxve:Sdn:Vnet\n name: isolated_vnet\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Isolated VNet\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n vnetApplier:\n type: proxmoxve:Sdn:Applier\n name: vnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${basicVnet}\n - ${isolatedVnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN vnet can be imported using its unique identifier (vnet ID)\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet basic_vnet vnet1\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet isolated_vnet vnet2\n```\n\n", + "proxmoxve:SDNZone/vxlan:Vxlan": { + "description": "VXLAN Zone in Proxmox SDN. It establishes a tunnel (overlay) on top of an existing network (underlay). This encapsulates layer 2 Ethernet frames within layer 4 UDP datagrams using the default destination port 4789. You have to configure the underlay network yourself to enable UDP connectivity between all peers. Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes lower than the outgoing physical interface.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.sdnzone.Vxlan(\"example\", {\n zoneId: \"vxlan1\",\n peers: [\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu: 1450,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.sdnzone.Vxlan(\"example\",\n zone_id=\"vxlan1\",\n peers=[\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n ],\n mtu=1450,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.SDNZone.Vxlan(\"example\", new()\n {\n ZoneId = \"vxlan1\",\n Peers = new[]\n {\n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\",\n },\n Mtu = 1450,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdnzone.NewVxlan(ctx, \"example\", \u0026sdnzone.VxlanArgs{\n\t\t\tZoneId: pulumi.String(\"vxlan1\"),\n\t\t\tPeers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.0.0.1\"),\n\t\t\t\tpulumi.String(\"10.0.0.2\"),\n\t\t\t\tpulumi.String(\"10.0.0.3\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1450),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Vxlan;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.VxlanArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Vxlan(\"example\", VxlanArgs.builder()\n .zoneId(\"vxlan1\")\n .peers( \n \"10.0.0.1\",\n \"10.0.0.2\",\n \"10.0.0.3\")\n .mtu(1450)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:SDNZone:Vxlan\n properties:\n zoneId: vxlan1\n peers:\n - 10.0.0.1\n - 10.0.0.2\n - 10.0.0.3\n mtu: 1450 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nVXLAN SDN zone can be imported using its unique identifier (zone ID)\n\n```sh\n$ pulumi import proxmoxve:SDNZone/vxlan:Vxlan example vxlan1\n```\n\n", "properties": { - "alias": { + "dns": { "type": "string", - "description": "An optional alias for this VNet.\n" + "description": "DNS API server address.\n" }, - "isolatePorts": { - "type": "boolean", - "description": "Isolate ports within this VNet.\n" + "dnsZone": { + "type": "string", + "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, - "tag": { + "ipam": { + "type": "string", + "description": "IP Address Management system.\n" + }, + "mtu": { "type": "integer", - "description": "Tag value for VLAN/VXLAN (can't be used with other zone types).\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, - "vlanAware": { + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + }, + "peers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n" + }, + "pending": { "type": "boolean", - "description": "Allow VM VLANs to pass through this VNet.\n" + "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" }, - "vnetId": { + "reverseDns": { "type": "string", - "description": "The unique identifier of the SDN VNet.\n" + "description": "Reverse DNS API server address.\n" }, - "zone": { + "state": { "type": "string", - "description": "The zone to which this VNet belongs.\n" + "description": "Indicates the current state of the zone.\n" + }, + "zoneId": { + "type": "string", + "description": "The unique identifier of the SDN zone.\n" } }, "required": [ - "vnetId", - "zone" + "zoneId", + "mtu", + "nodes", + "peers", + "pending", + "state" ], "inputProperties": { - "alias": { + "dns": { "type": "string", - "description": "An optional alias for this VNet.\n" + "description": "DNS API server address.\n" }, - "isolatePorts": { - "type": "boolean", - "description": "Isolate ports within this VNet.\n" + "dnsZone": { + "type": "string", + "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, - "tag": { + "ipam": { + "type": "string", + "description": "IP Address Management system.\n" + }, + "mtu": { "type": "integer", - "description": "Tag value for VLAN/VXLAN (can't be used with other zone types).\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, - "vlanAware": { - "type": "boolean", - "description": "Allow VM VLANs to pass through this VNet.\n" + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" }, - "vnetId": { + "peers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n" + }, + "reverseDns": { "type": "string", - "description": "The unique identifier of the SDN VNet.\n" + "description": "Reverse DNS API server address.\n" }, - "zone": { + "zoneId": { "type": "string", - "description": "The zone to which this VNet belongs.\n" + "description": "The unique identifier of the SDN zone.\n" } }, "requiredInputs": [ - "vnetId", - "zone" + "zoneId", + "peers" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Vnet resources.\n", + "description": "Input properties used for looking up and filtering Vxlan resources.\n", "properties": { - "alias": { + "dns": { "type": "string", - "description": "An optional alias for this VNet.\n" + "description": "DNS API server address.\n" }, - "isolatePorts": { - "type": "boolean", - "description": "Isolate ports within this VNet.\n" + "dnsZone": { + "type": "string", + "description": "DNS domain name. Used to register hostnames, such as `\u003chostname\u003e.\u003cdomain\u003e`. The DNS zone must already exist on the DNS server.\n" }, - "tag": { + "ipam": { + "type": "string", + "description": "IP Address Management system.\n" + }, + "mtu": { "type": "integer", - "description": "Tag value for VLAN/VXLAN (can't be used with other zone types).\n" + "description": "MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.\n" }, - "vlanAware": { + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Proxmox nodes which the zone and associated VNets should be deployed on\n" + }, + "peers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here\n" + }, + "pending": { "type": "boolean", - "description": "Allow VM VLANs to pass through this VNet.\n" + "description": "Indicates if the zone has pending configuration changes that need to be applied.\n" }, - "vnetId": { + "reverseDns": { "type": "string", - "description": "The unique identifier of the SDN VNet.\n" + "description": "Reverse DNS API server address.\n" }, - "zone": { + "state": { "type": "string", - "description": "The zone to which this VNet belongs.\n" + "description": "Indicates the current state of the zone.\n" + }, + "zoneId": { + "type": "string", + "description": "The unique identifier of the SDN zone.\n" } }, "type": "object" } }, - "proxmoxve:Storage/file:File": { - "description": "Use this resource to upload files to a Proxmox VE node. The file can be a backup, an ISO image, a Disk Image, a snippet, or a container template depending on the \u003cspan pulumi-lang-nodejs=\"`contentType`\" pulumi-lang-dotnet=\"`ContentType`\" pulumi-lang-go=\"`contentType`\" pulumi-lang-python=\"`content_type`\" pulumi-lang-yaml=\"`contentType`\" pulumi-lang-java=\"`contentType`\"\u003e`content_type`\u003c/span\u003e attribute.\n\n## Example Usage\n\n### Backups (\u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e)\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003e The provider currently does not support restoring backups. You can use the Proxmox VE web interface or the \u003cspan pulumi-lang-nodejs=\"`qmrestore`\" pulumi-lang-dotnet=\"`Qmrestore`\" pulumi-lang-go=\"`qmrestore`\" pulumi-lang-python=\"`qmrestore`\" pulumi-lang-yaml=\"`qmrestore`\" pulumi-lang-java=\"`qmrestore`\"\u003e`qmrestore`\u003c/span\u003e / `pct restore` command to restore VM / Container from a backup.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst backup = new proxmoxve.storage.File(\"backup\", {\n contentType: \"backup\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nbackup = proxmoxve.storage.File(\"backup\",\n content_type=\"backup\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup = new ProxmoxVE.Storage.File(\"backup\", new()\n {\n ContentType = \"backup\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"backup\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"backup\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var backup = new File(\"backup\", FileArgs.builder()\n .contentType(\"backup\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup:\n type: proxmoxve:Storage:File\n properties:\n contentType: backup\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Images\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003e Importing Disks is not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource with \u003cspan pulumi-lang-nodejs=\"`contentType \" pulumi-lang-dotnet=\"`ContentType \" pulumi-lang-go=\"`contentType \" pulumi-lang-python=\"`content_type \" pulumi-lang-yaml=\"`contentType \" pulumi-lang-java=\"`contentType \"\u003e`content_type \u003c/span\u003e= \"import\"`.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"import\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"import\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: import\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Snippets\n\n\u003e Snippets are not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource.\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as std from \"@pulumi/std\";\n\nconst cloudConfig = new proxmoxve.storage.File(\"cloud_config\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceRaw: {\n data: std.trimspace({\n input: example.publicKeyOpenssh,\n }).then(invoke =\u003e `#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - ${invoke.result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n`),\n fileName: \"example.cloud-config.yaml\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_std as std\n\ncloud_config = proxmoxve.storage.File(\"cloud_config\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_raw={\n \"data\": f\"\"\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {std.trimspace(input=example[\"publicKeyOpenssh\"]).result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"\"\",\n \"file_name\": \"example.cloud-config.yaml\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudConfig = new ProxmoxVE.Storage.File(\"cloud_config\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = Std.Trimspace.Invoke(new()\n {\n Input = example.PublicKeyOpenssh,\n }).Apply(invoke =\u003e @$\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {invoke.Result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"),\n FileName = \"example.cloud-config.yaml\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinvokeTrimspace, err := std.Trimspace(ctx, \u0026std.TrimspaceArgs{\n\t\t\tInput: example.PublicKeyOpenssh,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewFile(ctx, \"cloud_config\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.Sprintf(`#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %v\n sudo: ALL=(ALL) NOPASSWD:ALL\n`, invokeTrimspace.Result),\n\t\t\t\tFileName: pulumi.String(\"example.cloud-config.yaml\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudConfig = new File(\"cloudConfig\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %s\n sudo: ALL=(ALL) NOPASSWD:ALL\n\", StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(example.publicKeyOpenssh())\n .build()).result()))\n .fileName(\"example.cloud-config.yaml\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudConfig:\n type: proxmoxve:Storage:File\n name: cloud_config\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n sourceRaw:\n data:\n fn::join:\n - \"\"\n - - \"#cloud-config\\nchpasswd:\\n list: |\\n ubuntu:example\\n expire: false\\nhostname: example-hostname\\npackages:\\n - qemu-guest-agent\\nusers:\\n - default\\n - name: ubuntu\\n groups: sudo\\n shell: /bin/bash\\n ssh-authorized-keys:\\n - \"\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${example.publicKeyOpenssh}\n return: result\n - |2\n sudo: ALL=(ALL) NOPASSWD:ALL\n fileName: example.cloud-config.yaml\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nThe \u003cspan pulumi-lang-nodejs=\"`fileMode`\" pulumi-lang-dotnet=\"`FileMode`\" pulumi-lang-go=\"`fileMode`\" pulumi-lang-python=\"`file_mode`\" pulumi-lang-yaml=\"`fileMode`\" pulumi-lang-java=\"`fileMode`\"\u003e`file_mode`\u003c/span\u003e attribute can be used to make a script file executable, e.g. when referencing the file in the \u003cspan pulumi-lang-nodejs=\"`hookScriptFileId`\" pulumi-lang-dotnet=\"`HookScriptFileId`\" pulumi-lang-go=\"`hookScriptFileId`\" pulumi-lang-python=\"`hook_script_file_id`\" pulumi-lang-yaml=\"`hookScriptFileId`\" pulumi-lang-java=\"`hookScriptFileId`\"\u003e`hook_script_file_id`\u003c/span\u003e attribute of a container or a VM resource which is a requirement enforced by the Proxmox VE API.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst hookScript = new proxmoxve.storage.File(\"hook_script\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n fileMode: \"0700\",\n sourceRaw: {\n data: `#!/usr/bin/env bash\n\necho \\\\\"Running hook script\\\\\"\n`,\n fileName: \"prepare-hook.sh\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nhook_script = proxmoxve.storage.File(\"hook_script\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n file_mode=\"0700\",\n source_raw={\n \"data\": \"\"\"#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n\"\"\",\n \"file_name\": \"prepare-hook.sh\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hookScript = new ProxmoxVE.Storage.File(\"hook_script\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n FileMode = \"0700\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = @\"#!/usr/bin/env bash\n\necho \\\"\"Running hook script\\\"\"\n\",\n FileName = \"prepare-hook.sh\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"hook_script\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tFileMode: pulumi.String(\"0700\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.String(\"#!/usr/bin/env bash\\n\\necho \\\\\\\"Running hook script\\\\\\\"\\n\"),\n\t\t\t\tFileName: pulumi.String(\"prepare-hook.sh\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hookScript = new File(\"hookScript\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .fileMode(\"0700\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n \"\"\")\n .fileName(\"prepare-hook.sh\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hookScript:\n type: proxmoxve:Storage:File\n name: hook_script\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n fileMode: '0700'\n sourceRaw:\n data: |\n #!/usr/bin/env bash\n\n echo \\\"Running hook script\\\"\n fileName: prepare-hook.sh\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Container Template (\u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e)\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for container images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n sourceFile: {\n path: \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n source_file={\n \"path\": \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n sourceFile:\n path: http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nThe Proxmox VE API endpoint for file uploads does not support chunked transfer\nencoding, which means that we must first store the source file as a temporary\nfile locally before uploading it.\n\nYou must ensure that you have at least `Size-in-MB * 2 + 1` MB of storage space\navailable (twice the size plus overhead because a multipart payload needs to be\ncreated as another temporary file).\n\nBy default, if the specified file already exists, the resource will\nunconditionally replace it and take ownership of the resource. On destruction,\nthe file will be deleted as if it did not exist before. If you want to prevent\nthe resource from replacing the file, set \u003cspan pulumi-lang-nodejs=\"`overwrite`\" pulumi-lang-dotnet=\"`Overwrite`\" pulumi-lang-go=\"`overwrite`\" pulumi-lang-python=\"`overwrite`\" pulumi-lang-yaml=\"`overwrite`\" pulumi-lang-java=\"`overwrite`\"\u003e`overwrite`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n\n## Import\n\nInstances can be imported using the `node_name`, `datastore_id`, `content_type`\n\nand the `file_name` in the following format:\n\ntext\n\nnode_name:datastore_id/content_type/file_name\n\nExample:\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Storage/file:File cloud_config pve/local:snippets/example.cloud-config.yaml\n```\n\n", + "proxmoxve:Sdn/applier:Applier": { + "description": "**EXPERIMENTAL** Triggers Proxmox's SDN **Apply** (equivalent to `PUT /cluster/sdn`).Intended to be used with \u003cspan pulumi-lang-nodejs=\"`replaceTriggeredBy`\" pulumi-lang-dotnet=\"`ReplaceTriggeredBy`\" pulumi-lang-go=\"`replaceTriggeredBy`\" pulumi-lang-python=\"`replace_triggered_by`\" pulumi-lang-yaml=\"`replaceTriggeredBy`\" pulumi-lang-java=\"`replaceTriggeredBy`\"\u003e`replace_triggered_by`\u003c/span\u003e so it runs after SDN objects change.\n\n", "properties": { - "contentType": { - "type": "string", - "description": "The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n" + "onCreate": { + "type": "boolean", + "description": "Whether to apply SDN configuration on resource creation. Defaults to true.\n" }, - "datastoreId": { + "onDestroy": { + "type": "boolean", + "description": "Whether to apply SDN configuration on resource destruction. Defaults to true.\n" + } + }, + "required": [ + "onCreate", + "onDestroy" + ], + "inputProperties": { + "onCreate": { + "type": "boolean", + "description": "Whether to apply SDN configuration on resource creation. Defaults to true.\n" + }, + "onDestroy": { + "type": "boolean", + "description": "Whether to apply SDN configuration on resource destruction. Defaults to true.\n" + } + }, + "stateInputs": { + "description": "Input properties used for looking up and filtering Applier resources.\n", + "properties": { + "onCreate": { + "type": "boolean", + "description": "Whether to apply SDN configuration on resource creation. Defaults to true.\n" + }, + "onDestroy": { + "type": "boolean", + "description": "Whether to apply SDN configuration on resource destruction. Defaults to true.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Sdn/fabric/node/openfabric:Openfabric": { + "description": "OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OpenFabric(\"main\", {\n fabricId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n});\nconst mainOpenfabric = new proxmoxve.sdn.fabric.node.Openfabric(\"main\", {\n fabricId: main.fabricId,\n nodeId: \"pve\",\n ip: \"10.0.0.1\",\n interfaceNames: [\n \"nic0\",\n \"nic1\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OpenFabric(\"main\",\n fabric_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\")\nmain_openfabric = proxmoxve.sdn.fabric.node.Openfabric(\"main\",\n fabric_id=main.fabric_id,\n node_id=\"pve\",\n ip=\"10.0.0.1\",\n interface_names=[\n \"nic0\",\n \"nic1\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OpenFabric(\"main\", new()\n {\n FabricId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n });\n\n var mainOpenfabric = new ProxmoxVE.Sdn.Fabric.Node.Openfabric(\"main\", new()\n {\n FabricId = main.FabricId,\n NodeId = \"pve\",\n Ip = \"10.0.0.1\",\n InterfaceNames = new[]\n {\n \"nic0\",\n \"nic1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := sdnfabric.NewOpenFabric(ctx, \"main\", \u0026sdnfabric.OpenFabricArgs{\n\t\t\tFabricId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sdn.NewOpenfabric(ctx, \"main\", \u0026sdn.OpenfabricArgs{\n\t\t\tFabricId: main.FabricId,\n\t\t\tNodeId: pulumi.String(\"pve\"),\n\t\t\tIp: pulumi.String(\"10.0.0.1\"),\n\t\t\tInterfaceNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"nic0\"),\n\t\t\t\tpulumi.String(\"nic1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabric;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabricArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Openfabric;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.OpenfabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OpenFabric(\"main\", OpenFabricArgs.builder()\n .fabricId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .build());\n\n var mainOpenfabric = new Openfabric(\"mainOpenfabric\", OpenfabricArgs.builder()\n .fabricId(main.fabricId())\n .nodeId(\"pve\")\n .ip(\"10.0.0.1\")\n .interfaceNames( \n \"nic0\",\n \"nic1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OpenFabric\n properties:\n fabricId: main-fabric\n ipPrefix: 10.0.0.0/16\n mainOpenfabric:\n type: proxmoxve:Sdn/fabric/node:Openfabric\n name: main\n properties:\n fabricId: ${main.fabricId}\n nodeId: pve\n ip: 10.0.0.1\n interfaceNames:\n - nic0\n - nic1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "fabricId": { "type": "string", - "description": "The datastore id.\n" + "description": "The unique identifier of the SDN fabric.\n" }, - "fileMode": { + "interfaceNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Set of interfaces associated with the fabric node.\n" + }, + "ip": { "type": "string", - "description": "The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n" + "description": "IPv4 address for the fabric node.\n" }, - "fileModificationDate": { + "ip6": { "type": "string", - "description": "The file modification date (RFC 3339).\n" + "description": "IPv6 address for the fabric node.\n" }, - "fileName": { + "nodeId": { "type": "string", - "description": "The file name.\n" + "description": "The unique identifier of the SDN fabric.\n" + } + }, + "required": [ + "fabricId", + "interfaceNames", + "nodeId" + ], + "inputProperties": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" }, - "fileSize": { - "type": "integer", - "description": "The file size in bytes.\n" + "interfaceNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Set of interfaces associated with the fabric node.\n" }, - "fileTag": { + "ip": { "type": "string", - "description": "The file tag.\n" + "description": "IPv4 address for the fabric node.\n" }, - "nodeName": { + "ip6": { "type": "string", - "description": "The node name.\n" - }, - "overwrite": { - "type": "boolean", - "description": "Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + "description": "IPv6 address for the fabric node.\n" }, - "sourceFile": { - "$ref": "#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile", - "description": "The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n" + "nodeId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + } + }, + "requiredInputs": [ + "fabricId", + "interfaceNames", + "nodeId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Openfabric resources.\n", + "properties": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + }, + "interfaceNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Set of interfaces associated with the fabric node.\n" + }, + "ip": { + "type": "string", + "description": "IPv4 address for the fabric node.\n" + }, + "ip6": { + "type": "string", + "description": "IPv6 address for the fabric node.\n" + }, + "nodeId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + } }, - "sourceRaw": { - "$ref": "#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw", - "description": "The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n" + "type": "object" + } + }, + "proxmoxve:Sdn/fabric/node/ospf:Ospf": { + "description": "OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = new proxmoxve.sdnfabric.OSPF(\"main\", {\n ospfId: \"main-fabric\",\n ipPrefix: \"10.0.0.0/16\",\n area: \"0\",\n});\nconst mainOspf = new proxmoxve.sdn.fabric.node.Ospf(\"main\", {\n fabricId: main.ospfId,\n nodeId: \"pve\",\n ip: \"10.0.0.1\",\n interfaceNames: [\n \"nic0\",\n \"nic1\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.sdnfabric.OSPF(\"main\",\n ospf_id=\"main-fabric\",\n ip_prefix=\"10.0.0.0/16\",\n area=\"0\")\nmain_ospf = proxmoxve.sdn.fabric.node.Ospf(\"main\",\n fabric_id=main.ospf_id,\n node_id=\"pve\",\n ip=\"10.0.0.1\",\n interface_names=[\n \"nic0\",\n \"nic1\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new ProxmoxVE.SDNFabric.OSPF(\"main\", new()\n {\n OspfId = \"main-fabric\",\n IpPrefix = \"10.0.0.0/16\",\n Area = \"0\",\n });\n\n var mainOspf = new ProxmoxVE.Sdn.Fabric.Node.Ospf(\"main\", new()\n {\n FabricId = main.OspfId,\n NodeId = \"pve\",\n Ip = \"10.0.0.1\",\n InterfaceNames = new[]\n {\n \"nic0\",\n \"nic1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := sdnfabric.NewOSPF(ctx, \"main\", \u0026sdnfabric.OSPFArgs{\n\t\t\tOspfId: pulumi.String(\"main-fabric\"),\n\t\t\tIpPrefix: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tArea: pulumi.String(\"0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sdn.NewOspf(ctx, \"main\", \u0026sdn.OspfArgs{\n\t\t\tFabricId: main.OspfId,\n\t\t\tNodeId: pulumi.String(\"pve\"),\n\t\t\tIp: pulumi.String(\"10.0.0.1\"),\n\t\t\tInterfaceNames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"nic0\"),\n\t\t\t\tpulumi.String(\"nic1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPF;\nimport io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPFArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Ospf;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.OspfArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var main = new OSPF(\"main\", OSPFArgs.builder()\n .ospfId(\"main-fabric\")\n .ipPrefix(\"10.0.0.0/16\")\n .area(\"0\")\n .build());\n\n var mainOspf = new Ospf(\"mainOspf\", OspfArgs.builder()\n .fabricId(main.ospfId())\n .nodeId(\"pve\")\n .ip(\"10.0.0.1\")\n .interfaceNames( \n \"nic0\",\n \"nic1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: proxmoxve:SDNFabric:OSPF\n properties:\n ospfId: main-fabric\n ipPrefix: 10.0.0.0/16\n area: '0'\n mainOspf:\n type: proxmoxve:Sdn/fabric/node:Ospf\n name: main\n properties:\n fabricId: ${main.ospfId}\n nodeId: pve\n ip: 10.0.0.1\n interfaceNames:\n - nic0\n - nic1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" }, - "timeoutUpload": { + "interfaceNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Set of interfaces associated with the fabric node.\n" + }, + "ip": { + "type": "string", + "description": "IPv4 address for the fabric node.\n" + }, + "nodeId": { + "type": "string", + "description": "The unique identifier of the SDN fabric node.\n" + } + }, + "required": [ + "fabricId", + "interfaceNames", + "ip", + "nodeId" + ], + "inputProperties": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + }, + "interfaceNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Set of interfaces associated with the fabric node.\n" + }, + "ip": { + "type": "string", + "description": "IPv4 address for the fabric node.\n" + }, + "nodeId": { + "type": "string", + "description": "The unique identifier of the SDN fabric node.\n" + } + }, + "requiredInputs": [ + "fabricId", + "interfaceNames", + "ip", + "nodeId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Ospf resources.\n", + "properties": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + }, + "interfaceNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Set of interfaces associated with the fabric node.\n" + }, + "ip": { + "type": "string", + "description": "IPv4 address for the fabric node.\n" + }, + "nodeId": { + "type": "string", + "description": "The unique identifier of the SDN fabric node.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Sdn/subnet:Subnet": { + "description": "Manages SDN Subnets in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n nodes: [\"pve\"],\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n nodes: [\"pve\"],\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - Basic vnet\nconst exampleVnet1 = new proxmoxve.sdn.Vnet(\"example_vnet_1\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// SDN VNet - VNet with alias and port isolation\nconst exampleVnet2 = new proxmoxve.sdn.Vnet(\"example_vnet_2\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Example VNet 2\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// Basic Subnet\nconst basicSubnet = new proxmoxve.sdn.Subnet(\"basic_subnet\", {\n cidr: \"192.168.1.0/24\",\n vnet: exampleVnet1.vnetId,\n gateway: \"192.168.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// Subnet with DHCP Configuration\nconst dhcpSubnet = new proxmoxve.sdn.Subnet(\"dhcp_subnet\", {\n cidr: \"192.168.2.0/24\",\n vnet: exampleVnet2.vnetId,\n gateway: \"192.168.2.1\",\n dhcpDnsServer: \"192.168.2.53\",\n dnsZonePrefix: \"internal.example.com\",\n snat: true,\n dhcpRange: {\n startAddress: \"192.168.2.10\",\n endAddress: \"192.168.2.100\",\n },\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst subnetApplier = new proxmoxve.sdn.Applier(\"subnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n nodes=[\"pve\"],\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n nodes=[\"pve\"],\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - Basic vnet\nexample_vnet1 = proxmoxve.sdn.Vnet(\"example_vnet_1\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN VNet - VNet with alias and port isolation\nexample_vnet2 = proxmoxve.sdn.Vnet(\"example_vnet_2\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Example VNet 2\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic Subnet\nbasic_subnet = proxmoxve.sdn.Subnet(\"basic_subnet\",\n cidr=\"192.168.1.0/24\",\n vnet=example_vnet1.vnet_id,\n gateway=\"192.168.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Subnet with DHCP Configuration\ndhcp_subnet = proxmoxve.sdn.Subnet(\"dhcp_subnet\",\n cidr=\"192.168.2.0/24\",\n vnet=example_vnet2.vnet_id,\n gateway=\"192.168.2.1\",\n dhcp_dns_server=\"192.168.2.53\",\n dns_zone_prefix=\"internal.example.com\",\n snat=True,\n dhcp_range={\n \"start_address\": \"192.168.2.10\",\n \"end_address\": \"192.168.2.100\",\n },\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nsubnet_applier = proxmoxve.sdn.Applier(\"subnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n example_vnet1,\n example_vnet2,\n basic_subnet,\n dhcp_subnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Nodes = new[]\n {\n \"pve\",\n },\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_1\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new ProxmoxVE.Sdn.Vnet(\"example_vnet_2\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Example VNet 2\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic Subnet\n var basicSubnet = new ProxmoxVE.Sdn.Subnet(\"basic_subnet\", new()\n {\n Cidr = \"192.168.1.0/24\",\n Vnet = exampleVnet1.VnetId,\n Gateway = \"192.168.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new ProxmoxVE.Sdn.Subnet(\"dhcp_subnet\", new()\n {\n Cidr = \"192.168.2.0/24\",\n Vnet = exampleVnet2.VnetId,\n Gateway = \"192.168.2.1\",\n DhcpDnsServer = \"192.168.2.53\",\n DnsZonePrefix = \"internal.example.com\",\n Snat = true,\n DhcpRange = new ProxmoxVE.Sdn.Inputs.SubnetDhcpRangeArgs\n {\n StartAddress = \"192.168.2.10\",\n EndAddress = \"192.168.2.100\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var subnetApplier = new ProxmoxVE.Sdn.Applier(\"subnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - Basic vnet\n\t\texampleVnet1, err := sdn.NewVnet(ctx, \"example_vnet_1\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN VNet - VNet with alias and port isolation\n\t\texampleVnet2, err := sdn.NewVnet(ctx, \"example_vnet_2\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Example VNet 2\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic Subnet\n\t\tbasicSubnet, err := sdn.NewSubnet(ctx, \"basic_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.1.0/24\"),\n\t\t\tVnet: exampleVnet1.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Subnet with DHCP Configuration\n\t\tdhcpSubnet, err := sdn.NewSubnet(ctx, \"dhcp_subnet\", \u0026sdn.SubnetArgs{\n\t\t\tCidr: pulumi.String(\"192.168.2.0/24\"),\n\t\t\tVnet: exampleVnet2.VnetId,\n\t\t\tGateway: pulumi.String(\"192.168.2.1\"),\n\t\t\tDhcpDnsServer: pulumi.String(\"192.168.2.53\"),\n\t\t\tDnsZonePrefix: pulumi.String(\"internal.example.com\"),\n\t\t\tSnat: pulumi.Bool(true),\n\t\t\tDhcpRange: \u0026sdn.SubnetDhcpRangeArgs{\n\t\t\t\tStartAddress: pulumi.String(\"192.168.2.10\"),\n\t\t\t\tEndAddress: pulumi.String(\"192.168.2.100\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"subnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\texampleVnet1,\n\t\t\texampleVnet2,\n\t\t\tbasicSubnet,\n\t\t\tdhcpSubnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Subnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.SubnetArgs;\nimport com.pulumi.proxmoxve.Sdn.inputs.SubnetDhcpRangeArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .nodes(\"pve\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .nodes(\"pve\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - Basic vnet\n var exampleVnet1 = new Vnet(\"exampleVnet1\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN VNet - VNet with alias and port isolation\n var exampleVnet2 = new Vnet(\"exampleVnet2\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Example VNet 2\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic Subnet\n var basicSubnet = new Subnet(\"basicSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.1.0/24\")\n .vnet(exampleVnet1.vnetId())\n .gateway(\"192.168.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Subnet with DHCP Configuration\n var dhcpSubnet = new Subnet(\"dhcpSubnet\", SubnetArgs.builder()\n .cidr(\"192.168.2.0/24\")\n .vnet(exampleVnet2.vnetId())\n .gateway(\"192.168.2.1\")\n .dhcpDnsServer(\"192.168.2.53\")\n .dnsZonePrefix(\"internal.example.com\")\n .snat(true)\n .dhcpRange(SubnetDhcpRangeArgs.builder()\n .startAddress(\"192.168.2.10\")\n .endAddress(\"192.168.2.100\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var subnetApplier = new Applier(\"subnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n exampleVnet1,\n exampleVnet2,\n basicSubnet,\n dhcpSubnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n nodes:\n - pve\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n nodes:\n - pve\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - Basic vnet\n exampleVnet1:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_1\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # SDN VNet - VNet with alias and port isolation\n exampleVnet2:\n type: proxmoxve:Sdn:Vnet\n name: example_vnet_2\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Example VNet 2\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # Basic Subnet\n basicSubnet:\n type: proxmoxve:Sdn:Subnet\n name: basic_subnet\n properties:\n cidr: 192.168.1.0/24\n vnet: ${exampleVnet1.vnetId}\n gateway: 192.168.1.1\n options:\n dependsOn:\n - ${finalizer}\n # Subnet with DHCP Configuration\n dhcpSubnet:\n type: proxmoxve:Sdn:Subnet\n name: dhcp_subnet\n properties:\n cidr: 192.168.2.0/24\n vnet: ${exampleVnet2.vnetId}\n gateway: 192.168.2.1\n dhcpDnsServer: 192.168.2.53\n dnsZonePrefix: internal.example.com\n snat: true\n dhcpRange:\n startAddress: 192.168.2.10\n endAddress: 192.168.2.100\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n subnetApplier:\n type: proxmoxve:Sdn:Applier\n name: subnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${exampleVnet1}\n - ${exampleVnet2}\n - ${basicSubnet}\n - ${dhcpSubnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN subnet can be imported using its unique identifier in the format: \u003cvnet\u003e/\u003csubnet-id\u003e\n\nThe \u003csubnet-id\u003e is the canonical ID from Proxmox, e.g., \"zone1-192.168.1.0-24\"\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet basic_subnet vnet1/zone1-192.168.1.0-24\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/subnet:Subnet dhcp_subnet vnet2/zone2-192.168.2.0-24\n```\n\n", + "properties": { + "cidr": { + "type": "string", + "description": "A CIDR network address, for example 10.0.0.0/8\n" + }, + "dhcpDnsServer": { + "type": "string", + "description": "The DNS server used for DHCP.\n" + }, + "dhcpRange": { + "$ref": "#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange", + "description": "DHCP range (start and end IPs).\n" + }, + "dnsZonePrefix": { + "type": "string", + "description": "Prefix used for DNS zone delegation.\n" + }, + "gateway": { + "type": "string", + "description": "The gateway address for the subnet.\n" + }, + "snat": { + "type": "boolean", + "description": "Whether SNAT is enabled for the subnet.\n" + }, + "vnet": { + "type": "string", + "description": "The VNet to which this subnet belongs.\n" + } + }, + "required": [ + "cidr", + "vnet" + ], + "inputProperties": { + "cidr": { + "type": "string", + "description": "A CIDR network address, for example 10.0.0.0/8\n" + }, + "dhcpDnsServer": { + "type": "string", + "description": "The DNS server used for DHCP.\n" + }, + "dhcpRange": { + "$ref": "#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange", + "description": "DHCP range (start and end IPs).\n" + }, + "dnsZonePrefix": { + "type": "string", + "description": "Prefix used for DNS zone delegation.\n" + }, + "gateway": { + "type": "string", + "description": "The gateway address for the subnet.\n" + }, + "snat": { + "type": "boolean", + "description": "Whether SNAT is enabled for the subnet.\n" + }, + "vnet": { + "type": "string", + "description": "The VNet to which this subnet belongs.\n" + } + }, + "requiredInputs": [ + "cidr", + "vnet" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Subnet resources.\n", + "properties": { + "cidr": { + "type": "string", + "description": "A CIDR network address, for example 10.0.0.0/8\n" + }, + "dhcpDnsServer": { + "type": "string", + "description": "The DNS server used for DHCP.\n" + }, + "dhcpRange": { + "$ref": "#/types/proxmoxve:Sdn/SubnetDhcpRange:SubnetDhcpRange", + "description": "DHCP range (start and end IPs).\n" + }, + "dnsZonePrefix": { + "type": "string", + "description": "Prefix used for DNS zone delegation.\n" + }, + "gateway": { + "type": "string", + "description": "The gateway address for the subnet.\n" + }, + "snat": { + "type": "boolean", + "description": "Whether SNAT is enabled for the subnet.\n" + }, + "vnet": { + "type": "string", + "description": "The VNet to which this subnet belongs.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Sdn/vnet:Vnet": { + "description": "Manages Proxmox VE SDN VNet.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst finalizer = new proxmoxve.sdn.Applier(\"finalizer\", {});\n// SDN Zone (Simple) - Basic zone for simple vnets\nconst exampleZone1 = new proxmoxve.sdnzone.Simple(\"example_zone_1\", {\n zoneId: \"zone1\",\n mtu: 1500,\n dns: \"1.1.1.1\",\n dnsZone: \"example.com\",\n ipam: \"pve\",\n reverseDns: \"1.1.1.1\",\n}, {\n dependsOn: [finalizer],\n});\n// SDN Zone (Simple) - Second zone for demonstration\nconst exampleZone2 = new proxmoxve.sdnzone.Simple(\"example_zone_2\", {\n zoneId: \"zone2\",\n mtu: 1500,\n}, {\n dependsOn: [finalizer],\n});\n// Basic VNet (Simple)\nconst basicVnet = new proxmoxve.sdn.Vnet(\"basic_vnet\", {\n vnetId: \"vnet1\",\n zone: exampleZone1.zoneId,\n}, {\n dependsOn: [finalizer],\n});\n// VNet with Alias and Port Isolation\nconst isolatedVnet = new proxmoxve.sdn.Vnet(\"isolated_vnet\", {\n vnetId: \"vnet2\",\n zone: exampleZone2.zoneId,\n alias: \"Isolated VNet\",\n isolatePorts: true,\n vlanAware: false,\n}, {\n dependsOn: [finalizer],\n});\n// SDN Applier for all resources\nconst vnetApplier = new proxmoxve.sdn.Applier(\"vnet_applier\", {}, {\n dependsOn: [\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nfinalizer = proxmoxve.sdn.Applier(\"finalizer\")\n# SDN Zone (Simple) - Basic zone for simple vnets\nexample_zone1 = proxmoxve.sdnzone.Simple(\"example_zone_1\",\n zone_id=\"zone1\",\n mtu=1500,\n dns=\"1.1.1.1\",\n dns_zone=\"example.com\",\n ipam=\"pve\",\n reverse_dns=\"1.1.1.1\",\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Zone (Simple) - Second zone for demonstration\nexample_zone2 = proxmoxve.sdnzone.Simple(\"example_zone_2\",\n zone_id=\"zone2\",\n mtu=1500,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# Basic VNet (Simple)\nbasic_vnet = proxmoxve.sdn.Vnet(\"basic_vnet\",\n vnet_id=\"vnet1\",\n zone=example_zone1.zone_id,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# VNet with Alias and Port Isolation\nisolated_vnet = proxmoxve.sdn.Vnet(\"isolated_vnet\",\n vnet_id=\"vnet2\",\n zone=example_zone2.zone_id,\n alias=\"Isolated VNet\",\n isolate_ports=True,\n vlan_aware=False,\n opts = pulumi.ResourceOptions(depends_on=[finalizer]))\n# SDN Applier for all resources\nvnet_applier = proxmoxve.sdn.Applier(\"vnet_applier\", opts = pulumi.ResourceOptions(depends_on=[\n example_zone1,\n example_zone2,\n basic_vnet,\n isolated_vnet,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var finalizer = new ProxmoxVE.Sdn.Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new ProxmoxVE.SDNZone.Simple(\"example_zone_1\", new()\n {\n ZoneId = \"zone1\",\n Mtu = 1500,\n Dns = \"1.1.1.1\",\n DnsZone = \"example.com\",\n Ipam = \"pve\",\n ReverseDns = \"1.1.1.1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new ProxmoxVE.SDNZone.Simple(\"example_zone_2\", new()\n {\n ZoneId = \"zone2\",\n Mtu = 1500,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // Basic VNet (Simple)\n var basicVnet = new ProxmoxVE.Sdn.Vnet(\"basic_vnet\", new()\n {\n VnetId = \"vnet1\",\n Zone = exampleZone1.ZoneId,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new ProxmoxVE.Sdn.Vnet(\"isolated_vnet\", new()\n {\n VnetId = \"vnet2\",\n Zone = exampleZone2.ZoneId,\n Alias = \"Isolated VNet\",\n IsolatePorts = true,\n VlanAware = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n finalizer,\n },\n });\n\n // SDN Applier for all resources\n var vnetApplier = new ProxmoxVE.Sdn.Applier(\"vnet_applier\", new()\n {\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnzone\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfinalizer, err := sdn.NewApplier(ctx, \"finalizer\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Basic zone for simple vnets\n\t\texampleZone1, err := sdnzone.NewSimple(ctx, \"example_zone_1\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone1\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t\tDns: pulumi.String(\"1.1.1.1\"),\n\t\t\tDnsZone: pulumi.String(\"example.com\"),\n\t\t\tIpam: pulumi.String(\"pve\"),\n\t\t\tReverseDns: pulumi.String(\"1.1.1.1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Zone (Simple) - Second zone for demonstration\n\t\texampleZone2, err := sdnzone.NewSimple(ctx, \"example_zone_2\", \u0026sdnzone.SimpleArgs{\n\t\t\tZoneId: pulumi.String(\"zone2\"),\n\t\t\tMtu: pulumi.Int(1500),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Basic VNet (Simple)\n\t\tbasicVnet, err := sdn.NewVnet(ctx, \"basic_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet1\"),\n\t\t\tZone: exampleZone1.ZoneId,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// VNet with Alias and Port Isolation\n\t\tisolatedVnet, err := sdn.NewVnet(ctx, \"isolated_vnet\", \u0026sdn.VnetArgs{\n\t\t\tVnetId: pulumi.String(\"vnet2\"),\n\t\t\tZone: exampleZone2.ZoneId,\n\t\t\tAlias: pulumi.String(\"Isolated VNet\"),\n\t\t\tIsolatePorts: pulumi.Bool(true),\n\t\t\tVlanAware: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfinalizer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// SDN Applier for all resources\n\t\t_, err = sdn.NewApplier(ctx, \"vnet_applier\", nil, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texampleZone1,\n\t\t\texampleZone2,\n\t\t\tbasicVnet,\n\t\t\tisolatedVnet,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Applier;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.Simple;\nimport io.muehlbachler.pulumi.proxmoxve.SDNZone.SimpleArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.Vnet;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.VnetArgs;\nimport io.muehlbachler.pulumi.proxmoxve.Sdn.ApplierArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var finalizer = new Applier(\"finalizer\");\n\n // SDN Zone (Simple) - Basic zone for simple vnets\n var exampleZone1 = new Simple(\"exampleZone1\", SimpleArgs.builder()\n .zoneId(\"zone1\")\n .mtu(1500)\n .dns(\"1.1.1.1\")\n .dnsZone(\"example.com\")\n .ipam(\"pve\")\n .reverseDns(\"1.1.1.1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Zone (Simple) - Second zone for demonstration\n var exampleZone2 = new Simple(\"exampleZone2\", SimpleArgs.builder()\n .zoneId(\"zone2\")\n .mtu(1500)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // Basic VNet (Simple)\n var basicVnet = new Vnet(\"basicVnet\", VnetArgs.builder()\n .vnetId(\"vnet1\")\n .zone(exampleZone1.zoneId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // VNet with Alias and Port Isolation\n var isolatedVnet = new Vnet(\"isolatedVnet\", VnetArgs.builder()\n .vnetId(\"vnet2\")\n .zone(exampleZone2.zoneId())\n .alias(\"Isolated VNet\")\n .isolatePorts(true)\n .vlanAware(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(finalizer)\n .build());\n\n // SDN Applier for all resources\n var vnetApplier = new Applier(\"vnetApplier\", ApplierArgs.Empty, CustomResourceOptions.builder()\n .dependsOn( \n exampleZone1,\n exampleZone2,\n basicVnet,\n isolatedVnet)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # SDN Zone (Simple) - Basic zone for simple vnets\n exampleZone1:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_1\n properties:\n zoneId: zone1\n mtu: 1500 # Optional attributes\n dns: 1.1.1.1\n dnsZone: example.com\n ipam: pve\n reverseDns: 1.1.1.1\n options:\n dependsOn:\n - ${finalizer}\n # SDN Zone (Simple) - Second zone for demonstration\n exampleZone2:\n type: proxmoxve:SDNZone:Simple\n name: example_zone_2\n properties:\n zoneId: zone2\n mtu: 1500\n options:\n dependsOn:\n - ${finalizer}\n # Basic VNet (Simple)\n basicVnet:\n type: proxmoxve:Sdn:Vnet\n name: basic_vnet\n properties:\n vnetId: vnet1\n zone: ${exampleZone1.zoneId}\n options:\n dependsOn:\n - ${finalizer}\n # VNet with Alias and Port Isolation\n isolatedVnet:\n type: proxmoxve:Sdn:Vnet\n name: isolated_vnet\n properties:\n vnetId: vnet2\n zone: ${exampleZone2.zoneId}\n alias: Isolated VNet\n isolatePorts: true\n vlanAware: false\n options:\n dependsOn:\n - ${finalizer}\n # SDN Applier for all resources\n vnetApplier:\n type: proxmoxve:Sdn:Applier\n name: vnet_applier\n options:\n dependsOn:\n - ${exampleZone1}\n - ${exampleZone2}\n - ${basicVnet}\n - ${isolatedVnet}\n finalizer:\n type: proxmoxve:Sdn:Applier\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n#!/usr/bin/env sh\n\nSDN vnet can be imported using its unique identifier (vnet ID)\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet basic_vnet vnet1\n```\n\n```sh\n$ pulumi import proxmoxve:Sdn/vnet:Vnet isolated_vnet vnet2\n```\n\n", + "properties": { + "alias": { + "type": "string", + "description": "An optional alias for this VNet.\n" + }, + "isolatePorts": { + "type": "boolean", + "description": "Isolate ports within this VNet.\n" + }, + "tag": { "type": "integer", - "description": "Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n" + "description": "Tag value for VLAN/VXLAN (can't be used with other zone types).\n" + }, + "vlanAware": { + "type": "boolean", + "description": "Allow VM VLANs to pass through this VNet.\n" + }, + "vnetId": { + "type": "string", + "description": "The unique identifier of the SDN VNet.\n" + }, + "zone": { + "type": "string", + "description": "The zone to which this VNet belongs.\n" + } + }, + "required": [ + "vnetId", + "zone" + ], + "inputProperties": { + "alias": { + "type": "string", + "description": "An optional alias for this VNet.\n" + }, + "isolatePorts": { + "type": "boolean", + "description": "Isolate ports within this VNet.\n" + }, + "tag": { + "type": "integer", + "description": "Tag value for VLAN/VXLAN (can't be used with other zone types).\n" + }, + "vlanAware": { + "type": "boolean", + "description": "Allow VM VLANs to pass through this VNet.\n" + }, + "vnetId": { + "type": "string", + "description": "The unique identifier of the SDN VNet.\n" + }, + "zone": { + "type": "string", + "description": "The zone to which this VNet belongs.\n" + } + }, + "requiredInputs": [ + "vnetId", + "zone" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Vnet resources.\n", + "properties": { + "alias": { + "type": "string", + "description": "An optional alias for this VNet.\n" + }, + "isolatePorts": { + "type": "boolean", + "description": "Isolate ports within this VNet.\n" + }, + "tag": { + "type": "integer", + "description": "Tag value for VLAN/VXLAN (can't be used with other zone types).\n" + }, + "vlanAware": { + "type": "boolean", + "description": "Allow VM VLANs to pass through this VNet.\n" + }, + "vnetId": { + "type": "string", + "description": "The unique identifier of the SDN VNet.\n" + }, + "zone": { + "type": "string", + "description": "The zone to which this VNet belongs.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/cIFS:CIFS": { + "description": "Manages an SMB/CIFS based storage server in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.CIFS(\"example\", {\n cifsId: \"example-cifs\",\n nodes: [\"pve\"],\n server: \"10.0.0.20\",\n share: \"proxmox\",\n username: \"cifs-user\",\n password: \"cifs-password\",\n contents: [\"images\"],\n domain: \"WORKGROUP\",\n subdirectory: \"terraform\",\n preallocation: \"metadata\",\n snapshotAsVolumeChain: true,\n backups: {\n maxProtectedBackups: 5,\n keepDaily: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.CIFS(\"example\",\n cifs_id=\"example-cifs\",\n nodes=[\"pve\"],\n server=\"10.0.0.20\",\n share=\"proxmox\",\n username=\"cifs-user\",\n password=\"cifs-password\",\n contents=[\"images\"],\n domain=\"WORKGROUP\",\n subdirectory=\"terraform\",\n preallocation=\"metadata\",\n snapshot_as_volume_chain=True,\n backups={\n \"max_protected_backups\": 5,\n \"keep_daily\": 7,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.CIFS(\"example\", new()\n {\n CifsId = \"example-cifs\",\n Nodes = new[]\n {\n \"pve\",\n },\n Server = \"10.0.0.20\",\n Share = \"proxmox\",\n Username = \"cifs-user\",\n Password = \"cifs-password\",\n Contents = new[]\n {\n \"images\",\n },\n Domain = \"WORKGROUP\",\n Subdirectory = \"terraform\",\n Preallocation = \"metadata\",\n SnapshotAsVolumeChain = true,\n Backups = new ProxmoxVE.Storage.Inputs.CIFSBackupsArgs\n {\n MaxProtectedBackups = 5,\n KeepDaily = 7,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewCIFS(ctx, \"example\", \u0026storage.CIFSArgs{\n\t\t\tCifsId: pulumi.String(\"example-cifs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tServer: pulumi.String(\"10.0.0.20\"),\n\t\t\tShare: pulumi.String(\"proxmox\"),\n\t\t\tUsername: pulumi.String(\"cifs-user\"),\n\t\t\tPassword: pulumi.String(\"cifs-password\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tDomain: pulumi.String(\"WORKGROUP\"),\n\t\t\tSubdirectory: pulumi.String(\"terraform\"),\n\t\t\tPreallocation: pulumi.String(\"metadata\"),\n\t\t\tSnapshotAsVolumeChain: pulumi.Bool(true),\n\t\t\tBackups: \u0026storage.CIFSBackupsArgs{\n\t\t\t\tMaxProtectedBackups: pulumi.Int(5),\n\t\t\t\tKeepDaily: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.CIFS;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.CIFSArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.CIFSBackupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new CIFS(\"example\", CIFSArgs.builder()\n .cifsId(\"example-cifs\")\n .nodes(\"pve\")\n .server(\"10.0.0.20\")\n .share(\"proxmox\")\n .username(\"cifs-user\")\n .password(\"cifs-password\")\n .contents(\"images\")\n .domain(\"WORKGROUP\")\n .subdirectory(\"terraform\")\n .preallocation(\"metadata\")\n .snapshotAsVolumeChain(true)\n .backups(CIFSBackupsArgs.builder()\n .maxProtectedBackups(5)\n .keepDaily(7)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:CIFS\n properties:\n cifsId: example-cifs\n nodes:\n - pve\n server: 10.0.0.20\n share: proxmox\n username: cifs-user\n password: cifs-password\n contents:\n - images\n domain: WORKGROUP\n subdirectory: terraform\n preallocation: metadata\n snapshotAsVolumeChain: true\n backups:\n maxProtectedBackups: 5\n keepDaily: 7\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/CIFSBackups:CIFSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "cifsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "domain": { + "type": "string", + "description": "The SMB/CIFS domain.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "password": { + "type": "string", + "description": "The password for authenticating with the SMB/CIFS server.\n", + "secret": true + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the SMB/CIFS server.\n" + }, + "share": { + "type": "string", + "description": "The name of the SMB/CIFS share.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "snapshotAsVolumeChain": { + "type": "boolean", + "description": "Enable support for creating snapshots through volume backing-chains.\n" + }, + "subdirectory": { + "type": "string", + "description": "A subdirectory to mount within the share.\n" + }, + "username": { + "type": "string", + "description": "The username for authenticating with the SMB/CIFS server.\n" + } + }, + "required": [ + "contents", + "disable", + "cifsId", + "nodes", + "password", + "server", + "share", + "shared", + "username" + ], + "inputProperties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/CIFSBackups:CIFSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "cifsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "domain": { + "type": "string", + "description": "The SMB/CIFS domain.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "password": { + "type": "string", + "description": "The password for authenticating with the SMB/CIFS server.\n", + "secret": true + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the SMB/CIFS server.\n" + }, + "share": { + "type": "string", + "description": "The name of the SMB/CIFS share.\n" + }, + "snapshotAsVolumeChain": { + "type": "boolean", + "description": "Enable support for creating snapshots through volume backing-chains.\n" + }, + "subdirectory": { + "type": "string", + "description": "A subdirectory to mount within the share.\n" + }, + "username": { + "type": "string", + "description": "The username for authenticating with the SMB/CIFS server.\n" + } + }, + "requiredInputs": [ + "cifsId", + "password", + "server", + "share", + "username" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering CIFS resources.\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/CIFSBackups:CIFSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "cifsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "domain": { + "type": "string", + "description": "The SMB/CIFS domain.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "password": { + "type": "string", + "description": "The password for authenticating with the SMB/CIFS server.\n", + "secret": true + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the SMB/CIFS server.\n" + }, + "share": { + "type": "string", + "description": "The name of the SMB/CIFS share.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "snapshotAsVolumeChain": { + "type": "boolean", + "description": "Enable support for creating snapshots through volume backing-chains.\n" + }, + "subdirectory": { + "type": "string", + "description": "A subdirectory to mount within the share.\n" + }, + "username": { + "type": "string", + "description": "The username for authenticating with the SMB/CIFS server.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/directory:Directory": { + "description": "Manages directory-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.Directory(\"example\", {\n directoryId: \"example-dir\",\n path: \"/var/lib/vz\",\n nodes: [\"pve\"],\n contents: [\"images\"],\n shared: true,\n disable: false,\n backups: {\n maxProtectedBackups: 5,\n keepDaily: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.Directory(\"example\",\n directory_id=\"example-dir\",\n path=\"/var/lib/vz\",\n nodes=[\"pve\"],\n contents=[\"images\"],\n shared=True,\n disable=False,\n backups={\n \"max_protected_backups\": 5,\n \"keep_daily\": 7,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.Directory(\"example\", new()\n {\n DirectoryId = \"example-dir\",\n Path = \"/var/lib/vz\",\n Nodes = new[]\n {\n \"pve\",\n },\n Contents = new[]\n {\n \"images\",\n },\n Shared = true,\n Disable = false,\n Backups = new ProxmoxVE.Storage.Inputs.DirectoryBackupsArgs\n {\n MaxProtectedBackups = 5,\n KeepDaily = 7,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewDirectory(ctx, \"example\", \u0026storage.DirectoryArgs{\n\t\t\tDirectoryId: pulumi.String(\"example-dir\"),\n\t\t\tPath: pulumi.String(\"/var/lib/vz\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tShared: pulumi.Bool(true),\n\t\t\tDisable: pulumi.Bool(false),\n\t\t\tBackups: \u0026storage.DirectoryBackupsArgs{\n\t\t\t\tMaxProtectedBackups: pulumi.Int(5),\n\t\t\t\tKeepDaily: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.Directory;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.DirectoryArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.DirectoryBackupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Directory(\"example\", DirectoryArgs.builder()\n .directoryId(\"example-dir\")\n .path(\"/var/lib/vz\")\n .nodes(\"pve\")\n .contents(\"images\")\n .shared(true)\n .disable(false)\n .backups(DirectoryBackupsArgs.builder()\n .maxProtectedBackups(5)\n .keepDaily(7)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:Directory\n properties:\n directoryId: example-dir\n path: /var/lib/vz\n nodes:\n - pve\n contents:\n - images\n shared: true\n disable: false\n backups:\n maxProtectedBackups: 5\n keepDaily: 7\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/DirectoryBackups:DirectoryBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "directoryId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "path": { + "type": "string", + "description": "The path to the directory on the Proxmox node.\n" + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + } + }, + "required": [ + "contents", + "disable", + "directoryId", + "nodes", + "path", + "shared" + ], + "inputProperties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/DirectoryBackups:DirectoryBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "directoryId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "path": { + "type": "string", + "description": "The path to the directory on the Proxmox node.\n" + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + } + }, + "requiredInputs": [ + "directoryId", + "path" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Directory resources.\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/DirectoryBackups:DirectoryBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "directoryId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "path": { + "type": "string", + "description": "The path to the directory on the Proxmox node.\n" + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/file:File": { + "description": "Use this resource to upload files to a Proxmox VE node. The file can be a backup, an ISO image, a Disk Image, a snippet, or a container template depending on the \u003cspan pulumi-lang-nodejs=\"`contentType`\" pulumi-lang-dotnet=\"`ContentType`\" pulumi-lang-go=\"`contentType`\" pulumi-lang-python=\"`content_type`\" pulumi-lang-yaml=\"`contentType`\" pulumi-lang-java=\"`contentType`\"\u003e`content_type`\u003c/span\u003e attribute.\n\n## Example Usage\n\n### Backups (\u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e)\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003e The provider currently does not support restoring backups. You can use the Proxmox VE web interface or the \u003cspan pulumi-lang-nodejs=\"`qmrestore`\" pulumi-lang-dotnet=\"`Qmrestore`\" pulumi-lang-go=\"`qmrestore`\" pulumi-lang-python=\"`qmrestore`\" pulumi-lang-yaml=\"`qmrestore`\" pulumi-lang-java=\"`qmrestore`\"\u003e`qmrestore`\u003c/span\u003e / `pct restore` command to restore VM / Container from a backup.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst backup = new proxmoxve.storage.File(\"backup\", {\n contentType: \"backup\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nbackup = proxmoxve.storage.File(\"backup\",\n content_type=\"backup\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup = new ProxmoxVE.Storage.File(\"backup\", new()\n {\n ContentType = \"backup\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"backup\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"backup\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var backup = new File(\"backup\", FileArgs.builder()\n .contentType(\"backup\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup:\n type: proxmoxve:Storage:File\n properties:\n contentType: backup\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: vzdump-lxc-100-2023_11_08-23_10_05.tar.zst\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Images\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003e Importing Disks is not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource with \u003cspan pulumi-lang-nodejs=\"`contentType \" pulumi-lang-dotnet=\"`ContentType \" pulumi-lang-go=\"`contentType \" pulumi-lang-python=\"`content_type \" pulumi-lang-yaml=\"`contentType \" pulumi-lang-java=\"`contentType \"\u003e`content_type \u003c/span\u003e= \"import\"`.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"iso\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"iso\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"iso\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"iso\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"iso\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: iso\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"import\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceFile: {\n path: \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"import\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_file={\n \"path\": \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"import\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"import\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"import\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: import\n datastoreId: local\n nodeName: pve\n sourceFile:\n path: https://cloud-images.ubuntu.com/jammy/20230929/jammy-server-cloudimg-amd64-disk-kvm.img\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Snippets\n\n\u003e Snippets are not enabled by default in new Proxmox installations. You need to enable them in the 'Datacenter\u003eStorage' section of the proxmox interface before first using this resource.\n\n\u003e The resource with this content type uses SSH access to the node. You might need to configure the \u003cspan pulumi-lang-nodejs=\"`ssh`\" pulumi-lang-dotnet=\"`Ssh`\" pulumi-lang-go=\"`ssh`\" pulumi-lang-python=\"`ssh`\" pulumi-lang-yaml=\"`ssh`\" pulumi-lang-java=\"`ssh`\"\u003e`ssh`\u003c/span\u003e option in the \u003cspan pulumi-lang-nodejs=\"`provider`\" pulumi-lang-dotnet=\"`Provider`\" pulumi-lang-go=\"`provider`\" pulumi-lang-python=\"`provider`\" pulumi-lang-yaml=\"`provider`\" pulumi-lang-java=\"`provider`\"\u003e`provider`\u003c/span\u003e section.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\nimport * as std from \"@pulumi/std\";\n\nconst cloudConfig = new proxmoxve.storage.File(\"cloud_config\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n sourceRaw: {\n data: std.trimspace({\n input: example.publicKeyOpenssh,\n }).then(invoke =\u003e `#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - ${invoke.result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n`),\n fileName: \"example.cloud-config.yaml\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\nimport pulumi_std as std\n\ncloud_config = proxmoxve.storage.File(\"cloud_config\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n source_raw={\n \"data\": f\"\"\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {std.trimspace(input=example[\"publicKeyOpenssh\"]).result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"\"\",\n \"file_name\": \"example.cloud-config.yaml\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudConfig = new ProxmoxVE.Storage.File(\"cloud_config\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = Std.Trimspace.Invoke(new()\n {\n Input = example.PublicKeyOpenssh,\n }).Apply(invoke =\u003e @$\"#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - {invoke.Result}\n sudo: ALL=(ALL) NOPASSWD:ALL\n\"),\n FileName = \"example.cloud-config.yaml\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tinvokeTrimspace, err := std.Trimspace(ctx, \u0026std.TrimspaceArgs{\n\t\t\tInput: example.PublicKeyOpenssh,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewFile(ctx, \"cloud_config\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.Sprintf(`#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %v\n sudo: ALL=(ALL) NOPASSWD:ALL\n`, invokeTrimspace.Result),\n\t\t\t\tFileName: pulumi.String(\"example.cloud-config.yaml\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport com.pulumi.std.StdFunctions;\nimport com.pulumi.std.inputs.TrimspaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudConfig = new File(\"cloudConfig\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#cloud-config\nchpasswd:\n list: |\n ubuntu:example\n expire: false\nhostname: example-hostname\npackages:\n - qemu-guest-agent\nusers:\n - default\n - name: ubuntu\n groups: sudo\n shell: /bin/bash\n ssh-authorized-keys:\n - %s\n sudo: ALL=(ALL) NOPASSWD:ALL\n\", StdFunctions.trimspace(TrimspaceArgs.builder()\n .input(example.publicKeyOpenssh())\n .build()).result()))\n .fileName(\"example.cloud-config.yaml\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudConfig:\n type: proxmoxve:Storage:File\n name: cloud_config\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n sourceRaw:\n data:\n fn::join:\n - \"\"\n - - \"#cloud-config\\nchpasswd:\\n list: |\\n ubuntu:example\\n expire: false\\nhostname: example-hostname\\npackages:\\n - qemu-guest-agent\\nusers:\\n - default\\n - name: ubuntu\\n groups: sudo\\n shell: /bin/bash\\n ssh-authorized-keys:\\n - \"\n - fn::invoke:\n function: std:trimspace\n arguments:\n input: ${example.publicKeyOpenssh}\n return: result\n - |2\n sudo: ALL=(ALL) NOPASSWD:ALL\n fileName: example.cloud-config.yaml\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nThe \u003cspan pulumi-lang-nodejs=\"`fileMode`\" pulumi-lang-dotnet=\"`FileMode`\" pulumi-lang-go=\"`fileMode`\" pulumi-lang-python=\"`file_mode`\" pulumi-lang-yaml=\"`fileMode`\" pulumi-lang-java=\"`fileMode`\"\u003e`file_mode`\u003c/span\u003e attribute can be used to make a script file executable, e.g. when referencing the file in the \u003cspan pulumi-lang-nodejs=\"`hookScriptFileId`\" pulumi-lang-dotnet=\"`HookScriptFileId`\" pulumi-lang-go=\"`hookScriptFileId`\" pulumi-lang-python=\"`hook_script_file_id`\" pulumi-lang-yaml=\"`hookScriptFileId`\" pulumi-lang-java=\"`hookScriptFileId`\"\u003e`hook_script_file_id`\u003c/span\u003e attribute of a container or a VM resource which is a requirement enforced by the Proxmox VE API.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst hookScript = new proxmoxve.storage.File(\"hook_script\", {\n contentType: \"snippets\",\n datastoreId: \"local\",\n nodeName: \"pve\",\n fileMode: \"0700\",\n sourceRaw: {\n data: `#!/usr/bin/env bash\n\necho \\\\\"Running hook script\\\\\"\n`,\n fileName: \"prepare-hook.sh\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nhook_script = proxmoxve.storage.File(\"hook_script\",\n content_type=\"snippets\",\n datastore_id=\"local\",\n node_name=\"pve\",\n file_mode=\"0700\",\n source_raw={\n \"data\": \"\"\"#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n\"\"\",\n \"file_name\": \"prepare-hook.sh\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hookScript = new ProxmoxVE.Storage.File(\"hook_script\", new()\n {\n ContentType = \"snippets\",\n DatastoreId = \"local\",\n NodeName = \"pve\",\n FileMode = \"0700\",\n SourceRaw = new ProxmoxVE.Storage.Inputs.FileSourceRawArgs\n {\n Data = @\"#!/usr/bin/env bash\n\necho \\\"\"Running hook script\\\"\"\n\",\n FileName = \"prepare-hook.sh\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"hook_script\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"snippets\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tFileMode: pulumi.String(\"0700\"),\n\t\t\tSourceRaw: \u0026storage.FileSourceRawArgs{\n\t\t\t\tData: pulumi.String(\"#!/usr/bin/env bash\\n\\necho \\\\\\\"Running hook script\\\\\\\"\\n\"),\n\t\t\t\tFileName: pulumi.String(\"prepare-hook.sh\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceRawArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hookScript = new File(\"hookScript\", FileArgs.builder()\n .contentType(\"snippets\")\n .datastoreId(\"local\")\n .nodeName(\"pve\")\n .fileMode(\"0700\")\n .sourceRaw(FileSourceRawArgs.builder()\n .data(\"\"\"\n#!/usr/bin/env bash\n\necho \\\"Running hook script\\\"\n \"\"\")\n .fileName(\"prepare-hook.sh\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hookScript:\n type: proxmoxve:Storage:File\n name: hook_script\n properties:\n contentType: snippets\n datastoreId: local\n nodeName: pve\n fileMode: '0700'\n sourceRaw:\n data: |\n #!/usr/bin/env bash\n\n echo \\\"Running hook script\\\"\n fileName: prepare-hook.sh\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Container Template (\u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e)\n\n\u003e Consider using \u003cspan pulumi-lang-nodejs=\"`proxmoxve.Download.File`\" pulumi-lang-dotnet=\"`proxmoxve.Download.File`\" pulumi-lang-go=\"`Download.File`\" pulumi-lang-python=\"`Download.File`\" pulumi-lang-yaml=\"`proxmoxve.Download.File`\" pulumi-lang-java=\"`proxmoxve.Download.File`\"\u003e`proxmoxve.Download.File`\u003c/span\u003e resource instead. Using this resource for container images is less efficient (requires to transfer uploaded image to node) though still supported.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst ubuntuContainerTemplate = new proxmoxve.storage.File(\"ubuntu_container_template\", {\n contentType: \"vztmpl\",\n datastoreId: \"local\",\n nodeName: \"first-node\",\n sourceFile: {\n path: \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nubuntu_container_template = proxmoxve.storage.File(\"ubuntu_container_template\",\n content_type=\"vztmpl\",\n datastore_id=\"local\",\n node_name=\"first-node\",\n source_file={\n \"path\": \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ubuntuContainerTemplate = new ProxmoxVE.Storage.File(\"ubuntu_container_template\", new()\n {\n ContentType = \"vztmpl\",\n DatastoreId = \"local\",\n NodeName = \"first-node\",\n SourceFile = new ProxmoxVE.Storage.Inputs.FileSourceFileArgs\n {\n Path = \"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewFile(ctx, \"ubuntu_container_template\", \u0026storage.FileArgs{\n\t\t\tContentType: pulumi.String(\"vztmpl\"),\n\t\t\tDatastoreId: pulumi.String(\"local\"),\n\t\t\tNodeName: pulumi.String(\"first-node\"),\n\t\t\tSourceFile: \u0026storage.FileSourceFileArgs{\n\t\t\t\tPath: pulumi.String(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.File;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.FileArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.FileSourceFileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ubuntuContainerTemplate = new File(\"ubuntuContainerTemplate\", FileArgs.builder()\n .contentType(\"vztmpl\")\n .datastoreId(\"local\")\n .nodeName(\"first-node\")\n .sourceFile(FileSourceFileArgs.builder()\n .path(\"http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ubuntuContainerTemplate:\n type: proxmoxve:Storage:File\n name: ubuntu_container_template\n properties:\n contentType: vztmpl\n datastoreId: local\n nodeName: first-node\n sourceFile:\n path: http://download.proxmox.com/images/system/ubuntu-20.04-standard_20.04-1_amd64.tar.gz\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Important Notes\n\nThe Proxmox VE API endpoint for file uploads does not support chunked transfer\nencoding, which means that we must first store the source file as a temporary\nfile locally before uploading it.\n\nYou must ensure that you have at least `Size-in-MB * 2 + 1` MB of storage space\navailable (twice the size plus overhead because a multipart payload needs to be\ncreated as another temporary file).\n\nBy default, if the specified file already exists, the resource will\nunconditionally replace it and take ownership of the resource. On destruction,\nthe file will be deleted as if it did not exist before. If you want to prevent\nthe resource from replacing the file, set \u003cspan pulumi-lang-nodejs=\"`overwrite`\" pulumi-lang-dotnet=\"`Overwrite`\" pulumi-lang-go=\"`overwrite`\" pulumi-lang-python=\"`overwrite`\" pulumi-lang-yaml=\"`overwrite`\" pulumi-lang-java=\"`overwrite`\"\u003e`overwrite`\u003c/span\u003e to \u003cspan pulumi-lang-nodejs=\"`false`\" pulumi-lang-dotnet=\"`False`\" pulumi-lang-go=\"`false`\" pulumi-lang-python=\"`false`\" pulumi-lang-yaml=\"`false`\" pulumi-lang-java=\"`false`\"\u003e`false`\u003c/span\u003e.\n\n## Import\n\nInstances can be imported using the `node_name`, `datastore_id`, `content_type`\n\nand the `file_name` in the following format:\n\ntext\n\nnode_name:datastore_id/content_type/file_name\n\nExample:\n\nbash\n\n```sh\n$ pulumi import proxmoxve:Storage/file:File cloud_config pve/local:snippets/example.cloud-config.yaml\n```\n\n", + "properties": { + "contentType": { + "type": "string", + "description": "The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n" + }, + "datastoreId": { + "type": "string", + "description": "The datastore id.\n" + }, + "fileMode": { + "type": "string", + "description": "The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n" + }, + "fileModificationDate": { + "type": "string", + "description": "The file modification date (RFC 3339).\n" + }, + "fileName": { + "type": "string", + "description": "The file name.\n" + }, + "fileSize": { + "type": "integer", + "description": "The file size in bytes.\n" + }, + "fileTag": { + "type": "string", + "description": "The file tag.\n" + }, + "nodeName": { + "type": "string", + "description": "The node name.\n" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "sourceFile": { + "$ref": "#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile", + "description": "The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n" + }, + "sourceRaw": { + "$ref": "#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw", + "description": "The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n" + }, + "timeoutUpload": { + "type": "integer", + "description": "Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n" + } + }, + "required": [ + "contentType", + "datastoreId", + "fileModificationDate", + "fileName", + "fileSize", + "fileTag", + "nodeName" + ], + "inputProperties": { + "contentType": { + "type": "string", + "description": "The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n", + "willReplaceOnChanges": true + }, + "datastoreId": { + "type": "string", + "description": "The datastore id.\n", + "willReplaceOnChanges": true + }, + "fileMode": { + "type": "string", + "description": "The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n", + "willReplaceOnChanges": true + }, + "nodeName": { + "type": "string", + "description": "The node name.\n", + "willReplaceOnChanges": true + }, + "overwrite": { + "type": "boolean", + "description": "Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "sourceFile": { + "$ref": "#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile", + "description": "The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n", + "willReplaceOnChanges": true + }, + "sourceRaw": { + "$ref": "#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw", + "description": "The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n", + "willReplaceOnChanges": true + }, + "timeoutUpload": { + "type": "integer", + "description": "Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n" + } + }, + "requiredInputs": [ + "datastoreId", + "nodeName" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering File resources.\n", + "properties": { + "contentType": { + "type": "string", + "description": "The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n", + "willReplaceOnChanges": true + }, + "datastoreId": { + "type": "string", + "description": "The datastore id.\n", + "willReplaceOnChanges": true + }, + "fileMode": { + "type": "string", + "description": "The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n", + "willReplaceOnChanges": true + }, + "fileModificationDate": { + "type": "string", + "description": "The file modification date (RFC 3339).\n", + "willReplaceOnChanges": true + }, + "fileName": { + "type": "string", + "description": "The file name.\n" + }, + "fileSize": { + "type": "integer", + "description": "The file size in bytes.\n", + "willReplaceOnChanges": true + }, + "fileTag": { + "type": "string", + "description": "The file tag.\n", + "willReplaceOnChanges": true + }, + "nodeName": { + "type": "string", + "description": "The node name.\n", + "willReplaceOnChanges": true + }, + "overwrite": { + "type": "boolean", + "description": "Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" + }, + "sourceFile": { + "$ref": "#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile", + "description": "The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n", + "willReplaceOnChanges": true + }, + "sourceRaw": { + "$ref": "#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw", + "description": "The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n", + "willReplaceOnChanges": true + }, + "timeoutUpload": { + "type": "integer", + "description": "Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/lVM:LVM": { + "description": "Manages LVM-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.LVM(\"example\", {\n lvmId: \"example-lvm\",\n nodes: [\"pve\"],\n volumeGroup: \"vg0\",\n contents: [\"images\"],\n wipeRemovedVolumes: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.LVM(\"example\",\n lvm_id=\"example-lvm\",\n nodes=[\"pve\"],\n volume_group=\"vg0\",\n contents=[\"images\"],\n wipe_removed_volumes=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.LVM(\"example\", new()\n {\n LvmId = \"example-lvm\",\n Nodes = new[]\n {\n \"pve\",\n },\n VolumeGroup = \"vg0\",\n Contents = new[]\n {\n \"images\",\n },\n WipeRemovedVolumes = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewLVM(ctx, \"example\", \u0026storage.LVMArgs{\n\t\t\tLvmId: pulumi.String(\"example-lvm\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tVolumeGroup: pulumi.String(\"vg0\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tWipeRemovedVolumes: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVM;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVMArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new LVM(\"example\", LVMArgs.builder()\n .lvmId(\"example-lvm\")\n .nodes(\"pve\")\n .volumeGroup(\"vg0\")\n .contents(\"images\")\n .wipeRemovedVolumes(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:LVM\n properties:\n lvmId: example-lvm\n nodes:\n - pve\n volumeGroup: vg0\n contents:\n - images\n wipeRemovedVolumes: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "lvmId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "volumeGroup": { + "type": "string", + "description": "The name of the volume group to use.\n" + }, + "wipeRemovedVolumes": { + "type": "boolean", + "description": "Whether to zero-out data when removing LVMs.\n" + } + }, + "required": [ + "contents", + "disable", + "lvmId", + "nodes", + "shared", + "volumeGroup", + "wipeRemovedVolumes" + ], + "inputProperties": { + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "lvmId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "volumeGroup": { + "type": "string", + "description": "The name of the volume group to use.\n" + }, + "wipeRemovedVolumes": { + "type": "boolean", + "description": "Whether to zero-out data when removing LVMs.\n" + } + }, + "requiredInputs": [ + "lvmId", + "volumeGroup" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering LVM resources.\n", + "properties": { + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "lvmId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "volumeGroup": { + "type": "string", + "description": "The name of the volume group to use.\n" + }, + "wipeRemovedVolumes": { + "type": "boolean", + "description": "Whether to zero-out data when removing LVMs.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/lVMThin:LVMThin": { + "description": "Manages thin LVM-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.LVMThin(\"example\", {\n lvmThinId: \"example-lvmthin\",\n nodes: [\"pve\"],\n volumeGroup: \"vg0\",\n thinPool: \"data\",\n contents: [\"images\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.LVMThin(\"example\",\n lvm_thin_id=\"example-lvmthin\",\n nodes=[\"pve\"],\n volume_group=\"vg0\",\n thin_pool=\"data\",\n contents=[\"images\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.LVMThin(\"example\", new()\n {\n LvmThinId = \"example-lvmthin\",\n Nodes = new[]\n {\n \"pve\",\n },\n VolumeGroup = \"vg0\",\n ThinPool = \"data\",\n Contents = new[]\n {\n \"images\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewLVMThin(ctx, \"example\", \u0026storage.LVMThinArgs{\n\t\t\tLvmThinId: pulumi.String(\"example-lvmthin\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tVolumeGroup: pulumi.String(\"vg0\"),\n\t\t\tThinPool: pulumi.String(\"data\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVMThin;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.LVMThinArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new LVMThin(\"example\", LVMThinArgs.builder()\n .lvmThinId(\"example-lvmthin\")\n .nodes(\"pve\")\n .volumeGroup(\"vg0\")\n .thinPool(\"data\")\n .contents(\"images\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:LVMThin\n properties:\n lvmThinId: example-lvmthin\n nodes:\n - pve\n volumeGroup: vg0\n thinPool: data\n contents:\n - images\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "lvmThinId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "thinPool": { + "type": "string", + "description": "The name of the LVM thin pool to use.\n" + }, + "volumeGroup": { + "type": "string", + "description": "The name of the volume group to use.\n" + } + }, + "required": [ + "contents", + "disable", + "lvmThinId", + "nodes", + "shared", + "thinPool", + "volumeGroup" + ], + "inputProperties": { + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "lvmThinId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "thinPool": { + "type": "string", + "description": "The name of the LVM thin pool to use.\n" + }, + "volumeGroup": { + "type": "string", + "description": "The name of the volume group to use.\n" + } + }, + "requiredInputs": [ + "lvmThinId", + "thinPool", + "volumeGroup" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering LVMThin resources.\n", + "properties": { + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "lvmThinId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "thinPool": { + "type": "string", + "description": "The name of the LVM thin pool to use.\n" + }, + "volumeGroup": { + "type": "string", + "description": "The name of the volume group to use.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/nFS:NFS": { + "description": "Manages an NFS-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.NFS(\"example\", {\n nfsId: \"example-nfs\",\n nodes: [\"pve\"],\n server: \"10.0.0.10\",\n \"export\": \"/exports/proxmox\",\n contents: [\n \"images\",\n \"iso\",\n \"backup\",\n ],\n options: \"vers=4.2\",\n preallocation: \"metadata\",\n snapshotAsVolumeChain: true,\n backups: {\n maxProtectedBackups: 5,\n keepDaily: 7,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.NFS(\"example\",\n nfs_id=\"example-nfs\",\n nodes=[\"pve\"],\n server=\"10.0.0.10\",\n export=\"/exports/proxmox\",\n contents=[\n \"images\",\n \"iso\",\n \"backup\",\n ],\n options=\"vers=4.2\",\n preallocation=\"metadata\",\n snapshot_as_volume_chain=True,\n backups={\n \"max_protected_backups\": 5,\n \"keep_daily\": 7,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.NFS(\"example\", new()\n {\n NfsId = \"example-nfs\",\n Nodes = new[]\n {\n \"pve\",\n },\n Server = \"10.0.0.10\",\n Export = \"/exports/proxmox\",\n Contents = new[]\n {\n \"images\",\n \"iso\",\n \"backup\",\n },\n Options = \"vers=4.2\",\n Preallocation = \"metadata\",\n SnapshotAsVolumeChain = true,\n Backups = new ProxmoxVE.Storage.Inputs.NFSBackupsArgs\n {\n MaxProtectedBackups = 5,\n KeepDaily = 7,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewNFS(ctx, \"example\", \u0026storage.NFSArgs{\n\t\t\tNfsId: pulumi.String(\"example-nfs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tServer: pulumi.String(\"10.0.0.10\"),\n\t\t\tExport: pulumi.String(\"/exports/proxmox\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t\tpulumi.String(\"iso\"),\n\t\t\t\tpulumi.String(\"backup\"),\n\t\t\t},\n\t\t\tOptions: pulumi.String(\"vers=4.2\"),\n\t\t\tPreallocation: pulumi.String(\"metadata\"),\n\t\t\tSnapshotAsVolumeChain: pulumi.Bool(true),\n\t\t\tBackups: \u0026storage.NFSBackupsArgs{\n\t\t\t\tMaxProtectedBackups: pulumi.Int(5),\n\t\t\t\tKeepDaily: pulumi.Int(7),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.NFS;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.NFSArgs;\nimport com.pulumi.proxmoxve.Storage.inputs.NFSBackupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new NFS(\"example\", NFSArgs.builder()\n .nfsId(\"example-nfs\")\n .nodes(\"pve\")\n .server(\"10.0.0.10\")\n .export(\"/exports/proxmox\")\n .contents( \n \"images\",\n \"iso\",\n \"backup\")\n .options(\"vers=4.2\")\n .preallocation(\"metadata\")\n .snapshotAsVolumeChain(true)\n .backups(NFSBackupsArgs.builder()\n .maxProtectedBackups(5)\n .keepDaily(7)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:NFS\n properties:\n nfsId: example-nfs\n nodes:\n - pve\n server: 10.0.0.10\n export: /exports/proxmox\n contents:\n - images\n - iso\n - backup\n options: vers=4.2\n preallocation: metadata\n snapshotAsVolumeChain: true\n backups:\n maxProtectedBackups: 5\n keepDaily: 7\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/NFSBackups:NFSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "export": { + "type": "string", + "description": "The path of the NFS export.\n" + }, + "nfsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "options": { + "type": "string", + "description": "The options to pass to the NFS service.\n" + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the NFS server.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "snapshotAsVolumeChain": { + "type": "boolean", + "description": "Enable support for creating snapshots through volume backing-chains.\n" + } + }, + "required": [ + "contents", + "disable", + "export", + "nfsId", + "nodes", + "server", + "shared" + ], + "inputProperties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/NFSBackups:NFSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "export": { + "type": "string", + "description": "The path of the NFS export.\n" + }, + "nfsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "options": { + "type": "string", + "description": "The options to pass to the NFS service.\n" + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the NFS server.\n" + }, + "snapshotAsVolumeChain": { + "type": "boolean", + "description": "Enable support for creating snapshots through volume backing-chains.\n" + } + }, + "requiredInputs": [ + "export", + "nfsId", + "server" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering NFS resources.\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/NFSBackups:NFSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "export": { + "type": "string", + "description": "The path of the NFS export.\n" + }, + "nfsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "options": { + "type": "string", + "description": "The options to pass to the NFS service.\n" + }, + "preallocation": { + "type": "string", + "description": "The preallocation mode for raw and qcow2 images.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the NFS server.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "snapshotAsVolumeChain": { + "type": "boolean", + "description": "Enable support for creating snapshots through volume backing-chains.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/pBS:PBS": { + "description": "Manages a Proxmox Backup Server (PBS) storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.PBS(\"example\", {\n pbsId: \"example-pbs\",\n nodes: [\"pve\"],\n server: \"pbs.example.local\",\n datastore: \"backup\",\n username: \"pbs-user\",\n password: \"pbs-password\",\n fingerprint: \"AA:BB:CC:DD:EE:FF\",\n contents: [\"backup\"],\n generateEncryptionKey: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.PBS(\"example\",\n pbs_id=\"example-pbs\",\n nodes=[\"pve\"],\n server=\"pbs.example.local\",\n datastore=\"backup\",\n username=\"pbs-user\",\n password=\"pbs-password\",\n fingerprint=\"AA:BB:CC:DD:EE:FF\",\n contents=[\"backup\"],\n generate_encryption_key=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.PBS(\"example\", new()\n {\n PbsId = \"example-pbs\",\n Nodes = new[]\n {\n \"pve\",\n },\n Server = \"pbs.example.local\",\n Datastore = \"backup\",\n Username = \"pbs-user\",\n Password = \"pbs-password\",\n Fingerprint = \"AA:BB:CC:DD:EE:FF\",\n Contents = new[]\n {\n \"backup\",\n },\n GenerateEncryptionKey = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewPBS(ctx, \"example\", \u0026storage.PBSArgs{\n\t\t\tPbsId: pulumi.String(\"example-pbs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tServer: pulumi.String(\"pbs.example.local\"),\n\t\t\tDatastore: pulumi.String(\"backup\"),\n\t\t\tUsername: pulumi.String(\"pbs-user\"),\n\t\t\tPassword: pulumi.String(\"pbs-password\"),\n\t\t\tFingerprint: pulumi.String(\"AA:BB:CC:DD:EE:FF\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"backup\"),\n\t\t\t},\n\t\t\tGenerateEncryptionKey: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.PBS;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.PBSArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new PBS(\"example\", PBSArgs.builder()\n .pbsId(\"example-pbs\")\n .nodes(\"pve\")\n .server(\"pbs.example.local\")\n .datastore(\"backup\")\n .username(\"pbs-user\")\n .password(\"pbs-password\")\n .fingerprint(\"AA:BB:CC:DD:EE:FF\")\n .contents(\"backup\")\n .generateEncryptionKey(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:PBS\n properties:\n pbsId: example-pbs\n nodes:\n - pve\n server: pbs.example.local\n datastore: backup\n username: pbs-user\n password: pbs-password\n fingerprint: AA:BB:CC:DD:EE:FF\n contents:\n - backup\n generateEncryptionKey: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/PBSBackups:PBSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "datastore": { + "type": "string", + "description": "The name of the datastore on the Proxmox Backup Server.\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "encryptionKey": { + "type": "string", + "description": "An existing encryption key for the datastore. This is a sensitive value. Conflicts with \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e.\n", + "secret": true + }, + "encryptionKeyFingerprint": { + "type": "string", + "description": "The SHA256 fingerprint of the encryption key currently in use.\n" + }, + "fingerprint": { + "type": "string", + "description": "The SHA256 fingerprint of the Proxmox Backup Server's certificate.\n" + }, + "generateEncryptionKey": { + "type": "boolean", + "description": "If set to true, Proxmox will generate a new encryption key. The key will be stored in the \u003cspan pulumi-lang-nodejs=\"`generatedEncryptionKey`\" pulumi-lang-dotnet=\"`GeneratedEncryptionKey`\" pulumi-lang-go=\"`generatedEncryptionKey`\" pulumi-lang-python=\"`generated_encryption_key`\" pulumi-lang-yaml=\"`generatedEncryptionKey`\" pulumi-lang-java=\"`generatedEncryptionKey`\"\u003e`generated_encryption_key`\u003c/span\u003e attribute. Conflicts with \u003cspan pulumi-lang-nodejs=\"`encryptionKey`\" pulumi-lang-dotnet=\"`EncryptionKey`\" pulumi-lang-go=\"`encryptionKey`\" pulumi-lang-python=\"`encryption_key`\" pulumi-lang-yaml=\"`encryptionKey`\" pulumi-lang-java=\"`encryptionKey`\"\u003e`encryption_key`\u003c/span\u003e.\n" + }, + "generatedEncryptionKey": { + "type": "string", + "description": "The encryption key returned by Proxmox when \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e is true.\n", + "secret": true + }, + "namespace": { + "type": "string", + "description": "The namespace to use on the Proxmox Backup Server.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "password": { + "type": "string", + "description": "The password for authenticating with the Proxmox Backup Server.\n", + "secret": true + }, + "pbsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the Proxmox Backup Server.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "username": { + "type": "string", + "description": "The username for authenticating with the Proxmox Backup Server.\n" + } + }, + "required": [ + "contents", + "datastore", + "disable", + "encryptionKeyFingerprint", + "generatedEncryptionKey", + "pbsId", + "nodes", + "password", + "server", + "shared", + "username" + ], + "inputProperties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/PBSBackups:PBSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "datastore": { + "type": "string", + "description": "The name of the datastore on the Proxmox Backup Server.\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "encryptionKey": { + "type": "string", + "description": "An existing encryption key for the datastore. This is a sensitive value. Conflicts with \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e.\n", + "secret": true + }, + "fingerprint": { + "type": "string", + "description": "The SHA256 fingerprint of the Proxmox Backup Server's certificate.\n" + }, + "generateEncryptionKey": { + "type": "boolean", + "description": "If set to true, Proxmox will generate a new encryption key. The key will be stored in the \u003cspan pulumi-lang-nodejs=\"`generatedEncryptionKey`\" pulumi-lang-dotnet=\"`GeneratedEncryptionKey`\" pulumi-lang-go=\"`generatedEncryptionKey`\" pulumi-lang-python=\"`generated_encryption_key`\" pulumi-lang-yaml=\"`generatedEncryptionKey`\" pulumi-lang-java=\"`generatedEncryptionKey`\"\u003e`generated_encryption_key`\u003c/span\u003e attribute. Conflicts with \u003cspan pulumi-lang-nodejs=\"`encryptionKey`\" pulumi-lang-dotnet=\"`EncryptionKey`\" pulumi-lang-go=\"`encryptionKey`\" pulumi-lang-python=\"`encryption_key`\" pulumi-lang-yaml=\"`encryptionKey`\" pulumi-lang-java=\"`encryptionKey`\"\u003e`encryption_key`\u003c/span\u003e.\n" + }, + "namespace": { + "type": "string", + "description": "The namespace to use on the Proxmox Backup Server.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "password": { + "type": "string", + "description": "The password for authenticating with the Proxmox Backup Server.\n", + "secret": true + }, + "pbsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the Proxmox Backup Server.\n" + }, + "username": { + "type": "string", + "description": "The username for authenticating with the Proxmox Backup Server.\n" + } + }, + "requiredInputs": [ + "datastore", + "pbsId", + "password", + "server", + "username" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering PBS resources.\n", + "properties": { + "backups": { + "$ref": "#/types/proxmoxve:Storage/PBSBackups:PBSBackups", + "description": "Configure backup retention settings for the storage type.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "datastore": { + "type": "string", + "description": "The name of the datastore on the Proxmox Backup Server.\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "encryptionKey": { + "type": "string", + "description": "An existing encryption key for the datastore. This is a sensitive value. Conflicts with \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e.\n", + "secret": true + }, + "encryptionKeyFingerprint": { + "type": "string", + "description": "The SHA256 fingerprint of the encryption key currently in use.\n" + }, + "fingerprint": { + "type": "string", + "description": "The SHA256 fingerprint of the Proxmox Backup Server's certificate.\n" + }, + "generateEncryptionKey": { + "type": "boolean", + "description": "If set to true, Proxmox will generate a new encryption key. The key will be stored in the \u003cspan pulumi-lang-nodejs=\"`generatedEncryptionKey`\" pulumi-lang-dotnet=\"`GeneratedEncryptionKey`\" pulumi-lang-go=\"`generatedEncryptionKey`\" pulumi-lang-python=\"`generated_encryption_key`\" pulumi-lang-yaml=\"`generatedEncryptionKey`\" pulumi-lang-java=\"`generatedEncryptionKey`\"\u003e`generated_encryption_key`\u003c/span\u003e attribute. Conflicts with \u003cspan pulumi-lang-nodejs=\"`encryptionKey`\" pulumi-lang-dotnet=\"`EncryptionKey`\" pulumi-lang-go=\"`encryptionKey`\" pulumi-lang-python=\"`encryption_key`\" pulumi-lang-yaml=\"`encryptionKey`\" pulumi-lang-java=\"`encryptionKey`\"\u003e`encryption_key`\u003c/span\u003e.\n" + }, + "generatedEncryptionKey": { + "type": "string", + "description": "The encryption key returned by Proxmox when \u003cspan pulumi-lang-nodejs=\"`generateEncryptionKey`\" pulumi-lang-dotnet=\"`GenerateEncryptionKey`\" pulumi-lang-go=\"`generateEncryptionKey`\" pulumi-lang-python=\"`generate_encryption_key`\" pulumi-lang-yaml=\"`generateEncryptionKey`\" pulumi-lang-java=\"`generateEncryptionKey`\"\u003e`generate_encryption_key`\u003c/span\u003e is true.\n", + "secret": true + }, + "namespace": { + "type": "string", + "description": "The namespace to use on the Proxmox Backup Server.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "password": { + "type": "string", + "description": "The password for authenticating with the Proxmox Backup Server.\n", + "secret": true + }, + "pbsId": { + "type": "string", + "description": "The unique identifier of the storage.\n" + }, + "server": { + "type": "string", + "description": "The IP address or DNS name of the Proxmox Backup Server.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "username": { + "type": "string", + "description": "The username for authenticating with the Proxmox Backup Server.\n" + } + }, + "type": "object" + } + }, + "proxmoxve:Storage/zFSPool:ZFSPool": { + "description": "Manages ZFS-based storage in Proxmox VE.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst example = new proxmoxve.storage.ZFSPool(\"example\", {\n zfsPoolId: \"example-zfs\",\n nodes: [\"pve\"],\n zfsPool: \"rpool/data\",\n contents: [\"images\"],\n thinProvision: true,\n blocksize: \"64k\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nexample = proxmoxve.storage.ZFSPool(\"example\",\n zfs_pool_id=\"example-zfs\",\n nodes=[\"pve\"],\n zfs_pool=\"rpool/data\",\n contents=[\"images\"],\n thin_provision=True,\n blocksize=\"64k\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new ProxmoxVE.Storage.ZFSPool(\"example\", new()\n {\n ZfsPoolId = \"example-zfs\",\n Nodes = new[]\n {\n \"pve\",\n },\n ZfsPool = \"rpool/data\",\n Contents = new[]\n {\n \"images\",\n },\n ThinProvision = true,\n Blocksize = \"64k\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewZFSPool(ctx, \"example\", \u0026storage.ZFSPoolArgs{\n\t\t\tZfsPoolId: pulumi.String(\"example-zfs\"),\n\t\t\tNodes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"pve\"),\n\t\t\t},\n\t\t\tZfsPool: pulumi.String(\"rpool/data\"),\n\t\t\tContents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"images\"),\n\t\t\t},\n\t\t\tThinProvision: pulumi.Bool(true),\n\t\t\tBlocksize: pulumi.String(\"64k\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.ZFSPool;\nimport io.muehlbachler.pulumi.proxmoxve.Storage.ZFSPoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new ZFSPool(\"example\", ZFSPoolArgs.builder()\n .zfsPoolId(\"example-zfs\")\n .nodes(\"pve\")\n .zfsPool(\"rpool/data\")\n .contents(\"images\")\n .thinProvision(true)\n .blocksize(\"64k\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: proxmoxve:Storage:ZFSPool\n properties:\n zfsPoolId: example-zfs\n nodes:\n - pve\n zfsPool: rpool/data\n contents:\n - images\n thinProvision: true\n blocksize: 64k\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "blocksize": { + "type": "string", + "description": "Block size for newly created volumes (e.g. \u003cspan pulumi-lang-nodejs=\"`4k`\" pulumi-lang-dotnet=\"`4k`\" pulumi-lang-go=\"`4k`\" pulumi-lang-python=\"`4k`\" pulumi-lang-yaml=\"`4k`\" pulumi-lang-java=\"`4k`\"\u003e`4k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`8k`\" pulumi-lang-dotnet=\"`8k`\" pulumi-lang-go=\"`8k`\" pulumi-lang-python=\"`8k`\" pulumi-lang-yaml=\"`8k`\" pulumi-lang-java=\"`8k`\"\u003e`8k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`16k`\" pulumi-lang-dotnet=\"`16k`\" pulumi-lang-go=\"`16k`\" pulumi-lang-python=\"`16k`\" pulumi-lang-yaml=\"`16k`\" pulumi-lang-java=\"`16k`\"\u003e`16k`\u003c/span\u003e). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency.\n" + }, + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" + }, + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" + }, + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" + }, + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" + }, + "thinProvision": { + "type": "boolean", + "description": "Whether to enable thin provisioning (\u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e). Thin provisioning allows flexible disk allocation without pre-allocating full space.\n" + }, + "zfsPool": { + "type": "string", + "description": "The name of the ZFS storage pool to use (e.g. \u003cspan pulumi-lang-nodejs=\"`tank`\" pulumi-lang-dotnet=\"`Tank`\" pulumi-lang-go=\"`tank`\" pulumi-lang-python=\"`tank`\" pulumi-lang-yaml=\"`tank`\" pulumi-lang-java=\"`tank`\"\u003e`tank`\u003c/span\u003e, `rpool/data`).\n" + }, + "zfsPoolId": { + "type": "string", + "description": "The unique identifier of the storage.\n" } }, "required": [ - "contentType", - "datastoreId", - "fileModificationDate", - "fileName", - "fileSize", - "fileTag", - "nodeName" + "contents", + "disable", + "zfsPoolId", + "nodes", + "shared", + "zfsPool" ], "inputProperties": { - "contentType": { + "blocksize": { "type": "string", - "description": "The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n", - "willReplaceOnChanges": true + "description": "Block size for newly created volumes (e.g. \u003cspan pulumi-lang-nodejs=\"`4k`\" pulumi-lang-dotnet=\"`4k`\" pulumi-lang-go=\"`4k`\" pulumi-lang-python=\"`4k`\" pulumi-lang-yaml=\"`4k`\" pulumi-lang-java=\"`4k`\"\u003e`4k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`8k`\" pulumi-lang-dotnet=\"`8k`\" pulumi-lang-go=\"`8k`\" pulumi-lang-python=\"`8k`\" pulumi-lang-yaml=\"`8k`\" pulumi-lang-java=\"`8k`\"\u003e`8k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`16k`\" pulumi-lang-dotnet=\"`16k`\" pulumi-lang-go=\"`16k`\" pulumi-lang-python=\"`16k`\" pulumi-lang-yaml=\"`16k`\" pulumi-lang-java=\"`16k`\"\u003e`16k`\u003c/span\u003e). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency.\n" }, - "datastoreId": { - "type": "string", - "description": "The datastore id.\n", - "willReplaceOnChanges": true + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" }, - "fileMode": { - "type": "string", - "description": "The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n", - "willReplaceOnChanges": true + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" }, - "nodeName": { - "type": "string", - "description": "The node name.\n", - "willReplaceOnChanges": true + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" }, - "overwrite": { + "thinProvision": { "type": "boolean", - "description": "Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" - }, - "sourceFile": { - "$ref": "#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile", - "description": "The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n", - "willReplaceOnChanges": true + "description": "Whether to enable thin provisioning (\u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e). Thin provisioning allows flexible disk allocation without pre-allocating full space.\n" }, - "sourceRaw": { - "$ref": "#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw", - "description": "The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n", - "willReplaceOnChanges": true + "zfsPool": { + "type": "string", + "description": "The name of the ZFS storage pool to use (e.g. \u003cspan pulumi-lang-nodejs=\"`tank`\" pulumi-lang-dotnet=\"`Tank`\" pulumi-lang-go=\"`tank`\" pulumi-lang-python=\"`tank`\" pulumi-lang-yaml=\"`tank`\" pulumi-lang-java=\"`tank`\"\u003e`tank`\u003c/span\u003e, `rpool/data`).\n" }, - "timeoutUpload": { - "type": "integer", - "description": "Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n" + "zfsPoolId": { + "type": "string", + "description": "The unique identifier of the storage.\n" } }, "requiredInputs": [ - "datastoreId", - "nodeName" + "zfsPoolId", + "zfsPool" ], "stateInputs": { - "description": "Input properties used for looking up and filtering File resources.\n", + "description": "Input properties used for looking up and filtering ZFSPool resources.\n", "properties": { - "contentType": { + "blocksize": { "type": "string", - "description": "The content type. If not specified, the content\ntype will be inferred from the file extension. Valid values are:\n", - "willReplaceOnChanges": true + "description": "Block size for newly created volumes (e.g. \u003cspan pulumi-lang-nodejs=\"`4k`\" pulumi-lang-dotnet=\"`4k`\" pulumi-lang-go=\"`4k`\" pulumi-lang-python=\"`4k`\" pulumi-lang-yaml=\"`4k`\" pulumi-lang-java=\"`4k`\"\u003e`4k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`8k`\" pulumi-lang-dotnet=\"`8k`\" pulumi-lang-go=\"`8k`\" pulumi-lang-python=\"`8k`\" pulumi-lang-yaml=\"`8k`\" pulumi-lang-java=\"`8k`\"\u003e`8k`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`16k`\" pulumi-lang-dotnet=\"`16k`\" pulumi-lang-go=\"`16k`\" pulumi-lang-python=\"`16k`\" pulumi-lang-yaml=\"`16k`\" pulumi-lang-java=\"`16k`\"\u003e`16k`\u003c/span\u003e). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency.\n" }, - "datastoreId": { - "type": "string", - "description": "The datastore id.\n", - "willReplaceOnChanges": true + "contents": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The content types that can be stored on this storage. Valid values: \u003cspan pulumi-lang-nodejs=\"`backup`\" pulumi-lang-dotnet=\"`Backup`\" pulumi-lang-go=\"`backup`\" pulumi-lang-python=\"`backup`\" pulumi-lang-yaml=\"`backup`\" pulumi-lang-java=\"`backup`\"\u003e`backup`\u003c/span\u003e (VM backups), \u003cspan pulumi-lang-nodejs=\"`images`\" pulumi-lang-dotnet=\"`Images`\" pulumi-lang-go=\"`images`\" pulumi-lang-python=\"`images`\" pulumi-lang-yaml=\"`images`\" pulumi-lang-java=\"`images`\"\u003e`images`\u003c/span\u003e (VM disk images), \u003cspan pulumi-lang-nodejs=\"`import`\" pulumi-lang-dotnet=\"`Import`\" pulumi-lang-go=\"`import`\" pulumi-lang-python=\"`import`\" pulumi-lang-yaml=\"`import`\" pulumi-lang-java=\"`import`\"\u003e`import`\u003c/span\u003e (VM disk images for import), \u003cspan pulumi-lang-nodejs=\"`iso`\" pulumi-lang-dotnet=\"`Iso`\" pulumi-lang-go=\"`iso`\" pulumi-lang-python=\"`iso`\" pulumi-lang-yaml=\"`iso`\" pulumi-lang-java=\"`iso`\"\u003e`iso`\u003c/span\u003e (ISO images), \u003cspan pulumi-lang-nodejs=\"`rootdir`\" pulumi-lang-dotnet=\"`Rootdir`\" pulumi-lang-go=\"`rootdir`\" pulumi-lang-python=\"`rootdir`\" pulumi-lang-yaml=\"`rootdir`\" pulumi-lang-java=\"`rootdir`\"\u003e`rootdir`\u003c/span\u003e (container root directories), \u003cspan pulumi-lang-nodejs=\"`snippets`\" pulumi-lang-dotnet=\"`Snippets`\" pulumi-lang-go=\"`snippets`\" pulumi-lang-python=\"`snippets`\" pulumi-lang-yaml=\"`snippets`\" pulumi-lang-java=\"`snippets`\"\u003e`snippets`\u003c/span\u003e (cloud-init, hook scripts, etc.), \u003cspan pulumi-lang-nodejs=\"`vztmpl`\" pulumi-lang-dotnet=\"`Vztmpl`\" pulumi-lang-go=\"`vztmpl`\" pulumi-lang-python=\"`vztmpl`\" pulumi-lang-yaml=\"`vztmpl`\" pulumi-lang-java=\"`vztmpl`\"\u003e`vztmpl`\u003c/span\u003e (container templates).\n" }, - "fileMode": { - "type": "string", - "description": "The file mode in octal format, e.g. \u003cspan pulumi-lang-nodejs=\"`0700`\" pulumi-lang-dotnet=\"`0700`\" pulumi-lang-go=\"`0700`\" pulumi-lang-python=\"`0700`\" pulumi-lang-yaml=\"`0700`\" pulumi-lang-java=\"`0700`\"\u003e`0700`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`600`\" pulumi-lang-dotnet=\"`600`\" pulumi-lang-go=\"`600`\" pulumi-lang-python=\"`600`\" pulumi-lang-yaml=\"`600`\" pulumi-lang-java=\"`600`\"\u003e`600`\u003c/span\u003e. Note that the prefixes \u003cspan pulumi-lang-nodejs=\"`0o`\" pulumi-lang-dotnet=\"`0o`\" pulumi-lang-go=\"`0o`\" pulumi-lang-python=\"`0o`\" pulumi-lang-yaml=\"`0o`\" pulumi-lang-java=\"`0o`\"\u003e`0o`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`0x`\" pulumi-lang-dotnet=\"`0x`\" pulumi-lang-go=\"`0x`\" pulumi-lang-python=\"`0x`\" pulumi-lang-yaml=\"`0x`\" pulumi-lang-java=\"`0x`\"\u003e`0x`\u003c/span\u003e is not supported! Setting this attribute is also only allowed for `root@pam` authenticated user.\n", - "willReplaceOnChanges": true + "disable": { + "type": "boolean", + "description": "Whether the storage is disabled.\n" }, - "fileModificationDate": { - "type": "string", - "description": "The file modification date (RFC 3339).\n", - "willReplaceOnChanges": true + "nodes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of nodes where this storage is available.\n" }, - "fileName": { - "type": "string", - "description": "The file name.\n" + "shared": { + "type": "boolean", + "description": "Whether the storage is shared across all nodes.\n" }, - "fileSize": { - "type": "integer", - "description": "The file size in bytes.\n", - "willReplaceOnChanges": true + "thinProvision": { + "type": "boolean", + "description": "Whether to enable thin provisioning (\u003cspan pulumi-lang-nodejs=\"`on`\" pulumi-lang-dotnet=\"`On`\" pulumi-lang-go=\"`on`\" pulumi-lang-python=\"`on`\" pulumi-lang-yaml=\"`on`\" pulumi-lang-java=\"`on`\"\u003e`on`\u003c/span\u003e or \u003cspan pulumi-lang-nodejs=\"`off`\" pulumi-lang-dotnet=\"`Off`\" pulumi-lang-go=\"`off`\" pulumi-lang-python=\"`off`\" pulumi-lang-yaml=\"`off`\" pulumi-lang-java=\"`off`\"\u003e`off`\u003c/span\u003e). Thin provisioning allows flexible disk allocation without pre-allocating full space.\n" }, - "fileTag": { + "zfsPool": { "type": "string", - "description": "The file tag.\n", - "willReplaceOnChanges": true + "description": "The name of the ZFS storage pool to use (e.g. \u003cspan pulumi-lang-nodejs=\"`tank`\" pulumi-lang-dotnet=\"`Tank`\" pulumi-lang-go=\"`tank`\" pulumi-lang-python=\"`tank`\" pulumi-lang-yaml=\"`tank`\" pulumi-lang-java=\"`tank`\"\u003e`tank`\u003c/span\u003e, `rpool/data`).\n" }, - "nodeName": { + "zfsPoolId": { "type": "string", - "description": "The node name.\n", - "willReplaceOnChanges": true - }, - "overwrite": { - "type": "boolean", - "description": "Whether to overwrite an existing file (defaults to\n\u003cspan pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\"\u003e`true`\u003c/span\u003e).\n" - }, - "sourceFile": { - "$ref": "#/types/proxmoxve:Storage/FileSourceFile:FileSourceFile", - "description": "The source file (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceRaw`\" pulumi-lang-dotnet=\"`SourceRaw`\" pulumi-lang-go=\"`sourceRaw`\" pulumi-lang-python=\"`source_raw`\" pulumi-lang-yaml=\"`sourceRaw`\" pulumi-lang-java=\"`sourceRaw`\"\u003e`source_raw`\u003c/span\u003e),\ncould be a local file or a URL. If the source file is a URL, the file will\nbe downloaded and stored locally before uploading it to Proxmox VE.\n", - "willReplaceOnChanges": true - }, - "sourceRaw": { - "$ref": "#/types/proxmoxve:Storage/FileSourceRaw:FileSourceRaw", - "description": "The raw source (conflicts with \u003cspan pulumi-lang-nodejs=\"`sourceFile`\" pulumi-lang-dotnet=\"`SourceFile`\" pulumi-lang-go=\"`sourceFile`\" pulumi-lang-python=\"`source_file`\" pulumi-lang-yaml=\"`sourceFile`\" pulumi-lang-java=\"`sourceFile`\"\u003e`source_file`\u003c/span\u003e).\n", - "willReplaceOnChanges": true - }, - "timeoutUpload": { - "type": "integer", - "description": "Timeout for uploading ISO/VSTMPL files in\nseconds (defaults to 1800).\n" + "description": "The unique identifier of the storage.\n" } }, "type": "object" @@ -7739,56 +10491,328 @@ "inputProperties": { "comment": { "type": "string", - "description": "Comment for the token.\n" + "description": "Comment for the token.\n" + }, + "expirationDate": { + "type": "string", + "description": "Expiration date for the token.\n" + }, + "privilegesSeparation": { + "type": "boolean", + "description": "Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n" + }, + "tokenName": { + "type": "string", + "description": "User-specific token identifier.\n" + }, + "userId": { + "type": "string", + "description": "User identifier.\n" + } + }, + "requiredInputs": [ + "tokenName", + "userId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Token resources.\n", + "properties": { + "comment": { + "type": "string", + "description": "Comment for the token.\n" + }, + "expirationDate": { + "type": "string", + "description": "Expiration date for the token.\n" + }, + "privilegesSeparation": { + "type": "boolean", + "description": "Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n" + }, + "tokenName": { + "type": "string", + "description": "User-specific token identifier.\n" + }, + "userId": { + "type": "string", + "description": "User identifier.\n" + }, + "value": { + "type": "string", + "description": "API token value used for authentication. It is populated only when creating a new token, and can't be retrieved at import.\n", + "secret": true + } + }, + "type": "object" + } + }, + "proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine": { + "description": "## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\n// Example 1: Basic clone with minimal management\nconst basicClone = new proxmoxve.vm.ClonedVirtualMachine(\"basic_clone\", {\n nodeName: \"pve\",\n name: \"basic-clone\",\n clone: {\n sourceVmId: 100,\n full: true,\n },\n cpu: {\n cores: 4,\n },\n});\n// Example 2: Clone with explicit network management\nconst networkManaged = new proxmoxve.vm.ClonedVirtualMachine(\"network_managed\", {\n nodeName: \"pve\",\n name: \"network-clone\",\n clone: {\n sourceVmId: 100,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n tag: 100,\n },\n net1: {\n bridge: \"vmbr1\",\n model: \"virtio\",\n firewall: true,\n macAddress: \"BC:24:11:2E:C5:00\",\n },\n },\n cpu: {\n cores: 2,\n },\n});\n// Example 3: Clone with disk management\nconst diskManaged = new proxmoxve.vm.ClonedVirtualMachine(\"disk_managed\", {\n nodeName: \"pve\",\n name: \"disk-clone\",\n clone: {\n sourceVmId: 100,\n targetDatastore: \"local-lvm\",\n },\n disk: {\n scsi0: {\n datastoreId: \"local-lvm\",\n sizeGb: 50,\n discard: \"on\",\n ssd: true,\n },\n scsi1: {\n datastoreId: \"local-lvm\",\n sizeGb: 100,\n backup: false,\n },\n },\n});\n// Example 4: Clone with explicit device deletion\nconst selectiveDelete = new proxmoxve.vm.ClonedVirtualMachine(\"selective_delete\", {\n nodeName: \"pve\",\n name: \"minimal-clone\",\n clone: {\n sourceVmId: 100,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n },\n },\n \"delete\": {\n networks: [\n \"net1\",\n \"net2\",\n ],\n },\n});\n// Example 5: Full-featured clone with multiple settings\nconst fullFeatured = new proxmoxve.vm.ClonedVirtualMachine(\"full_featured\", {\n nodeName: \"pve\",\n name: \"production-vm\",\n description: \"Production VM cloned from template\",\n tags: [\n \"production\",\n \"web\",\n ],\n clone: {\n sourceVmId: 100,\n sourceNodeName: \"pve\",\n full: true,\n targetDatastore: \"local-lvm\",\n retries: 3,\n },\n cpu: {\n cores: 8,\n sockets: 1,\n architecture: \"x86_64\",\n type: \"host\",\n },\n memory: {\n size: 8192,\n balloon: 2048,\n shares: 2000,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n tag: 100,\n firewall: true,\n rateLimit: 100,\n },\n },\n disk: {\n scsi0: {\n datastoreId: \"local-lvm\",\n sizeGb: 100,\n discard: \"on\",\n iothread: true,\n ssd: true,\n cache: \"writethrough\",\n },\n },\n vga: {\n type: \"std\",\n memory: 16,\n },\n \"delete\": {\n disks: [\"ide2\"],\n },\n stopOnDestroy: false,\n purgeOnDestroy: true,\n deleteUnreferencedDisksOnDestroy: false,\n timeouts: {\n create: \"30m\",\n update: \"30m\",\n \"delete\": \"10m\",\n },\n});\n// Example 6: Linked clone for testing\nconst testClone = new proxmoxve.vm.ClonedVirtualMachine(\"test_clone\", {\n nodeName: \"pve\",\n name: \"test-vm\",\n clone: {\n sourceVmId: 100,\n full: false,\n },\n cpu: {\n cores: 2,\n },\n network: {\n net0: {\n bridge: \"vmbr0\",\n model: \"virtio\",\n },\n },\n});\n// Example 7: Clone with pool assignment\nconst pooledClone = new proxmoxve.vm.ClonedVirtualMachine(\"pooled_clone\", {\n nodeName: \"pve\",\n name: \"pooled-vm\",\n clone: {\n sourceVmId: 100,\n poolId: \"production\",\n },\n cpu: {\n cores: 4,\n },\n});\n// Example 8: Import existing cloned VM\nconst imported = new proxmoxve.vm.ClonedVirtualMachine(\"imported\", {\n vmId: \"123\",\n nodeName: \"pve\",\n clone: {\n sourceVmId: 100,\n },\n cpu: {\n cores: 4,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\n# Example 1: Basic clone with minimal management\nbasic_clone = proxmoxve.vm.ClonedVirtualMachine(\"basic_clone\",\n node_name=\"pve\",\n name=\"basic-clone\",\n clone={\n \"source_vm_id\": 100,\n \"full\": True,\n },\n cpu={\n \"cores\": 4,\n })\n# Example 2: Clone with explicit network management\nnetwork_managed = proxmoxve.vm.ClonedVirtualMachine(\"network_managed\",\n node_name=\"pve\",\n name=\"network-clone\",\n clone={\n \"source_vm_id\": 100,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n \"tag\": 100,\n },\n \"net1\": {\n \"bridge\": \"vmbr1\",\n \"model\": \"virtio\",\n \"firewall\": True,\n \"mac_address\": \"BC:24:11:2E:C5:00\",\n },\n },\n cpu={\n \"cores\": 2,\n })\n# Example 3: Clone with disk management\ndisk_managed = proxmoxve.vm.ClonedVirtualMachine(\"disk_managed\",\n node_name=\"pve\",\n name=\"disk-clone\",\n clone={\n \"source_vm_id\": 100,\n \"target_datastore\": \"local-lvm\",\n },\n disk={\n \"scsi0\": {\n \"datastore_id\": \"local-lvm\",\n \"size_gb\": 50,\n \"discard\": \"on\",\n \"ssd\": True,\n },\n \"scsi1\": {\n \"datastore_id\": \"local-lvm\",\n \"size_gb\": 100,\n \"backup\": False,\n },\n })\n# Example 4: Clone with explicit device deletion\nselective_delete = proxmoxve.vm.ClonedVirtualMachine(\"selective_delete\",\n node_name=\"pve\",\n name=\"minimal-clone\",\n clone={\n \"source_vm_id\": 100,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n },\n },\n delete={\n \"networks\": [\n \"net1\",\n \"net2\",\n ],\n })\n# Example 5: Full-featured clone with multiple settings\nfull_featured = proxmoxve.vm.ClonedVirtualMachine(\"full_featured\",\n node_name=\"pve\",\n name=\"production-vm\",\n description=\"Production VM cloned from template\",\n tags=[\n \"production\",\n \"web\",\n ],\n clone={\n \"source_vm_id\": 100,\n \"source_node_name\": \"pve\",\n \"full\": True,\n \"target_datastore\": \"local-lvm\",\n \"retries\": 3,\n },\n cpu={\n \"cores\": 8,\n \"sockets\": 1,\n \"architecture\": \"x86_64\",\n \"type\": \"host\",\n },\n memory={\n \"size\": 8192,\n \"balloon\": 2048,\n \"shares\": 2000,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n \"tag\": 100,\n \"firewall\": True,\n \"rate_limit\": 100,\n },\n },\n disk={\n \"scsi0\": {\n \"datastore_id\": \"local-lvm\",\n \"size_gb\": 100,\n \"discard\": \"on\",\n \"iothread\": True,\n \"ssd\": True,\n \"cache\": \"writethrough\",\n },\n },\n vga={\n \"type\": \"std\",\n \"memory\": 16,\n },\n delete={\n \"disks\": [\"ide2\"],\n },\n stop_on_destroy=False,\n purge_on_destroy=True,\n delete_unreferenced_disks_on_destroy=False,\n timeouts={\n \"create\": \"30m\",\n \"update\": \"30m\",\n \"delete\": \"10m\",\n })\n# Example 6: Linked clone for testing\ntest_clone = proxmoxve.vm.ClonedVirtualMachine(\"test_clone\",\n node_name=\"pve\",\n name=\"test-vm\",\n clone={\n \"source_vm_id\": 100,\n \"full\": False,\n },\n cpu={\n \"cores\": 2,\n },\n network={\n \"net0\": {\n \"bridge\": \"vmbr0\",\n \"model\": \"virtio\",\n },\n })\n# Example 7: Clone with pool assignment\npooled_clone = proxmoxve.vm.ClonedVirtualMachine(\"pooled_clone\",\n node_name=\"pve\",\n name=\"pooled-vm\",\n clone={\n \"source_vm_id\": 100,\n \"pool_id\": \"production\",\n },\n cpu={\n \"cores\": 4,\n })\n# Example 8: Import existing cloned VM\nimported = proxmoxve.vm.ClonedVirtualMachine(\"imported\",\n vm_id=\"123\",\n node_name=\"pve\",\n clone={\n \"source_vm_id\": 100,\n },\n cpu={\n \"cores\": 4,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Example 1: Basic clone with minimal management\n var basicClone = new ProxmoxVE.VM.ClonedVirtualMachine(\"basic_clone\", new()\n {\n NodeName = \"pve\",\n Name = \"basic-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n Full = true,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 4,\n },\n });\n\n // Example 2: Clone with explicit network management\n var networkManaged = new ProxmoxVE.VM.ClonedVirtualMachine(\"network_managed\", new()\n {\n NodeName = \"pve\",\n Name = \"network-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n Tag = 100,\n } },\n { \"net1\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr1\",\n Model = \"virtio\",\n Firewall = true,\n MacAddress = \"BC:24:11:2E:C5:00\",\n } },\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 2,\n },\n });\n\n // Example 3: Clone with disk management\n var diskManaged = new ProxmoxVE.VM.ClonedVirtualMachine(\"disk_managed\", new()\n {\n NodeName = \"pve\",\n Name = \"disk-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n TargetDatastore = \"local-lvm\",\n },\n Disk = \n {\n { \"scsi0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n SizeGb = 50,\n Discard = \"on\",\n Ssd = true,\n } },\n { \"scsi1\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n SizeGb = 100,\n Backup = false,\n } },\n },\n });\n\n // Example 4: Clone with explicit device deletion\n var selectiveDelete = new ProxmoxVE.VM.ClonedVirtualMachine(\"selective_delete\", new()\n {\n NodeName = \"pve\",\n Name = \"minimal-clone\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n } },\n },\n Delete = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDeleteArgs\n {\n Networks = new[]\n {\n \"net1\",\n \"net2\",\n },\n },\n });\n\n // Example 5: Full-featured clone with multiple settings\n var fullFeatured = new ProxmoxVE.VM.ClonedVirtualMachine(\"full_featured\", new()\n {\n NodeName = \"pve\",\n Name = \"production-vm\",\n Description = \"Production VM cloned from template\",\n Tags = new[]\n {\n \"production\",\n \"web\",\n },\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n SourceNodeName = \"pve\",\n Full = true,\n TargetDatastore = \"local-lvm\",\n Retries = 3,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 8,\n Sockets = 1,\n Architecture = \"x86_64\",\n Type = \"host\",\n },\n Memory = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineMemoryArgs\n {\n Size = 8192,\n Balloon = 2048,\n Shares = 2000,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n Tag = 100,\n Firewall = true,\n RateLimit = 100,\n } },\n },\n Disk = \n {\n { \"scsi0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs\n {\n DatastoreId = \"local-lvm\",\n SizeGb = 100,\n Discard = \"on\",\n Iothread = true,\n Ssd = true,\n Cache = \"writethrough\",\n } },\n },\n Vga = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineVgaArgs\n {\n Type = \"std\",\n Memory = 16,\n },\n Delete = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDeleteArgs\n {\n Disks = new[]\n {\n \"ide2\",\n },\n },\n StopOnDestroy = false,\n PurgeOnDestroy = true,\n DeleteUnreferencedDisksOnDestroy = false,\n Timeouts = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineTimeoutsArgs\n {\n Create = \"30m\",\n Update = \"30m\",\n Delete = \"10m\",\n },\n });\n\n // Example 6: Linked clone for testing\n var testClone = new ProxmoxVE.VM.ClonedVirtualMachine(\"test_clone\", new()\n {\n NodeName = \"pve\",\n Name = \"test-vm\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n Full = false,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 2,\n },\n Network = \n {\n { \"net0\", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs\n {\n Bridge = \"vmbr0\",\n Model = \"virtio\",\n } },\n },\n });\n\n // Example 7: Clone with pool assignment\n var pooledClone = new ProxmoxVE.VM.ClonedVirtualMachine(\"pooled_clone\", new()\n {\n NodeName = \"pve\",\n Name = \"pooled-vm\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n PoolId = \"production\",\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 4,\n },\n });\n\n // Example 8: Import existing cloned VM\n var imported = new ProxmoxVE.VM.ClonedVirtualMachine(\"imported\", new()\n {\n VmId = \"123\",\n NodeName = \"pve\",\n Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs\n {\n SourceVmId = 100,\n },\n Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs\n {\n Cores = 4,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// Example 1: Basic clone with minimal management\n\t\t_, err := vm.NewClonedVirtualMachine(ctx, \"basic_clone\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"basic-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tFull: pulumi.Bool(true),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(4),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 2: Clone with explicit network management\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"network_managed\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"network-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t\tTag: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t\t\"net1\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr1\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t\tFirewall: pulumi.Bool(true),\n\t\t\t\t\tMacAddress: pulumi.String(\"BC:24:11:2E:C5:00\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 3: Clone with disk management\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"disk_managed\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"disk-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tTargetDatastore: pulumi.String(\"local-lvm\"),\n\t\t\t},\n\t\t\tDisk: vm.ClonedVirtualMachineDiskMap{\n\t\t\t\t\"scsi0\": \u0026vm.ClonedVirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSizeGb: pulumi.Int(50),\n\t\t\t\t\tDiscard: pulumi.String(\"on\"),\n\t\t\t\t\tSsd: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\t\"scsi1\": \u0026vm.ClonedVirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSizeGb: pulumi.Int(100),\n\t\t\t\t\tBackup: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 4: Clone with explicit device deletion\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"selective_delete\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"minimal-clone\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDelete: \u0026vm.ClonedVirtualMachineDeleteArgs{\n\t\t\t\tNetworks: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"net1\"),\n\t\t\t\t\tpulumi.String(\"net2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 5: Full-featured clone with multiple settings\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"full_featured\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"production-vm\"),\n\t\t\tDescription: pulumi.String(\"Production VM cloned from template\"),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"production\"),\n\t\t\t\tpulumi.String(\"web\"),\n\t\t\t},\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tSourceNodeName: pulumi.String(\"pve\"),\n\t\t\t\tFull: pulumi.Bool(true),\n\t\t\t\tTargetDatastore: pulumi.String(\"local-lvm\"),\n\t\t\t\tRetries: pulumi.Int(3),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(8),\n\t\t\t\tSockets: pulumi.Int(1),\n\t\t\t\tArchitecture: pulumi.String(\"x86_64\"),\n\t\t\t\tType: pulumi.String(\"host\"),\n\t\t\t},\n\t\t\tMemory: \u0026vm.ClonedVirtualMachineMemoryArgs{\n\t\t\t\tSize: pulumi.Int(8192),\n\t\t\t\tBalloon: pulumi.Int(2048),\n\t\t\t\tShares: pulumi.Int(2000),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t\tTag: pulumi.Int(100),\n\t\t\t\t\tFirewall: pulumi.Bool(true),\n\t\t\t\t\tRateLimit: pulumi.Float64(100),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisk: vm.ClonedVirtualMachineDiskMap{\n\t\t\t\t\"scsi0\": \u0026vm.ClonedVirtualMachineDiskArgs{\n\t\t\t\t\tDatastoreId: pulumi.String(\"local-lvm\"),\n\t\t\t\t\tSizeGb: pulumi.Int(100),\n\t\t\t\t\tDiscard: pulumi.String(\"on\"),\n\t\t\t\t\tIothread: pulumi.Bool(true),\n\t\t\t\t\tSsd: pulumi.Bool(true),\n\t\t\t\t\tCache: pulumi.String(\"writethrough\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVga: \u0026vm.ClonedVirtualMachineVgaArgs{\n\t\t\t\tType: pulumi.String(\"std\"),\n\t\t\t\tMemory: pulumi.Int(16),\n\t\t\t},\n\t\t\tDelete: \u0026vm.ClonedVirtualMachineDeleteArgs{\n\t\t\t\tDisks: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ide2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tStopOnDestroy: pulumi.Bool(false),\n\t\t\tPurgeOnDestroy: pulumi.Bool(true),\n\t\t\tDeleteUnreferencedDisksOnDestroy: pulumi.Bool(false),\n\t\t\tTimeouts: \u0026vm.ClonedVirtualMachineTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"30m\"),\n\t\t\t\tUpdate: pulumi.String(\"30m\"),\n\t\t\t\tDelete: pulumi.String(\"10m\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 6: Linked clone for testing\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"test_clone\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"test-vm\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tFull: pulumi.Bool(false),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(2),\n\t\t\t},\n\t\t\tNetwork: vm.ClonedVirtualMachineNetworkMap{\n\t\t\t\t\"net0\": \u0026vm.ClonedVirtualMachineNetworkArgs{\n\t\t\t\t\tBridge: pulumi.String(\"vmbr0\"),\n\t\t\t\t\tModel: pulumi.String(\"virtio\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 7: Clone with pool assignment\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"pooled_clone\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tName: pulumi.String(\"pooled-vm\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t\tPoolId: pulumi.String(\"production\"),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(4),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Example 8: Import existing cloned VM\n\t\t_, err = vm.NewClonedVirtualMachine(ctx, \"imported\", \u0026vm.ClonedVirtualMachineArgs{\n\t\t\tVmId: pulumi.String(\"123\"),\n\t\t\tNodeName: pulumi.String(\"pve\"),\n\t\t\tClone: \u0026vm.ClonedVirtualMachineCloneArgs{\n\t\t\t\tSourceVmId: pulumi.Int(100),\n\t\t\t},\n\t\t\tCpu: \u0026vm.ClonedVirtualMachineCpuArgs{\n\t\t\t\tCores: pulumi.Int(4),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport io.muehlbachler.pulumi.proxmoxve.VM.ClonedVirtualMachine;\nimport io.muehlbachler.pulumi.proxmoxve.VM.ClonedVirtualMachineArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCloneArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCpuArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineDeleteArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineMemoryArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineVgaArgs;\nimport com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineTimeoutsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // Example 1: Basic clone with minimal management\n var basicClone = new ClonedVirtualMachine(\"basicClone\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"basic-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .full(true)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(4)\n .build())\n .build());\n\n // Example 2: Clone with explicit network management\n var networkManaged = new ClonedVirtualMachine(\"networkManaged\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"network-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .build())\n .network(Map.ofEntries(\n Map.entry(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .tag(100)\n .build()),\n Map.entry(\"net1\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr1\")\n .model(\"virtio\")\n .firewall(true)\n .macAddress(\"BC:24:11:2E:C5:00\")\n .build())\n ))\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(2)\n .build())\n .build());\n\n // Example 3: Clone with disk management\n var diskManaged = new ClonedVirtualMachine(\"diskManaged\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"disk-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .targetDatastore(\"local-lvm\")\n .build())\n .disk(Map.ofEntries(\n Map.entry(\"scsi0\", ClonedVirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .sizeGb(50)\n .discard(\"on\")\n .ssd(true)\n .build()),\n Map.entry(\"scsi1\", ClonedVirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .sizeGb(100)\n .backup(false)\n .build())\n ))\n .build());\n\n // Example 4: Clone with explicit device deletion\n var selectiveDelete = new ClonedVirtualMachine(\"selectiveDelete\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"minimal-clone\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .build())\n .network(Map.of(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .build()))\n .delete(ClonedVirtualMachineDeleteArgs.builder()\n .networks( \n \"net1\",\n \"net2\")\n .build())\n .build());\n\n // Example 5: Full-featured clone with multiple settings\n var fullFeatured = new ClonedVirtualMachine(\"fullFeatured\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"production-vm\")\n .description(\"Production VM cloned from template\")\n .tags( \n \"production\",\n \"web\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .sourceNodeName(\"pve\")\n .full(true)\n .targetDatastore(\"local-lvm\")\n .retries(3)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(8)\n .sockets(1)\n .architecture(\"x86_64\")\n .type(\"host\")\n .build())\n .memory(ClonedVirtualMachineMemoryArgs.builder()\n .size(8192)\n .balloon(2048)\n .shares(2000)\n .build())\n .network(Map.of(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .tag(100)\n .firewall(true)\n .rateLimit(100.0)\n .build()))\n .disk(Map.of(\"scsi0\", ClonedVirtualMachineDiskArgs.builder()\n .datastoreId(\"local-lvm\")\n .sizeGb(100)\n .discard(\"on\")\n .iothread(true)\n .ssd(true)\n .cache(\"writethrough\")\n .build()))\n .vga(ClonedVirtualMachineVgaArgs.builder()\n .type(\"std\")\n .memory(16)\n .build())\n .delete(ClonedVirtualMachineDeleteArgs.builder()\n .disks(\"ide2\")\n .build())\n .stopOnDestroy(false)\n .purgeOnDestroy(true)\n .deleteUnreferencedDisksOnDestroy(false)\n .timeouts(ClonedVirtualMachineTimeoutsArgs.builder()\n .create(\"30m\")\n .update(\"30m\")\n .delete(\"10m\")\n .build())\n .build());\n\n // Example 6: Linked clone for testing\n var testClone = new ClonedVirtualMachine(\"testClone\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"test-vm\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .full(false)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(2)\n .build())\n .network(Map.of(\"net0\", ClonedVirtualMachineNetworkArgs.builder()\n .bridge(\"vmbr0\")\n .model(\"virtio\")\n .build()))\n .build());\n\n // Example 7: Clone with pool assignment\n var pooledClone = new ClonedVirtualMachine(\"pooledClone\", ClonedVirtualMachineArgs.builder()\n .nodeName(\"pve\")\n .name(\"pooled-vm\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .poolId(\"production\")\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(4)\n .build())\n .build());\n\n // Example 8: Import existing cloned VM\n var imported = new ClonedVirtualMachine(\"imported\", ClonedVirtualMachineArgs.builder()\n .vmId(\"123\")\n .nodeName(\"pve\")\n .clone(ClonedVirtualMachineCloneArgs.builder()\n .sourceVmId(100)\n .build())\n .cpu(ClonedVirtualMachineCpuArgs.builder()\n .cores(4)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Example 1: Basic clone with minimal management\n basicClone:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: basic_clone\n properties:\n nodeName: pve\n name: basic-clone\n clone:\n sourceVmId: 100\n full: true\n cpu:\n cores: 4\n # Example 2: Clone with explicit network management\n networkManaged:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: network_managed\n properties:\n nodeName: pve\n name: network-clone\n clone:\n sourceVmId: 100\n network:\n net0:\n bridge: vmbr0\n model: virtio\n tag: 100\n net1:\n bridge: vmbr1\n model: virtio\n firewall: true\n macAddress: BC:24:11:2E:C5:00\n cpu:\n cores: 2\n # Example 3: Clone with disk management\n diskManaged:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: disk_managed\n properties:\n nodeName: pve\n name: disk-clone\n clone:\n sourceVmId: 100\n targetDatastore: local-lvm\n disk:\n scsi0:\n datastoreId: local-lvm\n sizeGb: 50\n discard: on\n ssd: true\n scsi1:\n datastoreId: local-lvm\n sizeGb: 100\n backup: false\n # Example 4: Clone with explicit device deletion\n selectiveDelete:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: selective_delete\n properties:\n nodeName: pve\n name: minimal-clone\n clone:\n sourceVmId: 100\n network:\n net0:\n bridge: vmbr0\n model: virtio\n delete:\n networks:\n - net1\n - net2\n # Example 5: Full-featured clone with multiple settings\n fullFeatured:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: full_featured\n properties:\n nodeName: pve\n name: production-vm\n description: Production VM cloned from template\n tags:\n - production\n - web\n clone:\n sourceVmId: 100\n sourceNodeName: pve\n full: true\n targetDatastore: local-lvm\n retries: 3\n cpu:\n cores: 8\n sockets: 1\n architecture: x86_64\n type: host\n memory:\n size: 8192\n balloon: 2048\n shares: 2000\n network:\n net0:\n bridge: vmbr0\n model: virtio\n tag: 100\n firewall: true\n rateLimit: 100\n disk:\n scsi0:\n datastoreId: local-lvm\n sizeGb: 100\n discard: on\n iothread: true\n ssd: true\n cache: writethrough\n vga:\n type: std\n memory: 16\n delete:\n disks:\n - ide2\n stopOnDestroy: false # Shutdown gracefully instead of force stop\n purgeOnDestroy: true\n deleteUnreferencedDisksOnDestroy: false # Safety: don't delete unmanaged disks\n timeouts:\n create: 30m\n update: 30m\n delete: 10m\n # Example 6: Linked clone for testing\n testClone:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: test_clone\n properties:\n nodeName: pve\n name: test-vm\n clone:\n sourceVmId: 100\n full: false\n cpu:\n cores: 2\n network:\n net0:\n bridge: vmbr0\n model: virtio\n # Example 7: Clone with pool assignment\n pooledClone:\n type: proxmoxve:VM:ClonedVirtualMachine\n name: pooled_clone\n properties:\n nodeName: pve\n name: pooled-vm\n clone:\n sourceVmId: 100\n poolId: production\n cpu:\n cores: 4\n # Example 8: Import existing cloned VM\n imported:\n type: proxmoxve:VM:ClonedVirtualMachine\n properties:\n vmId: 123 # VM ID to manage\n nodeName: pve\n clone:\n sourceVmId: 100\n cpu:\n cores: 4\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "cdrom": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom" + }, + "description": "The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" + }, + "clone": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone", + "description": "Clone settings. Changes require recreation.\n" + }, + "cpu": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu", + "description": "The CPU configuration.\n" + }, + "delete": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete", + "description": "Explicit deletions to perform after cloning/updating. Entries persist across applies.\n" + }, + "deleteUnreferencedDisksOnDestroy": { + "type": "boolean" + }, + "description": { + "type": "string", + "description": "Optional VM description applied after cloning.\n" + }, + "disk": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk" + }, + "description": "Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.\n" + }, + "memory": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory", + "description": "Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e sets the total available RAM, while \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e sets the guaranteed floor. The host can reclaim memory between these values when needed.\n" + }, + "name": { + "type": "string", + "description": "Optional VM name override applied after cloning.\n" + }, + "network": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork" + }, + "description": "Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.\n" + }, + "nodeName": { + "type": "string", + "description": "Target node for the cloned VM.\n" + }, + "purgeOnDestroy": { + "type": "boolean", + "description": "Purge backup configuration on destroy.\n" + }, + "rng": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng", + "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" + }, + "stopOnDestroy": { + "type": "boolean", + "description": "Stop the VM on destroy (instead of shutdown).\n" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Tags applied after cloning.\n" + }, + "timeouts": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts" + }, + "vga": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga", + "description": "Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n" + }, + "vmId": { + "type": "string", + "description": "The VM identifier in the Proxmox cluster.\n" + } + }, + "required": [ + "clone", + "deleteUnreferencedDisksOnDestroy", + "vmId", + "name", + "nodeName", + "purgeOnDestroy", + "stopOnDestroy" + ], + "inputProperties": { + "cdrom": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom" + }, + "description": "The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" + }, + "clone": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone", + "description": "Clone settings. Changes require recreation.\n" + }, + "cpu": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu", + "description": "The CPU configuration.\n" + }, + "delete": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete", + "description": "Explicit deletions to perform after cloning/updating. Entries persist across applies.\n" + }, + "deleteUnreferencedDisksOnDestroy": { + "type": "boolean" + }, + "description": { + "type": "string", + "description": "Optional VM description applied after cloning.\n" + }, + "disk": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk" + }, + "description": "Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.\n" + }, + "memory": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory", + "description": "Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e sets the total available RAM, while \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e sets the guaranteed floor. The host can reclaim memory between these values when needed.\n" + }, + "name": { + "type": "string", + "description": "Optional VM name override applied after cloning.\n" }, - "expirationDate": { + "network": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork" + }, + "description": "Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.\n" + }, + "nodeName": { "type": "string", - "description": "Expiration date for the token.\n" + "description": "Target node for the cloned VM.\n" }, - "privilegesSeparation": { + "purgeOnDestroy": { "type": "boolean", - "description": "Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n" + "description": "Purge backup configuration on destroy.\n" }, - "tokenName": { - "type": "string", - "description": "User-specific token identifier.\n" + "rng": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng", + "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" }, - "userId": { + "stopOnDestroy": { + "type": "boolean", + "description": "Stop the VM on destroy (instead of shutdown).\n" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Tags applied after cloning.\n" + }, + "timeouts": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts" + }, + "vga": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga", + "description": "Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n" + }, + "vmId": { "type": "string", - "description": "User identifier.\n" + "description": "The VM identifier in the Proxmox cluster.\n" } }, "requiredInputs": [ - "tokenName", - "userId" + "clone", + "nodeName" ], "stateInputs": { - "description": "Input properties used for looking up and filtering Token resources.\n", + "description": "Input properties used for looking up and filtering ClonedVirtualMachine resources.\n", "properties": { - "comment": { - "type": "string", - "description": "Comment for the token.\n" + "cdrom": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineCdrom:ClonedVirtualMachineCdrom" + }, + "description": "The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" }, - "expirationDate": { + "clone": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineClone:ClonedVirtualMachineClone", + "description": "Clone settings. Changes require recreation.\n" + }, + "cpu": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineCpu:ClonedVirtualMachineCpu", + "description": "The CPU configuration.\n" + }, + "delete": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineDelete:ClonedVirtualMachineDelete", + "description": "Explicit deletions to perform after cloning/updating. Entries persist across applies.\n" + }, + "deleteUnreferencedDisksOnDestroy": { + "type": "boolean" + }, + "description": { "type": "string", - "description": "Expiration date for the token.\n" + "description": "Optional VM description applied after cloning.\n" }, - "privilegesSeparation": { - "type": "boolean", - "description": "Restrict API token privileges with separate ACLs (default), or give full privileges of corresponding user.\n" + "disk": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineDisk:ClonedVirtualMachineDisk" + }, + "description": "Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed.\n" }, - "tokenName": { + "memory": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineMemory:ClonedVirtualMachineMemory", + "description": "Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The \u003cspan pulumi-lang-nodejs=\"`size`\" pulumi-lang-dotnet=\"`Size`\" pulumi-lang-go=\"`size`\" pulumi-lang-python=\"`size`\" pulumi-lang-yaml=\"`size`\" pulumi-lang-java=\"`size`\"\u003e`size`\u003c/span\u003e sets the total available RAM, while \u003cspan pulumi-lang-nodejs=\"`balloon`\" pulumi-lang-dotnet=\"`Balloon`\" pulumi-lang-go=\"`balloon`\" pulumi-lang-python=\"`balloon`\" pulumi-lang-yaml=\"`balloon`\" pulumi-lang-java=\"`balloon`\"\u003e`balloon`\u003c/span\u003e sets the guaranteed floor. The host can reclaim memory between these values when needed.\n" + }, + "name": { "type": "string", - "description": "User-specific token identifier.\n" + "description": "Optional VM name override applied after cloning.\n" }, - "userId": { + "network": { + "type": "object", + "additionalProperties": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineNetwork:ClonedVirtualMachineNetwork" + }, + "description": "Network devices keyed by slot (net0, net1, ...). Only listed keys are managed.\n" + }, + "nodeName": { "type": "string", - "description": "User identifier.\n" + "description": "Target node for the cloned VM.\n" }, - "value": { + "purgeOnDestroy": { + "type": "boolean", + "description": "Purge backup configuration on destroy.\n" + }, + "rng": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineRng:ClonedVirtualMachineRng", + "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" + }, + "stopOnDestroy": { + "type": "boolean", + "description": "Stop the VM on destroy (instead of shutdown).\n" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Tags applied after cloning.\n" + }, + "timeouts": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineTimeouts:ClonedVirtualMachineTimeouts" + }, + "vga": { + "$ref": "#/types/proxmoxve:VM/ClonedVirtualMachineVga:ClonedVirtualMachineVga", + "description": "Configure the VGA Hardware. If you want to use high resolution modes (\u003e= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is \u003cspan pulumi-lang-nodejs=\"`std`\" pulumi-lang-dotnet=\"`Std`\" pulumi-lang-go=\"`std`\" pulumi-lang-python=\"`std`\" pulumi-lang-yaml=\"`std`\" pulumi-lang-java=\"`std`\"\u003e`std`\u003c/span\u003e for all OS types besides some Windows versions (XP and older) which use \u003cspan pulumi-lang-nodejs=\"`cirrus`\" pulumi-lang-dotnet=\"`Cirrus`\" pulumi-lang-go=\"`cirrus`\" pulumi-lang-python=\"`cirrus`\" pulumi-lang-yaml=\"`cirrus`\" pulumi-lang-java=\"`cirrus`\"\u003e`cirrus`\u003c/span\u003e. The \u003cspan pulumi-lang-nodejs=\"`qxl`\" pulumi-lang-dotnet=\"`Qxl`\" pulumi-lang-go=\"`qxl`\" pulumi-lang-python=\"`qxl`\" pulumi-lang-yaml=\"`qxl`\" pulumi-lang-java=\"`qxl`\"\u003e`qxl`\u003c/span\u003e option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters.\n" + }, + "vmId": { "type": "string", - "description": "API token value used for authentication. It is populated only when creating a new token, and can't be retrieved at import.\n", - "secret": true + "description": "The VM identifier in the Proxmox cluster.\n" } }, "type": "object" @@ -7804,10 +10828,6 @@ }, "description": "The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" }, - "clone": { - "$ref": "#/types/proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone", - "description": "The cloning configuration.\n" - }, "cpu": { "$ref": "#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu", "description": "The CPU configuration.\n" @@ -7834,7 +10854,7 @@ }, "rng": { "$ref": "#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng", - "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" + "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" }, "stopOnDestroy": { "type": "boolean", @@ -7879,10 +10899,6 @@ }, "description": "The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" }, - "clone": { - "$ref": "#/types/proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone", - "description": "The cloning configuration.\n" - }, "cpu": { "$ref": "#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu", "description": "The CPU configuration.\n" @@ -7909,7 +10925,7 @@ }, "rng": { "$ref": "#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng", - "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" + "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" }, "stopOnDestroy": { "type": "boolean", @@ -7947,10 +10963,6 @@ }, "description": "The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that \u003cspan pulumi-lang-nodejs=\"`q35`\" pulumi-lang-dotnet=\"`Q35`\" pulumi-lang-go=\"`q35`\" pulumi-lang-python=\"`q35`\" pulumi-lang-yaml=\"`q35`\" pulumi-lang-java=\"`q35`\"\u003e`q35`\u003c/span\u003e machine type only supports \u003cspan pulumi-lang-nodejs=\"`ide0`\" pulumi-lang-dotnet=\"`Ide0`\" pulumi-lang-go=\"`ide0`\" pulumi-lang-python=\"`ide0`\" pulumi-lang-yaml=\"`ide0`\" pulumi-lang-java=\"`ide0`\"\u003e`ide0`\u003c/span\u003e and \u003cspan pulumi-lang-nodejs=\"`ide2`\" pulumi-lang-dotnet=\"`Ide2`\" pulumi-lang-go=\"`ide2`\" pulumi-lang-python=\"`ide2`\" pulumi-lang-yaml=\"`ide2`\" pulumi-lang-java=\"`ide2`\"\u003e`ide2`\u003c/span\u003e of IDE interfaces.\n" }, - "clone": { - "$ref": "#/types/proxmoxve:VM/VirtualMachine2Clone:VirtualMachine2Clone", - "description": "The cloning configuration.\n" - }, "cpu": { "$ref": "#/types/proxmoxve:VM/VirtualMachine2Cpu:VirtualMachine2Cpu", "description": "The CPU configuration.\n" @@ -7977,7 +10989,7 @@ }, "rng": { "$ref": "#/types/proxmoxve:VM/VirtualMachine2Rng:VirtualMachine2Rng", - "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" + "description": "Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information.\n" }, "stopOnDestroy": { "type": "boolean", @@ -8077,6 +11089,10 @@ }, "description": "A host PCI device mapping (multiple blocks supported).\n" }, + "hotplug": { + "type": "string", + "description": "Selectively enable hotplug features. Supported values\nare \u003cspan pulumi-lang-nodejs=\"`cpu`\" pulumi-lang-dotnet=\"`Cpu`\" pulumi-lang-go=\"`cpu`\" pulumi-lang-python=\"`cpu`\" pulumi-lang-yaml=\"`cpu`\" pulumi-lang-java=\"`cpu`\"\u003e`cpu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`disk`\" pulumi-lang-dotnet=\"`Disk`\" pulumi-lang-go=\"`disk`\" pulumi-lang-python=\"`disk`\" pulumi-lang-yaml=\"`disk`\" pulumi-lang-java=\"`disk`\"\u003e`disk`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`memory`\" pulumi-lang-dotnet=\"`Memory`\" pulumi-lang-go=\"`memory`\" pulumi-lang-python=\"`memory`\" pulumi-lang-yaml=\"`memory`\" pulumi-lang-java=\"`memory`\"\u003e`memory`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`usb`\" pulumi-lang-dotnet=\"`Usb`\" pulumi-lang-go=\"`usb`\" pulumi-lang-python=\"`usb`\" pulumi-lang-yaml=\"`usb`\" pulumi-lang-java=\"`usb`\"\u003e`usb`\u003c/span\u003e. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable all,\nor \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e to enable all. If not set, PVE defaults to `network,disk,usb`.\n" + }, "initialization": { "$ref": "#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization", "description": "The cloud-init configuration.\n" @@ -8269,7 +11285,7 @@ }, "tpmState": { "$ref": "#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState", - "description": "The TPM state device.\n" + "description": "The TPM state device. The VM must be stopped before\nadding, removing, or moving a TPM state device; the provider automatically\nhandles the shutdown/start cycle. Changing \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e requires recreating the\nVM because Proxmox only supports setting the TPM version at creation time.\n" }, "usbs": { "type": "array", @@ -8300,6 +11316,7 @@ }, "required": [ "bootOrders", + "hotplug", "ipv4Addresses", "ipv6Addresses", "macAddresses", @@ -8381,6 +11398,10 @@ }, "description": "A host PCI device mapping (multiple blocks supported).\n" }, + "hotplug": { + "type": "string", + "description": "Selectively enable hotplug features. Supported values\nare \u003cspan pulumi-lang-nodejs=\"`cpu`\" pulumi-lang-dotnet=\"`Cpu`\" pulumi-lang-go=\"`cpu`\" pulumi-lang-python=\"`cpu`\" pulumi-lang-yaml=\"`cpu`\" pulumi-lang-java=\"`cpu`\"\u003e`cpu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`disk`\" pulumi-lang-dotnet=\"`Disk`\" pulumi-lang-go=\"`disk`\" pulumi-lang-python=\"`disk`\" pulumi-lang-yaml=\"`disk`\" pulumi-lang-java=\"`disk`\"\u003e`disk`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`memory`\" pulumi-lang-dotnet=\"`Memory`\" pulumi-lang-go=\"`memory`\" pulumi-lang-python=\"`memory`\" pulumi-lang-yaml=\"`memory`\" pulumi-lang-java=\"`memory`\"\u003e`memory`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`usb`\" pulumi-lang-dotnet=\"`Usb`\" pulumi-lang-go=\"`usb`\" pulumi-lang-python=\"`usb`\" pulumi-lang-yaml=\"`usb`\" pulumi-lang-java=\"`usb`\"\u003e`usb`\u003c/span\u003e. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable all,\nor \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e to enable all. If not set, PVE defaults to `network,disk,usb`.\n" + }, "initialization": { "$ref": "#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization", "description": "The cloud-init configuration.\n" @@ -8547,8 +11568,7 @@ }, "tpmState": { "$ref": "#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState", - "description": "The TPM state device.\n", - "willReplaceOnChanges": true + "description": "The TPM state device. The VM must be stopped before\nadding, removing, or moving a TPM state device; the provider automatically\nhandles the shutdown/start cycle. Changing \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e requires recreating the\nVM because Proxmox only supports setting the TPM version at creation time.\n" }, "usbs": { "type": "array", @@ -8653,6 +11673,10 @@ }, "description": "A host PCI device mapping (multiple blocks supported).\n" }, + "hotplug": { + "type": "string", + "description": "Selectively enable hotplug features. Supported values\nare \u003cspan pulumi-lang-nodejs=\"`cpu`\" pulumi-lang-dotnet=\"`Cpu`\" pulumi-lang-go=\"`cpu`\" pulumi-lang-python=\"`cpu`\" pulumi-lang-yaml=\"`cpu`\" pulumi-lang-java=\"`cpu`\"\u003e`cpu`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`disk`\" pulumi-lang-dotnet=\"`Disk`\" pulumi-lang-go=\"`disk`\" pulumi-lang-python=\"`disk`\" pulumi-lang-yaml=\"`disk`\" pulumi-lang-java=\"`disk`\"\u003e`disk`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`memory`\" pulumi-lang-dotnet=\"`Memory`\" pulumi-lang-go=\"`memory`\" pulumi-lang-python=\"`memory`\" pulumi-lang-yaml=\"`memory`\" pulumi-lang-java=\"`memory`\"\u003e`memory`\u003c/span\u003e, \u003cspan pulumi-lang-nodejs=\"`network`\" pulumi-lang-dotnet=\"`Network`\" pulumi-lang-go=\"`network`\" pulumi-lang-python=\"`network`\" pulumi-lang-yaml=\"`network`\" pulumi-lang-java=\"`network`\"\u003e`network`\u003c/span\u003e, and \u003cspan pulumi-lang-nodejs=\"`usb`\" pulumi-lang-dotnet=\"`Usb`\" pulumi-lang-go=\"`usb`\" pulumi-lang-python=\"`usb`\" pulumi-lang-yaml=\"`usb`\" pulumi-lang-java=\"`usb`\"\u003e`usb`\u003c/span\u003e. Use \u003cspan pulumi-lang-nodejs=\"`0`\" pulumi-lang-dotnet=\"`0`\" pulumi-lang-go=\"`0`\" pulumi-lang-python=\"`0`\" pulumi-lang-yaml=\"`0`\" pulumi-lang-java=\"`0`\"\u003e`0`\u003c/span\u003e to disable all,\nor \u003cspan pulumi-lang-nodejs=\"`1`\" pulumi-lang-dotnet=\"`1`\" pulumi-lang-go=\"`1`\" pulumi-lang-python=\"`1`\" pulumi-lang-yaml=\"`1`\" pulumi-lang-java=\"`1`\"\u003e`1`\u003c/span\u003e to enable all. If not set, PVE defaults to `network,disk,usb`.\n" + }, "initialization": { "$ref": "#/types/proxmoxve:VM/VirtualMachineInitialization:VirtualMachineInitialization", "description": "The cloud-init configuration.\n" @@ -8846,8 +11870,7 @@ }, "tpmState": { "$ref": "#/types/proxmoxve:VM/VirtualMachineTpmState:VirtualMachineTpmState", - "description": "The TPM state device.\n", - "willReplaceOnChanges": true + "description": "The TPM state device. The VM must be stopped before\nadding, removing, or moving a TPM state device; the provider automatically\nhandles the shutdown/start cycle. Changing \u003cspan pulumi-lang-nodejs=\"`version`\" pulumi-lang-dotnet=\"`Version`\" pulumi-lang-go=\"`version`\" pulumi-lang-python=\"`version`\" pulumi-lang-yaml=\"`version`\" pulumi-lang-java=\"`version`\"\u003e`version`\u003c/span\u003e requires recreating the\nVM because Proxmox only supports setting the TPM version at creation time.\n" }, "usbs": { "type": "array", @@ -11519,6 +14542,211 @@ "type": "object" } }, + "proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric": { + "description": "OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.getOpenfabric({\n id: \"main-fabric\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.get_openfabric(id=\"main-fabric\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.GetOpenfabric.Invoke(new()\n {\n Id = \"main-fabric\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOpenfabric(ctx, \u0026fabric.GetOpenfabricArgs{\n\t\t\tId: \"main-fabric\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabricFunctions.getOpenfabric(GetOpenfabricArgs.builder()\n .id(\"main-fabric\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric:getOpenfabric\n arguments:\n id: main-fabric\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getOpenfabric.\n", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getOpenfabric.\n", + "properties": { + "csnpInterval": { + "description": "The\u003cspan pulumi-lang-nodejs=\" csnpInterval \" pulumi-lang-dotnet=\" CsnpInterval \" pulumi-lang-go=\" csnpInterval \" pulumi-lang-python=\" csnp_interval \" pulumi-lang-yaml=\" csnpInterval \" pulumi-lang-java=\" csnpInterval \"\u003e csnp_interval \u003c/span\u003eproperty for OpenFabric.\n", + "type": "integer" + }, + "helloInterval": { + "description": "The\u003cspan pulumi-lang-nodejs=\" helloInterval \" pulumi-lang-dotnet=\" HelloInterval \" pulumi-lang-go=\" helloInterval \" pulumi-lang-python=\" hello_interval \" pulumi-lang-yaml=\" helloInterval \" pulumi-lang-java=\" helloInterval \"\u003e hello_interval \u003c/span\u003eproperty for OpenFabric.\n", + "type": "integer" + }, + "id": { + "description": "The unique identifier of the SDN fabric.\n", + "type": "string" + }, + "ip6Prefix": { + "description": "IPv6 prefix cidr for the fabric.\n", + "type": "string" + }, + "ipPrefix": { + "description": "IPv4 prefix cidr for the fabric.\n", + "type": "string" + } + }, + "required": [ + "csnpInterval", + "helloInterval", + "id", + "ip6Prefix", + "ipPrefix" + ], + "type": "object" + } + }, + "proxmoxve:Sdn/fabric/getOspf:getOspf": { + "description": "OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.getOspf({\n id: \"main-fabric\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.get_ospf(id=\"main-fabric\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.GetOspf.Invoke(new()\n {\n Id = \"main-fabric\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOspf(ctx, \u0026fabric.GetOspfArgs{\n\t\t\tId: \"main-fabric\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabricFunctions.getOspf(GetOspfArgs.builder()\n .id(\"main-fabric\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric:getOspf\n arguments:\n id: main-fabric\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getOspf.\n", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getOspf.\n", + "properties": { + "area": { + "description": "OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust.\n", + "type": "string" + }, + "id": { + "description": "The unique identifier of the SDN fabric.\n", + "type": "string" + }, + "ipPrefix": { + "description": "IPv4 prefix cidr for the fabric.\n", + "type": "string" + } + }, + "required": [ + "area", + "id", + "ipPrefix" + ], + "type": "object" + } + }, + "proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric": { + "description": "OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.node.getOpenfabric({\n fabricId: \"main-fabric\",\n nodeId: \"pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.node.get_openfabric(fabric_id=\"main-fabric\",\n node_id=\"pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.Node.GetOpenfabric.Invoke(new()\n {\n FabricId = \"main-fabric\",\n NodeId = \"pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOpenfabric(ctx, \u0026fabric/node.GetOpenfabricArgs{\n\t\t\tFabricId: \"main-fabric\",\n\t\t\tNodeId: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabric_nodeFunctions.getOpenfabric(GetOpenfabricArgs.builder()\n .fabricId(\"main-fabric\")\n .nodeId(\"pve\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric/node:getOpenfabric\n arguments:\n fabricId: main-fabric\n nodeId: pve\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getOpenfabric.\n", + "properties": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + }, + "nodeId": { + "type": "string", + "description": "The unique identifier of the SDN fabric node.\n" + } + }, + "type": "object", + "required": [ + "fabricId", + "nodeId" + ] + }, + "outputs": { + "description": "A collection of values returned by getOpenfabric.\n", + "properties": { + "fabricId": { + "description": "The unique identifier of the SDN fabric.\n", + "type": "string" + }, + "id": { + "type": "string" + }, + "interfaceNames": { + "description": "Set of interface names associated with the fabric node.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "ip": { + "description": "IPv4 address for the fabric node.\n", + "type": "string" + }, + "ip6": { + "description": "IPv6 address for the fabric node.\n", + "type": "string" + }, + "nodeId": { + "description": "The unique identifier of the SDN fabric node.\n", + "type": "string" + } + }, + "required": [ + "fabricId", + "id", + "interfaceNames", + "ip", + "ip6", + "nodeId" + ], + "type": "object" + } + }, + "proxmoxve:Sdn/fabric/node/getOspf:getOspf": { + "description": "OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as proxmoxve from \"@muhlba91/pulumi-proxmoxve\";\n\nconst main = proxmoxve.Sdn.fabric.node.getOspf({\n fabricId: \"main-fabric\",\n nodeId: \"pve\",\n});\n```\n```python\nimport pulumi\nimport pulumi_proxmoxve as proxmoxve\n\nmain = proxmoxve.Sdn.fabric.node.get_ospf(fabric_id=\"main-fabric\",\n node_id=\"pve\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing ProxmoxVE = Pulumi.ProxmoxVE;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = ProxmoxVE.Sdn.Fabric.Node.GetOspf.Invoke(new()\n {\n FabricId = \"main-fabric\",\n NodeId = \"pve\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sdn.GetOspf(ctx, \u0026fabric/node.GetOspfArgs{\n\t\t\tFabricId: \"main-fabric\",\n\t\t\tNodeId: \"pve\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;\nimport com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var main = Sdn_fabric_nodeFunctions.getOspf(GetOspfArgs.builder()\n .fabricId(\"main-fabric\")\n .nodeId(\"pve\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n main:\n fn::invoke:\n function: proxmoxve:Sdn/fabric/node:getOspf\n arguments:\n fabricId: main-fabric\n nodeId: pve\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getOspf.\n", + "properties": { + "fabricId": { + "type": "string", + "description": "The unique identifier of the SDN fabric.\n" + }, + "nodeId": { + "type": "string", + "description": "The unique identifier of the SDN fabric node.\n" + } + }, + "type": "object", + "required": [ + "fabricId", + "nodeId" + ] + }, + "outputs": { + "description": "A collection of values returned by getOspf.\n", + "properties": { + "fabricId": { + "description": "The unique identifier of the SDN fabric.\n", + "type": "string" + }, + "id": { + "type": "string" + }, + "interfaceNames": { + "description": "Set of interface names associated with the fabric node.\n", + "items": { + "type": "string" + }, + "type": "array" + }, + "ip": { + "description": "IPv4 address for the fabric node.\n", + "type": "string" + }, + "nodeId": { + "description": "The unique identifier of the SDN fabric node.\n", + "type": "string" + } + }, + "required": [ + "fabricId", + "id", + "interfaceNames", + "ip", + "nodeId" + ], + "type": "object" + } + }, "proxmoxve:Sdn/getSubnet:getSubnet": { "description": "Retrieve details about a specific SDN Subnet in Proxmox VE.\n", "inputs": { @@ -12188,10 +15416,6 @@ "inputs": { "description": "A collection of arguments for invoking getVm2.\n", "properties": { - "clone": { - "$ref": "#/types/proxmoxve:index/getVm2Clone:getVm2Clone", - "description": "The cloning configuration.\n" - }, "cpu": { "$ref": "#/types/proxmoxve:index/getVm2Cpu:getVm2Cpu", "description": "The CPU configuration.\n" @@ -12244,10 +15468,6 @@ "outputs": { "description": "A collection of values returned by getVm2.\n", "properties": { - "clone": { - "$ref": "#/types/proxmoxve:index/getVm2Clone:getVm2Clone", - "description": "The cloning configuration.\n" - }, "cpu": { "$ref": "#/types/proxmoxve:index/getVm2Cpu:getVm2Cpu", "description": "The CPU configuration.\n" diff --git a/provider/go.mod b/provider/go.mod index a1b88c79..51931318 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -2,10 +2,10 @@ module github.com/muhlba91/pulumi-proxmoxve/provider go 1.25.0 -replace github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250530111747-935112552988 +replace github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250923233607-7f1981c8674a require ( - github.com/bpg/terraform-provider-proxmox v0.89.1 + github.com/bpg/terraform-provider-proxmox v0.94.0 github.com/ettle/strcase v0.2.0 github.com/pulumi/pulumi-terraform-bridge/v3 v3.120.0 github.com/pulumi/pulumi/sdk/v3 v3.219.0 @@ -61,7 +61,7 @@ require ( github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/go-cmp v0.7.0 // indirect - github.com/google/go-querystring v1.1.0 // indirect + github.com/google/go-querystring v1.2.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.6.0 // indirect @@ -124,7 +124,6 @@ require ( github.com/natefinch/atomic v1.0.1 // indirect github.com/oklog/run v1.1.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/opentofu/registry-address v0.0.0-20230922120653-901b9ae4061a // indirect github.com/opentofu/registry-address/v2 v2.0.0-20250611143131-d0a99bd8acdd // indirect github.com/opentofu/svchost v0.0.0-20250610175836-86c9e5e3d8c8 // indirect github.com/opentracing/basictracer-go v1.1.0 // indirect @@ -143,7 +142,6 @@ require ( github.com/pulumi/pulumi-java/pkg v1.12.0 // indirect github.com/pulumi/pulumi-yaml v1.19.1 // indirect github.com/pulumi/pulumi/pkg/v3 v3.218.0 // indirect - github.com/pulumi/schema-tools v0.1.2 // indirect github.com/pulumi/terraform-diff-reader v0.0.2 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect diff --git a/provider/go.sum b/provider/go.sum index 1319f369..621e7ec4 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -1,7 +1,8 @@ cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= cel.dev/expr v0.16.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= cel.dev/expr v0.19.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= -cel.dev/expr v0.20.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.19.1/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -359,7 +360,6 @@ cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1h cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= -cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= @@ -1330,11 +1330,35 @@ cloud.google.com/go/workflows v1.12.1/go.mod h1:5A95OhD/edtOhQd/O741NSfIMezNTbCw cloud.google.com/go/workflows v1.12.2/go.mod h1:+OmBIgNqYJPVggnMo9nqmizW0qEXHhmnAzK/CnBqsHc= cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= cloud.google.com/go/workflows v1.12.4/go.mod h1:yQ7HUqOkdJK4duVtMeBCAOPiN1ZF1E9pAMX51vpwB/w= +codeberg.org/go-fonts/dejavu v0.4.0/go.mod h1:abni088lmhQJvso2Lsb7azCKzwkfcnttl6tL1UTWKzg= +codeberg.org/go-fonts/latin-modern v0.4.0/go.mod h1:BF68mZznJ9QHn+hic9ks2DaFl4sR5YhfM6xTYaP9vNw= +codeberg.org/go-fonts/liberation v0.4.1/go.mod h1:Gu6FTZHMMpGxPBfc8WFL8RfwMYFTvG7TIFOMx8oM4B8= +codeberg.org/go-fonts/liberation v0.5.0/go.mod h1:zS/2e1354/mJ4pGzIIaEtm/59VFCFnYC7YV6YdGl5GU= +codeberg.org/go-fonts/stix v0.3.0/go.mod h1:1OSJSnA/PoHqbW2tjkkqTmNPp5xTtJQN2GRXJjO/+WA= +codeberg.org/go-latex/latex v0.0.1/go.mod h1:AiC91vVG2uURZRd4ZN1j3mAac0XBrLsxK6+ZNa7O9ok= +codeberg.org/go-latex/latex v0.1.0/go.mod h1:LA0q/AyWIYrqVd+A9Upkgsb+IqPcmSTKc9Dny04MHMw= +codeberg.org/go-pdf/fpdf v0.10.0/go.mod h1:Y0DGRAdZ0OmnZPvjbMp/1bYxmIPxm0ws4tfoPOc4LjU= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20221208032759-85de2813cf6b/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +eliasnaur.com/font v0.0.0-20230308162249-dd43949cb42d/go.mod h1:OYVuxibdk9OSLX8vAqydtRPP87PyTFcT9uH3MlEGBQA= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +gioui.org v0.0.0-20210822154628-43a7030f6e0b/go.mod h1:jmZ349gZNGWyc5FIv/VWLBQ32Ki/FOvTgEz64kh9lnk= +gioui.org v0.2.0/go.mod h1:1H72sKEk/fNFV+l0JNeM2Dt3co3Y4uaQcD+I+/GQ0e4= +gioui.org/cpu v0.0.0-20210808092351-bfe733dd3334/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= +gioui.org/cpu v0.0.0-20210817075930-8d6a761490d2/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= +gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= +gioui.org/shader v1.0.0/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= +gioui.org/shader v1.0.6/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= +gioui.org/x v0.2.0/go.mod h1:rCGN2nZ8ZHqrtseJoQxCMZpt2xrZUrdZ2WuMRLBJmYs= +git.sr.ht/~jackmordaunt/go-toast v1.0.0/go.mod h1:aIuRX/HdBOz7yRS8rOVYQCwJQlFS7DbYBTpUV0SHeeg= +git.sr.ht/~sbinet/cmpimg v0.1.0/go.mod h1:FU12psLbF4TfNXkKH2ZZQ29crIqoiqTZmeQ7dkp/pxE= git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= +git.sr.ht/~sbinet/gg v0.6.0/go.mod h1:uucygbfC9wVPQIfrmwM2et0imr8L7KQWywX0xpFMm94= +git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0/go.mod h1:+axXBRUTIDlCeE73IKeD/os7LoEnTKdkp8/gQOFjqyo= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= @@ -1352,10 +1376,12 @@ github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/k github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.26.0/go.mod h1:2bIszWvQRlJVmJLiuLhukLImRjKPcYdzzsx6darK02A= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.29.0/go.mod h1:Cz6ft6Dkn3Et6l2v2a9/RpN7epQ1GtDlO6lj8bEcOvw= github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= @@ -1374,8 +1400,12 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= @@ -1390,8 +1420,13 @@ github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhk github.com/alecthomas/participle/v2 v2.0.0/go.mod h1:rAKZdJldHu8084ojcWevWAL8KmEU+AT+Olodb+WoN2Y= github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c= github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0/go.mod h1:ccdDYaY5+gO+cbnQdFxEXqfy0RkoV25H3jLXUDNM3wg= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -1400,6 +1435,8 @@ github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4x github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= github.com/apache/arrow/go/v14 v14.0.2/go.mod h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/apache/thrift v0.17.0/go.mod h1:OLxhMRJxomX+1I/KUw03qoV3mMz16BwaKI+d4fPBx7Q= github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= @@ -1412,20 +1449,26 @@ github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJE github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/avast/retry-go/v5 v5.0.0 h1:kf1Qc2UsTZ4qq8elDymqfbISvkyMuhgRxuJqX2NHP7k= github.com/avast/retry-go/v5 v5.0.0/go.mod h1://d+usmKWio1agtZfS1H/ltTqwtIfBnRq9zEwjc3eH8= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.50.36 h1:PjWXHwZPuTLMR1NIb8nEjLucZBMzmf84TLoLbD8BZqk= github.com/aws/aws-sdk-go v1.50.36/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= @@ -1456,6 +1499,9 @@ github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= @@ -1464,20 +1510,22 @@ github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdn github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bpg/terraform-provider-proxmox v0.89.1 h1:CbFTpLjbLj/aaSi4sGLzl+iZKP56/32fTpz3IJ9rf/g= -github.com/bpg/terraform-provider-proxmox v0.89.1/go.mod h1:B+h9kBe+Z8ak4+winKZteJqKu6YPCcFn/reL+XBRhEk= -github.com/brianvoe/gofakeit/v7 v7.12.1 h1:df1tiI4SL1dR5Ix4D/r6a3a+nXBJ/OBGU5jEKRBmmqg= -github.com/brianvoe/gofakeit/v7 v7.12.1/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= -github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/bpg/terraform-provider-proxmox v0.94.0 h1:LO1mqF+HyqHEnywGFAgGVOUCkL7NJWRAHtDl8iCEkj8= +github.com/bpg/terraform-provider-proxmox v0.94.0/go.mod h1:m746ZR9OR9dk6Pr+g+sTMFO6UJmg2n7m0BlaYOtDn3A= +github.com/brianvoe/gofakeit/v7 v7.14.0 h1:R8tmT/rTDJmD2ngpqBL9rAKydiL7Qr2u3CXPqRt59pk= +github.com/brianvoe/gofakeit/v7 v7.14.0/go.mod h1:QXuPeBw164PJCzCUZVmgpgHJ3Llj49jSLVkKPMtxtxA= github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw= github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -1504,6 +1552,7 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= @@ -1530,10 +1579,21 @@ github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido6 github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0= +github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= @@ -1544,17 +1604,24 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set/v2 v2.5.0 h1:hn6cEZtQ0h3J8kFrHR/NrzyOoTnjgW1+FmNJzQ7y/sA= github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -1572,9 +1639,12 @@ github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/Ir github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw= github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM= github.com/envoyproxy/go-control-plane/envoy v1.32.2/go.mod h1:eR2SOX2IedqlPvmiKjUH7Wu//S602JKI7HPC/L3SRq8= github.com/envoyproxy/go-control-plane/envoy v1.32.3/go.mod h1:F6hWupPfh75TBXGKA++MCT/CZHFq5r9/uwt/kQYkZfE= github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/envoy v1.35.0 h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo= +github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= @@ -1585,7 +1655,9 @@ github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87K github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/esiqveland/notify v0.11.0/go.mod h1:63UbVSaeJwF0LVJARHFuPgUAoM7o1BEvCZyknsuonBc= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -1600,6 +1672,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -1608,10 +1682,18 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/dejavu v0.3.2/go.mod h1:m+TzKY7ZEl09/a17t1593E4VYW8L1VaBXHzFZOIjGEY= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/latin-modern v0.3.0/go.mod h1:ysEQXnuT/sCDOAONxC7ImeEDVINbltClhasMAqEtRK0= +github.com/go-fonts/latin-modern v0.3.1/go.mod h1:ysEQXnuT/sCDOAONxC7ImeEDVINbltClhasMAqEtRK0= +github.com/go-fonts/latin-modern v0.3.2/go.mod h1:9odJt4NbRrbdj4UAMuLVd4zEukf6aAEKnDaQga0whqQ= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.3.0/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= +github.com/go-fonts/liberation v0.3.1/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= +github.com/go-fonts/liberation v0.3.2/go.mod h1:N0QsDLVUQPy3UYg9XAc3Uh3UDMp2Z7M1o4+X98dXkmI= github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-fonts/stix v0.2.2/go.mod h1:SUxggC9dxd/Q+rb5PkJuvfvTbOPtNc2Qaua00fIp9iU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= @@ -1625,11 +1707,22 @@ github.com/go-git/go-git/v5 v5.16.0/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lo github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20231223183121-56fa3ac82ce7/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY= github.com/go-jose/go-jose/v3 v3.0.4/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-jose/go-jose/v4 v4.0.4/go.mod h1:NKb5HO1EZccyMpiZNbdUw/14tiXNyUJh188dfnMCAfc= +github.com/go-jose/go-jose/v4 v4.1.1/go.mod h1:BdsZGqgdO3b6tTc6LSE56wcDbMMLuPsw5d4ZD5f94kA= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= +github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea/go.mod h1:Y7Vld91/HRbTBm7JwoI7HejdDB0u+e9AUBO9MB7yuZk= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -1640,32 +1733,46 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.8.0/go.mod h1:gfqhcNwXrsd3XYKte9a7vM3smvU/jB4ZRDrmWSxpfdc= +github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= github.com/go-test/deep v1.1.1/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/go-text/typesetting v0.0.0-20230803102845-24e03d8b5372/go.mod h1:evDBbvNR/KaVFZ2ZlDSOWWXIUKq0wCOEtzLxRM8SG3k= +github.com/go-text/typesetting-utils v0.0.0-20230616150549-2a7df14b6a22/go.mod h1:DDxDdQEnB70R8owOx3LVpEFvpMK9eeH1o2r0yZhFI9o= github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= +github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198/go.mod h1:DTh/Y2+NbnOVVoypCCQrovMPDKUGp4yZpSbWg5D0XIM= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-yaml v1.9.8/go.mod h1:JubOolP3gh0HpiBc4BLRD4YmjEjHAmIIB2aaXKkTfoE= github.com/goccy/go-yaml v1.11.0/go.mod h1:H+mJrWtjPTJAHvRbV09MCK9xYwODM+wRTVFFTWckfng= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= -github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= +github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= @@ -1678,6 +1785,7 @@ github.com/golang/glog v1.2.3/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwm github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -1714,6 +1822,7 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -1741,8 +1850,8 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-pkcs11 v0.2.0/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0= +github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -1777,6 +1886,7 @@ github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -1816,8 +1926,16 @@ github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUh github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= @@ -1825,6 +1943,8 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9K github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/hashicorp/cli v1.1.7/go.mod h1:e6Mfpga9OCT1vqzFuoGZiiF/KaG9CbUfO5s3ghU3YgU= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -1841,19 +1961,20 @@ github.com/hashicorp/go-getter v1.7.9 h1:G9gcjrDixz7glqJ+ll5IWvggSBR+R0B54DSRt4q github.com/hashicorp/go-getter v1.7.9/go.mod h1:dyFCmT1AQkDfOIt9NH8pw9XBDqNrIKJT5ylbpi7zPNE= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA= github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= @@ -1862,8 +1983,10 @@ github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 h1:iBt4Ew4XEGLfh6/bPk4rSY github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8/go.mod h1:aiJI+PIApBRQG7FZTEBx5GiiX+HbOHilUdNxUZi4eV0= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I= github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= @@ -1874,6 +1997,7 @@ github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24= @@ -1882,20 +2006,20 @@ github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl/v2 v2.0.0/go.mod h1:oVVDG71tEinNGYCxinCYadcmKU9bglqW9pV3txagJ90= -github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE= github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM= github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 h1:T1Q6ag9tCwun16AW+XK3tAql24P4uTGUMIn1/92WsQQ= github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8/go.mod h1:p+ivJws3dpqbp1iP84+npOyAmTTOLMgCzrXd3GSdn/A= -github.com/hashicorp/terraform-exec v0.23.0/go.mod h1:mA+qnx1R8eePycfwKkCRk3Wy65mwInvlpAeOwmA7vlY= github.com/hashicorp/terraform-exec v0.24.0 h1:mL0xlk9H5g2bn0pPF6JQZk5YlByqSqrO5VoaNtAf8OE= github.com/hashicorp/terraform-exec v0.24.0/go.mod h1:lluc/rDYfAhYdslLJQg3J0oDqo88oGQAdHR+wDqFvo4= github.com/hashicorp/terraform-json v0.4.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= -github.com/hashicorp/terraform-json v0.24.0/go.mod h1:Nfj5ubo9xbu9uiAoZVBsNOjvNKB66Oyrvtit74kC7ow= -github.com/hashicorp/terraform-json v0.25.0/go.mod h1:sMKS8fiRDX4rVlR6EJUMudg1WcanxCMoWwTLkgZP/vc= +github.com/hashicorp/terraform-json v0.27.1/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE= github.com/hashicorp/terraform-json v0.27.2 h1:BwGuzM6iUPqf9JYM/Z4AF1OJ5VVJEEzoKST/tRDBJKU= github.com/hashicorp/terraform-json v0.27.2/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE= github.com/hashicorp/terraform-plugin-framework v1.17.0 h1:JdX50CFrYcYFY31gkmitAEAzLKoBgsK+iaJjDC8OexY= @@ -1904,7 +2028,6 @@ github.com/hashicorp/terraform-plugin-framework-timeouts v0.7.0 h1:jblRy1PkLfPm5 github.com/hashicorp/terraform-plugin-framework-timeouts v0.7.0/go.mod h1:5jm2XK8uqrdiSRfD5O47OoxyGMCnwTcl8eoiDgSa+tc= github.com/hashicorp/terraform-plugin-framework-validators v0.19.0 h1:Zz3iGgzxe/1XBkooZCewS0nJAaCFPFPHdNJd8FgE4Ow= github.com/hashicorp/terraform-plugin-framework-validators v0.19.0/go.mod h1:GBKTNGbGVJohU03dZ7U8wHqc2zYnMUawgCN+gC0itLc= -github.com/hashicorp/terraform-plugin-go v0.27.0/go.mod h1:FDa2Bb3uumkTGSkTFpWSOwWJDwA7bf3vdP3ltLDTH6o= github.com/hashicorp/terraform-plugin-go v0.29.0 h1:1nXKl/nSpaYIUBU1IG/EsDOX0vv+9JxAltQyDMpq5mU= github.com/hashicorp/terraform-plugin-go v0.29.0/go.mod h1:vYZbIyvxyy0FWSmDHChCqKvI40cFTDGSb3D8D70i9GM= github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= @@ -1917,7 +2040,6 @@ github.com/hashicorp/terraform-plugin-sdk v1.7.0/go.mod h1:OjgQmey5VxnPej/buEhe+ github.com/hashicorp/terraform-plugin-test v1.2.0/go.mod h1:QIJHYz8j+xJtdtLrFTlzQVC0ocr3rf/OjIpgZLK56Hs= github.com/hashicorp/terraform-plugin-testing v1.14.0 h1:5t4VKrjOJ0rg0sVuSJ86dz5K7PHsMO6OKrHFzDBerWA= github.com/hashicorp/terraform-plugin-testing v1.14.0/go.mod h1:1qfWkecyYe1Do2EEOK/5/WnTyvC8wQucUkkhiGLg5nk= -github.com/hashicorp/terraform-registry-address v0.2.5/go.mod h1:PpzXWINwB5kuVS5CA7m1+eO2f1jKb5ZDIxrOPfpnGkg= github.com/hashicorp/terraform-registry-address v0.4.0 h1:S1yCGomj30Sao4l5BMPjTGZmCNzuv7/GDTDX99E9gTk= github.com/hashicorp/terraform-registry-address v0.4.0/go.mod h1:LRS1Ay0+mAiRkUyltGT+UHWkIqTFvigGn/LbMshfflE= github.com/hashicorp/terraform-svchost v0.0.0-20191011084731-65d371908596/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg= @@ -1927,7 +2049,6 @@ github.com/hashicorp/vault/api v1.12.0 h1:meCpJSesvzQyao8FCOgk2fGdoADAnbDu2WPJN1 github.com/hashicorp/vault/api v1.12.0/go.mod h1:si+lJCYO7oGkIoNPAN8j3azBLTn9SjMGS+jFaHd1Cck= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= github.com/hexops/autogold v1.3.0 h1:IEtGNPxBeBu8RMn8eKWh/Ll9dVNgSnJ7bp/qHgMQ14o= @@ -1943,6 +2064,7 @@ github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= @@ -1953,15 +2075,18 @@ github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465/go.mod h1: github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jezek/xgb v1.0.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= +github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94= github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -1970,32 +2095,40 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-crypto v0.0.0-20161004153544-93f5b35093ba/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= @@ -2010,6 +2143,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= @@ -2017,6 +2152,7 @@ github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuz github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= github.com/lyft/protoc-gen-star/v2 v2.0.4-0.20230330145011-496ad1ac90a4/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= @@ -2031,7 +2167,6 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= @@ -2042,6 +2177,7 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= @@ -2050,6 +2186,8 @@ github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -2072,8 +2210,11 @@ github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZX github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -2085,6 +2226,8 @@ github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= @@ -2095,19 +2238,30 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A= github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= github.com/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= @@ -2128,6 +2282,7 @@ github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xl github.com/onsi/ginkgo/v2 v2.17.1/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs= github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= @@ -2150,18 +2305,28 @@ github.com/onsi/gomega v1.33.0/go.mod h1:+925n5YtiFsLzzafLUHzVMBpvvRAzrydIBiSIxj github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/opentofu/registry-address v0.0.0-20230922120653-901b9ae4061a h1:NyM/PPbc+kxxv2d4OKfE32C5fLtVTLceyg4YKKCYO9Y= -github.com/opentofu/registry-address v0.0.0-20230922120653-901b9ae4061a/go.mod h1:HzQhpVo/NJnGmN+7FPECCVCA5ijU7AUcvf39enBKYOc= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentofu/registry-address/v2 v2.0.0-20250611143131-d0a99bd8acdd h1:YAAnzmyOoMvm5SuGXL4hhlfBgqz92XDfORGPV3kmQFc= github.com/opentofu/registry-address/v2 v2.0.0-20250611143131-d0a99bd8acdd/go.mod h1:7M92SvuJm1WBriIpa4j0XmruU9pxkgPXmRdc6FfAvAk= github.com/opentofu/svchost v0.0.0-20250610175836-86c9e5e3d8c8 h1:J3pmsVB+nGdfNp5HWdEAC96asYgc7S6J724ICrYDCTk= github.com/opentofu/svchost v0.0.0-20250610175836-86c9e5e3d8c8/go.mod h1:0kKTcD9hUrbAz41GWp8USa/+OuI8QKirU3qdCWNa3jI= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU= github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M= github.com/pgavlin/fx/v2 v2.0.10 h1:ggyQ6pB+lEQEbEae48Wh/X221eLOamMD7i01ISe88u4= @@ -2171,6 +2336,7 @@ github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386/go.mod h1:MRxH github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= @@ -2179,15 +2345,18 @@ github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxu github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/sftp v1.13.10 h1:+5FbKNTe5Z9aspU88DPIKJ9z2KZoaGCu6Sr6kKR/5mU= github.com/pkg/sftp v1.13.10/go.mod h1:bJ1a7uDhrX/4OII+agvy28lzRvQrmIQuaHrcI1HbeGA= github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= @@ -2196,53 +2365,51 @@ github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndr github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= -github.com/pulumi/esc v0.20.0 h1:LZn4sjAsI76x10ZuZXXyh2ExGcP7AHmjOzCi/p3/fpQ= -github.com/pulumi/esc v0.20.0/go.mod h1:h1VjdedI0K84MhMzaR9ZKbEpU6SfZMOZF4ZrVgQyNLY= github.com/pulumi/esc v0.21.0 h1:TR8Ff22SU+z8cooTmUKkmk2FltXW/wDPrIwI9BP88Vk= github.com/pulumi/esc v0.21.0/go.mod h1:mkghIFn/TvN3XnP4jmCB4U5BG1I4UjGluARi39ckrCE= github.com/pulumi/inflector v0.2.1 h1:bqyiish3tq//vLeLiEstSFE5K7RNjy/ce47ed4QATu8= github.com/pulumi/inflector v0.2.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY= -github.com/pulumi/providertest v0.3.0 h1:Dv10aoFaNQBDRtK8cRbd2uk9vEhpC/NryN+0y7NX4/o= -github.com/pulumi/providertest v0.3.0/go.mod h1:aTxVfdxP/Pe0iPbokjBp99x0XaY4fkZB2CjIS5wysMs= +github.com/pulumi/providertest v0.6.0 h1:ZnefsbhkPE+BpKienHgb38P/6SEtXjjOXGGdMEUIOgk= +github.com/pulumi/providertest v0.6.0/go.mod h1:OBpIGSQrw1FW9VNaHBtKCRxEoTISvx8JsxECmRqRgRQ= github.com/pulumi/pulumi-java/pkg v1.12.0 h1:T7yFnFr0bgqy6huVUANMyUeGO1/Y3r2CJJ6S5YQDQCU= github.com/pulumi/pulumi-java/pkg v1.12.0/go.mod h1:g8QQjEgB5wTsZptyf1vbIcI/pgYEGJObnihAEgymkAo= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.118.0 h1:EteN835o3EOHaJNFi9fjWu09uF0O0fAf11yFM0aka0M= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.118.0/go.mod h1:6WRgxtYSONM9ZanvEAIjNXMeg5RQviaEfZvMev9ojEU= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.119.0 h1:Xar7aV21GSCgiSWXiMGL9XGxOM+t/Tcj3YgXvlSYDEY= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.119.0/go.mod h1:oPJS9NHUvJt/h5zdTTTI/IR2W4AHZ8lqelCzNO5UVxA= github.com/pulumi/pulumi-terraform-bridge/v3 v3.120.0 h1:D9R3GtKXWBl3W0YikDHXuU/Dl/QDbaqIyDr4+m4+L+A= github.com/pulumi/pulumi-terraform-bridge/v3 v3.120.0/go.mod h1:nkzRoRemZhDC9T1jp4CSEkj7qgUXjFlFdH1v0yz8ZNg= github.com/pulumi/pulumi-yaml v1.19.1 h1:Y92eTQv07p5RbbNj6s/54+ibdPgvndLJ2Lb1IjYffng= github.com/pulumi/pulumi-yaml v1.19.1/go.mod h1:n1JTtfUXR1IWVJ86HvMvQglK5mrDeDduxsLifGW1WIA= -github.com/pulumi/pulumi/pkg/v3 v3.209.0 h1:1KzIJTO2F6iCb+08E25C/QBdbQ9by0FATsAFdynDve8= -github.com/pulumi/pulumi/pkg/v3 v3.209.0/go.mod h1:q7JXbGRh+m5lwA743tS8zrzU6mjmDGpFEUQxyio/900= -github.com/pulumi/pulumi/pkg/v3 v3.213.0 h1:Vs7uooioUTgoe9OiusNIr3n5Emjw7gU38NCp3gGzZq0= -github.com/pulumi/pulumi/pkg/v3 v3.213.0/go.mod h1:rqMSDY7SPN6ymilqjHImS+z+TsHCs5rqcJVhDNAFvuY= github.com/pulumi/pulumi/pkg/v3 v3.218.0 h1:eiPdauXfMRAxnmJgaah5Ms7vQ9KSHj4732qE5ScXQH0= github.com/pulumi/pulumi/pkg/v3 v3.218.0/go.mod h1:ww7sWw6SW3D0PfCU+65/VwxXDodvChXNya8/Darr7S8= -github.com/pulumi/pulumi/sdk/v3 v3.212.0 h1:YQKFamkd+3sqcbFUi+sq50DejdymayYbqaz+OQnSvug= -github.com/pulumi/pulumi/sdk/v3 v3.212.0/go.mod h1:Bn5Z9Rzp1lPqdAccaB+F2ivUBiamEl2TNR3Gg/h7iLs= -github.com/pulumi/pulumi/sdk/v3 v3.213.0 h1:ICp0WJlTShaTLrx2fDI52fJ3xwCf1h8T8tVrKDRNUB4= -github.com/pulumi/pulumi/sdk/v3 v3.213.0/go.mod h1:Bn5Z9Rzp1lPqdAccaB+F2ivUBiamEl2TNR3Gg/h7iLs= -github.com/pulumi/pulumi/sdk/v3 v3.218.0 h1:kRad759G31wo6GrIM0azt0nPyKw/738P8gmK4ogf5JA= -github.com/pulumi/pulumi/sdk/v3 v3.218.0/go.mod h1:ZOBPPC2NZOZf729AdCX+CctfNc5SN6aJh0bdqNdzQC4= github.com/pulumi/pulumi/sdk/v3 v3.219.0 h1:OwTSwk1ZuOI4hQUdSccWuIAuqs4fL/FcppesPOAKHQ8= github.com/pulumi/pulumi/sdk/v3 v3.219.0/go.mod h1:ZOBPPC2NZOZf729AdCX+CctfNc5SN6aJh0bdqNdzQC4= -github.com/pulumi/schema-tools v0.1.2 h1:Fd9xvUjgck4NA+7/jSk7InqCUT4Kj940+EcnbQKpfZo= -github.com/pulumi/schema-tools v0.1.2/go.mod h1:62lgj52Tzq11eqWTIaKd+EVyYAu5dEcDJxMhTjvMO/k= github.com/pulumi/terraform-diff-reader v0.0.2 h1:kTE4nEXU3/SYXESvAIem+wyHMI3abqkI3OhJ0G04LLI= github.com/pulumi/terraform-diff-reader v0.0.2/go.mod h1:sZ9FUzGO+yM41hsQHs/yIcj/Y993qMdBxBU5mpDmAfQ= -github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250530111747-935112552988 h1:1q4ldc10b50WNvzjx4DD/rkFfhIdK96Tz14TFEGdGso= -github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250530111747-935112552988/go.mod h1:QYmYnLfsosrxjCnGY1p9c7Zj6n9thnEE+7RObeYs3fA= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250923233607-7f1981c8674a h1:bTwou+tt2fyfuuCp9+VQOlgEJk/xKEaYeoX2HCtp2es= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20250923233607-7f1981c8674a/go.mod h1:rpW/bFN645nI+o0jth9hyIs/eWi3GP3B1J39fWZKC0Y= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rhysd/go-fakeio v1.0.0 h1:+TjiKCOs32dONY7DaoVz/VPOdvRkPfBkEyUDIpM8FQY= @@ -2251,6 +2418,7 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= @@ -2260,16 +2428,22 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99 github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE= github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/segmentio/asm v1.1.3 h1:WM03sfUOENvvKexOLp+pCqgb/WDjsi7EK8gIsICtzhc= github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= @@ -2282,11 +2456,19 @@ github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepq github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= github.com/skeema/knownhosts v1.3.2 h1:EDL9mgf4NzwMXCTfaxSD/o/a5fxDw/xL9nkU28JjdBg= github.com/skeema/knownhosts v1.3.2/go.mod h1:bEg3iQAuw+jyiw+484wwFJoKSLwcfd7fqRy+N0QTiow= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= @@ -2297,8 +2479,10 @@ github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= @@ -2306,7 +2490,11 @@ github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -2333,6 +2521,7 @@ github.com/teekennedy/goldmark-markdown v0.3.0 h1:ik9/biVGCwGWFg8dQ3KVm2pQ/wiiG0 github.com/teekennedy/goldmark-markdown v0.3.0/go.mod h1:kMhDz8La77A9UHvJGsxejd0QUflN9sS+QXCqnhmxmNo= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= @@ -2341,6 +2530,8 @@ github.com/ulikunitz/xz v0.5.5/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4A github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.1+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= @@ -2358,6 +2549,7 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -2371,10 +2563,9 @@ github.com/zclconf/go-cty v1.0.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLE github.com/zclconf/go-cty v1.1.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= github.com/zclconf/go-cty v1.13.1/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= -github.com/zclconf/go-cty v1.15.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= -github.com/zclconf/go-cty v1.16.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.16.3/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.16.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zclconf/go-cty v1.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0= github.com/zclconf/go-cty v1.17.0/go.mod h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= @@ -2387,6 +2578,10 @@ github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -2396,12 +2591,12 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/detectors/gcp v1.32.0/go.mod h1:TVqo0Sda4Cv8gCIixd7LuLwW4EylumVWfhjZJjDD4DU= go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg= @@ -2412,6 +2607,7 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.47.0/go.mod h1: go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= @@ -2419,10 +2615,11 @@ go.opentelemetry.io/otel v1.23.0/go.mod h1:YCycw9ZeKhcJFrb34iVSkyT0iczq/zYDtZYFu go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= +go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= @@ -2430,21 +2627,27 @@ go.opentelemetry.io/otel/metric v1.23.0/go.mod h1:MqUW2X2a6Q8RN96E2/nqNoT+z9BSms go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= +go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= +go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= @@ -2452,7 +2655,7 @@ go.opentelemetry.io/otel/trace v1.23.0/go.mod h1:GSGTbIClEsuZrGIzoEHqsVfxgn5Ukgg go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= +go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= @@ -2460,17 +2663,32 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= gocloud.dev v0.37.0 h1:XF1rN6R0qZI/9DYjN16Uy0durAmSlf58DHOcb28GPro= gocloud.dev v0.37.0/go.mod h1:7/O4kqdInCNsc6LqgmuFnS0GRew4XNNYWpA44yQnwco= gocloud.dev/secrets/hashivault v0.37.0 h1:5ehGtUBP29DFAgAs6bPw7fVSgqQ3TxaoK2xVcLp1x+c= gocloud.dev/secrets/hashivault v0.37.0/go.mod h1:4ClUWjBfP8wLdGts56acjHz3mWLuATMoH9vi74FjIv8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -2480,7 +2698,6 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= @@ -2510,10 +2727,12 @@ golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ss golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= -golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= -golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= -golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= +golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -2522,6 +2741,7 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= @@ -2530,12 +2750,23 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20210722180016-6781d3edade3/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20221012211006-4de253d81b95/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= golang.org/x/exp v0.0.0-20230206171751-46f607a40771/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/exp v0.0.0-20250718183923-645b1fa84792 h1:R9PFI6EUdfVKgwKjZef7QIwGcBKu86OEFpJ9nUEP2l4= golang.org/x/exp v0.0.0-20250718183923-645b1fa84792/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc= +golang.org/x/exp/shiny v0.0.0-20220827204233-334a2380cb91/go.mod h1:VjAR7z0ngyATZTELrBSkxOOHhhlnVUxDye4mcjx5h/8= +golang.org/x/exp/shiny v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= +golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= +golang.org/x/exp/shiny v0.0.0-20240707233637-46b078467d37/go.mod h1:3F+MieQB7dRYLTmnncoFbb1crS5lfQoTfDgQy6K4N0o= +golang.org/x/exp/shiny v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:3F+MieQB7dRYLTmnncoFbb1crS5lfQoTfDgQy6K4N0o= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -2549,6 +2780,18 @@ golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeap golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A= +golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4= +golang.org/x/image v0.6.0/go.mod h1:MXLdDR43H7cDJq5GEGXEVeeNhPgi+YYEQ2pC1byI1x0= +golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg= +golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8= +golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= +golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/image v0.21.0/go.mod h1:vUbsLavqK/W303ZroQQVKQ+Af3Yl6Uz1Ppu5J/cLz78= +golang.org/x/image v0.24.0/go.mod h1:4b/ITuLfqYq1hqZcjofwctIhi7sZh2WaCjvsBNjjya8= +golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -2563,10 +2806,13 @@ golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= +golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a/go.mod h1:Ede7gF0KGoHlj822RtphAHK1jLdrcuRBZg0sF1Q+SPc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -2591,24 +2837,32 @@ golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= -golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= +golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -2685,9 +2939,12 @@ golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -2731,8 +2988,7 @@ golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/oauth2 v0.26.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= @@ -2761,18 +3017,27 @@ golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2781,13 +3046,15 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2858,6 +3125,7 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2889,14 +3157,17 @@ golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= +golang.org/x/telemetry v0.0.0-20250710130107-8d8967aff50b/go.mod h1:4ZwOYna0/zsOKwuR5X/m0QFOJpSZvAxFfkQT+Erd9D4= +golang.org/x/telemetry v0.0.0-20250807160809-1a19826ec488/go.mod h1:fGb/2+tgXXjhjHsTNdVEEMZNWA0quBnfrO+AfoDSAKw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -2926,10 +3197,11 @@ golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= -golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= -golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= -golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= +golang.org/x/term v0.33.0/go.mod h1:s18+ql9tYWp1IfpV9DmCtQDDSRBUjKaw9M1eAv5UeF0= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= +golang.org/x/term v0.35.0/go.mod h1:TPGtkTLesOwf2DE8CgVYiZinHAOuy5AYUYT1lENIZnA= golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2959,23 +3231,27 @@ golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -2984,6 +3260,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -2994,6 +3271,8 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -3001,6 +3280,8 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -3051,6 +3332,8 @@ golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8 golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= @@ -3058,8 +3341,10 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxb golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= -golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= -golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -3077,12 +3362,17 @@ gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= +gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= +gonum.org/v1/plot v0.15.2/go.mod h1:DX+x+DWso3LTha+AdkJEv5Txvi+Tql3KAGkehP0/Ubg= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -3158,6 +3448,7 @@ google.golang.org/api v0.166.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -3171,6 +3462,7 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -3360,8 +3652,7 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go. google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a/go.mod h1:jehYqy3+AhJU9ve55aNOaSml7wUXjF9x6z2LcCfpAhY= -google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a/go.mod h1:3kWAYMk1I75K4vykHtKt2ycnOgpA6974V7bREqbsenU= -google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= +google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= @@ -3414,17 +3705,22 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250212204824-5a70512c5d8b/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a/go.mod h1:uRxBH1mhmO8PGhU89cMcHaXKZqO+OfakD8QQO0oYwlQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d/go.mod h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -3481,8 +3777,7 @@ google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvy google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= +google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= @@ -3503,7 +3798,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -3515,23 +3809,27 @@ google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojt google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= -google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -3545,6 +3843,7 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -3623,3 +3922,5 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/provider/resources.go b/provider/resources.go index 05945233..3a0d0787 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -16,6 +16,8 @@ package proxmoxve import ( "context" + "strconv" + // embed is used to store bridge-metadata.json in the compiled binary _ "embed" "fmt" @@ -49,6 +51,7 @@ const ( downloadMod = "download" sdnMod = "sdn" sdnZoneMod = "sdnzone" + sdnFabricMod = "sdnfabric" haMod = "ha" ) @@ -189,8 +192,105 @@ func Provider() tfbridge.ProviderInfo { return rpm, nil }, }, + "proxmox_virtual_environment_cloned_vm": { + Tok: tfbridge.MakeResource(mainPkg, "VM", "ClonedVirtualMachine"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(strconv.Itoa(state[resourceIDPropertyKey].V.(int))), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "vmId", + Type: "string", + }, + }, + }, // Storage "proxmox_virtual_environment_file": {Tok: tfbridge.MakeResource(mainPkg, "Storage", "File")}, + "proxmox_virtual_environment_storage_lvm": { + Tok: tfbridge.MakeResource(mainPkg, "Storage", "LVM"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "lvmId", + }, + }, + }, + "proxmox_virtual_environment_storage_directory": { + Tok: tfbridge.MakeResource(mainPkg, "Storage", "Directory"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "directoryId", + }, + }, + }, + "proxmox_virtual_environment_storage_nfs": { + Tok: tfbridge.MakeResource(mainPkg, "Storage", "NFS"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "nfsId", + }, + }, + }, + "proxmox_virtual_environment_storage_zfspool": { + Tok: tfbridge.MakeResource(mainPkg, "Storage", "ZFSPool"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "zfsPoolId", + }, + }, + }, + "proxmox_virtual_environment_storage_cifs": { + Tok: tfbridge.MakeResource(mainPkg, "Storage", "CIFS"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "cifsId", + }, + }, + }, + "proxmox_virtual_environment_storage_lvmthin": { + Tok: tfbridge.MakeResource(mainPkg, "Storage", "LVMThin"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "lvmThinId", + }, + }, + }, + "proxmox_virtual_environment_storage_pbs": { + Tok: tfbridge.MakeResource(mainPkg, "Storage", "PBS"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "pbsId", + }, + }, + }, // Environment "proxmox_virtual_environment_dns": {Tok: tfbridge.MakeResource(mainPkg, "index", "DNS")}, "proxmox_virtual_environment_certificate": {Tok: tfbridge.MakeResource(mainPkg, "index", "Certifi")}, @@ -217,6 +317,14 @@ func Provider() tfbridge.ProviderInfo { Tok: tfbridge.MakeResource(mainPkg, "index", "AcmeDnsPlugin"), ComputeID: tfbridge.DelegateIDField("plugin", "proxmoxve", "https://github.com/muhlba91/pulumi-proxmoxve"), }, + "proxmox_virtual_environment_acme_certificate": { + Tok: tfbridge.MakeResource(mainPkg, "Acme", "Certificate"), + Fields: map[string]*tfbridge.SchemaInfo{ + "certificate": { + CSharpName: "certificatePem", + }, + }, + }, // Metrics "proxmox_virtual_environment_metrics_server": {Tok: tfbridge.MakeResource(mainPkg, "Metrics", "MetricsServer")}, // SDNZone @@ -292,6 +400,31 @@ func Provider() tfbridge.ProviderInfo { }, }, }, + // SDNFabric + "proxmox_virtual_environment_sdn_fabric_openfabric": { + Tok: tfbridge.MakeResource(mainPkg, "SDNFabric", "OpenFabric"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "fabricId", + }, + }, + }, + "proxmox_virtual_environment_sdn_fabric_ospf": { + Tok: tfbridge.MakeResource(mainPkg, "SDNFabric", "OSPF"), + ComputeID: func(_ context.Context, state resource.PropertyMap) (resource.ID, error) { + const resourceIDPropertyKey = resource.PropertyKey("id") + return resource.ID(state[resourceIDPropertyKey].V.(string)), nil + }, + Fields: map[string]*tfbridge.SchemaInfo{ + "id": { + Name: "ospfId", + }, + }, + }, }, DataSources: map[string]*tfbridge.DataSourceInfo{ // Cluster diff --git a/sdk/dotnet/.gitattributes b/sdk/dotnet/.gitattributes new file mode 100644 index 00000000..aae64e23 --- /dev/null +++ b/sdk/dotnet/.gitattributes @@ -0,0 +1 @@ +* linguist-generated diff --git a/sdk/dotnet/.gitignore b/sdk/dotnet/.gitignore new file mode 100644 index 00000000..1746e326 --- /dev/null +++ b/sdk/dotnet/.gitignore @@ -0,0 +1,2 @@ +bin +obj diff --git a/sdk/dotnet/Acme/Certificate.cs b/sdk/dotnet/Acme/Certificate.cs new file mode 100644 index 00000000..94bce792 --- /dev/null +++ b/sdk/dotnet/Acme/Certificate.cs @@ -0,0 +1,391 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Acme +{ + /// + /// Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node. + /// + /// ## Example Usage + /// + /// ### Basic ACME Certificate with HTTP-01 Challenge + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// // First, create an ACME account + /// var example = new ProxmoxVE.AcmeAccount("example", new() + /// { + /// Name = "production", + /// Contact = "admin@example.com", + /// Directory = "https://acme-v02.api.letsencrypt.org/directory", + /// Tos = "https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf", + /// }); + /// + /// // Order a certificate for the node + /// var exampleCertificate = new ProxmoxVE.Acme.Certificate("example", new() + /// { + /// NodeName = "pve", + /// Account = example.Name, + /// Domains = new[] + /// { + /// new ProxmoxVE.Acme.Inputs.CertificateDomainArgs + /// { + /// Domain = "pve.example.com", + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ### ACME Certificate with DNS-01 Challenge + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// // Create an ACME account + /// var example = new ProxmoxVE.AcmeAccount("example", new() + /// { + /// Name = "production", + /// Contact = "admin@example.com", + /// Directory = "https://acme-v02.api.letsencrypt.org/directory", + /// Tos = "https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf", + /// }); + /// + /// // Configure a DNS plugin (Desec example) + /// var desec = new ProxmoxVE.AcmeDnsPlugin("desec", new() + /// { + /// Plugin = "desec", + /// Api = "desec", + /// Data = + /// { + /// { "DEDYN_TOKEN", dedynToken }, + /// }, + /// }); + /// + /// // Order a certificate using the DNS plugin + /// var test = new ProxmoxVE.Acme.Certificate("test", new() + /// { + /// NodeName = "pve", + /// Account = example.Name, + /// Force = false, + /// Domains = new[] + /// { + /// new ProxmoxVE.Acme.Inputs.CertificateDomainArgs + /// { + /// Domain = "pve.example.dedyn.io", + /// Plugin = desec.Plugin, + /// }, + /// }, + /// }, new CustomResourceOptions + /// { + /// DependsOn = + /// { + /// example, + /// desec, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ### Force Certificate Renewal + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var exampleForce = new ProxmoxVE.Acme.Certificate("example_force", new() + /// { + /// NodeName = "pve", + /// Account = example.Name, + /// Force = true, + /// Domains = new[] + /// { + /// new ProxmoxVE.Acme.Inputs.CertificateDomainArgs + /// { + /// Domain = "pve.example.com", + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Related Resources + /// + /// - `proxmoxve.AcmeAccount` - Manages ACME accounts + /// - `proxmoxve.AcmeDnsPlugin` - Manages ACME DNS plugins for DNS-01 challenges + /// - `proxmoxve.Certifi` - Manages custom SSL/TLS certificates (non-ACME) + /// + /// ## Import + /// + /// ACME certificates can be imported using the node name: + /// + /// #!/usr/bin/env sh + /// + /// ACME certificates can be imported using the node name, e.g.: + /// + /// ```sh + /// $ pulumi import proxmoxve:Acme/certificate:Certificate example pve + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Acme/certificate:Certificate")] + public partial class Certificate : global::Pulumi.CustomResource + { + /// + /// The ACME account name to use for ordering the certificate. + /// + [Output("account")] + public Output Account { get; private set; } = null!; + + /// + /// The PEM-encoded certificate data. + /// + [Output("certificate")] + public Output certificatePem { get; private set; } = null!; + + /// + /// The list of domains to include in the certificate. At least one domain is required. + /// + [Output("domains")] + public Output> Domains { get; private set; } = null!; + + /// + /// The certificate fingerprint. + /// + [Output("fingerprint")] + public Output Fingerprint { get; private set; } = null!; + + /// + /// Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + /// + [Output("force")] + public Output Force { get; private set; } = null!; + + /// + /// The certificate issuer. + /// + [Output("issuer")] + public Output Issuer { get; private set; } = null!; + + /// + /// The name of the Proxmox VE node for which to order/manage the ACME certificate. + /// + [Output("nodeName")] + public Output NodeName { get; private set; } = null!; + + /// + /// The certificate expiration timestamp. + /// + [Output("notAfter")] + public Output NotAfter { get; private set; } = null!; + + /// + /// The certificate start timestamp. + /// + [Output("notBefore")] + public Output NotBefore { get; private set; } = null!; + + /// + /// The certificate subject. + /// + [Output("subject")] + public Output Subject { get; private set; } = null!; + + /// + /// The certificate subject alternative names (SANs). + /// + [Output("subjectAlternativeNames")] + public Output> SubjectAlternativeNames { get; private set; } = null!; + + + /// + /// Create a Certificate resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Certificate(string name, CertificateArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Acme/certificate:Certificate", name, args ?? new CertificateArgs(), MakeResourceOptions(options, "")) + { + } + + private Certificate(string name, Input id, CertificateState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Acme/certificate:Certificate", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Certificate resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Certificate Get(string name, Input id, CertificateState? state = null, CustomResourceOptions? options = null) + { + return new Certificate(name, id, state, options); + } + } + + public sealed class CertificateArgs : global::Pulumi.ResourceArgs + { + /// + /// The ACME account name to use for ordering the certificate. + /// + [Input("account", required: true)] + public Input Account { get; set; } = null!; + + [Input("domains", required: true)] + private InputList? _domains; + + /// + /// The list of domains to include in the certificate. At least one domain is required. + /// + public InputList Domains + { + get => _domains ?? (_domains = new InputList()); + set => _domains = value; + } + + /// + /// Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + /// + [Input("force")] + public Input? Force { get; set; } + + /// + /// The name of the Proxmox VE node for which to order/manage the ACME certificate. + /// + [Input("nodeName", required: true)] + public Input NodeName { get; set; } = null!; + + public CertificateArgs() + { + } + public static new CertificateArgs Empty => new CertificateArgs(); + } + + public sealed class CertificateState : global::Pulumi.ResourceArgs + { + /// + /// The ACME account name to use for ordering the certificate. + /// + [Input("account")] + public Input? Account { get; set; } + + /// + /// The PEM-encoded certificate data. + /// + [Input("certificate")] + public Input? certificatePem { get; set; } + + [Input("domains")] + private InputList? _domains; + + /// + /// The list of domains to include in the certificate. At least one domain is required. + /// + public InputList Domains + { + get => _domains ?? (_domains = new InputList()); + set => _domains = value; + } + + /// + /// The certificate fingerprint. + /// + [Input("fingerprint")] + public Input? Fingerprint { get; set; } + + /// + /// Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + /// + [Input("force")] + public Input? Force { get; set; } + + /// + /// The certificate issuer. + /// + [Input("issuer")] + public Input? Issuer { get; set; } + + /// + /// The name of the Proxmox VE node for which to order/manage the ACME certificate. + /// + [Input("nodeName")] + public Input? NodeName { get; set; } + + /// + /// The certificate expiration timestamp. + /// + [Input("notAfter")] + public Input? NotAfter { get; set; } + + /// + /// The certificate start timestamp. + /// + [Input("notBefore")] + public Input? NotBefore { get; set; } + + /// + /// The certificate subject. + /// + [Input("subject")] + public Input? Subject { get; set; } + + [Input("subjectAlternativeNames")] + private InputList? _subjectAlternativeNames; + + /// + /// The certificate subject alternative names (SANs). + /// + public InputList SubjectAlternativeNames + { + get => _subjectAlternativeNames ?? (_subjectAlternativeNames = new InputList()); + set => _subjectAlternativeNames = value; + } + + public CertificateState() + { + } + public static new CertificateState Empty => new CertificateState(); + } +} diff --git a/sdk/dotnet/Acme/Inputs/CertificateDomainArgs.cs b/sdk/dotnet/Acme/Inputs/CertificateDomainArgs.cs new file mode 100644 index 00000000..6d16fbcb --- /dev/null +++ b/sdk/dotnet/Acme/Inputs/CertificateDomainArgs.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Acme.Inputs +{ + + public sealed class CertificateDomainArgs : global::Pulumi.ResourceArgs + { + /// + /// An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + /// + [Input("alias")] + public Input? Alias { get; set; } + + /// + /// The domain name to include in the certificate. + /// + [Input("domain", required: true)] + public Input Domain { get; set; } = null!; + + /// + /// The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + /// + [Input("plugin")] + public Input? Plugin { get; set; } + + public CertificateDomainArgs() + { + } + public static new CertificateDomainArgs Empty => new CertificateDomainArgs(); + } +} diff --git a/sdk/dotnet/Acme/Inputs/CertificateDomainGetArgs.cs b/sdk/dotnet/Acme/Inputs/CertificateDomainGetArgs.cs new file mode 100644 index 00000000..24c9a31f --- /dev/null +++ b/sdk/dotnet/Acme/Inputs/CertificateDomainGetArgs.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Acme.Inputs +{ + + public sealed class CertificateDomainGetArgs : global::Pulumi.ResourceArgs + { + /// + /// An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + /// + [Input("alias")] + public Input? Alias { get; set; } + + /// + /// The domain name to include in the certificate. + /// + [Input("domain", required: true)] + public Input Domain { get; set; } = null!; + + /// + /// The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + /// + [Input("plugin")] + public Input? Plugin { get; set; } + + public CertificateDomainGetArgs() + { + } + public static new CertificateDomainGetArgs Empty => new CertificateDomainGetArgs(); + } +} diff --git a/sdk/dotnet/Acme/Outputs/CertificateDomain.cs b/sdk/dotnet/Acme/Outputs/CertificateDomain.cs new file mode 100644 index 00000000..517f899d --- /dev/null +++ b/sdk/dotnet/Acme/Outputs/CertificateDomain.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Acme.Outputs +{ + + [OutputType] + public sealed class CertificateDomain + { + /// + /// An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + /// + public readonly string? Alias; + /// + /// The domain name to include in the certificate. + /// + public readonly string Domain; + /// + /// The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + /// + public readonly string? Plugin; + + [OutputConstructor] + private CertificateDomain( + string? alias, + + string domain, + + string? plugin) + { + Alias = alias; + Domain = domain; + Plugin = plugin; + } + } +} diff --git a/sdk/dotnet/Apt/Standard/Repository.cs b/sdk/dotnet/Apt/Standard/Repository.cs index fd5addc2..cadaf69a 100644 --- a/sdk/dotnet/Apt/Standard/Repository.cs +++ b/sdk/dotnet/Apt/Standard/Repository.cs @@ -67,7 +67,7 @@ public partial class Repository : global::Pulumi.CustomResource public Output FilePath { get; private set; } = null!; /// - /// The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `Enterprise` | `no-subscription` | `Test`. + /// The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `Enterprise` | `no-subscription` | `Test`. /// [Output("handle")] public Output Handle { get; private set; } = null!; @@ -144,7 +144,7 @@ public static Repository Get(string name, Input id, RepositoryState? sta public sealed class RepositoryArgs : global::Pulumi.ResourceArgs { /// - /// The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `Enterprise` | `no-subscription` | `Test`. + /// The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `Enterprise` | `no-subscription` | `Test`. /// [Input("handle", required: true)] public Input Handle { get; set; } = null!; @@ -176,7 +176,7 @@ public sealed class RepositoryState : global::Pulumi.ResourceArgs public Input? FilePath { get; set; } /// - /// The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `Enterprise` | `no-subscription` | `Test`. + /// The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `Enterprise` | `no-subscription` | `Test`. /// [Input("handle")] public Input? Handle { get; set; } diff --git a/sdk/dotnet/Ct/Container.cs b/sdk/dotnet/Ct/Container.cs index 840afb52..f1640fcf 100644 --- a/sdk/dotnet/Ct/Container.cs +++ b/sdk/dotnet/Ct/Container.cs @@ -111,6 +111,12 @@ namespace Pulumi.ProxmoxVE.CT /// Size = "10G", /// Path = "/mnt/volume", /// }, + /// new ProxmoxVE.CT.Inputs.ContainerMountPointArgs + /// { + /// Volume = "local-lvm:subvol-108-disk-101", + /// Size = "10G", + /// Path = "/mnt/data", + /// }, /// }, /// Startup = new ProxmoxVE.CT.Inputs.ContainerStartupArgs /// { diff --git a/sdk/dotnet/Ct/Inputs/ContainerDiskArgs.cs b/sdk/dotnet/Ct/Inputs/ContainerDiskArgs.cs index 8ad7c55e..1e6beb1e 100644 --- a/sdk/dotnet/Ct/Inputs/ContainerDiskArgs.cs +++ b/sdk/dotnet/Ct/Inputs/ContainerDiskArgs.cs @@ -37,6 +37,13 @@ public InputList MountOptions set => _mountOptions = value; } + /// + /// The in-datastore path to the disk image. + /// Use this attribute for cross-resource references. + /// + [Input("pathInDatastore")] + public Input? PathInDatastore { get; set; } + /// /// Enable user quotas for the container rootfs /// diff --git a/sdk/dotnet/Ct/Inputs/ContainerDiskGetArgs.cs b/sdk/dotnet/Ct/Inputs/ContainerDiskGetArgs.cs index e124bd7d..1bd8cb22 100644 --- a/sdk/dotnet/Ct/Inputs/ContainerDiskGetArgs.cs +++ b/sdk/dotnet/Ct/Inputs/ContainerDiskGetArgs.cs @@ -37,6 +37,13 @@ public InputList MountOptions set => _mountOptions = value; } + /// + /// The in-datastore path to the disk image. + /// Use this attribute for cross-resource references. + /// + [Input("pathInDatastore")] + public Input? PathInDatastore { get; set; } + /// /// Enable user quotas for the container rootfs /// diff --git a/sdk/dotnet/Ct/Inputs/ContainerMountPointArgs.cs b/sdk/dotnet/Ct/Inputs/ContainerMountPointArgs.cs index f7b245a8..255da1ef 100644 --- a/sdk/dotnet/Ct/Inputs/ContainerMountPointArgs.cs +++ b/sdk/dotnet/Ct/Inputs/ContainerMountPointArgs.cs @@ -44,6 +44,13 @@ public InputList MountOptions [Input("path", required: true)] public Input Path { get; set; } = null!; + /// + /// The in-datastore path to the mount point volume. + /// Use this attribute for cross-resource references instead of `Volume`. + /// + [Input("pathInDatastore")] + public Input? PathInDatastore { get; set; } + /// /// Enable user quotas inside the container (not supported /// with ZFS subvolumes). diff --git a/sdk/dotnet/Ct/Inputs/ContainerMountPointGetArgs.cs b/sdk/dotnet/Ct/Inputs/ContainerMountPointGetArgs.cs index 920ba8ae..33cc1251 100644 --- a/sdk/dotnet/Ct/Inputs/ContainerMountPointGetArgs.cs +++ b/sdk/dotnet/Ct/Inputs/ContainerMountPointGetArgs.cs @@ -44,6 +44,13 @@ public InputList MountOptions [Input("path", required: true)] public Input Path { get; set; } = null!; + /// + /// The in-datastore path to the mount point volume. + /// Use this attribute for cross-resource references instead of `Volume`. + /// + [Input("pathInDatastore")] + public Input? PathInDatastore { get; set; } + /// /// Enable user quotas inside the container (not supported /// with ZFS subvolumes). diff --git a/sdk/dotnet/Ct/Outputs/ContainerDisk.cs b/sdk/dotnet/Ct/Outputs/ContainerDisk.cs index 3c04964c..fc39976b 100644 --- a/sdk/dotnet/Ct/Outputs/ContainerDisk.cs +++ b/sdk/dotnet/Ct/Outputs/ContainerDisk.cs @@ -27,6 +27,11 @@ public sealed class ContainerDisk /// public readonly ImmutableArray MountOptions; /// + /// The in-datastore path to the disk image. + /// Use this attribute for cross-resource references. + /// + public readonly string? PathInDatastore; + /// /// Enable user quotas for the container rootfs /// public readonly bool? Quota; @@ -49,6 +54,8 @@ private ContainerDisk( ImmutableArray mountOptions, + string? pathInDatastore, + bool? quota, bool? replicate, @@ -58,6 +65,7 @@ private ContainerDisk( Acl = acl; DatastoreId = datastoreId; MountOptions = mountOptions; + PathInDatastore = pathInDatastore; Quota = quota; Replicate = replicate; Size = size; diff --git a/sdk/dotnet/Ct/Outputs/ContainerMountPoint.cs b/sdk/dotnet/Ct/Outputs/ContainerMountPoint.cs index 63cecd79..e10f3ad0 100644 --- a/sdk/dotnet/Ct/Outputs/ContainerMountPoint.cs +++ b/sdk/dotnet/Ct/Outputs/ContainerMountPoint.cs @@ -32,6 +32,11 @@ public sealed class ContainerMountPoint /// public readonly string Path; /// + /// The in-datastore path to the mount point volume. + /// Use this attribute for cross-resource references instead of `Volume`. + /// + public readonly string? PathInDatastore; + /// /// Enable user quotas inside the container (not supported /// with ZFS subvolumes). /// @@ -70,6 +75,8 @@ private ContainerMountPoint( string path, + string? pathInDatastore, + bool? quota, bool? readOnly, @@ -86,6 +93,7 @@ private ContainerMountPoint( Backup = backup; MountOptions = mountOptions; Path = path; + PathInDatastore = pathInDatastore; Quota = quota; ReadOnly = readOnly; Replicate = replicate; diff --git a/sdk/dotnet/Download/File.cs b/sdk/dotnet/Download/File.cs index 38cb73bf..7523228a 100644 --- a/sdk/dotnet/Download/File.cs +++ b/sdk/dotnet/Download/File.cs @@ -149,9 +149,6 @@ public partial class File : global::Pulumi.CustomResource [Output("nodeName")] public Output NodeName { get; private set; } = null!; - /// - /// By default `True`. If `True` and file size has changed in the datastore, it will be replaced. If `False`, there will be no check. - /// [Output("overwrite")] public Output Overwrite { get; private set; } = null!; @@ -274,9 +271,6 @@ public sealed class FileArgs : global::Pulumi.ResourceArgs [Input("nodeName", required: true)] public Input NodeName { get; set; } = null!; - /// - /// By default `True`. If `True` and file size has changed in the datastore, it will be replaced. If `False`, there will be no check. - /// [Input("overwrite")] public Input? Overwrite { get; set; } @@ -354,9 +348,6 @@ public sealed class FileState : global::Pulumi.ResourceArgs [Input("nodeName")] public Input? NodeName { get; set; } - /// - /// By default `True`. If `True` and file size has changed in the datastore, it will be replaced. If `False`, there will be no check. - /// [Input("overwrite")] public Input? Overwrite { get; set; } diff --git a/sdk/dotnet/GetVm2.cs b/sdk/dotnet/GetVm2.cs index a674e66d..bd474f86 100644 --- a/sdk/dotnet/GetVm2.cs +++ b/sdk/dotnet/GetVm2.cs @@ -36,12 +36,6 @@ public static Output Invoke(GetVm2InvokeArgs args, InvokeOutputOpt public sealed class GetVm2Args : global::Pulumi.InvokeArgs { - /// - /// The cloning configuration. - /// - [Input("clone")] - public Inputs.GetVm2CloneArgs? Clone { get; set; } - /// /// The CPU configuration. /// @@ -113,12 +107,6 @@ public GetVm2Args() public sealed class GetVm2InvokeArgs : global::Pulumi.InvokeArgs { - /// - /// The cloning configuration. - /// - [Input("clone")] - public Input? Clone { get; set; } - /// /// The CPU configuration. /// @@ -192,10 +180,6 @@ public GetVm2InvokeArgs() [OutputType] public sealed class GetVm2Result { - /// - /// The cloning configuration. - /// - public readonly Outputs.GetVm2CloneResult? Clone; /// /// The CPU configuration. /// @@ -236,8 +220,6 @@ public sealed class GetVm2Result [OutputConstructor] private GetVm2Result( - Outputs.GetVm2CloneResult? clone, - Outputs.GetVm2CpuResult cpu, string? description, @@ -258,7 +240,6 @@ private GetVm2Result( Outputs.GetVm2VgaResult vga) { - Clone = clone; Cpu = cpu; Description = description; Id = id; diff --git a/sdk/dotnet/Inputs/GetVm2Clone.cs b/sdk/dotnet/Inputs/GetVm2Clone.cs deleted file mode 100644 index 9a305c7e..00000000 --- a/sdk/dotnet/Inputs/GetVm2Clone.cs +++ /dev/null @@ -1,32 +0,0 @@ -// *** WARNING: this file was generated by pulumi-language-dotnet. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.ProxmoxVE.Inputs -{ - - public sealed class GetVm2CloneArgs : global::Pulumi.InvokeArgs - { - /// - /// The ID of the VM to clone. - /// - [Input("id", required: true)] - public int Id { get; set; } - - /// - /// The number of retries to perform when cloning the VM (default: 3). - /// - [Input("retries", required: true)] - public int Retries { get; set; } - - public GetVm2CloneArgs() - { - } - public static new GetVm2CloneArgs Empty => new GetVm2CloneArgs(); - } -} diff --git a/sdk/dotnet/Inputs/GetVm2CloneArgs.cs b/sdk/dotnet/Inputs/GetVm2CloneArgs.cs deleted file mode 100644 index 4b1a61f6..00000000 --- a/sdk/dotnet/Inputs/GetVm2CloneArgs.cs +++ /dev/null @@ -1,32 +0,0 @@ -// *** WARNING: this file was generated by pulumi-language-dotnet. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.ProxmoxVE.Inputs -{ - - public sealed class GetVm2CloneInputArgs : global::Pulumi.ResourceArgs - { - /// - /// The ID of the VM to clone. - /// - [Input("id", required: true)] - public Input Id { get; set; } = null!; - - /// - /// The number of retries to perform when cloning the VM (default: 3). - /// - [Input("retries", required: true)] - public Input Retries { get; set; } = null!; - - public GetVm2CloneInputArgs() - { - } - public static new GetVm2CloneInputArgs Empty => new GetVm2CloneInputArgs(); - } -} diff --git a/sdk/dotnet/Network/FirewallOptions.cs b/sdk/dotnet/Network/FirewallOptions.cs index 26c4a7d9..30acff93 100644 --- a/sdk/dotnet/Network/FirewallOptions.cs +++ b/sdk/dotnet/Network/FirewallOptions.cs @@ -67,7 +67,7 @@ namespace Pulumi.ProxmoxVE.Network public partial class FirewallOptions : global::Pulumi.CustomResource { /// - /// Container ID. + /// Container ID. **Exactly one of `VmId` or `ContainerId` must be specified.** /// [Output("containerId")] public Output ContainerId { get; private set; } = null!; @@ -149,7 +149,7 @@ public partial class FirewallOptions : global::Pulumi.CustomResource public Output Radv { get; private set; } = null!; /// - /// VM ID. + /// VM ID. **Exactly one of `VmId` or `ContainerId` must be specified.** /// [Output("vmId")] public Output VmId { get; private set; } = null!; @@ -202,7 +202,7 @@ public static FirewallOptions Get(string name, Input id, FirewallOptions public sealed class FirewallOptionsArgs : global::Pulumi.ResourceArgs { /// - /// Container ID. + /// Container ID. **Exactly one of `VmId` or `ContainerId` must be specified.** /// [Input("containerId")] public Input? ContainerId { get; set; } @@ -284,7 +284,7 @@ public sealed class FirewallOptionsArgs : global::Pulumi.ResourceArgs public Input? Radv { get; set; } /// - /// VM ID. + /// VM ID. **Exactly one of `VmId` or `ContainerId` must be specified.** /// [Input("vmId")] public Input? VmId { get; set; } @@ -298,7 +298,7 @@ public FirewallOptionsArgs() public sealed class FirewallOptionsState : global::Pulumi.ResourceArgs { /// - /// Container ID. + /// Container ID. **Exactly one of `VmId` or `ContainerId` must be specified.** /// [Input("containerId")] public Input? ContainerId { get; set; } @@ -380,7 +380,7 @@ public sealed class FirewallOptionsState : global::Pulumi.ResourceArgs public Input? Radv { get; set; } /// - /// VM ID. + /// VM ID. **Exactly one of `VmId` or `ContainerId` must be specified.** /// [Input("vmId")] public Input? VmId { get; set; } diff --git a/sdk/dotnet/Network/FirewallRules.cs b/sdk/dotnet/Network/FirewallRules.cs index eeb42762..5f4e8fd3 100644 --- a/sdk/dotnet/Network/FirewallRules.cs +++ b/sdk/dotnet/Network/FirewallRules.cs @@ -12,8 +12,7 @@ namespace Pulumi.ProxmoxVE.Network /// /// Manages cluster-level, node-level or VM/container-level firewall rules. /// - /// > **Note:** Before creating a new `proxmoxve.Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). - /// If rules are already configured, import them first using the appropriate import command. + /// > Before creating a new `proxmoxve.Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command. /// /// ## Example Usage /// diff --git a/sdk/dotnet/Node/Firewall.cs b/sdk/dotnet/Node/Firewall.cs new file mode 100644 index 00000000..aeb94541 --- /dev/null +++ b/sdk/dotnet/Node/Firewall.cs @@ -0,0 +1,335 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Node +{ + /// + /// Manages Proxmox VE Node Firewall options. + /// + /// > This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options). + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var node_pve1 = new ProxmoxVE.Node.Firewall("node-pve1", new() + /// { + /// NodeName = "pve1", + /// Enabled = false, + /// }); + /// + /// var pve2 = new ProxmoxVE.Node.Firewall("pve2", new() + /// { + /// NodeName = "pve2", + /// Enabled = true, + /// LogLevelIn = "alert", + /// LogLevelOut = "alert", + /// LogLevelForward = "alert", + /// Ndp = true, + /// Nftables = true, + /// Nosmurfs = true, + /// SmurfLogLevel = "alert", + /// TcpFlagsLogLevel = "alert", + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ```sh + /// $ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1 + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Node/firewall:Firewall")] + public partial class Firewall : global::Pulumi.CustomResource + { + /// + /// Enable host firewall rules (defaults to `True`). + /// + [Output("enabled")] + public Output Enabled { get; private set; } = null!; + + /// + /// Log level for forwarded traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Output("logLevelForward")] + public Output LogLevelForward { get; private set; } = null!; + + /// + /// Log level for incoming traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Output("logLevelIn")] + public Output LogLevelIn { get; private set; } = null!; + + /// + /// Log level for outgoing traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Output("logLevelOut")] + public Output LogLevelOut { get; private set; } = null!; + + /// + /// Enable NDP - Neighbor Discovery Protocol (defaults to `True`). + /// + [Output("ndp")] + public Output Ndp { get; private set; } = null!; + + /// + /// Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + /// + [Output("nfConntrackMax")] + public Output NfConntrackMax { get; private set; } = null!; + + /// + /// Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + /// + [Output("nfConntrackTcpTimeoutEstablished")] + public Output NfConntrackTcpTimeoutEstablished { get; private set; } = null!; + + /// + /// Enable nftables based firewall (tech preview, defaults to `False`). + /// + [Output("nftables")] + public Output Nftables { get; private set; } = null!; + + /// + /// The cluster node name. + /// + [Output("nodeName")] + public Output NodeName { get; private set; } = null!; + + /// + /// Enable SMURFS filter (defaults to `True`). + /// + [Output("nosmurfs")] + public Output Nosmurfs { get; private set; } = null!; + + /// + /// Log level for SMURFS filter. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Output("smurfLogLevel")] + public Output SmurfLogLevel { get; private set; } = null!; + + /// + /// Log level for illegal tcp flags filter. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Output("tcpFlagsLogLevel")] + public Output TcpFlagsLogLevel { get; private set; } = null!; + + + /// + /// Create a Firewall resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Firewall(string name, FirewallArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Node/firewall:Firewall", name, args ?? new FirewallArgs(), MakeResourceOptions(options, "")) + { + } + + private Firewall(string name, Input id, FirewallState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Node/firewall:Firewall", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Firewall resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Firewall Get(string name, Input id, FirewallState? state = null, CustomResourceOptions? options = null) + { + return new Firewall(name, id, state, options); + } + } + + public sealed class FirewallArgs : global::Pulumi.ResourceArgs + { + /// + /// Enable host firewall rules (defaults to `True`). + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + /// + /// Log level for forwarded traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("logLevelForward")] + public Input? LogLevelForward { get; set; } + + /// + /// Log level for incoming traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("logLevelIn")] + public Input? LogLevelIn { get; set; } + + /// + /// Log level for outgoing traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("logLevelOut")] + public Input? LogLevelOut { get; set; } + + /// + /// Enable NDP - Neighbor Discovery Protocol (defaults to `True`). + /// + [Input("ndp")] + public Input? Ndp { get; set; } + + /// + /// Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + /// + [Input("nfConntrackMax")] + public Input? NfConntrackMax { get; set; } + + /// + /// Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + /// + [Input("nfConntrackTcpTimeoutEstablished")] + public Input? NfConntrackTcpTimeoutEstablished { get; set; } + + /// + /// Enable nftables based firewall (tech preview, defaults to `False`). + /// + [Input("nftables")] + public Input? Nftables { get; set; } + + /// + /// The cluster node name. + /// + [Input("nodeName", required: true)] + public Input NodeName { get; set; } = null!; + + /// + /// Enable SMURFS filter (defaults to `True`). + /// + [Input("nosmurfs")] + public Input? Nosmurfs { get; set; } + + /// + /// Log level for SMURFS filter. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("smurfLogLevel")] + public Input? SmurfLogLevel { get; set; } + + /// + /// Log level for illegal tcp flags filter. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("tcpFlagsLogLevel")] + public Input? TcpFlagsLogLevel { get; set; } + + public FirewallArgs() + { + } + public static new FirewallArgs Empty => new FirewallArgs(); + } + + public sealed class FirewallState : global::Pulumi.ResourceArgs + { + /// + /// Enable host firewall rules (defaults to `True`). + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + /// + /// Log level for forwarded traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("logLevelForward")] + public Input? LogLevelForward { get; set; } + + /// + /// Log level for incoming traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("logLevelIn")] + public Input? LogLevelIn { get; set; } + + /// + /// Log level for outgoing traffic. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("logLevelOut")] + public Input? LogLevelOut { get; set; } + + /// + /// Enable NDP - Neighbor Discovery Protocol (defaults to `True`). + /// + [Input("ndp")] + public Input? Ndp { get; set; } + + /// + /// Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + /// + [Input("nfConntrackMax")] + public Input? NfConntrackMax { get; set; } + + /// + /// Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + /// + [Input("nfConntrackTcpTimeoutEstablished")] + public Input? NfConntrackTcpTimeoutEstablished { get; set; } + + /// + /// Enable nftables based firewall (tech preview, defaults to `False`). + /// + [Input("nftables")] + public Input? Nftables { get; set; } + + /// + /// The cluster node name. + /// + [Input("nodeName")] + public Input? NodeName { get; set; } + + /// + /// Enable SMURFS filter (defaults to `True`). + /// + [Input("nosmurfs")] + public Input? Nosmurfs { get; set; } + + /// + /// Log level for SMURFS filter. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("smurfLogLevel")] + public Input? SmurfLogLevel { get; set; } + + /// + /// Log level for illegal tcp flags filter. Must be one of: `Emerg`, `Alert`, `Crit`, `Err`, `Warning`, `Notice`, `Info`, `Debug`, `Nolog` (defaults to `Nolog`). + /// + [Input("tcpFlagsLogLevel")] + public Input? TcpFlagsLogLevel { get; set; } + + public FirewallState() + { + } + public static new FirewallState Empty => new FirewallState(); + } +} diff --git a/sdk/dotnet/Node/README.md b/sdk/dotnet/Node/README.md new file mode 100644 index 00000000..8827a809 --- /dev/null +++ b/sdk/dotnet/Node/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources. diff --git a/sdk/dotnet/Outputs/GetVm2CloneResult.cs b/sdk/dotnet/Outputs/GetVm2CloneResult.cs deleted file mode 100644 index f6590184..00000000 --- a/sdk/dotnet/Outputs/GetVm2CloneResult.cs +++ /dev/null @@ -1,35 +0,0 @@ -// *** WARNING: this file was generated by pulumi-language-dotnet. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.ProxmoxVE.Outputs -{ - - [OutputType] - public sealed class GetVm2CloneResult - { - /// - /// The ID of the VM to clone. - /// - public readonly int Id; - /// - /// The number of retries to perform when cloning the VM (default: 3). - /// - public readonly int Retries; - - [OutputConstructor] - private GetVm2CloneResult( - int id, - - int retries) - { - Id = id; - Retries = retries; - } - } -} diff --git a/sdk/dotnet/Pulumi.yaml b/sdk/dotnet/Pulumi.yaml index e69de29b..26dc2ce0 100644 --- a/sdk/dotnet/Pulumi.yaml +++ b/sdk/dotnet/Pulumi.yaml @@ -0,0 +1,3 @@ +name: proxmoxve +description: A Pulumi resource provider for proxmoxve. +language: dotnet diff --git a/sdk/dotnet/Realm/Ldap.cs b/sdk/dotnet/Realm/Ldap.cs new file mode 100644 index 00000000..b91c3387 --- /dev/null +++ b/sdk/dotnet/Realm/Ldap.cs @@ -0,0 +1,580 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Realm +{ + /// + /// ## Import + /// + /// #!/usr/bin/env sh + /// + /// LDAP realms can be imported using the realm identifier, e.g.: + /// + /// ```sh + /// $ pulumi import proxmoxve:Realm/ldap:Ldap example example.com + /// ``` + /// + /// -> When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform. + /// + [ProxmoxVEResourceType("proxmoxve:Realm/ldap:Ldap")] + public partial class Ldap : global::Pulumi.CustomResource + { + /// + /// LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + /// + [Output("baseDn")] + public Output BaseDn { get; private set; } = null!; + + /// + /// LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + /// + [Output("bindDn")] + public Output BindDn { get; private set; } = null!; + + /// + /// Password for the bind DN. Note: stored in Proxmox but not returned by API. + /// + [Output("bindPassword")] + public Output BindPassword { get; private set; } = null!; + + /// + /// Path to CA certificate file for SSL verification. + /// + [Output("caPath")] + public Output CaPath { get; private set; } = null!; + + /// + /// Enable case-sensitive username matching. + /// + [Output("caseSensitive")] + public Output CaseSensitive { get; private set; } = null!; + + /// + /// Path to client certificate key. + /// + [Output("certKeyPath")] + public Output CertKeyPath { get; private set; } = null!; + + /// + /// Path to client certificate for SSL authentication. + /// + [Output("certPath")] + public Output CertPath { get; private set; } = null!; + + /// + /// Description of the realm. + /// + [Output("comment")] + public Output Comment { get; private set; } = null!; + + /// + /// Use this realm as the default for login. + /// + [Output("default")] + public Output Default { get; private set; } = null!; + + /// + /// LDAP filter for user searches. + /// + [Output("filter")] + public Output Filter { get; private set; } = null!; + + /// + /// LDAP objectClasses for groups (comma-separated). + /// + [Output("groupClasses")] + public Output GroupClasses { get; private set; } = null!; + + /// + /// LDAP base DN for group searches. + /// + [Output("groupDn")] + public Output GroupDn { get; private set; } = null!; + + /// + /// LDAP filter for group searches. + /// + [Output("groupFilter")] + public Output GroupFilter { get; private set; } = null!; + + /// + /// LDAP attribute representing the group name. + /// + [Output("groupNameAttr")] + public Output GroupNameAttr { get; private set; } = null!; + + /// + /// LDAP connection mode (ldap, ldaps, ldap+starttls). + /// + [Output("mode")] + public Output Mode { get; private set; } = null!; + + /// + /// LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + /// + [Output("port")] + public Output Port { get; private set; } = null!; + + /// + /// Realm identifier (e.g., 'example.com'). + /// + [Output("realm")] + public Output Realm { get; private set; } = null!; + + /// + /// Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + /// + [Output("secure")] + public Output Secure { get; private set; } = null!; + + /// + /// Primary LDAP server hostname or IP address. + /// + [Output("server1")] + public Output Server1 { get; private set; } = null!; + + /// + /// Fallback LDAP server hostname or IP address. + /// + [Output("server2")] + public Output Server2 { get; private set; } = null!; + + /// + /// SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + /// + [Output("sslVersion")] + public Output SslVersion { get; private set; } = null!; + + /// + /// Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + /// + [Output("syncAttributes")] + public Output SyncAttributes { get; private set; } = null!; + + /// + /// Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + /// + [Output("syncDefaultsOptions")] + public Output SyncDefaultsOptions { get; private set; } = null!; + + /// + /// LDAP attribute representing the username. + /// + [Output("userAttr")] + public Output UserAttr { get; private set; } = null!; + + /// + /// LDAP objectClasses for users (comma-separated). + /// + [Output("userClasses")] + public Output UserClasses { get; private set; } = null!; + + /// + /// Verify LDAP server SSL certificate. + /// + [Output("verify")] + public Output Verify { get; private set; } = null!; + + + /// + /// Create a Ldap resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Ldap(string name, LdapArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Realm/ldap:Ldap", name, args ?? new LdapArgs(), MakeResourceOptions(options, "")) + { + } + + private Ldap(string name, Input id, LdapState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Realm/ldap:Ldap", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + AdditionalSecretOutputs = + { + "bindPassword", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Ldap resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Ldap Get(string name, Input id, LdapState? state = null, CustomResourceOptions? options = null) + { + return new Ldap(name, id, state, options); + } + } + + public sealed class LdapArgs : global::Pulumi.ResourceArgs + { + /// + /// LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + /// + [Input("baseDn", required: true)] + public Input BaseDn { get; set; } = null!; + + /// + /// LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + /// + [Input("bindDn")] + public Input? BindDn { get; set; } + + [Input("bindPassword")] + private Input? _bindPassword; + + /// + /// Password for the bind DN. Note: stored in Proxmox but not returned by API. + /// + public Input? BindPassword + { + get => _bindPassword; + set + { + var emptySecret = Output.CreateSecret(0); + _bindPassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Path to CA certificate file for SSL verification. + /// + [Input("caPath")] + public Input? CaPath { get; set; } + + /// + /// Enable case-sensitive username matching. + /// + [Input("caseSensitive")] + public Input? CaseSensitive { get; set; } + + /// + /// Path to client certificate key. + /// + [Input("certKeyPath")] + public Input? CertKeyPath { get; set; } + + /// + /// Path to client certificate for SSL authentication. + /// + [Input("certPath")] + public Input? CertPath { get; set; } + + /// + /// Description of the realm. + /// + [Input("comment")] + public Input? Comment { get; set; } + + /// + /// Use this realm as the default for login. + /// + [Input("default")] + public Input? Default { get; set; } + + /// + /// LDAP filter for user searches. + /// + [Input("filter")] + public Input? Filter { get; set; } + + /// + /// LDAP objectClasses for groups (comma-separated). + /// + [Input("groupClasses")] + public Input? GroupClasses { get; set; } + + /// + /// LDAP base DN for group searches. + /// + [Input("groupDn")] + public Input? GroupDn { get; set; } + + /// + /// LDAP filter for group searches. + /// + [Input("groupFilter")] + public Input? GroupFilter { get; set; } + + /// + /// LDAP attribute representing the group name. + /// + [Input("groupNameAttr")] + public Input? GroupNameAttr { get; set; } + + /// + /// LDAP connection mode (ldap, ldaps, ldap+starttls). + /// + [Input("mode")] + public Input? Mode { get; set; } + + /// + /// LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + /// + [Input("port")] + public Input? Port { get; set; } + + /// + /// Realm identifier (e.g., 'example.com'). + /// + [Input("realm", required: true)] + public Input Realm { get; set; } = null!; + + /// + /// Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + /// + [Input("secure")] + public Input? Secure { get; set; } + + /// + /// Primary LDAP server hostname or IP address. + /// + [Input("server1", required: true)] + public Input Server1 { get; set; } = null!; + + /// + /// Fallback LDAP server hostname or IP address. + /// + [Input("server2")] + public Input? Server2 { get; set; } + + /// + /// SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + /// + [Input("sslVersion")] + public Input? SslVersion { get; set; } + + /// + /// Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + /// + [Input("syncAttributes")] + public Input? SyncAttributes { get; set; } + + /// + /// Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + /// + [Input("syncDefaultsOptions")] + public Input? SyncDefaultsOptions { get; set; } + + /// + /// LDAP attribute representing the username. + /// + [Input("userAttr")] + public Input? UserAttr { get; set; } + + /// + /// LDAP objectClasses for users (comma-separated). + /// + [Input("userClasses")] + public Input? UserClasses { get; set; } + + /// + /// Verify LDAP server SSL certificate. + /// + [Input("verify")] + public Input? Verify { get; set; } + + public LdapArgs() + { + } + public static new LdapArgs Empty => new LdapArgs(); + } + + public sealed class LdapState : global::Pulumi.ResourceArgs + { + /// + /// LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + /// + [Input("baseDn")] + public Input? BaseDn { get; set; } + + /// + /// LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + /// + [Input("bindDn")] + public Input? BindDn { get; set; } + + [Input("bindPassword")] + private Input? _bindPassword; + + /// + /// Password for the bind DN. Note: stored in Proxmox but not returned by API. + /// + public Input? BindPassword + { + get => _bindPassword; + set + { + var emptySecret = Output.CreateSecret(0); + _bindPassword = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Path to CA certificate file for SSL verification. + /// + [Input("caPath")] + public Input? CaPath { get; set; } + + /// + /// Enable case-sensitive username matching. + /// + [Input("caseSensitive")] + public Input? CaseSensitive { get; set; } + + /// + /// Path to client certificate key. + /// + [Input("certKeyPath")] + public Input? CertKeyPath { get; set; } + + /// + /// Path to client certificate for SSL authentication. + /// + [Input("certPath")] + public Input? CertPath { get; set; } + + /// + /// Description of the realm. + /// + [Input("comment")] + public Input? Comment { get; set; } + + /// + /// Use this realm as the default for login. + /// + [Input("default")] + public Input? Default { get; set; } + + /// + /// LDAP filter for user searches. + /// + [Input("filter")] + public Input? Filter { get; set; } + + /// + /// LDAP objectClasses for groups (comma-separated). + /// + [Input("groupClasses")] + public Input? GroupClasses { get; set; } + + /// + /// LDAP base DN for group searches. + /// + [Input("groupDn")] + public Input? GroupDn { get; set; } + + /// + /// LDAP filter for group searches. + /// + [Input("groupFilter")] + public Input? GroupFilter { get; set; } + + /// + /// LDAP attribute representing the group name. + /// + [Input("groupNameAttr")] + public Input? GroupNameAttr { get; set; } + + /// + /// LDAP connection mode (ldap, ldaps, ldap+starttls). + /// + [Input("mode")] + public Input? Mode { get; set; } + + /// + /// LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + /// + [Input("port")] + public Input? Port { get; set; } + + /// + /// Realm identifier (e.g., 'example.com'). + /// + [Input("realm")] + public Input? Realm { get; set; } + + /// + /// Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + /// + [Input("secure")] + public Input? Secure { get; set; } + + /// + /// Primary LDAP server hostname or IP address. + /// + [Input("server1")] + public Input? Server1 { get; set; } + + /// + /// Fallback LDAP server hostname or IP address. + /// + [Input("server2")] + public Input? Server2 { get; set; } + + /// + /// SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + /// + [Input("sslVersion")] + public Input? SslVersion { get; set; } + + /// + /// Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + /// + [Input("syncAttributes")] + public Input? SyncAttributes { get; set; } + + /// + /// Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + /// + [Input("syncDefaultsOptions")] + public Input? SyncDefaultsOptions { get; set; } + + /// + /// LDAP attribute representing the username. + /// + [Input("userAttr")] + public Input? UserAttr { get; set; } + + /// + /// LDAP objectClasses for users (comma-separated). + /// + [Input("userClasses")] + public Input? UserClasses { get; set; } + + /// + /// Verify LDAP server SSL certificate. + /// + [Input("verify")] + public Input? Verify { get; set; } + + public LdapState() + { + } + public static new LdapState Empty => new LdapState(); + } +} diff --git a/sdk/dotnet/Realm/README.md b/sdk/dotnet/Realm/README.md new file mode 100644 index 00000000..8827a809 --- /dev/null +++ b/sdk/dotnet/Realm/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources. diff --git a/sdk/dotnet/Realm/Sync.cs b/sdk/dotnet/Realm/Sync.cs new file mode 100644 index 00000000..842f4681 --- /dev/null +++ b/sdk/dotnet/Realm/Sync.cs @@ -0,0 +1,216 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Realm +{ + /// + /// ## Import + /// + /// #!/usr/bin/env sh + /// + /// Realm sync resources can be imported by realm name, e.g.: + /// + /// ```sh + /// $ pulumi import proxmoxve:Realm/sync:Sync example example.com + /// ``` + /// + /// Importing only populates the `realm` and `id` attributes; other fields must + /// + /// be set in configuration. + /// + [ProxmoxVEResourceType("proxmoxve:Realm/sync:Sync")] + public partial class Sync : global::Pulumi.CustomResource + { + /// + /// Only simulate the sync without applying changes. + /// + [Output("dryRun")] + public Output DryRun { get; private set; } = null!; + + /// + /// Enable newly synced users. + /// + [Output("enableNew")] + public Output EnableNew { get; private set; } = null!; + + /// + /// Perform a full sync. + /// + [Output("full")] + public Output Full { get; private set; } = null!; + + /// + /// Purge removed entries. + /// + [Output("purge")] + public Output Purge { get; private set; } = null!; + + /// + /// Name of the realm to synchronize. + /// + [Output("realm")] + public Output Realm { get; private set; } = null!; + + /// + /// How to handle vanished entries (e.g. `acl;properties;entry` or `None`). + /// + [Output("removeVanished")] + public Output RemoveVanished { get; private set; } = null!; + + /// + /// Sync scope: users, groups, or both. + /// + [Output("scope")] + public Output Scope { get; private set; } = null!; + + + /// + /// Create a Sync resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Sync(string name, SyncArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Realm/sync:Sync", name, args ?? new SyncArgs(), MakeResourceOptions(options, "")) + { + } + + private Sync(string name, Input id, SyncState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Realm/sync:Sync", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Sync resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Sync Get(string name, Input id, SyncState? state = null, CustomResourceOptions? options = null) + { + return new Sync(name, id, state, options); + } + } + + public sealed class SyncArgs : global::Pulumi.ResourceArgs + { + /// + /// Only simulate the sync without applying changes. + /// + [Input("dryRun")] + public Input? DryRun { get; set; } + + /// + /// Enable newly synced users. + /// + [Input("enableNew")] + public Input? EnableNew { get; set; } + + /// + /// Perform a full sync. + /// + [Input("full")] + public Input? Full { get; set; } + + /// + /// Purge removed entries. + /// + [Input("purge")] + public Input? Purge { get; set; } + + /// + /// Name of the realm to synchronize. + /// + [Input("realm", required: true)] + public Input Realm { get; set; } = null!; + + /// + /// How to handle vanished entries (e.g. `acl;properties;entry` or `None`). + /// + [Input("removeVanished")] + public Input? RemoveVanished { get; set; } + + /// + /// Sync scope: users, groups, or both. + /// + [Input("scope")] + public Input? Scope { get; set; } + + public SyncArgs() + { + } + public static new SyncArgs Empty => new SyncArgs(); + } + + public sealed class SyncState : global::Pulumi.ResourceArgs + { + /// + /// Only simulate the sync without applying changes. + /// + [Input("dryRun")] + public Input? DryRun { get; set; } + + /// + /// Enable newly synced users. + /// + [Input("enableNew")] + public Input? EnableNew { get; set; } + + /// + /// Perform a full sync. + /// + [Input("full")] + public Input? Full { get; set; } + + /// + /// Purge removed entries. + /// + [Input("purge")] + public Input? Purge { get; set; } + + /// + /// Name of the realm to synchronize. + /// + [Input("realm")] + public Input? Realm { get; set; } + + /// + /// How to handle vanished entries (e.g. `acl;properties;entry` or `None`). + /// + [Input("removeVanished")] + public Input? RemoveVanished { get; set; } + + /// + /// Sync scope: users, groups, or both. + /// + [Input("scope")] + public Input? Scope { get; set; } + + public SyncState() + { + } + public static new SyncState Empty => new SyncState(); + } +} diff --git a/sdk/dotnet/SDNFabric/OSPF.cs b/sdk/dotnet/SDNFabric/OSPF.cs new file mode 100644 index 00000000..046c894f --- /dev/null +++ b/sdk/dotnet/SDNFabric/OSPF.cs @@ -0,0 +1,152 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.SDNFabric +{ + /// + /// OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = new ProxmoxVE.SDNFabric.OSPF("main", new() + /// { + /// OspfId = "main-fabric", + /// IpPrefix = "10.0.0.0/16", + /// Area = "0", + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:SDNFabric/oSPF:OSPF")] + public partial class OSPF : global::Pulumi.CustomResource + { + /// + /// OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + /// + [Output("area")] + public Output Area { get; private set; } = null!; + + /// + /// IPv4 prefix cidr for the fabric. + /// + [Output("ipPrefix")] + public Output IpPrefix { get; private set; } = null!; + + /// + /// The unique identifier of the SDN fabric. + /// + [Output("ospfId")] + public Output OspfId { get; private set; } = null!; + + + /// + /// Create a OSPF resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public OSPF(string name, OSPFArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:SDNFabric/oSPF:OSPF", name, args ?? new OSPFArgs(), MakeResourceOptions(options, "")) + { + } + + private OSPF(string name, Input id, OSPFState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:SDNFabric/oSPF:OSPF", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing OSPF resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static OSPF Get(string name, Input id, OSPFState? state = null, CustomResourceOptions? options = null) + { + return new OSPF(name, id, state, options); + } + } + + public sealed class OSPFArgs : global::Pulumi.ResourceArgs + { + /// + /// OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + /// + [Input("area", required: true)] + public Input Area { get; set; } = null!; + + /// + /// IPv4 prefix cidr for the fabric. + /// + [Input("ipPrefix", required: true)] + public Input IpPrefix { get; set; } = null!; + + /// + /// The unique identifier of the SDN fabric. + /// + [Input("ospfId", required: true)] + public Input OspfId { get; set; } = null!; + + public OSPFArgs() + { + } + public static new OSPFArgs Empty => new OSPFArgs(); + } + + public sealed class OSPFState : global::Pulumi.ResourceArgs + { + /// + /// OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + /// + [Input("area")] + public Input? Area { get; set; } + + /// + /// IPv4 prefix cidr for the fabric. + /// + [Input("ipPrefix")] + public Input? IpPrefix { get; set; } + + /// + /// The unique identifier of the SDN fabric. + /// + [Input("ospfId")] + public Input? OspfId { get; set; } + + public OSPFState() + { + } + public static new OSPFState Empty => new OSPFState(); + } +} diff --git a/sdk/dotnet/SDNFabric/OpenFabric.cs b/sdk/dotnet/SDNFabric/OpenFabric.cs new file mode 100644 index 00000000..bbe28adb --- /dev/null +++ b/sdk/dotnet/SDNFabric/OpenFabric.cs @@ -0,0 +1,187 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.SDNFabric +{ + /// + /// OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = new ProxmoxVE.SDNFabric.OpenFabric("main", new() + /// { + /// FabricId = "main-fabric", + /// IpPrefix = "10.0.0.0/16", + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:SDNFabric/openFabric:OpenFabric")] + public partial class OpenFabric : global::Pulumi.CustomResource + { + /// + /// The CsnpInterval property for OpenFabric. + /// + [Output("csnpInterval")] + public Output CsnpInterval { get; private set; } = null!; + + /// + /// The unique identifier of the SDN fabric. + /// + [Output("fabricId")] + public Output FabricId { get; private set; } = null!; + + /// + /// The HelloInterval property for OpenFabric. + /// + [Output("helloInterval")] + public Output HelloInterval { get; private set; } = null!; + + /// + /// IPv6 prefix cidr for the fabric. + /// + [Output("ip6Prefix")] + public Output Ip6Prefix { get; private set; } = null!; + + /// + /// IPv4 prefix cidr for the fabric. + /// + [Output("ipPrefix")] + public Output IpPrefix { get; private set; } = null!; + + + /// + /// Create a OpenFabric resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public OpenFabric(string name, OpenFabricArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:SDNFabric/openFabric:OpenFabric", name, args ?? new OpenFabricArgs(), MakeResourceOptions(options, "")) + { + } + + private OpenFabric(string name, Input id, OpenFabricState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:SDNFabric/openFabric:OpenFabric", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing OpenFabric resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static OpenFabric Get(string name, Input id, OpenFabricState? state = null, CustomResourceOptions? options = null) + { + return new OpenFabric(name, id, state, options); + } + } + + public sealed class OpenFabricArgs : global::Pulumi.ResourceArgs + { + /// + /// The CsnpInterval property for OpenFabric. + /// + [Input("csnpInterval")] + public Input? CsnpInterval { get; set; } + + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId", required: true)] + public Input FabricId { get; set; } = null!; + + /// + /// The HelloInterval property for OpenFabric. + /// + [Input("helloInterval")] + public Input? HelloInterval { get; set; } + + /// + /// IPv6 prefix cidr for the fabric. + /// + [Input("ip6Prefix")] + public Input? Ip6Prefix { get; set; } + + /// + /// IPv4 prefix cidr for the fabric. + /// + [Input("ipPrefix")] + public Input? IpPrefix { get; set; } + + public OpenFabricArgs() + { + } + public static new OpenFabricArgs Empty => new OpenFabricArgs(); + } + + public sealed class OpenFabricState : global::Pulumi.ResourceArgs + { + /// + /// The CsnpInterval property for OpenFabric. + /// + [Input("csnpInterval")] + public Input? CsnpInterval { get; set; } + + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId")] + public Input? FabricId { get; set; } + + /// + /// The HelloInterval property for OpenFabric. + /// + [Input("helloInterval")] + public Input? HelloInterval { get; set; } + + /// + /// IPv6 prefix cidr for the fabric. + /// + [Input("ip6Prefix")] + public Input? Ip6Prefix { get; set; } + + /// + /// IPv4 prefix cidr for the fabric. + /// + [Input("ipPrefix")] + public Input? IpPrefix { get; set; } + + public OpenFabricState() + { + } + public static new OpenFabricState Empty => new OpenFabricState(); + } +} diff --git a/sdk/dotnet/SDNFabric/README.md b/sdk/dotnet/SDNFabric/README.md new file mode 100644 index 00000000..8827a809 --- /dev/null +++ b/sdk/dotnet/SDNFabric/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources. diff --git a/sdk/dotnet/SDNZone/Evpn.cs b/sdk/dotnet/SDNZone/Evpn.cs index 84d46338..c3831042 100644 --- a/sdk/dotnet/SDNZone/Evpn.cs +++ b/sdk/dotnet/SDNZone/Evpn.cs @@ -68,7 +68,7 @@ public partial class Evpn : global::Pulumi.CustomResource /// Enable subnet advertisement for EVPN. /// [Output("advertiseSubnets")] - public Output AdvertiseSubnets { get; private set; } = null!; + public Output AdvertiseSubnets { get; private set; } = null!; /// /// EVPN controller address. @@ -80,7 +80,7 @@ public partial class Evpn : global::Pulumi.CustomResource /// Disable ARP/ND suppression for EVPN. /// [Output("disableArpNdSuppression")] - public Output DisableArpNdSuppression { get; private set; } = null!; + public Output DisableArpNdSuppression { get; private set; } = null!; /// /// DNS API server address. @@ -104,7 +104,7 @@ public partial class Evpn : global::Pulumi.CustomResource /// Enable local routing for EVPN exit nodes. /// [Output("exitNodesLocalRouting")] - public Output ExitNodesLocalRouting { get; private set; } = null!; + public Output ExitNodesLocalRouting { get; private set; } = null!; /// /// IP Address Management system. @@ -113,10 +113,10 @@ public partial class Evpn : global::Pulumi.CustomResource public Output Ipam { get; private set; } = null!; /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Output("mtu")] - public Output Mtu { get; private set; } = null!; + public Output Mtu { get; private set; } = null!; /// /// The Proxmox nodes which the zone and associated VNets should be deployed on @@ -268,7 +268,7 @@ public InputList ExitNodes public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } @@ -378,7 +378,7 @@ public InputList ExitNodes public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } diff --git a/sdk/dotnet/SDNZone/Qinq.cs b/sdk/dotnet/SDNZone/Qinq.cs index 9240854f..b16b1f0e 100644 --- a/sdk/dotnet/SDNZone/Qinq.cs +++ b/sdk/dotnet/SDNZone/Qinq.cs @@ -76,10 +76,10 @@ public partial class Qinq : global::Pulumi.CustomResource public Output Ipam { get; private set; } = null!; /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Output("mtu")] - public Output Mtu { get; private set; } = null!; + public Output Mtu { get; private set; } = null!; /// /// The Proxmox nodes which the zone and associated VNets should be deployed on @@ -109,7 +109,7 @@ public partial class Qinq : global::Pulumi.CustomResource /// Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`. /// [Output("serviceVlanProtocol")] - public Output ServiceVlanProtocol { get; private set; } = null!; + public Output ServiceVlanProtocol { get; private set; } = null!; /// /// Indicates the current state of the zone. @@ -195,7 +195,7 @@ public sealed class QinqArgs : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } @@ -269,7 +269,7 @@ public sealed class QinqState : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } diff --git a/sdk/dotnet/SDNZone/Simple.cs b/sdk/dotnet/SDNZone/Simple.cs index 4f3e9bb7..e06c6b1b 100644 --- a/sdk/dotnet/SDNZone/Simple.cs +++ b/sdk/dotnet/SDNZone/Simple.cs @@ -77,10 +77,10 @@ public partial class Simple : global::Pulumi.CustomResource public Output Ipam { get; private set; } = null!; /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Output("mtu")] - public Output Mtu { get; private set; } = null!; + public Output Mtu { get; private set; } = null!; /// /// The Proxmox nodes which the zone and associated VNets should be deployed on @@ -184,7 +184,7 @@ public sealed class SimpleArgs : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } @@ -246,7 +246,7 @@ public sealed class SimpleState : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } diff --git a/sdk/dotnet/SDNZone/Vlan.cs b/sdk/dotnet/SDNZone/Vlan.cs index c3574801..154acb7e 100644 --- a/sdk/dotnet/SDNZone/Vlan.cs +++ b/sdk/dotnet/SDNZone/Vlan.cs @@ -74,10 +74,10 @@ public partial class Vlan : global::Pulumi.CustomResource public Output Ipam { get; private set; } = null!; /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Output("mtu")] - public Output Mtu { get; private set; } = null!; + public Output Mtu { get; private set; } = null!; /// /// The Proxmox nodes which the zone and associated VNets should be deployed on @@ -181,7 +181,7 @@ public sealed class VlanArgs : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } @@ -243,7 +243,7 @@ public sealed class VlanState : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } diff --git a/sdk/dotnet/SDNZone/Vxlan.cs b/sdk/dotnet/SDNZone/Vxlan.cs index 9fd63cb6..7af56b6f 100644 --- a/sdk/dotnet/SDNZone/Vxlan.cs +++ b/sdk/dotnet/SDNZone/Vxlan.cs @@ -73,10 +73,10 @@ public partial class Vxlan : global::Pulumi.CustomResource public Output Ipam { get; private set; } = null!; /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Output("mtu")] - public Output Mtu { get; private set; } = null!; + public Output Mtu { get; private set; } = null!; /// /// The Proxmox nodes which the zone and associated VNets should be deployed on @@ -180,7 +180,7 @@ public sealed class VxlanArgs : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } @@ -248,7 +248,7 @@ public sealed class VxlanState : global::Pulumi.ResourceArgs public Input? Ipam { get; set; } /// - /// MTU value for the zone. + /// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. /// [Input("mtu")] public Input? Mtu { get; set; } diff --git a/sdk/dotnet/Sdn/Fabric/GetOpenfabric.cs b/sdk/dotnet/Sdn/Fabric/GetOpenfabric.cs new file mode 100644 index 00000000..15e535b9 --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/GetOpenfabric.cs @@ -0,0 +1,160 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Sdn.Fabric +{ + public static class GetOpenfabric + { + /// + /// OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.GetOpenfabric.Invoke(new() + /// { + /// Id = "main-fabric", + /// }); + /// + /// }); + /// ``` + /// + public static Task InvokeAsync(GetOpenfabricArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", args ?? new GetOpenfabricArgs(), options.WithDefaults()); + + /// + /// OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.GetOpenfabric.Invoke(new() + /// { + /// Id = "main-fabric", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOpenfabricInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", args ?? new GetOpenfabricInvokeArgs(), options.WithDefaults()); + + /// + /// OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.GetOpenfabric.Invoke(new() + /// { + /// Id = "main-fabric", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOpenfabricInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", args ?? new GetOpenfabricInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetOpenfabricArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetOpenfabricArgs() + { + } + public static new GetOpenfabricArgs Empty => new GetOpenfabricArgs(); + } + + public sealed class GetOpenfabricInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetOpenfabricInvokeArgs() + { + } + public static new GetOpenfabricInvokeArgs Empty => new GetOpenfabricInvokeArgs(); + } + + + [OutputType] + public sealed class GetOpenfabricResult + { + /// + /// The CsnpInterval property for OpenFabric. + /// + public readonly int CsnpInterval; + /// + /// The HelloInterval property for OpenFabric. + /// + public readonly int HelloInterval; + /// + /// The unique identifier of the SDN fabric. + /// + public readonly string Id; + /// + /// IPv6 prefix cidr for the fabric. + /// + public readonly string Ip6Prefix; + /// + /// IPv4 prefix cidr for the fabric. + /// + public readonly string IpPrefix; + + [OutputConstructor] + private GetOpenfabricResult( + int csnpInterval, + + int helloInterval, + + string id, + + string ip6Prefix, + + string ipPrefix) + { + CsnpInterval = csnpInterval; + HelloInterval = helloInterval; + Id = id; + Ip6Prefix = ip6Prefix; + IpPrefix = ipPrefix; + } + } +} diff --git a/sdk/dotnet/Sdn/Fabric/GetOspf.cs b/sdk/dotnet/Sdn/Fabric/GetOspf.cs new file mode 100644 index 00000000..aaabab26 --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/GetOspf.cs @@ -0,0 +1,146 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Sdn.Fabric +{ + public static class GetOspf + { + /// + /// OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.GetOspf.Invoke(new() + /// { + /// Id = "main-fabric", + /// }); + /// + /// }); + /// ``` + /// + public static Task InvokeAsync(GetOspfArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("proxmoxve:Sdn/fabric/getOspf:getOspf", args ?? new GetOspfArgs(), options.WithDefaults()); + + /// + /// OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.GetOspf.Invoke(new() + /// { + /// Id = "main-fabric", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOspfInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/getOspf:getOspf", args ?? new GetOspfInvokeArgs(), options.WithDefaults()); + + /// + /// OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.GetOspf.Invoke(new() + /// { + /// Id = "main-fabric", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOspfInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/getOspf:getOspf", args ?? new GetOspfInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetOspfArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetOspfArgs() + { + } + public static new GetOspfArgs Empty => new GetOspfArgs(); + } + + public sealed class GetOspfInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetOspfInvokeArgs() + { + } + public static new GetOspfInvokeArgs Empty => new GetOspfInvokeArgs(); + } + + + [OutputType] + public sealed class GetOspfResult + { + /// + /// OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + /// + public readonly string Area; + /// + /// The unique identifier of the SDN fabric. + /// + public readonly string Id; + /// + /// IPv4 prefix cidr for the fabric. + /// + public readonly string IpPrefix; + + [OutputConstructor] + private GetOspfResult( + string area, + + string id, + + string ipPrefix) + { + Area = area; + Id = id; + IpPrefix = ipPrefix; + } + } +} diff --git a/sdk/dotnet/Sdn/Fabric/Node/GetOpenfabric.cs b/sdk/dotnet/Sdn/Fabric/Node/GetOpenfabric.cs new file mode 100644 index 00000000..f32035b7 --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/Node/GetOpenfabric.cs @@ -0,0 +1,179 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Sdn.Fabric.Node +{ + public static class GetOpenfabric + { + /// + /// OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.Node.GetOpenfabric.Invoke(new() + /// { + /// FabricId = "main-fabric", + /// NodeId = "pve", + /// }); + /// + /// }); + /// ``` + /// + public static Task InvokeAsync(GetOpenfabricArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", args ?? new GetOpenfabricArgs(), options.WithDefaults()); + + /// + /// OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.Node.GetOpenfabric.Invoke(new() + /// { + /// FabricId = "main-fabric", + /// NodeId = "pve", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOpenfabricInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", args ?? new GetOpenfabricInvokeArgs(), options.WithDefaults()); + + /// + /// OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.Node.GetOpenfabric.Invoke(new() + /// { + /// FabricId = "main-fabric", + /// NodeId = "pve", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOpenfabricInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", args ?? new GetOpenfabricInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetOpenfabricArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId", required: true)] + public string FabricId { get; set; } = null!; + + /// + /// The unique identifier of the SDN fabric node. + /// + [Input("nodeId", required: true)] + public string NodeId { get; set; } = null!; + + public GetOpenfabricArgs() + { + } + public static new GetOpenfabricArgs Empty => new GetOpenfabricArgs(); + } + + public sealed class GetOpenfabricInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId", required: true)] + public Input FabricId { get; set; } = null!; + + /// + /// The unique identifier of the SDN fabric node. + /// + [Input("nodeId", required: true)] + public Input NodeId { get; set; } = null!; + + public GetOpenfabricInvokeArgs() + { + } + public static new GetOpenfabricInvokeArgs Empty => new GetOpenfabricInvokeArgs(); + } + + + [OutputType] + public sealed class GetOpenfabricResult + { + /// + /// The unique identifier of the SDN fabric. + /// + public readonly string FabricId; + public readonly string Id; + /// + /// Set of interface names associated with the fabric node. + /// + public readonly ImmutableArray InterfaceNames; + /// + /// IPv4 address for the fabric node. + /// + public readonly string Ip; + /// + /// IPv6 address for the fabric node. + /// + public readonly string Ip6; + /// + /// The unique identifier of the SDN fabric node. + /// + public readonly string NodeId; + + [OutputConstructor] + private GetOpenfabricResult( + string fabricId, + + string id, + + ImmutableArray interfaceNames, + + string ip, + + string ip6, + + string nodeId) + { + FabricId = fabricId; + Id = id; + InterfaceNames = interfaceNames; + Ip = ip; + Ip6 = ip6; + NodeId = nodeId; + } + } +} diff --git a/sdk/dotnet/Sdn/Fabric/Node/GetOspf.cs b/sdk/dotnet/Sdn/Fabric/Node/GetOspf.cs new file mode 100644 index 00000000..e588cac3 --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/Node/GetOspf.cs @@ -0,0 +1,172 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Sdn.Fabric.Node +{ + public static class GetOspf + { + /// + /// OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.Node.GetOspf.Invoke(new() + /// { + /// FabricId = "main-fabric", + /// NodeId = "pve", + /// }); + /// + /// }); + /// ``` + /// + public static Task InvokeAsync(GetOspfArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("proxmoxve:Sdn/fabric/node/getOspf:getOspf", args ?? new GetOspfArgs(), options.WithDefaults()); + + /// + /// OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.Node.GetOspf.Invoke(new() + /// { + /// FabricId = "main-fabric", + /// NodeId = "pve", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOspfInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/node/getOspf:getOspf", args ?? new GetOspfInvokeArgs(), options.WithDefaults()); + + /// + /// OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = ProxmoxVE.Sdn.Fabric.Node.GetOspf.Invoke(new() + /// { + /// FabricId = "main-fabric", + /// NodeId = "pve", + /// }); + /// + /// }); + /// ``` + /// + public static Output Invoke(GetOspfInvokeArgs args, InvokeOutputOptions options) + => global::Pulumi.Deployment.Instance.Invoke("proxmoxve:Sdn/fabric/node/getOspf:getOspf", args ?? new GetOspfInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetOspfArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId", required: true)] + public string FabricId { get; set; } = null!; + + /// + /// The unique identifier of the SDN fabric node. + /// + [Input("nodeId", required: true)] + public string NodeId { get; set; } = null!; + + public GetOspfArgs() + { + } + public static new GetOspfArgs Empty => new GetOspfArgs(); + } + + public sealed class GetOspfInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId", required: true)] + public Input FabricId { get; set; } = null!; + + /// + /// The unique identifier of the SDN fabric node. + /// + [Input("nodeId", required: true)] + public Input NodeId { get; set; } = null!; + + public GetOspfInvokeArgs() + { + } + public static new GetOspfInvokeArgs Empty => new GetOspfInvokeArgs(); + } + + + [OutputType] + public sealed class GetOspfResult + { + /// + /// The unique identifier of the SDN fabric. + /// + public readonly string FabricId; + public readonly string Id; + /// + /// Set of interface names associated with the fabric node. + /// + public readonly ImmutableArray InterfaceNames; + /// + /// IPv4 address for the fabric node. + /// + public readonly string Ip; + /// + /// The unique identifier of the SDN fabric node. + /// + public readonly string NodeId; + + [OutputConstructor] + private GetOspfResult( + string fabricId, + + string id, + + ImmutableArray interfaceNames, + + string ip, + + string nodeId) + { + FabricId = fabricId; + Id = id; + InterfaceNames = interfaceNames; + Ip = ip; + NodeId = nodeId; + } + } +} diff --git a/sdk/dotnet/Sdn/Fabric/Node/Openfabric.cs b/sdk/dotnet/Sdn/Fabric/Node/Openfabric.cs new file mode 100644 index 00000000..cbf6527c --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/Node/Openfabric.cs @@ -0,0 +1,211 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Sdn.Fabric.Node +{ + /// + /// OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = new ProxmoxVE.SDNFabric.OpenFabric("main", new() + /// { + /// FabricId = "main-fabric", + /// IpPrefix = "10.0.0.0/16", + /// }); + /// + /// var mainOpenfabric = new ProxmoxVE.Sdn.Fabric.Node.Openfabric("main", new() + /// { + /// FabricId = main.FabricId, + /// NodeId = "pve", + /// Ip = "10.0.0.1", + /// InterfaceNames = new[] + /// { + /// "nic0", + /// "nic1", + /// }, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Sdn/fabric/node/openfabric:Openfabric")] + public partial class Openfabric : global::Pulumi.CustomResource + { + /// + /// The unique identifier of the SDN fabric. + /// + [Output("fabricId")] + public Output FabricId { get; private set; } = null!; + + /// + /// Set of interfaces associated with the fabric node. + /// + [Output("interfaceNames")] + public Output> InterfaceNames { get; private set; } = null!; + + /// + /// IPv4 address for the fabric node. + /// + [Output("ip")] + public Output Ip { get; private set; } = null!; + + /// + /// IPv6 address for the fabric node. + /// + [Output("ip6")] + public Output Ip6 { get; private set; } = null!; + + /// + /// The unique identifier of the SDN fabric. + /// + [Output("nodeId")] + public Output NodeId { get; private set; } = null!; + + + /// + /// Create a Openfabric resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Openfabric(string name, OpenfabricArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Sdn/fabric/node/openfabric:Openfabric", name, args ?? new OpenfabricArgs(), MakeResourceOptions(options, "")) + { + } + + private Openfabric(string name, Input id, OpenfabricState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Sdn/fabric/node/openfabric:Openfabric", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Openfabric resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Openfabric Get(string name, Input id, OpenfabricState? state = null, CustomResourceOptions? options = null) + { + return new Openfabric(name, id, state, options); + } + } + + public sealed class OpenfabricArgs : global::Pulumi.ResourceArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId", required: true)] + public Input FabricId { get; set; } = null!; + + [Input("interfaceNames", required: true)] + private InputList? _interfaceNames; + + /// + /// Set of interfaces associated with the fabric node. + /// + public InputList InterfaceNames + { + get => _interfaceNames ?? (_interfaceNames = new InputList()); + set => _interfaceNames = value; + } + + /// + /// IPv4 address for the fabric node. + /// + [Input("ip")] + public Input? Ip { get; set; } + + /// + /// IPv6 address for the fabric node. + /// + [Input("ip6")] + public Input? Ip6 { get; set; } + + /// + /// The unique identifier of the SDN fabric. + /// + [Input("nodeId", required: true)] + public Input NodeId { get; set; } = null!; + + public OpenfabricArgs() + { + } + public static new OpenfabricArgs Empty => new OpenfabricArgs(); + } + + public sealed class OpenfabricState : global::Pulumi.ResourceArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId")] + public Input? FabricId { get; set; } + + [Input("interfaceNames")] + private InputList? _interfaceNames; + + /// + /// Set of interfaces associated with the fabric node. + /// + public InputList InterfaceNames + { + get => _interfaceNames ?? (_interfaceNames = new InputList()); + set => _interfaceNames = value; + } + + /// + /// IPv4 address for the fabric node. + /// + [Input("ip")] + public Input? Ip { get; set; } + + /// + /// IPv6 address for the fabric node. + /// + [Input("ip6")] + public Input? Ip6 { get; set; } + + /// + /// The unique identifier of the SDN fabric. + /// + [Input("nodeId")] + public Input? NodeId { get; set; } + + public OpenfabricState() + { + } + public static new OpenfabricState Empty => new OpenfabricState(); + } +} diff --git a/sdk/dotnet/Sdn/Fabric/Node/Ospf.cs b/sdk/dotnet/Sdn/Fabric/Node/Ospf.cs new file mode 100644 index 00000000..9c036649 --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/Node/Ospf.cs @@ -0,0 +1,194 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Sdn.Fabric.Node +{ + /// + /// OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var main = new ProxmoxVE.SDNFabric.OSPF("main", new() + /// { + /// OspfId = "main-fabric", + /// IpPrefix = "10.0.0.0/16", + /// Area = "0", + /// }); + /// + /// var mainOspf = new ProxmoxVE.Sdn.Fabric.Node.Ospf("main", new() + /// { + /// FabricId = main.OspfId, + /// NodeId = "pve", + /// Ip = "10.0.0.1", + /// InterfaceNames = new[] + /// { + /// "nic0", + /// "nic1", + /// }, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Sdn/fabric/node/ospf:Ospf")] + public partial class Ospf : global::Pulumi.CustomResource + { + /// + /// The unique identifier of the SDN fabric. + /// + [Output("fabricId")] + public Output FabricId { get; private set; } = null!; + + /// + /// Set of interfaces associated with the fabric node. + /// + [Output("interfaceNames")] + public Output> InterfaceNames { get; private set; } = null!; + + /// + /// IPv4 address for the fabric node. + /// + [Output("ip")] + public Output Ip { get; private set; } = null!; + + /// + /// The unique identifier of the SDN fabric node. + /// + [Output("nodeId")] + public Output NodeId { get; private set; } = null!; + + + /// + /// Create a Ospf resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Ospf(string name, OspfArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Sdn/fabric/node/ospf:Ospf", name, args ?? new OspfArgs(), MakeResourceOptions(options, "")) + { + } + + private Ospf(string name, Input id, OspfState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Sdn/fabric/node/ospf:Ospf", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Ospf resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Ospf Get(string name, Input id, OspfState? state = null, CustomResourceOptions? options = null) + { + return new Ospf(name, id, state, options); + } + } + + public sealed class OspfArgs : global::Pulumi.ResourceArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId", required: true)] + public Input FabricId { get; set; } = null!; + + [Input("interfaceNames", required: true)] + private InputList? _interfaceNames; + + /// + /// Set of interfaces associated with the fabric node. + /// + public InputList InterfaceNames + { + get => _interfaceNames ?? (_interfaceNames = new InputList()); + set => _interfaceNames = value; + } + + /// + /// IPv4 address for the fabric node. + /// + [Input("ip", required: true)] + public Input Ip { get; set; } = null!; + + /// + /// The unique identifier of the SDN fabric node. + /// + [Input("nodeId", required: true)] + public Input NodeId { get; set; } = null!; + + public OspfArgs() + { + } + public static new OspfArgs Empty => new OspfArgs(); + } + + public sealed class OspfState : global::Pulumi.ResourceArgs + { + /// + /// The unique identifier of the SDN fabric. + /// + [Input("fabricId")] + public Input? FabricId { get; set; } + + [Input("interfaceNames")] + private InputList? _interfaceNames; + + /// + /// Set of interfaces associated with the fabric node. + /// + public InputList InterfaceNames + { + get => _interfaceNames ?? (_interfaceNames = new InputList()); + set => _interfaceNames = value; + } + + /// + /// IPv4 address for the fabric node. + /// + [Input("ip")] + public Input? Ip { get; set; } + + /// + /// The unique identifier of the SDN fabric node. + /// + [Input("nodeId")] + public Input? NodeId { get; set; } + + public OspfState() + { + } + public static new OspfState Empty => new OspfState(); + } +} diff --git a/sdk/dotnet/Sdn/Fabric/Node/README.md b/sdk/dotnet/Sdn/Fabric/Node/README.md new file mode 100644 index 00000000..8827a809 --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/Node/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources. diff --git a/sdk/dotnet/Sdn/Fabric/README.md b/sdk/dotnet/Sdn/Fabric/README.md new file mode 100644 index 00000000..8827a809 --- /dev/null +++ b/sdk/dotnet/Sdn/Fabric/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Proxmox Virtual Environment cloud resources. diff --git a/sdk/dotnet/Storage/CIFS.cs b/sdk/dotnet/Storage/CIFS.cs new file mode 100644 index 00000000..8ee9699d --- /dev/null +++ b/sdk/dotnet/Storage/CIFS.cs @@ -0,0 +1,411 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage +{ + /// + /// Manages an SMB/CIFS based storage server in Proxmox VE. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new ProxmoxVE.Storage.CIFS("example", new() + /// { + /// CifsId = "example-cifs", + /// Nodes = new[] + /// { + /// "pve", + /// }, + /// Server = "10.0.0.20", + /// Share = "proxmox", + /// Username = "cifs-user", + /// Password = "cifs-password", + /// Contents = new[] + /// { + /// "images", + /// }, + /// Domain = "WORKGROUP", + /// Subdirectory = "terraform", + /// Preallocation = "metadata", + /// SnapshotAsVolumeChain = true, + /// Backups = new ProxmoxVE.Storage.Inputs.CIFSBackupsArgs + /// { + /// MaxProtectedBackups = 5, + /// KeepDaily = 7, + /// }, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Storage/cIFS:CIFS")] + public partial class CIFS : global::Pulumi.CustomResource + { + /// + /// Configure backup retention settings for the storage type. + /// + [Output("backups")] + public Output Backups { get; private set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Output("cifsId")] + public Output CifsId { get; private set; } = null!; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + [Output("contents")] + public Output> Contents { get; private set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Output("disable")] + public Output Disable { get; private set; } = null!; + + /// + /// The SMB/CIFS domain. + /// + [Output("domain")] + public Output Domain { get; private set; } = null!; + + /// + /// A list of nodes where this storage is available. + /// + [Output("nodes")] + public Output> Nodes { get; private set; } = null!; + + /// + /// The password for authenticating with the SMB/CIFS server. + /// + [Output("password")] + public Output Password { get; private set; } = null!; + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Output("preallocation")] + public Output Preallocation { get; private set; } = null!; + + /// + /// The IP address or DNS name of the SMB/CIFS server. + /// + [Output("server")] + public Output Server { get; private set; } = null!; + + /// + /// The name of the SMB/CIFS share. + /// + [Output("share")] + public Output Share { get; private set; } = null!; + + /// + /// Whether the storage is shared across all nodes. + /// + [Output("shared")] + public Output Shared { get; private set; } = null!; + + /// + /// Enable support for creating snapshots through volume backing-chains. + /// + [Output("snapshotAsVolumeChain")] + public Output SnapshotAsVolumeChain { get; private set; } = null!; + + /// + /// A subdirectory to mount within the share. + /// + [Output("subdirectory")] + public Output Subdirectory { get; private set; } = null!; + + /// + /// The username for authenticating with the SMB/CIFS server. + /// + [Output("username")] + public Output Username { get; private set; } = null!; + + + /// + /// Create a CIFS resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public CIFS(string name, CIFSArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/cIFS:CIFS", name, args ?? new CIFSArgs(), MakeResourceOptions(options, "")) + { + } + + private CIFS(string name, Input id, CIFSState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/cIFS:CIFS", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + AdditionalSecretOutputs = + { + "password", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing CIFS resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static CIFS Get(string name, Input id, CIFSState? state = null, CustomResourceOptions? options = null) + { + return new CIFS(name, id, state, options); + } + } + + public sealed class CIFSArgs : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("cifsId", required: true)] + public Input CifsId { get; set; } = null!; + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The SMB/CIFS domain. + /// + [Input("domain")] + public Input? Domain { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + [Input("password", required: true)] + private Input? _password; + + /// + /// The password for authenticating with the SMB/CIFS server. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Input("preallocation")] + public Input? Preallocation { get; set; } + + /// + /// The IP address or DNS name of the SMB/CIFS server. + /// + [Input("server", required: true)] + public Input Server { get; set; } = null!; + + /// + /// The name of the SMB/CIFS share. + /// + [Input("share", required: true)] + public Input Share { get; set; } = null!; + + /// + /// Enable support for creating snapshots through volume backing-chains. + /// + [Input("snapshotAsVolumeChain")] + public Input? SnapshotAsVolumeChain { get; set; } + + /// + /// A subdirectory to mount within the share. + /// + [Input("subdirectory")] + public Input? Subdirectory { get; set; } + + /// + /// The username for authenticating with the SMB/CIFS server. + /// + [Input("username", required: true)] + public Input Username { get; set; } = null!; + + public CIFSArgs() + { + } + public static new CIFSArgs Empty => new CIFSArgs(); + } + + public sealed class CIFSState : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("cifsId")] + public Input? CifsId { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The SMB/CIFS domain. + /// + [Input("domain")] + public Input? Domain { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + [Input("password")] + private Input? _password; + + /// + /// The password for authenticating with the SMB/CIFS server. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Input("preallocation")] + public Input? Preallocation { get; set; } + + /// + /// The IP address or DNS name of the SMB/CIFS server. + /// + [Input("server")] + public Input? Server { get; set; } + + /// + /// The name of the SMB/CIFS share. + /// + [Input("share")] + public Input? Share { get; set; } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + /// + /// Enable support for creating snapshots through volume backing-chains. + /// + [Input("snapshotAsVolumeChain")] + public Input? SnapshotAsVolumeChain { get; set; } + + /// + /// A subdirectory to mount within the share. + /// + [Input("subdirectory")] + public Input? Subdirectory { get; set; } + + /// + /// The username for authenticating with the SMB/CIFS server. + /// + [Input("username")] + public Input? Username { get; set; } + + public CIFSState() + { + } + public static new CIFSState Empty => new CIFSState(); + } +} diff --git a/sdk/dotnet/Storage/Directory.cs b/sdk/dotnet/Storage/Directory.cs new file mode 100644 index 00000000..e46f059e --- /dev/null +++ b/sdk/dotnet/Storage/Directory.cs @@ -0,0 +1,280 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage +{ + /// + /// Manages directory-based storage in Proxmox VE. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new ProxmoxVE.Storage.Directory("example", new() + /// { + /// DirectoryId = "example-dir", + /// Path = "/var/lib/vz", + /// Nodes = new[] + /// { + /// "pve", + /// }, + /// Contents = new[] + /// { + /// "images", + /// }, + /// Shared = true, + /// Disable = false, + /// Backups = new ProxmoxVE.Storage.Inputs.DirectoryBackupsArgs + /// { + /// MaxProtectedBackups = 5, + /// KeepDaily = 7, + /// }, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Storage/directory:Directory")] + public partial class Directory : global::Pulumi.CustomResource + { + /// + /// Configure backup retention settings for the storage type. + /// + [Output("backups")] + public Output Backups { get; private set; } = null!; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + [Output("contents")] + public Output> Contents { get; private set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Output("directoryId")] + public Output DirectoryId { get; private set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Output("disable")] + public Output Disable { get; private set; } = null!; + + /// + /// A list of nodes where this storage is available. + /// + [Output("nodes")] + public Output> Nodes { get; private set; } = null!; + + /// + /// The path to the directory on the Proxmox node. + /// + [Output("path")] + public Output Path { get; private set; } = null!; + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Output("preallocation")] + public Output Preallocation { get; private set; } = null!; + + /// + /// Whether the storage is shared across all nodes. + /// + [Output("shared")] + public Output Shared { get; private set; } = null!; + + + /// + /// Create a Directory resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Directory(string name, DirectoryArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/directory:Directory", name, args ?? new DirectoryArgs(), MakeResourceOptions(options, "")) + { + } + + private Directory(string name, Input id, DirectoryState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/directory:Directory", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Directory resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Directory Get(string name, Input id, DirectoryState? state = null, CustomResourceOptions? options = null) + { + return new Directory(name, id, state, options); + } + } + + public sealed class DirectoryArgs : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// The unique identifier of the storage. + /// + [Input("directoryId", required: true)] + public Input DirectoryId { get; set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// The path to the directory on the Proxmox node. + /// + [Input("path", required: true)] + public Input Path { get; set; } = null!; + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Input("preallocation")] + public Input? Preallocation { get; set; } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + public DirectoryArgs() + { + } + public static new DirectoryArgs Empty => new DirectoryArgs(); + } + + public sealed class DirectoryState : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// The unique identifier of the storage. + /// + [Input("directoryId")] + public Input? DirectoryId { get; set; } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// The path to the directory on the Proxmox node. + /// + [Input("path")] + public Input? Path { get; set; } + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Input("preallocation")] + public Input? Preallocation { get; set; } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + public DirectoryState() + { + } + public static new DirectoryState Empty => new DirectoryState(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/CIFSBackupsArgs.cs b/sdk/dotnet/Storage/Inputs/CIFSBackupsArgs.cs new file mode 100644 index 00000000..a669c759 --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/CIFSBackupsArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class CIFSBackupsArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public CIFSBackupsArgs() + { + } + public static new CIFSBackupsArgs Empty => new CIFSBackupsArgs(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/CIFSBackupsGetArgs.cs b/sdk/dotnet/Storage/Inputs/CIFSBackupsGetArgs.cs new file mode 100644 index 00000000..72f3017d --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/CIFSBackupsGetArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class CIFSBackupsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public CIFSBackupsGetArgs() + { + } + public static new CIFSBackupsGetArgs Empty => new CIFSBackupsGetArgs(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/DirectoryBackupsArgs.cs b/sdk/dotnet/Storage/Inputs/DirectoryBackupsArgs.cs new file mode 100644 index 00000000..cf4fbc91 --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/DirectoryBackupsArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class DirectoryBackupsArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public DirectoryBackupsArgs() + { + } + public static new DirectoryBackupsArgs Empty => new DirectoryBackupsArgs(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/DirectoryBackupsGetArgs.cs b/sdk/dotnet/Storage/Inputs/DirectoryBackupsGetArgs.cs new file mode 100644 index 00000000..d5b0b03a --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/DirectoryBackupsGetArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class DirectoryBackupsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public DirectoryBackupsGetArgs() + { + } + public static new DirectoryBackupsGetArgs Empty => new DirectoryBackupsGetArgs(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/NFSBackupsArgs.cs b/sdk/dotnet/Storage/Inputs/NFSBackupsArgs.cs new file mode 100644 index 00000000..2c5c182b --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/NFSBackupsArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class NFSBackupsArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public NFSBackupsArgs() + { + } + public static new NFSBackupsArgs Empty => new NFSBackupsArgs(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/NFSBackupsGetArgs.cs b/sdk/dotnet/Storage/Inputs/NFSBackupsGetArgs.cs new file mode 100644 index 00000000..11006507 --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/NFSBackupsGetArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class NFSBackupsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public NFSBackupsGetArgs() + { + } + public static new NFSBackupsGetArgs Empty => new NFSBackupsGetArgs(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/PBSBackupsArgs.cs b/sdk/dotnet/Storage/Inputs/PBSBackupsArgs.cs new file mode 100644 index 00000000..dd2d8f4c --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/PBSBackupsArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class PBSBackupsArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public PBSBackupsArgs() + { + } + public static new PBSBackupsArgs Empty => new PBSBackupsArgs(); + } +} diff --git a/sdk/dotnet/Storage/Inputs/PBSBackupsGetArgs.cs b/sdk/dotnet/Storage/Inputs/PBSBackupsGetArgs.cs new file mode 100644 index 00000000..aa5a1dc8 --- /dev/null +++ b/sdk/dotnet/Storage/Inputs/PBSBackupsGetArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Inputs +{ + + public sealed class PBSBackupsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + [Input("keepAll")] + public Input? KeepAll { get; set; } + + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + [Input("keepDaily")] + public Input? KeepDaily { get; set; } + + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + [Input("keepHourly")] + public Input? KeepHourly { get; set; } + + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + [Input("keepLast")] + public Input? KeepLast { get; set; } + + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + [Input("keepMonthly")] + public Input? KeepMonthly { get; set; } + + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + [Input("keepWeekly")] + public Input? KeepWeekly { get; set; } + + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + [Input("keepYearly")] + public Input? KeepYearly { get; set; } + + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + [Input("maxProtectedBackups")] + public Input? MaxProtectedBackups { get; set; } + + public PBSBackupsGetArgs() + { + } + public static new PBSBackupsGetArgs Empty => new PBSBackupsGetArgs(); + } +} diff --git a/sdk/dotnet/Storage/LVM.cs b/sdk/dotnet/Storage/LVM.cs new file mode 100644 index 00000000..1e269e10 --- /dev/null +++ b/sdk/dotnet/Storage/LVM.cs @@ -0,0 +1,256 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage +{ + /// + /// Manages LVM-based storage in Proxmox VE. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new ProxmoxVE.Storage.LVM("example", new() + /// { + /// LvmId = "example-lvm", + /// Nodes = new[] + /// { + /// "pve", + /// }, + /// VolumeGroup = "vg0", + /// Contents = new[] + /// { + /// "images", + /// }, + /// WipeRemovedVolumes = false, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Storage/lVM:LVM")] + public partial class LVM : global::Pulumi.CustomResource + { + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + [Output("contents")] + public Output> Contents { get; private set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Output("disable")] + public Output Disable { get; private set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Output("lvmId")] + public Output LvmId { get; private set; } = null!; + + /// + /// A list of nodes where this storage is available. + /// + [Output("nodes")] + public Output> Nodes { get; private set; } = null!; + + /// + /// Whether the storage is shared across all nodes. + /// + [Output("shared")] + public Output Shared { get; private set; } = null!; + + /// + /// The name of the volume group to use. + /// + [Output("volumeGroup")] + public Output VolumeGroup { get; private set; } = null!; + + /// + /// Whether to zero-out data when removing LVMs. + /// + [Output("wipeRemovedVolumes")] + public Output WipeRemovedVolumes { get; private set; } = null!; + + + /// + /// Create a LVM resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public LVM(string name, LVMArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/lVM:LVM", name, args ?? new LVMArgs(), MakeResourceOptions(options, "")) + { + } + + private LVM(string name, Input id, LVMState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/lVM:LVM", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing LVM resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static LVM Get(string name, Input id, LVMState? state = null, CustomResourceOptions? options = null) + { + return new LVM(name, id, state, options); + } + } + + public sealed class LVMArgs : global::Pulumi.ResourceArgs + { + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("lvmId", required: true)] + public Input LvmId { get; set; } = null!; + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + /// + /// The name of the volume group to use. + /// + [Input("volumeGroup", required: true)] + public Input VolumeGroup { get; set; } = null!; + + /// + /// Whether to zero-out data when removing LVMs. + /// + [Input("wipeRemovedVolumes")] + public Input? WipeRemovedVolumes { get; set; } + + public LVMArgs() + { + } + public static new LVMArgs Empty => new LVMArgs(); + } + + public sealed class LVMState : global::Pulumi.ResourceArgs + { + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("lvmId")] + public Input? LvmId { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + /// + /// The name of the volume group to use. + /// + [Input("volumeGroup")] + public Input? VolumeGroup { get; set; } + + /// + /// Whether to zero-out data when removing LVMs. + /// + [Input("wipeRemovedVolumes")] + public Input? WipeRemovedVolumes { get; set; } + + public LVMState() + { + } + public static new LVMState Empty => new LVMState(); + } +} diff --git a/sdk/dotnet/Storage/LVMThin.cs b/sdk/dotnet/Storage/LVMThin.cs new file mode 100644 index 00000000..e97915a6 --- /dev/null +++ b/sdk/dotnet/Storage/LVMThin.cs @@ -0,0 +1,250 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage +{ + /// + /// Manages thin LVM-based storage in Proxmox VE. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new ProxmoxVE.Storage.LVMThin("example", new() + /// { + /// LvmThinId = "example-lvmthin", + /// Nodes = new[] + /// { + /// "pve", + /// }, + /// VolumeGroup = "vg0", + /// ThinPool = "data", + /// Contents = new[] + /// { + /// "images", + /// }, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Storage/lVMThin:LVMThin")] + public partial class LVMThin : global::Pulumi.CustomResource + { + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + [Output("contents")] + public Output> Contents { get; private set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Output("disable")] + public Output Disable { get; private set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Output("lvmThinId")] + public Output LvmThinId { get; private set; } = null!; + + /// + /// A list of nodes where this storage is available. + /// + [Output("nodes")] + public Output> Nodes { get; private set; } = null!; + + /// + /// Whether the storage is shared across all nodes. + /// + [Output("shared")] + public Output Shared { get; private set; } = null!; + + /// + /// The name of the LVM thin pool to use. + /// + [Output("thinPool")] + public Output ThinPool { get; private set; } = null!; + + /// + /// The name of the volume group to use. + /// + [Output("volumeGroup")] + public Output VolumeGroup { get; private set; } = null!; + + + /// + /// Create a LVMThin resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public LVMThin(string name, LVMThinArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/lVMThin:LVMThin", name, args ?? new LVMThinArgs(), MakeResourceOptions(options, "")) + { + } + + private LVMThin(string name, Input id, LVMThinState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/lVMThin:LVMThin", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing LVMThin resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static LVMThin Get(string name, Input id, LVMThinState? state = null, CustomResourceOptions? options = null) + { + return new LVMThin(name, id, state, options); + } + } + + public sealed class LVMThinArgs : global::Pulumi.ResourceArgs + { + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("lvmThinId", required: true)] + public Input LvmThinId { get; set; } = null!; + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// The name of the LVM thin pool to use. + /// + [Input("thinPool", required: true)] + public Input ThinPool { get; set; } = null!; + + /// + /// The name of the volume group to use. + /// + [Input("volumeGroup", required: true)] + public Input VolumeGroup { get; set; } = null!; + + public LVMThinArgs() + { + } + public static new LVMThinArgs Empty => new LVMThinArgs(); + } + + public sealed class LVMThinState : global::Pulumi.ResourceArgs + { + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("lvmThinId")] + public Input? LvmThinId { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + /// + /// The name of the LVM thin pool to use. + /// + [Input("thinPool")] + public Input? ThinPool { get; set; } + + /// + /// The name of the volume group to use. + /// + [Input("volumeGroup")] + public Input? VolumeGroup { get; set; } + + public LVMThinState() + { + } + public static new LVMThinState Empty => new LVMThinState(); + } +} diff --git a/sdk/dotnet/Storage/NFS.cs b/sdk/dotnet/Storage/NFS.cs new file mode 100644 index 00000000..115154c8 --- /dev/null +++ b/sdk/dotnet/Storage/NFS.cs @@ -0,0 +1,332 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage +{ + /// + /// Manages an NFS-based storage in Proxmox VE. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new ProxmoxVE.Storage.NFS("example", new() + /// { + /// NfsId = "example-nfs", + /// Nodes = new[] + /// { + /// "pve", + /// }, + /// Server = "10.0.0.10", + /// Export = "/exports/proxmox", + /// Contents = new[] + /// { + /// "images", + /// "iso", + /// "backup", + /// }, + /// Options = "vers=4.2", + /// Preallocation = "metadata", + /// SnapshotAsVolumeChain = true, + /// Backups = new ProxmoxVE.Storage.Inputs.NFSBackupsArgs + /// { + /// MaxProtectedBackups = 5, + /// KeepDaily = 7, + /// }, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Storage/nFS:NFS")] + public partial class NFS : global::Pulumi.CustomResource + { + /// + /// Configure backup retention settings for the storage type. + /// + [Output("backups")] + public Output Backups { get; private set; } = null!; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + [Output("contents")] + public Output> Contents { get; private set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Output("disable")] + public Output Disable { get; private set; } = null!; + + /// + /// The path of the NFS export. + /// + [Output("export")] + public Output Export { get; private set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Output("nfsId")] + public Output NfsId { get; private set; } = null!; + + /// + /// A list of nodes where this storage is available. + /// + [Output("nodes")] + public Output> Nodes { get; private set; } = null!; + + /// + /// The options to pass to the NFS service. + /// + [Output("options")] + public Output Options { get; private set; } = null!; + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Output("preallocation")] + public Output Preallocation { get; private set; } = null!; + + /// + /// The IP address or DNS name of the NFS server. + /// + [Output("server")] + public Output Server { get; private set; } = null!; + + /// + /// Whether the storage is shared across all nodes. + /// + [Output("shared")] + public Output Shared { get; private set; } = null!; + + /// + /// Enable support for creating snapshots through volume backing-chains. + /// + [Output("snapshotAsVolumeChain")] + public Output SnapshotAsVolumeChain { get; private set; } = null!; + + + /// + /// Create a NFS resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public NFS(string name, NFSArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/nFS:NFS", name, args ?? new NFSArgs(), MakeResourceOptions(options, "")) + { + } + + private NFS(string name, Input id, NFSState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/nFS:NFS", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing NFS resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static NFS Get(string name, Input id, NFSState? state = null, CustomResourceOptions? options = null) + { + return new NFS(name, id, state, options); + } + } + + public sealed class NFSArgs : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The path of the NFS export. + /// + [Input("export", required: true)] + public Input Export { get; set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Input("nfsId", required: true)] + public Input NfsId { get; set; } = null!; + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// The options to pass to the NFS service. + /// + [Input("options")] + public Input? Options { get; set; } + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Input("preallocation")] + public Input? Preallocation { get; set; } + + /// + /// The IP address or DNS name of the NFS server. + /// + [Input("server", required: true)] + public Input Server { get; set; } = null!; + + /// + /// Enable support for creating snapshots through volume backing-chains. + /// + [Input("snapshotAsVolumeChain")] + public Input? SnapshotAsVolumeChain { get; set; } + + public NFSArgs() + { + } + public static new NFSArgs Empty => new NFSArgs(); + } + + public sealed class NFSState : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + /// + /// The path of the NFS export. + /// + [Input("export")] + public Input? Export { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("nfsId")] + public Input? NfsId { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// The options to pass to the NFS service. + /// + [Input("options")] + public Input? Options { get; set; } + + /// + /// The preallocation mode for raw and qcow2 images. + /// + [Input("preallocation")] + public Input? Preallocation { get; set; } + + /// + /// The IP address or DNS name of the NFS server. + /// + [Input("server")] + public Input? Server { get; set; } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + /// + /// Enable support for creating snapshots through volume backing-chains. + /// + [Input("snapshotAsVolumeChain")] + public Input? SnapshotAsVolumeChain { get; set; } + + public NFSState() + { + } + public static new NFSState Empty => new NFSState(); + } +} diff --git a/sdk/dotnet/Storage/Outputs/CIFSBackups.cs b/sdk/dotnet/Storage/Outputs/CIFSBackups.cs new file mode 100644 index 00000000..121ba529 --- /dev/null +++ b/sdk/dotnet/Storage/Outputs/CIFSBackups.cs @@ -0,0 +1,77 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Outputs +{ + + [OutputType] + public sealed class CIFSBackups + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + public readonly bool? KeepAll; + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + public readonly int? KeepDaily; + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + public readonly int? KeepHourly; + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + public readonly int? KeepLast; + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + public readonly int? KeepMonthly; + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + public readonly int? KeepWeekly; + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + public readonly int? KeepYearly; + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + public readonly int? MaxProtectedBackups; + + [OutputConstructor] + private CIFSBackups( + bool? keepAll, + + int? keepDaily, + + int? keepHourly, + + int? keepLast, + + int? keepMonthly, + + int? keepWeekly, + + int? keepYearly, + + int? maxProtectedBackups) + { + KeepAll = keepAll; + KeepDaily = keepDaily; + KeepHourly = keepHourly; + KeepLast = keepLast; + KeepMonthly = keepMonthly; + KeepWeekly = keepWeekly; + KeepYearly = keepYearly; + MaxProtectedBackups = maxProtectedBackups; + } + } +} diff --git a/sdk/dotnet/Storage/Outputs/DirectoryBackups.cs b/sdk/dotnet/Storage/Outputs/DirectoryBackups.cs new file mode 100644 index 00000000..3d003582 --- /dev/null +++ b/sdk/dotnet/Storage/Outputs/DirectoryBackups.cs @@ -0,0 +1,77 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Outputs +{ + + [OutputType] + public sealed class DirectoryBackups + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + public readonly bool? KeepAll; + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + public readonly int? KeepDaily; + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + public readonly int? KeepHourly; + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + public readonly int? KeepLast; + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + public readonly int? KeepMonthly; + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + public readonly int? KeepWeekly; + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + public readonly int? KeepYearly; + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + public readonly int? MaxProtectedBackups; + + [OutputConstructor] + private DirectoryBackups( + bool? keepAll, + + int? keepDaily, + + int? keepHourly, + + int? keepLast, + + int? keepMonthly, + + int? keepWeekly, + + int? keepYearly, + + int? maxProtectedBackups) + { + KeepAll = keepAll; + KeepDaily = keepDaily; + KeepHourly = keepHourly; + KeepLast = keepLast; + KeepMonthly = keepMonthly; + KeepWeekly = keepWeekly; + KeepYearly = keepYearly; + MaxProtectedBackups = maxProtectedBackups; + } + } +} diff --git a/sdk/dotnet/Storage/Outputs/NFSBackups.cs b/sdk/dotnet/Storage/Outputs/NFSBackups.cs new file mode 100644 index 00000000..a4d30178 --- /dev/null +++ b/sdk/dotnet/Storage/Outputs/NFSBackups.cs @@ -0,0 +1,77 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Outputs +{ + + [OutputType] + public sealed class NFSBackups + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + public readonly bool? KeepAll; + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + public readonly int? KeepDaily; + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + public readonly int? KeepHourly; + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + public readonly int? KeepLast; + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + public readonly int? KeepMonthly; + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + public readonly int? KeepWeekly; + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + public readonly int? KeepYearly; + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + public readonly int? MaxProtectedBackups; + + [OutputConstructor] + private NFSBackups( + bool? keepAll, + + int? keepDaily, + + int? keepHourly, + + int? keepLast, + + int? keepMonthly, + + int? keepWeekly, + + int? keepYearly, + + int? maxProtectedBackups) + { + KeepAll = keepAll; + KeepDaily = keepDaily; + KeepHourly = keepHourly; + KeepLast = keepLast; + KeepMonthly = keepMonthly; + KeepWeekly = keepWeekly; + KeepYearly = keepYearly; + MaxProtectedBackups = maxProtectedBackups; + } + } +} diff --git a/sdk/dotnet/Storage/Outputs/PBSBackups.cs b/sdk/dotnet/Storage/Outputs/PBSBackups.cs new file mode 100644 index 00000000..4a192f22 --- /dev/null +++ b/sdk/dotnet/Storage/Outputs/PBSBackups.cs @@ -0,0 +1,77 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage.Outputs +{ + + [OutputType] + public sealed class PBSBackups + { + /// + /// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + /// + public readonly bool? KeepAll; + /// + /// The number of daily backups to keep. Older backups will be removed. + /// + public readonly int? KeepDaily; + /// + /// The number of hourly backups to keep. Older backups will be removed. + /// + public readonly int? KeepHourly; + /// + /// Specifies the number of the most recent backups to keep, regardless of their age. + /// + public readonly int? KeepLast; + /// + /// The number of monthly backups to keep. Older backups will be removed. + /// + public readonly int? KeepMonthly; + /// + /// The number of weekly backups to keep. Older backups will be removed. + /// + public readonly int? KeepWeekly; + /// + /// The number of yearly backups to keep. Older backups will be removed. + /// + public readonly int? KeepYearly; + /// + /// The maximum number of protected backups per guest. Use '-1' for unlimited. + /// + public readonly int? MaxProtectedBackups; + + [OutputConstructor] + private PBSBackups( + bool? keepAll, + + int? keepDaily, + + int? keepHourly, + + int? keepLast, + + int? keepMonthly, + + int? keepWeekly, + + int? keepYearly, + + int? maxProtectedBackups) + { + KeepAll = keepAll; + KeepDaily = keepDaily; + KeepHourly = keepHourly; + KeepLast = keepLast; + KeepMonthly = keepMonthly; + KeepWeekly = keepWeekly; + KeepYearly = keepYearly; + MaxProtectedBackups = maxProtectedBackups; + } + } +} diff --git a/sdk/dotnet/Storage/PBS.cs b/sdk/dotnet/Storage/PBS.cs new file mode 100644 index 00000000..3caff2ba --- /dev/null +++ b/sdk/dotnet/Storage/PBS.cs @@ -0,0 +1,460 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage +{ + /// + /// Manages a Proxmox Backup Server (PBS) storage in Proxmox VE. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new ProxmoxVE.Storage.PBS("example", new() + /// { + /// PbsId = "example-pbs", + /// Nodes = new[] + /// { + /// "pve", + /// }, + /// Server = "pbs.example.local", + /// Datastore = "backup", + /// Username = "pbs-user", + /// Password = "pbs-password", + /// Fingerprint = "AA:BB:CC:DD:EE:FF", + /// Contents = new[] + /// { + /// "backup", + /// }, + /// GenerateEncryptionKey = true, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Storage/pBS:PBS")] + public partial class PBS : global::Pulumi.CustomResource + { + /// + /// Configure backup retention settings for the storage type. + /// + [Output("backups")] + public Output Backups { get; private set; } = null!; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + [Output("contents")] + public Output> Contents { get; private set; } = null!; + + /// + /// The name of the datastore on the Proxmox Backup Server. + /// + [Output("datastore")] + public Output Datastore { get; private set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Output("disable")] + public Output Disable { get; private set; } = null!; + + /// + /// An existing encryption key for the datastore. This is a sensitive value. Conflicts with `GenerateEncryptionKey`. + /// + [Output("encryptionKey")] + public Output EncryptionKey { get; private set; } = null!; + + /// + /// The SHA256 fingerprint of the encryption key currently in use. + /// + [Output("encryptionKeyFingerprint")] + public Output EncryptionKeyFingerprint { get; private set; } = null!; + + /// + /// The SHA256 fingerprint of the Proxmox Backup Server's certificate. + /// + [Output("fingerprint")] + public Output Fingerprint { get; private set; } = null!; + + /// + /// If set to true, Proxmox will generate a new encryption key. The key will be stored in the `GeneratedEncryptionKey` attribute. Conflicts with `EncryptionKey`. + /// + [Output("generateEncryptionKey")] + public Output GenerateEncryptionKey { get; private set; } = null!; + + /// + /// The encryption key returned by Proxmox when `GenerateEncryptionKey` is true. + /// + [Output("generatedEncryptionKey")] + public Output GeneratedEncryptionKey { get; private set; } = null!; + + /// + /// The namespace to use on the Proxmox Backup Server. + /// + [Output("namespace")] + public Output Namespace { get; private set; } = null!; + + /// + /// A list of nodes where this storage is available. + /// + [Output("nodes")] + public Output> Nodes { get; private set; } = null!; + + /// + /// The password for authenticating with the Proxmox Backup Server. + /// + [Output("password")] + public Output Password { get; private set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Output("pbsId")] + public Output PbsId { get; private set; } = null!; + + /// + /// The IP address or DNS name of the Proxmox Backup Server. + /// + [Output("server")] + public Output Server { get; private set; } = null!; + + /// + /// Whether the storage is shared across all nodes. + /// + [Output("shared")] + public Output Shared { get; private set; } = null!; + + /// + /// The username for authenticating with the Proxmox Backup Server. + /// + [Output("username")] + public Output Username { get; private set; } = null!; + + + /// + /// Create a PBS resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public PBS(string name, PBSArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/pBS:PBS", name, args ?? new PBSArgs(), MakeResourceOptions(options, "")) + { + } + + private PBS(string name, Input id, PBSState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/pBS:PBS", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + AdditionalSecretOutputs = + { + "encryptionKey", + "generatedEncryptionKey", + "password", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing PBS resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static PBS Get(string name, Input id, PBSState? state = null, CustomResourceOptions? options = null) + { + return new PBS(name, id, state, options); + } + } + + public sealed class PBSArgs : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// The name of the datastore on the Proxmox Backup Server. + /// + [Input("datastore", required: true)] + public Input Datastore { get; set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + [Input("encryptionKey")] + private Input? _encryptionKey; + + /// + /// An existing encryption key for the datastore. This is a sensitive value. Conflicts with `GenerateEncryptionKey`. + /// + public Input? EncryptionKey + { + get => _encryptionKey; + set + { + var emptySecret = Output.CreateSecret(0); + _encryptionKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The SHA256 fingerprint of the Proxmox Backup Server's certificate. + /// + [Input("fingerprint")] + public Input? Fingerprint { get; set; } + + /// + /// If set to true, Proxmox will generate a new encryption key. The key will be stored in the `GeneratedEncryptionKey` attribute. Conflicts with `EncryptionKey`. + /// + [Input("generateEncryptionKey")] + public Input? GenerateEncryptionKey { get; set; } + + /// + /// The namespace to use on the Proxmox Backup Server. + /// + [Input("namespace")] + public Input? Namespace { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + [Input("password", required: true)] + private Input? _password; + + /// + /// The password for authenticating with the Proxmox Backup Server. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The unique identifier of the storage. + /// + [Input("pbsId", required: true)] + public Input PbsId { get; set; } = null!; + + /// + /// The IP address or DNS name of the Proxmox Backup Server. + /// + [Input("server", required: true)] + public Input Server { get; set; } = null!; + + /// + /// The username for authenticating with the Proxmox Backup Server. + /// + [Input("username", required: true)] + public Input Username { get; set; } = null!; + + public PBSArgs() + { + } + public static new PBSArgs Empty => new PBSArgs(); + } + + public sealed class PBSState : global::Pulumi.ResourceArgs + { + /// + /// Configure backup retention settings for the storage type. + /// + [Input("backups")] + public Input? Backups { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// The name of the datastore on the Proxmox Backup Server. + /// + [Input("datastore")] + public Input? Datastore { get; set; } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + [Input("encryptionKey")] + private Input? _encryptionKey; + + /// + /// An existing encryption key for the datastore. This is a sensitive value. Conflicts with `GenerateEncryptionKey`. + /// + public Input? EncryptionKey + { + get => _encryptionKey; + set + { + var emptySecret = Output.CreateSecret(0); + _encryptionKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The SHA256 fingerprint of the encryption key currently in use. + /// + [Input("encryptionKeyFingerprint")] + public Input? EncryptionKeyFingerprint { get; set; } + + /// + /// The SHA256 fingerprint of the Proxmox Backup Server's certificate. + /// + [Input("fingerprint")] + public Input? Fingerprint { get; set; } + + /// + /// If set to true, Proxmox will generate a new encryption key. The key will be stored in the `GeneratedEncryptionKey` attribute. Conflicts with `EncryptionKey`. + /// + [Input("generateEncryptionKey")] + public Input? GenerateEncryptionKey { get; set; } + + [Input("generatedEncryptionKey")] + private Input? _generatedEncryptionKey; + + /// + /// The encryption key returned by Proxmox when `GenerateEncryptionKey` is true. + /// + public Input? GeneratedEncryptionKey + { + get => _generatedEncryptionKey; + set + { + var emptySecret = Output.CreateSecret(0); + _generatedEncryptionKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The namespace to use on the Proxmox Backup Server. + /// + [Input("namespace")] + public Input? Namespace { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + [Input("password")] + private Input? _password; + + /// + /// The password for authenticating with the Proxmox Backup Server. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The unique identifier of the storage. + /// + [Input("pbsId")] + public Input? PbsId { get; set; } + + /// + /// The IP address or DNS name of the Proxmox Backup Server. + /// + [Input("server")] + public Input? Server { get; set; } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + /// + /// The username for authenticating with the Proxmox Backup Server. + /// + [Input("username")] + public Input? Username { get; set; } + + public PBSState() + { + } + public static new PBSState Empty => new PBSState(); + } +} diff --git a/sdk/dotnet/Storage/ZFSPool.cs b/sdk/dotnet/Storage/ZFSPool.cs new file mode 100644 index 00000000..c03ef0b6 --- /dev/null +++ b/sdk/dotnet/Storage/ZFSPool.cs @@ -0,0 +1,269 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.Storage +{ + /// + /// Manages ZFS-based storage in Proxmox VE. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var example = new ProxmoxVE.Storage.ZFSPool("example", new() + /// { + /// ZfsPoolId = "example-zfs", + /// Nodes = new[] + /// { + /// "pve", + /// }, + /// ZfsPool = "rpool/data", + /// Contents = new[] + /// { + /// "images", + /// }, + /// ThinProvision = true, + /// Blocksize = "64k", + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:Storage/zFSPool:ZFSPool")] + public partial class ZFSPool : global::Pulumi.CustomResource + { + /// + /// Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + /// + [Output("blocksize")] + public Output Blocksize { get; private set; } = null!; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + [Output("contents")] + public Output> Contents { get; private set; } = null!; + + /// + /// Whether the storage is disabled. + /// + [Output("disable")] + public Output Disable { get; private set; } = null!; + + /// + /// A list of nodes where this storage is available. + /// + [Output("nodes")] + public Output> Nodes { get; private set; } = null!; + + /// + /// Whether the storage is shared across all nodes. + /// + [Output("shared")] + public Output Shared { get; private set; } = null!; + + /// + /// Whether to enable thin provisioning (`On` or `Off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + /// + [Output("thinProvision")] + public Output ThinProvision { get; private set; } = null!; + + /// + /// The name of the ZFS storage pool to use (e.g. `Tank`, `rpool/data`). + /// + [Output("zfsPool")] + public Output ZfsPool { get; private set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Output("zfsPoolId")] + public Output ZfsPoolId { get; private set; } = null!; + + + /// + /// Create a ZFSPool resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public ZFSPool(string name, ZFSPoolArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/zFSPool:ZFSPool", name, args ?? new ZFSPoolArgs(), MakeResourceOptions(options, "")) + { + } + + private ZFSPool(string name, Input id, ZFSPoolState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:Storage/zFSPool:ZFSPool", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing ZFSPool resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static ZFSPool Get(string name, Input id, ZFSPoolState? state = null, CustomResourceOptions? options = null) + { + return new ZFSPool(name, id, state, options); + } + } + + public sealed class ZFSPoolArgs : global::Pulumi.ResourceArgs + { + /// + /// Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + /// + [Input("blocksize")] + public Input? Blocksize { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// Whether to enable thin provisioning (`On` or `Off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + /// + [Input("thinProvision")] + public Input? ThinProvision { get; set; } + + /// + /// The name of the ZFS storage pool to use (e.g. `Tank`, `rpool/data`). + /// + [Input("zfsPool", required: true)] + public Input ZfsPool { get; set; } = null!; + + /// + /// The unique identifier of the storage. + /// + [Input("zfsPoolId", required: true)] + public Input ZfsPoolId { get; set; } = null!; + + public ZFSPoolArgs() + { + } + public static new ZFSPoolArgs Empty => new ZFSPoolArgs(); + } + + public sealed class ZFSPoolState : global::Pulumi.ResourceArgs + { + /// + /// Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + /// + [Input("blocksize")] + public Input? Blocksize { get; set; } + + [Input("contents")] + private InputList? _contents; + + /// + /// The content types that can be stored on this storage. Valid values: `Backup` (VM backups), `Images` (VM disk images), `Import` (VM disk images for import), `Iso` (ISO images), `Rootdir` (container root directories), `Snippets` (cloud-init, hook scripts, etc.), `Vztmpl` (container templates). + /// + public InputList Contents + { + get => _contents ?? (_contents = new InputList()); + set => _contents = value; + } + + /// + /// Whether the storage is disabled. + /// + [Input("disable")] + public Input? Disable { get; set; } + + [Input("nodes")] + private InputList? _nodes; + + /// + /// A list of nodes where this storage is available. + /// + public InputList Nodes + { + get => _nodes ?? (_nodes = new InputList()); + set => _nodes = value; + } + + /// + /// Whether the storage is shared across all nodes. + /// + [Input("shared")] + public Input? Shared { get; set; } + + /// + /// Whether to enable thin provisioning (`On` or `Off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + /// + [Input("thinProvision")] + public Input? ThinProvision { get; set; } + + /// + /// The name of the ZFS storage pool to use (e.g. `Tank`, `rpool/data`). + /// + [Input("zfsPool")] + public Input? ZfsPool { get; set; } + + /// + /// The unique identifier of the storage. + /// + [Input("zfsPoolId")] + public Input? ZfsPoolId { get; set; } + + public ZFSPoolState() + { + } + public static new ZFSPoolState Empty => new ZFSPoolState(); + } +} diff --git a/sdk/dotnet/Vm/ClonedVirtualMachine.cs b/sdk/dotnet/Vm/ClonedVirtualMachine.cs new file mode 100644 index 00000000..d1459da3 --- /dev/null +++ b/sdk/dotnet/Vm/ClonedVirtualMachine.cs @@ -0,0 +1,678 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM +{ + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using ProxmoxVE = Pulumi.ProxmoxVE; + /// + /// return await Deployment.RunAsync(() => + /// { + /// // Example 1: Basic clone with minimal management + /// var basicClone = new ProxmoxVE.VM.ClonedVirtualMachine("basic_clone", new() + /// { + /// NodeName = "pve", + /// Name = "basic-clone", + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// Full = true, + /// }, + /// Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs + /// { + /// Cores = 4, + /// }, + /// }); + /// + /// // Example 2: Clone with explicit network management + /// var networkManaged = new ProxmoxVE.VM.ClonedVirtualMachine("network_managed", new() + /// { + /// NodeName = "pve", + /// Name = "network-clone", + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// }, + /// Network = + /// { + /// { "net0", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs + /// { + /// Bridge = "vmbr0", + /// Model = "virtio", + /// Tag = 100, + /// } }, + /// { "net1", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs + /// { + /// Bridge = "vmbr1", + /// Model = "virtio", + /// Firewall = true, + /// MacAddress = "BC:24:11:2E:C5:00", + /// } }, + /// }, + /// Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs + /// { + /// Cores = 2, + /// }, + /// }); + /// + /// // Example 3: Clone with disk management + /// var diskManaged = new ProxmoxVE.VM.ClonedVirtualMachine("disk_managed", new() + /// { + /// NodeName = "pve", + /// Name = "disk-clone", + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// TargetDatastore = "local-lvm", + /// }, + /// Disk = + /// { + /// { "scsi0", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs + /// { + /// DatastoreId = "local-lvm", + /// SizeGb = 50, + /// Discard = "on", + /// Ssd = true, + /// } }, + /// { "scsi1", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs + /// { + /// DatastoreId = "local-lvm", + /// SizeGb = 100, + /// Backup = false, + /// } }, + /// }, + /// }); + /// + /// // Example 4: Clone with explicit device deletion + /// var selectiveDelete = new ProxmoxVE.VM.ClonedVirtualMachine("selective_delete", new() + /// { + /// NodeName = "pve", + /// Name = "minimal-clone", + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// }, + /// Network = + /// { + /// { "net0", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs + /// { + /// Bridge = "vmbr0", + /// Model = "virtio", + /// } }, + /// }, + /// Delete = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDeleteArgs + /// { + /// Networks = new[] + /// { + /// "net1", + /// "net2", + /// }, + /// }, + /// }); + /// + /// // Example 5: Full-featured clone with multiple settings + /// var fullFeatured = new ProxmoxVE.VM.ClonedVirtualMachine("full_featured", new() + /// { + /// NodeName = "pve", + /// Name = "production-vm", + /// Description = "Production VM cloned from template", + /// Tags = new[] + /// { + /// "production", + /// "web", + /// }, + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// SourceNodeName = "pve", + /// Full = true, + /// TargetDatastore = "local-lvm", + /// Retries = 3, + /// }, + /// Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs + /// { + /// Cores = 8, + /// Sockets = 1, + /// Architecture = "x86_64", + /// Type = "host", + /// }, + /// Memory = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineMemoryArgs + /// { + /// Size = 8192, + /// Balloon = 2048, + /// Shares = 2000, + /// }, + /// Network = + /// { + /// { "net0", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs + /// { + /// Bridge = "vmbr0", + /// Model = "virtio", + /// Tag = 100, + /// Firewall = true, + /// RateLimit = 100, + /// } }, + /// }, + /// Disk = + /// { + /// { "scsi0", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDiskArgs + /// { + /// DatastoreId = "local-lvm", + /// SizeGb = 100, + /// Discard = "on", + /// Iothread = true, + /// Ssd = true, + /// Cache = "writethrough", + /// } }, + /// }, + /// Vga = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineVgaArgs + /// { + /// Type = "std", + /// Memory = 16, + /// }, + /// Delete = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineDeleteArgs + /// { + /// Disks = new[] + /// { + /// "ide2", + /// }, + /// }, + /// StopOnDestroy = false, + /// PurgeOnDestroy = true, + /// DeleteUnreferencedDisksOnDestroy = false, + /// Timeouts = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineTimeoutsArgs + /// { + /// Create = "30m", + /// Update = "30m", + /// Delete = "10m", + /// }, + /// }); + /// + /// // Example 6: Linked clone for testing + /// var testClone = new ProxmoxVE.VM.ClonedVirtualMachine("test_clone", new() + /// { + /// NodeName = "pve", + /// Name = "test-vm", + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// Full = false, + /// }, + /// Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs + /// { + /// Cores = 2, + /// }, + /// Network = + /// { + /// { "net0", new ProxmoxVE.VM.Inputs.ClonedVirtualMachineNetworkArgs + /// { + /// Bridge = "vmbr0", + /// Model = "virtio", + /// } }, + /// }, + /// }); + /// + /// // Example 7: Clone with pool assignment + /// var pooledClone = new ProxmoxVE.VM.ClonedVirtualMachine("pooled_clone", new() + /// { + /// NodeName = "pve", + /// Name = "pooled-vm", + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// PoolId = "production", + /// }, + /// Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs + /// { + /// Cores = 4, + /// }, + /// }); + /// + /// // Example 8: Import existing cloned VM + /// var imported = new ProxmoxVE.VM.ClonedVirtualMachine("imported", new() + /// { + /// VmId = "123", + /// NodeName = "pve", + /// Clone = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCloneArgs + /// { + /// SourceVmId = 100, + /// }, + /// Cpu = new ProxmoxVE.VM.Inputs.ClonedVirtualMachineCpuArgs + /// { + /// Cores = 4, + /// }, + /// }); + /// + /// }); + /// ``` + /// + [ProxmoxVEResourceType("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine")] + public partial class ClonedVirtualMachine : global::Pulumi.CustomResource + { + /// + /// The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `Q35` machine type only supports `Ide0` and `Ide2` of IDE interfaces. + /// + [Output("cdrom")] + public Output?> Cdrom { get; private set; } = null!; + + /// + /// Clone settings. Changes require recreation. + /// + [Output("clone")] + public Output Clone { get; private set; } = null!; + + /// + /// The CPU configuration. + /// + [Output("cpu")] + public Output Cpu { get; private set; } = null!; + + /// + /// Explicit deletions to perform after cloning/updating. Entries persist across applies. + /// + [Output("delete")] + public Output Delete { get; private set; } = null!; + + [Output("deleteUnreferencedDisksOnDestroy")] + public Output DeleteUnreferencedDisksOnDestroy { get; private set; } = null!; + + /// + /// Optional VM description applied after cloning. + /// + [Output("description")] + public Output Description { get; private set; } = null!; + + /// + /// Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + /// + [Output("disk")] + public Output?> Disk { get; private set; } = null!; + + /// + /// Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `Size` sets the total available RAM, while `Balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + /// + [Output("memory")] + public Output Memory { get; private set; } = null!; + + /// + /// Optional VM name override applied after cloning. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + /// + [Output("network")] + public Output?> Network { get; private set; } = null!; + + /// + /// Target node for the cloned VM. + /// + [Output("nodeName")] + public Output NodeName { get; private set; } = null!; + + /// + /// Purge backup configuration on destroy. + /// + [Output("purgeOnDestroy")] + public Output PurgeOnDestroy { get; private set; } = null!; + + /// + /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + /// + [Output("rng")] + public Output Rng { get; private set; } = null!; + + /// + /// Stop the VM on destroy (instead of shutdown). + /// + [Output("stopOnDestroy")] + public Output StopOnDestroy { get; private set; } = null!; + + /// + /// Tags applied after cloning. + /// + [Output("tags")] + public Output> Tags { get; private set; } = null!; + + [Output("timeouts")] + public Output Timeouts { get; private set; } = null!; + + /// + /// Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `Std` for all OS types besides some Windows versions (XP and older) which use `Cirrus`. The `Qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + /// + [Output("vga")] + public Output Vga { get; private set; } = null!; + + /// + /// The VM identifier in the Proxmox cluster. + /// + [Output("vmId")] + public Output VmId { get; private set; } = null!; + + + /// + /// Create a ClonedVirtualMachine resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public ClonedVirtualMachine(string name, ClonedVirtualMachineArgs args, CustomResourceOptions? options = null) + : base("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine", name, args ?? new ClonedVirtualMachineArgs(), MakeResourceOptions(options, "")) + { + } + + private ClonedVirtualMachine(string name, Input id, ClonedVirtualMachineState? state = null, CustomResourceOptions? options = null) + : base("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/muhlba91/pulumi-proxmoxve", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing ClonedVirtualMachine resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static ClonedVirtualMachine Get(string name, Input id, ClonedVirtualMachineState? state = null, CustomResourceOptions? options = null) + { + return new ClonedVirtualMachine(name, id, state, options); + } + } + + public sealed class ClonedVirtualMachineArgs : global::Pulumi.ResourceArgs + { + [Input("cdrom")] + private InputMap? _cdrom; + + /// + /// The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `Q35` machine type only supports `Ide0` and `Ide2` of IDE interfaces. + /// + public InputMap Cdrom + { + get => _cdrom ?? (_cdrom = new InputMap()); + set => _cdrom = value; + } + + /// + /// Clone settings. Changes require recreation. + /// + [Input("clone", required: true)] + public Input Clone { get; set; } = null!; + + /// + /// The CPU configuration. + /// + [Input("cpu")] + public Input? Cpu { get; set; } + + /// + /// Explicit deletions to perform after cloning/updating. Entries persist across applies. + /// + [Input("delete")] + public Input? Delete { get; set; } + + [Input("deleteUnreferencedDisksOnDestroy")] + public Input? DeleteUnreferencedDisksOnDestroy { get; set; } + + /// + /// Optional VM description applied after cloning. + /// + [Input("description")] + public Input? Description { get; set; } + + [Input("disk")] + private InputMap? _disk; + + /// + /// Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + /// + public InputMap Disk + { + get => _disk ?? (_disk = new InputMap()); + set => _disk = value; + } + + /// + /// Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `Size` sets the total available RAM, while `Balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + /// + [Input("memory")] + public Input? Memory { get; set; } + + /// + /// Optional VM name override applied after cloning. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("network")] + private InputMap? _network; + + /// + /// Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + /// + public InputMap Network + { + get => _network ?? (_network = new InputMap()); + set => _network = value; + } + + /// + /// Target node for the cloned VM. + /// + [Input("nodeName", required: true)] + public Input NodeName { get; set; } = null!; + + /// + /// Purge backup configuration on destroy. + /// + [Input("purgeOnDestroy")] + public Input? PurgeOnDestroy { get; set; } + + /// + /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + /// + [Input("rng")] + public Input? Rng { get; set; } + + /// + /// Stop the VM on destroy (instead of shutdown). + /// + [Input("stopOnDestroy")] + public Input? StopOnDestroy { get; set; } + + [Input("tags")] + private InputList? _tags; + + /// + /// Tags applied after cloning. + /// + public InputList Tags + { + get => _tags ?? (_tags = new InputList()); + set => _tags = value; + } + + [Input("timeouts")] + public Input? Timeouts { get; set; } + + /// + /// Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `Std` for all OS types besides some Windows versions (XP and older) which use `Cirrus`. The `Qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + /// + [Input("vga")] + public Input? Vga { get; set; } + + /// + /// The VM identifier in the Proxmox cluster. + /// + [Input("vmId")] + public Input? VmId { get; set; } + + public ClonedVirtualMachineArgs() + { + } + public static new ClonedVirtualMachineArgs Empty => new ClonedVirtualMachineArgs(); + } + + public sealed class ClonedVirtualMachineState : global::Pulumi.ResourceArgs + { + [Input("cdrom")] + private InputMap? _cdrom; + + /// + /// The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `Q35` machine type only supports `Ide0` and `Ide2` of IDE interfaces. + /// + public InputMap Cdrom + { + get => _cdrom ?? (_cdrom = new InputMap()); + set => _cdrom = value; + } + + /// + /// Clone settings. Changes require recreation. + /// + [Input("clone")] + public Input? Clone { get; set; } + + /// + /// The CPU configuration. + /// + [Input("cpu")] + public Input? Cpu { get; set; } + + /// + /// Explicit deletions to perform after cloning/updating. Entries persist across applies. + /// + [Input("delete")] + public Input? Delete { get; set; } + + [Input("deleteUnreferencedDisksOnDestroy")] + public Input? DeleteUnreferencedDisksOnDestroy { get; set; } + + /// + /// Optional VM description applied after cloning. + /// + [Input("description")] + public Input? Description { get; set; } + + [Input("disk")] + private InputMap? _disk; + + /// + /// Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + /// + public InputMap Disk + { + get => _disk ?? (_disk = new InputMap()); + set => _disk = value; + } + + /// + /// Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `Size` sets the total available RAM, while `Balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + /// + [Input("memory")] + public Input? Memory { get; set; } + + /// + /// Optional VM name override applied after cloning. + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("network")] + private InputMap? _network; + + /// + /// Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + /// + public InputMap Network + { + get => _network ?? (_network = new InputMap()); + set => _network = value; + } + + /// + /// Target node for the cloned VM. + /// + [Input("nodeName")] + public Input? NodeName { get; set; } + + /// + /// Purge backup configuration on destroy. + /// + [Input("purgeOnDestroy")] + public Input? PurgeOnDestroy { get; set; } + + /// + /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + /// + [Input("rng")] + public Input? Rng { get; set; } + + /// + /// Stop the VM on destroy (instead of shutdown). + /// + [Input("stopOnDestroy")] + public Input? StopOnDestroy { get; set; } + + [Input("tags")] + private InputList? _tags; + + /// + /// Tags applied after cloning. + /// + public InputList Tags + { + get => _tags ?? (_tags = new InputList()); + set => _tags = value; + } + + [Input("timeouts")] + public Input? Timeouts { get; set; } + + /// + /// Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `Std` for all OS types besides some Windows versions (XP and older) which use `Cirrus`. The `Qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + /// + [Input("vga")] + public Input? Vga { get; set; } + + /// + /// The VM identifier in the Proxmox cluster. + /// + [Input("vmId")] + public Input? VmId { get; set; } + + public ClonedVirtualMachineState() + { + } + public static new ClonedVirtualMachineState Empty => new ClonedVirtualMachineState(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCdromArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCdromArgs.cs new file mode 100644 index 00000000..4bd3b810 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCdromArgs.cs @@ -0,0 +1,26 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineCdromArgs : global::Pulumi.ResourceArgs + { + /// + /// The file ID of the CD-ROM, or `cdrom|none`. Defaults to `None` to leave the CD-ROM empty. Use `Cdrom` to connect to the physical drive. + /// + [Input("fileId")] + public Input? FileId { get; set; } + + public ClonedVirtualMachineCdromArgs() + { + } + public static new ClonedVirtualMachineCdromArgs Empty => new ClonedVirtualMachineCdromArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCdromGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCdromGetArgs.cs new file mode 100644 index 00000000..537342a9 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCdromGetArgs.cs @@ -0,0 +1,26 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineCdromGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The file ID of the CD-ROM, or `cdrom|none`. Defaults to `None` to leave the CD-ROM empty. Use `Cdrom` to connect to the physical drive. + /// + [Input("fileId")] + public Input? FileId { get; set; } + + public ClonedVirtualMachineCdromGetArgs() + { + } + public static new ClonedVirtualMachineCdromGetArgs Empty => new ClonedVirtualMachineCdromGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCloneArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCloneArgs.cs new file mode 100644 index 00000000..5efff304 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCloneArgs.cs @@ -0,0 +1,74 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineCloneArgs : global::Pulumi.ResourceArgs + { + /// + /// Clone bandwidth limit in MB/s. + /// + [Input("bandwidthLimit")] + public Input? BandwidthLimit { get; set; } + + /// + /// Perform a full clone (true) or linked clone (false). + /// + [Input("full")] + public Input? Full { get; set; } + + /// + /// Pool to assign the cloned VM to. + /// + [Input("poolId")] + public Input? PoolId { get; set; } + + /// + /// Number of retries for clone operations. + /// + [Input("retries")] + public Input? Retries { get; set; } + + /// + /// Snapshot name to clone from. + /// + [Input("snapshotName")] + public Input? SnapshotName { get; set; } + + /// + /// Source node of the VM/template. Defaults to target node if unset. + /// + [Input("sourceNodeName")] + public Input? SourceNodeName { get; set; } + + /// + /// Source VM/template ID to clone from. + /// + [Input("sourceVmId", required: true)] + public Input SourceVmId { get; set; } = null!; + + /// + /// Target datastore for cloned disks. + /// + [Input("targetDatastore")] + public Input? TargetDatastore { get; set; } + + /// + /// Target disk format for clone (e.g., raw, qcow2). + /// + [Input("targetFormat")] + public Input? TargetFormat { get; set; } + + public ClonedVirtualMachineCloneArgs() + { + } + public static new ClonedVirtualMachineCloneArgs Empty => new ClonedVirtualMachineCloneArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCloneGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCloneGetArgs.cs new file mode 100644 index 00000000..22a208af --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCloneGetArgs.cs @@ -0,0 +1,74 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineCloneGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Clone bandwidth limit in MB/s. + /// + [Input("bandwidthLimit")] + public Input? BandwidthLimit { get; set; } + + /// + /// Perform a full clone (true) or linked clone (false). + /// + [Input("full")] + public Input? Full { get; set; } + + /// + /// Pool to assign the cloned VM to. + /// + [Input("poolId")] + public Input? PoolId { get; set; } + + /// + /// Number of retries for clone operations. + /// + [Input("retries")] + public Input? Retries { get; set; } + + /// + /// Snapshot name to clone from. + /// + [Input("snapshotName")] + public Input? SnapshotName { get; set; } + + /// + /// Source node of the VM/template. Defaults to target node if unset. + /// + [Input("sourceNodeName")] + public Input? SourceNodeName { get; set; } + + /// + /// Source VM/template ID to clone from. + /// + [Input("sourceVmId", required: true)] + public Input SourceVmId { get; set; } = null!; + + /// + /// Target datastore for cloned disks. + /// + [Input("targetDatastore")] + public Input? TargetDatastore { get; set; } + + /// + /// Target disk format for clone (e.g., raw, qcow2). + /// + [Input("targetFormat")] + public Input? TargetFormat { get; set; } + + public ClonedVirtualMachineCloneGetArgs() + { + } + public static new ClonedVirtualMachineCloneGetArgs Empty => new ClonedVirtualMachineCloneGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCpuArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCpuArgs.cs new file mode 100644 index 00000000..40ab75f5 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCpuArgs.cs @@ -0,0 +1,86 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineCpuArgs : global::Pulumi.ResourceArgs + { + /// + /// The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `Affinity` is only allowed for `root@pam` authenticated user. + /// + [Input("affinity")] + public Input? Affinity { get; set; } + + /// + /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Architecture` is only allowed for `root@pam` authenticated user. + /// + [Input("architecture")] + public Input? Architecture { get; set; } + + /// + /// The number of CPU cores per socket (defaults to `1`). + /// + [Input("cores")] + public Input? Cores { get; set; } + + [Input("flags")] + private InputList? _flags; + + /// + /// Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `Pcid`, `spec-ctrl`, `Ibpb`, `Ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `Pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `Aes`. + /// + public InputList Flags + { + get => _flags ?? (_flags = new InputList()); + set => _flags = value; + } + + /// + /// The number of hotplugged vCPUs (defaults to `0`). + /// + [Input("hotplugged")] + public Input? Hotplugged { get; set; } + + /// + /// Limit of CPU usage (defaults to `0` which means no limit). + /// + [Input("limit")] + public Input? Limit { get; set; } + + /// + /// Enable NUMA (defaults to `False`). + /// + [Input("numa")] + public Input? Numa { get; set; } + + /// + /// The number of CPU sockets (defaults to `1`). + /// + [Input("sockets")] + public Input? Sockets { get; set; } + + /// + /// Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `Kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + /// + [Input("type")] + public Input? Type { get; set; } + + /// + /// CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + /// + [Input("units")] + public Input? Units { get; set; } + + public ClonedVirtualMachineCpuArgs() + { + } + public static new ClonedVirtualMachineCpuArgs Empty => new ClonedVirtualMachineCpuArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCpuGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCpuGetArgs.cs new file mode 100644 index 00000000..c8c264f2 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineCpuGetArgs.cs @@ -0,0 +1,86 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineCpuGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `Affinity` is only allowed for `root@pam` authenticated user. + /// + [Input("affinity")] + public Input? Affinity { get; set; } + + /// + /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Architecture` is only allowed for `root@pam` authenticated user. + /// + [Input("architecture")] + public Input? Architecture { get; set; } + + /// + /// The number of CPU cores per socket (defaults to `1`). + /// + [Input("cores")] + public Input? Cores { get; set; } + + [Input("flags")] + private InputList? _flags; + + /// + /// Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `Pcid`, `spec-ctrl`, `Ibpb`, `Ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `Pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `Aes`. + /// + public InputList Flags + { + get => _flags ?? (_flags = new InputList()); + set => _flags = value; + } + + /// + /// The number of hotplugged vCPUs (defaults to `0`). + /// + [Input("hotplugged")] + public Input? Hotplugged { get; set; } + + /// + /// Limit of CPU usage (defaults to `0` which means no limit). + /// + [Input("limit")] + public Input? Limit { get; set; } + + /// + /// Enable NUMA (defaults to `False`). + /// + [Input("numa")] + public Input? Numa { get; set; } + + /// + /// The number of CPU sockets (defaults to `1`). + /// + [Input("sockets")] + public Input? Sockets { get; set; } + + /// + /// Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `Kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + /// + [Input("type")] + public Input? Type { get; set; } + + /// + /// CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + /// + [Input("units")] + public Input? Units { get; set; } + + public ClonedVirtualMachineCpuGetArgs() + { + } + public static new ClonedVirtualMachineCpuGetArgs Empty => new ClonedVirtualMachineCpuGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDeleteArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDeleteArgs.cs new file mode 100644 index 00000000..6454bec4 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDeleteArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineDeleteArgs : global::Pulumi.ResourceArgs + { + [Input("disks")] + private InputList? _disks; + + /// + /// Disk slots to delete (e.g., scsi2). + /// + public InputList Disks + { + get => _disks ?? (_disks = new InputList()); + set => _disks = value; + } + + [Input("networks")] + private InputList? _networks; + + /// + /// Network slots to delete (e.g., net1). + /// + public InputList Networks + { + get => _networks ?? (_networks = new InputList()); + set => _networks = value; + } + + public ClonedVirtualMachineDeleteArgs() + { + } + public static new ClonedVirtualMachineDeleteArgs Empty => new ClonedVirtualMachineDeleteArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDeleteGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDeleteGetArgs.cs new file mode 100644 index 00000000..1d1b711c --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDeleteGetArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineDeleteGetArgs : global::Pulumi.ResourceArgs + { + [Input("disks")] + private InputList? _disks; + + /// + /// Disk slots to delete (e.g., scsi2). + /// + public InputList Disks + { + get => _disks ?? (_disks = new InputList()); + set => _disks = value; + } + + [Input("networks")] + private InputList? _networks; + + /// + /// Network slots to delete (e.g., net1). + /// + public InputList Networks + { + get => _networks ?? (_networks = new InputList()); + set => _networks = value; + } + + public ClonedVirtualMachineDeleteGetArgs() + { + } + public static new ClonedVirtualMachineDeleteGetArgs Empty => new ClonedVirtualMachineDeleteGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDiskArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDiskArgs.cs new file mode 100644 index 00000000..608d72d9 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDiskArgs.cs @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineDiskArgs : global::Pulumi.ResourceArgs + { + /// + /// AIO mode (io_uring, native, threads). + /// + [Input("aio")] + public Input? Aio { get; set; } + + /// + /// Include disk in backups. + /// + [Input("backup")] + public Input? Backup { get; set; } + + /// + /// Cache mode. + /// + [Input("cache")] + public Input? Cache { get; set; } + + /// + /// Target datastore for new disks when file is not provided. + /// + [Input("datastoreId")] + public Input? DatastoreId { get; set; } + + /// + /// Discard/trim behavior. + /// + [Input("discard")] + public Input? Discard { get; set; } + + /// + /// Existing volume reference (e.g., local-lvm:vm-100-disk-0). + /// + [Input("file")] + public Input? File { get; set; } + + /// + /// Disk format (raw, qcow2, vmdk). + /// + [Input("format")] + public Input? Format { get; set; } + + /// + /// Import source volume/file id. + /// + [Input("importFrom")] + public Input? ImportFrom { get; set; } + + /// + /// Use IO thread. + /// + [Input("iothread")] + public Input? Iothread { get; set; } + + /// + /// Disk media (e.g., disk, cdrom). + /// + [Input("media")] + public Input? Media { get; set; } + + /// + /// Consider disk for replication. + /// + [Input("replicate")] + public Input? Replicate { get; set; } + + /// + /// Disk serial number. + /// + [Input("serial")] + public Input? Serial { get; set; } + + /// + /// Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `SizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + /// + [Input("sizeGb")] + public Input? SizeGb { get; set; } + + /// + /// Mark disk as SSD. + /// + [Input("ssd")] + public Input? Ssd { get; set; } + + public ClonedVirtualMachineDiskArgs() + { + } + public static new ClonedVirtualMachineDiskArgs Empty => new ClonedVirtualMachineDiskArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDiskGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDiskGetArgs.cs new file mode 100644 index 00000000..66f04cc5 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineDiskGetArgs.cs @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineDiskGetArgs : global::Pulumi.ResourceArgs + { + /// + /// AIO mode (io_uring, native, threads). + /// + [Input("aio")] + public Input? Aio { get; set; } + + /// + /// Include disk in backups. + /// + [Input("backup")] + public Input? Backup { get; set; } + + /// + /// Cache mode. + /// + [Input("cache")] + public Input? Cache { get; set; } + + /// + /// Target datastore for new disks when file is not provided. + /// + [Input("datastoreId")] + public Input? DatastoreId { get; set; } + + /// + /// Discard/trim behavior. + /// + [Input("discard")] + public Input? Discard { get; set; } + + /// + /// Existing volume reference (e.g., local-lvm:vm-100-disk-0). + /// + [Input("file")] + public Input? File { get; set; } + + /// + /// Disk format (raw, qcow2, vmdk). + /// + [Input("format")] + public Input? Format { get; set; } + + /// + /// Import source volume/file id. + /// + [Input("importFrom")] + public Input? ImportFrom { get; set; } + + /// + /// Use IO thread. + /// + [Input("iothread")] + public Input? Iothread { get; set; } + + /// + /// Disk media (e.g., disk, cdrom). + /// + [Input("media")] + public Input? Media { get; set; } + + /// + /// Consider disk for replication. + /// + [Input("replicate")] + public Input? Replicate { get; set; } + + /// + /// Disk serial number. + /// + [Input("serial")] + public Input? Serial { get; set; } + + /// + /// Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `SizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + /// + [Input("sizeGb")] + public Input? SizeGb { get; set; } + + /// + /// Mark disk as SSD. + /// + [Input("ssd")] + public Input? Ssd { get; set; } + + public ClonedVirtualMachineDiskGetArgs() + { + } + public static new ClonedVirtualMachineDiskGetArgs Empty => new ClonedVirtualMachineDiskGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineMemoryArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineMemoryArgs.cs new file mode 100644 index 00000000..327abdb0 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineMemoryArgs.cs @@ -0,0 +1,55 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineMemoryArgs : global::Pulumi.ResourceArgs + { + /// + /// Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + /// + [Input("balloon")] + public Input? Balloon { get; set; } + + /// + /// Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + /// + /// **Options:** + /// - `2` - Use 2 MiB hugepages + /// - `1024` - Use 1 GiB hugepages + /// - `Any` - Use any available hugepage size + /// + [Input("hugepages")] + public Input? Hugepages { get; set; } + + /// + /// Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `True` keeps them allocated for faster VM startup (defaults to `False`). + /// + [Input("keepHugepages")] + public Input? KeepHugepages { get; set; } + + /// + /// CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + /// + [Input("shares")] + public Input? Shares { get; set; } + + /// + /// Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `Balloon` and `Size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + /// + [Input("size")] + public Input? Size { get; set; } + + public ClonedVirtualMachineMemoryArgs() + { + } + public static new ClonedVirtualMachineMemoryArgs Empty => new ClonedVirtualMachineMemoryArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineMemoryGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineMemoryGetArgs.cs new file mode 100644 index 00000000..7a0a0e94 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineMemoryGetArgs.cs @@ -0,0 +1,55 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineMemoryGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + /// + [Input("balloon")] + public Input? Balloon { get; set; } + + /// + /// Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + /// + /// **Options:** + /// - `2` - Use 2 MiB hugepages + /// - `1024` - Use 1 GiB hugepages + /// - `Any` - Use any available hugepage size + /// + [Input("hugepages")] + public Input? Hugepages { get; set; } + + /// + /// Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `True` keeps them allocated for faster VM startup (defaults to `False`). + /// + [Input("keepHugepages")] + public Input? KeepHugepages { get; set; } + + /// + /// CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + /// + [Input("shares")] + public Input? Shares { get; set; } + + /// + /// Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `Balloon` and `Size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + /// + [Input("size")] + public Input? Size { get; set; } + + public ClonedVirtualMachineMemoryGetArgs() + { + } + public static new ClonedVirtualMachineMemoryGetArgs Empty => new ClonedVirtualMachineMemoryGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineNetworkArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineNetworkArgs.cs new file mode 100644 index 00000000..29571dbb --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineNetworkArgs.cs @@ -0,0 +1,86 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineNetworkArgs : global::Pulumi.ResourceArgs + { + /// + /// Bridge name. + /// + [Input("bridge")] + public Input? Bridge { get; set; } + + /// + /// Enable firewall on this interface. + /// + [Input("firewall")] + public Input? Firewall { get; set; } + + /// + /// Keep link down. + /// + [Input("linkDown")] + public Input? LinkDown { get; set; } + + /// + /// MAC address (computed if omitted). + /// + [Input("macAddress")] + public Input? MacAddress { get; set; } + + /// + /// NIC model (e.g., virtio, e1000). + /// + [Input("model")] + public Input? Model { get; set; } + + /// + /// Interface MTU. + /// + [Input("mtu")] + public Input? Mtu { get; set; } + + /// + /// Number of multiqueue NIC queues. + /// + [Input("queues")] + public Input? Queues { get; set; } + + /// + /// Rate limit (MB/s). + /// + [Input("rateLimit")] + public Input? RateLimit { get; set; } + + /// + /// VLAN tag. + /// + [Input("tag")] + public Input? Tag { get; set; } + + [Input("trunks")] + private InputList? _trunks; + + /// + /// Trunk VLAN IDs. + /// + public InputList Trunks + { + get => _trunks ?? (_trunks = new InputList()); + set => _trunks = value; + } + + public ClonedVirtualMachineNetworkArgs() + { + } + public static new ClonedVirtualMachineNetworkArgs Empty => new ClonedVirtualMachineNetworkArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineNetworkGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineNetworkGetArgs.cs new file mode 100644 index 00000000..fed1289c --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineNetworkGetArgs.cs @@ -0,0 +1,86 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineNetworkGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Bridge name. + /// + [Input("bridge")] + public Input? Bridge { get; set; } + + /// + /// Enable firewall on this interface. + /// + [Input("firewall")] + public Input? Firewall { get; set; } + + /// + /// Keep link down. + /// + [Input("linkDown")] + public Input? LinkDown { get; set; } + + /// + /// MAC address (computed if omitted). + /// + [Input("macAddress")] + public Input? MacAddress { get; set; } + + /// + /// NIC model (e.g., virtio, e1000). + /// + [Input("model")] + public Input? Model { get; set; } + + /// + /// Interface MTU. + /// + [Input("mtu")] + public Input? Mtu { get; set; } + + /// + /// Number of multiqueue NIC queues. + /// + [Input("queues")] + public Input? Queues { get; set; } + + /// + /// Rate limit (MB/s). + /// + [Input("rateLimit")] + public Input? RateLimit { get; set; } + + /// + /// VLAN tag. + /// + [Input("tag")] + public Input? Tag { get; set; } + + [Input("trunks")] + private InputList? _trunks; + + /// + /// Trunk VLAN IDs. + /// + public InputList Trunks + { + get => _trunks ?? (_trunks = new InputList()); + set => _trunks = value; + } + + public ClonedVirtualMachineNetworkGetArgs() + { + } + public static new ClonedVirtualMachineNetworkGetArgs Empty => new ClonedVirtualMachineNetworkGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineRngArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineRngArgs.cs new file mode 100644 index 00000000..2a41a3da --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineRngArgs.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineRngArgs : global::Pulumi.ResourceArgs + { + /// + /// Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + /// + [Input("maxBytes")] + public Input? MaxBytes { get; set; } + + /// + /// Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + /// + [Input("period")] + public Input? Period { get; set; } + + /// + /// The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + /// + [Input("source")] + public Input? Source { get; set; } + + public ClonedVirtualMachineRngArgs() + { + } + public static new ClonedVirtualMachineRngArgs Empty => new ClonedVirtualMachineRngArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineRngGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineRngGetArgs.cs new file mode 100644 index 00000000..de3b5fc4 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineRngGetArgs.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineRngGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + /// + [Input("maxBytes")] + public Input? MaxBytes { get; set; } + + /// + /// Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + /// + [Input("period")] + public Input? Period { get; set; } + + /// + /// The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + /// + [Input("source")] + public Input? Source { get; set; } + + public ClonedVirtualMachineRngGetArgs() + { + } + public static new ClonedVirtualMachineRngGetArgs Empty => new ClonedVirtualMachineRngGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineTimeoutsArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineTimeoutsArgs.cs new file mode 100644 index 00000000..51c62b6e --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineTimeoutsArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineTimeoutsArgs : global::Pulumi.ResourceArgs + { + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + /// + [Input("create")] + public Input? Create { get; set; } + + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + /// + [Input("delete")] + public Input? Delete { get; set; } + + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + /// + [Input("read")] + public Input? Read { get; set; } + + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + /// + [Input("update")] + public Input? Update { get; set; } + + public ClonedVirtualMachineTimeoutsArgs() + { + } + public static new ClonedVirtualMachineTimeoutsArgs Empty => new ClonedVirtualMachineTimeoutsArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineTimeoutsGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineTimeoutsGetArgs.cs new file mode 100644 index 00000000..bb1e0c0a --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineTimeoutsGetArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineTimeoutsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + /// + [Input("create")] + public Input? Create { get; set; } + + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + /// + [Input("delete")] + public Input? Delete { get; set; } + + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + /// + [Input("read")] + public Input? Read { get; set; } + + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + /// + [Input("update")] + public Input? Update { get; set; } + + public ClonedVirtualMachineTimeoutsGetArgs() + { + } + public static new ClonedVirtualMachineTimeoutsGetArgs Empty => new ClonedVirtualMachineTimeoutsGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineVgaArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineVgaArgs.cs new file mode 100644 index 00000000..c839b780 --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineVgaArgs.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineVgaArgs : global::Pulumi.ResourceArgs + { + /// + /// Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `Vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + /// + [Input("clipboard")] + public Input? Clipboard { get; set; } + + /// + /// The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + /// + [Input("memory")] + public Input? Memory { get; set; } + + /// + /// The VGA type (defaults to `Std`). + /// + [Input("type")] + public Input? Type { get; set; } + + public ClonedVirtualMachineVgaArgs() + { + } + public static new ClonedVirtualMachineVgaArgs Empty => new ClonedVirtualMachineVgaArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineVgaGetArgs.cs b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineVgaGetArgs.cs new file mode 100644 index 00000000..0445383f --- /dev/null +++ b/sdk/dotnet/Vm/Inputs/ClonedVirtualMachineVgaGetArgs.cs @@ -0,0 +1,38 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Inputs +{ + + public sealed class ClonedVirtualMachineVgaGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `Vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + /// + [Input("clipboard")] + public Input? Clipboard { get; set; } + + /// + /// The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + /// + [Input("memory")] + public Input? Memory { get; set; } + + /// + /// The VGA type (defaults to `Std`). + /// + [Input("type")] + public Input? Type { get; set; } + + public ClonedVirtualMachineVgaGetArgs() + { + } + public static new ClonedVirtualMachineVgaGetArgs Empty => new ClonedVirtualMachineVgaGetArgs(); + } +} diff --git a/sdk/dotnet/Vm/Inputs/VirtualMachine2CloneArgs.cs b/sdk/dotnet/Vm/Inputs/VirtualMachine2CloneArgs.cs deleted file mode 100644 index 7b25db8d..00000000 --- a/sdk/dotnet/Vm/Inputs/VirtualMachine2CloneArgs.cs +++ /dev/null @@ -1,32 +0,0 @@ -// *** WARNING: this file was generated by pulumi-language-dotnet. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.ProxmoxVE.VM.Inputs -{ - - public sealed class VirtualMachine2CloneArgs : global::Pulumi.ResourceArgs - { - /// - /// The ID of the VM to clone. - /// - [Input("id", required: true)] - public Input Id { get; set; } = null!; - - /// - /// The number of retries to perform when cloning the VM (default: 3). - /// - [Input("retries")] - public Input? Retries { get; set; } - - public VirtualMachine2CloneArgs() - { - } - public static new VirtualMachine2CloneArgs Empty => new VirtualMachine2CloneArgs(); - } -} diff --git a/sdk/dotnet/Vm/Inputs/VirtualMachine2CloneGetArgs.cs b/sdk/dotnet/Vm/Inputs/VirtualMachine2CloneGetArgs.cs deleted file mode 100644 index 81bc2a81..00000000 --- a/sdk/dotnet/Vm/Inputs/VirtualMachine2CloneGetArgs.cs +++ /dev/null @@ -1,32 +0,0 @@ -// *** WARNING: this file was generated by pulumi-language-dotnet. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Threading.Tasks; -using Pulumi.Serialization; - -namespace Pulumi.ProxmoxVE.VM.Inputs -{ - - public sealed class VirtualMachine2CloneGetArgs : global::Pulumi.ResourceArgs - { - /// - /// The ID of the VM to clone. - /// - [Input("id", required: true)] - public Input Id { get; set; } = null!; - - /// - /// The number of retries to perform when cloning the VM (default: 3). - /// - [Input("retries")] - public Input? Retries { get; set; } - - public VirtualMachine2CloneGetArgs() - { - } - public static new VirtualMachine2CloneGetArgs Empty => new VirtualMachine2CloneGetArgs(); - } -} diff --git a/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuArgs.cs b/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuArgs.cs index 8250a728..602bb256 100644 --- a/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuArgs.cs +++ b/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuArgs.cs @@ -19,7 +19,7 @@ public sealed class VirtualMachine2CpuArgs : global::Pulumi.ResourceArgs public Input? Affinity { get; set; } /// - /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Affinity` is only allowed for `root@pam` authenticated user. + /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Architecture` is only allowed for `root@pam` authenticated user. /// [Input("architecture")] public Input? Architecture { get; set; } diff --git a/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuGetArgs.cs b/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuGetArgs.cs index 2af034c2..05aefc2f 100644 --- a/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuGetArgs.cs +++ b/sdk/dotnet/Vm/Inputs/VirtualMachine2CpuGetArgs.cs @@ -19,7 +19,7 @@ public sealed class VirtualMachine2CpuGetArgs : global::Pulumi.ResourceArgs public Input? Affinity { get; set; } /// - /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Affinity` is only allowed for `root@pam` authenticated user. + /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Architecture` is only allowed for `root@pam` authenticated user. /// [Input("architecture")] public Input? Architecture { get; set; } diff --git a/sdk/dotnet/Vm/Inputs/VirtualMachineDiskArgs.cs b/sdk/dotnet/Vm/Inputs/VirtualMachineDiskArgs.cs index 9872372b..49ef8b9d 100644 --- a/sdk/dotnet/Vm/Inputs/VirtualMachineDiskArgs.cs +++ b/sdk/dotnet/Vm/Inputs/VirtualMachineDiskArgs.cs @@ -54,15 +54,19 @@ public sealed class VirtualMachineDiskArgs : global::Pulumi.ResourceArgs /// /// The file ID for a disk image when importing a disk into VM. The ID format is /// `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - /// `proxmoxve.Download.File` resource. *Deprecated*, use `ImportFrom` instead. + /// `proxmoxve.Download.File` resource. Prefer `ImportFrom` for uncompressed images. + /// Use `FileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + /// with `ContentType = "iso"` and `DecompressionAlgorithm` set. See the + /// Create a VM from a Cloud Image guide for examples. /// [Input("fileId")] public Input? FileId { get; set; } /// - /// The file ID for a disk image to import into VM. The image must be of `Import` content type. - /// The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - /// a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + /// The file ID for a disk image to import into VM. The image must be of `Import` content type + /// (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + /// Can be also taken from `proxmoxve.Download.File` resource. Note: compressed images downloaded with + /// `DecompressionAlgorithm` cannot use `ImportFrom`; use `FileId` instead. /// [Input("importFrom")] public Input? ImportFrom { get; set; } diff --git a/sdk/dotnet/Vm/Inputs/VirtualMachineDiskGetArgs.cs b/sdk/dotnet/Vm/Inputs/VirtualMachineDiskGetArgs.cs index 746b809d..ef7c2f04 100644 --- a/sdk/dotnet/Vm/Inputs/VirtualMachineDiskGetArgs.cs +++ b/sdk/dotnet/Vm/Inputs/VirtualMachineDiskGetArgs.cs @@ -54,15 +54,19 @@ public sealed class VirtualMachineDiskGetArgs : global::Pulumi.ResourceArgs /// /// The file ID for a disk image when importing a disk into VM. The ID format is /// `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - /// `proxmoxve.Download.File` resource. *Deprecated*, use `ImportFrom` instead. + /// `proxmoxve.Download.File` resource. Prefer `ImportFrom` for uncompressed images. + /// Use `FileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + /// with `ContentType = "iso"` and `DecompressionAlgorithm` set. See the + /// Create a VM from a Cloud Image guide for examples. /// [Input("fileId")] public Input? FileId { get; set; } /// - /// The file ID for a disk image to import into VM. The image must be of `Import` content type. - /// The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - /// a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + /// The file ID for a disk image to import into VM. The image must be of `Import` content type + /// (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + /// Can be also taken from `proxmoxve.Download.File` resource. Note: compressed images downloaded with + /// `DecompressionAlgorithm` cannot use `ImportFrom`; use `FileId` instead. /// [Input("importFrom")] public Input? ImportFrom { get; set; } diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineCdrom.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineCdrom.cs new file mode 100644 index 00000000..94e43670 --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineCdrom.cs @@ -0,0 +1,27 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineCdrom + { + /// + /// The file ID of the CD-ROM, or `cdrom|none`. Defaults to `None` to leave the CD-ROM empty. Use `Cdrom` to connect to the physical drive. + /// + public readonly string? FileId; + + [OutputConstructor] + private ClonedVirtualMachineCdrom(string? fileId) + { + FileId = fileId; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineClone.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineClone.cs new file mode 100644 index 00000000..b69fc36c --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineClone.cs @@ -0,0 +1,84 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineClone + { + /// + /// Clone bandwidth limit in MB/s. + /// + public readonly int? BandwidthLimit; + /// + /// Perform a full clone (true) or linked clone (false). + /// + public readonly bool? Full; + /// + /// Pool to assign the cloned VM to. + /// + public readonly string? PoolId; + /// + /// Number of retries for clone operations. + /// + public readonly int? Retries; + /// + /// Snapshot name to clone from. + /// + public readonly string? SnapshotName; + /// + /// Source node of the VM/template. Defaults to target node if unset. + /// + public readonly string? SourceNodeName; + /// + /// Source VM/template ID to clone from. + /// + public readonly int SourceVmId; + /// + /// Target datastore for cloned disks. + /// + public readonly string? TargetDatastore; + /// + /// Target disk format for clone (e.g., raw, qcow2). + /// + public readonly string? TargetFormat; + + [OutputConstructor] + private ClonedVirtualMachineClone( + int? bandwidthLimit, + + bool? full, + + string? poolId, + + int? retries, + + string? snapshotName, + + string? sourceNodeName, + + int sourceVmId, + + string? targetDatastore, + + string? targetFormat) + { + BandwidthLimit = bandwidthLimit; + Full = full; + PoolId = poolId; + Retries = retries; + SnapshotName = snapshotName; + SourceNodeName = sourceNodeName; + SourceVmId = sourceVmId; + TargetDatastore = targetDatastore; + TargetFormat = targetFormat; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineCpu.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineCpu.cs new file mode 100644 index 00000000..cb18367d --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineCpu.cs @@ -0,0 +1,91 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineCpu + { + /// + /// The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `Affinity` is only allowed for `root@pam` authenticated user. + /// + public readonly string? Affinity; + /// + /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Architecture` is only allowed for `root@pam` authenticated user. + /// + public readonly string? Architecture; + /// + /// The number of CPU cores per socket (defaults to `1`). + /// + public readonly int? Cores; + /// + /// Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `Pcid`, `spec-ctrl`, `Ibpb`, `Ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `Pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `Aes`. + /// + public readonly ImmutableArray Flags; + /// + /// The number of hotplugged vCPUs (defaults to `0`). + /// + public readonly int? Hotplugged; + /// + /// Limit of CPU usage (defaults to `0` which means no limit). + /// + public readonly int? Limit; + /// + /// Enable NUMA (defaults to `False`). + /// + public readonly bool? Numa; + /// + /// The number of CPU sockets (defaults to `1`). + /// + public readonly int? Sockets; + /// + /// Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `Kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + /// + public readonly string? Type; + /// + /// CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + /// + public readonly int? Units; + + [OutputConstructor] + private ClonedVirtualMachineCpu( + string? affinity, + + string? architecture, + + int? cores, + + ImmutableArray flags, + + int? hotplugged, + + int? limit, + + bool? numa, + + int? sockets, + + string? type, + + int? units) + { + Affinity = affinity; + Architecture = architecture; + Cores = cores; + Flags = flags; + Hotplugged = hotplugged; + Limit = limit; + Numa = numa; + Sockets = sockets; + Type = type; + Units = units; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/VirtualMachine2Clone.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineDelete.cs similarity index 53% rename from sdk/dotnet/Vm/Outputs/VirtualMachine2Clone.cs rename to sdk/dotnet/Vm/Outputs/ClonedVirtualMachineDelete.cs index 523ca58f..792f61e0 100644 --- a/sdk/dotnet/Vm/Outputs/VirtualMachine2Clone.cs +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineDelete.cs @@ -11,25 +11,25 @@ namespace Pulumi.ProxmoxVE.VM.Outputs { [OutputType] - public sealed class VirtualMachine2Clone + public sealed class ClonedVirtualMachineDelete { /// - /// The ID of the VM to clone. + /// Disk slots to delete (e.g., scsi2). /// - public readonly int Id; + public readonly ImmutableArray Disks; /// - /// The number of retries to perform when cloning the VM (default: 3). + /// Network slots to delete (e.g., net1). /// - public readonly int? Retries; + public readonly ImmutableArray Networks; [OutputConstructor] - private VirtualMachine2Clone( - int id, + private ClonedVirtualMachineDelete( + ImmutableArray disks, - int? retries) + ImmutableArray networks) { - Id = id; - Retries = retries; + Disks = disks; + Networks = networks; } } } diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineDisk.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineDisk.cs new file mode 100644 index 00000000..3fbe1340 --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineDisk.cs @@ -0,0 +1,119 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineDisk + { + /// + /// AIO mode (io_uring, native, threads). + /// + public readonly string? Aio; + /// + /// Include disk in backups. + /// + public readonly bool? Backup; + /// + /// Cache mode. + /// + public readonly string? Cache; + /// + /// Target datastore for new disks when file is not provided. + /// + public readonly string? DatastoreId; + /// + /// Discard/trim behavior. + /// + public readonly string? Discard; + /// + /// Existing volume reference (e.g., local-lvm:vm-100-disk-0). + /// + public readonly string? File; + /// + /// Disk format (raw, qcow2, vmdk). + /// + public readonly string? Format; + /// + /// Import source volume/file id. + /// + public readonly string? ImportFrom; + /// + /// Use IO thread. + /// + public readonly bool? Iothread; + /// + /// Disk media (e.g., disk, cdrom). + /// + public readonly string? Media; + /// + /// Consider disk for replication. + /// + public readonly bool? Replicate; + /// + /// Disk serial number. + /// + public readonly string? Serial; + /// + /// Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `SizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + /// + public readonly int? SizeGb; + /// + /// Mark disk as SSD. + /// + public readonly bool? Ssd; + + [OutputConstructor] + private ClonedVirtualMachineDisk( + string? aio, + + bool? backup, + + string? cache, + + string? datastoreId, + + string? discard, + + string? file, + + string? format, + + string? importFrom, + + bool? iothread, + + string? media, + + bool? replicate, + + string? serial, + + int? sizeGb, + + bool? ssd) + { + Aio = aio; + Backup = backup; + Cache = cache; + DatastoreId = datastoreId; + Discard = discard; + File = file; + Format = format; + ImportFrom = importFrom; + Iothread = iothread; + Media = media; + Replicate = replicate; + Serial = serial; + SizeGb = sizeGb; + Ssd = ssd; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineMemory.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineMemory.cs new file mode 100644 index 00000000..5b2c9678 --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineMemory.cs @@ -0,0 +1,61 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineMemory + { + /// + /// Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + /// + public readonly int? Balloon; + /// + /// Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + /// + /// **Options:** + /// - `2` - Use 2 MiB hugepages + /// - `1024` - Use 1 GiB hugepages + /// - `Any` - Use any available hugepage size + /// + public readonly string? Hugepages; + /// + /// Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `True` keeps them allocated for faster VM startup (defaults to `False`). + /// + public readonly bool? KeepHugepages; + /// + /// CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + /// + public readonly int? Shares; + /// + /// Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `Balloon` and `Size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + /// + public readonly int? Size; + + [OutputConstructor] + private ClonedVirtualMachineMemory( + int? balloon, + + string? hugepages, + + bool? keepHugepages, + + int? shares, + + int? size) + { + Balloon = balloon; + Hugepages = hugepages; + KeepHugepages = keepHugepages; + Shares = shares; + Size = size; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineNetwork.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineNetwork.cs new file mode 100644 index 00000000..8bd8588b --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineNetwork.cs @@ -0,0 +1,91 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineNetwork + { + /// + /// Bridge name. + /// + public readonly string? Bridge; + /// + /// Enable firewall on this interface. + /// + public readonly bool? Firewall; + /// + /// Keep link down. + /// + public readonly bool? LinkDown; + /// + /// MAC address (computed if omitted). + /// + public readonly string? MacAddress; + /// + /// NIC model (e.g., virtio, e1000). + /// + public readonly string? Model; + /// + /// Interface MTU. + /// + public readonly int? Mtu; + /// + /// Number of multiqueue NIC queues. + /// + public readonly int? Queues; + /// + /// Rate limit (MB/s). + /// + public readonly double? RateLimit; + /// + /// VLAN tag. + /// + public readonly int? Tag; + /// + /// Trunk VLAN IDs. + /// + public readonly ImmutableArray Trunks; + + [OutputConstructor] + private ClonedVirtualMachineNetwork( + string? bridge, + + bool? firewall, + + bool? linkDown, + + string? macAddress, + + string? model, + + int? mtu, + + int? queues, + + double? rateLimit, + + int? tag, + + ImmutableArray trunks) + { + Bridge = bridge; + Firewall = firewall; + LinkDown = linkDown; + MacAddress = macAddress; + Model = model; + Mtu = mtu; + Queues = queues; + RateLimit = rateLimit; + Tag = tag; + Trunks = trunks; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineRng.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineRng.cs new file mode 100644 index 00000000..5d121025 --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineRng.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineRng + { + /// + /// Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + /// + public readonly int? MaxBytes; + /// + /// Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + /// + public readonly int? Period; + /// + /// The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + /// + public readonly string? Source; + + [OutputConstructor] + private ClonedVirtualMachineRng( + int? maxBytes, + + int? period, + + string? source) + { + MaxBytes = maxBytes; + Period = period; + Source = source; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineTimeouts.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineTimeouts.cs new file mode 100644 index 00000000..8c295f47 --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineTimeouts.cs @@ -0,0 +1,49 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineTimeouts + { + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + /// + public readonly string? Create; + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + /// + public readonly string? Delete; + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + /// + public readonly string? Read; + /// + /// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + /// + public readonly string? Update; + + [OutputConstructor] + private ClonedVirtualMachineTimeouts( + string? create, + + string? delete, + + string? read, + + string? update) + { + Create = create; + Delete = delete; + Read = read; + Update = update; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineVga.cs b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineVga.cs new file mode 100644 index 00000000..d777c57f --- /dev/null +++ b/sdk/dotnet/Vm/Outputs/ClonedVirtualMachineVga.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by pulumi-language-dotnet. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.ProxmoxVE.VM.Outputs +{ + + [OutputType] + public sealed class ClonedVirtualMachineVga + { + /// + /// Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `Vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + /// + public readonly string? Clipboard; + /// + /// The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + /// + public readonly int? Memory; + /// + /// The VGA type (defaults to `Std`). + /// + public readonly string? Type; + + [OutputConstructor] + private ClonedVirtualMachineVga( + string? clipboard, + + int? memory, + + string? type) + { + Clipboard = clipboard; + Memory = memory; + Type = type; + } + } +} diff --git a/sdk/dotnet/Vm/Outputs/VirtualMachine2Cpu.cs b/sdk/dotnet/Vm/Outputs/VirtualMachine2Cpu.cs index 77488aeb..e1003a4f 100644 --- a/sdk/dotnet/Vm/Outputs/VirtualMachine2Cpu.cs +++ b/sdk/dotnet/Vm/Outputs/VirtualMachine2Cpu.cs @@ -18,7 +18,7 @@ public sealed class VirtualMachine2Cpu /// public readonly string? Affinity; /// - /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Affinity` is only allowed for `root@pam` authenticated user. + /// The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting `Architecture` is only allowed for `root@pam` authenticated user. /// public readonly string? Architecture; /// diff --git a/sdk/dotnet/Vm/Outputs/VirtualMachineDisk.cs b/sdk/dotnet/Vm/Outputs/VirtualMachineDisk.cs index de111da9..408863d5 100644 --- a/sdk/dotnet/Vm/Outputs/VirtualMachineDisk.cs +++ b/sdk/dotnet/Vm/Outputs/VirtualMachineDisk.cs @@ -43,13 +43,17 @@ public sealed class VirtualMachineDisk /// /// The file ID for a disk image when importing a disk into VM. The ID format is /// `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - /// `proxmoxve.Download.File` resource. *Deprecated*, use `ImportFrom` instead. + /// `proxmoxve.Download.File` resource. Prefer `ImportFrom` for uncompressed images. + /// Use `FileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + /// with `ContentType = "iso"` and `DecompressionAlgorithm` set. See the + /// Create a VM from a Cloud Image guide for examples. /// public readonly string? FileId; /// - /// The file ID for a disk image to import into VM. The image must be of `Import` content type. - /// The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - /// a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + /// The file ID for a disk image to import into VM. The image must be of `Import` content type + /// (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + /// Can be also taken from `proxmoxve.Download.File` resource. Note: compressed images downloaded with + /// `DecompressionAlgorithm` cannot use `ImportFrom`; use `FileId` instead. /// public readonly string? ImportFrom; /// diff --git a/sdk/dotnet/Vm/VirtualMachine.cs b/sdk/dotnet/Vm/VirtualMachine.cs index bb659414..f6ced5a3 100644 --- a/sdk/dotnet/Vm/VirtualMachine.cs +++ b/sdk/dotnet/Vm/VirtualMachine.cs @@ -114,6 +114,14 @@ public partial class VirtualMachine : global::Pulumi.CustomResource [Output("hostpcis")] public Output> Hostpcis { get; private set; } = null!; + /// + /// Selectively enable hotplug features. Supported values + /// are `Cpu`, `Disk`, `Memory`, `Network`, and `Usb`. Use `0` to disable all, + /// or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + /// + [Output("hotplug")] + public Output Hotplug { get; private set; } = null!; + /// /// The cloud-init configuration. /// @@ -370,7 +378,10 @@ public partial class VirtualMachine : global::Pulumi.CustomResource public Output TimeoutStopVm { get; private set; } = null!; /// - /// The TPM state device. + /// The TPM state device. The VM must be stopped before + /// adding, removing, or moving a TPM state device; the provider automatically + /// handles the shutdown/start cycle. Changing `Version` requires recreating the + /// VM because Proxmox only supports setting the TPM version at creation time. /// [Output("tpmState")] public Output TpmState { get; private set; } = null!; @@ -561,6 +572,14 @@ public InputList Hostpcis set => _hostpcis = value; } + /// + /// Selectively enable hotplug features. Supported values + /// are `Cpu`, `Disk`, `Memory`, `Network`, and `Usb`. Use `0` to disable all, + /// or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + /// + [Input("hotplug")] + public Input? Hotplug { get; set; } + /// /// The cloud-init configuration. /// @@ -832,7 +851,10 @@ public InputList Tags public Input? TimeoutStopVm { get; set; } /// - /// The TPM state device. + /// The TPM state device. The VM must be stopped before + /// adding, removing, or moving a TPM state device; the provider automatically + /// handles the shutdown/start cycle. Changing `Version` requires recreating the + /// VM because Proxmox only supports setting the TPM version at creation time. /// [Input("tpmState")] public Input? TpmState { get; set; } @@ -996,6 +1018,14 @@ public InputList Hostpcis set => _hostpcis = value; } + /// + /// Selectively enable hotplug features. Supported values + /// are `Cpu`, `Disk`, `Memory`, `Network`, and `Usb`. Use `0` to disable all, + /// or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + /// + [Input("hotplug")] + public Input? Hotplug { get; set; } + /// /// The cloud-init configuration. /// @@ -1306,7 +1336,10 @@ public InputList Tags public Input? TimeoutStopVm { get; set; } /// - /// The TPM state device. + /// The TPM state device. The VM must be stopped before + /// adding, removing, or moving a TPM state device; the provider automatically + /// handles the shutdown/start cycle. Changing `Version` requires recreating the + /// VM because Proxmox only supports setting the TPM version at creation time. /// [Input("tpmState")] public Input? TpmState { get; set; } diff --git a/sdk/dotnet/Vm/VirtualMachine2.cs b/sdk/dotnet/Vm/VirtualMachine2.cs index 178f5b40..bf61b131 100644 --- a/sdk/dotnet/Vm/VirtualMachine2.cs +++ b/sdk/dotnet/Vm/VirtualMachine2.cs @@ -29,12 +29,6 @@ public partial class VirtualMachine2 : global::Pulumi.CustomResource [Output("cdrom")] public Output> Cdrom { get; private set; } = null!; - /// - /// The cloning configuration. - /// - [Output("clone")] - public Output Clone { get; private set; } = null!; - /// /// The CPU configuration. /// @@ -72,7 +66,7 @@ public partial class VirtualMachine2 : global::Pulumi.CustomResource public Output PurgeOnDestroy { get; private set; } = null!; /// - /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. /// [Output("rng")] public Output Rng { get; private set; } = null!; @@ -163,12 +157,6 @@ public InputMap Cdrom set => _cdrom = value; } - /// - /// The cloning configuration. - /// - [Input("clone")] - public Input? Clone { get; set; } - /// /// The CPU configuration. /// @@ -206,7 +194,7 @@ public InputMap Cdrom public Input? PurgeOnDestroy { get; set; } /// - /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. /// [Input("rng")] public Input? Rng { get; set; } @@ -264,12 +252,6 @@ public InputMap Cdrom set => _cdrom = value; } - /// - /// The cloning configuration. - /// - [Input("clone")] - public Input? Clone { get; set; } - /// /// The CPU configuration. /// @@ -307,7 +289,7 @@ public InputMap Cdrom public Input? PurgeOnDestroy { get; set; } /// - /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + /// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. /// [Input("rng")] public Input? Rng { get; set; } diff --git a/sdk/go.mod b/sdk/go.mod index 40aefc9f..f6b28370 100644 --- a/sdk/go.mod +++ b/sdk/go.mod @@ -10,7 +10,6 @@ require ( require ( dario.cat/mergo v1.0.0 // indirect - github.com/BurntSushi/toml v1.4.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect @@ -64,7 +63,6 @@ require ( github.com/pulumi/esc v0.17.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/skeema/knownhosts v1.3.0 // indirect diff --git a/sdk/go.sum b/sdk/go.sum index a6993701..a3194aed 100644 --- a/sdk/go.sum +++ b/sdk/go.sum @@ -1,7 +1,5 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= -github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= @@ -160,18 +158,6 @@ github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435 github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= github.com/pulumi/esc v0.17.0 h1:oaVOIyFTENlYDuqc3pW75lQT9jb2cd6ie/4/Twxn66w= github.com/pulumi/esc v0.17.0/go.mod h1:XnSxlt5NkmuAj304l/gK4pRErFbtqq6XpfX1tYT9Jbc= -github.com/pulumi/pulumi/sdk/v3 v3.197.0 h1:ZNKda7CQpfVbRS2r/7U5F+s4iejfL9HK39bXl5CCTpY= -github.com/pulumi/pulumi/sdk/v3 v3.197.0/go.mod h1:aV0+c5xpSYccWKmOjTZS9liYCqh7+peu3cQgSXu7CJw= -github.com/pulumi/pulumi/sdk/v3 v3.207.0 h1:D6EpTYN65Cmt/Qx50GzDgpK9g3TXS3Tq6mnsx7C7Li8= -github.com/pulumi/pulumi/sdk/v3 v3.207.0/go.mod h1:UsBMdaUQ+WoKoQtF2PYbQIbo8ZRJuAo1axkyit9IQVE= -github.com/pulumi/pulumi/sdk/v3 v3.208.0 h1:AUBoh7zw67NZVo1IkapOog1WBMz46DXco/7YsKBNK1s= -github.com/pulumi/pulumi/sdk/v3 v3.208.0/go.mod h1:UsBMdaUQ+WoKoQtF2PYbQIbo8ZRJuAo1axkyit9IQVE= -github.com/pulumi/pulumi/sdk/v3 v3.210.0 h1:QMNdfQfB7jCa/ZoY8aIfwOwApuvhnOoIH8s4umNvR3U= -github.com/pulumi/pulumi/sdk/v3 v3.210.0/go.mod h1:0qnUzUV5ypAcdoPNOX426wV4ePMnkDvGlPBZqlizHmU= -github.com/pulumi/pulumi/sdk/v3 v3.211.0 h1:l1aPBoCqz44TFy7w059/bdL+cVlmh5OSsAGPuO3DnHI= -github.com/pulumi/pulumi/sdk/v3 v3.211.0/go.mod h1:FSp694SjBYWvFq9FvXMNGh/0REa/DmMCv92CYCOIhN4= -github.com/pulumi/pulumi/sdk/v3 v3.212.0 h1:YQKFamkd+3sqcbFUi+sq50DejdymayYbqaz+OQnSvug= -github.com/pulumi/pulumi/sdk/v3 v3.212.0/go.mod h1:Bn5Z9Rzp1lPqdAccaB+F2ivUBiamEl2TNR3Gg/h7iLs= github.com/pulumi/pulumi/sdk/v3 v3.219.0 h1:OwTSwk1ZuOI4hQUdSccWuIAuqs4fL/FcppesPOAKHQ8= github.com/pulumi/pulumi/sdk/v3 v3.219.0/go.mod h1:ZOBPPC2NZOZf729AdCX+CctfNc5SN6aJh0bdqNdzQC4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -180,8 +166,6 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= -github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= @@ -193,7 +177,6 @@ github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= @@ -203,7 +186,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= @@ -238,10 +220,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= @@ -250,10 +228,6 @@ golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= -golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -262,19 +236,11 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= -golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -293,26 +259,14 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= -golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -321,10 +275,6 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= -golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -346,7 +296,6 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= diff --git a/sdk/go/Pulumi.yaml b/sdk/go/Pulumi.yaml index e69de29b..f0d3f82e 100644 --- a/sdk/go/Pulumi.yaml +++ b/sdk/go/Pulumi.yaml @@ -0,0 +1,3 @@ +name: proxmoxve +description: A Pulumi resource provider for proxmoxve. +language: go diff --git a/sdk/go/proxmoxve/acme/certificate.go b/sdk/go/proxmoxve/acme/certificate.go new file mode 100644 index 00000000..7a95d596 --- /dev/null +++ b/sdk/go/proxmoxve/acme/certificate.go @@ -0,0 +1,504 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package acme + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node. +// +// ## Example Usage +// +// ### Basic ACME Certificate with HTTP-01 Challenge +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve" +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// // First, create an ACME account +// example, err := proxmoxve.NewAcmeAccount(ctx, "example", &proxmoxve.AcmeAccountArgs{ +// Name: pulumi.String("production"), +// Contact: pulumi.String("admin@example.com"), +// Directory: pulumi.String("https://acme-v02.api.letsencrypt.org/directory"), +// Tos: pulumi.String("https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf"), +// }) +// if err != nil { +// return err +// } +// // Order a certificate for the node +// _, err = acme.NewCertificate(ctx, "example", &acme.CertificateArgs{ +// NodeName: pulumi.String("pve"), +// Account: example.Name, +// Domains: acme.CertificateDomainArray{ +// &acme.CertificateDomainArgs{ +// Domain: pulumi.String("pve.example.com"), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ### ACME Certificate with DNS-01 Challenge +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve" +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// // Create an ACME account +// example, err := proxmoxve.NewAcmeAccount(ctx, "example", &proxmoxve.AcmeAccountArgs{ +// Name: pulumi.String("production"), +// Contact: pulumi.String("admin@example.com"), +// Directory: pulumi.String("https://acme-v02.api.letsencrypt.org/directory"), +// Tos: pulumi.String("https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf"), +// }) +// if err != nil { +// return err +// } +// // Configure a DNS plugin (Desec example) +// desec, err := proxmoxve.NewAcmeDnsPlugin(ctx, "desec", &proxmoxve.AcmeDnsPluginArgs{ +// Plugin: pulumi.String("desec"), +// Api: pulumi.String("desec"), +// Data: pulumi.StringMap{ +// "DEDYN_TOKEN": pulumi.Any(dedynToken), +// }, +// }) +// if err != nil { +// return err +// } +// // Order a certificate using the DNS plugin +// _, err = acme.NewCertificate(ctx, "test", &acme.CertificateArgs{ +// NodeName: pulumi.String("pve"), +// Account: example.Name, +// Force: pulumi.Bool(false), +// Domains: acme.CertificateDomainArray{ +// &acme.CertificateDomainArgs{ +// Domain: pulumi.String("pve.example.dedyn.io"), +// Plugin: desec.Plugin, +// }, +// }, +// }, pulumi.DependsOn([]pulumi.Resource{ +// example, +// desec, +// })) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ### Force Certificate Renewal +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/acme" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := acme.NewCertificate(ctx, "example_force", &acme.CertificateArgs{ +// NodeName: pulumi.String("pve"), +// Account: pulumi.Any(example.Name), +// Force: pulumi.Bool(true), +// Domains: acme.CertificateDomainArray{ +// &acme.CertificateDomainArgs{ +// Domain: pulumi.String("pve.example.com"), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Related Resources +// +// - `AcmeAccount` - Manages ACME accounts +// - `AcmeDnsPlugin` - Manages ACME DNS plugins for DNS-01 challenges +// - `Certifi` - Manages custom SSL/TLS certificates (non-ACME) +// +// ## Import +// +// ACME certificates can be imported using the node name: +// +// #!/usr/bin/env sh +// +// ACME certificates can be imported using the node name, e.g.: +// +// ```sh +// $ pulumi import proxmoxve:Acme/certificate:Certificate example pve +// ``` +type Certificate struct { + pulumi.CustomResourceState + + // The ACME account name to use for ordering the certificate. + Account pulumi.StringOutput `pulumi:"account"` + // The PEM-encoded certificate data. + Certificate pulumi.StringOutput `pulumi:"certificate"` + // The list of domains to include in the certificate. At least one domain is required. + Domains CertificateDomainArrayOutput `pulumi:"domains"` + // The certificate fingerprint. + Fingerprint pulumi.StringOutput `pulumi:"fingerprint"` + // Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + Force pulumi.BoolOutput `pulumi:"force"` + // The certificate issuer. + Issuer pulumi.StringOutput `pulumi:"issuer"` + // The name of the Proxmox VE node for which to order/manage the ACME certificate. + NodeName pulumi.StringOutput `pulumi:"nodeName"` + // The certificate expiration timestamp. + NotAfter pulumi.StringOutput `pulumi:"notAfter"` + // The certificate start timestamp. + NotBefore pulumi.StringOutput `pulumi:"notBefore"` + // The certificate subject. + Subject pulumi.StringOutput `pulumi:"subject"` + // The certificate subject alternative names (SANs). + SubjectAlternativeNames pulumi.StringArrayOutput `pulumi:"subjectAlternativeNames"` +} + +// NewCertificate registers a new resource with the given unique name, arguments, and options. +func NewCertificate(ctx *pulumi.Context, + name string, args *CertificateArgs, opts ...pulumi.ResourceOption) (*Certificate, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Account == nil { + return nil, errors.New("invalid value for required argument 'Account'") + } + if args.Domains == nil { + return nil, errors.New("invalid value for required argument 'Domains'") + } + if args.NodeName == nil { + return nil, errors.New("invalid value for required argument 'NodeName'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Certificate + err := ctx.RegisterResource("proxmoxve:Acme/certificate:Certificate", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetCertificate gets an existing Certificate resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetCertificate(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *CertificateState, opts ...pulumi.ResourceOption) (*Certificate, error) { + var resource Certificate + err := ctx.ReadResource("proxmoxve:Acme/certificate:Certificate", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Certificate resources. +type certificateState struct { + // The ACME account name to use for ordering the certificate. + Account *string `pulumi:"account"` + // The PEM-encoded certificate data. + Certificate *string `pulumi:"certificate"` + // The list of domains to include in the certificate. At least one domain is required. + Domains []CertificateDomain `pulumi:"domains"` + // The certificate fingerprint. + Fingerprint *string `pulumi:"fingerprint"` + // Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + Force *bool `pulumi:"force"` + // The certificate issuer. + Issuer *string `pulumi:"issuer"` + // The name of the Proxmox VE node for which to order/manage the ACME certificate. + NodeName *string `pulumi:"nodeName"` + // The certificate expiration timestamp. + NotAfter *string `pulumi:"notAfter"` + // The certificate start timestamp. + NotBefore *string `pulumi:"notBefore"` + // The certificate subject. + Subject *string `pulumi:"subject"` + // The certificate subject alternative names (SANs). + SubjectAlternativeNames []string `pulumi:"subjectAlternativeNames"` +} + +type CertificateState struct { + // The ACME account name to use for ordering the certificate. + Account pulumi.StringPtrInput + // The PEM-encoded certificate data. + Certificate pulumi.StringPtrInput + // The list of domains to include in the certificate. At least one domain is required. + Domains CertificateDomainArrayInput + // The certificate fingerprint. + Fingerprint pulumi.StringPtrInput + // Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + Force pulumi.BoolPtrInput + // The certificate issuer. + Issuer pulumi.StringPtrInput + // The name of the Proxmox VE node for which to order/manage the ACME certificate. + NodeName pulumi.StringPtrInput + // The certificate expiration timestamp. + NotAfter pulumi.StringPtrInput + // The certificate start timestamp. + NotBefore pulumi.StringPtrInput + // The certificate subject. + Subject pulumi.StringPtrInput + // The certificate subject alternative names (SANs). + SubjectAlternativeNames pulumi.StringArrayInput +} + +func (CertificateState) ElementType() reflect.Type { + return reflect.TypeOf((*certificateState)(nil)).Elem() +} + +type certificateArgs struct { + // The ACME account name to use for ordering the certificate. + Account string `pulumi:"account"` + // The list of domains to include in the certificate. At least one domain is required. + Domains []CertificateDomain `pulumi:"domains"` + // Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + Force *bool `pulumi:"force"` + // The name of the Proxmox VE node for which to order/manage the ACME certificate. + NodeName string `pulumi:"nodeName"` +} + +// The set of arguments for constructing a Certificate resource. +type CertificateArgs struct { + // The ACME account name to use for ordering the certificate. + Account pulumi.StringInput + // The list of domains to include in the certificate. At least one domain is required. + Domains CertificateDomainArrayInput + // Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + Force pulumi.BoolPtrInput + // The name of the Proxmox VE node for which to order/manage the ACME certificate. + NodeName pulumi.StringInput +} + +func (CertificateArgs) ElementType() reflect.Type { + return reflect.TypeOf((*certificateArgs)(nil)).Elem() +} + +type CertificateInput interface { + pulumi.Input + + ToCertificateOutput() CertificateOutput + ToCertificateOutputWithContext(ctx context.Context) CertificateOutput +} + +func (*Certificate) ElementType() reflect.Type { + return reflect.TypeOf((**Certificate)(nil)).Elem() +} + +func (i *Certificate) ToCertificateOutput() CertificateOutput { + return i.ToCertificateOutputWithContext(context.Background()) +} + +func (i *Certificate) ToCertificateOutputWithContext(ctx context.Context) CertificateOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateOutput) +} + +// CertificateArrayInput is an input type that accepts CertificateArray and CertificateArrayOutput values. +// You can construct a concrete instance of `CertificateArrayInput` via: +// +// CertificateArray{ CertificateArgs{...} } +type CertificateArrayInput interface { + pulumi.Input + + ToCertificateArrayOutput() CertificateArrayOutput + ToCertificateArrayOutputWithContext(context.Context) CertificateArrayOutput +} + +type CertificateArray []CertificateInput + +func (CertificateArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Certificate)(nil)).Elem() +} + +func (i CertificateArray) ToCertificateArrayOutput() CertificateArrayOutput { + return i.ToCertificateArrayOutputWithContext(context.Background()) +} + +func (i CertificateArray) ToCertificateArrayOutputWithContext(ctx context.Context) CertificateArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateArrayOutput) +} + +// CertificateMapInput is an input type that accepts CertificateMap and CertificateMapOutput values. +// You can construct a concrete instance of `CertificateMapInput` via: +// +// CertificateMap{ "key": CertificateArgs{...} } +type CertificateMapInput interface { + pulumi.Input + + ToCertificateMapOutput() CertificateMapOutput + ToCertificateMapOutputWithContext(context.Context) CertificateMapOutput +} + +type CertificateMap map[string]CertificateInput + +func (CertificateMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Certificate)(nil)).Elem() +} + +func (i CertificateMap) ToCertificateMapOutput() CertificateMapOutput { + return i.ToCertificateMapOutputWithContext(context.Background()) +} + +func (i CertificateMap) ToCertificateMapOutputWithContext(ctx context.Context) CertificateMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateMapOutput) +} + +type CertificateOutput struct{ *pulumi.OutputState } + +func (CertificateOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Certificate)(nil)).Elem() +} + +func (o CertificateOutput) ToCertificateOutput() CertificateOutput { + return o +} + +func (o CertificateOutput) ToCertificateOutputWithContext(ctx context.Context) CertificateOutput { + return o +} + +// The ACME account name to use for ordering the certificate. +func (o CertificateOutput) Account() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.Account }).(pulumi.StringOutput) +} + +// The PEM-encoded certificate data. +func (o CertificateOutput) Certificate() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.Certificate }).(pulumi.StringOutput) +} + +// The list of domains to include in the certificate. At least one domain is required. +func (o CertificateOutput) Domains() CertificateDomainArrayOutput { + return o.ApplyT(func(v *Certificate) CertificateDomainArrayOutput { return v.Domains }).(CertificateDomainArrayOutput) +} + +// The certificate fingerprint. +func (o CertificateOutput) Fingerprint() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.Fingerprint }).(pulumi.StringOutput) +} + +// Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. +func (o CertificateOutput) Force() pulumi.BoolOutput { + return o.ApplyT(func(v *Certificate) pulumi.BoolOutput { return v.Force }).(pulumi.BoolOutput) +} + +// The certificate issuer. +func (o CertificateOutput) Issuer() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.Issuer }).(pulumi.StringOutput) +} + +// The name of the Proxmox VE node for which to order/manage the ACME certificate. +func (o CertificateOutput) NodeName() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.NodeName }).(pulumi.StringOutput) +} + +// The certificate expiration timestamp. +func (o CertificateOutput) NotAfter() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.NotAfter }).(pulumi.StringOutput) +} + +// The certificate start timestamp. +func (o CertificateOutput) NotBefore() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.NotBefore }).(pulumi.StringOutput) +} + +// The certificate subject. +func (o CertificateOutput) Subject() pulumi.StringOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringOutput { return v.Subject }).(pulumi.StringOutput) +} + +// The certificate subject alternative names (SANs). +func (o CertificateOutput) SubjectAlternativeNames() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Certificate) pulumi.StringArrayOutput { return v.SubjectAlternativeNames }).(pulumi.StringArrayOutput) +} + +type CertificateArrayOutput struct{ *pulumi.OutputState } + +func (CertificateArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Certificate)(nil)).Elem() +} + +func (o CertificateArrayOutput) ToCertificateArrayOutput() CertificateArrayOutput { + return o +} + +func (o CertificateArrayOutput) ToCertificateArrayOutputWithContext(ctx context.Context) CertificateArrayOutput { + return o +} + +func (o CertificateArrayOutput) Index(i pulumi.IntInput) CertificateOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Certificate { + return vs[0].([]*Certificate)[vs[1].(int)] + }).(CertificateOutput) +} + +type CertificateMapOutput struct{ *pulumi.OutputState } + +func (CertificateMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Certificate)(nil)).Elem() +} + +func (o CertificateMapOutput) ToCertificateMapOutput() CertificateMapOutput { + return o +} + +func (o CertificateMapOutput) ToCertificateMapOutputWithContext(ctx context.Context) CertificateMapOutput { + return o +} + +func (o CertificateMapOutput) MapIndex(k pulumi.StringInput) CertificateOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Certificate { + return vs[0].(map[string]*Certificate)[vs[1].(string)] + }).(CertificateOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*CertificateInput)(nil)).Elem(), &Certificate{}) + pulumi.RegisterInputType(reflect.TypeOf((*CertificateArrayInput)(nil)).Elem(), CertificateArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*CertificateMapInput)(nil)).Elem(), CertificateMap{}) + pulumi.RegisterOutputType(CertificateOutput{}) + pulumi.RegisterOutputType(CertificateArrayOutput{}) + pulumi.RegisterOutputType(CertificateMapOutput{}) +} diff --git a/sdk/go/proxmoxve/acme/init.go b/sdk/go/proxmoxve/acme/init.go new file mode 100644 index 00000000..8ad0322d --- /dev/null +++ b/sdk/go/proxmoxve/acme/init.go @@ -0,0 +1,44 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package acme + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "proxmoxve:Acme/certificate:Certificate": + r = &Certificate{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "proxmoxve", + "Acme/certificate", + &module{version}, + ) +} diff --git a/sdk/go/proxmoxve/acme/pulumiTypes.go b/sdk/go/proxmoxve/acme/pulumiTypes.go index 17a8f7d9..e5285e7f 100644 --- a/sdk/go/proxmoxve/acme/pulumiTypes.go +++ b/sdk/go/proxmoxve/acme/pulumiTypes.go @@ -13,6 +13,121 @@ import ( var _ = internal.GetEnvOrDefault +type CertificateDomain struct { + // An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + Alias *string `pulumi:"alias"` + // The domain name to include in the certificate. + Domain string `pulumi:"domain"` + // The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + Plugin *string `pulumi:"plugin"` +} + +// CertificateDomainInput is an input type that accepts CertificateDomainArgs and CertificateDomainOutput values. +// You can construct a concrete instance of `CertificateDomainInput` via: +// +// CertificateDomainArgs{...} +type CertificateDomainInput interface { + pulumi.Input + + ToCertificateDomainOutput() CertificateDomainOutput + ToCertificateDomainOutputWithContext(context.Context) CertificateDomainOutput +} + +type CertificateDomainArgs struct { + // An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + Alias pulumi.StringPtrInput `pulumi:"alias"` + // The domain name to include in the certificate. + Domain pulumi.StringInput `pulumi:"domain"` + // The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + Plugin pulumi.StringPtrInput `pulumi:"plugin"` +} + +func (CertificateDomainArgs) ElementType() reflect.Type { + return reflect.TypeOf((*CertificateDomain)(nil)).Elem() +} + +func (i CertificateDomainArgs) ToCertificateDomainOutput() CertificateDomainOutput { + return i.ToCertificateDomainOutputWithContext(context.Background()) +} + +func (i CertificateDomainArgs) ToCertificateDomainOutputWithContext(ctx context.Context) CertificateDomainOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateDomainOutput) +} + +// CertificateDomainArrayInput is an input type that accepts CertificateDomainArray and CertificateDomainArrayOutput values. +// You can construct a concrete instance of `CertificateDomainArrayInput` via: +// +// CertificateDomainArray{ CertificateDomainArgs{...} } +type CertificateDomainArrayInput interface { + pulumi.Input + + ToCertificateDomainArrayOutput() CertificateDomainArrayOutput + ToCertificateDomainArrayOutputWithContext(context.Context) CertificateDomainArrayOutput +} + +type CertificateDomainArray []CertificateDomainInput + +func (CertificateDomainArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]CertificateDomain)(nil)).Elem() +} + +func (i CertificateDomainArray) ToCertificateDomainArrayOutput() CertificateDomainArrayOutput { + return i.ToCertificateDomainArrayOutputWithContext(context.Background()) +} + +func (i CertificateDomainArray) ToCertificateDomainArrayOutputWithContext(ctx context.Context) CertificateDomainArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(CertificateDomainArrayOutput) +} + +type CertificateDomainOutput struct{ *pulumi.OutputState } + +func (CertificateDomainOutput) ElementType() reflect.Type { + return reflect.TypeOf((*CertificateDomain)(nil)).Elem() +} + +func (o CertificateDomainOutput) ToCertificateDomainOutput() CertificateDomainOutput { + return o +} + +func (o CertificateDomainOutput) ToCertificateDomainOutputWithContext(ctx context.Context) CertificateDomainOutput { + return o +} + +// An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. +func (o CertificateDomainOutput) Alias() pulumi.StringPtrOutput { + return o.ApplyT(func(v CertificateDomain) *string { return v.Alias }).(pulumi.StringPtrOutput) +} + +// The domain name to include in the certificate. +func (o CertificateDomainOutput) Domain() pulumi.StringOutput { + return o.ApplyT(func(v CertificateDomain) string { return v.Domain }).(pulumi.StringOutput) +} + +// The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. +func (o CertificateDomainOutput) Plugin() pulumi.StringPtrOutput { + return o.ApplyT(func(v CertificateDomain) *string { return v.Plugin }).(pulumi.StringPtrOutput) +} + +type CertificateDomainArrayOutput struct{ *pulumi.OutputState } + +func (CertificateDomainArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]CertificateDomain)(nil)).Elem() +} + +func (o CertificateDomainArrayOutput) ToCertificateDomainArrayOutput() CertificateDomainArrayOutput { + return o +} + +func (o CertificateDomainArrayOutput) ToCertificateDomainArrayOutputWithContext(ctx context.Context) CertificateDomainArrayOutput { + return o +} + +func (o CertificateDomainArrayOutput) Index(i pulumi.IntInput) CertificateDomainOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) CertificateDomain { + return vs[0].([]CertificateDomain)[vs[1].(int)] + }).(CertificateDomainOutput) +} + type GetAccountAccount struct { // An array of contact email addresses. Contacts []string `pulumi:"contacts"` @@ -226,9 +341,13 @@ func (o GetPluginsPluginArrayOutput) Index(i pulumi.IntInput) GetPluginsPluginOu } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*CertificateDomainInput)(nil)).Elem(), CertificateDomainArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*CertificateDomainArrayInput)(nil)).Elem(), CertificateDomainArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetAccountAccountInput)(nil)).Elem(), GetAccountAccountArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetPluginsPluginInput)(nil)).Elem(), GetPluginsPluginArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetPluginsPluginArrayInput)(nil)).Elem(), GetPluginsPluginArray{}) + pulumi.RegisterOutputType(CertificateDomainOutput{}) + pulumi.RegisterOutputType(CertificateDomainArrayOutput{}) pulumi.RegisterOutputType(GetAccountAccountOutput{}) pulumi.RegisterOutputType(GetPluginsPluginOutput{}) pulumi.RegisterOutputType(GetPluginsPluginArrayOutput{}) diff --git a/sdk/go/proxmoxve/apt/standard/repository.go b/sdk/go/proxmoxve/apt/standard/repository.go index 4eb43dcc..1545db37 100644 --- a/sdk/go/proxmoxve/apt/standard/repository.go +++ b/sdk/go/proxmoxve/apt/standard/repository.go @@ -68,7 +68,7 @@ type Repository struct { Description pulumi.StringOutput `pulumi:"description"` // The absolute path of the source list file that contains this standard repository. FilePath pulumi.StringOutput `pulumi:"filePath"` - // The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + // The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. Handle pulumi.StringOutput `pulumi:"handle"` // The index within the defining source list file. Index pulumi.IntOutput `pulumi:"index"` @@ -120,7 +120,7 @@ type repositoryState struct { Description *string `pulumi:"description"` // The absolute path of the source list file that contains this standard repository. FilePath *string `pulumi:"filePath"` - // The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + // The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. Handle *string `pulumi:"handle"` // The index within the defining source list file. Index *int `pulumi:"index"` @@ -137,7 +137,7 @@ type RepositoryState struct { Description pulumi.StringPtrInput // The absolute path of the source list file that contains this standard repository. FilePath pulumi.StringPtrInput - // The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + // The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. Handle pulumi.StringPtrInput // The index within the defining source list file. Index pulumi.IntPtrInput @@ -154,7 +154,7 @@ func (RepositoryState) ElementType() reflect.Type { } type repositoryArgs struct { - // The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + // The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. Handle string `pulumi:"handle"` // The name of the target Proxmox VE node. Node string `pulumi:"node"` @@ -162,7 +162,7 @@ type repositoryArgs struct { // The set of arguments for constructing a Repository resource. type RepositoryArgs struct { - // The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + // The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. Handle pulumi.StringInput // The name of the target Proxmox VE node. Node pulumi.StringInput @@ -265,7 +265,7 @@ func (o RepositoryOutput) FilePath() pulumi.StringOutput { return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.FilePath }).(pulumi.StringOutput) } -// The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. +// The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. func (o RepositoryOutput) Handle() pulumi.StringOutput { return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.Handle }).(pulumi.StringOutput) } diff --git a/sdk/go/proxmoxve/ct/container.go b/sdk/go/proxmoxve/ct/container.go index d31895d5..bd1e0808 100644 --- a/sdk/go/proxmoxve/ct/container.go +++ b/sdk/go/proxmoxve/ct/container.go @@ -107,6 +107,11 @@ import ( // Size: pulumi.String("10G"), // Path: pulumi.String("/mnt/volume"), // }, +// &ct.ContainerMountPointArgs{ +// Volume: pulumi.String("local-lvm:subvol-108-disk-101"), +// Size: pulumi.String("10G"), +// Path: pulumi.String("/mnt/data"), +// }, // }, // Startup: &ct.ContainerStartupArgs{ // Order: pulumi.Int(3), diff --git a/sdk/go/proxmoxve/ct/pulumiTypes.go b/sdk/go/proxmoxve/ct/pulumiTypes.go index cf5c1e44..43be36c3 100644 --- a/sdk/go/proxmoxve/ct/pulumiTypes.go +++ b/sdk/go/proxmoxve/ct/pulumiTypes.go @@ -690,6 +690,9 @@ type ContainerDisk struct { DatastoreId *string `pulumi:"datastoreId"` // List of extra mount options. MountOptions []string `pulumi:"mountOptions"` + // The in-datastore path to the disk image. + // Use this attribute for cross-resource references. + PathInDatastore *string `pulumi:"pathInDatastore"` // Enable user quotas for the container rootfs Quota *bool `pulumi:"quota"` // Will include this volume to a storage replica job @@ -719,6 +722,9 @@ type ContainerDiskArgs struct { DatastoreId pulumi.StringPtrInput `pulumi:"datastoreId"` // List of extra mount options. MountOptions pulumi.StringArrayInput `pulumi:"mountOptions"` + // The in-datastore path to the disk image. + // Use this attribute for cross-resource references. + PathInDatastore pulumi.StringPtrInput `pulumi:"pathInDatastore"` // Enable user quotas for the container rootfs Quota pulumi.BoolPtrInput `pulumi:"quota"` // Will include this volume to a storage replica job @@ -822,6 +828,12 @@ func (o ContainerDiskOutput) MountOptions() pulumi.StringArrayOutput { return o.ApplyT(func(v ContainerDisk) []string { return v.MountOptions }).(pulumi.StringArrayOutput) } +// The in-datastore path to the disk image. +// Use this attribute for cross-resource references. +func (o ContainerDiskOutput) PathInDatastore() pulumi.StringPtrOutput { + return o.ApplyT(func(v ContainerDisk) *string { return v.PathInDatastore }).(pulumi.StringPtrOutput) +} + // Enable user quotas for the container rootfs func (o ContainerDiskOutput) Quota() pulumi.BoolPtrOutput { return o.ApplyT(func(v ContainerDisk) *bool { return v.Quota }).(pulumi.BoolPtrOutput) @@ -894,6 +906,17 @@ func (o ContainerDiskPtrOutput) MountOptions() pulumi.StringArrayOutput { }).(pulumi.StringArrayOutput) } +// The in-datastore path to the disk image. +// Use this attribute for cross-resource references. +func (o ContainerDiskPtrOutput) PathInDatastore() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ContainerDisk) *string { + if v == nil { + return nil + } + return v.PathInDatastore + }).(pulumi.StringPtrOutput) +} + // Enable user quotas for the container rootfs func (o ContainerDiskPtrOutput) Quota() pulumi.BoolPtrOutput { return o.ApplyT(func(v *ContainerDisk) *bool { @@ -2278,6 +2301,9 @@ type ContainerMountPoint struct { // Path to the mount point as seen from inside the // container. Path string `pulumi:"path"` + // The in-datastore path to the mount point volume. + // Use this attribute for cross-resource references instead of `volume`. + PathInDatastore *string `pulumi:"pathInDatastore"` // Enable user quotas inside the container (not supported // with ZFS subvolumes). Quota *bool `pulumi:"quota"` @@ -2318,6 +2344,9 @@ type ContainerMountPointArgs struct { // Path to the mount point as seen from inside the // container. Path pulumi.StringInput `pulumi:"path"` + // The in-datastore path to the mount point volume. + // Use this attribute for cross-resource references instead of `volume`. + PathInDatastore pulumi.StringPtrInput `pulumi:"pathInDatastore"` // Enable user quotas inside the container (not supported // with ZFS subvolumes). Quota pulumi.BoolPtrInput `pulumi:"quota"` @@ -2409,6 +2438,12 @@ func (o ContainerMountPointOutput) Path() pulumi.StringOutput { return o.ApplyT(func(v ContainerMountPoint) string { return v.Path }).(pulumi.StringOutput) } +// The in-datastore path to the mount point volume. +// Use this attribute for cross-resource references instead of `volume`. +func (o ContainerMountPointOutput) PathInDatastore() pulumi.StringPtrOutput { + return o.ApplyT(func(v ContainerMountPoint) *string { return v.PathInDatastore }).(pulumi.StringPtrOutput) +} + // Enable user quotas inside the container (not supported // with ZFS subvolumes). func (o ContainerMountPointOutput) Quota() pulumi.BoolPtrOutput { diff --git a/sdk/go/proxmoxve/download/file.go b/sdk/go/proxmoxve/download/file.go index 5e0415d3..8f53f311 100644 --- a/sdk/go/proxmoxve/download/file.go +++ b/sdk/go/proxmoxve/download/file.go @@ -136,9 +136,8 @@ type File struct { // The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. FileName pulumi.StringOutput `pulumi:"fileName"` // The node name. - NodeName pulumi.StringOutput `pulumi:"nodeName"` - // By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - Overwrite pulumi.BoolOutput `pulumi:"overwrite"` + NodeName pulumi.StringOutput `pulumi:"nodeName"` + Overwrite pulumi.BoolOutput `pulumi:"overwrite"` // If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. OverwriteUnmanaged pulumi.BoolOutput `pulumi:"overwriteUnmanaged"` // The file size in PVE. @@ -206,9 +205,8 @@ type fileState struct { // The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. FileName *string `pulumi:"fileName"` // The node name. - NodeName *string `pulumi:"nodeName"` - // By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - Overwrite *bool `pulumi:"overwrite"` + NodeName *string `pulumi:"nodeName"` + Overwrite *bool `pulumi:"overwrite"` // If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. OverwriteUnmanaged *bool `pulumi:"overwriteUnmanaged"` // The file size in PVE. @@ -235,8 +233,7 @@ type FileState struct { // The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. FileName pulumi.StringPtrInput // The node name. - NodeName pulumi.StringPtrInput - // By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. + NodeName pulumi.StringPtrInput Overwrite pulumi.BoolPtrInput // If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. OverwriteUnmanaged pulumi.BoolPtrInput @@ -268,9 +265,8 @@ type fileArgs struct { // The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. FileName *string `pulumi:"fileName"` // The node name. - NodeName string `pulumi:"nodeName"` - // By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - Overwrite *bool `pulumi:"overwrite"` + NodeName string `pulumi:"nodeName"` + Overwrite *bool `pulumi:"overwrite"` // If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. OverwriteUnmanaged *bool `pulumi:"overwriteUnmanaged"` // The file download timeout seconds. Default is 600 (10min). @@ -296,8 +292,7 @@ type FileArgs struct { // The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. FileName pulumi.StringPtrInput // The node name. - NodeName pulumi.StringInput - // By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. + NodeName pulumi.StringInput Overwrite pulumi.BoolPtrInput // If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. OverwriteUnmanaged pulumi.BoolPtrInput @@ -431,7 +426,6 @@ func (o FileOutput) NodeName() pulumi.StringOutput { return o.ApplyT(func(v *File) pulumi.StringOutput { return v.NodeName }).(pulumi.StringOutput) } -// By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. func (o FileOutput) Overwrite() pulumi.BoolOutput { return o.ApplyT(func(v *File) pulumi.BoolOutput { return v.Overwrite }).(pulumi.BoolOutput) } diff --git a/sdk/go/proxmoxve/getVm2.go b/sdk/go/proxmoxve/getVm2.go index 5241046d..c5ebd651 100644 --- a/sdk/go/proxmoxve/getVm2.go +++ b/sdk/go/proxmoxve/getVm2.go @@ -25,8 +25,6 @@ func GetVm2(ctx *pulumi.Context, args *GetVm2Args, opts ...pulumi.InvokeOption) // A collection of arguments for invoking getVm2. type GetVm2Args struct { - // The cloning configuration. - Clone *GetVm2Clone `pulumi:"clone"` // The CPU configuration. Cpu *GetVm2Cpu `pulumi:"cpu"` // The description of the VM. @@ -50,8 +48,6 @@ type GetVm2Args struct { // A collection of values returned by getVm2. type GetVm2Result struct { - // The cloning configuration. - Clone *GetVm2Clone `pulumi:"clone"` // The CPU configuration. Cpu GetVm2Cpu `pulumi:"cpu"` // The description of the VM. @@ -84,8 +80,6 @@ func GetVm2Output(ctx *pulumi.Context, args GetVm2OutputArgs, opts ...pulumi.Inv // A collection of arguments for invoking getVm2. type GetVm2OutputArgs struct { - // The cloning configuration. - Clone GetVm2ClonePtrInput `pulumi:"clone"` // The CPU configuration. Cpu GetVm2CpuPtrInput `pulumi:"cpu"` // The description of the VM. @@ -126,11 +120,6 @@ func (o GetVm2ResultOutput) ToGetVm2ResultOutputWithContext(ctx context.Context) return o } -// The cloning configuration. -func (o GetVm2ResultOutput) Clone() GetVm2ClonePtrOutput { - return o.ApplyT(func(v GetVm2Result) *GetVm2Clone { return v.Clone }).(GetVm2ClonePtrOutput) -} - // The CPU configuration. func (o GetVm2ResultOutput) Cpu() GetVm2CpuOutput { return o.ApplyT(func(v GetVm2Result) GetVm2Cpu { return v.Cpu }).(GetVm2CpuOutput) diff --git a/sdk/go/proxmoxve/network/firewallOptions.go b/sdk/go/proxmoxve/network/firewallOptions.go index 48fca6f2..803cd344 100644 --- a/sdk/go/proxmoxve/network/firewallOptions.go +++ b/sdk/go/proxmoxve/network/firewallOptions.go @@ -71,7 +71,7 @@ import ( type FirewallOptions struct { pulumi.CustomResourceState - // Container ID. + // Container ID. **Exactly one of `vmId` or `containerId` must be specified.** ContainerId pulumi.IntPtrOutput `pulumi:"containerId"` // Enable DHCP. Dhcp pulumi.BoolPtrOutput `pulumi:"dhcp"` @@ -105,7 +105,7 @@ type FirewallOptions struct { OutputPolicy pulumi.StringPtrOutput `pulumi:"outputPolicy"` // Enable Router Advertisement. Radv pulumi.BoolPtrOutput `pulumi:"radv"` - // VM ID. + // VM ID. **Exactly one of `vmId` or `containerId` must be specified.** VmId pulumi.IntPtrOutput `pulumi:"vmId"` } @@ -142,7 +142,7 @@ func GetFirewallOptions(ctx *pulumi.Context, // Input properties used for looking up and filtering FirewallOptions resources. type firewallOptionsState struct { - // Container ID. + // Container ID. **Exactly one of `vmId` or `containerId` must be specified.** ContainerId *int `pulumi:"containerId"` // Enable DHCP. Dhcp *bool `pulumi:"dhcp"` @@ -176,12 +176,12 @@ type firewallOptionsState struct { OutputPolicy *string `pulumi:"outputPolicy"` // Enable Router Advertisement. Radv *bool `pulumi:"radv"` - // VM ID. + // VM ID. **Exactly one of `vmId` or `containerId` must be specified.** VmId *int `pulumi:"vmId"` } type FirewallOptionsState struct { - // Container ID. + // Container ID. **Exactly one of `vmId` or `containerId` must be specified.** ContainerId pulumi.IntPtrInput // Enable DHCP. Dhcp pulumi.BoolPtrInput @@ -215,7 +215,7 @@ type FirewallOptionsState struct { OutputPolicy pulumi.StringPtrInput // Enable Router Advertisement. Radv pulumi.BoolPtrInput - // VM ID. + // VM ID. **Exactly one of `vmId` or `containerId` must be specified.** VmId pulumi.IntPtrInput } @@ -224,7 +224,7 @@ func (FirewallOptionsState) ElementType() reflect.Type { } type firewallOptionsArgs struct { - // Container ID. + // Container ID. **Exactly one of `vmId` or `containerId` must be specified.** ContainerId *int `pulumi:"containerId"` // Enable DHCP. Dhcp *bool `pulumi:"dhcp"` @@ -258,13 +258,13 @@ type firewallOptionsArgs struct { OutputPolicy *string `pulumi:"outputPolicy"` // Enable Router Advertisement. Radv *bool `pulumi:"radv"` - // VM ID. + // VM ID. **Exactly one of `vmId` or `containerId` must be specified.** VmId *int `pulumi:"vmId"` } // The set of arguments for constructing a FirewallOptions resource. type FirewallOptionsArgs struct { - // Container ID. + // Container ID. **Exactly one of `vmId` or `containerId` must be specified.** ContainerId pulumi.IntPtrInput // Enable DHCP. Dhcp pulumi.BoolPtrInput @@ -298,7 +298,7 @@ type FirewallOptionsArgs struct { OutputPolicy pulumi.StringPtrInput // Enable Router Advertisement. Radv pulumi.BoolPtrInput - // VM ID. + // VM ID. **Exactly one of `vmId` or `containerId` must be specified.** VmId pulumi.IntPtrInput } @@ -389,7 +389,7 @@ func (o FirewallOptionsOutput) ToFirewallOptionsOutputWithContext(ctx context.Co return o } -// Container ID. +// Container ID. **Exactly one of `vmId` or `containerId` must be specified.** func (o FirewallOptionsOutput) ContainerId() pulumi.IntPtrOutput { return o.ApplyT(func(v *FirewallOptions) pulumi.IntPtrOutput { return v.ContainerId }).(pulumi.IntPtrOutput) } @@ -459,7 +459,7 @@ func (o FirewallOptionsOutput) Radv() pulumi.BoolPtrOutput { return o.ApplyT(func(v *FirewallOptions) pulumi.BoolPtrOutput { return v.Radv }).(pulumi.BoolPtrOutput) } -// VM ID. +// VM ID. **Exactly one of `vmId` or `containerId` must be specified.** func (o FirewallOptionsOutput) VmId() pulumi.IntPtrOutput { return o.ApplyT(func(v *FirewallOptions) pulumi.IntPtrOutput { return v.VmId }).(pulumi.IntPtrOutput) } diff --git a/sdk/go/proxmoxve/network/firewallRules.go b/sdk/go/proxmoxve/network/firewallRules.go index 33ab358f..5b193a58 100644 --- a/sdk/go/proxmoxve/network/firewallRules.go +++ b/sdk/go/proxmoxve/network/firewallRules.go @@ -13,8 +13,7 @@ import ( // Manages cluster-level, node-level or VM/container-level firewall rules. // -// > **Note:** Before creating a new `Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). -// If rules are already configured, import them first using the appropriate import command. +// > Before creating a new `Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command. // // ## Example Usage // diff --git a/sdk/go/proxmoxve/node/firewall.go b/sdk/go/proxmoxve/node/firewall.go new file mode 100644 index 00000000..01c829cb --- /dev/null +++ b/sdk/go/proxmoxve/node/firewall.go @@ -0,0 +1,434 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package node + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages Proxmox VE Node Firewall options. +// +// > This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/node" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := node.NewFirewall(ctx, "node-pve1", &node.FirewallArgs{ +// NodeName: pulumi.String("pve1"), +// Enabled: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// _, err = node.NewFirewall(ctx, "pve2", &node.FirewallArgs{ +// NodeName: pulumi.String("pve2"), +// Enabled: pulumi.Bool(true), +// LogLevelIn: pulumi.String("alert"), +// LogLevelOut: pulumi.String("alert"), +// LogLevelForward: pulumi.String("alert"), +// Ndp: pulumi.Bool(true), +// Nftables: pulumi.Bool(true), +// Nosmurfs: pulumi.Bool(true), +// SmurfLogLevel: pulumi.String("alert"), +// TcpFlagsLogLevel: pulumi.String("alert"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ```sh +// $ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1 +// ``` +type Firewall struct { + pulumi.CustomResourceState + + // Enable host firewall rules (defaults to `true`). + Enabled pulumi.BoolOutput `pulumi:"enabled"` + // Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelForward pulumi.StringOutput `pulumi:"logLevelForward"` + // Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelIn pulumi.StringOutput `pulumi:"logLevelIn"` + // Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelOut pulumi.StringOutput `pulumi:"logLevelOut"` + // Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + Ndp pulumi.BoolOutput `pulumi:"ndp"` + // Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + NfConntrackMax pulumi.IntOutput `pulumi:"nfConntrackMax"` + // Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + NfConntrackTcpTimeoutEstablished pulumi.IntOutput `pulumi:"nfConntrackTcpTimeoutEstablished"` + // Enable nftables based firewall (tech preview, defaults to `false`). + Nftables pulumi.BoolOutput `pulumi:"nftables"` + // The cluster node name. + NodeName pulumi.StringOutput `pulumi:"nodeName"` + // Enable SMURFS filter (defaults to `true`). + Nosmurfs pulumi.BoolOutput `pulumi:"nosmurfs"` + // Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + SmurfLogLevel pulumi.StringOutput `pulumi:"smurfLogLevel"` + // Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + TcpFlagsLogLevel pulumi.StringOutput `pulumi:"tcpFlagsLogLevel"` +} + +// NewFirewall registers a new resource with the given unique name, arguments, and options. +func NewFirewall(ctx *pulumi.Context, + name string, args *FirewallArgs, opts ...pulumi.ResourceOption) (*Firewall, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.NodeName == nil { + return nil, errors.New("invalid value for required argument 'NodeName'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Firewall + err := ctx.RegisterResource("proxmoxve:Node/firewall:Firewall", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetFirewall gets an existing Firewall resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetFirewall(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *FirewallState, opts ...pulumi.ResourceOption) (*Firewall, error) { + var resource Firewall + err := ctx.ReadResource("proxmoxve:Node/firewall:Firewall", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Firewall resources. +type firewallState struct { + // Enable host firewall rules (defaults to `true`). + Enabled *bool `pulumi:"enabled"` + // Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelForward *string `pulumi:"logLevelForward"` + // Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelIn *string `pulumi:"logLevelIn"` + // Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelOut *string `pulumi:"logLevelOut"` + // Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + Ndp *bool `pulumi:"ndp"` + // Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + NfConntrackMax *int `pulumi:"nfConntrackMax"` + // Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + NfConntrackTcpTimeoutEstablished *int `pulumi:"nfConntrackTcpTimeoutEstablished"` + // Enable nftables based firewall (tech preview, defaults to `false`). + Nftables *bool `pulumi:"nftables"` + // The cluster node name. + NodeName *string `pulumi:"nodeName"` + // Enable SMURFS filter (defaults to `true`). + Nosmurfs *bool `pulumi:"nosmurfs"` + // Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + SmurfLogLevel *string `pulumi:"smurfLogLevel"` + // Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + TcpFlagsLogLevel *string `pulumi:"tcpFlagsLogLevel"` +} + +type FirewallState struct { + // Enable host firewall rules (defaults to `true`). + Enabled pulumi.BoolPtrInput + // Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelForward pulumi.StringPtrInput + // Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelIn pulumi.StringPtrInput + // Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelOut pulumi.StringPtrInput + // Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + Ndp pulumi.BoolPtrInput + // Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + NfConntrackMax pulumi.IntPtrInput + // Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + NfConntrackTcpTimeoutEstablished pulumi.IntPtrInput + // Enable nftables based firewall (tech preview, defaults to `false`). + Nftables pulumi.BoolPtrInput + // The cluster node name. + NodeName pulumi.StringPtrInput + // Enable SMURFS filter (defaults to `true`). + Nosmurfs pulumi.BoolPtrInput + // Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + SmurfLogLevel pulumi.StringPtrInput + // Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + TcpFlagsLogLevel pulumi.StringPtrInput +} + +func (FirewallState) ElementType() reflect.Type { + return reflect.TypeOf((*firewallState)(nil)).Elem() +} + +type firewallArgs struct { + // Enable host firewall rules (defaults to `true`). + Enabled *bool `pulumi:"enabled"` + // Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelForward *string `pulumi:"logLevelForward"` + // Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelIn *string `pulumi:"logLevelIn"` + // Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelOut *string `pulumi:"logLevelOut"` + // Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + Ndp *bool `pulumi:"ndp"` + // Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + NfConntrackMax *int `pulumi:"nfConntrackMax"` + // Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + NfConntrackTcpTimeoutEstablished *int `pulumi:"nfConntrackTcpTimeoutEstablished"` + // Enable nftables based firewall (tech preview, defaults to `false`). + Nftables *bool `pulumi:"nftables"` + // The cluster node name. + NodeName string `pulumi:"nodeName"` + // Enable SMURFS filter (defaults to `true`). + Nosmurfs *bool `pulumi:"nosmurfs"` + // Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + SmurfLogLevel *string `pulumi:"smurfLogLevel"` + // Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + TcpFlagsLogLevel *string `pulumi:"tcpFlagsLogLevel"` +} + +// The set of arguments for constructing a Firewall resource. +type FirewallArgs struct { + // Enable host firewall rules (defaults to `true`). + Enabled pulumi.BoolPtrInput + // Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelForward pulumi.StringPtrInput + // Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelIn pulumi.StringPtrInput + // Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + LogLevelOut pulumi.StringPtrInput + // Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + Ndp pulumi.BoolPtrInput + // Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + NfConntrackMax pulumi.IntPtrInput + // Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + NfConntrackTcpTimeoutEstablished pulumi.IntPtrInput + // Enable nftables based firewall (tech preview, defaults to `false`). + Nftables pulumi.BoolPtrInput + // The cluster node name. + NodeName pulumi.StringInput + // Enable SMURFS filter (defaults to `true`). + Nosmurfs pulumi.BoolPtrInput + // Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + SmurfLogLevel pulumi.StringPtrInput + // Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + TcpFlagsLogLevel pulumi.StringPtrInput +} + +func (FirewallArgs) ElementType() reflect.Type { + return reflect.TypeOf((*firewallArgs)(nil)).Elem() +} + +type FirewallInput interface { + pulumi.Input + + ToFirewallOutput() FirewallOutput + ToFirewallOutputWithContext(ctx context.Context) FirewallOutput +} + +func (*Firewall) ElementType() reflect.Type { + return reflect.TypeOf((**Firewall)(nil)).Elem() +} + +func (i *Firewall) ToFirewallOutput() FirewallOutput { + return i.ToFirewallOutputWithContext(context.Background()) +} + +func (i *Firewall) ToFirewallOutputWithContext(ctx context.Context) FirewallOutput { + return pulumi.ToOutputWithContext(ctx, i).(FirewallOutput) +} + +// FirewallArrayInput is an input type that accepts FirewallArray and FirewallArrayOutput values. +// You can construct a concrete instance of `FirewallArrayInput` via: +// +// FirewallArray{ FirewallArgs{...} } +type FirewallArrayInput interface { + pulumi.Input + + ToFirewallArrayOutput() FirewallArrayOutput + ToFirewallArrayOutputWithContext(context.Context) FirewallArrayOutput +} + +type FirewallArray []FirewallInput + +func (FirewallArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Firewall)(nil)).Elem() +} + +func (i FirewallArray) ToFirewallArrayOutput() FirewallArrayOutput { + return i.ToFirewallArrayOutputWithContext(context.Background()) +} + +func (i FirewallArray) ToFirewallArrayOutputWithContext(ctx context.Context) FirewallArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(FirewallArrayOutput) +} + +// FirewallMapInput is an input type that accepts FirewallMap and FirewallMapOutput values. +// You can construct a concrete instance of `FirewallMapInput` via: +// +// FirewallMap{ "key": FirewallArgs{...} } +type FirewallMapInput interface { + pulumi.Input + + ToFirewallMapOutput() FirewallMapOutput + ToFirewallMapOutputWithContext(context.Context) FirewallMapOutput +} + +type FirewallMap map[string]FirewallInput + +func (FirewallMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Firewall)(nil)).Elem() +} + +func (i FirewallMap) ToFirewallMapOutput() FirewallMapOutput { + return i.ToFirewallMapOutputWithContext(context.Background()) +} + +func (i FirewallMap) ToFirewallMapOutputWithContext(ctx context.Context) FirewallMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(FirewallMapOutput) +} + +type FirewallOutput struct{ *pulumi.OutputState } + +func (FirewallOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Firewall)(nil)).Elem() +} + +func (o FirewallOutput) ToFirewallOutput() FirewallOutput { + return o +} + +func (o FirewallOutput) ToFirewallOutputWithContext(ctx context.Context) FirewallOutput { + return o +} + +// Enable host firewall rules (defaults to `true`). +func (o FirewallOutput) Enabled() pulumi.BoolOutput { + return o.ApplyT(func(v *Firewall) pulumi.BoolOutput { return v.Enabled }).(pulumi.BoolOutput) +} + +// Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). +func (o FirewallOutput) LogLevelForward() pulumi.StringOutput { + return o.ApplyT(func(v *Firewall) pulumi.StringOutput { return v.LogLevelForward }).(pulumi.StringOutput) +} + +// Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). +func (o FirewallOutput) LogLevelIn() pulumi.StringOutput { + return o.ApplyT(func(v *Firewall) pulumi.StringOutput { return v.LogLevelIn }).(pulumi.StringOutput) +} + +// Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). +func (o FirewallOutput) LogLevelOut() pulumi.StringOutput { + return o.ApplyT(func(v *Firewall) pulumi.StringOutput { return v.LogLevelOut }).(pulumi.StringOutput) +} + +// Enable NDP - Neighbor Discovery Protocol (defaults to `true`). +func (o FirewallOutput) Ndp() pulumi.BoolOutput { + return o.ApplyT(func(v *Firewall) pulumi.BoolOutput { return v.Ndp }).(pulumi.BoolOutput) +} + +// Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. +func (o FirewallOutput) NfConntrackMax() pulumi.IntOutput { + return o.ApplyT(func(v *Firewall) pulumi.IntOutput { return v.NfConntrackMax }).(pulumi.IntOutput) +} + +// Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. +func (o FirewallOutput) NfConntrackTcpTimeoutEstablished() pulumi.IntOutput { + return o.ApplyT(func(v *Firewall) pulumi.IntOutput { return v.NfConntrackTcpTimeoutEstablished }).(pulumi.IntOutput) +} + +// Enable nftables based firewall (tech preview, defaults to `false`). +func (o FirewallOutput) Nftables() pulumi.BoolOutput { + return o.ApplyT(func(v *Firewall) pulumi.BoolOutput { return v.Nftables }).(pulumi.BoolOutput) +} + +// The cluster node name. +func (o FirewallOutput) NodeName() pulumi.StringOutput { + return o.ApplyT(func(v *Firewall) pulumi.StringOutput { return v.NodeName }).(pulumi.StringOutput) +} + +// Enable SMURFS filter (defaults to `true`). +func (o FirewallOutput) Nosmurfs() pulumi.BoolOutput { + return o.ApplyT(func(v *Firewall) pulumi.BoolOutput { return v.Nosmurfs }).(pulumi.BoolOutput) +} + +// Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). +func (o FirewallOutput) SmurfLogLevel() pulumi.StringOutput { + return o.ApplyT(func(v *Firewall) pulumi.StringOutput { return v.SmurfLogLevel }).(pulumi.StringOutput) +} + +// Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). +func (o FirewallOutput) TcpFlagsLogLevel() pulumi.StringOutput { + return o.ApplyT(func(v *Firewall) pulumi.StringOutput { return v.TcpFlagsLogLevel }).(pulumi.StringOutput) +} + +type FirewallArrayOutput struct{ *pulumi.OutputState } + +func (FirewallArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Firewall)(nil)).Elem() +} + +func (o FirewallArrayOutput) ToFirewallArrayOutput() FirewallArrayOutput { + return o +} + +func (o FirewallArrayOutput) ToFirewallArrayOutputWithContext(ctx context.Context) FirewallArrayOutput { + return o +} + +func (o FirewallArrayOutput) Index(i pulumi.IntInput) FirewallOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Firewall { + return vs[0].([]*Firewall)[vs[1].(int)] + }).(FirewallOutput) +} + +type FirewallMapOutput struct{ *pulumi.OutputState } + +func (FirewallMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Firewall)(nil)).Elem() +} + +func (o FirewallMapOutput) ToFirewallMapOutput() FirewallMapOutput { + return o +} + +func (o FirewallMapOutput) ToFirewallMapOutputWithContext(ctx context.Context) FirewallMapOutput { + return o +} + +func (o FirewallMapOutput) MapIndex(k pulumi.StringInput) FirewallOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Firewall { + return vs[0].(map[string]*Firewall)[vs[1].(string)] + }).(FirewallOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*FirewallInput)(nil)).Elem(), &Firewall{}) + pulumi.RegisterInputType(reflect.TypeOf((*FirewallArrayInput)(nil)).Elem(), FirewallArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*FirewallMapInput)(nil)).Elem(), FirewallMap{}) + pulumi.RegisterOutputType(FirewallOutput{}) + pulumi.RegisterOutputType(FirewallArrayOutput{}) + pulumi.RegisterOutputType(FirewallMapOutput{}) +} diff --git a/sdk/go/proxmoxve/node/init.go b/sdk/go/proxmoxve/node/init.go new file mode 100644 index 00000000..99ed02f7 --- /dev/null +++ b/sdk/go/proxmoxve/node/init.go @@ -0,0 +1,44 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package node + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "proxmoxve:Node/firewall:Firewall": + r = &Firewall{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "proxmoxve", + "Node/firewall", + &module{version}, + ) +} diff --git a/sdk/go/proxmoxve/pulumiTypes.go b/sdk/go/proxmoxve/pulumiTypes.go index e562c685..a5557531 100644 --- a/sdk/go/proxmoxve/pulumiTypes.go +++ b/sdk/go/proxmoxve/pulumiTypes.go @@ -802,162 +802,6 @@ func (o GetContainersFilterArrayOutput) Index(i pulumi.IntInput) GetContainersFi }).(GetContainersFilterOutput) } -type GetVm2Clone struct { - // The ID of the VM to clone. - Id int `pulumi:"id"` - // The number of retries to perform when cloning the VM (default: 3). - Retries int `pulumi:"retries"` -} - -// GetVm2CloneInput is an input type that accepts GetVm2CloneArgs and GetVm2CloneOutput values. -// You can construct a concrete instance of `GetVm2CloneInput` via: -// -// GetVm2CloneArgs{...} -type GetVm2CloneInput interface { - pulumi.Input - - ToGetVm2CloneOutput() GetVm2CloneOutput - ToGetVm2CloneOutputWithContext(context.Context) GetVm2CloneOutput -} - -type GetVm2CloneArgs struct { - // The ID of the VM to clone. - Id pulumi.IntInput `pulumi:"id"` - // The number of retries to perform when cloning the VM (default: 3). - Retries pulumi.IntInput `pulumi:"retries"` -} - -func (GetVm2CloneArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetVm2Clone)(nil)).Elem() -} - -func (i GetVm2CloneArgs) ToGetVm2CloneOutput() GetVm2CloneOutput { - return i.ToGetVm2CloneOutputWithContext(context.Background()) -} - -func (i GetVm2CloneArgs) ToGetVm2CloneOutputWithContext(ctx context.Context) GetVm2CloneOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetVm2CloneOutput) -} - -func (i GetVm2CloneArgs) ToGetVm2ClonePtrOutput() GetVm2ClonePtrOutput { - return i.ToGetVm2ClonePtrOutputWithContext(context.Background()) -} - -func (i GetVm2CloneArgs) ToGetVm2ClonePtrOutputWithContext(ctx context.Context) GetVm2ClonePtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetVm2CloneOutput).ToGetVm2ClonePtrOutputWithContext(ctx) -} - -// GetVm2ClonePtrInput is an input type that accepts GetVm2CloneArgs, GetVm2ClonePtr and GetVm2ClonePtrOutput values. -// You can construct a concrete instance of `GetVm2ClonePtrInput` via: -// -// GetVm2CloneArgs{...} -// -// or: -// -// nil -type GetVm2ClonePtrInput interface { - pulumi.Input - - ToGetVm2ClonePtrOutput() GetVm2ClonePtrOutput - ToGetVm2ClonePtrOutputWithContext(context.Context) GetVm2ClonePtrOutput -} - -type getVm2ClonePtrType GetVm2CloneArgs - -func GetVm2ClonePtr(v *GetVm2CloneArgs) GetVm2ClonePtrInput { - return (*getVm2ClonePtrType)(v) -} - -func (*getVm2ClonePtrType) ElementType() reflect.Type { - return reflect.TypeOf((**GetVm2Clone)(nil)).Elem() -} - -func (i *getVm2ClonePtrType) ToGetVm2ClonePtrOutput() GetVm2ClonePtrOutput { - return i.ToGetVm2ClonePtrOutputWithContext(context.Background()) -} - -func (i *getVm2ClonePtrType) ToGetVm2ClonePtrOutputWithContext(ctx context.Context) GetVm2ClonePtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetVm2ClonePtrOutput) -} - -type GetVm2CloneOutput struct{ *pulumi.OutputState } - -func (GetVm2CloneOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetVm2Clone)(nil)).Elem() -} - -func (o GetVm2CloneOutput) ToGetVm2CloneOutput() GetVm2CloneOutput { - return o -} - -func (o GetVm2CloneOutput) ToGetVm2CloneOutputWithContext(ctx context.Context) GetVm2CloneOutput { - return o -} - -func (o GetVm2CloneOutput) ToGetVm2ClonePtrOutput() GetVm2ClonePtrOutput { - return o.ToGetVm2ClonePtrOutputWithContext(context.Background()) -} - -func (o GetVm2CloneOutput) ToGetVm2ClonePtrOutputWithContext(ctx context.Context) GetVm2ClonePtrOutput { - return o.ApplyTWithContext(ctx, func(_ context.Context, v GetVm2Clone) *GetVm2Clone { - return &v - }).(GetVm2ClonePtrOutput) -} - -// The ID of the VM to clone. -func (o GetVm2CloneOutput) Id() pulumi.IntOutput { - return o.ApplyT(func(v GetVm2Clone) int { return v.Id }).(pulumi.IntOutput) -} - -// The number of retries to perform when cloning the VM (default: 3). -func (o GetVm2CloneOutput) Retries() pulumi.IntOutput { - return o.ApplyT(func(v GetVm2Clone) int { return v.Retries }).(pulumi.IntOutput) -} - -type GetVm2ClonePtrOutput struct{ *pulumi.OutputState } - -func (GetVm2ClonePtrOutput) ElementType() reflect.Type { - return reflect.TypeOf((**GetVm2Clone)(nil)).Elem() -} - -func (o GetVm2ClonePtrOutput) ToGetVm2ClonePtrOutput() GetVm2ClonePtrOutput { - return o -} - -func (o GetVm2ClonePtrOutput) ToGetVm2ClonePtrOutputWithContext(ctx context.Context) GetVm2ClonePtrOutput { - return o -} - -func (o GetVm2ClonePtrOutput) Elem() GetVm2CloneOutput { - return o.ApplyT(func(v *GetVm2Clone) GetVm2Clone { - if v != nil { - return *v - } - var ret GetVm2Clone - return ret - }).(GetVm2CloneOutput) -} - -// The ID of the VM to clone. -func (o GetVm2ClonePtrOutput) Id() pulumi.IntPtrOutput { - return o.ApplyT(func(v *GetVm2Clone) *int { - if v == nil { - return nil - } - return &v.Id - }).(pulumi.IntPtrOutput) -} - -// The number of retries to perform when cloning the VM (default: 3). -func (o GetVm2ClonePtrOutput) Retries() pulumi.IntPtrOutput { - return o.ApplyT(func(v *GetVm2Clone) *int { - if v == nil { - return nil - } - return &v.Retries - }).(pulumi.IntPtrOutput) -} - type GetVm2Cpu struct { // List of host cores used to execute guest processes, for example: '0,5,8-11' Affinity string `pulumi:"affinity"` @@ -1764,8 +1608,6 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetContainersContainerArrayInput)(nil)).Elem(), GetContainersContainerArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetContainersFilterInput)(nil)).Elem(), GetContainersFilterArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetContainersFilterArrayInput)(nil)).Elem(), GetContainersFilterArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetVm2CloneInput)(nil)).Elem(), GetVm2CloneArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetVm2ClonePtrInput)(nil)).Elem(), GetVm2CloneArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetVm2CpuInput)(nil)).Elem(), GetVm2CpuArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetVm2CpuPtrInput)(nil)).Elem(), GetVm2CpuArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetVm2RngInput)(nil)).Elem(), GetVm2RngArgs{}) @@ -1784,8 +1626,6 @@ func init() { pulumi.RegisterOutputType(GetContainersContainerArrayOutput{}) pulumi.RegisterOutputType(GetContainersFilterOutput{}) pulumi.RegisterOutputType(GetContainersFilterArrayOutput{}) - pulumi.RegisterOutputType(GetVm2CloneOutput{}) - pulumi.RegisterOutputType(GetVm2ClonePtrOutput{}) pulumi.RegisterOutputType(GetVm2CpuOutput{}) pulumi.RegisterOutputType(GetVm2CpuPtrOutput{}) pulumi.RegisterOutputType(GetVm2RngOutput{}) diff --git a/sdk/go/proxmoxve/realm/init.go b/sdk/go/proxmoxve/realm/init.go new file mode 100644 index 00000000..e2d99085 --- /dev/null +++ b/sdk/go/proxmoxve/realm/init.go @@ -0,0 +1,51 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package realm + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "proxmoxve:Realm/ldap:Ldap": + r = &Ldap{} + case "proxmoxve:Realm/sync:Sync": + r = &Sync{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "proxmoxve", + "Realm/ldap", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Realm/sync", + &module{version}, + ) +} diff --git a/sdk/go/proxmoxve/realm/ldap.go b/sdk/go/proxmoxve/realm/ldap.go new file mode 100644 index 00000000..7ef4878a --- /dev/null +++ b/sdk/go/proxmoxve/realm/ldap.go @@ -0,0 +1,629 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package realm + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Import +// +// #!/usr/bin/env sh +// +// LDAP realms can be imported using the realm identifier, e.g.: +// +// ```sh +// $ pulumi import proxmoxve:Realm/ldap:Ldap example example.com +// ``` +// +// -> When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform. +type Ldap struct { + pulumi.CustomResourceState + + // LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + BaseDn pulumi.StringOutput `pulumi:"baseDn"` + // LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + BindDn pulumi.StringPtrOutput `pulumi:"bindDn"` + // Password for the bind DN. Note: stored in Proxmox but not returned by API. + BindPassword pulumi.StringPtrOutput `pulumi:"bindPassword"` + // Path to CA certificate file for SSL verification. + CaPath pulumi.StringPtrOutput `pulumi:"caPath"` + // Enable case-sensitive username matching. + CaseSensitive pulumi.BoolOutput `pulumi:"caseSensitive"` + // Path to client certificate key. + CertKeyPath pulumi.StringPtrOutput `pulumi:"certKeyPath"` + // Path to client certificate for SSL authentication. + CertPath pulumi.StringPtrOutput `pulumi:"certPath"` + // Description of the realm. + Comment pulumi.StringPtrOutput `pulumi:"comment"` + // Use this realm as the default for login. + Default pulumi.BoolOutput `pulumi:"default"` + // LDAP filter for user searches. + Filter pulumi.StringPtrOutput `pulumi:"filter"` + // LDAP objectClasses for groups (comma-separated). + GroupClasses pulumi.StringPtrOutput `pulumi:"groupClasses"` + // LDAP base DN for group searches. + GroupDn pulumi.StringPtrOutput `pulumi:"groupDn"` + // LDAP filter for group searches. + GroupFilter pulumi.StringPtrOutput `pulumi:"groupFilter"` + // LDAP attribute representing the group name. + GroupNameAttr pulumi.StringPtrOutput `pulumi:"groupNameAttr"` + // LDAP connection mode (ldap, ldaps, ldap+starttls). + Mode pulumi.StringPtrOutput `pulumi:"mode"` + // LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + Port pulumi.IntPtrOutput `pulumi:"port"` + // Realm identifier (e.g., 'example.com'). + Realm pulumi.StringOutput `pulumi:"realm"` + // Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + // + // Deprecated: Deprecated by Proxmox: use mode instead. + Secure pulumi.BoolOutput `pulumi:"secure"` + // Primary LDAP server hostname or IP address. + Server1 pulumi.StringOutput `pulumi:"server1"` + // Fallback LDAP server hostname or IP address. + Server2 pulumi.StringPtrOutput `pulumi:"server2"` + // SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + SslVersion pulumi.StringPtrOutput `pulumi:"sslVersion"` + // Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + SyncAttributes pulumi.StringPtrOutput `pulumi:"syncAttributes"` + // Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + SyncDefaultsOptions pulumi.StringPtrOutput `pulumi:"syncDefaultsOptions"` + // LDAP attribute representing the username. + UserAttr pulumi.StringOutput `pulumi:"userAttr"` + // LDAP objectClasses for users (comma-separated). + UserClasses pulumi.StringPtrOutput `pulumi:"userClasses"` + // Verify LDAP server SSL certificate. + Verify pulumi.BoolOutput `pulumi:"verify"` +} + +// NewLdap registers a new resource with the given unique name, arguments, and options. +func NewLdap(ctx *pulumi.Context, + name string, args *LdapArgs, opts ...pulumi.ResourceOption) (*Ldap, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.BaseDn == nil { + return nil, errors.New("invalid value for required argument 'BaseDn'") + } + if args.Realm == nil { + return nil, errors.New("invalid value for required argument 'Realm'") + } + if args.Server1 == nil { + return nil, errors.New("invalid value for required argument 'Server1'") + } + if args.BindPassword != nil { + args.BindPassword = pulumi.ToSecret(args.BindPassword).(pulumi.StringPtrInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "bindPassword", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Ldap + err := ctx.RegisterResource("proxmoxve:Realm/ldap:Ldap", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetLdap gets an existing Ldap resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetLdap(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *LdapState, opts ...pulumi.ResourceOption) (*Ldap, error) { + var resource Ldap + err := ctx.ReadResource("proxmoxve:Realm/ldap:Ldap", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Ldap resources. +type ldapState struct { + // LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + BaseDn *string `pulumi:"baseDn"` + // LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + BindDn *string `pulumi:"bindDn"` + // Password for the bind DN. Note: stored in Proxmox but not returned by API. + BindPassword *string `pulumi:"bindPassword"` + // Path to CA certificate file for SSL verification. + CaPath *string `pulumi:"caPath"` + // Enable case-sensitive username matching. + CaseSensitive *bool `pulumi:"caseSensitive"` + // Path to client certificate key. + CertKeyPath *string `pulumi:"certKeyPath"` + // Path to client certificate for SSL authentication. + CertPath *string `pulumi:"certPath"` + // Description of the realm. + Comment *string `pulumi:"comment"` + // Use this realm as the default for login. + Default *bool `pulumi:"default"` + // LDAP filter for user searches. + Filter *string `pulumi:"filter"` + // LDAP objectClasses for groups (comma-separated). + GroupClasses *string `pulumi:"groupClasses"` + // LDAP base DN for group searches. + GroupDn *string `pulumi:"groupDn"` + // LDAP filter for group searches. + GroupFilter *string `pulumi:"groupFilter"` + // LDAP attribute representing the group name. + GroupNameAttr *string `pulumi:"groupNameAttr"` + // LDAP connection mode (ldap, ldaps, ldap+starttls). + Mode *string `pulumi:"mode"` + // LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + Port *int `pulumi:"port"` + // Realm identifier (e.g., 'example.com'). + Realm *string `pulumi:"realm"` + // Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + // + // Deprecated: Deprecated by Proxmox: use mode instead. + Secure *bool `pulumi:"secure"` + // Primary LDAP server hostname or IP address. + Server1 *string `pulumi:"server1"` + // Fallback LDAP server hostname or IP address. + Server2 *string `pulumi:"server2"` + // SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + SslVersion *string `pulumi:"sslVersion"` + // Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + SyncAttributes *string `pulumi:"syncAttributes"` + // Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + SyncDefaultsOptions *string `pulumi:"syncDefaultsOptions"` + // LDAP attribute representing the username. + UserAttr *string `pulumi:"userAttr"` + // LDAP objectClasses for users (comma-separated). + UserClasses *string `pulumi:"userClasses"` + // Verify LDAP server SSL certificate. + Verify *bool `pulumi:"verify"` +} + +type LdapState struct { + // LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + BaseDn pulumi.StringPtrInput + // LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + BindDn pulumi.StringPtrInput + // Password for the bind DN. Note: stored in Proxmox but not returned by API. + BindPassword pulumi.StringPtrInput + // Path to CA certificate file for SSL verification. + CaPath pulumi.StringPtrInput + // Enable case-sensitive username matching. + CaseSensitive pulumi.BoolPtrInput + // Path to client certificate key. + CertKeyPath pulumi.StringPtrInput + // Path to client certificate for SSL authentication. + CertPath pulumi.StringPtrInput + // Description of the realm. + Comment pulumi.StringPtrInput + // Use this realm as the default for login. + Default pulumi.BoolPtrInput + // LDAP filter for user searches. + Filter pulumi.StringPtrInput + // LDAP objectClasses for groups (comma-separated). + GroupClasses pulumi.StringPtrInput + // LDAP base DN for group searches. + GroupDn pulumi.StringPtrInput + // LDAP filter for group searches. + GroupFilter pulumi.StringPtrInput + // LDAP attribute representing the group name. + GroupNameAttr pulumi.StringPtrInput + // LDAP connection mode (ldap, ldaps, ldap+starttls). + Mode pulumi.StringPtrInput + // LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + Port pulumi.IntPtrInput + // Realm identifier (e.g., 'example.com'). + Realm pulumi.StringPtrInput + // Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + // + // Deprecated: Deprecated by Proxmox: use mode instead. + Secure pulumi.BoolPtrInput + // Primary LDAP server hostname or IP address. + Server1 pulumi.StringPtrInput + // Fallback LDAP server hostname or IP address. + Server2 pulumi.StringPtrInput + // SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + SslVersion pulumi.StringPtrInput + // Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + SyncAttributes pulumi.StringPtrInput + // Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + SyncDefaultsOptions pulumi.StringPtrInput + // LDAP attribute representing the username. + UserAttr pulumi.StringPtrInput + // LDAP objectClasses for users (comma-separated). + UserClasses pulumi.StringPtrInput + // Verify LDAP server SSL certificate. + Verify pulumi.BoolPtrInput +} + +func (LdapState) ElementType() reflect.Type { + return reflect.TypeOf((*ldapState)(nil)).Elem() +} + +type ldapArgs struct { + // LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + BaseDn string `pulumi:"baseDn"` + // LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + BindDn *string `pulumi:"bindDn"` + // Password for the bind DN. Note: stored in Proxmox but not returned by API. + BindPassword *string `pulumi:"bindPassword"` + // Path to CA certificate file for SSL verification. + CaPath *string `pulumi:"caPath"` + // Enable case-sensitive username matching. + CaseSensitive *bool `pulumi:"caseSensitive"` + // Path to client certificate key. + CertKeyPath *string `pulumi:"certKeyPath"` + // Path to client certificate for SSL authentication. + CertPath *string `pulumi:"certPath"` + // Description of the realm. + Comment *string `pulumi:"comment"` + // Use this realm as the default for login. + Default *bool `pulumi:"default"` + // LDAP filter for user searches. + Filter *string `pulumi:"filter"` + // LDAP objectClasses for groups (comma-separated). + GroupClasses *string `pulumi:"groupClasses"` + // LDAP base DN for group searches. + GroupDn *string `pulumi:"groupDn"` + // LDAP filter for group searches. + GroupFilter *string `pulumi:"groupFilter"` + // LDAP attribute representing the group name. + GroupNameAttr *string `pulumi:"groupNameAttr"` + // LDAP connection mode (ldap, ldaps, ldap+starttls). + Mode *string `pulumi:"mode"` + // LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + Port *int `pulumi:"port"` + // Realm identifier (e.g., 'example.com'). + Realm string `pulumi:"realm"` + // Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + // + // Deprecated: Deprecated by Proxmox: use mode instead. + Secure *bool `pulumi:"secure"` + // Primary LDAP server hostname or IP address. + Server1 string `pulumi:"server1"` + // Fallback LDAP server hostname or IP address. + Server2 *string `pulumi:"server2"` + // SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + SslVersion *string `pulumi:"sslVersion"` + // Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + SyncAttributes *string `pulumi:"syncAttributes"` + // Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + SyncDefaultsOptions *string `pulumi:"syncDefaultsOptions"` + // LDAP attribute representing the username. + UserAttr *string `pulumi:"userAttr"` + // LDAP objectClasses for users (comma-separated). + UserClasses *string `pulumi:"userClasses"` + // Verify LDAP server SSL certificate. + Verify *bool `pulumi:"verify"` +} + +// The set of arguments for constructing a Ldap resource. +type LdapArgs struct { + // LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + BaseDn pulumi.StringInput + // LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + BindDn pulumi.StringPtrInput + // Password for the bind DN. Note: stored in Proxmox but not returned by API. + BindPassword pulumi.StringPtrInput + // Path to CA certificate file for SSL verification. + CaPath pulumi.StringPtrInput + // Enable case-sensitive username matching. + CaseSensitive pulumi.BoolPtrInput + // Path to client certificate key. + CertKeyPath pulumi.StringPtrInput + // Path to client certificate for SSL authentication. + CertPath pulumi.StringPtrInput + // Description of the realm. + Comment pulumi.StringPtrInput + // Use this realm as the default for login. + Default pulumi.BoolPtrInput + // LDAP filter for user searches. + Filter pulumi.StringPtrInput + // LDAP objectClasses for groups (comma-separated). + GroupClasses pulumi.StringPtrInput + // LDAP base DN for group searches. + GroupDn pulumi.StringPtrInput + // LDAP filter for group searches. + GroupFilter pulumi.StringPtrInput + // LDAP attribute representing the group name. + GroupNameAttr pulumi.StringPtrInput + // LDAP connection mode (ldap, ldaps, ldap+starttls). + Mode pulumi.StringPtrInput + // LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + Port pulumi.IntPtrInput + // Realm identifier (e.g., 'example.com'). + Realm pulumi.StringInput + // Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + // + // Deprecated: Deprecated by Proxmox: use mode instead. + Secure pulumi.BoolPtrInput + // Primary LDAP server hostname or IP address. + Server1 pulumi.StringInput + // Fallback LDAP server hostname or IP address. + Server2 pulumi.StringPtrInput + // SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + SslVersion pulumi.StringPtrInput + // Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + SyncAttributes pulumi.StringPtrInput + // Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + SyncDefaultsOptions pulumi.StringPtrInput + // LDAP attribute representing the username. + UserAttr pulumi.StringPtrInput + // LDAP objectClasses for users (comma-separated). + UserClasses pulumi.StringPtrInput + // Verify LDAP server SSL certificate. + Verify pulumi.BoolPtrInput +} + +func (LdapArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ldapArgs)(nil)).Elem() +} + +type LdapInput interface { + pulumi.Input + + ToLdapOutput() LdapOutput + ToLdapOutputWithContext(ctx context.Context) LdapOutput +} + +func (*Ldap) ElementType() reflect.Type { + return reflect.TypeOf((**Ldap)(nil)).Elem() +} + +func (i *Ldap) ToLdapOutput() LdapOutput { + return i.ToLdapOutputWithContext(context.Background()) +} + +func (i *Ldap) ToLdapOutputWithContext(ctx context.Context) LdapOutput { + return pulumi.ToOutputWithContext(ctx, i).(LdapOutput) +} + +// LdapArrayInput is an input type that accepts LdapArray and LdapArrayOutput values. +// You can construct a concrete instance of `LdapArrayInput` via: +// +// LdapArray{ LdapArgs{...} } +type LdapArrayInput interface { + pulumi.Input + + ToLdapArrayOutput() LdapArrayOutput + ToLdapArrayOutputWithContext(context.Context) LdapArrayOutput +} + +type LdapArray []LdapInput + +func (LdapArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Ldap)(nil)).Elem() +} + +func (i LdapArray) ToLdapArrayOutput() LdapArrayOutput { + return i.ToLdapArrayOutputWithContext(context.Background()) +} + +func (i LdapArray) ToLdapArrayOutputWithContext(ctx context.Context) LdapArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(LdapArrayOutput) +} + +// LdapMapInput is an input type that accepts LdapMap and LdapMapOutput values. +// You can construct a concrete instance of `LdapMapInput` via: +// +// LdapMap{ "key": LdapArgs{...} } +type LdapMapInput interface { + pulumi.Input + + ToLdapMapOutput() LdapMapOutput + ToLdapMapOutputWithContext(context.Context) LdapMapOutput +} + +type LdapMap map[string]LdapInput + +func (LdapMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Ldap)(nil)).Elem() +} + +func (i LdapMap) ToLdapMapOutput() LdapMapOutput { + return i.ToLdapMapOutputWithContext(context.Background()) +} + +func (i LdapMap) ToLdapMapOutputWithContext(ctx context.Context) LdapMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(LdapMapOutput) +} + +type LdapOutput struct{ *pulumi.OutputState } + +func (LdapOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Ldap)(nil)).Elem() +} + +func (o LdapOutput) ToLdapOutput() LdapOutput { + return o +} + +func (o LdapOutput) ToLdapOutputWithContext(ctx context.Context) LdapOutput { + return o +} + +// LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). +func (o LdapOutput) BaseDn() pulumi.StringOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringOutput { return v.BaseDn }).(pulumi.StringOutput) +} + +// LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). +func (o LdapOutput) BindDn() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.BindDn }).(pulumi.StringPtrOutput) +} + +// Password for the bind DN. Note: stored in Proxmox but not returned by API. +func (o LdapOutput) BindPassword() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.BindPassword }).(pulumi.StringPtrOutput) +} + +// Path to CA certificate file for SSL verification. +func (o LdapOutput) CaPath() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.CaPath }).(pulumi.StringPtrOutput) +} + +// Enable case-sensitive username matching. +func (o LdapOutput) CaseSensitive() pulumi.BoolOutput { + return o.ApplyT(func(v *Ldap) pulumi.BoolOutput { return v.CaseSensitive }).(pulumi.BoolOutput) +} + +// Path to client certificate key. +func (o LdapOutput) CertKeyPath() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.CertKeyPath }).(pulumi.StringPtrOutput) +} + +// Path to client certificate for SSL authentication. +func (o LdapOutput) CertPath() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.CertPath }).(pulumi.StringPtrOutput) +} + +// Description of the realm. +func (o LdapOutput) Comment() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.Comment }).(pulumi.StringPtrOutput) +} + +// Use this realm as the default for login. +func (o LdapOutput) Default() pulumi.BoolOutput { + return o.ApplyT(func(v *Ldap) pulumi.BoolOutput { return v.Default }).(pulumi.BoolOutput) +} + +// LDAP filter for user searches. +func (o LdapOutput) Filter() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.Filter }).(pulumi.StringPtrOutput) +} + +// LDAP objectClasses for groups (comma-separated). +func (o LdapOutput) GroupClasses() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.GroupClasses }).(pulumi.StringPtrOutput) +} + +// LDAP base DN for group searches. +func (o LdapOutput) GroupDn() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.GroupDn }).(pulumi.StringPtrOutput) +} + +// LDAP filter for group searches. +func (o LdapOutput) GroupFilter() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.GroupFilter }).(pulumi.StringPtrOutput) +} + +// LDAP attribute representing the group name. +func (o LdapOutput) GroupNameAttr() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.GroupNameAttr }).(pulumi.StringPtrOutput) +} + +// LDAP connection mode (ldap, ldaps, ldap+starttls). +func (o LdapOutput) Mode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.Mode }).(pulumi.StringPtrOutput) +} + +// LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). +func (o LdapOutput) Port() pulumi.IntPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.IntPtrOutput { return v.Port }).(pulumi.IntPtrOutput) +} + +// Realm identifier (e.g., 'example.com'). +func (o LdapOutput) Realm() pulumi.StringOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringOutput { return v.Realm }).(pulumi.StringOutput) +} + +// Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. +// +// Deprecated: Deprecated by Proxmox: use mode instead. +func (o LdapOutput) Secure() pulumi.BoolOutput { + return o.ApplyT(func(v *Ldap) pulumi.BoolOutput { return v.Secure }).(pulumi.BoolOutput) +} + +// Primary LDAP server hostname or IP address. +func (o LdapOutput) Server1() pulumi.StringOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringOutput { return v.Server1 }).(pulumi.StringOutput) +} + +// Fallback LDAP server hostname or IP address. +func (o LdapOutput) Server2() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.Server2 }).(pulumi.StringPtrOutput) +} + +// SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). +func (o LdapOutput) SslVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.SslVersion }).(pulumi.StringPtrOutput) +} + +// Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). +func (o LdapOutput) SyncAttributes() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.SyncAttributes }).(pulumi.StringPtrOutput) +} + +// Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. +func (o LdapOutput) SyncDefaultsOptions() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.SyncDefaultsOptions }).(pulumi.StringPtrOutput) +} + +// LDAP attribute representing the username. +func (o LdapOutput) UserAttr() pulumi.StringOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringOutput { return v.UserAttr }).(pulumi.StringOutput) +} + +// LDAP objectClasses for users (comma-separated). +func (o LdapOutput) UserClasses() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Ldap) pulumi.StringPtrOutput { return v.UserClasses }).(pulumi.StringPtrOutput) +} + +// Verify LDAP server SSL certificate. +func (o LdapOutput) Verify() pulumi.BoolOutput { + return o.ApplyT(func(v *Ldap) pulumi.BoolOutput { return v.Verify }).(pulumi.BoolOutput) +} + +type LdapArrayOutput struct{ *pulumi.OutputState } + +func (LdapArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Ldap)(nil)).Elem() +} + +func (o LdapArrayOutput) ToLdapArrayOutput() LdapArrayOutput { + return o +} + +func (o LdapArrayOutput) ToLdapArrayOutputWithContext(ctx context.Context) LdapArrayOutput { + return o +} + +func (o LdapArrayOutput) Index(i pulumi.IntInput) LdapOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Ldap { + return vs[0].([]*Ldap)[vs[1].(int)] + }).(LdapOutput) +} + +type LdapMapOutput struct{ *pulumi.OutputState } + +func (LdapMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Ldap)(nil)).Elem() +} + +func (o LdapMapOutput) ToLdapMapOutput() LdapMapOutput { + return o +} + +func (o LdapMapOutput) ToLdapMapOutputWithContext(ctx context.Context) LdapMapOutput { + return o +} + +func (o LdapMapOutput) MapIndex(k pulumi.StringInput) LdapOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Ldap { + return vs[0].(map[string]*Ldap)[vs[1].(string)] + }).(LdapOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*LdapInput)(nil)).Elem(), &Ldap{}) + pulumi.RegisterInputType(reflect.TypeOf((*LdapArrayInput)(nil)).Elem(), LdapArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*LdapMapInput)(nil)).Elem(), LdapMap{}) + pulumi.RegisterOutputType(LdapOutput{}) + pulumi.RegisterOutputType(LdapArrayOutput{}) + pulumi.RegisterOutputType(LdapMapOutput{}) +} diff --git a/sdk/go/proxmoxve/realm/sync.go b/sdk/go/proxmoxve/realm/sync.go new file mode 100644 index 00000000..4110937c --- /dev/null +++ b/sdk/go/proxmoxve/realm/sync.go @@ -0,0 +1,345 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package realm + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Import +// +// #!/usr/bin/env sh +// +// Realm sync resources can be imported by realm name, e.g.: +// +// ```sh +// $ pulumi import proxmoxve:Realm/sync:Sync example example.com +// ``` +// +// Importing only populates the `realm` and `id` attributes; other fields must +// +// be set in configuration. +type Sync struct { + pulumi.CustomResourceState + + // Only simulate the sync without applying changes. + DryRun pulumi.BoolPtrOutput `pulumi:"dryRun"` + // Enable newly synced users. + EnableNew pulumi.BoolPtrOutput `pulumi:"enableNew"` + // Perform a full sync. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Full pulumi.BoolPtrOutput `pulumi:"full"` + // Purge removed entries. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Purge pulumi.BoolPtrOutput `pulumi:"purge"` + // Name of the realm to synchronize. + Realm pulumi.StringOutput `pulumi:"realm"` + // How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + RemoveVanished pulumi.StringPtrOutput `pulumi:"removeVanished"` + // Sync scope: users, groups, or both. + Scope pulumi.StringPtrOutput `pulumi:"scope"` +} + +// NewSync registers a new resource with the given unique name, arguments, and options. +func NewSync(ctx *pulumi.Context, + name string, args *SyncArgs, opts ...pulumi.ResourceOption) (*Sync, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Realm == nil { + return nil, errors.New("invalid value for required argument 'Realm'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Sync + err := ctx.RegisterResource("proxmoxve:Realm/sync:Sync", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetSync gets an existing Sync resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetSync(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *SyncState, opts ...pulumi.ResourceOption) (*Sync, error) { + var resource Sync + err := ctx.ReadResource("proxmoxve:Realm/sync:Sync", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Sync resources. +type syncState struct { + // Only simulate the sync without applying changes. + DryRun *bool `pulumi:"dryRun"` + // Enable newly synced users. + EnableNew *bool `pulumi:"enableNew"` + // Perform a full sync. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Full *bool `pulumi:"full"` + // Purge removed entries. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Purge *bool `pulumi:"purge"` + // Name of the realm to synchronize. + Realm *string `pulumi:"realm"` + // How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + RemoveVanished *string `pulumi:"removeVanished"` + // Sync scope: users, groups, or both. + Scope *string `pulumi:"scope"` +} + +type SyncState struct { + // Only simulate the sync without applying changes. + DryRun pulumi.BoolPtrInput + // Enable newly synced users. + EnableNew pulumi.BoolPtrInput + // Perform a full sync. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Full pulumi.BoolPtrInput + // Purge removed entries. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Purge pulumi.BoolPtrInput + // Name of the realm to synchronize. + Realm pulumi.StringPtrInput + // How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + RemoveVanished pulumi.StringPtrInput + // Sync scope: users, groups, or both. + Scope pulumi.StringPtrInput +} + +func (SyncState) ElementType() reflect.Type { + return reflect.TypeOf((*syncState)(nil)).Elem() +} + +type syncArgs struct { + // Only simulate the sync without applying changes. + DryRun *bool `pulumi:"dryRun"` + // Enable newly synced users. + EnableNew *bool `pulumi:"enableNew"` + // Perform a full sync. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Full *bool `pulumi:"full"` + // Purge removed entries. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Purge *bool `pulumi:"purge"` + // Name of the realm to synchronize. + Realm string `pulumi:"realm"` + // How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + RemoveVanished *string `pulumi:"removeVanished"` + // Sync scope: users, groups, or both. + Scope *string `pulumi:"scope"` +} + +// The set of arguments for constructing a Sync resource. +type SyncArgs struct { + // Only simulate the sync without applying changes. + DryRun pulumi.BoolPtrInput + // Enable newly synced users. + EnableNew pulumi.BoolPtrInput + // Perform a full sync. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Full pulumi.BoolPtrInput + // Purge removed entries. + // + // Deprecated: Deprecated by Proxmox: use removeVanished instead. + Purge pulumi.BoolPtrInput + // Name of the realm to synchronize. + Realm pulumi.StringInput + // How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + RemoveVanished pulumi.StringPtrInput + // Sync scope: users, groups, or both. + Scope pulumi.StringPtrInput +} + +func (SyncArgs) ElementType() reflect.Type { + return reflect.TypeOf((*syncArgs)(nil)).Elem() +} + +type SyncInput interface { + pulumi.Input + + ToSyncOutput() SyncOutput + ToSyncOutputWithContext(ctx context.Context) SyncOutput +} + +func (*Sync) ElementType() reflect.Type { + return reflect.TypeOf((**Sync)(nil)).Elem() +} + +func (i *Sync) ToSyncOutput() SyncOutput { + return i.ToSyncOutputWithContext(context.Background()) +} + +func (i *Sync) ToSyncOutputWithContext(ctx context.Context) SyncOutput { + return pulumi.ToOutputWithContext(ctx, i).(SyncOutput) +} + +// SyncArrayInput is an input type that accepts SyncArray and SyncArrayOutput values. +// You can construct a concrete instance of `SyncArrayInput` via: +// +// SyncArray{ SyncArgs{...} } +type SyncArrayInput interface { + pulumi.Input + + ToSyncArrayOutput() SyncArrayOutput + ToSyncArrayOutputWithContext(context.Context) SyncArrayOutput +} + +type SyncArray []SyncInput + +func (SyncArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Sync)(nil)).Elem() +} + +func (i SyncArray) ToSyncArrayOutput() SyncArrayOutput { + return i.ToSyncArrayOutputWithContext(context.Background()) +} + +func (i SyncArray) ToSyncArrayOutputWithContext(ctx context.Context) SyncArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(SyncArrayOutput) +} + +// SyncMapInput is an input type that accepts SyncMap and SyncMapOutput values. +// You can construct a concrete instance of `SyncMapInput` via: +// +// SyncMap{ "key": SyncArgs{...} } +type SyncMapInput interface { + pulumi.Input + + ToSyncMapOutput() SyncMapOutput + ToSyncMapOutputWithContext(context.Context) SyncMapOutput +} + +type SyncMap map[string]SyncInput + +func (SyncMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Sync)(nil)).Elem() +} + +func (i SyncMap) ToSyncMapOutput() SyncMapOutput { + return i.ToSyncMapOutputWithContext(context.Background()) +} + +func (i SyncMap) ToSyncMapOutputWithContext(ctx context.Context) SyncMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(SyncMapOutput) +} + +type SyncOutput struct{ *pulumi.OutputState } + +func (SyncOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Sync)(nil)).Elem() +} + +func (o SyncOutput) ToSyncOutput() SyncOutput { + return o +} + +func (o SyncOutput) ToSyncOutputWithContext(ctx context.Context) SyncOutput { + return o +} + +// Only simulate the sync without applying changes. +func (o SyncOutput) DryRun() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Sync) pulumi.BoolPtrOutput { return v.DryRun }).(pulumi.BoolPtrOutput) +} + +// Enable newly synced users. +func (o SyncOutput) EnableNew() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Sync) pulumi.BoolPtrOutput { return v.EnableNew }).(pulumi.BoolPtrOutput) +} + +// Perform a full sync. +// +// Deprecated: Deprecated by Proxmox: use removeVanished instead. +func (o SyncOutput) Full() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Sync) pulumi.BoolPtrOutput { return v.Full }).(pulumi.BoolPtrOutput) +} + +// Purge removed entries. +// +// Deprecated: Deprecated by Proxmox: use removeVanished instead. +func (o SyncOutput) Purge() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Sync) pulumi.BoolPtrOutput { return v.Purge }).(pulumi.BoolPtrOutput) +} + +// Name of the realm to synchronize. +func (o SyncOutput) Realm() pulumi.StringOutput { + return o.ApplyT(func(v *Sync) pulumi.StringOutput { return v.Realm }).(pulumi.StringOutput) +} + +// How to handle vanished entries (e.g. `acl;properties;entry` or `none`). +func (o SyncOutput) RemoveVanished() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Sync) pulumi.StringPtrOutput { return v.RemoveVanished }).(pulumi.StringPtrOutput) +} + +// Sync scope: users, groups, or both. +func (o SyncOutput) Scope() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Sync) pulumi.StringPtrOutput { return v.Scope }).(pulumi.StringPtrOutput) +} + +type SyncArrayOutput struct{ *pulumi.OutputState } + +func (SyncArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Sync)(nil)).Elem() +} + +func (o SyncArrayOutput) ToSyncArrayOutput() SyncArrayOutput { + return o +} + +func (o SyncArrayOutput) ToSyncArrayOutputWithContext(ctx context.Context) SyncArrayOutput { + return o +} + +func (o SyncArrayOutput) Index(i pulumi.IntInput) SyncOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Sync { + return vs[0].([]*Sync)[vs[1].(int)] + }).(SyncOutput) +} + +type SyncMapOutput struct{ *pulumi.OutputState } + +func (SyncMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Sync)(nil)).Elem() +} + +func (o SyncMapOutput) ToSyncMapOutput() SyncMapOutput { + return o +} + +func (o SyncMapOutput) ToSyncMapOutputWithContext(ctx context.Context) SyncMapOutput { + return o +} + +func (o SyncMapOutput) MapIndex(k pulumi.StringInput) SyncOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Sync { + return vs[0].(map[string]*Sync)[vs[1].(string)] + }).(SyncOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*SyncInput)(nil)).Elem(), &Sync{}) + pulumi.RegisterInputType(reflect.TypeOf((*SyncArrayInput)(nil)).Elem(), SyncArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*SyncMapInput)(nil)).Elem(), SyncMap{}) + pulumi.RegisterOutputType(SyncOutput{}) + pulumi.RegisterOutputType(SyncArrayOutput{}) + pulumi.RegisterOutputType(SyncMapOutput{}) +} diff --git a/sdk/go/proxmoxve/sdn/fabric/getOpenfabric.go b/sdk/go/proxmoxve/sdn/fabric/getOpenfabric.go new file mode 100644 index 00000000..75dc5060 --- /dev/null +++ b/sdk/go/proxmoxve/sdn/fabric/getOpenfabric.go @@ -0,0 +1,132 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package fabric + +import ( + "context" + "reflect" + + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := sdn.GetOpenfabric(ctx, &fabric.GetOpenfabricArgs{ +// Id: "main-fabric", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetOpenfabric(ctx *pulumi.Context, args *GetOpenfabricArgs, opts ...pulumi.InvokeOption) (*GetOpenfabricResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetOpenfabricResult + err := ctx.Invoke("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getOpenfabric. +type GetOpenfabricArgs struct { + // The unique identifier of the SDN fabric. + Id string `pulumi:"id"` +} + +// A collection of values returned by getOpenfabric. +type GetOpenfabricResult struct { + // The csnpInterval property for OpenFabric. + CsnpInterval int `pulumi:"csnpInterval"` + // The helloInterval property for OpenFabric. + HelloInterval int `pulumi:"helloInterval"` + // The unique identifier of the SDN fabric. + Id string `pulumi:"id"` + // IPv6 prefix cidr for the fabric. + Ip6Prefix string `pulumi:"ip6Prefix"` + // IPv4 prefix cidr for the fabric. + IpPrefix string `pulumi:"ipPrefix"` +} + +func GetOpenfabricOutput(ctx *pulumi.Context, args GetOpenfabricOutputArgs, opts ...pulumi.InvokeOption) GetOpenfabricResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (GetOpenfabricResultOutput, error) { + args := v.(GetOpenfabricArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", args, GetOpenfabricResultOutput{}, options).(GetOpenfabricResultOutput), nil + }).(GetOpenfabricResultOutput) +} + +// A collection of arguments for invoking getOpenfabric. +type GetOpenfabricOutputArgs struct { + // The unique identifier of the SDN fabric. + Id pulumi.StringInput `pulumi:"id"` +} + +func (GetOpenfabricOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetOpenfabricArgs)(nil)).Elem() +} + +// A collection of values returned by getOpenfabric. +type GetOpenfabricResultOutput struct{ *pulumi.OutputState } + +func (GetOpenfabricResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetOpenfabricResult)(nil)).Elem() +} + +func (o GetOpenfabricResultOutput) ToGetOpenfabricResultOutput() GetOpenfabricResultOutput { + return o +} + +func (o GetOpenfabricResultOutput) ToGetOpenfabricResultOutputWithContext(ctx context.Context) GetOpenfabricResultOutput { + return o +} + +// The csnpInterval property for OpenFabric. +func (o GetOpenfabricResultOutput) CsnpInterval() pulumi.IntOutput { + return o.ApplyT(func(v GetOpenfabricResult) int { return v.CsnpInterval }).(pulumi.IntOutput) +} + +// The helloInterval property for OpenFabric. +func (o GetOpenfabricResultOutput) HelloInterval() pulumi.IntOutput { + return o.ApplyT(func(v GetOpenfabricResult) int { return v.HelloInterval }).(pulumi.IntOutput) +} + +// The unique identifier of the SDN fabric. +func (o GetOpenfabricResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetOpenfabricResult) string { return v.Id }).(pulumi.StringOutput) +} + +// IPv6 prefix cidr for the fabric. +func (o GetOpenfabricResultOutput) Ip6Prefix() pulumi.StringOutput { + return o.ApplyT(func(v GetOpenfabricResult) string { return v.Ip6Prefix }).(pulumi.StringOutput) +} + +// IPv4 prefix cidr for the fabric. +func (o GetOpenfabricResultOutput) IpPrefix() pulumi.StringOutput { + return o.ApplyT(func(v GetOpenfabricResult) string { return v.IpPrefix }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(GetOpenfabricResultOutput{}) +} diff --git a/sdk/go/proxmoxve/sdn/fabric/getOspf.go b/sdk/go/proxmoxve/sdn/fabric/getOspf.go new file mode 100644 index 00000000..c17cd821 --- /dev/null +++ b/sdk/go/proxmoxve/sdn/fabric/getOspf.go @@ -0,0 +1,118 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package fabric + +import ( + "context" + "reflect" + + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := sdn.GetOspf(ctx, &fabric.GetOspfArgs{ +// Id: "main-fabric", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetOspf(ctx *pulumi.Context, args *GetOspfArgs, opts ...pulumi.InvokeOption) (*GetOspfResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetOspfResult + err := ctx.Invoke("proxmoxve:Sdn/fabric/getOspf:getOspf", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getOspf. +type GetOspfArgs struct { + // The unique identifier of the SDN fabric. + Id string `pulumi:"id"` +} + +// A collection of values returned by getOspf. +type GetOspfResult struct { + // OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + Area string `pulumi:"area"` + // The unique identifier of the SDN fabric. + Id string `pulumi:"id"` + // IPv4 prefix cidr for the fabric. + IpPrefix string `pulumi:"ipPrefix"` +} + +func GetOspfOutput(ctx *pulumi.Context, args GetOspfOutputArgs, opts ...pulumi.InvokeOption) GetOspfResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (GetOspfResultOutput, error) { + args := v.(GetOspfArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("proxmoxve:Sdn/fabric/getOspf:getOspf", args, GetOspfResultOutput{}, options).(GetOspfResultOutput), nil + }).(GetOspfResultOutput) +} + +// A collection of arguments for invoking getOspf. +type GetOspfOutputArgs struct { + // The unique identifier of the SDN fabric. + Id pulumi.StringInput `pulumi:"id"` +} + +func (GetOspfOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetOspfArgs)(nil)).Elem() +} + +// A collection of values returned by getOspf. +type GetOspfResultOutput struct{ *pulumi.OutputState } + +func (GetOspfResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetOspfResult)(nil)).Elem() +} + +func (o GetOspfResultOutput) ToGetOspfResultOutput() GetOspfResultOutput { + return o +} + +func (o GetOspfResultOutput) ToGetOspfResultOutputWithContext(ctx context.Context) GetOspfResultOutput { + return o +} + +// OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. +func (o GetOspfResultOutput) Area() pulumi.StringOutput { + return o.ApplyT(func(v GetOspfResult) string { return v.Area }).(pulumi.StringOutput) +} + +// The unique identifier of the SDN fabric. +func (o GetOspfResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetOspfResult) string { return v.Id }).(pulumi.StringOutput) +} + +// IPv4 prefix cidr for the fabric. +func (o GetOspfResultOutput) IpPrefix() pulumi.StringOutput { + return o.ApplyT(func(v GetOspfResult) string { return v.IpPrefix }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(GetOspfResultOutput{}) +} diff --git a/sdk/go/proxmoxve/sdn/fabric/node/getOpenfabric.go b/sdk/go/proxmoxve/sdn/fabric/node/getOpenfabric.go new file mode 100644 index 00000000..723067cb --- /dev/null +++ b/sdk/go/proxmoxve/sdn/fabric/node/getOpenfabric.go @@ -0,0 +1,142 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package node + +import ( + "context" + "reflect" + + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := sdn.GetOpenfabric(ctx, &fabric/node.GetOpenfabricArgs{ +// FabricId: "main-fabric", +// NodeId: "pve", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupOpenfabric(ctx *pulumi.Context, args *LookupOpenfabricArgs, opts ...pulumi.InvokeOption) (*LookupOpenfabricResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupOpenfabricResult + err := ctx.Invoke("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getOpenfabric. +type LookupOpenfabricArgs struct { + // The unique identifier of the SDN fabric. + FabricId string `pulumi:"fabricId"` + // The unique identifier of the SDN fabric node. + NodeId string `pulumi:"nodeId"` +} + +// A collection of values returned by getOpenfabric. +type LookupOpenfabricResult struct { + // The unique identifier of the SDN fabric. + FabricId string `pulumi:"fabricId"` + Id string `pulumi:"id"` + // Set of interface names associated with the fabric node. + InterfaceNames []string `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip string `pulumi:"ip"` + // IPv6 address for the fabric node. + Ip6 string `pulumi:"ip6"` + // The unique identifier of the SDN fabric node. + NodeId string `pulumi:"nodeId"` +} + +func LookupOpenfabricOutput(ctx *pulumi.Context, args LookupOpenfabricOutputArgs, opts ...pulumi.InvokeOption) LookupOpenfabricResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (LookupOpenfabricResultOutput, error) { + args := v.(LookupOpenfabricArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", args, LookupOpenfabricResultOutput{}, options).(LookupOpenfabricResultOutput), nil + }).(LookupOpenfabricResultOutput) +} + +// A collection of arguments for invoking getOpenfabric. +type LookupOpenfabricOutputArgs struct { + // The unique identifier of the SDN fabric. + FabricId pulumi.StringInput `pulumi:"fabricId"` + // The unique identifier of the SDN fabric node. + NodeId pulumi.StringInput `pulumi:"nodeId"` +} + +func (LookupOpenfabricOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupOpenfabricArgs)(nil)).Elem() +} + +// A collection of values returned by getOpenfabric. +type LookupOpenfabricResultOutput struct{ *pulumi.OutputState } + +func (LookupOpenfabricResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupOpenfabricResult)(nil)).Elem() +} + +func (o LookupOpenfabricResultOutput) ToLookupOpenfabricResultOutput() LookupOpenfabricResultOutput { + return o +} + +func (o LookupOpenfabricResultOutput) ToLookupOpenfabricResultOutputWithContext(ctx context.Context) LookupOpenfabricResultOutput { + return o +} + +// The unique identifier of the SDN fabric. +func (o LookupOpenfabricResultOutput) FabricId() pulumi.StringOutput { + return o.ApplyT(func(v LookupOpenfabricResult) string { return v.FabricId }).(pulumi.StringOutput) +} + +func (o LookupOpenfabricResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupOpenfabricResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Set of interface names associated with the fabric node. +func (o LookupOpenfabricResultOutput) InterfaceNames() pulumi.StringArrayOutput { + return o.ApplyT(func(v LookupOpenfabricResult) []string { return v.InterfaceNames }).(pulumi.StringArrayOutput) +} + +// IPv4 address for the fabric node. +func (o LookupOpenfabricResultOutput) Ip() pulumi.StringOutput { + return o.ApplyT(func(v LookupOpenfabricResult) string { return v.Ip }).(pulumi.StringOutput) +} + +// IPv6 address for the fabric node. +func (o LookupOpenfabricResultOutput) Ip6() pulumi.StringOutput { + return o.ApplyT(func(v LookupOpenfabricResult) string { return v.Ip6 }).(pulumi.StringOutput) +} + +// The unique identifier of the SDN fabric node. +func (o LookupOpenfabricResultOutput) NodeId() pulumi.StringOutput { + return o.ApplyT(func(v LookupOpenfabricResult) string { return v.NodeId }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupOpenfabricResultOutput{}) +} diff --git a/sdk/go/proxmoxve/sdn/fabric/node/getOspf.go b/sdk/go/proxmoxve/sdn/fabric/node/getOspf.go new file mode 100644 index 00000000..441b2245 --- /dev/null +++ b/sdk/go/proxmoxve/sdn/fabric/node/getOspf.go @@ -0,0 +1,135 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package node + +import ( + "context" + "reflect" + + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := sdn.GetOspf(ctx, &fabric/node.GetOspfArgs{ +// FabricId: "main-fabric", +// NodeId: "pve", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupOspf(ctx *pulumi.Context, args *LookupOspfArgs, opts ...pulumi.InvokeOption) (*LookupOspfResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupOspfResult + err := ctx.Invoke("proxmoxve:Sdn/fabric/node/getOspf:getOspf", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getOspf. +type LookupOspfArgs struct { + // The unique identifier of the SDN fabric. + FabricId string `pulumi:"fabricId"` + // The unique identifier of the SDN fabric node. + NodeId string `pulumi:"nodeId"` +} + +// A collection of values returned by getOspf. +type LookupOspfResult struct { + // The unique identifier of the SDN fabric. + FabricId string `pulumi:"fabricId"` + Id string `pulumi:"id"` + // Set of interface names associated with the fabric node. + InterfaceNames []string `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip string `pulumi:"ip"` + // The unique identifier of the SDN fabric node. + NodeId string `pulumi:"nodeId"` +} + +func LookupOspfOutput(ctx *pulumi.Context, args LookupOspfOutputArgs, opts ...pulumi.InvokeOption) LookupOspfResultOutput { + return pulumi.ToOutputWithContext(ctx.Context(), args). + ApplyT(func(v interface{}) (LookupOspfResultOutput, error) { + args := v.(LookupOspfArgs) + options := pulumi.InvokeOutputOptions{InvokeOptions: internal.PkgInvokeDefaultOpts(opts)} + return ctx.InvokeOutput("proxmoxve:Sdn/fabric/node/getOspf:getOspf", args, LookupOspfResultOutput{}, options).(LookupOspfResultOutput), nil + }).(LookupOspfResultOutput) +} + +// A collection of arguments for invoking getOspf. +type LookupOspfOutputArgs struct { + // The unique identifier of the SDN fabric. + FabricId pulumi.StringInput `pulumi:"fabricId"` + // The unique identifier of the SDN fabric node. + NodeId pulumi.StringInput `pulumi:"nodeId"` +} + +func (LookupOspfOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupOspfArgs)(nil)).Elem() +} + +// A collection of values returned by getOspf. +type LookupOspfResultOutput struct{ *pulumi.OutputState } + +func (LookupOspfResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupOspfResult)(nil)).Elem() +} + +func (o LookupOspfResultOutput) ToLookupOspfResultOutput() LookupOspfResultOutput { + return o +} + +func (o LookupOspfResultOutput) ToLookupOspfResultOutputWithContext(ctx context.Context) LookupOspfResultOutput { + return o +} + +// The unique identifier of the SDN fabric. +func (o LookupOspfResultOutput) FabricId() pulumi.StringOutput { + return o.ApplyT(func(v LookupOspfResult) string { return v.FabricId }).(pulumi.StringOutput) +} + +func (o LookupOspfResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupOspfResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Set of interface names associated with the fabric node. +func (o LookupOspfResultOutput) InterfaceNames() pulumi.StringArrayOutput { + return o.ApplyT(func(v LookupOspfResult) []string { return v.InterfaceNames }).(pulumi.StringArrayOutput) +} + +// IPv4 address for the fabric node. +func (o LookupOspfResultOutput) Ip() pulumi.StringOutput { + return o.ApplyT(func(v LookupOspfResult) string { return v.Ip }).(pulumi.StringOutput) +} + +// The unique identifier of the SDN fabric node. +func (o LookupOspfResultOutput) NodeId() pulumi.StringOutput { + return o.ApplyT(func(v LookupOspfResult) string { return v.NodeId }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupOspfResultOutput{}) +} diff --git a/sdk/go/proxmoxve/sdn/fabric/node/init.go b/sdk/go/proxmoxve/sdn/fabric/node/init.go new file mode 100644 index 00000000..296b333e --- /dev/null +++ b/sdk/go/proxmoxve/sdn/fabric/node/init.go @@ -0,0 +1,51 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package node + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "proxmoxve:Sdn/fabric/node/openfabric:Openfabric": + r = &Openfabric{} + case "proxmoxve:Sdn/fabric/node/ospf:Ospf": + r = &Ospf{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "proxmoxve", + "Sdn/fabric/node/openfabric", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Sdn/fabric/node/ospf", + &module{version}, + ) +} diff --git a/sdk/go/proxmoxve/sdn/fabric/node/openfabric.go b/sdk/go/proxmoxve/sdn/fabric/node/openfabric.go new file mode 100644 index 00000000..c6be8f07 --- /dev/null +++ b/sdk/go/proxmoxve/sdn/fabric/node/openfabric.go @@ -0,0 +1,325 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package node + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn" +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// main, err := sdnfabric.NewOpenFabric(ctx, "main", &sdnfabric.OpenFabricArgs{ +// FabricId: pulumi.String("main-fabric"), +// IpPrefix: pulumi.String("10.0.0.0/16"), +// }) +// if err != nil { +// return err +// } +// _, err = sdn.NewOpenfabric(ctx, "main", &sdn.OpenfabricArgs{ +// FabricId: main.FabricId, +// NodeId: pulumi.String("pve"), +// Ip: pulumi.String("10.0.0.1"), +// InterfaceNames: pulumi.StringArray{ +// pulumi.String("nic0"), +// pulumi.String("nic1"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type Openfabric struct { + pulumi.CustomResourceState + + // The unique identifier of the SDN fabric. + FabricId pulumi.StringOutput `pulumi:"fabricId"` + // Set of interfaces associated with the fabric node. + InterfaceNames pulumi.StringArrayOutput `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip pulumi.StringPtrOutput `pulumi:"ip"` + // IPv6 address for the fabric node. + Ip6 pulumi.StringPtrOutput `pulumi:"ip6"` + // The unique identifier of the SDN fabric. + NodeId pulumi.StringOutput `pulumi:"nodeId"` +} + +// NewOpenfabric registers a new resource with the given unique name, arguments, and options. +func NewOpenfabric(ctx *pulumi.Context, + name string, args *OpenfabricArgs, opts ...pulumi.ResourceOption) (*Openfabric, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.FabricId == nil { + return nil, errors.New("invalid value for required argument 'FabricId'") + } + if args.InterfaceNames == nil { + return nil, errors.New("invalid value for required argument 'InterfaceNames'") + } + if args.NodeId == nil { + return nil, errors.New("invalid value for required argument 'NodeId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Openfabric + err := ctx.RegisterResource("proxmoxve:Sdn/fabric/node/openfabric:Openfabric", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetOpenfabric gets an existing Openfabric resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetOpenfabric(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *OpenfabricState, opts ...pulumi.ResourceOption) (*Openfabric, error) { + var resource Openfabric + err := ctx.ReadResource("proxmoxve:Sdn/fabric/node/openfabric:Openfabric", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Openfabric resources. +type openfabricState struct { + // The unique identifier of the SDN fabric. + FabricId *string `pulumi:"fabricId"` + // Set of interfaces associated with the fabric node. + InterfaceNames []string `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip *string `pulumi:"ip"` + // IPv6 address for the fabric node. + Ip6 *string `pulumi:"ip6"` + // The unique identifier of the SDN fabric. + NodeId *string `pulumi:"nodeId"` +} + +type OpenfabricState struct { + // The unique identifier of the SDN fabric. + FabricId pulumi.StringPtrInput + // Set of interfaces associated with the fabric node. + InterfaceNames pulumi.StringArrayInput + // IPv4 address for the fabric node. + Ip pulumi.StringPtrInput + // IPv6 address for the fabric node. + Ip6 pulumi.StringPtrInput + // The unique identifier of the SDN fabric. + NodeId pulumi.StringPtrInput +} + +func (OpenfabricState) ElementType() reflect.Type { + return reflect.TypeOf((*openfabricState)(nil)).Elem() +} + +type openfabricArgs struct { + // The unique identifier of the SDN fabric. + FabricId string `pulumi:"fabricId"` + // Set of interfaces associated with the fabric node. + InterfaceNames []string `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip *string `pulumi:"ip"` + // IPv6 address for the fabric node. + Ip6 *string `pulumi:"ip6"` + // The unique identifier of the SDN fabric. + NodeId string `pulumi:"nodeId"` +} + +// The set of arguments for constructing a Openfabric resource. +type OpenfabricArgs struct { + // The unique identifier of the SDN fabric. + FabricId pulumi.StringInput + // Set of interfaces associated with the fabric node. + InterfaceNames pulumi.StringArrayInput + // IPv4 address for the fabric node. + Ip pulumi.StringPtrInput + // IPv6 address for the fabric node. + Ip6 pulumi.StringPtrInput + // The unique identifier of the SDN fabric. + NodeId pulumi.StringInput +} + +func (OpenfabricArgs) ElementType() reflect.Type { + return reflect.TypeOf((*openfabricArgs)(nil)).Elem() +} + +type OpenfabricInput interface { + pulumi.Input + + ToOpenfabricOutput() OpenfabricOutput + ToOpenfabricOutputWithContext(ctx context.Context) OpenfabricOutput +} + +func (*Openfabric) ElementType() reflect.Type { + return reflect.TypeOf((**Openfabric)(nil)).Elem() +} + +func (i *Openfabric) ToOpenfabricOutput() OpenfabricOutput { + return i.ToOpenfabricOutputWithContext(context.Background()) +} + +func (i *Openfabric) ToOpenfabricOutputWithContext(ctx context.Context) OpenfabricOutput { + return pulumi.ToOutputWithContext(ctx, i).(OpenfabricOutput) +} + +// OpenfabricArrayInput is an input type that accepts OpenfabricArray and OpenfabricArrayOutput values. +// You can construct a concrete instance of `OpenfabricArrayInput` via: +// +// OpenfabricArray{ OpenfabricArgs{...} } +type OpenfabricArrayInput interface { + pulumi.Input + + ToOpenfabricArrayOutput() OpenfabricArrayOutput + ToOpenfabricArrayOutputWithContext(context.Context) OpenfabricArrayOutput +} + +type OpenfabricArray []OpenfabricInput + +func (OpenfabricArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Openfabric)(nil)).Elem() +} + +func (i OpenfabricArray) ToOpenfabricArrayOutput() OpenfabricArrayOutput { + return i.ToOpenfabricArrayOutputWithContext(context.Background()) +} + +func (i OpenfabricArray) ToOpenfabricArrayOutputWithContext(ctx context.Context) OpenfabricArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(OpenfabricArrayOutput) +} + +// OpenfabricMapInput is an input type that accepts OpenfabricMap and OpenfabricMapOutput values. +// You can construct a concrete instance of `OpenfabricMapInput` via: +// +// OpenfabricMap{ "key": OpenfabricArgs{...} } +type OpenfabricMapInput interface { + pulumi.Input + + ToOpenfabricMapOutput() OpenfabricMapOutput + ToOpenfabricMapOutputWithContext(context.Context) OpenfabricMapOutput +} + +type OpenfabricMap map[string]OpenfabricInput + +func (OpenfabricMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Openfabric)(nil)).Elem() +} + +func (i OpenfabricMap) ToOpenfabricMapOutput() OpenfabricMapOutput { + return i.ToOpenfabricMapOutputWithContext(context.Background()) +} + +func (i OpenfabricMap) ToOpenfabricMapOutputWithContext(ctx context.Context) OpenfabricMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(OpenfabricMapOutput) +} + +type OpenfabricOutput struct{ *pulumi.OutputState } + +func (OpenfabricOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Openfabric)(nil)).Elem() +} + +func (o OpenfabricOutput) ToOpenfabricOutput() OpenfabricOutput { + return o +} + +func (o OpenfabricOutput) ToOpenfabricOutputWithContext(ctx context.Context) OpenfabricOutput { + return o +} + +// The unique identifier of the SDN fabric. +func (o OpenfabricOutput) FabricId() pulumi.StringOutput { + return o.ApplyT(func(v *Openfabric) pulumi.StringOutput { return v.FabricId }).(pulumi.StringOutput) +} + +// Set of interfaces associated with the fabric node. +func (o OpenfabricOutput) InterfaceNames() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Openfabric) pulumi.StringArrayOutput { return v.InterfaceNames }).(pulumi.StringArrayOutput) +} + +// IPv4 address for the fabric node. +func (o OpenfabricOutput) Ip() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Openfabric) pulumi.StringPtrOutput { return v.Ip }).(pulumi.StringPtrOutput) +} + +// IPv6 address for the fabric node. +func (o OpenfabricOutput) Ip6() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Openfabric) pulumi.StringPtrOutput { return v.Ip6 }).(pulumi.StringPtrOutput) +} + +// The unique identifier of the SDN fabric. +func (o OpenfabricOutput) NodeId() pulumi.StringOutput { + return o.ApplyT(func(v *Openfabric) pulumi.StringOutput { return v.NodeId }).(pulumi.StringOutput) +} + +type OpenfabricArrayOutput struct{ *pulumi.OutputState } + +func (OpenfabricArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Openfabric)(nil)).Elem() +} + +func (o OpenfabricArrayOutput) ToOpenfabricArrayOutput() OpenfabricArrayOutput { + return o +} + +func (o OpenfabricArrayOutput) ToOpenfabricArrayOutputWithContext(ctx context.Context) OpenfabricArrayOutput { + return o +} + +func (o OpenfabricArrayOutput) Index(i pulumi.IntInput) OpenfabricOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Openfabric { + return vs[0].([]*Openfabric)[vs[1].(int)] + }).(OpenfabricOutput) +} + +type OpenfabricMapOutput struct{ *pulumi.OutputState } + +func (OpenfabricMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Openfabric)(nil)).Elem() +} + +func (o OpenfabricMapOutput) ToOpenfabricMapOutput() OpenfabricMapOutput { + return o +} + +func (o OpenfabricMapOutput) ToOpenfabricMapOutputWithContext(ctx context.Context) OpenfabricMapOutput { + return o +} + +func (o OpenfabricMapOutput) MapIndex(k pulumi.StringInput) OpenfabricOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Openfabric { + return vs[0].(map[string]*Openfabric)[vs[1].(string)] + }).(OpenfabricOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*OpenfabricInput)(nil)).Elem(), &Openfabric{}) + pulumi.RegisterInputType(reflect.TypeOf((*OpenfabricArrayInput)(nil)).Elem(), OpenfabricArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*OpenfabricMapInput)(nil)).Elem(), OpenfabricMap{}) + pulumi.RegisterOutputType(OpenfabricOutput{}) + pulumi.RegisterOutputType(OpenfabricArrayOutput{}) + pulumi.RegisterOutputType(OpenfabricMapOutput{}) +} diff --git a/sdk/go/proxmoxve/sdn/fabric/node/ospf.go b/sdk/go/proxmoxve/sdn/fabric/node/ospf.go new file mode 100644 index 00000000..a9e7a5c4 --- /dev/null +++ b/sdk/go/proxmoxve/sdn/fabric/node/ospf.go @@ -0,0 +1,314 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package node + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdn" +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// main, err := sdnfabric.NewOSPF(ctx, "main", &sdnfabric.OSPFArgs{ +// OspfId: pulumi.String("main-fabric"), +// IpPrefix: pulumi.String("10.0.0.0/16"), +// Area: pulumi.String("0"), +// }) +// if err != nil { +// return err +// } +// _, err = sdn.NewOspf(ctx, "main", &sdn.OspfArgs{ +// FabricId: main.OspfId, +// NodeId: pulumi.String("pve"), +// Ip: pulumi.String("10.0.0.1"), +// InterfaceNames: pulumi.StringArray{ +// pulumi.String("nic0"), +// pulumi.String("nic1"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type Ospf struct { + pulumi.CustomResourceState + + // The unique identifier of the SDN fabric. + FabricId pulumi.StringOutput `pulumi:"fabricId"` + // Set of interfaces associated with the fabric node. + InterfaceNames pulumi.StringArrayOutput `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip pulumi.StringOutput `pulumi:"ip"` + // The unique identifier of the SDN fabric node. + NodeId pulumi.StringOutput `pulumi:"nodeId"` +} + +// NewOspf registers a new resource with the given unique name, arguments, and options. +func NewOspf(ctx *pulumi.Context, + name string, args *OspfArgs, opts ...pulumi.ResourceOption) (*Ospf, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.FabricId == nil { + return nil, errors.New("invalid value for required argument 'FabricId'") + } + if args.InterfaceNames == nil { + return nil, errors.New("invalid value for required argument 'InterfaceNames'") + } + if args.Ip == nil { + return nil, errors.New("invalid value for required argument 'Ip'") + } + if args.NodeId == nil { + return nil, errors.New("invalid value for required argument 'NodeId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Ospf + err := ctx.RegisterResource("proxmoxve:Sdn/fabric/node/ospf:Ospf", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetOspf gets an existing Ospf resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetOspf(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *OspfState, opts ...pulumi.ResourceOption) (*Ospf, error) { + var resource Ospf + err := ctx.ReadResource("proxmoxve:Sdn/fabric/node/ospf:Ospf", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Ospf resources. +type ospfState struct { + // The unique identifier of the SDN fabric. + FabricId *string `pulumi:"fabricId"` + // Set of interfaces associated with the fabric node. + InterfaceNames []string `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip *string `pulumi:"ip"` + // The unique identifier of the SDN fabric node. + NodeId *string `pulumi:"nodeId"` +} + +type OspfState struct { + // The unique identifier of the SDN fabric. + FabricId pulumi.StringPtrInput + // Set of interfaces associated with the fabric node. + InterfaceNames pulumi.StringArrayInput + // IPv4 address for the fabric node. + Ip pulumi.StringPtrInput + // The unique identifier of the SDN fabric node. + NodeId pulumi.StringPtrInput +} + +func (OspfState) ElementType() reflect.Type { + return reflect.TypeOf((*ospfState)(nil)).Elem() +} + +type ospfArgs struct { + // The unique identifier of the SDN fabric. + FabricId string `pulumi:"fabricId"` + // Set of interfaces associated with the fabric node. + InterfaceNames []string `pulumi:"interfaceNames"` + // IPv4 address for the fabric node. + Ip string `pulumi:"ip"` + // The unique identifier of the SDN fabric node. + NodeId string `pulumi:"nodeId"` +} + +// The set of arguments for constructing a Ospf resource. +type OspfArgs struct { + // The unique identifier of the SDN fabric. + FabricId pulumi.StringInput + // Set of interfaces associated with the fabric node. + InterfaceNames pulumi.StringArrayInput + // IPv4 address for the fabric node. + Ip pulumi.StringInput + // The unique identifier of the SDN fabric node. + NodeId pulumi.StringInput +} + +func (OspfArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ospfArgs)(nil)).Elem() +} + +type OspfInput interface { + pulumi.Input + + ToOspfOutput() OspfOutput + ToOspfOutputWithContext(ctx context.Context) OspfOutput +} + +func (*Ospf) ElementType() reflect.Type { + return reflect.TypeOf((**Ospf)(nil)).Elem() +} + +func (i *Ospf) ToOspfOutput() OspfOutput { + return i.ToOspfOutputWithContext(context.Background()) +} + +func (i *Ospf) ToOspfOutputWithContext(ctx context.Context) OspfOutput { + return pulumi.ToOutputWithContext(ctx, i).(OspfOutput) +} + +// OspfArrayInput is an input type that accepts OspfArray and OspfArrayOutput values. +// You can construct a concrete instance of `OspfArrayInput` via: +// +// OspfArray{ OspfArgs{...} } +type OspfArrayInput interface { + pulumi.Input + + ToOspfArrayOutput() OspfArrayOutput + ToOspfArrayOutputWithContext(context.Context) OspfArrayOutput +} + +type OspfArray []OspfInput + +func (OspfArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Ospf)(nil)).Elem() +} + +func (i OspfArray) ToOspfArrayOutput() OspfArrayOutput { + return i.ToOspfArrayOutputWithContext(context.Background()) +} + +func (i OspfArray) ToOspfArrayOutputWithContext(ctx context.Context) OspfArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(OspfArrayOutput) +} + +// OspfMapInput is an input type that accepts OspfMap and OspfMapOutput values. +// You can construct a concrete instance of `OspfMapInput` via: +// +// OspfMap{ "key": OspfArgs{...} } +type OspfMapInput interface { + pulumi.Input + + ToOspfMapOutput() OspfMapOutput + ToOspfMapOutputWithContext(context.Context) OspfMapOutput +} + +type OspfMap map[string]OspfInput + +func (OspfMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Ospf)(nil)).Elem() +} + +func (i OspfMap) ToOspfMapOutput() OspfMapOutput { + return i.ToOspfMapOutputWithContext(context.Background()) +} + +func (i OspfMap) ToOspfMapOutputWithContext(ctx context.Context) OspfMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(OspfMapOutput) +} + +type OspfOutput struct{ *pulumi.OutputState } + +func (OspfOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Ospf)(nil)).Elem() +} + +func (o OspfOutput) ToOspfOutput() OspfOutput { + return o +} + +func (o OspfOutput) ToOspfOutputWithContext(ctx context.Context) OspfOutput { + return o +} + +// The unique identifier of the SDN fabric. +func (o OspfOutput) FabricId() pulumi.StringOutput { + return o.ApplyT(func(v *Ospf) pulumi.StringOutput { return v.FabricId }).(pulumi.StringOutput) +} + +// Set of interfaces associated with the fabric node. +func (o OspfOutput) InterfaceNames() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Ospf) pulumi.StringArrayOutput { return v.InterfaceNames }).(pulumi.StringArrayOutput) +} + +// IPv4 address for the fabric node. +func (o OspfOutput) Ip() pulumi.StringOutput { + return o.ApplyT(func(v *Ospf) pulumi.StringOutput { return v.Ip }).(pulumi.StringOutput) +} + +// The unique identifier of the SDN fabric node. +func (o OspfOutput) NodeId() pulumi.StringOutput { + return o.ApplyT(func(v *Ospf) pulumi.StringOutput { return v.NodeId }).(pulumi.StringOutput) +} + +type OspfArrayOutput struct{ *pulumi.OutputState } + +func (OspfArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Ospf)(nil)).Elem() +} + +func (o OspfArrayOutput) ToOspfArrayOutput() OspfArrayOutput { + return o +} + +func (o OspfArrayOutput) ToOspfArrayOutputWithContext(ctx context.Context) OspfArrayOutput { + return o +} + +func (o OspfArrayOutput) Index(i pulumi.IntInput) OspfOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Ospf { + return vs[0].([]*Ospf)[vs[1].(int)] + }).(OspfOutput) +} + +type OspfMapOutput struct{ *pulumi.OutputState } + +func (OspfMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Ospf)(nil)).Elem() +} + +func (o OspfMapOutput) ToOspfMapOutput() OspfMapOutput { + return o +} + +func (o OspfMapOutput) ToOspfMapOutputWithContext(ctx context.Context) OspfMapOutput { + return o +} + +func (o OspfMapOutput) MapIndex(k pulumi.StringInput) OspfOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Ospf { + return vs[0].(map[string]*Ospf)[vs[1].(string)] + }).(OspfOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*OspfInput)(nil)).Elem(), &Ospf{}) + pulumi.RegisterInputType(reflect.TypeOf((*OspfArrayInput)(nil)).Elem(), OspfArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*OspfMapInput)(nil)).Elem(), OspfMap{}) + pulumi.RegisterOutputType(OspfOutput{}) + pulumi.RegisterOutputType(OspfArrayOutput{}) + pulumi.RegisterOutputType(OspfMapOutput{}) +} diff --git a/sdk/go/proxmoxve/sdnfabric/init.go b/sdk/go/proxmoxve/sdnfabric/init.go new file mode 100644 index 00000000..bd8ea1fc --- /dev/null +++ b/sdk/go/proxmoxve/sdnfabric/init.go @@ -0,0 +1,51 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package sdnfabric + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "proxmoxve:SDNFabric/oSPF:OSPF": + r = &OSPF{} + case "proxmoxve:SDNFabric/openFabric:OpenFabric": + r = &OpenFabric{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "proxmoxve", + "SDNFabric/oSPF", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "SDNFabric/openFabric", + &module{version}, + ) +} diff --git a/sdk/go/proxmoxve/sdnfabric/openFabric.go b/sdk/go/proxmoxve/sdnfabric/openFabric.go new file mode 100644 index 00000000..7bd3cf01 --- /dev/null +++ b/sdk/go/proxmoxve/sdnfabric/openFabric.go @@ -0,0 +1,306 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package sdnfabric + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := sdnfabric.NewOpenFabric(ctx, "main", &sdnfabric.OpenFabricArgs{ +// FabricId: pulumi.String("main-fabric"), +// IpPrefix: pulumi.String("10.0.0.0/16"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type OpenFabric struct { + pulumi.CustomResourceState + + // The csnpInterval property for OpenFabric. + CsnpInterval pulumi.IntPtrOutput `pulumi:"csnpInterval"` + // The unique identifier of the SDN fabric. + FabricId pulumi.StringOutput `pulumi:"fabricId"` + // The helloInterval property for OpenFabric. + HelloInterval pulumi.IntPtrOutput `pulumi:"helloInterval"` + // IPv6 prefix cidr for the fabric. + Ip6Prefix pulumi.StringPtrOutput `pulumi:"ip6Prefix"` + // IPv4 prefix cidr for the fabric. + IpPrefix pulumi.StringPtrOutput `pulumi:"ipPrefix"` +} + +// NewOpenFabric registers a new resource with the given unique name, arguments, and options. +func NewOpenFabric(ctx *pulumi.Context, + name string, args *OpenFabricArgs, opts ...pulumi.ResourceOption) (*OpenFabric, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.FabricId == nil { + return nil, errors.New("invalid value for required argument 'FabricId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource OpenFabric + err := ctx.RegisterResource("proxmoxve:SDNFabric/openFabric:OpenFabric", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetOpenFabric gets an existing OpenFabric resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetOpenFabric(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *OpenFabricState, opts ...pulumi.ResourceOption) (*OpenFabric, error) { + var resource OpenFabric + err := ctx.ReadResource("proxmoxve:SDNFabric/openFabric:OpenFabric", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering OpenFabric resources. +type openFabricState struct { + // The csnpInterval property for OpenFabric. + CsnpInterval *int `pulumi:"csnpInterval"` + // The unique identifier of the SDN fabric. + FabricId *string `pulumi:"fabricId"` + // The helloInterval property for OpenFabric. + HelloInterval *int `pulumi:"helloInterval"` + // IPv6 prefix cidr for the fabric. + Ip6Prefix *string `pulumi:"ip6Prefix"` + // IPv4 prefix cidr for the fabric. + IpPrefix *string `pulumi:"ipPrefix"` +} + +type OpenFabricState struct { + // The csnpInterval property for OpenFabric. + CsnpInterval pulumi.IntPtrInput + // The unique identifier of the SDN fabric. + FabricId pulumi.StringPtrInput + // The helloInterval property for OpenFabric. + HelloInterval pulumi.IntPtrInput + // IPv6 prefix cidr for the fabric. + Ip6Prefix pulumi.StringPtrInput + // IPv4 prefix cidr for the fabric. + IpPrefix pulumi.StringPtrInput +} + +func (OpenFabricState) ElementType() reflect.Type { + return reflect.TypeOf((*openFabricState)(nil)).Elem() +} + +type openFabricArgs struct { + // The csnpInterval property for OpenFabric. + CsnpInterval *int `pulumi:"csnpInterval"` + // The unique identifier of the SDN fabric. + FabricId string `pulumi:"fabricId"` + // The helloInterval property for OpenFabric. + HelloInterval *int `pulumi:"helloInterval"` + // IPv6 prefix cidr for the fabric. + Ip6Prefix *string `pulumi:"ip6Prefix"` + // IPv4 prefix cidr for the fabric. + IpPrefix *string `pulumi:"ipPrefix"` +} + +// The set of arguments for constructing a OpenFabric resource. +type OpenFabricArgs struct { + // The csnpInterval property for OpenFabric. + CsnpInterval pulumi.IntPtrInput + // The unique identifier of the SDN fabric. + FabricId pulumi.StringInput + // The helloInterval property for OpenFabric. + HelloInterval pulumi.IntPtrInput + // IPv6 prefix cidr for the fabric. + Ip6Prefix pulumi.StringPtrInput + // IPv4 prefix cidr for the fabric. + IpPrefix pulumi.StringPtrInput +} + +func (OpenFabricArgs) ElementType() reflect.Type { + return reflect.TypeOf((*openFabricArgs)(nil)).Elem() +} + +type OpenFabricInput interface { + pulumi.Input + + ToOpenFabricOutput() OpenFabricOutput + ToOpenFabricOutputWithContext(ctx context.Context) OpenFabricOutput +} + +func (*OpenFabric) ElementType() reflect.Type { + return reflect.TypeOf((**OpenFabric)(nil)).Elem() +} + +func (i *OpenFabric) ToOpenFabricOutput() OpenFabricOutput { + return i.ToOpenFabricOutputWithContext(context.Background()) +} + +func (i *OpenFabric) ToOpenFabricOutputWithContext(ctx context.Context) OpenFabricOutput { + return pulumi.ToOutputWithContext(ctx, i).(OpenFabricOutput) +} + +// OpenFabricArrayInput is an input type that accepts OpenFabricArray and OpenFabricArrayOutput values. +// You can construct a concrete instance of `OpenFabricArrayInput` via: +// +// OpenFabricArray{ OpenFabricArgs{...} } +type OpenFabricArrayInput interface { + pulumi.Input + + ToOpenFabricArrayOutput() OpenFabricArrayOutput + ToOpenFabricArrayOutputWithContext(context.Context) OpenFabricArrayOutput +} + +type OpenFabricArray []OpenFabricInput + +func (OpenFabricArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*OpenFabric)(nil)).Elem() +} + +func (i OpenFabricArray) ToOpenFabricArrayOutput() OpenFabricArrayOutput { + return i.ToOpenFabricArrayOutputWithContext(context.Background()) +} + +func (i OpenFabricArray) ToOpenFabricArrayOutputWithContext(ctx context.Context) OpenFabricArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(OpenFabricArrayOutput) +} + +// OpenFabricMapInput is an input type that accepts OpenFabricMap and OpenFabricMapOutput values. +// You can construct a concrete instance of `OpenFabricMapInput` via: +// +// OpenFabricMap{ "key": OpenFabricArgs{...} } +type OpenFabricMapInput interface { + pulumi.Input + + ToOpenFabricMapOutput() OpenFabricMapOutput + ToOpenFabricMapOutputWithContext(context.Context) OpenFabricMapOutput +} + +type OpenFabricMap map[string]OpenFabricInput + +func (OpenFabricMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*OpenFabric)(nil)).Elem() +} + +func (i OpenFabricMap) ToOpenFabricMapOutput() OpenFabricMapOutput { + return i.ToOpenFabricMapOutputWithContext(context.Background()) +} + +func (i OpenFabricMap) ToOpenFabricMapOutputWithContext(ctx context.Context) OpenFabricMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(OpenFabricMapOutput) +} + +type OpenFabricOutput struct{ *pulumi.OutputState } + +func (OpenFabricOutput) ElementType() reflect.Type { + return reflect.TypeOf((**OpenFabric)(nil)).Elem() +} + +func (o OpenFabricOutput) ToOpenFabricOutput() OpenFabricOutput { + return o +} + +func (o OpenFabricOutput) ToOpenFabricOutputWithContext(ctx context.Context) OpenFabricOutput { + return o +} + +// The csnpInterval property for OpenFabric. +func (o OpenFabricOutput) CsnpInterval() pulumi.IntPtrOutput { + return o.ApplyT(func(v *OpenFabric) pulumi.IntPtrOutput { return v.CsnpInterval }).(pulumi.IntPtrOutput) +} + +// The unique identifier of the SDN fabric. +func (o OpenFabricOutput) FabricId() pulumi.StringOutput { + return o.ApplyT(func(v *OpenFabric) pulumi.StringOutput { return v.FabricId }).(pulumi.StringOutput) +} + +// The helloInterval property for OpenFabric. +func (o OpenFabricOutput) HelloInterval() pulumi.IntPtrOutput { + return o.ApplyT(func(v *OpenFabric) pulumi.IntPtrOutput { return v.HelloInterval }).(pulumi.IntPtrOutput) +} + +// IPv6 prefix cidr for the fabric. +func (o OpenFabricOutput) Ip6Prefix() pulumi.StringPtrOutput { + return o.ApplyT(func(v *OpenFabric) pulumi.StringPtrOutput { return v.Ip6Prefix }).(pulumi.StringPtrOutput) +} + +// IPv4 prefix cidr for the fabric. +func (o OpenFabricOutput) IpPrefix() pulumi.StringPtrOutput { + return o.ApplyT(func(v *OpenFabric) pulumi.StringPtrOutput { return v.IpPrefix }).(pulumi.StringPtrOutput) +} + +type OpenFabricArrayOutput struct{ *pulumi.OutputState } + +func (OpenFabricArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*OpenFabric)(nil)).Elem() +} + +func (o OpenFabricArrayOutput) ToOpenFabricArrayOutput() OpenFabricArrayOutput { + return o +} + +func (o OpenFabricArrayOutput) ToOpenFabricArrayOutputWithContext(ctx context.Context) OpenFabricArrayOutput { + return o +} + +func (o OpenFabricArrayOutput) Index(i pulumi.IntInput) OpenFabricOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *OpenFabric { + return vs[0].([]*OpenFabric)[vs[1].(int)] + }).(OpenFabricOutput) +} + +type OpenFabricMapOutput struct{ *pulumi.OutputState } + +func (OpenFabricMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*OpenFabric)(nil)).Elem() +} + +func (o OpenFabricMapOutput) ToOpenFabricMapOutput() OpenFabricMapOutput { + return o +} + +func (o OpenFabricMapOutput) ToOpenFabricMapOutputWithContext(ctx context.Context) OpenFabricMapOutput { + return o +} + +func (o OpenFabricMapOutput) MapIndex(k pulumi.StringInput) OpenFabricOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *OpenFabric { + return vs[0].(map[string]*OpenFabric)[vs[1].(string)] + }).(OpenFabricOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*OpenFabricInput)(nil)).Elem(), &OpenFabric{}) + pulumi.RegisterInputType(reflect.TypeOf((*OpenFabricArrayInput)(nil)).Elem(), OpenFabricArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*OpenFabricMapInput)(nil)).Elem(), OpenFabricMap{}) + pulumi.RegisterOutputType(OpenFabricOutput{}) + pulumi.RegisterOutputType(OpenFabricArrayOutput{}) + pulumi.RegisterOutputType(OpenFabricMapOutput{}) +} diff --git a/sdk/go/proxmoxve/sdnfabric/ospf.go b/sdk/go/proxmoxve/sdnfabric/ospf.go new file mode 100644 index 00000000..2ad699ef --- /dev/null +++ b/sdk/go/proxmoxve/sdnfabric/ospf.go @@ -0,0 +1,283 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package sdnfabric + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/sdnfabric" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := sdnfabric.NewOSPF(ctx, "main", &sdnfabric.OSPFArgs{ +// OspfId: pulumi.String("main-fabric"), +// IpPrefix: pulumi.String("10.0.0.0/16"), +// Area: pulumi.String("0"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type OSPF struct { + pulumi.CustomResourceState + + // OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + Area pulumi.StringOutput `pulumi:"area"` + // IPv4 prefix cidr for the fabric. + IpPrefix pulumi.StringOutput `pulumi:"ipPrefix"` + // The unique identifier of the SDN fabric. + OspfId pulumi.StringOutput `pulumi:"ospfId"` +} + +// NewOSPF registers a new resource with the given unique name, arguments, and options. +func NewOSPF(ctx *pulumi.Context, + name string, args *OSPFArgs, opts ...pulumi.ResourceOption) (*OSPF, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Area == nil { + return nil, errors.New("invalid value for required argument 'Area'") + } + if args.IpPrefix == nil { + return nil, errors.New("invalid value for required argument 'IpPrefix'") + } + if args.OspfId == nil { + return nil, errors.New("invalid value for required argument 'OspfId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource OSPF + err := ctx.RegisterResource("proxmoxve:SDNFabric/oSPF:OSPF", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetOSPF gets an existing OSPF resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetOSPF(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *OSPFState, opts ...pulumi.ResourceOption) (*OSPF, error) { + var resource OSPF + err := ctx.ReadResource("proxmoxve:SDNFabric/oSPF:OSPF", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering OSPF resources. +type ospfState struct { + // OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + Area *string `pulumi:"area"` + // IPv4 prefix cidr for the fabric. + IpPrefix *string `pulumi:"ipPrefix"` + // The unique identifier of the SDN fabric. + OspfId *string `pulumi:"ospfId"` +} + +type OSPFState struct { + // OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + Area pulumi.StringPtrInput + // IPv4 prefix cidr for the fabric. + IpPrefix pulumi.StringPtrInput + // The unique identifier of the SDN fabric. + OspfId pulumi.StringPtrInput +} + +func (OSPFState) ElementType() reflect.Type { + return reflect.TypeOf((*ospfState)(nil)).Elem() +} + +type ospfArgs struct { + // OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + Area string `pulumi:"area"` + // IPv4 prefix cidr for the fabric. + IpPrefix string `pulumi:"ipPrefix"` + // The unique identifier of the SDN fabric. + OspfId string `pulumi:"ospfId"` +} + +// The set of arguments for constructing a OSPF resource. +type OSPFArgs struct { + // OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + Area pulumi.StringInput + // IPv4 prefix cidr for the fabric. + IpPrefix pulumi.StringInput + // The unique identifier of the SDN fabric. + OspfId pulumi.StringInput +} + +func (OSPFArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ospfArgs)(nil)).Elem() +} + +type OSPFInput interface { + pulumi.Input + + ToOSPFOutput() OSPFOutput + ToOSPFOutputWithContext(ctx context.Context) OSPFOutput +} + +func (*OSPF) ElementType() reflect.Type { + return reflect.TypeOf((**OSPF)(nil)).Elem() +} + +func (i *OSPF) ToOSPFOutput() OSPFOutput { + return i.ToOSPFOutputWithContext(context.Background()) +} + +func (i *OSPF) ToOSPFOutputWithContext(ctx context.Context) OSPFOutput { + return pulumi.ToOutputWithContext(ctx, i).(OSPFOutput) +} + +// OSPFArrayInput is an input type that accepts OSPFArray and OSPFArrayOutput values. +// You can construct a concrete instance of `OSPFArrayInput` via: +// +// OSPFArray{ OSPFArgs{...} } +type OSPFArrayInput interface { + pulumi.Input + + ToOSPFArrayOutput() OSPFArrayOutput + ToOSPFArrayOutputWithContext(context.Context) OSPFArrayOutput +} + +type OSPFArray []OSPFInput + +func (OSPFArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*OSPF)(nil)).Elem() +} + +func (i OSPFArray) ToOSPFArrayOutput() OSPFArrayOutput { + return i.ToOSPFArrayOutputWithContext(context.Background()) +} + +func (i OSPFArray) ToOSPFArrayOutputWithContext(ctx context.Context) OSPFArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(OSPFArrayOutput) +} + +// OSPFMapInput is an input type that accepts OSPFMap and OSPFMapOutput values. +// You can construct a concrete instance of `OSPFMapInput` via: +// +// OSPFMap{ "key": OSPFArgs{...} } +type OSPFMapInput interface { + pulumi.Input + + ToOSPFMapOutput() OSPFMapOutput + ToOSPFMapOutputWithContext(context.Context) OSPFMapOutput +} + +type OSPFMap map[string]OSPFInput + +func (OSPFMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*OSPF)(nil)).Elem() +} + +func (i OSPFMap) ToOSPFMapOutput() OSPFMapOutput { + return i.ToOSPFMapOutputWithContext(context.Background()) +} + +func (i OSPFMap) ToOSPFMapOutputWithContext(ctx context.Context) OSPFMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(OSPFMapOutput) +} + +type OSPFOutput struct{ *pulumi.OutputState } + +func (OSPFOutput) ElementType() reflect.Type { + return reflect.TypeOf((**OSPF)(nil)).Elem() +} + +func (o OSPFOutput) ToOSPFOutput() OSPFOutput { + return o +} + +func (o OSPFOutput) ToOSPFOutputWithContext(ctx context.Context) OSPFOutput { + return o +} + +// OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. +func (o OSPFOutput) Area() pulumi.StringOutput { + return o.ApplyT(func(v *OSPF) pulumi.StringOutput { return v.Area }).(pulumi.StringOutput) +} + +// IPv4 prefix cidr for the fabric. +func (o OSPFOutput) IpPrefix() pulumi.StringOutput { + return o.ApplyT(func(v *OSPF) pulumi.StringOutput { return v.IpPrefix }).(pulumi.StringOutput) +} + +// The unique identifier of the SDN fabric. +func (o OSPFOutput) OspfId() pulumi.StringOutput { + return o.ApplyT(func(v *OSPF) pulumi.StringOutput { return v.OspfId }).(pulumi.StringOutput) +} + +type OSPFArrayOutput struct{ *pulumi.OutputState } + +func (OSPFArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*OSPF)(nil)).Elem() +} + +func (o OSPFArrayOutput) ToOSPFArrayOutput() OSPFArrayOutput { + return o +} + +func (o OSPFArrayOutput) ToOSPFArrayOutputWithContext(ctx context.Context) OSPFArrayOutput { + return o +} + +func (o OSPFArrayOutput) Index(i pulumi.IntInput) OSPFOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *OSPF { + return vs[0].([]*OSPF)[vs[1].(int)] + }).(OSPFOutput) +} + +type OSPFMapOutput struct{ *pulumi.OutputState } + +func (OSPFMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*OSPF)(nil)).Elem() +} + +func (o OSPFMapOutput) ToOSPFMapOutput() OSPFMapOutput { + return o +} + +func (o OSPFMapOutput) ToOSPFMapOutputWithContext(ctx context.Context) OSPFMapOutput { + return o +} + +func (o OSPFMapOutput) MapIndex(k pulumi.StringInput) OSPFOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *OSPF { + return vs[0].(map[string]*OSPF)[vs[1].(string)] + }).(OSPFOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*OSPFInput)(nil)).Elem(), &OSPF{}) + pulumi.RegisterInputType(reflect.TypeOf((*OSPFArrayInput)(nil)).Elem(), OSPFArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*OSPFMapInput)(nil)).Elem(), OSPFMap{}) + pulumi.RegisterOutputType(OSPFOutput{}) + pulumi.RegisterOutputType(OSPFArrayOutput{}) + pulumi.RegisterOutputType(OSPFMapOutput{}) +} diff --git a/sdk/go/proxmoxve/sdnzone/evpn.go b/sdk/go/proxmoxve/sdnzone/evpn.go index a2cff83a..5dc3258f 100644 --- a/sdk/go/proxmoxve/sdnzone/evpn.go +++ b/sdk/go/proxmoxve/sdnzone/evpn.go @@ -72,11 +72,11 @@ type Evpn struct { pulumi.CustomResourceState // Enable subnet advertisement for EVPN. - AdvertiseSubnets pulumi.BoolPtrOutput `pulumi:"advertiseSubnets"` + AdvertiseSubnets pulumi.BoolOutput `pulumi:"advertiseSubnets"` // EVPN controller address. Controller pulumi.StringOutput `pulumi:"controller"` // Disable ARP/ND suppression for EVPN. - DisableArpNdSuppression pulumi.BoolPtrOutput `pulumi:"disableArpNdSuppression"` + DisableArpNdSuppression pulumi.BoolOutput `pulumi:"disableArpNdSuppression"` // DNS API server address. Dns pulumi.StringPtrOutput `pulumi:"dns"` // DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. @@ -84,11 +84,11 @@ type Evpn struct { // List of exit nodes for EVPN. ExitNodes pulumi.StringArrayOutput `pulumi:"exitNodes"` // Enable local routing for EVPN exit nodes. - ExitNodesLocalRouting pulumi.BoolPtrOutput `pulumi:"exitNodesLocalRouting"` + ExitNodesLocalRouting pulumi.BoolOutput `pulumi:"exitNodesLocalRouting"` // IP Address Management system. Ipam pulumi.StringPtrOutput `pulumi:"ipam"` - // MTU value for the zone. - Mtu pulumi.IntPtrOutput `pulumi:"mtu"` + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. + Mtu pulumi.IntOutput `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayOutput `pulumi:"nodes"` // Indicates if the zone has pending configuration changes that need to be applied. @@ -162,7 +162,7 @@ type evpnState struct { ExitNodesLocalRouting *bool `pulumi:"exitNodesLocalRouting"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -199,7 +199,7 @@ type EvpnState struct { ExitNodesLocalRouting pulumi.BoolPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -240,7 +240,7 @@ type evpnArgs struct { ExitNodesLocalRouting *bool `pulumi:"exitNodesLocalRouting"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -274,7 +274,7 @@ type EvpnArgs struct { ExitNodesLocalRouting pulumi.BoolPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -378,8 +378,8 @@ func (o EvpnOutput) ToEvpnOutputWithContext(ctx context.Context) EvpnOutput { } // Enable subnet advertisement for EVPN. -func (o EvpnOutput) AdvertiseSubnets() pulumi.BoolPtrOutput { - return o.ApplyT(func(v *Evpn) pulumi.BoolPtrOutput { return v.AdvertiseSubnets }).(pulumi.BoolPtrOutput) +func (o EvpnOutput) AdvertiseSubnets() pulumi.BoolOutput { + return o.ApplyT(func(v *Evpn) pulumi.BoolOutput { return v.AdvertiseSubnets }).(pulumi.BoolOutput) } // EVPN controller address. @@ -388,8 +388,8 @@ func (o EvpnOutput) Controller() pulumi.StringOutput { } // Disable ARP/ND suppression for EVPN. -func (o EvpnOutput) DisableArpNdSuppression() pulumi.BoolPtrOutput { - return o.ApplyT(func(v *Evpn) pulumi.BoolPtrOutput { return v.DisableArpNdSuppression }).(pulumi.BoolPtrOutput) +func (o EvpnOutput) DisableArpNdSuppression() pulumi.BoolOutput { + return o.ApplyT(func(v *Evpn) pulumi.BoolOutput { return v.DisableArpNdSuppression }).(pulumi.BoolOutput) } // DNS API server address. @@ -408,8 +408,8 @@ func (o EvpnOutput) ExitNodes() pulumi.StringArrayOutput { } // Enable local routing for EVPN exit nodes. -func (o EvpnOutput) ExitNodesLocalRouting() pulumi.BoolPtrOutput { - return o.ApplyT(func(v *Evpn) pulumi.BoolPtrOutput { return v.ExitNodesLocalRouting }).(pulumi.BoolPtrOutput) +func (o EvpnOutput) ExitNodesLocalRouting() pulumi.BoolOutput { + return o.ApplyT(func(v *Evpn) pulumi.BoolOutput { return v.ExitNodesLocalRouting }).(pulumi.BoolOutput) } // IP Address Management system. @@ -417,9 +417,9 @@ func (o EvpnOutput) Ipam() pulumi.StringPtrOutput { return o.ApplyT(func(v *Evpn) pulumi.StringPtrOutput { return v.Ipam }).(pulumi.StringPtrOutput) } -// MTU value for the zone. -func (o EvpnOutput) Mtu() pulumi.IntPtrOutput { - return o.ApplyT(func(v *Evpn) pulumi.IntPtrOutput { return v.Mtu }).(pulumi.IntPtrOutput) +// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. +func (o EvpnOutput) Mtu() pulumi.IntOutput { + return o.ApplyT(func(v *Evpn) pulumi.IntOutput { return v.Mtu }).(pulumi.IntOutput) } // The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/go/proxmoxve/sdnzone/qinq.go b/sdk/go/proxmoxve/sdnzone/qinq.go index d4746a0d..8c0262c7 100644 --- a/sdk/go/proxmoxve/sdnzone/qinq.go +++ b/sdk/go/proxmoxve/sdnzone/qinq.go @@ -68,8 +68,8 @@ type Qinq struct { DnsZone pulumi.StringPtrOutput `pulumi:"dnsZone"` // IP Address Management system. Ipam pulumi.StringPtrOutput `pulumi:"ipam"` - // MTU value for the zone. - Mtu pulumi.IntPtrOutput `pulumi:"mtu"` + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. + Mtu pulumi.IntOutput `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayOutput `pulumi:"nodes"` // Indicates if the zone has pending configuration changes that need to be applied. @@ -79,7 +79,7 @@ type Qinq struct { // Service VLAN tag for QinQ. The tag must be between `1` and `4094`. ServiceVlan pulumi.IntOutput `pulumi:"serviceVlan"` // Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`. - ServiceVlanProtocol pulumi.StringPtrOutput `pulumi:"serviceVlanProtocol"` + ServiceVlanProtocol pulumi.StringOutput `pulumi:"serviceVlanProtocol"` // Indicates the current state of the zone. State pulumi.StringOutput `pulumi:"state"` // The unique identifier of the SDN zone. @@ -133,7 +133,7 @@ type qinqState struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -160,7 +160,7 @@ type QinqState struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -191,7 +191,7 @@ type qinqArgs struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -215,7 +215,7 @@ type QinqArgs struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -336,9 +336,9 @@ func (o QinqOutput) Ipam() pulumi.StringPtrOutput { return o.ApplyT(func(v *Qinq) pulumi.StringPtrOutput { return v.Ipam }).(pulumi.StringPtrOutput) } -// MTU value for the zone. -func (o QinqOutput) Mtu() pulumi.IntPtrOutput { - return o.ApplyT(func(v *Qinq) pulumi.IntPtrOutput { return v.Mtu }).(pulumi.IntPtrOutput) +// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. +func (o QinqOutput) Mtu() pulumi.IntOutput { + return o.ApplyT(func(v *Qinq) pulumi.IntOutput { return v.Mtu }).(pulumi.IntOutput) } // The Proxmox nodes which the zone and associated VNets should be deployed on @@ -362,8 +362,8 @@ func (o QinqOutput) ServiceVlan() pulumi.IntOutput { } // Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`. -func (o QinqOutput) ServiceVlanProtocol() pulumi.StringPtrOutput { - return o.ApplyT(func(v *Qinq) pulumi.StringPtrOutput { return v.ServiceVlanProtocol }).(pulumi.StringPtrOutput) +func (o QinqOutput) ServiceVlanProtocol() pulumi.StringOutput { + return o.ApplyT(func(v *Qinq) pulumi.StringOutput { return v.ServiceVlanProtocol }).(pulumi.StringOutput) } // Indicates the current state of the zone. diff --git a/sdk/go/proxmoxve/sdnzone/simple.go b/sdk/go/proxmoxve/sdnzone/simple.go index 0ef709a2..d762f21a 100644 --- a/sdk/go/proxmoxve/sdnzone/simple.go +++ b/sdk/go/proxmoxve/sdnzone/simple.go @@ -68,8 +68,8 @@ type Simple struct { DnsZone pulumi.StringPtrOutput `pulumi:"dnsZone"` // IP Address Management system. Ipam pulumi.StringPtrOutput `pulumi:"ipam"` - // MTU value for the zone. - Mtu pulumi.IntPtrOutput `pulumi:"mtu"` + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. + Mtu pulumi.IntOutput `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayOutput `pulumi:"nodes"` // Indicates if the zone has pending configuration changes that need to be applied. @@ -123,7 +123,7 @@ type simpleState struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -146,7 +146,7 @@ type SimpleState struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -173,7 +173,7 @@ type simpleArgs struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -193,7 +193,7 @@ type SimpleArgs struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -310,9 +310,9 @@ func (o SimpleOutput) Ipam() pulumi.StringPtrOutput { return o.ApplyT(func(v *Simple) pulumi.StringPtrOutput { return v.Ipam }).(pulumi.StringPtrOutput) } -// MTU value for the zone. -func (o SimpleOutput) Mtu() pulumi.IntPtrOutput { - return o.ApplyT(func(v *Simple) pulumi.IntPtrOutput { return v.Mtu }).(pulumi.IntPtrOutput) +// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. +func (o SimpleOutput) Mtu() pulumi.IntOutput { + return o.ApplyT(func(v *Simple) pulumi.IntOutput { return v.Mtu }).(pulumi.IntOutput) } // The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/go/proxmoxve/sdnzone/vlan.go b/sdk/go/proxmoxve/sdnzone/vlan.go index 00c2b938..ab4be428 100644 --- a/sdk/go/proxmoxve/sdnzone/vlan.go +++ b/sdk/go/proxmoxve/sdnzone/vlan.go @@ -66,8 +66,8 @@ type Vlan struct { DnsZone pulumi.StringPtrOutput `pulumi:"dnsZone"` // IP Address Management system. Ipam pulumi.StringPtrOutput `pulumi:"ipam"` - // MTU value for the zone. - Mtu pulumi.IntPtrOutput `pulumi:"mtu"` + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. + Mtu pulumi.IntOutput `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayOutput `pulumi:"nodes"` // Indicates if the zone has pending configuration changes that need to be applied. @@ -124,7 +124,7 @@ type vlanState struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -147,7 +147,7 @@ type VlanState struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -174,7 +174,7 @@ type vlanArgs struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -194,7 +194,7 @@ type VlanArgs struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -311,9 +311,9 @@ func (o VlanOutput) Ipam() pulumi.StringPtrOutput { return o.ApplyT(func(v *Vlan) pulumi.StringPtrOutput { return v.Ipam }).(pulumi.StringPtrOutput) } -// MTU value for the zone. -func (o VlanOutput) Mtu() pulumi.IntPtrOutput { - return o.ApplyT(func(v *Vlan) pulumi.IntPtrOutput { return v.Mtu }).(pulumi.IntPtrOutput) +// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. +func (o VlanOutput) Mtu() pulumi.IntOutput { + return o.ApplyT(func(v *Vlan) pulumi.IntOutput { return v.Mtu }).(pulumi.IntOutput) } // The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/go/proxmoxve/sdnzone/vxlan.go b/sdk/go/proxmoxve/sdnzone/vxlan.go index 6573ad36..4dc52a5a 100644 --- a/sdk/go/proxmoxve/sdnzone/vxlan.go +++ b/sdk/go/proxmoxve/sdnzone/vxlan.go @@ -68,8 +68,8 @@ type Vxlan struct { DnsZone pulumi.StringPtrOutput `pulumi:"dnsZone"` // IP Address Management system. Ipam pulumi.StringPtrOutput `pulumi:"ipam"` - // MTU value for the zone. - Mtu pulumi.IntPtrOutput `pulumi:"mtu"` + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. + Mtu pulumi.IntOutput `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayOutput `pulumi:"nodes"` // A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here @@ -126,7 +126,7 @@ type vxlanState struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -149,7 +149,7 @@ type VxlanState struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -176,7 +176,7 @@ type vxlanArgs struct { DnsZone *string `pulumi:"dnsZone"` // IP Address Management system. Ipam *string `pulumi:"ipam"` - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu *int `pulumi:"mtu"` // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes []string `pulumi:"nodes"` @@ -196,7 +196,7 @@ type VxlanArgs struct { DnsZone pulumi.StringPtrInput // IP Address Management system. Ipam pulumi.StringPtrInput - // MTU value for the zone. + // MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. Mtu pulumi.IntPtrInput // The Proxmox nodes which the zone and associated VNets should be deployed on Nodes pulumi.StringArrayInput @@ -310,9 +310,9 @@ func (o VxlanOutput) Ipam() pulumi.StringPtrOutput { return o.ApplyT(func(v *Vxlan) pulumi.StringPtrOutput { return v.Ipam }).(pulumi.StringPtrOutput) } -// MTU value for the zone. -func (o VxlanOutput) Mtu() pulumi.IntPtrOutput { - return o.ApplyT(func(v *Vxlan) pulumi.IntPtrOutput { return v.Mtu }).(pulumi.IntPtrOutput) +// MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. +func (o VxlanOutput) Mtu() pulumi.IntOutput { + return o.ApplyT(func(v *Vxlan) pulumi.IntOutput { return v.Mtu }).(pulumi.IntOutput) } // The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/go/proxmoxve/storage/cifs.go b/sdk/go/proxmoxve/storage/cifs.go new file mode 100644 index 00000000..8a81b3bd --- /dev/null +++ b/sdk/go/proxmoxve/storage/cifs.go @@ -0,0 +1,473 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package storage + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages an SMB/CIFS based storage server in Proxmox VE. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.NewCIFS(ctx, "example", &storage.CIFSArgs{ +// CifsId: pulumi.String("example-cifs"), +// Nodes: pulumi.StringArray{ +// pulumi.String("pve"), +// }, +// Server: pulumi.String("10.0.0.20"), +// Share: pulumi.String("proxmox"), +// Username: pulumi.String("cifs-user"), +// Password: pulumi.String("cifs-password"), +// Contents: pulumi.StringArray{ +// pulumi.String("images"), +// }, +// Domain: pulumi.String("WORKGROUP"), +// Subdirectory: pulumi.String("terraform"), +// Preallocation: pulumi.String("metadata"), +// SnapshotAsVolumeChain: pulumi.Bool(true), +// Backups: &storage.CIFSBackupsArgs{ +// MaxProtectedBackups: pulumi.Int(5), +// KeepDaily: pulumi.Int(7), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type CIFS struct { + pulumi.CustomResourceState + + // Configure backup retention settings for the storage type. + Backups CIFSBackupsPtrOutput `pulumi:"backups"` + // The unique identifier of the storage. + CifsId pulumi.StringOutput `pulumi:"cifsId"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayOutput `pulumi:"contents"` + // Whether the storage is disabled. + Disable pulumi.BoolOutput `pulumi:"disable"` + // The SMB/CIFS domain. + Domain pulumi.StringPtrOutput `pulumi:"domain"` + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayOutput `pulumi:"nodes"` + // The password for authenticating with the SMB/CIFS server. + Password pulumi.StringOutput `pulumi:"password"` + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrOutput `pulumi:"preallocation"` + // The IP address or DNS name of the SMB/CIFS server. + Server pulumi.StringOutput `pulumi:"server"` + // The name of the SMB/CIFS share. + Share pulumi.StringOutput `pulumi:"share"` + // Whether the storage is shared across all nodes. + Shared pulumi.BoolOutput `pulumi:"shared"` + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain pulumi.BoolPtrOutput `pulumi:"snapshotAsVolumeChain"` + // A subdirectory to mount within the share. + Subdirectory pulumi.StringPtrOutput `pulumi:"subdirectory"` + // The username for authenticating with the SMB/CIFS server. + Username pulumi.StringOutput `pulumi:"username"` +} + +// NewCIFS registers a new resource with the given unique name, arguments, and options. +func NewCIFS(ctx *pulumi.Context, + name string, args *CIFSArgs, opts ...pulumi.ResourceOption) (*CIFS, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CifsId == nil { + return nil, errors.New("invalid value for required argument 'CifsId'") + } + if args.Password == nil { + return nil, errors.New("invalid value for required argument 'Password'") + } + if args.Server == nil { + return nil, errors.New("invalid value for required argument 'Server'") + } + if args.Share == nil { + return nil, errors.New("invalid value for required argument 'Share'") + } + if args.Username == nil { + return nil, errors.New("invalid value for required argument 'Username'") + } + if args.Password != nil { + args.Password = pulumi.ToSecret(args.Password).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "password", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource CIFS + err := ctx.RegisterResource("proxmoxve:Storage/cIFS:CIFS", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetCIFS gets an existing CIFS resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetCIFS(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *CIFSState, opts ...pulumi.ResourceOption) (*CIFS, error) { + var resource CIFS + err := ctx.ReadResource("proxmoxve:Storage/cIFS:CIFS", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering CIFS resources. +type cifsState struct { + // Configure backup retention settings for the storage type. + Backups *CIFSBackups `pulumi:"backups"` + // The unique identifier of the storage. + CifsId *string `pulumi:"cifsId"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The SMB/CIFS domain. + Domain *string `pulumi:"domain"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The password for authenticating with the SMB/CIFS server. + Password *string `pulumi:"password"` + // The preallocation mode for raw and qcow2 images. + Preallocation *string `pulumi:"preallocation"` + // The IP address or DNS name of the SMB/CIFS server. + Server *string `pulumi:"server"` + // The name of the SMB/CIFS share. + Share *string `pulumi:"share"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain *bool `pulumi:"snapshotAsVolumeChain"` + // A subdirectory to mount within the share. + Subdirectory *string `pulumi:"subdirectory"` + // The username for authenticating with the SMB/CIFS server. + Username *string `pulumi:"username"` +} + +type CIFSState struct { + // Configure backup retention settings for the storage type. + Backups CIFSBackupsPtrInput + // The unique identifier of the storage. + CifsId pulumi.StringPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The SMB/CIFS domain. + Domain pulumi.StringPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The password for authenticating with the SMB/CIFS server. + Password pulumi.StringPtrInput + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrInput + // The IP address or DNS name of the SMB/CIFS server. + Server pulumi.StringPtrInput + // The name of the SMB/CIFS share. + Share pulumi.StringPtrInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain pulumi.BoolPtrInput + // A subdirectory to mount within the share. + Subdirectory pulumi.StringPtrInput + // The username for authenticating with the SMB/CIFS server. + Username pulumi.StringPtrInput +} + +func (CIFSState) ElementType() reflect.Type { + return reflect.TypeOf((*cifsState)(nil)).Elem() +} + +type cifsArgs struct { + // Configure backup retention settings for the storage type. + Backups *CIFSBackups `pulumi:"backups"` + // The unique identifier of the storage. + CifsId string `pulumi:"cifsId"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The SMB/CIFS domain. + Domain *string `pulumi:"domain"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The password for authenticating with the SMB/CIFS server. + Password string `pulumi:"password"` + // The preallocation mode for raw and qcow2 images. + Preallocation *string `pulumi:"preallocation"` + // The IP address or DNS name of the SMB/CIFS server. + Server string `pulumi:"server"` + // The name of the SMB/CIFS share. + Share string `pulumi:"share"` + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain *bool `pulumi:"snapshotAsVolumeChain"` + // A subdirectory to mount within the share. + Subdirectory *string `pulumi:"subdirectory"` + // The username for authenticating with the SMB/CIFS server. + Username string `pulumi:"username"` +} + +// The set of arguments for constructing a CIFS resource. +type CIFSArgs struct { + // Configure backup retention settings for the storage type. + Backups CIFSBackupsPtrInput + // The unique identifier of the storage. + CifsId pulumi.StringInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The SMB/CIFS domain. + Domain pulumi.StringPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The password for authenticating with the SMB/CIFS server. + Password pulumi.StringInput + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrInput + // The IP address or DNS name of the SMB/CIFS server. + Server pulumi.StringInput + // The name of the SMB/CIFS share. + Share pulumi.StringInput + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain pulumi.BoolPtrInput + // A subdirectory to mount within the share. + Subdirectory pulumi.StringPtrInput + // The username for authenticating with the SMB/CIFS server. + Username pulumi.StringInput +} + +func (CIFSArgs) ElementType() reflect.Type { + return reflect.TypeOf((*cifsArgs)(nil)).Elem() +} + +type CIFSInput interface { + pulumi.Input + + ToCIFSOutput() CIFSOutput + ToCIFSOutputWithContext(ctx context.Context) CIFSOutput +} + +func (*CIFS) ElementType() reflect.Type { + return reflect.TypeOf((**CIFS)(nil)).Elem() +} + +func (i *CIFS) ToCIFSOutput() CIFSOutput { + return i.ToCIFSOutputWithContext(context.Background()) +} + +func (i *CIFS) ToCIFSOutputWithContext(ctx context.Context) CIFSOutput { + return pulumi.ToOutputWithContext(ctx, i).(CIFSOutput) +} + +// CIFSArrayInput is an input type that accepts CIFSArray and CIFSArrayOutput values. +// You can construct a concrete instance of `CIFSArrayInput` via: +// +// CIFSArray{ CIFSArgs{...} } +type CIFSArrayInput interface { + pulumi.Input + + ToCIFSArrayOutput() CIFSArrayOutput + ToCIFSArrayOutputWithContext(context.Context) CIFSArrayOutput +} + +type CIFSArray []CIFSInput + +func (CIFSArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*CIFS)(nil)).Elem() +} + +func (i CIFSArray) ToCIFSArrayOutput() CIFSArrayOutput { + return i.ToCIFSArrayOutputWithContext(context.Background()) +} + +func (i CIFSArray) ToCIFSArrayOutputWithContext(ctx context.Context) CIFSArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(CIFSArrayOutput) +} + +// CIFSMapInput is an input type that accepts CIFSMap and CIFSMapOutput values. +// You can construct a concrete instance of `CIFSMapInput` via: +// +// CIFSMap{ "key": CIFSArgs{...} } +type CIFSMapInput interface { + pulumi.Input + + ToCIFSMapOutput() CIFSMapOutput + ToCIFSMapOutputWithContext(context.Context) CIFSMapOutput +} + +type CIFSMap map[string]CIFSInput + +func (CIFSMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*CIFS)(nil)).Elem() +} + +func (i CIFSMap) ToCIFSMapOutput() CIFSMapOutput { + return i.ToCIFSMapOutputWithContext(context.Background()) +} + +func (i CIFSMap) ToCIFSMapOutputWithContext(ctx context.Context) CIFSMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(CIFSMapOutput) +} + +type CIFSOutput struct{ *pulumi.OutputState } + +func (CIFSOutput) ElementType() reflect.Type { + return reflect.TypeOf((**CIFS)(nil)).Elem() +} + +func (o CIFSOutput) ToCIFSOutput() CIFSOutput { + return o +} + +func (o CIFSOutput) ToCIFSOutputWithContext(ctx context.Context) CIFSOutput { + return o +} + +// Configure backup retention settings for the storage type. +func (o CIFSOutput) Backups() CIFSBackupsPtrOutput { + return o.ApplyT(func(v *CIFS) CIFSBackupsPtrOutput { return v.Backups }).(CIFSBackupsPtrOutput) +} + +// The unique identifier of the storage. +func (o CIFSOutput) CifsId() pulumi.StringOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringOutput { return v.CifsId }).(pulumi.StringOutput) +} + +// The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). +func (o CIFSOutput) Contents() pulumi.StringArrayOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringArrayOutput { return v.Contents }).(pulumi.StringArrayOutput) +} + +// Whether the storage is disabled. +func (o CIFSOutput) Disable() pulumi.BoolOutput { + return o.ApplyT(func(v *CIFS) pulumi.BoolOutput { return v.Disable }).(pulumi.BoolOutput) +} + +// The SMB/CIFS domain. +func (o CIFSOutput) Domain() pulumi.StringPtrOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringPtrOutput { return v.Domain }).(pulumi.StringPtrOutput) +} + +// A list of nodes where this storage is available. +func (o CIFSOutput) Nodes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringArrayOutput { return v.Nodes }).(pulumi.StringArrayOutput) +} + +// The password for authenticating with the SMB/CIFS server. +func (o CIFSOutput) Password() pulumi.StringOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringOutput { return v.Password }).(pulumi.StringOutput) +} + +// The preallocation mode for raw and qcow2 images. +func (o CIFSOutput) Preallocation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringPtrOutput { return v.Preallocation }).(pulumi.StringPtrOutput) +} + +// The IP address or DNS name of the SMB/CIFS server. +func (o CIFSOutput) Server() pulumi.StringOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringOutput { return v.Server }).(pulumi.StringOutput) +} + +// The name of the SMB/CIFS share. +func (o CIFSOutput) Share() pulumi.StringOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringOutput { return v.Share }).(pulumi.StringOutput) +} + +// Whether the storage is shared across all nodes. +func (o CIFSOutput) Shared() pulumi.BoolOutput { + return o.ApplyT(func(v *CIFS) pulumi.BoolOutput { return v.Shared }).(pulumi.BoolOutput) +} + +// Enable support for creating snapshots through volume backing-chains. +func (o CIFSOutput) SnapshotAsVolumeChain() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *CIFS) pulumi.BoolPtrOutput { return v.SnapshotAsVolumeChain }).(pulumi.BoolPtrOutput) +} + +// A subdirectory to mount within the share. +func (o CIFSOutput) Subdirectory() pulumi.StringPtrOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringPtrOutput { return v.Subdirectory }).(pulumi.StringPtrOutput) +} + +// The username for authenticating with the SMB/CIFS server. +func (o CIFSOutput) Username() pulumi.StringOutput { + return o.ApplyT(func(v *CIFS) pulumi.StringOutput { return v.Username }).(pulumi.StringOutput) +} + +type CIFSArrayOutput struct{ *pulumi.OutputState } + +func (CIFSArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*CIFS)(nil)).Elem() +} + +func (o CIFSArrayOutput) ToCIFSArrayOutput() CIFSArrayOutput { + return o +} + +func (o CIFSArrayOutput) ToCIFSArrayOutputWithContext(ctx context.Context) CIFSArrayOutput { + return o +} + +func (o CIFSArrayOutput) Index(i pulumi.IntInput) CIFSOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *CIFS { + return vs[0].([]*CIFS)[vs[1].(int)] + }).(CIFSOutput) +} + +type CIFSMapOutput struct{ *pulumi.OutputState } + +func (CIFSMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*CIFS)(nil)).Elem() +} + +func (o CIFSMapOutput) ToCIFSMapOutput() CIFSMapOutput { + return o +} + +func (o CIFSMapOutput) ToCIFSMapOutputWithContext(ctx context.Context) CIFSMapOutput { + return o +} + +func (o CIFSMapOutput) MapIndex(k pulumi.StringInput) CIFSOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *CIFS { + return vs[0].(map[string]*CIFS)[vs[1].(string)] + }).(CIFSOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*CIFSInput)(nil)).Elem(), &CIFS{}) + pulumi.RegisterInputType(reflect.TypeOf((*CIFSArrayInput)(nil)).Elem(), CIFSArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*CIFSMapInput)(nil)).Elem(), CIFSMap{}) + pulumi.RegisterOutputType(CIFSOutput{}) + pulumi.RegisterOutputType(CIFSArrayOutput{}) + pulumi.RegisterOutputType(CIFSMapOutput{}) +} diff --git a/sdk/go/proxmoxve/storage/directory.go b/sdk/go/proxmoxve/storage/directory.go new file mode 100644 index 00000000..6875ad81 --- /dev/null +++ b/sdk/go/proxmoxve/storage/directory.go @@ -0,0 +1,366 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package storage + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages directory-based storage in Proxmox VE. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.NewDirectory(ctx, "example", &storage.DirectoryArgs{ +// DirectoryId: pulumi.String("example-dir"), +// Path: pulumi.String("/var/lib/vz"), +// Nodes: pulumi.StringArray{ +// pulumi.String("pve"), +// }, +// Contents: pulumi.StringArray{ +// pulumi.String("images"), +// }, +// Shared: pulumi.Bool(true), +// Disable: pulumi.Bool(false), +// Backups: &storage.DirectoryBackupsArgs{ +// MaxProtectedBackups: pulumi.Int(5), +// KeepDaily: pulumi.Int(7), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type Directory struct { + pulumi.CustomResourceState + + // Configure backup retention settings for the storage type. + Backups DirectoryBackupsPtrOutput `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayOutput `pulumi:"contents"` + // The unique identifier of the storage. + DirectoryId pulumi.StringOutput `pulumi:"directoryId"` + // Whether the storage is disabled. + Disable pulumi.BoolOutput `pulumi:"disable"` + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayOutput `pulumi:"nodes"` + // The path to the directory on the Proxmox node. + Path pulumi.StringOutput `pulumi:"path"` + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrOutput `pulumi:"preallocation"` + // Whether the storage is shared across all nodes. + Shared pulumi.BoolOutput `pulumi:"shared"` +} + +// NewDirectory registers a new resource with the given unique name, arguments, and options. +func NewDirectory(ctx *pulumi.Context, + name string, args *DirectoryArgs, opts ...pulumi.ResourceOption) (*Directory, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.DirectoryId == nil { + return nil, errors.New("invalid value for required argument 'DirectoryId'") + } + if args.Path == nil { + return nil, errors.New("invalid value for required argument 'Path'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Directory + err := ctx.RegisterResource("proxmoxve:Storage/directory:Directory", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetDirectory gets an existing Directory resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetDirectory(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *DirectoryState, opts ...pulumi.ResourceOption) (*Directory, error) { + var resource Directory + err := ctx.ReadResource("proxmoxve:Storage/directory:Directory", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Directory resources. +type directoryState struct { + // Configure backup retention settings for the storage type. + Backups *DirectoryBackups `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // The unique identifier of the storage. + DirectoryId *string `pulumi:"directoryId"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The path to the directory on the Proxmox node. + Path *string `pulumi:"path"` + // The preallocation mode for raw and qcow2 images. + Preallocation *string `pulumi:"preallocation"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` +} + +type DirectoryState struct { + // Configure backup retention settings for the storage type. + Backups DirectoryBackupsPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // The unique identifier of the storage. + DirectoryId pulumi.StringPtrInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The path to the directory on the Proxmox node. + Path pulumi.StringPtrInput + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput +} + +func (DirectoryState) ElementType() reflect.Type { + return reflect.TypeOf((*directoryState)(nil)).Elem() +} + +type directoryArgs struct { + // Configure backup retention settings for the storage type. + Backups *DirectoryBackups `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // The unique identifier of the storage. + DirectoryId string `pulumi:"directoryId"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The path to the directory on the Proxmox node. + Path string `pulumi:"path"` + // The preallocation mode for raw and qcow2 images. + Preallocation *string `pulumi:"preallocation"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` +} + +// The set of arguments for constructing a Directory resource. +type DirectoryArgs struct { + // Configure backup retention settings for the storage type. + Backups DirectoryBackupsPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // The unique identifier of the storage. + DirectoryId pulumi.StringInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The path to the directory on the Proxmox node. + Path pulumi.StringInput + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput +} + +func (DirectoryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*directoryArgs)(nil)).Elem() +} + +type DirectoryInput interface { + pulumi.Input + + ToDirectoryOutput() DirectoryOutput + ToDirectoryOutputWithContext(ctx context.Context) DirectoryOutput +} + +func (*Directory) ElementType() reflect.Type { + return reflect.TypeOf((**Directory)(nil)).Elem() +} + +func (i *Directory) ToDirectoryOutput() DirectoryOutput { + return i.ToDirectoryOutputWithContext(context.Background()) +} + +func (i *Directory) ToDirectoryOutputWithContext(ctx context.Context) DirectoryOutput { + return pulumi.ToOutputWithContext(ctx, i).(DirectoryOutput) +} + +// DirectoryArrayInput is an input type that accepts DirectoryArray and DirectoryArrayOutput values. +// You can construct a concrete instance of `DirectoryArrayInput` via: +// +// DirectoryArray{ DirectoryArgs{...} } +type DirectoryArrayInput interface { + pulumi.Input + + ToDirectoryArrayOutput() DirectoryArrayOutput + ToDirectoryArrayOutputWithContext(context.Context) DirectoryArrayOutput +} + +type DirectoryArray []DirectoryInput + +func (DirectoryArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Directory)(nil)).Elem() +} + +func (i DirectoryArray) ToDirectoryArrayOutput() DirectoryArrayOutput { + return i.ToDirectoryArrayOutputWithContext(context.Background()) +} + +func (i DirectoryArray) ToDirectoryArrayOutputWithContext(ctx context.Context) DirectoryArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(DirectoryArrayOutput) +} + +// DirectoryMapInput is an input type that accepts DirectoryMap and DirectoryMapOutput values. +// You can construct a concrete instance of `DirectoryMapInput` via: +// +// DirectoryMap{ "key": DirectoryArgs{...} } +type DirectoryMapInput interface { + pulumi.Input + + ToDirectoryMapOutput() DirectoryMapOutput + ToDirectoryMapOutputWithContext(context.Context) DirectoryMapOutput +} + +type DirectoryMap map[string]DirectoryInput + +func (DirectoryMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Directory)(nil)).Elem() +} + +func (i DirectoryMap) ToDirectoryMapOutput() DirectoryMapOutput { + return i.ToDirectoryMapOutputWithContext(context.Background()) +} + +func (i DirectoryMap) ToDirectoryMapOutputWithContext(ctx context.Context) DirectoryMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(DirectoryMapOutput) +} + +type DirectoryOutput struct{ *pulumi.OutputState } + +func (DirectoryOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Directory)(nil)).Elem() +} + +func (o DirectoryOutput) ToDirectoryOutput() DirectoryOutput { + return o +} + +func (o DirectoryOutput) ToDirectoryOutputWithContext(ctx context.Context) DirectoryOutput { + return o +} + +// Configure backup retention settings for the storage type. +func (o DirectoryOutput) Backups() DirectoryBackupsPtrOutput { + return o.ApplyT(func(v *Directory) DirectoryBackupsPtrOutput { return v.Backups }).(DirectoryBackupsPtrOutput) +} + +// The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). +func (o DirectoryOutput) Contents() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Directory) pulumi.StringArrayOutput { return v.Contents }).(pulumi.StringArrayOutput) +} + +// The unique identifier of the storage. +func (o DirectoryOutput) DirectoryId() pulumi.StringOutput { + return o.ApplyT(func(v *Directory) pulumi.StringOutput { return v.DirectoryId }).(pulumi.StringOutput) +} + +// Whether the storage is disabled. +func (o DirectoryOutput) Disable() pulumi.BoolOutput { + return o.ApplyT(func(v *Directory) pulumi.BoolOutput { return v.Disable }).(pulumi.BoolOutput) +} + +// A list of nodes where this storage is available. +func (o DirectoryOutput) Nodes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Directory) pulumi.StringArrayOutput { return v.Nodes }).(pulumi.StringArrayOutput) +} + +// The path to the directory on the Proxmox node. +func (o DirectoryOutput) Path() pulumi.StringOutput { + return o.ApplyT(func(v *Directory) pulumi.StringOutput { return v.Path }).(pulumi.StringOutput) +} + +// The preallocation mode for raw and qcow2 images. +func (o DirectoryOutput) Preallocation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Directory) pulumi.StringPtrOutput { return v.Preallocation }).(pulumi.StringPtrOutput) +} + +// Whether the storage is shared across all nodes. +func (o DirectoryOutput) Shared() pulumi.BoolOutput { + return o.ApplyT(func(v *Directory) pulumi.BoolOutput { return v.Shared }).(pulumi.BoolOutput) +} + +type DirectoryArrayOutput struct{ *pulumi.OutputState } + +func (DirectoryArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Directory)(nil)).Elem() +} + +func (o DirectoryArrayOutput) ToDirectoryArrayOutput() DirectoryArrayOutput { + return o +} + +func (o DirectoryArrayOutput) ToDirectoryArrayOutputWithContext(ctx context.Context) DirectoryArrayOutput { + return o +} + +func (o DirectoryArrayOutput) Index(i pulumi.IntInput) DirectoryOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Directory { + return vs[0].([]*Directory)[vs[1].(int)] + }).(DirectoryOutput) +} + +type DirectoryMapOutput struct{ *pulumi.OutputState } + +func (DirectoryMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Directory)(nil)).Elem() +} + +func (o DirectoryMapOutput) ToDirectoryMapOutput() DirectoryMapOutput { + return o +} + +func (o DirectoryMapOutput) ToDirectoryMapOutputWithContext(ctx context.Context) DirectoryMapOutput { + return o +} + +func (o DirectoryMapOutput) MapIndex(k pulumi.StringInput) DirectoryOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Directory { + return vs[0].(map[string]*Directory)[vs[1].(string)] + }).(DirectoryOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*DirectoryInput)(nil)).Elem(), &Directory{}) + pulumi.RegisterInputType(reflect.TypeOf((*DirectoryArrayInput)(nil)).Elem(), DirectoryArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*DirectoryMapInput)(nil)).Elem(), DirectoryMap{}) + pulumi.RegisterOutputType(DirectoryOutput{}) + pulumi.RegisterOutputType(DirectoryArrayOutput{}) + pulumi.RegisterOutputType(DirectoryMapOutput{}) +} diff --git a/sdk/go/proxmoxve/storage/init.go b/sdk/go/proxmoxve/storage/init.go index 717cddaa..990cf382 100644 --- a/sdk/go/proxmoxve/storage/init.go +++ b/sdk/go/proxmoxve/storage/init.go @@ -21,8 +21,22 @@ func (m *module) Version() semver.Version { func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { switch typ { + case "proxmoxve:Storage/cIFS:CIFS": + r = &CIFS{} + case "proxmoxve:Storage/directory:Directory": + r = &Directory{} case "proxmoxve:Storage/file:File": r = &File{} + case "proxmoxve:Storage/lVM:LVM": + r = &LVM{} + case "proxmoxve:Storage/lVMThin:LVMThin": + r = &LVMThin{} + case "proxmoxve:Storage/nFS:NFS": + r = &NFS{} + case "proxmoxve:Storage/pBS:PBS": + r = &PBS{} + case "proxmoxve:Storage/zFSPool:ZFSPool": + r = &ZFSPool{} default: return nil, fmt.Errorf("unknown resource type: %s", typ) } @@ -36,9 +50,44 @@ func init() { if err != nil { version = semver.Version{Major: 1} } + pulumi.RegisterResourceModule( + "proxmoxve", + "Storage/cIFS", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Storage/directory", + &module{version}, + ) pulumi.RegisterResourceModule( "proxmoxve", "Storage/file", &module{version}, ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Storage/lVM", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Storage/lVMThin", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Storage/nFS", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Storage/pBS", + &module{version}, + ) + pulumi.RegisterResourceModule( + "proxmoxve", + "Storage/zFSPool", + &module{version}, + ) } diff --git a/sdk/go/proxmoxve/storage/lvm.go b/sdk/go/proxmoxve/storage/lvm.go new file mode 100644 index 00000000..ac28f3cf --- /dev/null +++ b/sdk/go/proxmoxve/storage/lvm.go @@ -0,0 +1,346 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package storage + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages LVM-based storage in Proxmox VE. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.NewLVM(ctx, "example", &storage.LVMArgs{ +// LvmId: pulumi.String("example-lvm"), +// Nodes: pulumi.StringArray{ +// pulumi.String("pve"), +// }, +// VolumeGroup: pulumi.String("vg0"), +// Contents: pulumi.StringArray{ +// pulumi.String("images"), +// }, +// WipeRemovedVolumes: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type LVM struct { + pulumi.CustomResourceState + + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayOutput `pulumi:"contents"` + // Whether the storage is disabled. + Disable pulumi.BoolOutput `pulumi:"disable"` + // The unique identifier of the storage. + LvmId pulumi.StringOutput `pulumi:"lvmId"` + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayOutput `pulumi:"nodes"` + // Whether the storage is shared across all nodes. + Shared pulumi.BoolOutput `pulumi:"shared"` + // The name of the volume group to use. + VolumeGroup pulumi.StringOutput `pulumi:"volumeGroup"` + // Whether to zero-out data when removing LVMs. + WipeRemovedVolumes pulumi.BoolOutput `pulumi:"wipeRemovedVolumes"` +} + +// NewLVM registers a new resource with the given unique name, arguments, and options. +func NewLVM(ctx *pulumi.Context, + name string, args *LVMArgs, opts ...pulumi.ResourceOption) (*LVM, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.LvmId == nil { + return nil, errors.New("invalid value for required argument 'LvmId'") + } + if args.VolumeGroup == nil { + return nil, errors.New("invalid value for required argument 'VolumeGroup'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource LVM + err := ctx.RegisterResource("proxmoxve:Storage/lVM:LVM", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetLVM gets an existing LVM resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetLVM(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *LVMState, opts ...pulumi.ResourceOption) (*LVM, error) { + var resource LVM + err := ctx.ReadResource("proxmoxve:Storage/lVM:LVM", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering LVM resources. +type lvmState struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The unique identifier of the storage. + LvmId *string `pulumi:"lvmId"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` + // The name of the volume group to use. + VolumeGroup *string `pulumi:"volumeGroup"` + // Whether to zero-out data when removing LVMs. + WipeRemovedVolumes *bool `pulumi:"wipeRemovedVolumes"` +} + +type LVMState struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The unique identifier of the storage. + LvmId pulumi.StringPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput + // The name of the volume group to use. + VolumeGroup pulumi.StringPtrInput + // Whether to zero-out data when removing LVMs. + WipeRemovedVolumes pulumi.BoolPtrInput +} + +func (LVMState) ElementType() reflect.Type { + return reflect.TypeOf((*lvmState)(nil)).Elem() +} + +type lvmArgs struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The unique identifier of the storage. + LvmId string `pulumi:"lvmId"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` + // The name of the volume group to use. + VolumeGroup string `pulumi:"volumeGroup"` + // Whether to zero-out data when removing LVMs. + WipeRemovedVolumes *bool `pulumi:"wipeRemovedVolumes"` +} + +// The set of arguments for constructing a LVM resource. +type LVMArgs struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The unique identifier of the storage. + LvmId pulumi.StringInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput + // The name of the volume group to use. + VolumeGroup pulumi.StringInput + // Whether to zero-out data when removing LVMs. + WipeRemovedVolumes pulumi.BoolPtrInput +} + +func (LVMArgs) ElementType() reflect.Type { + return reflect.TypeOf((*lvmArgs)(nil)).Elem() +} + +type LVMInput interface { + pulumi.Input + + ToLVMOutput() LVMOutput + ToLVMOutputWithContext(ctx context.Context) LVMOutput +} + +func (*LVM) ElementType() reflect.Type { + return reflect.TypeOf((**LVM)(nil)).Elem() +} + +func (i *LVM) ToLVMOutput() LVMOutput { + return i.ToLVMOutputWithContext(context.Background()) +} + +func (i *LVM) ToLVMOutputWithContext(ctx context.Context) LVMOutput { + return pulumi.ToOutputWithContext(ctx, i).(LVMOutput) +} + +// LVMArrayInput is an input type that accepts LVMArray and LVMArrayOutput values. +// You can construct a concrete instance of `LVMArrayInput` via: +// +// LVMArray{ LVMArgs{...} } +type LVMArrayInput interface { + pulumi.Input + + ToLVMArrayOutput() LVMArrayOutput + ToLVMArrayOutputWithContext(context.Context) LVMArrayOutput +} + +type LVMArray []LVMInput + +func (LVMArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*LVM)(nil)).Elem() +} + +func (i LVMArray) ToLVMArrayOutput() LVMArrayOutput { + return i.ToLVMArrayOutputWithContext(context.Background()) +} + +func (i LVMArray) ToLVMArrayOutputWithContext(ctx context.Context) LVMArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(LVMArrayOutput) +} + +// LVMMapInput is an input type that accepts LVMMap and LVMMapOutput values. +// You can construct a concrete instance of `LVMMapInput` via: +// +// LVMMap{ "key": LVMArgs{...} } +type LVMMapInput interface { + pulumi.Input + + ToLVMMapOutput() LVMMapOutput + ToLVMMapOutputWithContext(context.Context) LVMMapOutput +} + +type LVMMap map[string]LVMInput + +func (LVMMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*LVM)(nil)).Elem() +} + +func (i LVMMap) ToLVMMapOutput() LVMMapOutput { + return i.ToLVMMapOutputWithContext(context.Background()) +} + +func (i LVMMap) ToLVMMapOutputWithContext(ctx context.Context) LVMMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(LVMMapOutput) +} + +type LVMOutput struct{ *pulumi.OutputState } + +func (LVMOutput) ElementType() reflect.Type { + return reflect.TypeOf((**LVM)(nil)).Elem() +} + +func (o LVMOutput) ToLVMOutput() LVMOutput { + return o +} + +func (o LVMOutput) ToLVMOutputWithContext(ctx context.Context) LVMOutput { + return o +} + +// The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). +func (o LVMOutput) Contents() pulumi.StringArrayOutput { + return o.ApplyT(func(v *LVM) pulumi.StringArrayOutput { return v.Contents }).(pulumi.StringArrayOutput) +} + +// Whether the storage is disabled. +func (o LVMOutput) Disable() pulumi.BoolOutput { + return o.ApplyT(func(v *LVM) pulumi.BoolOutput { return v.Disable }).(pulumi.BoolOutput) +} + +// The unique identifier of the storage. +func (o LVMOutput) LvmId() pulumi.StringOutput { + return o.ApplyT(func(v *LVM) pulumi.StringOutput { return v.LvmId }).(pulumi.StringOutput) +} + +// A list of nodes where this storage is available. +func (o LVMOutput) Nodes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *LVM) pulumi.StringArrayOutput { return v.Nodes }).(pulumi.StringArrayOutput) +} + +// Whether the storage is shared across all nodes. +func (o LVMOutput) Shared() pulumi.BoolOutput { + return o.ApplyT(func(v *LVM) pulumi.BoolOutput { return v.Shared }).(pulumi.BoolOutput) +} + +// The name of the volume group to use. +func (o LVMOutput) VolumeGroup() pulumi.StringOutput { + return o.ApplyT(func(v *LVM) pulumi.StringOutput { return v.VolumeGroup }).(pulumi.StringOutput) +} + +// Whether to zero-out data when removing LVMs. +func (o LVMOutput) WipeRemovedVolumes() pulumi.BoolOutput { + return o.ApplyT(func(v *LVM) pulumi.BoolOutput { return v.WipeRemovedVolumes }).(pulumi.BoolOutput) +} + +type LVMArrayOutput struct{ *pulumi.OutputState } + +func (LVMArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*LVM)(nil)).Elem() +} + +func (o LVMArrayOutput) ToLVMArrayOutput() LVMArrayOutput { + return o +} + +func (o LVMArrayOutput) ToLVMArrayOutputWithContext(ctx context.Context) LVMArrayOutput { + return o +} + +func (o LVMArrayOutput) Index(i pulumi.IntInput) LVMOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *LVM { + return vs[0].([]*LVM)[vs[1].(int)] + }).(LVMOutput) +} + +type LVMMapOutput struct{ *pulumi.OutputState } + +func (LVMMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*LVM)(nil)).Elem() +} + +func (o LVMMapOutput) ToLVMMapOutput() LVMMapOutput { + return o +} + +func (o LVMMapOutput) ToLVMMapOutputWithContext(ctx context.Context) LVMMapOutput { + return o +} + +func (o LVMMapOutput) MapIndex(k pulumi.StringInput) LVMOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *LVM { + return vs[0].(map[string]*LVM)[vs[1].(string)] + }).(LVMOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*LVMInput)(nil)).Elem(), &LVM{}) + pulumi.RegisterInputType(reflect.TypeOf((*LVMArrayInput)(nil)).Elem(), LVMArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*LVMMapInput)(nil)).Elem(), LVMMap{}) + pulumi.RegisterOutputType(LVMOutput{}) + pulumi.RegisterOutputType(LVMArrayOutput{}) + pulumi.RegisterOutputType(LVMMapOutput{}) +} diff --git a/sdk/go/proxmoxve/storage/lvmthin.go b/sdk/go/proxmoxve/storage/lvmthin.go new file mode 100644 index 00000000..3b5cbb96 --- /dev/null +++ b/sdk/go/proxmoxve/storage/lvmthin.go @@ -0,0 +1,345 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package storage + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages thin LVM-based storage in Proxmox VE. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.NewLVMThin(ctx, "example", &storage.LVMThinArgs{ +// LvmThinId: pulumi.String("example-lvmthin"), +// Nodes: pulumi.StringArray{ +// pulumi.String("pve"), +// }, +// VolumeGroup: pulumi.String("vg0"), +// ThinPool: pulumi.String("data"), +// Contents: pulumi.StringArray{ +// pulumi.String("images"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type LVMThin struct { + pulumi.CustomResourceState + + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayOutput `pulumi:"contents"` + // Whether the storage is disabled. + Disable pulumi.BoolOutput `pulumi:"disable"` + // The unique identifier of the storage. + LvmThinId pulumi.StringOutput `pulumi:"lvmThinId"` + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayOutput `pulumi:"nodes"` + // Whether the storage is shared across all nodes. + Shared pulumi.BoolOutput `pulumi:"shared"` + // The name of the LVM thin pool to use. + ThinPool pulumi.StringOutput `pulumi:"thinPool"` + // The name of the volume group to use. + VolumeGroup pulumi.StringOutput `pulumi:"volumeGroup"` +} + +// NewLVMThin registers a new resource with the given unique name, arguments, and options. +func NewLVMThin(ctx *pulumi.Context, + name string, args *LVMThinArgs, opts ...pulumi.ResourceOption) (*LVMThin, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.LvmThinId == nil { + return nil, errors.New("invalid value for required argument 'LvmThinId'") + } + if args.ThinPool == nil { + return nil, errors.New("invalid value for required argument 'ThinPool'") + } + if args.VolumeGroup == nil { + return nil, errors.New("invalid value for required argument 'VolumeGroup'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource LVMThin + err := ctx.RegisterResource("proxmoxve:Storage/lVMThin:LVMThin", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetLVMThin gets an existing LVMThin resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetLVMThin(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *LVMThinState, opts ...pulumi.ResourceOption) (*LVMThin, error) { + var resource LVMThin + err := ctx.ReadResource("proxmoxve:Storage/lVMThin:LVMThin", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering LVMThin resources. +type lvmthinState struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The unique identifier of the storage. + LvmThinId *string `pulumi:"lvmThinId"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` + // The name of the LVM thin pool to use. + ThinPool *string `pulumi:"thinPool"` + // The name of the volume group to use. + VolumeGroup *string `pulumi:"volumeGroup"` +} + +type LVMThinState struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The unique identifier of the storage. + LvmThinId pulumi.StringPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput + // The name of the LVM thin pool to use. + ThinPool pulumi.StringPtrInput + // The name of the volume group to use. + VolumeGroup pulumi.StringPtrInput +} + +func (LVMThinState) ElementType() reflect.Type { + return reflect.TypeOf((*lvmthinState)(nil)).Elem() +} + +type lvmthinArgs struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The unique identifier of the storage. + LvmThinId string `pulumi:"lvmThinId"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The name of the LVM thin pool to use. + ThinPool string `pulumi:"thinPool"` + // The name of the volume group to use. + VolumeGroup string `pulumi:"volumeGroup"` +} + +// The set of arguments for constructing a LVMThin resource. +type LVMThinArgs struct { + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The unique identifier of the storage. + LvmThinId pulumi.StringInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The name of the LVM thin pool to use. + ThinPool pulumi.StringInput + // The name of the volume group to use. + VolumeGroup pulumi.StringInput +} + +func (LVMThinArgs) ElementType() reflect.Type { + return reflect.TypeOf((*lvmthinArgs)(nil)).Elem() +} + +type LVMThinInput interface { + pulumi.Input + + ToLVMThinOutput() LVMThinOutput + ToLVMThinOutputWithContext(ctx context.Context) LVMThinOutput +} + +func (*LVMThin) ElementType() reflect.Type { + return reflect.TypeOf((**LVMThin)(nil)).Elem() +} + +func (i *LVMThin) ToLVMThinOutput() LVMThinOutput { + return i.ToLVMThinOutputWithContext(context.Background()) +} + +func (i *LVMThin) ToLVMThinOutputWithContext(ctx context.Context) LVMThinOutput { + return pulumi.ToOutputWithContext(ctx, i).(LVMThinOutput) +} + +// LVMThinArrayInput is an input type that accepts LVMThinArray and LVMThinArrayOutput values. +// You can construct a concrete instance of `LVMThinArrayInput` via: +// +// LVMThinArray{ LVMThinArgs{...} } +type LVMThinArrayInput interface { + pulumi.Input + + ToLVMThinArrayOutput() LVMThinArrayOutput + ToLVMThinArrayOutputWithContext(context.Context) LVMThinArrayOutput +} + +type LVMThinArray []LVMThinInput + +func (LVMThinArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*LVMThin)(nil)).Elem() +} + +func (i LVMThinArray) ToLVMThinArrayOutput() LVMThinArrayOutput { + return i.ToLVMThinArrayOutputWithContext(context.Background()) +} + +func (i LVMThinArray) ToLVMThinArrayOutputWithContext(ctx context.Context) LVMThinArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(LVMThinArrayOutput) +} + +// LVMThinMapInput is an input type that accepts LVMThinMap and LVMThinMapOutput values. +// You can construct a concrete instance of `LVMThinMapInput` via: +// +// LVMThinMap{ "key": LVMThinArgs{...} } +type LVMThinMapInput interface { + pulumi.Input + + ToLVMThinMapOutput() LVMThinMapOutput + ToLVMThinMapOutputWithContext(context.Context) LVMThinMapOutput +} + +type LVMThinMap map[string]LVMThinInput + +func (LVMThinMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*LVMThin)(nil)).Elem() +} + +func (i LVMThinMap) ToLVMThinMapOutput() LVMThinMapOutput { + return i.ToLVMThinMapOutputWithContext(context.Background()) +} + +func (i LVMThinMap) ToLVMThinMapOutputWithContext(ctx context.Context) LVMThinMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(LVMThinMapOutput) +} + +type LVMThinOutput struct{ *pulumi.OutputState } + +func (LVMThinOutput) ElementType() reflect.Type { + return reflect.TypeOf((**LVMThin)(nil)).Elem() +} + +func (o LVMThinOutput) ToLVMThinOutput() LVMThinOutput { + return o +} + +func (o LVMThinOutput) ToLVMThinOutputWithContext(ctx context.Context) LVMThinOutput { + return o +} + +// The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). +func (o LVMThinOutput) Contents() pulumi.StringArrayOutput { + return o.ApplyT(func(v *LVMThin) pulumi.StringArrayOutput { return v.Contents }).(pulumi.StringArrayOutput) +} + +// Whether the storage is disabled. +func (o LVMThinOutput) Disable() pulumi.BoolOutput { + return o.ApplyT(func(v *LVMThin) pulumi.BoolOutput { return v.Disable }).(pulumi.BoolOutput) +} + +// The unique identifier of the storage. +func (o LVMThinOutput) LvmThinId() pulumi.StringOutput { + return o.ApplyT(func(v *LVMThin) pulumi.StringOutput { return v.LvmThinId }).(pulumi.StringOutput) +} + +// A list of nodes where this storage is available. +func (o LVMThinOutput) Nodes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *LVMThin) pulumi.StringArrayOutput { return v.Nodes }).(pulumi.StringArrayOutput) +} + +// Whether the storage is shared across all nodes. +func (o LVMThinOutput) Shared() pulumi.BoolOutput { + return o.ApplyT(func(v *LVMThin) pulumi.BoolOutput { return v.Shared }).(pulumi.BoolOutput) +} + +// The name of the LVM thin pool to use. +func (o LVMThinOutput) ThinPool() pulumi.StringOutput { + return o.ApplyT(func(v *LVMThin) pulumi.StringOutput { return v.ThinPool }).(pulumi.StringOutput) +} + +// The name of the volume group to use. +func (o LVMThinOutput) VolumeGroup() pulumi.StringOutput { + return o.ApplyT(func(v *LVMThin) pulumi.StringOutput { return v.VolumeGroup }).(pulumi.StringOutput) +} + +type LVMThinArrayOutput struct{ *pulumi.OutputState } + +func (LVMThinArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*LVMThin)(nil)).Elem() +} + +func (o LVMThinArrayOutput) ToLVMThinArrayOutput() LVMThinArrayOutput { + return o +} + +func (o LVMThinArrayOutput) ToLVMThinArrayOutputWithContext(ctx context.Context) LVMThinArrayOutput { + return o +} + +func (o LVMThinArrayOutput) Index(i pulumi.IntInput) LVMThinOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *LVMThin { + return vs[0].([]*LVMThin)[vs[1].(int)] + }).(LVMThinOutput) +} + +type LVMThinMapOutput struct{ *pulumi.OutputState } + +func (LVMThinMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*LVMThin)(nil)).Elem() +} + +func (o LVMThinMapOutput) ToLVMThinMapOutput() LVMThinMapOutput { + return o +} + +func (o LVMThinMapOutput) ToLVMThinMapOutputWithContext(ctx context.Context) LVMThinMapOutput { + return o +} + +func (o LVMThinMapOutput) MapIndex(k pulumi.StringInput) LVMThinOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *LVMThin { + return vs[0].(map[string]*LVMThin)[vs[1].(string)] + }).(LVMThinOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*LVMThinInput)(nil)).Elem(), &LVMThin{}) + pulumi.RegisterInputType(reflect.TypeOf((*LVMThinArrayInput)(nil)).Elem(), LVMThinArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*LVMThinMapInput)(nil)).Elem(), LVMThinMap{}) + pulumi.RegisterOutputType(LVMThinOutput{}) + pulumi.RegisterOutputType(LVMThinArrayOutput{}) + pulumi.RegisterOutputType(LVMThinMapOutput{}) +} diff --git a/sdk/go/proxmoxve/storage/nfs.go b/sdk/go/proxmoxve/storage/nfs.go new file mode 100644 index 00000000..23f51fa2 --- /dev/null +++ b/sdk/go/proxmoxve/storage/nfs.go @@ -0,0 +1,414 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package storage + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages an NFS-based storage in Proxmox VE. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.NewNFS(ctx, "example", &storage.NFSArgs{ +// NfsId: pulumi.String("example-nfs"), +// Nodes: pulumi.StringArray{ +// pulumi.String("pve"), +// }, +// Server: pulumi.String("10.0.0.10"), +// Export: pulumi.String("/exports/proxmox"), +// Contents: pulumi.StringArray{ +// pulumi.String("images"), +// pulumi.String("iso"), +// pulumi.String("backup"), +// }, +// Options: pulumi.String("vers=4.2"), +// Preallocation: pulumi.String("metadata"), +// SnapshotAsVolumeChain: pulumi.Bool(true), +// Backups: &storage.NFSBackupsArgs{ +// MaxProtectedBackups: pulumi.Int(5), +// KeepDaily: pulumi.Int(7), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type NFS struct { + pulumi.CustomResourceState + + // Configure backup retention settings for the storage type. + Backups NFSBackupsPtrOutput `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayOutput `pulumi:"contents"` + // Whether the storage is disabled. + Disable pulumi.BoolOutput `pulumi:"disable"` + // The path of the NFS export. + Export pulumi.StringOutput `pulumi:"export"` + // The unique identifier of the storage. + NfsId pulumi.StringOutput `pulumi:"nfsId"` + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayOutput `pulumi:"nodes"` + // The options to pass to the NFS service. + Options pulumi.StringPtrOutput `pulumi:"options"` + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrOutput `pulumi:"preallocation"` + // The IP address or DNS name of the NFS server. + Server pulumi.StringOutput `pulumi:"server"` + // Whether the storage is shared across all nodes. + Shared pulumi.BoolOutput `pulumi:"shared"` + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain pulumi.BoolPtrOutput `pulumi:"snapshotAsVolumeChain"` +} + +// NewNFS registers a new resource with the given unique name, arguments, and options. +func NewNFS(ctx *pulumi.Context, + name string, args *NFSArgs, opts ...pulumi.ResourceOption) (*NFS, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Export == nil { + return nil, errors.New("invalid value for required argument 'Export'") + } + if args.NfsId == nil { + return nil, errors.New("invalid value for required argument 'NfsId'") + } + if args.Server == nil { + return nil, errors.New("invalid value for required argument 'Server'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource NFS + err := ctx.RegisterResource("proxmoxve:Storage/nFS:NFS", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetNFS gets an existing NFS resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetNFS(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *NFSState, opts ...pulumi.ResourceOption) (*NFS, error) { + var resource NFS + err := ctx.ReadResource("proxmoxve:Storage/nFS:NFS", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering NFS resources. +type nfsState struct { + // Configure backup retention settings for the storage type. + Backups *NFSBackups `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The path of the NFS export. + Export *string `pulumi:"export"` + // The unique identifier of the storage. + NfsId *string `pulumi:"nfsId"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The options to pass to the NFS service. + Options *string `pulumi:"options"` + // The preallocation mode for raw and qcow2 images. + Preallocation *string `pulumi:"preallocation"` + // The IP address or DNS name of the NFS server. + Server *string `pulumi:"server"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain *bool `pulumi:"snapshotAsVolumeChain"` +} + +type NFSState struct { + // Configure backup retention settings for the storage type. + Backups NFSBackupsPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The path of the NFS export. + Export pulumi.StringPtrInput + // The unique identifier of the storage. + NfsId pulumi.StringPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The options to pass to the NFS service. + Options pulumi.StringPtrInput + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrInput + // The IP address or DNS name of the NFS server. + Server pulumi.StringPtrInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain pulumi.BoolPtrInput +} + +func (NFSState) ElementType() reflect.Type { + return reflect.TypeOf((*nfsState)(nil)).Elem() +} + +type nfsArgs struct { + // Configure backup retention settings for the storage type. + Backups *NFSBackups `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // The path of the NFS export. + Export string `pulumi:"export"` + // The unique identifier of the storage. + NfsId string `pulumi:"nfsId"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The options to pass to the NFS service. + Options *string `pulumi:"options"` + // The preallocation mode for raw and qcow2 images. + Preallocation *string `pulumi:"preallocation"` + // The IP address or DNS name of the NFS server. + Server string `pulumi:"server"` + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain *bool `pulumi:"snapshotAsVolumeChain"` +} + +// The set of arguments for constructing a NFS resource. +type NFSArgs struct { + // Configure backup retention settings for the storage type. + Backups NFSBackupsPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // The path of the NFS export. + Export pulumi.StringInput + // The unique identifier of the storage. + NfsId pulumi.StringInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The options to pass to the NFS service. + Options pulumi.StringPtrInput + // The preallocation mode for raw and qcow2 images. + Preallocation pulumi.StringPtrInput + // The IP address or DNS name of the NFS server. + Server pulumi.StringInput + // Enable support for creating snapshots through volume backing-chains. + SnapshotAsVolumeChain pulumi.BoolPtrInput +} + +func (NFSArgs) ElementType() reflect.Type { + return reflect.TypeOf((*nfsArgs)(nil)).Elem() +} + +type NFSInput interface { + pulumi.Input + + ToNFSOutput() NFSOutput + ToNFSOutputWithContext(ctx context.Context) NFSOutput +} + +func (*NFS) ElementType() reflect.Type { + return reflect.TypeOf((**NFS)(nil)).Elem() +} + +func (i *NFS) ToNFSOutput() NFSOutput { + return i.ToNFSOutputWithContext(context.Background()) +} + +func (i *NFS) ToNFSOutputWithContext(ctx context.Context) NFSOutput { + return pulumi.ToOutputWithContext(ctx, i).(NFSOutput) +} + +// NFSArrayInput is an input type that accepts NFSArray and NFSArrayOutput values. +// You can construct a concrete instance of `NFSArrayInput` via: +// +// NFSArray{ NFSArgs{...} } +type NFSArrayInput interface { + pulumi.Input + + ToNFSArrayOutput() NFSArrayOutput + ToNFSArrayOutputWithContext(context.Context) NFSArrayOutput +} + +type NFSArray []NFSInput + +func (NFSArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*NFS)(nil)).Elem() +} + +func (i NFSArray) ToNFSArrayOutput() NFSArrayOutput { + return i.ToNFSArrayOutputWithContext(context.Background()) +} + +func (i NFSArray) ToNFSArrayOutputWithContext(ctx context.Context) NFSArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(NFSArrayOutput) +} + +// NFSMapInput is an input type that accepts NFSMap and NFSMapOutput values. +// You can construct a concrete instance of `NFSMapInput` via: +// +// NFSMap{ "key": NFSArgs{...} } +type NFSMapInput interface { + pulumi.Input + + ToNFSMapOutput() NFSMapOutput + ToNFSMapOutputWithContext(context.Context) NFSMapOutput +} + +type NFSMap map[string]NFSInput + +func (NFSMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*NFS)(nil)).Elem() +} + +func (i NFSMap) ToNFSMapOutput() NFSMapOutput { + return i.ToNFSMapOutputWithContext(context.Background()) +} + +func (i NFSMap) ToNFSMapOutputWithContext(ctx context.Context) NFSMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(NFSMapOutput) +} + +type NFSOutput struct{ *pulumi.OutputState } + +func (NFSOutput) ElementType() reflect.Type { + return reflect.TypeOf((**NFS)(nil)).Elem() +} + +func (o NFSOutput) ToNFSOutput() NFSOutput { + return o +} + +func (o NFSOutput) ToNFSOutputWithContext(ctx context.Context) NFSOutput { + return o +} + +// Configure backup retention settings for the storage type. +func (o NFSOutput) Backups() NFSBackupsPtrOutput { + return o.ApplyT(func(v *NFS) NFSBackupsPtrOutput { return v.Backups }).(NFSBackupsPtrOutput) +} + +// The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). +func (o NFSOutput) Contents() pulumi.StringArrayOutput { + return o.ApplyT(func(v *NFS) pulumi.StringArrayOutput { return v.Contents }).(pulumi.StringArrayOutput) +} + +// Whether the storage is disabled. +func (o NFSOutput) Disable() pulumi.BoolOutput { + return o.ApplyT(func(v *NFS) pulumi.BoolOutput { return v.Disable }).(pulumi.BoolOutput) +} + +// The path of the NFS export. +func (o NFSOutput) Export() pulumi.StringOutput { + return o.ApplyT(func(v *NFS) pulumi.StringOutput { return v.Export }).(pulumi.StringOutput) +} + +// The unique identifier of the storage. +func (o NFSOutput) NfsId() pulumi.StringOutput { + return o.ApplyT(func(v *NFS) pulumi.StringOutput { return v.NfsId }).(pulumi.StringOutput) +} + +// A list of nodes where this storage is available. +func (o NFSOutput) Nodes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *NFS) pulumi.StringArrayOutput { return v.Nodes }).(pulumi.StringArrayOutput) +} + +// The options to pass to the NFS service. +func (o NFSOutput) Options() pulumi.StringPtrOutput { + return o.ApplyT(func(v *NFS) pulumi.StringPtrOutput { return v.Options }).(pulumi.StringPtrOutput) +} + +// The preallocation mode for raw and qcow2 images. +func (o NFSOutput) Preallocation() pulumi.StringPtrOutput { + return o.ApplyT(func(v *NFS) pulumi.StringPtrOutput { return v.Preallocation }).(pulumi.StringPtrOutput) +} + +// The IP address or DNS name of the NFS server. +func (o NFSOutput) Server() pulumi.StringOutput { + return o.ApplyT(func(v *NFS) pulumi.StringOutput { return v.Server }).(pulumi.StringOutput) +} + +// Whether the storage is shared across all nodes. +func (o NFSOutput) Shared() pulumi.BoolOutput { + return o.ApplyT(func(v *NFS) pulumi.BoolOutput { return v.Shared }).(pulumi.BoolOutput) +} + +// Enable support for creating snapshots through volume backing-chains. +func (o NFSOutput) SnapshotAsVolumeChain() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *NFS) pulumi.BoolPtrOutput { return v.SnapshotAsVolumeChain }).(pulumi.BoolPtrOutput) +} + +type NFSArrayOutput struct{ *pulumi.OutputState } + +func (NFSArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*NFS)(nil)).Elem() +} + +func (o NFSArrayOutput) ToNFSArrayOutput() NFSArrayOutput { + return o +} + +func (o NFSArrayOutput) ToNFSArrayOutputWithContext(ctx context.Context) NFSArrayOutput { + return o +} + +func (o NFSArrayOutput) Index(i pulumi.IntInput) NFSOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *NFS { + return vs[0].([]*NFS)[vs[1].(int)] + }).(NFSOutput) +} + +type NFSMapOutput struct{ *pulumi.OutputState } + +func (NFSMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*NFS)(nil)).Elem() +} + +func (o NFSMapOutput) ToNFSMapOutput() NFSMapOutput { + return o +} + +func (o NFSMapOutput) ToNFSMapOutputWithContext(ctx context.Context) NFSMapOutput { + return o +} + +func (o NFSMapOutput) MapIndex(k pulumi.StringInput) NFSOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *NFS { + return vs[0].(map[string]*NFS)[vs[1].(string)] + }).(NFSOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*NFSInput)(nil)).Elem(), &NFS{}) + pulumi.RegisterInputType(reflect.TypeOf((*NFSArrayInput)(nil)).Elem(), NFSArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*NFSMapInput)(nil)).Elem(), NFSMap{}) + pulumi.RegisterOutputType(NFSOutput{}) + pulumi.RegisterOutputType(NFSArrayOutput{}) + pulumi.RegisterOutputType(NFSMapOutput{}) +} diff --git a/sdk/go/proxmoxve/storage/pbs.go b/sdk/go/proxmoxve/storage/pbs.go new file mode 100644 index 00000000..94df2c34 --- /dev/null +++ b/sdk/go/proxmoxve/storage/pbs.go @@ -0,0 +1,494 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package storage + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages a Proxmox Backup Server (PBS) storage in Proxmox VE. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.NewPBS(ctx, "example", &storage.PBSArgs{ +// PbsId: pulumi.String("example-pbs"), +// Nodes: pulumi.StringArray{ +// pulumi.String("pve"), +// }, +// Server: pulumi.String("pbs.example.local"), +// Datastore: pulumi.String("backup"), +// Username: pulumi.String("pbs-user"), +// Password: pulumi.String("pbs-password"), +// Fingerprint: pulumi.String("AA:BB:CC:DD:EE:FF"), +// Contents: pulumi.StringArray{ +// pulumi.String("backup"), +// }, +// GenerateEncryptionKey: pulumi.Bool(true), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type PBS struct { + pulumi.CustomResourceState + + // Configure backup retention settings for the storage type. + Backups PBSBackupsPtrOutput `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayOutput `pulumi:"contents"` + // The name of the datastore on the Proxmox Backup Server. + Datastore pulumi.StringOutput `pulumi:"datastore"` + // Whether the storage is disabled. + Disable pulumi.BoolOutput `pulumi:"disable"` + // An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + EncryptionKey pulumi.StringPtrOutput `pulumi:"encryptionKey"` + // The SHA256 fingerprint of the encryption key currently in use. + EncryptionKeyFingerprint pulumi.StringOutput `pulumi:"encryptionKeyFingerprint"` + // The SHA256 fingerprint of the Proxmox Backup Server's certificate. + Fingerprint pulumi.StringPtrOutput `pulumi:"fingerprint"` + // If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + GenerateEncryptionKey pulumi.BoolPtrOutput `pulumi:"generateEncryptionKey"` + // The encryption key returned by Proxmox when `generateEncryptionKey` is true. + GeneratedEncryptionKey pulumi.StringOutput `pulumi:"generatedEncryptionKey"` + // The namespace to use on the Proxmox Backup Server. + Namespace pulumi.StringPtrOutput `pulumi:"namespace"` + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayOutput `pulumi:"nodes"` + // The password for authenticating with the Proxmox Backup Server. + Password pulumi.StringOutput `pulumi:"password"` + // The unique identifier of the storage. + PbsId pulumi.StringOutput `pulumi:"pbsId"` + // The IP address or DNS name of the Proxmox Backup Server. + Server pulumi.StringOutput `pulumi:"server"` + // Whether the storage is shared across all nodes. + Shared pulumi.BoolOutput `pulumi:"shared"` + // The username for authenticating with the Proxmox Backup Server. + Username pulumi.StringOutput `pulumi:"username"` +} + +// NewPBS registers a new resource with the given unique name, arguments, and options. +func NewPBS(ctx *pulumi.Context, + name string, args *PBSArgs, opts ...pulumi.ResourceOption) (*PBS, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Datastore == nil { + return nil, errors.New("invalid value for required argument 'Datastore'") + } + if args.Password == nil { + return nil, errors.New("invalid value for required argument 'Password'") + } + if args.PbsId == nil { + return nil, errors.New("invalid value for required argument 'PbsId'") + } + if args.Server == nil { + return nil, errors.New("invalid value for required argument 'Server'") + } + if args.Username == nil { + return nil, errors.New("invalid value for required argument 'Username'") + } + if args.EncryptionKey != nil { + args.EncryptionKey = pulumi.ToSecret(args.EncryptionKey).(pulumi.StringPtrInput) + } + if args.Password != nil { + args.Password = pulumi.ToSecret(args.Password).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "encryptionKey", + "generatedEncryptionKey", + "password", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource PBS + err := ctx.RegisterResource("proxmoxve:Storage/pBS:PBS", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetPBS gets an existing PBS resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetPBS(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *PBSState, opts ...pulumi.ResourceOption) (*PBS, error) { + var resource PBS + err := ctx.ReadResource("proxmoxve:Storage/pBS:PBS", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering PBS resources. +type pbsState struct { + // Configure backup retention settings for the storage type. + Backups *PBSBackups `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // The name of the datastore on the Proxmox Backup Server. + Datastore *string `pulumi:"datastore"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + EncryptionKey *string `pulumi:"encryptionKey"` + // The SHA256 fingerprint of the encryption key currently in use. + EncryptionKeyFingerprint *string `pulumi:"encryptionKeyFingerprint"` + // The SHA256 fingerprint of the Proxmox Backup Server's certificate. + Fingerprint *string `pulumi:"fingerprint"` + // If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + GenerateEncryptionKey *bool `pulumi:"generateEncryptionKey"` + // The encryption key returned by Proxmox when `generateEncryptionKey` is true. + GeneratedEncryptionKey *string `pulumi:"generatedEncryptionKey"` + // The namespace to use on the Proxmox Backup Server. + Namespace *string `pulumi:"namespace"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The password for authenticating with the Proxmox Backup Server. + Password *string `pulumi:"password"` + // The unique identifier of the storage. + PbsId *string `pulumi:"pbsId"` + // The IP address or DNS name of the Proxmox Backup Server. + Server *string `pulumi:"server"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` + // The username for authenticating with the Proxmox Backup Server. + Username *string `pulumi:"username"` +} + +type PBSState struct { + // Configure backup retention settings for the storage type. + Backups PBSBackupsPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // The name of the datastore on the Proxmox Backup Server. + Datastore pulumi.StringPtrInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + EncryptionKey pulumi.StringPtrInput + // The SHA256 fingerprint of the encryption key currently in use. + EncryptionKeyFingerprint pulumi.StringPtrInput + // The SHA256 fingerprint of the Proxmox Backup Server's certificate. + Fingerprint pulumi.StringPtrInput + // If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + GenerateEncryptionKey pulumi.BoolPtrInput + // The encryption key returned by Proxmox when `generateEncryptionKey` is true. + GeneratedEncryptionKey pulumi.StringPtrInput + // The namespace to use on the Proxmox Backup Server. + Namespace pulumi.StringPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The password for authenticating with the Proxmox Backup Server. + Password pulumi.StringPtrInput + // The unique identifier of the storage. + PbsId pulumi.StringPtrInput + // The IP address or DNS name of the Proxmox Backup Server. + Server pulumi.StringPtrInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput + // The username for authenticating with the Proxmox Backup Server. + Username pulumi.StringPtrInput +} + +func (PBSState) ElementType() reflect.Type { + return reflect.TypeOf((*pbsState)(nil)).Elem() +} + +type pbsArgs struct { + // Configure backup retention settings for the storage type. + Backups *PBSBackups `pulumi:"backups"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // The name of the datastore on the Proxmox Backup Server. + Datastore string `pulumi:"datastore"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + EncryptionKey *string `pulumi:"encryptionKey"` + // The SHA256 fingerprint of the Proxmox Backup Server's certificate. + Fingerprint *string `pulumi:"fingerprint"` + // If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + GenerateEncryptionKey *bool `pulumi:"generateEncryptionKey"` + // The namespace to use on the Proxmox Backup Server. + Namespace *string `pulumi:"namespace"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // The password for authenticating with the Proxmox Backup Server. + Password string `pulumi:"password"` + // The unique identifier of the storage. + PbsId string `pulumi:"pbsId"` + // The IP address or DNS name of the Proxmox Backup Server. + Server string `pulumi:"server"` + // The username for authenticating with the Proxmox Backup Server. + Username string `pulumi:"username"` +} + +// The set of arguments for constructing a PBS resource. +type PBSArgs struct { + // Configure backup retention settings for the storage type. + Backups PBSBackupsPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // The name of the datastore on the Proxmox Backup Server. + Datastore pulumi.StringInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + EncryptionKey pulumi.StringPtrInput + // The SHA256 fingerprint of the Proxmox Backup Server's certificate. + Fingerprint pulumi.StringPtrInput + // If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + GenerateEncryptionKey pulumi.BoolPtrInput + // The namespace to use on the Proxmox Backup Server. + Namespace pulumi.StringPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // The password for authenticating with the Proxmox Backup Server. + Password pulumi.StringInput + // The unique identifier of the storage. + PbsId pulumi.StringInput + // The IP address or DNS name of the Proxmox Backup Server. + Server pulumi.StringInput + // The username for authenticating with the Proxmox Backup Server. + Username pulumi.StringInput +} + +func (PBSArgs) ElementType() reflect.Type { + return reflect.TypeOf((*pbsArgs)(nil)).Elem() +} + +type PBSInput interface { + pulumi.Input + + ToPBSOutput() PBSOutput + ToPBSOutputWithContext(ctx context.Context) PBSOutput +} + +func (*PBS) ElementType() reflect.Type { + return reflect.TypeOf((**PBS)(nil)).Elem() +} + +func (i *PBS) ToPBSOutput() PBSOutput { + return i.ToPBSOutputWithContext(context.Background()) +} + +func (i *PBS) ToPBSOutputWithContext(ctx context.Context) PBSOutput { + return pulumi.ToOutputWithContext(ctx, i).(PBSOutput) +} + +// PBSArrayInput is an input type that accepts PBSArray and PBSArrayOutput values. +// You can construct a concrete instance of `PBSArrayInput` via: +// +// PBSArray{ PBSArgs{...} } +type PBSArrayInput interface { + pulumi.Input + + ToPBSArrayOutput() PBSArrayOutput + ToPBSArrayOutputWithContext(context.Context) PBSArrayOutput +} + +type PBSArray []PBSInput + +func (PBSArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*PBS)(nil)).Elem() +} + +func (i PBSArray) ToPBSArrayOutput() PBSArrayOutput { + return i.ToPBSArrayOutputWithContext(context.Background()) +} + +func (i PBSArray) ToPBSArrayOutputWithContext(ctx context.Context) PBSArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(PBSArrayOutput) +} + +// PBSMapInput is an input type that accepts PBSMap and PBSMapOutput values. +// You can construct a concrete instance of `PBSMapInput` via: +// +// PBSMap{ "key": PBSArgs{...} } +type PBSMapInput interface { + pulumi.Input + + ToPBSMapOutput() PBSMapOutput + ToPBSMapOutputWithContext(context.Context) PBSMapOutput +} + +type PBSMap map[string]PBSInput + +func (PBSMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*PBS)(nil)).Elem() +} + +func (i PBSMap) ToPBSMapOutput() PBSMapOutput { + return i.ToPBSMapOutputWithContext(context.Background()) +} + +func (i PBSMap) ToPBSMapOutputWithContext(ctx context.Context) PBSMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(PBSMapOutput) +} + +type PBSOutput struct{ *pulumi.OutputState } + +func (PBSOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PBS)(nil)).Elem() +} + +func (o PBSOutput) ToPBSOutput() PBSOutput { + return o +} + +func (o PBSOutput) ToPBSOutputWithContext(ctx context.Context) PBSOutput { + return o +} + +// Configure backup retention settings for the storage type. +func (o PBSOutput) Backups() PBSBackupsPtrOutput { + return o.ApplyT(func(v *PBS) PBSBackupsPtrOutput { return v.Backups }).(PBSBackupsPtrOutput) +} + +// The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). +func (o PBSOutput) Contents() pulumi.StringArrayOutput { + return o.ApplyT(func(v *PBS) pulumi.StringArrayOutput { return v.Contents }).(pulumi.StringArrayOutput) +} + +// The name of the datastore on the Proxmox Backup Server. +func (o PBSOutput) Datastore() pulumi.StringOutput { + return o.ApplyT(func(v *PBS) pulumi.StringOutput { return v.Datastore }).(pulumi.StringOutput) +} + +// Whether the storage is disabled. +func (o PBSOutput) Disable() pulumi.BoolOutput { + return o.ApplyT(func(v *PBS) pulumi.BoolOutput { return v.Disable }).(pulumi.BoolOutput) +} + +// An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. +func (o PBSOutput) EncryptionKey() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PBS) pulumi.StringPtrOutput { return v.EncryptionKey }).(pulumi.StringPtrOutput) +} + +// The SHA256 fingerprint of the encryption key currently in use. +func (o PBSOutput) EncryptionKeyFingerprint() pulumi.StringOutput { + return o.ApplyT(func(v *PBS) pulumi.StringOutput { return v.EncryptionKeyFingerprint }).(pulumi.StringOutput) +} + +// The SHA256 fingerprint of the Proxmox Backup Server's certificate. +func (o PBSOutput) Fingerprint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PBS) pulumi.StringPtrOutput { return v.Fingerprint }).(pulumi.StringPtrOutput) +} + +// If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. +func (o PBSOutput) GenerateEncryptionKey() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *PBS) pulumi.BoolPtrOutput { return v.GenerateEncryptionKey }).(pulumi.BoolPtrOutput) +} + +// The encryption key returned by Proxmox when `generateEncryptionKey` is true. +func (o PBSOutput) GeneratedEncryptionKey() pulumi.StringOutput { + return o.ApplyT(func(v *PBS) pulumi.StringOutput { return v.GeneratedEncryptionKey }).(pulumi.StringOutput) +} + +// The namespace to use on the Proxmox Backup Server. +func (o PBSOutput) Namespace() pulumi.StringPtrOutput { + return o.ApplyT(func(v *PBS) pulumi.StringPtrOutput { return v.Namespace }).(pulumi.StringPtrOutput) +} + +// A list of nodes where this storage is available. +func (o PBSOutput) Nodes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *PBS) pulumi.StringArrayOutput { return v.Nodes }).(pulumi.StringArrayOutput) +} + +// The password for authenticating with the Proxmox Backup Server. +func (o PBSOutput) Password() pulumi.StringOutput { + return o.ApplyT(func(v *PBS) pulumi.StringOutput { return v.Password }).(pulumi.StringOutput) +} + +// The unique identifier of the storage. +func (o PBSOutput) PbsId() pulumi.StringOutput { + return o.ApplyT(func(v *PBS) pulumi.StringOutput { return v.PbsId }).(pulumi.StringOutput) +} + +// The IP address or DNS name of the Proxmox Backup Server. +func (o PBSOutput) Server() pulumi.StringOutput { + return o.ApplyT(func(v *PBS) pulumi.StringOutput { return v.Server }).(pulumi.StringOutput) +} + +// Whether the storage is shared across all nodes. +func (o PBSOutput) Shared() pulumi.BoolOutput { + return o.ApplyT(func(v *PBS) pulumi.BoolOutput { return v.Shared }).(pulumi.BoolOutput) +} + +// The username for authenticating with the Proxmox Backup Server. +func (o PBSOutput) Username() pulumi.StringOutput { + return o.ApplyT(func(v *PBS) pulumi.StringOutput { return v.Username }).(pulumi.StringOutput) +} + +type PBSArrayOutput struct{ *pulumi.OutputState } + +func (PBSArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*PBS)(nil)).Elem() +} + +func (o PBSArrayOutput) ToPBSArrayOutput() PBSArrayOutput { + return o +} + +func (o PBSArrayOutput) ToPBSArrayOutputWithContext(ctx context.Context) PBSArrayOutput { + return o +} + +func (o PBSArrayOutput) Index(i pulumi.IntInput) PBSOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *PBS { + return vs[0].([]*PBS)[vs[1].(int)] + }).(PBSOutput) +} + +type PBSMapOutput struct{ *pulumi.OutputState } + +func (PBSMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*PBS)(nil)).Elem() +} + +func (o PBSMapOutput) ToPBSMapOutput() PBSMapOutput { + return o +} + +func (o PBSMapOutput) ToPBSMapOutputWithContext(ctx context.Context) PBSMapOutput { + return o +} + +func (o PBSMapOutput) MapIndex(k pulumi.StringInput) PBSOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *PBS { + return vs[0].(map[string]*PBS)[vs[1].(string)] + }).(PBSOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*PBSInput)(nil)).Elem(), &PBS{}) + pulumi.RegisterInputType(reflect.TypeOf((*PBSArrayInput)(nil)).Elem(), PBSArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*PBSMapInput)(nil)).Elem(), PBSMap{}) + pulumi.RegisterOutputType(PBSOutput{}) + pulumi.RegisterOutputType(PBSArrayOutput{}) + pulumi.RegisterOutputType(PBSMapOutput{}) +} diff --git a/sdk/go/proxmoxve/storage/pulumiTypes.go b/sdk/go/proxmoxve/storage/pulumiTypes.go index 86d427d8..8da0bb65 100644 --- a/sdk/go/proxmoxve/storage/pulumiTypes.go +++ b/sdk/go/proxmoxve/storage/pulumiTypes.go @@ -13,6 +13,546 @@ import ( var _ = internal.GetEnvOrDefault +type CIFSBackups struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll *bool `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily *int `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly *int `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast *int `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly *int `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly *int `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly *int `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups *int `pulumi:"maxProtectedBackups"` +} + +// CIFSBackupsInput is an input type that accepts CIFSBackupsArgs and CIFSBackupsOutput values. +// You can construct a concrete instance of `CIFSBackupsInput` via: +// +// CIFSBackupsArgs{...} +type CIFSBackupsInput interface { + pulumi.Input + + ToCIFSBackupsOutput() CIFSBackupsOutput + ToCIFSBackupsOutputWithContext(context.Context) CIFSBackupsOutput +} + +type CIFSBackupsArgs struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll pulumi.BoolPtrInput `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily pulumi.IntPtrInput `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly pulumi.IntPtrInput `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast pulumi.IntPtrInput `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly pulumi.IntPtrInput `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly pulumi.IntPtrInput `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly pulumi.IntPtrInput `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups pulumi.IntPtrInput `pulumi:"maxProtectedBackups"` +} + +func (CIFSBackupsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*CIFSBackups)(nil)).Elem() +} + +func (i CIFSBackupsArgs) ToCIFSBackupsOutput() CIFSBackupsOutput { + return i.ToCIFSBackupsOutputWithContext(context.Background()) +} + +func (i CIFSBackupsArgs) ToCIFSBackupsOutputWithContext(ctx context.Context) CIFSBackupsOutput { + return pulumi.ToOutputWithContext(ctx, i).(CIFSBackupsOutput) +} + +func (i CIFSBackupsArgs) ToCIFSBackupsPtrOutput() CIFSBackupsPtrOutput { + return i.ToCIFSBackupsPtrOutputWithContext(context.Background()) +} + +func (i CIFSBackupsArgs) ToCIFSBackupsPtrOutputWithContext(ctx context.Context) CIFSBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(CIFSBackupsOutput).ToCIFSBackupsPtrOutputWithContext(ctx) +} + +// CIFSBackupsPtrInput is an input type that accepts CIFSBackupsArgs, CIFSBackupsPtr and CIFSBackupsPtrOutput values. +// You can construct a concrete instance of `CIFSBackupsPtrInput` via: +// +// CIFSBackupsArgs{...} +// +// or: +// +// nil +type CIFSBackupsPtrInput interface { + pulumi.Input + + ToCIFSBackupsPtrOutput() CIFSBackupsPtrOutput + ToCIFSBackupsPtrOutputWithContext(context.Context) CIFSBackupsPtrOutput +} + +type cifsbackupsPtrType CIFSBackupsArgs + +func CIFSBackupsPtr(v *CIFSBackupsArgs) CIFSBackupsPtrInput { + return (*cifsbackupsPtrType)(v) +} + +func (*cifsbackupsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**CIFSBackups)(nil)).Elem() +} + +func (i *cifsbackupsPtrType) ToCIFSBackupsPtrOutput() CIFSBackupsPtrOutput { + return i.ToCIFSBackupsPtrOutputWithContext(context.Background()) +} + +func (i *cifsbackupsPtrType) ToCIFSBackupsPtrOutputWithContext(ctx context.Context) CIFSBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(CIFSBackupsPtrOutput) +} + +type CIFSBackupsOutput struct{ *pulumi.OutputState } + +func (CIFSBackupsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*CIFSBackups)(nil)).Elem() +} + +func (o CIFSBackupsOutput) ToCIFSBackupsOutput() CIFSBackupsOutput { + return o +} + +func (o CIFSBackupsOutput) ToCIFSBackupsOutputWithContext(ctx context.Context) CIFSBackupsOutput { + return o +} + +func (o CIFSBackupsOutput) ToCIFSBackupsPtrOutput() CIFSBackupsPtrOutput { + return o.ToCIFSBackupsPtrOutputWithContext(context.Background()) +} + +func (o CIFSBackupsOutput) ToCIFSBackupsPtrOutputWithContext(ctx context.Context) CIFSBackupsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v CIFSBackups) *CIFSBackups { + return &v + }).(CIFSBackupsPtrOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o CIFSBackupsOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v CIFSBackups) *bool { return v.KeepAll }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o CIFSBackupsOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v CIFSBackups) *int { return v.KeepDaily }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o CIFSBackupsOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v CIFSBackups) *int { return v.KeepHourly }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o CIFSBackupsOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v CIFSBackups) *int { return v.KeepLast }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o CIFSBackupsOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v CIFSBackups) *int { return v.KeepMonthly }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o CIFSBackupsOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v CIFSBackups) *int { return v.KeepWeekly }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o CIFSBackupsOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v CIFSBackups) *int { return v.KeepYearly }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o CIFSBackupsOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v CIFSBackups) *int { return v.MaxProtectedBackups }).(pulumi.IntPtrOutput) +} + +type CIFSBackupsPtrOutput struct{ *pulumi.OutputState } + +func (CIFSBackupsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**CIFSBackups)(nil)).Elem() +} + +func (o CIFSBackupsPtrOutput) ToCIFSBackupsPtrOutput() CIFSBackupsPtrOutput { + return o +} + +func (o CIFSBackupsPtrOutput) ToCIFSBackupsPtrOutputWithContext(ctx context.Context) CIFSBackupsPtrOutput { + return o +} + +func (o CIFSBackupsPtrOutput) Elem() CIFSBackupsOutput { + return o.ApplyT(func(v *CIFSBackups) CIFSBackups { + if v != nil { + return *v + } + var ret CIFSBackups + return ret + }).(CIFSBackupsOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o CIFSBackupsPtrOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *bool { + if v == nil { + return nil + } + return v.KeepAll + }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o CIFSBackupsPtrOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *int { + if v == nil { + return nil + } + return v.KeepDaily + }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o CIFSBackupsPtrOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *int { + if v == nil { + return nil + } + return v.KeepHourly + }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o CIFSBackupsPtrOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *int { + if v == nil { + return nil + } + return v.KeepLast + }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o CIFSBackupsPtrOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *int { + if v == nil { + return nil + } + return v.KeepMonthly + }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o CIFSBackupsPtrOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *int { + if v == nil { + return nil + } + return v.KeepWeekly + }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o CIFSBackupsPtrOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *int { + if v == nil { + return nil + } + return v.KeepYearly + }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o CIFSBackupsPtrOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v *CIFSBackups) *int { + if v == nil { + return nil + } + return v.MaxProtectedBackups + }).(pulumi.IntPtrOutput) +} + +type DirectoryBackups struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll *bool `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily *int `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly *int `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast *int `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly *int `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly *int `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly *int `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups *int `pulumi:"maxProtectedBackups"` +} + +// DirectoryBackupsInput is an input type that accepts DirectoryBackupsArgs and DirectoryBackupsOutput values. +// You can construct a concrete instance of `DirectoryBackupsInput` via: +// +// DirectoryBackupsArgs{...} +type DirectoryBackupsInput interface { + pulumi.Input + + ToDirectoryBackupsOutput() DirectoryBackupsOutput + ToDirectoryBackupsOutputWithContext(context.Context) DirectoryBackupsOutput +} + +type DirectoryBackupsArgs struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll pulumi.BoolPtrInput `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily pulumi.IntPtrInput `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly pulumi.IntPtrInput `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast pulumi.IntPtrInput `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly pulumi.IntPtrInput `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly pulumi.IntPtrInput `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly pulumi.IntPtrInput `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups pulumi.IntPtrInput `pulumi:"maxProtectedBackups"` +} + +func (DirectoryBackupsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*DirectoryBackups)(nil)).Elem() +} + +func (i DirectoryBackupsArgs) ToDirectoryBackupsOutput() DirectoryBackupsOutput { + return i.ToDirectoryBackupsOutputWithContext(context.Background()) +} + +func (i DirectoryBackupsArgs) ToDirectoryBackupsOutputWithContext(ctx context.Context) DirectoryBackupsOutput { + return pulumi.ToOutputWithContext(ctx, i).(DirectoryBackupsOutput) +} + +func (i DirectoryBackupsArgs) ToDirectoryBackupsPtrOutput() DirectoryBackupsPtrOutput { + return i.ToDirectoryBackupsPtrOutputWithContext(context.Background()) +} + +func (i DirectoryBackupsArgs) ToDirectoryBackupsPtrOutputWithContext(ctx context.Context) DirectoryBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DirectoryBackupsOutput).ToDirectoryBackupsPtrOutputWithContext(ctx) +} + +// DirectoryBackupsPtrInput is an input type that accepts DirectoryBackupsArgs, DirectoryBackupsPtr and DirectoryBackupsPtrOutput values. +// You can construct a concrete instance of `DirectoryBackupsPtrInput` via: +// +// DirectoryBackupsArgs{...} +// +// or: +// +// nil +type DirectoryBackupsPtrInput interface { + pulumi.Input + + ToDirectoryBackupsPtrOutput() DirectoryBackupsPtrOutput + ToDirectoryBackupsPtrOutputWithContext(context.Context) DirectoryBackupsPtrOutput +} + +type directoryBackupsPtrType DirectoryBackupsArgs + +func DirectoryBackupsPtr(v *DirectoryBackupsArgs) DirectoryBackupsPtrInput { + return (*directoryBackupsPtrType)(v) +} + +func (*directoryBackupsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**DirectoryBackups)(nil)).Elem() +} + +func (i *directoryBackupsPtrType) ToDirectoryBackupsPtrOutput() DirectoryBackupsPtrOutput { + return i.ToDirectoryBackupsPtrOutputWithContext(context.Background()) +} + +func (i *directoryBackupsPtrType) ToDirectoryBackupsPtrOutputWithContext(ctx context.Context) DirectoryBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DirectoryBackupsPtrOutput) +} + +type DirectoryBackupsOutput struct{ *pulumi.OutputState } + +func (DirectoryBackupsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*DirectoryBackups)(nil)).Elem() +} + +func (o DirectoryBackupsOutput) ToDirectoryBackupsOutput() DirectoryBackupsOutput { + return o +} + +func (o DirectoryBackupsOutput) ToDirectoryBackupsOutputWithContext(ctx context.Context) DirectoryBackupsOutput { + return o +} + +func (o DirectoryBackupsOutput) ToDirectoryBackupsPtrOutput() DirectoryBackupsPtrOutput { + return o.ToDirectoryBackupsPtrOutputWithContext(context.Background()) +} + +func (o DirectoryBackupsOutput) ToDirectoryBackupsPtrOutputWithContext(ctx context.Context) DirectoryBackupsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v DirectoryBackups) *DirectoryBackups { + return &v + }).(DirectoryBackupsPtrOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o DirectoryBackupsOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *bool { return v.KeepAll }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o DirectoryBackupsOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *int { return v.KeepDaily }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o DirectoryBackupsOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *int { return v.KeepHourly }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o DirectoryBackupsOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *int { return v.KeepLast }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o DirectoryBackupsOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *int { return v.KeepMonthly }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o DirectoryBackupsOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *int { return v.KeepWeekly }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o DirectoryBackupsOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *int { return v.KeepYearly }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o DirectoryBackupsOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v DirectoryBackups) *int { return v.MaxProtectedBackups }).(pulumi.IntPtrOutput) +} + +type DirectoryBackupsPtrOutput struct{ *pulumi.OutputState } + +func (DirectoryBackupsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**DirectoryBackups)(nil)).Elem() +} + +func (o DirectoryBackupsPtrOutput) ToDirectoryBackupsPtrOutput() DirectoryBackupsPtrOutput { + return o +} + +func (o DirectoryBackupsPtrOutput) ToDirectoryBackupsPtrOutputWithContext(ctx context.Context) DirectoryBackupsPtrOutput { + return o +} + +func (o DirectoryBackupsPtrOutput) Elem() DirectoryBackupsOutput { + return o.ApplyT(func(v *DirectoryBackups) DirectoryBackups { + if v != nil { + return *v + } + var ret DirectoryBackups + return ret + }).(DirectoryBackupsOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o DirectoryBackupsPtrOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *bool { + if v == nil { + return nil + } + return v.KeepAll + }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o DirectoryBackupsPtrOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *int { + if v == nil { + return nil + } + return v.KeepDaily + }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o DirectoryBackupsPtrOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *int { + if v == nil { + return nil + } + return v.KeepHourly + }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o DirectoryBackupsPtrOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *int { + if v == nil { + return nil + } + return v.KeepLast + }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o DirectoryBackupsPtrOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *int { + if v == nil { + return nil + } + return v.KeepMonthly + }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o DirectoryBackupsPtrOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *int { + if v == nil { + return nil + } + return v.KeepWeekly + }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o DirectoryBackupsPtrOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *int { + if v == nil { + return nil + } + return v.KeepYearly + }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o DirectoryBackupsPtrOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v *DirectoryBackups) *int { + if v == nil { + return nil + } + return v.MaxProtectedBackups + }).(pulumi.IntPtrOutput) +} + type FileSourceFile struct { // Whether the source file has changed since the last run Changed *bool `pulumi:"changed"` @@ -436,6 +976,546 @@ func (o FileSourceRawPtrOutput) Resize() pulumi.IntPtrOutput { }).(pulumi.IntPtrOutput) } +type NFSBackups struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll *bool `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily *int `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly *int `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast *int `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly *int `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly *int `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly *int `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups *int `pulumi:"maxProtectedBackups"` +} + +// NFSBackupsInput is an input type that accepts NFSBackupsArgs and NFSBackupsOutput values. +// You can construct a concrete instance of `NFSBackupsInput` via: +// +// NFSBackupsArgs{...} +type NFSBackupsInput interface { + pulumi.Input + + ToNFSBackupsOutput() NFSBackupsOutput + ToNFSBackupsOutputWithContext(context.Context) NFSBackupsOutput +} + +type NFSBackupsArgs struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll pulumi.BoolPtrInput `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily pulumi.IntPtrInput `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly pulumi.IntPtrInput `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast pulumi.IntPtrInput `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly pulumi.IntPtrInput `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly pulumi.IntPtrInput `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly pulumi.IntPtrInput `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups pulumi.IntPtrInput `pulumi:"maxProtectedBackups"` +} + +func (NFSBackupsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*NFSBackups)(nil)).Elem() +} + +func (i NFSBackupsArgs) ToNFSBackupsOutput() NFSBackupsOutput { + return i.ToNFSBackupsOutputWithContext(context.Background()) +} + +func (i NFSBackupsArgs) ToNFSBackupsOutputWithContext(ctx context.Context) NFSBackupsOutput { + return pulumi.ToOutputWithContext(ctx, i).(NFSBackupsOutput) +} + +func (i NFSBackupsArgs) ToNFSBackupsPtrOutput() NFSBackupsPtrOutput { + return i.ToNFSBackupsPtrOutputWithContext(context.Background()) +} + +func (i NFSBackupsArgs) ToNFSBackupsPtrOutputWithContext(ctx context.Context) NFSBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(NFSBackupsOutput).ToNFSBackupsPtrOutputWithContext(ctx) +} + +// NFSBackupsPtrInput is an input type that accepts NFSBackupsArgs, NFSBackupsPtr and NFSBackupsPtrOutput values. +// You can construct a concrete instance of `NFSBackupsPtrInput` via: +// +// NFSBackupsArgs{...} +// +// or: +// +// nil +type NFSBackupsPtrInput interface { + pulumi.Input + + ToNFSBackupsPtrOutput() NFSBackupsPtrOutput + ToNFSBackupsPtrOutputWithContext(context.Context) NFSBackupsPtrOutput +} + +type nfsbackupsPtrType NFSBackupsArgs + +func NFSBackupsPtr(v *NFSBackupsArgs) NFSBackupsPtrInput { + return (*nfsbackupsPtrType)(v) +} + +func (*nfsbackupsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**NFSBackups)(nil)).Elem() +} + +func (i *nfsbackupsPtrType) ToNFSBackupsPtrOutput() NFSBackupsPtrOutput { + return i.ToNFSBackupsPtrOutputWithContext(context.Background()) +} + +func (i *nfsbackupsPtrType) ToNFSBackupsPtrOutputWithContext(ctx context.Context) NFSBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(NFSBackupsPtrOutput) +} + +type NFSBackupsOutput struct{ *pulumi.OutputState } + +func (NFSBackupsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*NFSBackups)(nil)).Elem() +} + +func (o NFSBackupsOutput) ToNFSBackupsOutput() NFSBackupsOutput { + return o +} + +func (o NFSBackupsOutput) ToNFSBackupsOutputWithContext(ctx context.Context) NFSBackupsOutput { + return o +} + +func (o NFSBackupsOutput) ToNFSBackupsPtrOutput() NFSBackupsPtrOutput { + return o.ToNFSBackupsPtrOutputWithContext(context.Background()) +} + +func (o NFSBackupsOutput) ToNFSBackupsPtrOutputWithContext(ctx context.Context) NFSBackupsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v NFSBackups) *NFSBackups { + return &v + }).(NFSBackupsPtrOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o NFSBackupsOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v NFSBackups) *bool { return v.KeepAll }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o NFSBackupsOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v NFSBackups) *int { return v.KeepDaily }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o NFSBackupsOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v NFSBackups) *int { return v.KeepHourly }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o NFSBackupsOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v NFSBackups) *int { return v.KeepLast }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o NFSBackupsOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v NFSBackups) *int { return v.KeepMonthly }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o NFSBackupsOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v NFSBackups) *int { return v.KeepWeekly }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o NFSBackupsOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v NFSBackups) *int { return v.KeepYearly }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o NFSBackupsOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v NFSBackups) *int { return v.MaxProtectedBackups }).(pulumi.IntPtrOutput) +} + +type NFSBackupsPtrOutput struct{ *pulumi.OutputState } + +func (NFSBackupsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**NFSBackups)(nil)).Elem() +} + +func (o NFSBackupsPtrOutput) ToNFSBackupsPtrOutput() NFSBackupsPtrOutput { + return o +} + +func (o NFSBackupsPtrOutput) ToNFSBackupsPtrOutputWithContext(ctx context.Context) NFSBackupsPtrOutput { + return o +} + +func (o NFSBackupsPtrOutput) Elem() NFSBackupsOutput { + return o.ApplyT(func(v *NFSBackups) NFSBackups { + if v != nil { + return *v + } + var ret NFSBackups + return ret + }).(NFSBackupsOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o NFSBackupsPtrOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *NFSBackups) *bool { + if v == nil { + return nil + } + return v.KeepAll + }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o NFSBackupsPtrOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v *NFSBackups) *int { + if v == nil { + return nil + } + return v.KeepDaily + }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o NFSBackupsPtrOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *NFSBackups) *int { + if v == nil { + return nil + } + return v.KeepHourly + }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o NFSBackupsPtrOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v *NFSBackups) *int { + if v == nil { + return nil + } + return v.KeepLast + }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o NFSBackupsPtrOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *NFSBackups) *int { + if v == nil { + return nil + } + return v.KeepMonthly + }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o NFSBackupsPtrOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *NFSBackups) *int { + if v == nil { + return nil + } + return v.KeepWeekly + }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o NFSBackupsPtrOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *NFSBackups) *int { + if v == nil { + return nil + } + return v.KeepYearly + }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o NFSBackupsPtrOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v *NFSBackups) *int { + if v == nil { + return nil + } + return v.MaxProtectedBackups + }).(pulumi.IntPtrOutput) +} + +type PBSBackups struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll *bool `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily *int `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly *int `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast *int `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly *int `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly *int `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly *int `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups *int `pulumi:"maxProtectedBackups"` +} + +// PBSBackupsInput is an input type that accepts PBSBackupsArgs and PBSBackupsOutput values. +// You can construct a concrete instance of `PBSBackupsInput` via: +// +// PBSBackupsArgs{...} +type PBSBackupsInput interface { + pulumi.Input + + ToPBSBackupsOutput() PBSBackupsOutput + ToPBSBackupsOutputWithContext(context.Context) PBSBackupsOutput +} + +type PBSBackupsArgs struct { + // Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + KeepAll pulumi.BoolPtrInput `pulumi:"keepAll"` + // The number of daily backups to keep. Older backups will be removed. + KeepDaily pulumi.IntPtrInput `pulumi:"keepDaily"` + // The number of hourly backups to keep. Older backups will be removed. + KeepHourly pulumi.IntPtrInput `pulumi:"keepHourly"` + // Specifies the number of the most recent backups to keep, regardless of their age. + KeepLast pulumi.IntPtrInput `pulumi:"keepLast"` + // The number of monthly backups to keep. Older backups will be removed. + KeepMonthly pulumi.IntPtrInput `pulumi:"keepMonthly"` + // The number of weekly backups to keep. Older backups will be removed. + KeepWeekly pulumi.IntPtrInput `pulumi:"keepWeekly"` + // The number of yearly backups to keep. Older backups will be removed. + KeepYearly pulumi.IntPtrInput `pulumi:"keepYearly"` + // The maximum number of protected backups per guest. Use '-1' for unlimited. + MaxProtectedBackups pulumi.IntPtrInput `pulumi:"maxProtectedBackups"` +} + +func (PBSBackupsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*PBSBackups)(nil)).Elem() +} + +func (i PBSBackupsArgs) ToPBSBackupsOutput() PBSBackupsOutput { + return i.ToPBSBackupsOutputWithContext(context.Background()) +} + +func (i PBSBackupsArgs) ToPBSBackupsOutputWithContext(ctx context.Context) PBSBackupsOutput { + return pulumi.ToOutputWithContext(ctx, i).(PBSBackupsOutput) +} + +func (i PBSBackupsArgs) ToPBSBackupsPtrOutput() PBSBackupsPtrOutput { + return i.ToPBSBackupsPtrOutputWithContext(context.Background()) +} + +func (i PBSBackupsArgs) ToPBSBackupsPtrOutputWithContext(ctx context.Context) PBSBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PBSBackupsOutput).ToPBSBackupsPtrOutputWithContext(ctx) +} + +// PBSBackupsPtrInput is an input type that accepts PBSBackupsArgs, PBSBackupsPtr and PBSBackupsPtrOutput values. +// You can construct a concrete instance of `PBSBackupsPtrInput` via: +// +// PBSBackupsArgs{...} +// +// or: +// +// nil +type PBSBackupsPtrInput interface { + pulumi.Input + + ToPBSBackupsPtrOutput() PBSBackupsPtrOutput + ToPBSBackupsPtrOutputWithContext(context.Context) PBSBackupsPtrOutput +} + +type pbsbackupsPtrType PBSBackupsArgs + +func PBSBackupsPtr(v *PBSBackupsArgs) PBSBackupsPtrInput { + return (*pbsbackupsPtrType)(v) +} + +func (*pbsbackupsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**PBSBackups)(nil)).Elem() +} + +func (i *pbsbackupsPtrType) ToPBSBackupsPtrOutput() PBSBackupsPtrOutput { + return i.ToPBSBackupsPtrOutputWithContext(context.Background()) +} + +func (i *pbsbackupsPtrType) ToPBSBackupsPtrOutputWithContext(ctx context.Context) PBSBackupsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PBSBackupsPtrOutput) +} + +type PBSBackupsOutput struct{ *pulumi.OutputState } + +func (PBSBackupsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*PBSBackups)(nil)).Elem() +} + +func (o PBSBackupsOutput) ToPBSBackupsOutput() PBSBackupsOutput { + return o +} + +func (o PBSBackupsOutput) ToPBSBackupsOutputWithContext(ctx context.Context) PBSBackupsOutput { + return o +} + +func (o PBSBackupsOutput) ToPBSBackupsPtrOutput() PBSBackupsPtrOutput { + return o.ToPBSBackupsPtrOutputWithContext(context.Background()) +} + +func (o PBSBackupsOutput) ToPBSBackupsPtrOutputWithContext(ctx context.Context) PBSBackupsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v PBSBackups) *PBSBackups { + return &v + }).(PBSBackupsPtrOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o PBSBackupsOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v PBSBackups) *bool { return v.KeepAll }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o PBSBackupsOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v PBSBackups) *int { return v.KeepDaily }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o PBSBackupsOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v PBSBackups) *int { return v.KeepHourly }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o PBSBackupsOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v PBSBackups) *int { return v.KeepLast }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o PBSBackupsOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v PBSBackups) *int { return v.KeepMonthly }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o PBSBackupsOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v PBSBackups) *int { return v.KeepWeekly }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o PBSBackupsOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v PBSBackups) *int { return v.KeepYearly }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o PBSBackupsOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v PBSBackups) *int { return v.MaxProtectedBackups }).(pulumi.IntPtrOutput) +} + +type PBSBackupsPtrOutput struct{ *pulumi.OutputState } + +func (PBSBackupsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PBSBackups)(nil)).Elem() +} + +func (o PBSBackupsPtrOutput) ToPBSBackupsPtrOutput() PBSBackupsPtrOutput { + return o +} + +func (o PBSBackupsPtrOutput) ToPBSBackupsPtrOutputWithContext(ctx context.Context) PBSBackupsPtrOutput { + return o +} + +func (o PBSBackupsPtrOutput) Elem() PBSBackupsOutput { + return o.ApplyT(func(v *PBSBackups) PBSBackups { + if v != nil { + return *v + } + var ret PBSBackups + return ret + }).(PBSBackupsOutput) +} + +// Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. +func (o PBSBackupsPtrOutput) KeepAll() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *PBSBackups) *bool { + if v == nil { + return nil + } + return v.KeepAll + }).(pulumi.BoolPtrOutput) +} + +// The number of daily backups to keep. Older backups will be removed. +func (o PBSBackupsPtrOutput) KeepDaily() pulumi.IntPtrOutput { + return o.ApplyT(func(v *PBSBackups) *int { + if v == nil { + return nil + } + return v.KeepDaily + }).(pulumi.IntPtrOutput) +} + +// The number of hourly backups to keep. Older backups will be removed. +func (o PBSBackupsPtrOutput) KeepHourly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *PBSBackups) *int { + if v == nil { + return nil + } + return v.KeepHourly + }).(pulumi.IntPtrOutput) +} + +// Specifies the number of the most recent backups to keep, regardless of their age. +func (o PBSBackupsPtrOutput) KeepLast() pulumi.IntPtrOutput { + return o.ApplyT(func(v *PBSBackups) *int { + if v == nil { + return nil + } + return v.KeepLast + }).(pulumi.IntPtrOutput) +} + +// The number of monthly backups to keep. Older backups will be removed. +func (o PBSBackupsPtrOutput) KeepMonthly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *PBSBackups) *int { + if v == nil { + return nil + } + return v.KeepMonthly + }).(pulumi.IntPtrOutput) +} + +// The number of weekly backups to keep. Older backups will be removed. +func (o PBSBackupsPtrOutput) KeepWeekly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *PBSBackups) *int { + if v == nil { + return nil + } + return v.KeepWeekly + }).(pulumi.IntPtrOutput) +} + +// The number of yearly backups to keep. Older backups will be removed. +func (o PBSBackupsPtrOutput) KeepYearly() pulumi.IntPtrOutput { + return o.ApplyT(func(v *PBSBackups) *int { + if v == nil { + return nil + } + return v.KeepYearly + }).(pulumi.IntPtrOutput) +} + +// The maximum number of protected backups per guest. Use '-1' for unlimited. +func (o PBSBackupsPtrOutput) MaxProtectedBackups() pulumi.IntPtrOutput { + return o.ApplyT(func(v *PBSBackups) *int { + if v == nil { + return nil + } + return v.MaxProtectedBackups + }).(pulumi.IntPtrOutput) +} + type GetDatastoresDatastore struct { // Whether the store is active. Active *bool `pulumi:"active"` @@ -799,18 +1879,34 @@ func (o GetDatastoresFiltersPtrOutput) Target() pulumi.StringPtrOutput { } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*CIFSBackupsInput)(nil)).Elem(), CIFSBackupsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*CIFSBackupsPtrInput)(nil)).Elem(), CIFSBackupsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DirectoryBackupsInput)(nil)).Elem(), DirectoryBackupsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DirectoryBackupsPtrInput)(nil)).Elem(), DirectoryBackupsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FileSourceFileInput)(nil)).Elem(), FileSourceFileArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FileSourceFilePtrInput)(nil)).Elem(), FileSourceFileArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FileSourceRawInput)(nil)).Elem(), FileSourceRawArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*FileSourceRawPtrInput)(nil)).Elem(), FileSourceRawArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NFSBackupsInput)(nil)).Elem(), NFSBackupsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NFSBackupsPtrInput)(nil)).Elem(), NFSBackupsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PBSBackupsInput)(nil)).Elem(), PBSBackupsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PBSBackupsPtrInput)(nil)).Elem(), PBSBackupsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatastoresDatastoreInput)(nil)).Elem(), GetDatastoresDatastoreArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatastoresDatastoreArrayInput)(nil)).Elem(), GetDatastoresDatastoreArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatastoresFiltersInput)(nil)).Elem(), GetDatastoresFiltersArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetDatastoresFiltersPtrInput)(nil)).Elem(), GetDatastoresFiltersArgs{}) + pulumi.RegisterOutputType(CIFSBackupsOutput{}) + pulumi.RegisterOutputType(CIFSBackupsPtrOutput{}) + pulumi.RegisterOutputType(DirectoryBackupsOutput{}) + pulumi.RegisterOutputType(DirectoryBackupsPtrOutput{}) pulumi.RegisterOutputType(FileSourceFileOutput{}) pulumi.RegisterOutputType(FileSourceFilePtrOutput{}) pulumi.RegisterOutputType(FileSourceRawOutput{}) pulumi.RegisterOutputType(FileSourceRawPtrOutput{}) + pulumi.RegisterOutputType(NFSBackupsOutput{}) + pulumi.RegisterOutputType(NFSBackupsPtrOutput{}) + pulumi.RegisterOutputType(PBSBackupsOutput{}) + pulumi.RegisterOutputType(PBSBackupsPtrOutput{}) pulumi.RegisterOutputType(GetDatastoresDatastoreOutput{}) pulumi.RegisterOutputType(GetDatastoresDatastoreArrayOutput{}) pulumi.RegisterOutputType(GetDatastoresFiltersOutput{}) diff --git a/sdk/go/proxmoxve/storage/zfspool.go b/sdk/go/proxmoxve/storage/zfspool.go new file mode 100644 index 00000000..ece9f8f3 --- /dev/null +++ b/sdk/go/proxmoxve/storage/zfspool.go @@ -0,0 +1,358 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package storage + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Manages ZFS-based storage in Proxmox VE. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/storage" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := storage.NewZFSPool(ctx, "example", &storage.ZFSPoolArgs{ +// ZfsPoolId: pulumi.String("example-zfs"), +// Nodes: pulumi.StringArray{ +// pulumi.String("pve"), +// }, +// ZfsPool: pulumi.String("rpool/data"), +// Contents: pulumi.StringArray{ +// pulumi.String("images"), +// }, +// ThinProvision: pulumi.Bool(true), +// Blocksize: pulumi.String("64k"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type ZFSPool struct { + pulumi.CustomResourceState + + // Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + Blocksize pulumi.StringPtrOutput `pulumi:"blocksize"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayOutput `pulumi:"contents"` + // Whether the storage is disabled. + Disable pulumi.BoolOutput `pulumi:"disable"` + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayOutput `pulumi:"nodes"` + // Whether the storage is shared across all nodes. + Shared pulumi.BoolOutput `pulumi:"shared"` + // Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + ThinProvision pulumi.BoolPtrOutput `pulumi:"thinProvision"` + // The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + ZfsPool pulumi.StringOutput `pulumi:"zfsPool"` + // The unique identifier of the storage. + ZfsPoolId pulumi.StringOutput `pulumi:"zfsPoolId"` +} + +// NewZFSPool registers a new resource with the given unique name, arguments, and options. +func NewZFSPool(ctx *pulumi.Context, + name string, args *ZFSPoolArgs, opts ...pulumi.ResourceOption) (*ZFSPool, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ZfsPool == nil { + return nil, errors.New("invalid value for required argument 'ZfsPool'") + } + if args.ZfsPoolId == nil { + return nil, errors.New("invalid value for required argument 'ZfsPoolId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource ZFSPool + err := ctx.RegisterResource("proxmoxve:Storage/zFSPool:ZFSPool", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetZFSPool gets an existing ZFSPool resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetZFSPool(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ZFSPoolState, opts ...pulumi.ResourceOption) (*ZFSPool, error) { + var resource ZFSPool + err := ctx.ReadResource("proxmoxve:Storage/zFSPool:ZFSPool", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ZFSPool resources. +type zfspoolState struct { + // Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + Blocksize *string `pulumi:"blocksize"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // Whether the storage is shared across all nodes. + Shared *bool `pulumi:"shared"` + // Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + ThinProvision *bool `pulumi:"thinProvision"` + // The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + ZfsPool *string `pulumi:"zfsPool"` + // The unique identifier of the storage. + ZfsPoolId *string `pulumi:"zfsPoolId"` +} + +type ZFSPoolState struct { + // Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + Blocksize pulumi.StringPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // Whether the storage is shared across all nodes. + Shared pulumi.BoolPtrInput + // Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + ThinProvision pulumi.BoolPtrInput + // The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + ZfsPool pulumi.StringPtrInput + // The unique identifier of the storage. + ZfsPoolId pulumi.StringPtrInput +} + +func (ZFSPoolState) ElementType() reflect.Type { + return reflect.TypeOf((*zfspoolState)(nil)).Elem() +} + +type zfspoolArgs struct { + // Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + Blocksize *string `pulumi:"blocksize"` + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents []string `pulumi:"contents"` + // Whether the storage is disabled. + Disable *bool `pulumi:"disable"` + // A list of nodes where this storage is available. + Nodes []string `pulumi:"nodes"` + // Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + ThinProvision *bool `pulumi:"thinProvision"` + // The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + ZfsPool string `pulumi:"zfsPool"` + // The unique identifier of the storage. + ZfsPoolId string `pulumi:"zfsPoolId"` +} + +// The set of arguments for constructing a ZFSPool resource. +type ZFSPoolArgs struct { + // Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + Blocksize pulumi.StringPtrInput + // The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + Contents pulumi.StringArrayInput + // Whether the storage is disabled. + Disable pulumi.BoolPtrInput + // A list of nodes where this storage is available. + Nodes pulumi.StringArrayInput + // Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + ThinProvision pulumi.BoolPtrInput + // The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + ZfsPool pulumi.StringInput + // The unique identifier of the storage. + ZfsPoolId pulumi.StringInput +} + +func (ZFSPoolArgs) ElementType() reflect.Type { + return reflect.TypeOf((*zfspoolArgs)(nil)).Elem() +} + +type ZFSPoolInput interface { + pulumi.Input + + ToZFSPoolOutput() ZFSPoolOutput + ToZFSPoolOutputWithContext(ctx context.Context) ZFSPoolOutput +} + +func (*ZFSPool) ElementType() reflect.Type { + return reflect.TypeOf((**ZFSPool)(nil)).Elem() +} + +func (i *ZFSPool) ToZFSPoolOutput() ZFSPoolOutput { + return i.ToZFSPoolOutputWithContext(context.Background()) +} + +func (i *ZFSPool) ToZFSPoolOutputWithContext(ctx context.Context) ZFSPoolOutput { + return pulumi.ToOutputWithContext(ctx, i).(ZFSPoolOutput) +} + +// ZFSPoolArrayInput is an input type that accepts ZFSPoolArray and ZFSPoolArrayOutput values. +// You can construct a concrete instance of `ZFSPoolArrayInput` via: +// +// ZFSPoolArray{ ZFSPoolArgs{...} } +type ZFSPoolArrayInput interface { + pulumi.Input + + ToZFSPoolArrayOutput() ZFSPoolArrayOutput + ToZFSPoolArrayOutputWithContext(context.Context) ZFSPoolArrayOutput +} + +type ZFSPoolArray []ZFSPoolInput + +func (ZFSPoolArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ZFSPool)(nil)).Elem() +} + +func (i ZFSPoolArray) ToZFSPoolArrayOutput() ZFSPoolArrayOutput { + return i.ToZFSPoolArrayOutputWithContext(context.Background()) +} + +func (i ZFSPoolArray) ToZFSPoolArrayOutputWithContext(ctx context.Context) ZFSPoolArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ZFSPoolArrayOutput) +} + +// ZFSPoolMapInput is an input type that accepts ZFSPoolMap and ZFSPoolMapOutput values. +// You can construct a concrete instance of `ZFSPoolMapInput` via: +// +// ZFSPoolMap{ "key": ZFSPoolArgs{...} } +type ZFSPoolMapInput interface { + pulumi.Input + + ToZFSPoolMapOutput() ZFSPoolMapOutput + ToZFSPoolMapOutputWithContext(context.Context) ZFSPoolMapOutput +} + +type ZFSPoolMap map[string]ZFSPoolInput + +func (ZFSPoolMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ZFSPool)(nil)).Elem() +} + +func (i ZFSPoolMap) ToZFSPoolMapOutput() ZFSPoolMapOutput { + return i.ToZFSPoolMapOutputWithContext(context.Background()) +} + +func (i ZFSPoolMap) ToZFSPoolMapOutputWithContext(ctx context.Context) ZFSPoolMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ZFSPoolMapOutput) +} + +type ZFSPoolOutput struct{ *pulumi.OutputState } + +func (ZFSPoolOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ZFSPool)(nil)).Elem() +} + +func (o ZFSPoolOutput) ToZFSPoolOutput() ZFSPoolOutput { + return o +} + +func (o ZFSPoolOutput) ToZFSPoolOutputWithContext(ctx context.Context) ZFSPoolOutput { + return o +} + +// Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. +func (o ZFSPoolOutput) Blocksize() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.StringPtrOutput { return v.Blocksize }).(pulumi.StringPtrOutput) +} + +// The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). +func (o ZFSPoolOutput) Contents() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.StringArrayOutput { return v.Contents }).(pulumi.StringArrayOutput) +} + +// Whether the storage is disabled. +func (o ZFSPoolOutput) Disable() pulumi.BoolOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.BoolOutput { return v.Disable }).(pulumi.BoolOutput) +} + +// A list of nodes where this storage is available. +func (o ZFSPoolOutput) Nodes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.StringArrayOutput { return v.Nodes }).(pulumi.StringArrayOutput) +} + +// Whether the storage is shared across all nodes. +func (o ZFSPoolOutput) Shared() pulumi.BoolOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.BoolOutput { return v.Shared }).(pulumi.BoolOutput) +} + +// Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. +func (o ZFSPoolOutput) ThinProvision() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.BoolPtrOutput { return v.ThinProvision }).(pulumi.BoolPtrOutput) +} + +// The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). +func (o ZFSPoolOutput) ZfsPool() pulumi.StringOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.StringOutput { return v.ZfsPool }).(pulumi.StringOutput) +} + +// The unique identifier of the storage. +func (o ZFSPoolOutput) ZfsPoolId() pulumi.StringOutput { + return o.ApplyT(func(v *ZFSPool) pulumi.StringOutput { return v.ZfsPoolId }).(pulumi.StringOutput) +} + +type ZFSPoolArrayOutput struct{ *pulumi.OutputState } + +func (ZFSPoolArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ZFSPool)(nil)).Elem() +} + +func (o ZFSPoolArrayOutput) ToZFSPoolArrayOutput() ZFSPoolArrayOutput { + return o +} + +func (o ZFSPoolArrayOutput) ToZFSPoolArrayOutputWithContext(ctx context.Context) ZFSPoolArrayOutput { + return o +} + +func (o ZFSPoolArrayOutput) Index(i pulumi.IntInput) ZFSPoolOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ZFSPool { + return vs[0].([]*ZFSPool)[vs[1].(int)] + }).(ZFSPoolOutput) +} + +type ZFSPoolMapOutput struct{ *pulumi.OutputState } + +func (ZFSPoolMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ZFSPool)(nil)).Elem() +} + +func (o ZFSPoolMapOutput) ToZFSPoolMapOutput() ZFSPoolMapOutput { + return o +} + +func (o ZFSPoolMapOutput) ToZFSPoolMapOutputWithContext(ctx context.Context) ZFSPoolMapOutput { + return o +} + +func (o ZFSPoolMapOutput) MapIndex(k pulumi.StringInput) ZFSPoolOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ZFSPool { + return vs[0].(map[string]*ZFSPool)[vs[1].(string)] + }).(ZFSPoolOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ZFSPoolInput)(nil)).Elem(), &ZFSPool{}) + pulumi.RegisterInputType(reflect.TypeOf((*ZFSPoolArrayInput)(nil)).Elem(), ZFSPoolArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ZFSPoolMapInput)(nil)).Elem(), ZFSPoolMap{}) + pulumi.RegisterOutputType(ZFSPoolOutput{}) + pulumi.RegisterOutputType(ZFSPoolArrayOutput{}) + pulumi.RegisterOutputType(ZFSPoolMapOutput{}) +} diff --git a/sdk/go/proxmoxve/vm/clonedVirtualMachine.go b/sdk/go/proxmoxve/vm/clonedVirtualMachine.go new file mode 100644 index 00000000..2ce3f29e --- /dev/null +++ b/sdk/go/proxmoxve/vm/clonedVirtualMachine.go @@ -0,0 +1,690 @@ +// Code generated by pulumi-language-go DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package vm + +import ( + "context" + "reflect" + + "errors" + "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/muhlba91/pulumi-proxmoxve/sdk/v7/go/proxmoxve/vm" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// // Example 1: Basic clone with minimal management +// _, err := vm.NewClonedVirtualMachine(ctx, "basic_clone", &vm.ClonedVirtualMachineArgs{ +// NodeName: pulumi.String("pve"), +// Name: pulumi.String("basic-clone"), +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// Full: pulumi.Bool(true), +// }, +// Cpu: &vm.ClonedVirtualMachineCpuArgs{ +// Cores: pulumi.Int(4), +// }, +// }) +// if err != nil { +// return err +// } +// // Example 2: Clone with explicit network management +// _, err = vm.NewClonedVirtualMachine(ctx, "network_managed", &vm.ClonedVirtualMachineArgs{ +// NodeName: pulumi.String("pve"), +// Name: pulumi.String("network-clone"), +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// }, +// Network: vm.ClonedVirtualMachineNetworkMap{ +// "net0": &vm.ClonedVirtualMachineNetworkArgs{ +// Bridge: pulumi.String("vmbr0"), +// Model: pulumi.String("virtio"), +// Tag: pulumi.Int(100), +// }, +// "net1": &vm.ClonedVirtualMachineNetworkArgs{ +// Bridge: pulumi.String("vmbr1"), +// Model: pulumi.String("virtio"), +// Firewall: pulumi.Bool(true), +// MacAddress: pulumi.String("BC:24:11:2E:C5:00"), +// }, +// }, +// Cpu: &vm.ClonedVirtualMachineCpuArgs{ +// Cores: pulumi.Int(2), +// }, +// }) +// if err != nil { +// return err +// } +// // Example 3: Clone with disk management +// _, err = vm.NewClonedVirtualMachine(ctx, "disk_managed", &vm.ClonedVirtualMachineArgs{ +// NodeName: pulumi.String("pve"), +// Name: pulumi.String("disk-clone"), +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// TargetDatastore: pulumi.String("local-lvm"), +// }, +// Disk: vm.ClonedVirtualMachineDiskMap{ +// "scsi0": &vm.ClonedVirtualMachineDiskArgs{ +// DatastoreId: pulumi.String("local-lvm"), +// SizeGb: pulumi.Int(50), +// Discard: pulumi.String("on"), +// Ssd: pulumi.Bool(true), +// }, +// "scsi1": &vm.ClonedVirtualMachineDiskArgs{ +// DatastoreId: pulumi.String("local-lvm"), +// SizeGb: pulumi.Int(100), +// Backup: pulumi.Bool(false), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// // Example 4: Clone with explicit device deletion +// _, err = vm.NewClonedVirtualMachine(ctx, "selective_delete", &vm.ClonedVirtualMachineArgs{ +// NodeName: pulumi.String("pve"), +// Name: pulumi.String("minimal-clone"), +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// }, +// Network: vm.ClonedVirtualMachineNetworkMap{ +// "net0": &vm.ClonedVirtualMachineNetworkArgs{ +// Bridge: pulumi.String("vmbr0"), +// Model: pulumi.String("virtio"), +// }, +// }, +// Delete: &vm.ClonedVirtualMachineDeleteArgs{ +// Networks: pulumi.StringArray{ +// pulumi.String("net1"), +// pulumi.String("net2"), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// // Example 5: Full-featured clone with multiple settings +// _, err = vm.NewClonedVirtualMachine(ctx, "full_featured", &vm.ClonedVirtualMachineArgs{ +// NodeName: pulumi.String("pve"), +// Name: pulumi.String("production-vm"), +// Description: pulumi.String("Production VM cloned from template"), +// Tags: pulumi.StringArray{ +// pulumi.String("production"), +// pulumi.String("web"), +// }, +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// SourceNodeName: pulumi.String("pve"), +// Full: pulumi.Bool(true), +// TargetDatastore: pulumi.String("local-lvm"), +// Retries: pulumi.Int(3), +// }, +// Cpu: &vm.ClonedVirtualMachineCpuArgs{ +// Cores: pulumi.Int(8), +// Sockets: pulumi.Int(1), +// Architecture: pulumi.String("x86_64"), +// Type: pulumi.String("host"), +// }, +// Memory: &vm.ClonedVirtualMachineMemoryArgs{ +// Size: pulumi.Int(8192), +// Balloon: pulumi.Int(2048), +// Shares: pulumi.Int(2000), +// }, +// Network: vm.ClonedVirtualMachineNetworkMap{ +// "net0": &vm.ClonedVirtualMachineNetworkArgs{ +// Bridge: pulumi.String("vmbr0"), +// Model: pulumi.String("virtio"), +// Tag: pulumi.Int(100), +// Firewall: pulumi.Bool(true), +// RateLimit: pulumi.Float64(100), +// }, +// }, +// Disk: vm.ClonedVirtualMachineDiskMap{ +// "scsi0": &vm.ClonedVirtualMachineDiskArgs{ +// DatastoreId: pulumi.String("local-lvm"), +// SizeGb: pulumi.Int(100), +// Discard: pulumi.String("on"), +// Iothread: pulumi.Bool(true), +// Ssd: pulumi.Bool(true), +// Cache: pulumi.String("writethrough"), +// }, +// }, +// Vga: &vm.ClonedVirtualMachineVgaArgs{ +// Type: pulumi.String("std"), +// Memory: pulumi.Int(16), +// }, +// Delete: &vm.ClonedVirtualMachineDeleteArgs{ +// Disks: pulumi.StringArray{ +// pulumi.String("ide2"), +// }, +// }, +// StopOnDestroy: pulumi.Bool(false), +// PurgeOnDestroy: pulumi.Bool(true), +// DeleteUnreferencedDisksOnDestroy: pulumi.Bool(false), +// Timeouts: &vm.ClonedVirtualMachineTimeoutsArgs{ +// Create: pulumi.String("30m"), +// Update: pulumi.String("30m"), +// Delete: pulumi.String("10m"), +// }, +// }) +// if err != nil { +// return err +// } +// // Example 6: Linked clone for testing +// _, err = vm.NewClonedVirtualMachine(ctx, "test_clone", &vm.ClonedVirtualMachineArgs{ +// NodeName: pulumi.String("pve"), +// Name: pulumi.String("test-vm"), +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// Full: pulumi.Bool(false), +// }, +// Cpu: &vm.ClonedVirtualMachineCpuArgs{ +// Cores: pulumi.Int(2), +// }, +// Network: vm.ClonedVirtualMachineNetworkMap{ +// "net0": &vm.ClonedVirtualMachineNetworkArgs{ +// Bridge: pulumi.String("vmbr0"), +// Model: pulumi.String("virtio"), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// // Example 7: Clone with pool assignment +// _, err = vm.NewClonedVirtualMachine(ctx, "pooled_clone", &vm.ClonedVirtualMachineArgs{ +// NodeName: pulumi.String("pve"), +// Name: pulumi.String("pooled-vm"), +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// PoolId: pulumi.String("production"), +// }, +// Cpu: &vm.ClonedVirtualMachineCpuArgs{ +// Cores: pulumi.Int(4), +// }, +// }) +// if err != nil { +// return err +// } +// // Example 8: Import existing cloned VM +// _, err = vm.NewClonedVirtualMachine(ctx, "imported", &vm.ClonedVirtualMachineArgs{ +// VmId: pulumi.String("123"), +// NodeName: pulumi.String("pve"), +// Clone: &vm.ClonedVirtualMachineCloneArgs{ +// SourceVmId: pulumi.Int(100), +// }, +// Cpu: &vm.ClonedVirtualMachineCpuArgs{ +// Cores: pulumi.Int(4), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type ClonedVirtualMachine struct { + pulumi.CustomResourceState + + // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + Cdrom ClonedVirtualMachineCdromMapOutput `pulumi:"cdrom"` + // Clone settings. Changes require recreation. + Clone ClonedVirtualMachineCloneOutput `pulumi:"clone"` + // The CPU configuration. + Cpu ClonedVirtualMachineCpuPtrOutput `pulumi:"cpu"` + // Explicit deletions to perform after cloning/updating. Entries persist across applies. + Delete ClonedVirtualMachineDeletePtrOutput `pulumi:"delete"` + DeleteUnreferencedDisksOnDestroy pulumi.BoolOutput `pulumi:"deleteUnreferencedDisksOnDestroy"` + // Optional VM description applied after cloning. + Description pulumi.StringPtrOutput `pulumi:"description"` + // Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + Disk ClonedVirtualMachineDiskMapOutput `pulumi:"disk"` + // Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + Memory ClonedVirtualMachineMemoryPtrOutput `pulumi:"memory"` + // Optional VM name override applied after cloning. + Name pulumi.StringOutput `pulumi:"name"` + // Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + Network ClonedVirtualMachineNetworkMapOutput `pulumi:"network"` + // Target node for the cloned VM. + NodeName pulumi.StringOutput `pulumi:"nodeName"` + // Purge backup configuration on destroy. + PurgeOnDestroy pulumi.BoolOutput `pulumi:"purgeOnDestroy"` + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Rng ClonedVirtualMachineRngPtrOutput `pulumi:"rng"` + // Stop the VM on destroy (instead of shutdown). + StopOnDestroy pulumi.BoolOutput `pulumi:"stopOnDestroy"` + // Tags applied after cloning. + Tags pulumi.StringArrayOutput `pulumi:"tags"` + Timeouts ClonedVirtualMachineTimeoutsPtrOutput `pulumi:"timeouts"` + // Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + Vga ClonedVirtualMachineVgaPtrOutput `pulumi:"vga"` + // The VM identifier in the Proxmox cluster. + VmId pulumi.StringOutput `pulumi:"vmId"` +} + +// NewClonedVirtualMachine registers a new resource with the given unique name, arguments, and options. +func NewClonedVirtualMachine(ctx *pulumi.Context, + name string, args *ClonedVirtualMachineArgs, opts ...pulumi.ResourceOption) (*ClonedVirtualMachine, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Clone == nil { + return nil, errors.New("invalid value for required argument 'Clone'") + } + if args.NodeName == nil { + return nil, errors.New("invalid value for required argument 'NodeName'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource ClonedVirtualMachine + err := ctx.RegisterResource("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetClonedVirtualMachine gets an existing ClonedVirtualMachine resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetClonedVirtualMachine(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ClonedVirtualMachineState, opts ...pulumi.ResourceOption) (*ClonedVirtualMachine, error) { + var resource ClonedVirtualMachine + err := ctx.ReadResource("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ClonedVirtualMachine resources. +type clonedVirtualMachineState struct { + // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + Cdrom map[string]ClonedVirtualMachineCdrom `pulumi:"cdrom"` + // Clone settings. Changes require recreation. + Clone *ClonedVirtualMachineClone `pulumi:"clone"` + // The CPU configuration. + Cpu *ClonedVirtualMachineCpu `pulumi:"cpu"` + // Explicit deletions to perform after cloning/updating. Entries persist across applies. + Delete *ClonedVirtualMachineDelete `pulumi:"delete"` + DeleteUnreferencedDisksOnDestroy *bool `pulumi:"deleteUnreferencedDisksOnDestroy"` + // Optional VM description applied after cloning. + Description *string `pulumi:"description"` + // Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + Disk map[string]ClonedVirtualMachineDisk `pulumi:"disk"` + // Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + Memory *ClonedVirtualMachineMemory `pulumi:"memory"` + // Optional VM name override applied after cloning. + Name *string `pulumi:"name"` + // Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + Network map[string]ClonedVirtualMachineNetwork `pulumi:"network"` + // Target node for the cloned VM. + NodeName *string `pulumi:"nodeName"` + // Purge backup configuration on destroy. + PurgeOnDestroy *bool `pulumi:"purgeOnDestroy"` + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Rng *ClonedVirtualMachineRng `pulumi:"rng"` + // Stop the VM on destroy (instead of shutdown). + StopOnDestroy *bool `pulumi:"stopOnDestroy"` + // Tags applied after cloning. + Tags []string `pulumi:"tags"` + Timeouts *ClonedVirtualMachineTimeouts `pulumi:"timeouts"` + // Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + Vga *ClonedVirtualMachineVga `pulumi:"vga"` + // The VM identifier in the Proxmox cluster. + VmId *string `pulumi:"vmId"` +} + +type ClonedVirtualMachineState struct { + // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + Cdrom ClonedVirtualMachineCdromMapInput + // Clone settings. Changes require recreation. + Clone ClonedVirtualMachineClonePtrInput + // The CPU configuration. + Cpu ClonedVirtualMachineCpuPtrInput + // Explicit deletions to perform after cloning/updating. Entries persist across applies. + Delete ClonedVirtualMachineDeletePtrInput + DeleteUnreferencedDisksOnDestroy pulumi.BoolPtrInput + // Optional VM description applied after cloning. + Description pulumi.StringPtrInput + // Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + Disk ClonedVirtualMachineDiskMapInput + // Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + Memory ClonedVirtualMachineMemoryPtrInput + // Optional VM name override applied after cloning. + Name pulumi.StringPtrInput + // Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + Network ClonedVirtualMachineNetworkMapInput + // Target node for the cloned VM. + NodeName pulumi.StringPtrInput + // Purge backup configuration on destroy. + PurgeOnDestroy pulumi.BoolPtrInput + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Rng ClonedVirtualMachineRngPtrInput + // Stop the VM on destroy (instead of shutdown). + StopOnDestroy pulumi.BoolPtrInput + // Tags applied after cloning. + Tags pulumi.StringArrayInput + Timeouts ClonedVirtualMachineTimeoutsPtrInput + // Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + Vga ClonedVirtualMachineVgaPtrInput + // The VM identifier in the Proxmox cluster. + VmId pulumi.StringPtrInput +} + +func (ClonedVirtualMachineState) ElementType() reflect.Type { + return reflect.TypeOf((*clonedVirtualMachineState)(nil)).Elem() +} + +type clonedVirtualMachineArgs struct { + // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + Cdrom map[string]ClonedVirtualMachineCdrom `pulumi:"cdrom"` + // Clone settings. Changes require recreation. + Clone ClonedVirtualMachineClone `pulumi:"clone"` + // The CPU configuration. + Cpu *ClonedVirtualMachineCpu `pulumi:"cpu"` + // Explicit deletions to perform after cloning/updating. Entries persist across applies. + Delete *ClonedVirtualMachineDelete `pulumi:"delete"` + DeleteUnreferencedDisksOnDestroy *bool `pulumi:"deleteUnreferencedDisksOnDestroy"` + // Optional VM description applied after cloning. + Description *string `pulumi:"description"` + // Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + Disk map[string]ClonedVirtualMachineDisk `pulumi:"disk"` + // Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + Memory *ClonedVirtualMachineMemory `pulumi:"memory"` + // Optional VM name override applied after cloning. + Name *string `pulumi:"name"` + // Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + Network map[string]ClonedVirtualMachineNetwork `pulumi:"network"` + // Target node for the cloned VM. + NodeName string `pulumi:"nodeName"` + // Purge backup configuration on destroy. + PurgeOnDestroy *bool `pulumi:"purgeOnDestroy"` + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Rng *ClonedVirtualMachineRng `pulumi:"rng"` + // Stop the VM on destroy (instead of shutdown). + StopOnDestroy *bool `pulumi:"stopOnDestroy"` + // Tags applied after cloning. + Tags []string `pulumi:"tags"` + Timeouts *ClonedVirtualMachineTimeouts `pulumi:"timeouts"` + // Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + Vga *ClonedVirtualMachineVga `pulumi:"vga"` + // The VM identifier in the Proxmox cluster. + VmId *string `pulumi:"vmId"` +} + +// The set of arguments for constructing a ClonedVirtualMachine resource. +type ClonedVirtualMachineArgs struct { + // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + Cdrom ClonedVirtualMachineCdromMapInput + // Clone settings. Changes require recreation. + Clone ClonedVirtualMachineCloneInput + // The CPU configuration. + Cpu ClonedVirtualMachineCpuPtrInput + // Explicit deletions to perform after cloning/updating. Entries persist across applies. + Delete ClonedVirtualMachineDeletePtrInput + DeleteUnreferencedDisksOnDestroy pulumi.BoolPtrInput + // Optional VM description applied after cloning. + Description pulumi.StringPtrInput + // Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + Disk ClonedVirtualMachineDiskMapInput + // Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + Memory ClonedVirtualMachineMemoryPtrInput + // Optional VM name override applied after cloning. + Name pulumi.StringPtrInput + // Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + Network ClonedVirtualMachineNetworkMapInput + // Target node for the cloned VM. + NodeName pulumi.StringInput + // Purge backup configuration on destroy. + PurgeOnDestroy pulumi.BoolPtrInput + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Rng ClonedVirtualMachineRngPtrInput + // Stop the VM on destroy (instead of shutdown). + StopOnDestroy pulumi.BoolPtrInput + // Tags applied after cloning. + Tags pulumi.StringArrayInput + Timeouts ClonedVirtualMachineTimeoutsPtrInput + // Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + Vga ClonedVirtualMachineVgaPtrInput + // The VM identifier in the Proxmox cluster. + VmId pulumi.StringPtrInput +} + +func (ClonedVirtualMachineArgs) ElementType() reflect.Type { + return reflect.TypeOf((*clonedVirtualMachineArgs)(nil)).Elem() +} + +type ClonedVirtualMachineInput interface { + pulumi.Input + + ToClonedVirtualMachineOutput() ClonedVirtualMachineOutput + ToClonedVirtualMachineOutputWithContext(ctx context.Context) ClonedVirtualMachineOutput +} + +func (*ClonedVirtualMachine) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachine)(nil)).Elem() +} + +func (i *ClonedVirtualMachine) ToClonedVirtualMachineOutput() ClonedVirtualMachineOutput { + return i.ToClonedVirtualMachineOutputWithContext(context.Background()) +} + +func (i *ClonedVirtualMachine) ToClonedVirtualMachineOutputWithContext(ctx context.Context) ClonedVirtualMachineOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineOutput) +} + +// ClonedVirtualMachineArrayInput is an input type that accepts ClonedVirtualMachineArray and ClonedVirtualMachineArrayOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineArrayInput` via: +// +// ClonedVirtualMachineArray{ ClonedVirtualMachineArgs{...} } +type ClonedVirtualMachineArrayInput interface { + pulumi.Input + + ToClonedVirtualMachineArrayOutput() ClonedVirtualMachineArrayOutput + ToClonedVirtualMachineArrayOutputWithContext(context.Context) ClonedVirtualMachineArrayOutput +} + +type ClonedVirtualMachineArray []ClonedVirtualMachineInput + +func (ClonedVirtualMachineArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ClonedVirtualMachine)(nil)).Elem() +} + +func (i ClonedVirtualMachineArray) ToClonedVirtualMachineArrayOutput() ClonedVirtualMachineArrayOutput { + return i.ToClonedVirtualMachineArrayOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineArray) ToClonedVirtualMachineArrayOutputWithContext(ctx context.Context) ClonedVirtualMachineArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineArrayOutput) +} + +// ClonedVirtualMachineMapInput is an input type that accepts ClonedVirtualMachineMap and ClonedVirtualMachineMapOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineMapInput` via: +// +// ClonedVirtualMachineMap{ "key": ClonedVirtualMachineArgs{...} } +type ClonedVirtualMachineMapInput interface { + pulumi.Input + + ToClonedVirtualMachineMapOutput() ClonedVirtualMachineMapOutput + ToClonedVirtualMachineMapOutputWithContext(context.Context) ClonedVirtualMachineMapOutput +} + +type ClonedVirtualMachineMap map[string]ClonedVirtualMachineInput + +func (ClonedVirtualMachineMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ClonedVirtualMachine)(nil)).Elem() +} + +func (i ClonedVirtualMachineMap) ToClonedVirtualMachineMapOutput() ClonedVirtualMachineMapOutput { + return i.ToClonedVirtualMachineMapOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineMap) ToClonedVirtualMachineMapOutputWithContext(ctx context.Context) ClonedVirtualMachineMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineMapOutput) +} + +type ClonedVirtualMachineOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachine)(nil)).Elem() +} + +func (o ClonedVirtualMachineOutput) ToClonedVirtualMachineOutput() ClonedVirtualMachineOutput { + return o +} + +func (o ClonedVirtualMachineOutput) ToClonedVirtualMachineOutputWithContext(ctx context.Context) ClonedVirtualMachineOutput { + return o +} + +// The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. +func (o ClonedVirtualMachineOutput) Cdrom() ClonedVirtualMachineCdromMapOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineCdromMapOutput { return v.Cdrom }).(ClonedVirtualMachineCdromMapOutput) +} + +// Clone settings. Changes require recreation. +func (o ClonedVirtualMachineOutput) Clone() ClonedVirtualMachineCloneOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineCloneOutput { return v.Clone }).(ClonedVirtualMachineCloneOutput) +} + +// The CPU configuration. +func (o ClonedVirtualMachineOutput) Cpu() ClonedVirtualMachineCpuPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineCpuPtrOutput { return v.Cpu }).(ClonedVirtualMachineCpuPtrOutput) +} + +// Explicit deletions to perform after cloning/updating. Entries persist across applies. +func (o ClonedVirtualMachineOutput) Delete() ClonedVirtualMachineDeletePtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineDeletePtrOutput { return v.Delete }).(ClonedVirtualMachineDeletePtrOutput) +} + +func (o ClonedVirtualMachineOutput) DeleteUnreferencedDisksOnDestroy() pulumi.BoolOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.BoolOutput { return v.DeleteUnreferencedDisksOnDestroy }).(pulumi.BoolOutput) +} + +// Optional VM description applied after cloning. +func (o ClonedVirtualMachineOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) +} + +// Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. +func (o ClonedVirtualMachineOutput) Disk() ClonedVirtualMachineDiskMapOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineDiskMapOutput { return v.Disk }).(ClonedVirtualMachineDiskMapOutput) +} + +// Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. +func (o ClonedVirtualMachineOutput) Memory() ClonedVirtualMachineMemoryPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineMemoryPtrOutput { return v.Memory }).(ClonedVirtualMachineMemoryPtrOutput) +} + +// Optional VM name override applied after cloning. +func (o ClonedVirtualMachineOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. +func (o ClonedVirtualMachineOutput) Network() ClonedVirtualMachineNetworkMapOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineNetworkMapOutput { return v.Network }).(ClonedVirtualMachineNetworkMapOutput) +} + +// Target node for the cloned VM. +func (o ClonedVirtualMachineOutput) NodeName() pulumi.StringOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.StringOutput { return v.NodeName }).(pulumi.StringOutput) +} + +// Purge backup configuration on destroy. +func (o ClonedVirtualMachineOutput) PurgeOnDestroy() pulumi.BoolOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.BoolOutput { return v.PurgeOnDestroy }).(pulumi.BoolOutput) +} + +// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. +func (o ClonedVirtualMachineOutput) Rng() ClonedVirtualMachineRngPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineRngPtrOutput { return v.Rng }).(ClonedVirtualMachineRngPtrOutput) +} + +// Stop the VM on destroy (instead of shutdown). +func (o ClonedVirtualMachineOutput) StopOnDestroy() pulumi.BoolOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.BoolOutput { return v.StopOnDestroy }).(pulumi.BoolOutput) +} + +// Tags applied after cloning. +func (o ClonedVirtualMachineOutput) Tags() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.StringArrayOutput { return v.Tags }).(pulumi.StringArrayOutput) +} + +func (o ClonedVirtualMachineOutput) Timeouts() ClonedVirtualMachineTimeoutsPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineTimeoutsPtrOutput { return v.Timeouts }).(ClonedVirtualMachineTimeoutsPtrOutput) +} + +// Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. +func (o ClonedVirtualMachineOutput) Vga() ClonedVirtualMachineVgaPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) ClonedVirtualMachineVgaPtrOutput { return v.Vga }).(ClonedVirtualMachineVgaPtrOutput) +} + +// The VM identifier in the Proxmox cluster. +func (o ClonedVirtualMachineOutput) VmId() pulumi.StringOutput { + return o.ApplyT(func(v *ClonedVirtualMachine) pulumi.StringOutput { return v.VmId }).(pulumi.StringOutput) +} + +type ClonedVirtualMachineArrayOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ClonedVirtualMachine)(nil)).Elem() +} + +func (o ClonedVirtualMachineArrayOutput) ToClonedVirtualMachineArrayOutput() ClonedVirtualMachineArrayOutput { + return o +} + +func (o ClonedVirtualMachineArrayOutput) ToClonedVirtualMachineArrayOutputWithContext(ctx context.Context) ClonedVirtualMachineArrayOutput { + return o +} + +func (o ClonedVirtualMachineArrayOutput) Index(i pulumi.IntInput) ClonedVirtualMachineOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ClonedVirtualMachine { + return vs[0].([]*ClonedVirtualMachine)[vs[1].(int)] + }).(ClonedVirtualMachineOutput) +} + +type ClonedVirtualMachineMapOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ClonedVirtualMachine)(nil)).Elem() +} + +func (o ClonedVirtualMachineMapOutput) ToClonedVirtualMachineMapOutput() ClonedVirtualMachineMapOutput { + return o +} + +func (o ClonedVirtualMachineMapOutput) ToClonedVirtualMachineMapOutputWithContext(ctx context.Context) ClonedVirtualMachineMapOutput { + return o +} + +func (o ClonedVirtualMachineMapOutput) MapIndex(k pulumi.StringInput) ClonedVirtualMachineOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ClonedVirtualMachine { + return vs[0].(map[string]*ClonedVirtualMachine)[vs[1].(string)] + }).(ClonedVirtualMachineOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineInput)(nil)).Elem(), &ClonedVirtualMachine{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineArrayInput)(nil)).Elem(), ClonedVirtualMachineArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineMapInput)(nil)).Elem(), ClonedVirtualMachineMap{}) + pulumi.RegisterOutputType(ClonedVirtualMachineOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineArrayOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineMapOutput{}) +} diff --git a/sdk/go/proxmoxve/vm/init.go b/sdk/go/proxmoxve/vm/init.go index ff283c32..df28c9a4 100644 --- a/sdk/go/proxmoxve/vm/init.go +++ b/sdk/go/proxmoxve/vm/init.go @@ -21,6 +21,8 @@ func (m *module) Version() semver.Version { func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { switch typ { + case "proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine": + r = &ClonedVirtualMachine{} case "proxmoxve:VM/virtualMachine2:VirtualMachine2": r = &VirtualMachine2{} case "proxmoxve:VM/virtualMachine:VirtualMachine": @@ -38,6 +40,11 @@ func init() { if err != nil { version = semver.Version{Major: 1} } + pulumi.RegisterResourceModule( + "proxmoxve", + "VM/clonedVirtualMachine", + &module{version}, + ) pulumi.RegisterResourceModule( "proxmoxve", "VM/virtualMachine", diff --git a/sdk/go/proxmoxve/vm/pulumiTypes.go b/sdk/go/proxmoxve/vm/pulumiTypes.go index c3d1469a..7ac6ffc4 100644 --- a/sdk/go/proxmoxve/vm/pulumiTypes.go +++ b/sdk/go/proxmoxve/vm/pulumiTypes.go @@ -13,252 +13,335 @@ import ( var _ = internal.GetEnvOrDefault -type VirtualMachine2Cdrom struct { +type ClonedVirtualMachineCdrom struct { // The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. FileId *string `pulumi:"fileId"` } -// VirtualMachine2CdromInput is an input type that accepts VirtualMachine2CdromArgs and VirtualMachine2CdromOutput values. -// You can construct a concrete instance of `VirtualMachine2CdromInput` via: +// ClonedVirtualMachineCdromInput is an input type that accepts ClonedVirtualMachineCdromArgs and ClonedVirtualMachineCdromOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineCdromInput` via: // -// VirtualMachine2CdromArgs{...} -type VirtualMachine2CdromInput interface { +// ClonedVirtualMachineCdromArgs{...} +type ClonedVirtualMachineCdromInput interface { pulumi.Input - ToVirtualMachine2CdromOutput() VirtualMachine2CdromOutput - ToVirtualMachine2CdromOutputWithContext(context.Context) VirtualMachine2CdromOutput + ToClonedVirtualMachineCdromOutput() ClonedVirtualMachineCdromOutput + ToClonedVirtualMachineCdromOutputWithContext(context.Context) ClonedVirtualMachineCdromOutput } -type VirtualMachine2CdromArgs struct { +type ClonedVirtualMachineCdromArgs struct { // The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. FileId pulumi.StringPtrInput `pulumi:"fileId"` } -func (VirtualMachine2CdromArgs) ElementType() reflect.Type { - return reflect.TypeOf((*VirtualMachine2Cdrom)(nil)).Elem() +func (ClonedVirtualMachineCdromArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineCdrom)(nil)).Elem() } -func (i VirtualMachine2CdromArgs) ToVirtualMachine2CdromOutput() VirtualMachine2CdromOutput { - return i.ToVirtualMachine2CdromOutputWithContext(context.Background()) +func (i ClonedVirtualMachineCdromArgs) ToClonedVirtualMachineCdromOutput() ClonedVirtualMachineCdromOutput { + return i.ToClonedVirtualMachineCdromOutputWithContext(context.Background()) } -func (i VirtualMachine2CdromArgs) ToVirtualMachine2CdromOutputWithContext(ctx context.Context) VirtualMachine2CdromOutput { - return pulumi.ToOutputWithContext(ctx, i).(VirtualMachine2CdromOutput) +func (i ClonedVirtualMachineCdromArgs) ToClonedVirtualMachineCdromOutputWithContext(ctx context.Context) ClonedVirtualMachineCdromOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineCdromOutput) } -// VirtualMachine2CdromMapInput is an input type that accepts VirtualMachine2CdromMap and VirtualMachine2CdromMapOutput values. -// You can construct a concrete instance of `VirtualMachine2CdromMapInput` via: +// ClonedVirtualMachineCdromMapInput is an input type that accepts ClonedVirtualMachineCdromMap and ClonedVirtualMachineCdromMapOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineCdromMapInput` via: // -// VirtualMachine2CdromMap{ "key": VirtualMachine2CdromArgs{...} } -type VirtualMachine2CdromMapInput interface { +// ClonedVirtualMachineCdromMap{ "key": ClonedVirtualMachineCdromArgs{...} } +type ClonedVirtualMachineCdromMapInput interface { pulumi.Input - ToVirtualMachine2CdromMapOutput() VirtualMachine2CdromMapOutput - ToVirtualMachine2CdromMapOutputWithContext(context.Context) VirtualMachine2CdromMapOutput + ToClonedVirtualMachineCdromMapOutput() ClonedVirtualMachineCdromMapOutput + ToClonedVirtualMachineCdromMapOutputWithContext(context.Context) ClonedVirtualMachineCdromMapOutput } -type VirtualMachine2CdromMap map[string]VirtualMachine2CdromInput +type ClonedVirtualMachineCdromMap map[string]ClonedVirtualMachineCdromInput -func (VirtualMachine2CdromMap) ElementType() reflect.Type { - return reflect.TypeOf((*map[string]VirtualMachine2Cdrom)(nil)).Elem() +func (ClonedVirtualMachineCdromMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]ClonedVirtualMachineCdrom)(nil)).Elem() } -func (i VirtualMachine2CdromMap) ToVirtualMachine2CdromMapOutput() VirtualMachine2CdromMapOutput { - return i.ToVirtualMachine2CdromMapOutputWithContext(context.Background()) +func (i ClonedVirtualMachineCdromMap) ToClonedVirtualMachineCdromMapOutput() ClonedVirtualMachineCdromMapOutput { + return i.ToClonedVirtualMachineCdromMapOutputWithContext(context.Background()) } -func (i VirtualMachine2CdromMap) ToVirtualMachine2CdromMapOutputWithContext(ctx context.Context) VirtualMachine2CdromMapOutput { - return pulumi.ToOutputWithContext(ctx, i).(VirtualMachine2CdromMapOutput) +func (i ClonedVirtualMachineCdromMap) ToClonedVirtualMachineCdromMapOutputWithContext(ctx context.Context) ClonedVirtualMachineCdromMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineCdromMapOutput) } -type VirtualMachine2CdromOutput struct{ *pulumi.OutputState } +type ClonedVirtualMachineCdromOutput struct{ *pulumi.OutputState } -func (VirtualMachine2CdromOutput) ElementType() reflect.Type { - return reflect.TypeOf((*VirtualMachine2Cdrom)(nil)).Elem() +func (ClonedVirtualMachineCdromOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineCdrom)(nil)).Elem() } -func (o VirtualMachine2CdromOutput) ToVirtualMachine2CdromOutput() VirtualMachine2CdromOutput { +func (o ClonedVirtualMachineCdromOutput) ToClonedVirtualMachineCdromOutput() ClonedVirtualMachineCdromOutput { return o } -func (o VirtualMachine2CdromOutput) ToVirtualMachine2CdromOutputWithContext(ctx context.Context) VirtualMachine2CdromOutput { +func (o ClonedVirtualMachineCdromOutput) ToClonedVirtualMachineCdromOutputWithContext(ctx context.Context) ClonedVirtualMachineCdromOutput { return o } // The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. -func (o VirtualMachine2CdromOutput) FileId() pulumi.StringPtrOutput { - return o.ApplyT(func(v VirtualMachine2Cdrom) *string { return v.FileId }).(pulumi.StringPtrOutput) +func (o ClonedVirtualMachineCdromOutput) FileId() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCdrom) *string { return v.FileId }).(pulumi.StringPtrOutput) } -type VirtualMachine2CdromMapOutput struct{ *pulumi.OutputState } +type ClonedVirtualMachineCdromMapOutput struct{ *pulumi.OutputState } -func (VirtualMachine2CdromMapOutput) ElementType() reflect.Type { - return reflect.TypeOf((*map[string]VirtualMachine2Cdrom)(nil)).Elem() +func (ClonedVirtualMachineCdromMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]ClonedVirtualMachineCdrom)(nil)).Elem() } -func (o VirtualMachine2CdromMapOutput) ToVirtualMachine2CdromMapOutput() VirtualMachine2CdromMapOutput { +func (o ClonedVirtualMachineCdromMapOutput) ToClonedVirtualMachineCdromMapOutput() ClonedVirtualMachineCdromMapOutput { return o } -func (o VirtualMachine2CdromMapOutput) ToVirtualMachine2CdromMapOutputWithContext(ctx context.Context) VirtualMachine2CdromMapOutput { +func (o ClonedVirtualMachineCdromMapOutput) ToClonedVirtualMachineCdromMapOutputWithContext(ctx context.Context) ClonedVirtualMachineCdromMapOutput { return o } -func (o VirtualMachine2CdromMapOutput) MapIndex(k pulumi.StringInput) VirtualMachine2CdromOutput { - return pulumi.All(o, k).ApplyT(func(vs []interface{}) VirtualMachine2Cdrom { - return vs[0].(map[string]VirtualMachine2Cdrom)[vs[1].(string)] - }).(VirtualMachine2CdromOutput) +func (o ClonedVirtualMachineCdromMapOutput) MapIndex(k pulumi.StringInput) ClonedVirtualMachineCdromOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) ClonedVirtualMachineCdrom { + return vs[0].(map[string]ClonedVirtualMachineCdrom)[vs[1].(string)] + }).(ClonedVirtualMachineCdromOutput) } -type VirtualMachine2Clone struct { - // The ID of the VM to clone. - Id int `pulumi:"id"` - // The number of retries to perform when cloning the VM (default: 3). +type ClonedVirtualMachineClone struct { + // Clone bandwidth limit in MB/s. + BandwidthLimit *int `pulumi:"bandwidthLimit"` + // Perform a full clone (true) or linked clone (false). + Full *bool `pulumi:"full"` + // Pool to assign the cloned VM to. + PoolId *string `pulumi:"poolId"` + // Number of retries for clone operations. Retries *int `pulumi:"retries"` -} - -// VirtualMachine2CloneInput is an input type that accepts VirtualMachine2CloneArgs and VirtualMachine2CloneOutput values. -// You can construct a concrete instance of `VirtualMachine2CloneInput` via: -// -// VirtualMachine2CloneArgs{...} -type VirtualMachine2CloneInput interface { + // Snapshot name to clone from. + SnapshotName *string `pulumi:"snapshotName"` + // Source node of the VM/template. Defaults to target node if unset. + SourceNodeName *string `pulumi:"sourceNodeName"` + // Source VM/template ID to clone from. + SourceVmId int `pulumi:"sourceVmId"` + // Target datastore for cloned disks. + TargetDatastore *string `pulumi:"targetDatastore"` + // Target disk format for clone (e.g., raw, qcow2). + TargetFormat *string `pulumi:"targetFormat"` +} + +// ClonedVirtualMachineCloneInput is an input type that accepts ClonedVirtualMachineCloneArgs and ClonedVirtualMachineCloneOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineCloneInput` via: +// +// ClonedVirtualMachineCloneArgs{...} +type ClonedVirtualMachineCloneInput interface { pulumi.Input - ToVirtualMachine2CloneOutput() VirtualMachine2CloneOutput - ToVirtualMachine2CloneOutputWithContext(context.Context) VirtualMachine2CloneOutput + ToClonedVirtualMachineCloneOutput() ClonedVirtualMachineCloneOutput + ToClonedVirtualMachineCloneOutputWithContext(context.Context) ClonedVirtualMachineCloneOutput } -type VirtualMachine2CloneArgs struct { - // The ID of the VM to clone. - Id pulumi.IntInput `pulumi:"id"` - // The number of retries to perform when cloning the VM (default: 3). +type ClonedVirtualMachineCloneArgs struct { + // Clone bandwidth limit in MB/s. + BandwidthLimit pulumi.IntPtrInput `pulumi:"bandwidthLimit"` + // Perform a full clone (true) or linked clone (false). + Full pulumi.BoolPtrInput `pulumi:"full"` + // Pool to assign the cloned VM to. + PoolId pulumi.StringPtrInput `pulumi:"poolId"` + // Number of retries for clone operations. Retries pulumi.IntPtrInput `pulumi:"retries"` + // Snapshot name to clone from. + SnapshotName pulumi.StringPtrInput `pulumi:"snapshotName"` + // Source node of the VM/template. Defaults to target node if unset. + SourceNodeName pulumi.StringPtrInput `pulumi:"sourceNodeName"` + // Source VM/template ID to clone from. + SourceVmId pulumi.IntInput `pulumi:"sourceVmId"` + // Target datastore for cloned disks. + TargetDatastore pulumi.StringPtrInput `pulumi:"targetDatastore"` + // Target disk format for clone (e.g., raw, qcow2). + TargetFormat pulumi.StringPtrInput `pulumi:"targetFormat"` } -func (VirtualMachine2CloneArgs) ElementType() reflect.Type { - return reflect.TypeOf((*VirtualMachine2Clone)(nil)).Elem() +func (ClonedVirtualMachineCloneArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineClone)(nil)).Elem() } -func (i VirtualMachine2CloneArgs) ToVirtualMachine2CloneOutput() VirtualMachine2CloneOutput { - return i.ToVirtualMachine2CloneOutputWithContext(context.Background()) +func (i ClonedVirtualMachineCloneArgs) ToClonedVirtualMachineCloneOutput() ClonedVirtualMachineCloneOutput { + return i.ToClonedVirtualMachineCloneOutputWithContext(context.Background()) } -func (i VirtualMachine2CloneArgs) ToVirtualMachine2CloneOutputWithContext(ctx context.Context) VirtualMachine2CloneOutput { - return pulumi.ToOutputWithContext(ctx, i).(VirtualMachine2CloneOutput) +func (i ClonedVirtualMachineCloneArgs) ToClonedVirtualMachineCloneOutputWithContext(ctx context.Context) ClonedVirtualMachineCloneOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineCloneOutput) } -func (i VirtualMachine2CloneArgs) ToVirtualMachine2ClonePtrOutput() VirtualMachine2ClonePtrOutput { - return i.ToVirtualMachine2ClonePtrOutputWithContext(context.Background()) +func (i ClonedVirtualMachineCloneArgs) ToClonedVirtualMachineClonePtrOutput() ClonedVirtualMachineClonePtrOutput { + return i.ToClonedVirtualMachineClonePtrOutputWithContext(context.Background()) } -func (i VirtualMachine2CloneArgs) ToVirtualMachine2ClonePtrOutputWithContext(ctx context.Context) VirtualMachine2ClonePtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(VirtualMachine2CloneOutput).ToVirtualMachine2ClonePtrOutputWithContext(ctx) +func (i ClonedVirtualMachineCloneArgs) ToClonedVirtualMachineClonePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineClonePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineCloneOutput).ToClonedVirtualMachineClonePtrOutputWithContext(ctx) } -// VirtualMachine2ClonePtrInput is an input type that accepts VirtualMachine2CloneArgs, VirtualMachine2ClonePtr and VirtualMachine2ClonePtrOutput values. -// You can construct a concrete instance of `VirtualMachine2ClonePtrInput` via: +// ClonedVirtualMachineClonePtrInput is an input type that accepts ClonedVirtualMachineCloneArgs, ClonedVirtualMachineClonePtr and ClonedVirtualMachineClonePtrOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineClonePtrInput` via: // -// VirtualMachine2CloneArgs{...} +// ClonedVirtualMachineCloneArgs{...} // // or: // // nil -type VirtualMachine2ClonePtrInput interface { +type ClonedVirtualMachineClonePtrInput interface { pulumi.Input - ToVirtualMachine2ClonePtrOutput() VirtualMachine2ClonePtrOutput - ToVirtualMachine2ClonePtrOutputWithContext(context.Context) VirtualMachine2ClonePtrOutput + ToClonedVirtualMachineClonePtrOutput() ClonedVirtualMachineClonePtrOutput + ToClonedVirtualMachineClonePtrOutputWithContext(context.Context) ClonedVirtualMachineClonePtrOutput } -type virtualMachine2ClonePtrType VirtualMachine2CloneArgs +type clonedVirtualMachineClonePtrType ClonedVirtualMachineCloneArgs -func VirtualMachine2ClonePtr(v *VirtualMachine2CloneArgs) VirtualMachine2ClonePtrInput { - return (*virtualMachine2ClonePtrType)(v) +func ClonedVirtualMachineClonePtr(v *ClonedVirtualMachineCloneArgs) ClonedVirtualMachineClonePtrInput { + return (*clonedVirtualMachineClonePtrType)(v) } -func (*virtualMachine2ClonePtrType) ElementType() reflect.Type { - return reflect.TypeOf((**VirtualMachine2Clone)(nil)).Elem() +func (*clonedVirtualMachineClonePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineClone)(nil)).Elem() } -func (i *virtualMachine2ClonePtrType) ToVirtualMachine2ClonePtrOutput() VirtualMachine2ClonePtrOutput { - return i.ToVirtualMachine2ClonePtrOutputWithContext(context.Background()) +func (i *clonedVirtualMachineClonePtrType) ToClonedVirtualMachineClonePtrOutput() ClonedVirtualMachineClonePtrOutput { + return i.ToClonedVirtualMachineClonePtrOutputWithContext(context.Background()) } -func (i *virtualMachine2ClonePtrType) ToVirtualMachine2ClonePtrOutputWithContext(ctx context.Context) VirtualMachine2ClonePtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(VirtualMachine2ClonePtrOutput) +func (i *clonedVirtualMachineClonePtrType) ToClonedVirtualMachineClonePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineClonePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineClonePtrOutput) } -type VirtualMachine2CloneOutput struct{ *pulumi.OutputState } +type ClonedVirtualMachineCloneOutput struct{ *pulumi.OutputState } -func (VirtualMachine2CloneOutput) ElementType() reflect.Type { - return reflect.TypeOf((*VirtualMachine2Clone)(nil)).Elem() +func (ClonedVirtualMachineCloneOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineClone)(nil)).Elem() } -func (o VirtualMachine2CloneOutput) ToVirtualMachine2CloneOutput() VirtualMachine2CloneOutput { +func (o ClonedVirtualMachineCloneOutput) ToClonedVirtualMachineCloneOutput() ClonedVirtualMachineCloneOutput { return o } -func (o VirtualMachine2CloneOutput) ToVirtualMachine2CloneOutputWithContext(ctx context.Context) VirtualMachine2CloneOutput { +func (o ClonedVirtualMachineCloneOutput) ToClonedVirtualMachineCloneOutputWithContext(ctx context.Context) ClonedVirtualMachineCloneOutput { return o } -func (o VirtualMachine2CloneOutput) ToVirtualMachine2ClonePtrOutput() VirtualMachine2ClonePtrOutput { - return o.ToVirtualMachine2ClonePtrOutputWithContext(context.Background()) +func (o ClonedVirtualMachineCloneOutput) ToClonedVirtualMachineClonePtrOutput() ClonedVirtualMachineClonePtrOutput { + return o.ToClonedVirtualMachineClonePtrOutputWithContext(context.Background()) } -func (o VirtualMachine2CloneOutput) ToVirtualMachine2ClonePtrOutputWithContext(ctx context.Context) VirtualMachine2ClonePtrOutput { - return o.ApplyTWithContext(ctx, func(_ context.Context, v VirtualMachine2Clone) *VirtualMachine2Clone { +func (o ClonedVirtualMachineCloneOutput) ToClonedVirtualMachineClonePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineClonePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClonedVirtualMachineClone) *ClonedVirtualMachineClone { return &v - }).(VirtualMachine2ClonePtrOutput) + }).(ClonedVirtualMachineClonePtrOutput) } -// The ID of the VM to clone. -func (o VirtualMachine2CloneOutput) Id() pulumi.IntOutput { - return o.ApplyT(func(v VirtualMachine2Clone) int { return v.Id }).(pulumi.IntOutput) +// Clone bandwidth limit in MB/s. +func (o ClonedVirtualMachineCloneOutput) BandwidthLimit() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *int { return v.BandwidthLimit }).(pulumi.IntPtrOutput) } -// The number of retries to perform when cloning the VM (default: 3). -func (o VirtualMachine2CloneOutput) Retries() pulumi.IntPtrOutput { - return o.ApplyT(func(v VirtualMachine2Clone) *int { return v.Retries }).(pulumi.IntPtrOutput) +// Perform a full clone (true) or linked clone (false). +func (o ClonedVirtualMachineCloneOutput) Full() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *bool { return v.Full }).(pulumi.BoolPtrOutput) } -type VirtualMachine2ClonePtrOutput struct{ *pulumi.OutputState } +// Pool to assign the cloned VM to. +func (o ClonedVirtualMachineCloneOutput) PoolId() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *string { return v.PoolId }).(pulumi.StringPtrOutput) +} + +// Number of retries for clone operations. +func (o ClonedVirtualMachineCloneOutput) Retries() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *int { return v.Retries }).(pulumi.IntPtrOutput) +} + +// Snapshot name to clone from. +func (o ClonedVirtualMachineCloneOutput) SnapshotName() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *string { return v.SnapshotName }).(pulumi.StringPtrOutput) +} + +// Source node of the VM/template. Defaults to target node if unset. +func (o ClonedVirtualMachineCloneOutput) SourceNodeName() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *string { return v.SourceNodeName }).(pulumi.StringPtrOutput) +} + +// Source VM/template ID to clone from. +func (o ClonedVirtualMachineCloneOutput) SourceVmId() pulumi.IntOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) int { return v.SourceVmId }).(pulumi.IntOutput) +} + +// Target datastore for cloned disks. +func (o ClonedVirtualMachineCloneOutput) TargetDatastore() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *string { return v.TargetDatastore }).(pulumi.StringPtrOutput) +} + +// Target disk format for clone (e.g., raw, qcow2). +func (o ClonedVirtualMachineCloneOutput) TargetFormat() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineClone) *string { return v.TargetFormat }).(pulumi.StringPtrOutput) +} + +type ClonedVirtualMachineClonePtrOutput struct{ *pulumi.OutputState } -func (VirtualMachine2ClonePtrOutput) ElementType() reflect.Type { - return reflect.TypeOf((**VirtualMachine2Clone)(nil)).Elem() +func (ClonedVirtualMachineClonePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineClone)(nil)).Elem() } -func (o VirtualMachine2ClonePtrOutput) ToVirtualMachine2ClonePtrOutput() VirtualMachine2ClonePtrOutput { +func (o ClonedVirtualMachineClonePtrOutput) ToClonedVirtualMachineClonePtrOutput() ClonedVirtualMachineClonePtrOutput { return o } -func (o VirtualMachine2ClonePtrOutput) ToVirtualMachine2ClonePtrOutputWithContext(ctx context.Context) VirtualMachine2ClonePtrOutput { +func (o ClonedVirtualMachineClonePtrOutput) ToClonedVirtualMachineClonePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineClonePtrOutput { return o } -func (o VirtualMachine2ClonePtrOutput) Elem() VirtualMachine2CloneOutput { - return o.ApplyT(func(v *VirtualMachine2Clone) VirtualMachine2Clone { +func (o ClonedVirtualMachineClonePtrOutput) Elem() ClonedVirtualMachineCloneOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) ClonedVirtualMachineClone { if v != nil { return *v } - var ret VirtualMachine2Clone + var ret ClonedVirtualMachineClone return ret - }).(VirtualMachine2CloneOutput) + }).(ClonedVirtualMachineCloneOutput) } -// The ID of the VM to clone. -func (o VirtualMachine2ClonePtrOutput) Id() pulumi.IntPtrOutput { - return o.ApplyT(func(v *VirtualMachine2Clone) *int { +// Clone bandwidth limit in MB/s. +func (o ClonedVirtualMachineClonePtrOutput) BandwidthLimit() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *int { if v == nil { return nil } - return &v.Id + return v.BandwidthLimit }).(pulumi.IntPtrOutput) } -// The number of retries to perform when cloning the VM (default: 3). -func (o VirtualMachine2ClonePtrOutput) Retries() pulumi.IntPtrOutput { - return o.ApplyT(func(v *VirtualMachine2Clone) *int { +// Perform a full clone (true) or linked clone (false). +func (o ClonedVirtualMachineClonePtrOutput) Full() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *bool { + if v == nil { + return nil + } + return v.Full + }).(pulumi.BoolPtrOutput) +} + +// Pool to assign the cloned VM to. +func (o ClonedVirtualMachineClonePtrOutput) PoolId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *string { + if v == nil { + return nil + } + return v.PoolId + }).(pulumi.StringPtrOutput) +} + +// Number of retries for clone operations. +func (o ClonedVirtualMachineClonePtrOutput) Retries() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *int { if v == nil { return nil } @@ -266,10 +349,1790 @@ func (o VirtualMachine2ClonePtrOutput) Retries() pulumi.IntPtrOutput { }).(pulumi.IntPtrOutput) } +// Snapshot name to clone from. +func (o ClonedVirtualMachineClonePtrOutput) SnapshotName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *string { + if v == nil { + return nil + } + return v.SnapshotName + }).(pulumi.StringPtrOutput) +} + +// Source node of the VM/template. Defaults to target node if unset. +func (o ClonedVirtualMachineClonePtrOutput) SourceNodeName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *string { + if v == nil { + return nil + } + return v.SourceNodeName + }).(pulumi.StringPtrOutput) +} + +// Source VM/template ID to clone from. +func (o ClonedVirtualMachineClonePtrOutput) SourceVmId() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *int { + if v == nil { + return nil + } + return &v.SourceVmId + }).(pulumi.IntPtrOutput) +} + +// Target datastore for cloned disks. +func (o ClonedVirtualMachineClonePtrOutput) TargetDatastore() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *string { + if v == nil { + return nil + } + return v.TargetDatastore + }).(pulumi.StringPtrOutput) +} + +// Target disk format for clone (e.g., raw, qcow2). +func (o ClonedVirtualMachineClonePtrOutput) TargetFormat() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineClone) *string { + if v == nil { + return nil + } + return v.TargetFormat + }).(pulumi.StringPtrOutput) +} + +type ClonedVirtualMachineCpu struct { + // The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + Affinity *string `pulumi:"affinity"` + // The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + Architecture *string `pulumi:"architecture"` + // The number of CPU cores per socket (defaults to `1`). + Cores *int `pulumi:"cores"` + // Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + Flags []string `pulumi:"flags"` + // The number of hotplugged vCPUs (defaults to `0`). + Hotplugged *int `pulumi:"hotplugged"` + // Limit of CPU usage (defaults to `0` which means no limit). + Limit *int `pulumi:"limit"` + // Enable NUMA (defaults to `false`). + Numa *bool `pulumi:"numa"` + // The number of CPU sockets (defaults to `1`). + Sockets *int `pulumi:"sockets"` + // Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + Type *string `pulumi:"type"` + // CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + Units *int `pulumi:"units"` +} + +// ClonedVirtualMachineCpuInput is an input type that accepts ClonedVirtualMachineCpuArgs and ClonedVirtualMachineCpuOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineCpuInput` via: +// +// ClonedVirtualMachineCpuArgs{...} +type ClonedVirtualMachineCpuInput interface { + pulumi.Input + + ToClonedVirtualMachineCpuOutput() ClonedVirtualMachineCpuOutput + ToClonedVirtualMachineCpuOutputWithContext(context.Context) ClonedVirtualMachineCpuOutput +} + +type ClonedVirtualMachineCpuArgs struct { + // The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + Affinity pulumi.StringPtrInput `pulumi:"affinity"` + // The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + Architecture pulumi.StringPtrInput `pulumi:"architecture"` + // The number of CPU cores per socket (defaults to `1`). + Cores pulumi.IntPtrInput `pulumi:"cores"` + // Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + Flags pulumi.StringArrayInput `pulumi:"flags"` + // The number of hotplugged vCPUs (defaults to `0`). + Hotplugged pulumi.IntPtrInput `pulumi:"hotplugged"` + // Limit of CPU usage (defaults to `0` which means no limit). + Limit pulumi.IntPtrInput `pulumi:"limit"` + // Enable NUMA (defaults to `false`). + Numa pulumi.BoolPtrInput `pulumi:"numa"` + // The number of CPU sockets (defaults to `1`). + Sockets pulumi.IntPtrInput `pulumi:"sockets"` + // Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + Type pulumi.StringPtrInput `pulumi:"type"` + // CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + Units pulumi.IntPtrInput `pulumi:"units"` +} + +func (ClonedVirtualMachineCpuArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineCpu)(nil)).Elem() +} + +func (i ClonedVirtualMachineCpuArgs) ToClonedVirtualMachineCpuOutput() ClonedVirtualMachineCpuOutput { + return i.ToClonedVirtualMachineCpuOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineCpuArgs) ToClonedVirtualMachineCpuOutputWithContext(ctx context.Context) ClonedVirtualMachineCpuOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineCpuOutput) +} + +func (i ClonedVirtualMachineCpuArgs) ToClonedVirtualMachineCpuPtrOutput() ClonedVirtualMachineCpuPtrOutput { + return i.ToClonedVirtualMachineCpuPtrOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineCpuArgs) ToClonedVirtualMachineCpuPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineCpuPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineCpuOutput).ToClonedVirtualMachineCpuPtrOutputWithContext(ctx) +} + +// ClonedVirtualMachineCpuPtrInput is an input type that accepts ClonedVirtualMachineCpuArgs, ClonedVirtualMachineCpuPtr and ClonedVirtualMachineCpuPtrOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineCpuPtrInput` via: +// +// ClonedVirtualMachineCpuArgs{...} +// +// or: +// +// nil +type ClonedVirtualMachineCpuPtrInput interface { + pulumi.Input + + ToClonedVirtualMachineCpuPtrOutput() ClonedVirtualMachineCpuPtrOutput + ToClonedVirtualMachineCpuPtrOutputWithContext(context.Context) ClonedVirtualMachineCpuPtrOutput +} + +type clonedVirtualMachineCpuPtrType ClonedVirtualMachineCpuArgs + +func ClonedVirtualMachineCpuPtr(v *ClonedVirtualMachineCpuArgs) ClonedVirtualMachineCpuPtrInput { + return (*clonedVirtualMachineCpuPtrType)(v) +} + +func (*clonedVirtualMachineCpuPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineCpu)(nil)).Elem() +} + +func (i *clonedVirtualMachineCpuPtrType) ToClonedVirtualMachineCpuPtrOutput() ClonedVirtualMachineCpuPtrOutput { + return i.ToClonedVirtualMachineCpuPtrOutputWithContext(context.Background()) +} + +func (i *clonedVirtualMachineCpuPtrType) ToClonedVirtualMachineCpuPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineCpuPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineCpuPtrOutput) +} + +type ClonedVirtualMachineCpuOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineCpuOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineCpu)(nil)).Elem() +} + +func (o ClonedVirtualMachineCpuOutput) ToClonedVirtualMachineCpuOutput() ClonedVirtualMachineCpuOutput { + return o +} + +func (o ClonedVirtualMachineCpuOutput) ToClonedVirtualMachineCpuOutputWithContext(ctx context.Context) ClonedVirtualMachineCpuOutput { + return o +} + +func (o ClonedVirtualMachineCpuOutput) ToClonedVirtualMachineCpuPtrOutput() ClonedVirtualMachineCpuPtrOutput { + return o.ToClonedVirtualMachineCpuPtrOutputWithContext(context.Background()) +} + +func (o ClonedVirtualMachineCpuOutput) ToClonedVirtualMachineCpuPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineCpuPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClonedVirtualMachineCpu) *ClonedVirtualMachineCpu { + return &v + }).(ClonedVirtualMachineCpuPtrOutput) +} + +// The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. +func (o ClonedVirtualMachineCpuOutput) Affinity() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *string { return v.Affinity }).(pulumi.StringPtrOutput) +} + +// The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. +func (o ClonedVirtualMachineCpuOutput) Architecture() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *string { return v.Architecture }).(pulumi.StringPtrOutput) +} + +// The number of CPU cores per socket (defaults to `1`). +func (o ClonedVirtualMachineCpuOutput) Cores() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *int { return v.Cores }).(pulumi.IntPtrOutput) +} + +// Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. +func (o ClonedVirtualMachineCpuOutput) Flags() pulumi.StringArrayOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) []string { return v.Flags }).(pulumi.StringArrayOutput) +} + +// The number of hotplugged vCPUs (defaults to `0`). +func (o ClonedVirtualMachineCpuOutput) Hotplugged() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *int { return v.Hotplugged }).(pulumi.IntPtrOutput) +} + +// Limit of CPU usage (defaults to `0` which means no limit). +func (o ClonedVirtualMachineCpuOutput) Limit() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *int { return v.Limit }).(pulumi.IntPtrOutput) +} + +// Enable NUMA (defaults to `false`). +func (o ClonedVirtualMachineCpuOutput) Numa() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *bool { return v.Numa }).(pulumi.BoolPtrOutput) +} + +// The number of CPU sockets (defaults to `1`). +func (o ClonedVirtualMachineCpuOutput) Sockets() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *int { return v.Sockets }).(pulumi.IntPtrOutput) +} + +// Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. +func (o ClonedVirtualMachineCpuOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *string { return v.Type }).(pulumi.StringPtrOutput) +} + +// CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. +func (o ClonedVirtualMachineCpuOutput) Units() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineCpu) *int { return v.Units }).(pulumi.IntPtrOutput) +} + +type ClonedVirtualMachineCpuPtrOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineCpuPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineCpu)(nil)).Elem() +} + +func (o ClonedVirtualMachineCpuPtrOutput) ToClonedVirtualMachineCpuPtrOutput() ClonedVirtualMachineCpuPtrOutput { + return o +} + +func (o ClonedVirtualMachineCpuPtrOutput) ToClonedVirtualMachineCpuPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineCpuPtrOutput { + return o +} + +func (o ClonedVirtualMachineCpuPtrOutput) Elem() ClonedVirtualMachineCpuOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) ClonedVirtualMachineCpu { + if v != nil { + return *v + } + var ret ClonedVirtualMachineCpu + return ret + }).(ClonedVirtualMachineCpuOutput) +} + +// The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. +func (o ClonedVirtualMachineCpuPtrOutput) Affinity() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *string { + if v == nil { + return nil + } + return v.Affinity + }).(pulumi.StringPtrOutput) +} + +// The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. +func (o ClonedVirtualMachineCpuPtrOutput) Architecture() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *string { + if v == nil { + return nil + } + return v.Architecture + }).(pulumi.StringPtrOutput) +} + +// The number of CPU cores per socket (defaults to `1`). +func (o ClonedVirtualMachineCpuPtrOutput) Cores() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *int { + if v == nil { + return nil + } + return v.Cores + }).(pulumi.IntPtrOutput) +} + +// Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. +func (o ClonedVirtualMachineCpuPtrOutput) Flags() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) []string { + if v == nil { + return nil + } + return v.Flags + }).(pulumi.StringArrayOutput) +} + +// The number of hotplugged vCPUs (defaults to `0`). +func (o ClonedVirtualMachineCpuPtrOutput) Hotplugged() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *int { + if v == nil { + return nil + } + return v.Hotplugged + }).(pulumi.IntPtrOutput) +} + +// Limit of CPU usage (defaults to `0` which means no limit). +func (o ClonedVirtualMachineCpuPtrOutput) Limit() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *int { + if v == nil { + return nil + } + return v.Limit + }).(pulumi.IntPtrOutput) +} + +// Enable NUMA (defaults to `false`). +func (o ClonedVirtualMachineCpuPtrOutput) Numa() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *bool { + if v == nil { + return nil + } + return v.Numa + }).(pulumi.BoolPtrOutput) +} + +// The number of CPU sockets (defaults to `1`). +func (o ClonedVirtualMachineCpuPtrOutput) Sockets() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *int { + if v == nil { + return nil + } + return v.Sockets + }).(pulumi.IntPtrOutput) +} + +// Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. +func (o ClonedVirtualMachineCpuPtrOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *string { + if v == nil { + return nil + } + return v.Type + }).(pulumi.StringPtrOutput) +} + +// CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. +func (o ClonedVirtualMachineCpuPtrOutput) Units() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineCpu) *int { + if v == nil { + return nil + } + return v.Units + }).(pulumi.IntPtrOutput) +} + +type ClonedVirtualMachineDelete struct { + // Disk slots to delete (e.g., scsi2). + Disks []string `pulumi:"disks"` + // Network slots to delete (e.g., net1). + Networks []string `pulumi:"networks"` +} + +// ClonedVirtualMachineDeleteInput is an input type that accepts ClonedVirtualMachineDeleteArgs and ClonedVirtualMachineDeleteOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineDeleteInput` via: +// +// ClonedVirtualMachineDeleteArgs{...} +type ClonedVirtualMachineDeleteInput interface { + pulumi.Input + + ToClonedVirtualMachineDeleteOutput() ClonedVirtualMachineDeleteOutput + ToClonedVirtualMachineDeleteOutputWithContext(context.Context) ClonedVirtualMachineDeleteOutput +} + +type ClonedVirtualMachineDeleteArgs struct { + // Disk slots to delete (e.g., scsi2). + Disks pulumi.StringArrayInput `pulumi:"disks"` + // Network slots to delete (e.g., net1). + Networks pulumi.StringArrayInput `pulumi:"networks"` +} + +func (ClonedVirtualMachineDeleteArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineDelete)(nil)).Elem() +} + +func (i ClonedVirtualMachineDeleteArgs) ToClonedVirtualMachineDeleteOutput() ClonedVirtualMachineDeleteOutput { + return i.ToClonedVirtualMachineDeleteOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineDeleteArgs) ToClonedVirtualMachineDeleteOutputWithContext(ctx context.Context) ClonedVirtualMachineDeleteOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineDeleteOutput) +} + +func (i ClonedVirtualMachineDeleteArgs) ToClonedVirtualMachineDeletePtrOutput() ClonedVirtualMachineDeletePtrOutput { + return i.ToClonedVirtualMachineDeletePtrOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineDeleteArgs) ToClonedVirtualMachineDeletePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineDeletePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineDeleteOutput).ToClonedVirtualMachineDeletePtrOutputWithContext(ctx) +} + +// ClonedVirtualMachineDeletePtrInput is an input type that accepts ClonedVirtualMachineDeleteArgs, ClonedVirtualMachineDeletePtr and ClonedVirtualMachineDeletePtrOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineDeletePtrInput` via: +// +// ClonedVirtualMachineDeleteArgs{...} +// +// or: +// +// nil +type ClonedVirtualMachineDeletePtrInput interface { + pulumi.Input + + ToClonedVirtualMachineDeletePtrOutput() ClonedVirtualMachineDeletePtrOutput + ToClonedVirtualMachineDeletePtrOutputWithContext(context.Context) ClonedVirtualMachineDeletePtrOutput +} + +type clonedVirtualMachineDeletePtrType ClonedVirtualMachineDeleteArgs + +func ClonedVirtualMachineDeletePtr(v *ClonedVirtualMachineDeleteArgs) ClonedVirtualMachineDeletePtrInput { + return (*clonedVirtualMachineDeletePtrType)(v) +} + +func (*clonedVirtualMachineDeletePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineDelete)(nil)).Elem() +} + +func (i *clonedVirtualMachineDeletePtrType) ToClonedVirtualMachineDeletePtrOutput() ClonedVirtualMachineDeletePtrOutput { + return i.ToClonedVirtualMachineDeletePtrOutputWithContext(context.Background()) +} + +func (i *clonedVirtualMachineDeletePtrType) ToClonedVirtualMachineDeletePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineDeletePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineDeletePtrOutput) +} + +type ClonedVirtualMachineDeleteOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineDeleteOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineDelete)(nil)).Elem() +} + +func (o ClonedVirtualMachineDeleteOutput) ToClonedVirtualMachineDeleteOutput() ClonedVirtualMachineDeleteOutput { + return o +} + +func (o ClonedVirtualMachineDeleteOutput) ToClonedVirtualMachineDeleteOutputWithContext(ctx context.Context) ClonedVirtualMachineDeleteOutput { + return o +} + +func (o ClonedVirtualMachineDeleteOutput) ToClonedVirtualMachineDeletePtrOutput() ClonedVirtualMachineDeletePtrOutput { + return o.ToClonedVirtualMachineDeletePtrOutputWithContext(context.Background()) +} + +func (o ClonedVirtualMachineDeleteOutput) ToClonedVirtualMachineDeletePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineDeletePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClonedVirtualMachineDelete) *ClonedVirtualMachineDelete { + return &v + }).(ClonedVirtualMachineDeletePtrOutput) +} + +// Disk slots to delete (e.g., scsi2). +func (o ClonedVirtualMachineDeleteOutput) Disks() pulumi.StringArrayOutput { + return o.ApplyT(func(v ClonedVirtualMachineDelete) []string { return v.Disks }).(pulumi.StringArrayOutput) +} + +// Network slots to delete (e.g., net1). +func (o ClonedVirtualMachineDeleteOutput) Networks() pulumi.StringArrayOutput { + return o.ApplyT(func(v ClonedVirtualMachineDelete) []string { return v.Networks }).(pulumi.StringArrayOutput) +} + +type ClonedVirtualMachineDeletePtrOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineDeletePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineDelete)(nil)).Elem() +} + +func (o ClonedVirtualMachineDeletePtrOutput) ToClonedVirtualMachineDeletePtrOutput() ClonedVirtualMachineDeletePtrOutput { + return o +} + +func (o ClonedVirtualMachineDeletePtrOutput) ToClonedVirtualMachineDeletePtrOutputWithContext(ctx context.Context) ClonedVirtualMachineDeletePtrOutput { + return o +} + +func (o ClonedVirtualMachineDeletePtrOutput) Elem() ClonedVirtualMachineDeleteOutput { + return o.ApplyT(func(v *ClonedVirtualMachineDelete) ClonedVirtualMachineDelete { + if v != nil { + return *v + } + var ret ClonedVirtualMachineDelete + return ret + }).(ClonedVirtualMachineDeleteOutput) +} + +// Disk slots to delete (e.g., scsi2). +func (o ClonedVirtualMachineDeletePtrOutput) Disks() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ClonedVirtualMachineDelete) []string { + if v == nil { + return nil + } + return v.Disks + }).(pulumi.StringArrayOutput) +} + +// Network slots to delete (e.g., net1). +func (o ClonedVirtualMachineDeletePtrOutput) Networks() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ClonedVirtualMachineDelete) []string { + if v == nil { + return nil + } + return v.Networks + }).(pulumi.StringArrayOutput) +} + +type ClonedVirtualMachineDisk struct { + // AIO mode (io_uring, native, threads). + Aio *string `pulumi:"aio"` + // Include disk in backups. + Backup *bool `pulumi:"backup"` + // Cache mode. + Cache *string `pulumi:"cache"` + // Target datastore for new disks when file is not provided. + DatastoreId *string `pulumi:"datastoreId"` + // Discard/trim behavior. + Discard *string `pulumi:"discard"` + // Existing volume reference (e.g., local-lvm:vm-100-disk-0). + File *string `pulumi:"file"` + // Disk format (raw, qcow2, vmdk). + Format *string `pulumi:"format"` + // Import source volume/file id. + ImportFrom *string `pulumi:"importFrom"` + // Use IO thread. + Iothread *bool `pulumi:"iothread"` + // Disk media (e.g., disk, cdrom). + Media *string `pulumi:"media"` + // Consider disk for replication. + Replicate *bool `pulumi:"replicate"` + // Disk serial number. + Serial *string `pulumi:"serial"` + // Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `sizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + SizeGb *int `pulumi:"sizeGb"` + // Mark disk as SSD. + Ssd *bool `pulumi:"ssd"` +} + +// ClonedVirtualMachineDiskInput is an input type that accepts ClonedVirtualMachineDiskArgs and ClonedVirtualMachineDiskOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineDiskInput` via: +// +// ClonedVirtualMachineDiskArgs{...} +type ClonedVirtualMachineDiskInput interface { + pulumi.Input + + ToClonedVirtualMachineDiskOutput() ClonedVirtualMachineDiskOutput + ToClonedVirtualMachineDiskOutputWithContext(context.Context) ClonedVirtualMachineDiskOutput +} + +type ClonedVirtualMachineDiskArgs struct { + // AIO mode (io_uring, native, threads). + Aio pulumi.StringPtrInput `pulumi:"aio"` + // Include disk in backups. + Backup pulumi.BoolPtrInput `pulumi:"backup"` + // Cache mode. + Cache pulumi.StringPtrInput `pulumi:"cache"` + // Target datastore for new disks when file is not provided. + DatastoreId pulumi.StringPtrInput `pulumi:"datastoreId"` + // Discard/trim behavior. + Discard pulumi.StringPtrInput `pulumi:"discard"` + // Existing volume reference (e.g., local-lvm:vm-100-disk-0). + File pulumi.StringPtrInput `pulumi:"file"` + // Disk format (raw, qcow2, vmdk). + Format pulumi.StringPtrInput `pulumi:"format"` + // Import source volume/file id. + ImportFrom pulumi.StringPtrInput `pulumi:"importFrom"` + // Use IO thread. + Iothread pulumi.BoolPtrInput `pulumi:"iothread"` + // Disk media (e.g., disk, cdrom). + Media pulumi.StringPtrInput `pulumi:"media"` + // Consider disk for replication. + Replicate pulumi.BoolPtrInput `pulumi:"replicate"` + // Disk serial number. + Serial pulumi.StringPtrInput `pulumi:"serial"` + // Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `sizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + SizeGb pulumi.IntPtrInput `pulumi:"sizeGb"` + // Mark disk as SSD. + Ssd pulumi.BoolPtrInput `pulumi:"ssd"` +} + +func (ClonedVirtualMachineDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineDisk)(nil)).Elem() +} + +func (i ClonedVirtualMachineDiskArgs) ToClonedVirtualMachineDiskOutput() ClonedVirtualMachineDiskOutput { + return i.ToClonedVirtualMachineDiskOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineDiskArgs) ToClonedVirtualMachineDiskOutputWithContext(ctx context.Context) ClonedVirtualMachineDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineDiskOutput) +} + +// ClonedVirtualMachineDiskMapInput is an input type that accepts ClonedVirtualMachineDiskMap and ClonedVirtualMachineDiskMapOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineDiskMapInput` via: +// +// ClonedVirtualMachineDiskMap{ "key": ClonedVirtualMachineDiskArgs{...} } +type ClonedVirtualMachineDiskMapInput interface { + pulumi.Input + + ToClonedVirtualMachineDiskMapOutput() ClonedVirtualMachineDiskMapOutput + ToClonedVirtualMachineDiskMapOutputWithContext(context.Context) ClonedVirtualMachineDiskMapOutput +} + +type ClonedVirtualMachineDiskMap map[string]ClonedVirtualMachineDiskInput + +func (ClonedVirtualMachineDiskMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]ClonedVirtualMachineDisk)(nil)).Elem() +} + +func (i ClonedVirtualMachineDiskMap) ToClonedVirtualMachineDiskMapOutput() ClonedVirtualMachineDiskMapOutput { + return i.ToClonedVirtualMachineDiskMapOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineDiskMap) ToClonedVirtualMachineDiskMapOutputWithContext(ctx context.Context) ClonedVirtualMachineDiskMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineDiskMapOutput) +} + +type ClonedVirtualMachineDiskOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineDisk)(nil)).Elem() +} + +func (o ClonedVirtualMachineDiskOutput) ToClonedVirtualMachineDiskOutput() ClonedVirtualMachineDiskOutput { + return o +} + +func (o ClonedVirtualMachineDiskOutput) ToClonedVirtualMachineDiskOutputWithContext(ctx context.Context) ClonedVirtualMachineDiskOutput { + return o +} + +// AIO mode (io_uring, native, threads). +func (o ClonedVirtualMachineDiskOutput) Aio() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.Aio }).(pulumi.StringPtrOutput) +} + +// Include disk in backups. +func (o ClonedVirtualMachineDiskOutput) Backup() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *bool { return v.Backup }).(pulumi.BoolPtrOutput) +} + +// Cache mode. +func (o ClonedVirtualMachineDiskOutput) Cache() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.Cache }).(pulumi.StringPtrOutput) +} + +// Target datastore for new disks when file is not provided. +func (o ClonedVirtualMachineDiskOutput) DatastoreId() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.DatastoreId }).(pulumi.StringPtrOutput) +} + +// Discard/trim behavior. +func (o ClonedVirtualMachineDiskOutput) Discard() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.Discard }).(pulumi.StringPtrOutput) +} + +// Existing volume reference (e.g., local-lvm:vm-100-disk-0). +func (o ClonedVirtualMachineDiskOutput) File() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.File }).(pulumi.StringPtrOutput) +} + +// Disk format (raw, qcow2, vmdk). +func (o ClonedVirtualMachineDiskOutput) Format() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.Format }).(pulumi.StringPtrOutput) +} + +// Import source volume/file id. +func (o ClonedVirtualMachineDiskOutput) ImportFrom() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.ImportFrom }).(pulumi.StringPtrOutput) +} + +// Use IO thread. +func (o ClonedVirtualMachineDiskOutput) Iothread() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *bool { return v.Iothread }).(pulumi.BoolPtrOutput) +} + +// Disk media (e.g., disk, cdrom). +func (o ClonedVirtualMachineDiskOutput) Media() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.Media }).(pulumi.StringPtrOutput) +} + +// Consider disk for replication. +func (o ClonedVirtualMachineDiskOutput) Replicate() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *bool { return v.Replicate }).(pulumi.BoolPtrOutput) +} + +// Disk serial number. +func (o ClonedVirtualMachineDiskOutput) Serial() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *string { return v.Serial }).(pulumi.StringPtrOutput) +} + +// Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `sizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. +func (o ClonedVirtualMachineDiskOutput) SizeGb() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *int { return v.SizeGb }).(pulumi.IntPtrOutput) +} + +// Mark disk as SSD. +func (o ClonedVirtualMachineDiskOutput) Ssd() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineDisk) *bool { return v.Ssd }).(pulumi.BoolPtrOutput) +} + +type ClonedVirtualMachineDiskMapOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineDiskMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]ClonedVirtualMachineDisk)(nil)).Elem() +} + +func (o ClonedVirtualMachineDiskMapOutput) ToClonedVirtualMachineDiskMapOutput() ClonedVirtualMachineDiskMapOutput { + return o +} + +func (o ClonedVirtualMachineDiskMapOutput) ToClonedVirtualMachineDiskMapOutputWithContext(ctx context.Context) ClonedVirtualMachineDiskMapOutput { + return o +} + +func (o ClonedVirtualMachineDiskMapOutput) MapIndex(k pulumi.StringInput) ClonedVirtualMachineDiskOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) ClonedVirtualMachineDisk { + return vs[0].(map[string]ClonedVirtualMachineDisk)[vs[1].(string)] + }).(ClonedVirtualMachineDiskOutput) +} + +type ClonedVirtualMachineMemory struct { + // Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + Balloon *int `pulumi:"balloon"` + // Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + // + // **Options:** + // - `2` - Use 2 MiB hugepages + // - `1024` - Use 1 GiB hugepages + // - `any` - Use any available hugepage size + Hugepages *string `pulumi:"hugepages"` + // Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + KeepHugepages *bool `pulumi:"keepHugepages"` + // CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + Shares *int `pulumi:"shares"` + // Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + Size *int `pulumi:"size"` +} + +// ClonedVirtualMachineMemoryInput is an input type that accepts ClonedVirtualMachineMemoryArgs and ClonedVirtualMachineMemoryOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineMemoryInput` via: +// +// ClonedVirtualMachineMemoryArgs{...} +type ClonedVirtualMachineMemoryInput interface { + pulumi.Input + + ToClonedVirtualMachineMemoryOutput() ClonedVirtualMachineMemoryOutput + ToClonedVirtualMachineMemoryOutputWithContext(context.Context) ClonedVirtualMachineMemoryOutput +} + +type ClonedVirtualMachineMemoryArgs struct { + // Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + Balloon pulumi.IntPtrInput `pulumi:"balloon"` + // Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + // + // **Options:** + // - `2` - Use 2 MiB hugepages + // - `1024` - Use 1 GiB hugepages + // - `any` - Use any available hugepage size + Hugepages pulumi.StringPtrInput `pulumi:"hugepages"` + // Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + KeepHugepages pulumi.BoolPtrInput `pulumi:"keepHugepages"` + // CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + Shares pulumi.IntPtrInput `pulumi:"shares"` + // Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + Size pulumi.IntPtrInput `pulumi:"size"` +} + +func (ClonedVirtualMachineMemoryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineMemory)(nil)).Elem() +} + +func (i ClonedVirtualMachineMemoryArgs) ToClonedVirtualMachineMemoryOutput() ClonedVirtualMachineMemoryOutput { + return i.ToClonedVirtualMachineMemoryOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineMemoryArgs) ToClonedVirtualMachineMemoryOutputWithContext(ctx context.Context) ClonedVirtualMachineMemoryOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineMemoryOutput) +} + +func (i ClonedVirtualMachineMemoryArgs) ToClonedVirtualMachineMemoryPtrOutput() ClonedVirtualMachineMemoryPtrOutput { + return i.ToClonedVirtualMachineMemoryPtrOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineMemoryArgs) ToClonedVirtualMachineMemoryPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineMemoryPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineMemoryOutput).ToClonedVirtualMachineMemoryPtrOutputWithContext(ctx) +} + +// ClonedVirtualMachineMemoryPtrInput is an input type that accepts ClonedVirtualMachineMemoryArgs, ClonedVirtualMachineMemoryPtr and ClonedVirtualMachineMemoryPtrOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineMemoryPtrInput` via: +// +// ClonedVirtualMachineMemoryArgs{...} +// +// or: +// +// nil +type ClonedVirtualMachineMemoryPtrInput interface { + pulumi.Input + + ToClonedVirtualMachineMemoryPtrOutput() ClonedVirtualMachineMemoryPtrOutput + ToClonedVirtualMachineMemoryPtrOutputWithContext(context.Context) ClonedVirtualMachineMemoryPtrOutput +} + +type clonedVirtualMachineMemoryPtrType ClonedVirtualMachineMemoryArgs + +func ClonedVirtualMachineMemoryPtr(v *ClonedVirtualMachineMemoryArgs) ClonedVirtualMachineMemoryPtrInput { + return (*clonedVirtualMachineMemoryPtrType)(v) +} + +func (*clonedVirtualMachineMemoryPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineMemory)(nil)).Elem() +} + +func (i *clonedVirtualMachineMemoryPtrType) ToClonedVirtualMachineMemoryPtrOutput() ClonedVirtualMachineMemoryPtrOutput { + return i.ToClonedVirtualMachineMemoryPtrOutputWithContext(context.Background()) +} + +func (i *clonedVirtualMachineMemoryPtrType) ToClonedVirtualMachineMemoryPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineMemoryPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineMemoryPtrOutput) +} + +type ClonedVirtualMachineMemoryOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineMemoryOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineMemory)(nil)).Elem() +} + +func (o ClonedVirtualMachineMemoryOutput) ToClonedVirtualMachineMemoryOutput() ClonedVirtualMachineMemoryOutput { + return o +} + +func (o ClonedVirtualMachineMemoryOutput) ToClonedVirtualMachineMemoryOutputWithContext(ctx context.Context) ClonedVirtualMachineMemoryOutput { + return o +} + +func (o ClonedVirtualMachineMemoryOutput) ToClonedVirtualMachineMemoryPtrOutput() ClonedVirtualMachineMemoryPtrOutput { + return o.ToClonedVirtualMachineMemoryPtrOutputWithContext(context.Background()) +} + +func (o ClonedVirtualMachineMemoryOutput) ToClonedVirtualMachineMemoryPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineMemoryPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClonedVirtualMachineMemory) *ClonedVirtualMachineMemory { + return &v + }).(ClonedVirtualMachineMemoryPtrOutput) +} + +// Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). +func (o ClonedVirtualMachineMemoryOutput) Balloon() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineMemory) *int { return v.Balloon }).(pulumi.IntPtrOutput) +} + +// Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. +// +// **Options:** +// - `2` - Use 2 MiB hugepages +// - `1024` - Use 1 GiB hugepages +// - `any` - Use any available hugepage size +func (o ClonedVirtualMachineMemoryOutput) Hugepages() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineMemory) *string { return v.Hugepages }).(pulumi.StringPtrOutput) +} + +// Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). +func (o ClonedVirtualMachineMemoryOutput) KeepHugepages() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineMemory) *bool { return v.KeepHugepages }).(pulumi.BoolPtrOutput) +} + +// CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). +func (o ClonedVirtualMachineMemoryOutput) Shares() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineMemory) *int { return v.Shares }).(pulumi.IntPtrOutput) +} + +// Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). +func (o ClonedVirtualMachineMemoryOutput) Size() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineMemory) *int { return v.Size }).(pulumi.IntPtrOutput) +} + +type ClonedVirtualMachineMemoryPtrOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineMemoryPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineMemory)(nil)).Elem() +} + +func (o ClonedVirtualMachineMemoryPtrOutput) ToClonedVirtualMachineMemoryPtrOutput() ClonedVirtualMachineMemoryPtrOutput { + return o +} + +func (o ClonedVirtualMachineMemoryPtrOutput) ToClonedVirtualMachineMemoryPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineMemoryPtrOutput { + return o +} + +func (o ClonedVirtualMachineMemoryPtrOutput) Elem() ClonedVirtualMachineMemoryOutput { + return o.ApplyT(func(v *ClonedVirtualMachineMemory) ClonedVirtualMachineMemory { + if v != nil { + return *v + } + var ret ClonedVirtualMachineMemory + return ret + }).(ClonedVirtualMachineMemoryOutput) +} + +// Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). +func (o ClonedVirtualMachineMemoryPtrOutput) Balloon() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineMemory) *int { + if v == nil { + return nil + } + return v.Balloon + }).(pulumi.IntPtrOutput) +} + +// Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. +// +// **Options:** +// - `2` - Use 2 MiB hugepages +// - `1024` - Use 1 GiB hugepages +// - `any` - Use any available hugepage size +func (o ClonedVirtualMachineMemoryPtrOutput) Hugepages() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineMemory) *string { + if v == nil { + return nil + } + return v.Hugepages + }).(pulumi.StringPtrOutput) +} + +// Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). +func (o ClonedVirtualMachineMemoryPtrOutput) KeepHugepages() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineMemory) *bool { + if v == nil { + return nil + } + return v.KeepHugepages + }).(pulumi.BoolPtrOutput) +} + +// CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). +func (o ClonedVirtualMachineMemoryPtrOutput) Shares() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineMemory) *int { + if v == nil { + return nil + } + return v.Shares + }).(pulumi.IntPtrOutput) +} + +// Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). +func (o ClonedVirtualMachineMemoryPtrOutput) Size() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineMemory) *int { + if v == nil { + return nil + } + return v.Size + }).(pulumi.IntPtrOutput) +} + +type ClonedVirtualMachineNetwork struct { + // Bridge name. + Bridge *string `pulumi:"bridge"` + // Enable firewall on this interface. + Firewall *bool `pulumi:"firewall"` + // Keep link down. + LinkDown *bool `pulumi:"linkDown"` + // MAC address (computed if omitted). + MacAddress *string `pulumi:"macAddress"` + // NIC model (e.g., virtio, e1000). + Model *string `pulumi:"model"` + // Interface MTU. + Mtu *int `pulumi:"mtu"` + // Number of multiqueue NIC queues. + Queues *int `pulumi:"queues"` + // Rate limit (MB/s). + RateLimit *float64 `pulumi:"rateLimit"` + // VLAN tag. + Tag *int `pulumi:"tag"` + // Trunk VLAN IDs. + Trunks []int `pulumi:"trunks"` +} + +// ClonedVirtualMachineNetworkInput is an input type that accepts ClonedVirtualMachineNetworkArgs and ClonedVirtualMachineNetworkOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineNetworkInput` via: +// +// ClonedVirtualMachineNetworkArgs{...} +type ClonedVirtualMachineNetworkInput interface { + pulumi.Input + + ToClonedVirtualMachineNetworkOutput() ClonedVirtualMachineNetworkOutput + ToClonedVirtualMachineNetworkOutputWithContext(context.Context) ClonedVirtualMachineNetworkOutput +} + +type ClonedVirtualMachineNetworkArgs struct { + // Bridge name. + Bridge pulumi.StringPtrInput `pulumi:"bridge"` + // Enable firewall on this interface. + Firewall pulumi.BoolPtrInput `pulumi:"firewall"` + // Keep link down. + LinkDown pulumi.BoolPtrInput `pulumi:"linkDown"` + // MAC address (computed if omitted). + MacAddress pulumi.StringPtrInput `pulumi:"macAddress"` + // NIC model (e.g., virtio, e1000). + Model pulumi.StringPtrInput `pulumi:"model"` + // Interface MTU. + Mtu pulumi.IntPtrInput `pulumi:"mtu"` + // Number of multiqueue NIC queues. + Queues pulumi.IntPtrInput `pulumi:"queues"` + // Rate limit (MB/s). + RateLimit pulumi.Float64PtrInput `pulumi:"rateLimit"` + // VLAN tag. + Tag pulumi.IntPtrInput `pulumi:"tag"` + // Trunk VLAN IDs. + Trunks pulumi.IntArrayInput `pulumi:"trunks"` +} + +func (ClonedVirtualMachineNetworkArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineNetwork)(nil)).Elem() +} + +func (i ClonedVirtualMachineNetworkArgs) ToClonedVirtualMachineNetworkOutput() ClonedVirtualMachineNetworkOutput { + return i.ToClonedVirtualMachineNetworkOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineNetworkArgs) ToClonedVirtualMachineNetworkOutputWithContext(ctx context.Context) ClonedVirtualMachineNetworkOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineNetworkOutput) +} + +// ClonedVirtualMachineNetworkMapInput is an input type that accepts ClonedVirtualMachineNetworkMap and ClonedVirtualMachineNetworkMapOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineNetworkMapInput` via: +// +// ClonedVirtualMachineNetworkMap{ "key": ClonedVirtualMachineNetworkArgs{...} } +type ClonedVirtualMachineNetworkMapInput interface { + pulumi.Input + + ToClonedVirtualMachineNetworkMapOutput() ClonedVirtualMachineNetworkMapOutput + ToClonedVirtualMachineNetworkMapOutputWithContext(context.Context) ClonedVirtualMachineNetworkMapOutput +} + +type ClonedVirtualMachineNetworkMap map[string]ClonedVirtualMachineNetworkInput + +func (ClonedVirtualMachineNetworkMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]ClonedVirtualMachineNetwork)(nil)).Elem() +} + +func (i ClonedVirtualMachineNetworkMap) ToClonedVirtualMachineNetworkMapOutput() ClonedVirtualMachineNetworkMapOutput { + return i.ToClonedVirtualMachineNetworkMapOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineNetworkMap) ToClonedVirtualMachineNetworkMapOutputWithContext(ctx context.Context) ClonedVirtualMachineNetworkMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineNetworkMapOutput) +} + +type ClonedVirtualMachineNetworkOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineNetworkOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineNetwork)(nil)).Elem() +} + +func (o ClonedVirtualMachineNetworkOutput) ToClonedVirtualMachineNetworkOutput() ClonedVirtualMachineNetworkOutput { + return o +} + +func (o ClonedVirtualMachineNetworkOutput) ToClonedVirtualMachineNetworkOutputWithContext(ctx context.Context) ClonedVirtualMachineNetworkOutput { + return o +} + +// Bridge name. +func (o ClonedVirtualMachineNetworkOutput) Bridge() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *string { return v.Bridge }).(pulumi.StringPtrOutput) +} + +// Enable firewall on this interface. +func (o ClonedVirtualMachineNetworkOutput) Firewall() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *bool { return v.Firewall }).(pulumi.BoolPtrOutput) +} + +// Keep link down. +func (o ClonedVirtualMachineNetworkOutput) LinkDown() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *bool { return v.LinkDown }).(pulumi.BoolPtrOutput) +} + +// MAC address (computed if omitted). +func (o ClonedVirtualMachineNetworkOutput) MacAddress() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *string { return v.MacAddress }).(pulumi.StringPtrOutput) +} + +// NIC model (e.g., virtio, e1000). +func (o ClonedVirtualMachineNetworkOutput) Model() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *string { return v.Model }).(pulumi.StringPtrOutput) +} + +// Interface MTU. +func (o ClonedVirtualMachineNetworkOutput) Mtu() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *int { return v.Mtu }).(pulumi.IntPtrOutput) +} + +// Number of multiqueue NIC queues. +func (o ClonedVirtualMachineNetworkOutput) Queues() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *int { return v.Queues }).(pulumi.IntPtrOutput) +} + +// Rate limit (MB/s). +func (o ClonedVirtualMachineNetworkOutput) RateLimit() pulumi.Float64PtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *float64 { return v.RateLimit }).(pulumi.Float64PtrOutput) +} + +// VLAN tag. +func (o ClonedVirtualMachineNetworkOutput) Tag() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) *int { return v.Tag }).(pulumi.IntPtrOutput) +} + +// Trunk VLAN IDs. +func (o ClonedVirtualMachineNetworkOutput) Trunks() pulumi.IntArrayOutput { + return o.ApplyT(func(v ClonedVirtualMachineNetwork) []int { return v.Trunks }).(pulumi.IntArrayOutput) +} + +type ClonedVirtualMachineNetworkMapOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineNetworkMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]ClonedVirtualMachineNetwork)(nil)).Elem() +} + +func (o ClonedVirtualMachineNetworkMapOutput) ToClonedVirtualMachineNetworkMapOutput() ClonedVirtualMachineNetworkMapOutput { + return o +} + +func (o ClonedVirtualMachineNetworkMapOutput) ToClonedVirtualMachineNetworkMapOutputWithContext(ctx context.Context) ClonedVirtualMachineNetworkMapOutput { + return o +} + +func (o ClonedVirtualMachineNetworkMapOutput) MapIndex(k pulumi.StringInput) ClonedVirtualMachineNetworkOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) ClonedVirtualMachineNetwork { + return vs[0].(map[string]ClonedVirtualMachineNetwork)[vs[1].(string)] + }).(ClonedVirtualMachineNetworkOutput) +} + +type ClonedVirtualMachineRng struct { + // Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + MaxBytes *int `pulumi:"maxBytes"` + // Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + Period *int `pulumi:"period"` + // The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + Source *string `pulumi:"source"` +} + +// ClonedVirtualMachineRngInput is an input type that accepts ClonedVirtualMachineRngArgs and ClonedVirtualMachineRngOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineRngInput` via: +// +// ClonedVirtualMachineRngArgs{...} +type ClonedVirtualMachineRngInput interface { + pulumi.Input + + ToClonedVirtualMachineRngOutput() ClonedVirtualMachineRngOutput + ToClonedVirtualMachineRngOutputWithContext(context.Context) ClonedVirtualMachineRngOutput +} + +type ClonedVirtualMachineRngArgs struct { + // Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + MaxBytes pulumi.IntPtrInput `pulumi:"maxBytes"` + // Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + Period pulumi.IntPtrInput `pulumi:"period"` + // The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + Source pulumi.StringPtrInput `pulumi:"source"` +} + +func (ClonedVirtualMachineRngArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineRng)(nil)).Elem() +} + +func (i ClonedVirtualMachineRngArgs) ToClonedVirtualMachineRngOutput() ClonedVirtualMachineRngOutput { + return i.ToClonedVirtualMachineRngOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineRngArgs) ToClonedVirtualMachineRngOutputWithContext(ctx context.Context) ClonedVirtualMachineRngOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineRngOutput) +} + +func (i ClonedVirtualMachineRngArgs) ToClonedVirtualMachineRngPtrOutput() ClonedVirtualMachineRngPtrOutput { + return i.ToClonedVirtualMachineRngPtrOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineRngArgs) ToClonedVirtualMachineRngPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineRngPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineRngOutput).ToClonedVirtualMachineRngPtrOutputWithContext(ctx) +} + +// ClonedVirtualMachineRngPtrInput is an input type that accepts ClonedVirtualMachineRngArgs, ClonedVirtualMachineRngPtr and ClonedVirtualMachineRngPtrOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineRngPtrInput` via: +// +// ClonedVirtualMachineRngArgs{...} +// +// or: +// +// nil +type ClonedVirtualMachineRngPtrInput interface { + pulumi.Input + + ToClonedVirtualMachineRngPtrOutput() ClonedVirtualMachineRngPtrOutput + ToClonedVirtualMachineRngPtrOutputWithContext(context.Context) ClonedVirtualMachineRngPtrOutput +} + +type clonedVirtualMachineRngPtrType ClonedVirtualMachineRngArgs + +func ClonedVirtualMachineRngPtr(v *ClonedVirtualMachineRngArgs) ClonedVirtualMachineRngPtrInput { + return (*clonedVirtualMachineRngPtrType)(v) +} + +func (*clonedVirtualMachineRngPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineRng)(nil)).Elem() +} + +func (i *clonedVirtualMachineRngPtrType) ToClonedVirtualMachineRngPtrOutput() ClonedVirtualMachineRngPtrOutput { + return i.ToClonedVirtualMachineRngPtrOutputWithContext(context.Background()) +} + +func (i *clonedVirtualMachineRngPtrType) ToClonedVirtualMachineRngPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineRngPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineRngPtrOutput) +} + +type ClonedVirtualMachineRngOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineRngOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineRng)(nil)).Elem() +} + +func (o ClonedVirtualMachineRngOutput) ToClonedVirtualMachineRngOutput() ClonedVirtualMachineRngOutput { + return o +} + +func (o ClonedVirtualMachineRngOutput) ToClonedVirtualMachineRngOutputWithContext(ctx context.Context) ClonedVirtualMachineRngOutput { + return o +} + +func (o ClonedVirtualMachineRngOutput) ToClonedVirtualMachineRngPtrOutput() ClonedVirtualMachineRngPtrOutput { + return o.ToClonedVirtualMachineRngPtrOutputWithContext(context.Background()) +} + +func (o ClonedVirtualMachineRngOutput) ToClonedVirtualMachineRngPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineRngPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClonedVirtualMachineRng) *ClonedVirtualMachineRng { + return &v + }).(ClonedVirtualMachineRngPtrOutput) +} + +// Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). +func (o ClonedVirtualMachineRngOutput) MaxBytes() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineRng) *int { return v.MaxBytes }).(pulumi.IntPtrOutput) +} + +// Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). +func (o ClonedVirtualMachineRngOutput) Period() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineRng) *int { return v.Period }).(pulumi.IntPtrOutput) +} + +// The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. +func (o ClonedVirtualMachineRngOutput) Source() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineRng) *string { return v.Source }).(pulumi.StringPtrOutput) +} + +type ClonedVirtualMachineRngPtrOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineRngPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineRng)(nil)).Elem() +} + +func (o ClonedVirtualMachineRngPtrOutput) ToClonedVirtualMachineRngPtrOutput() ClonedVirtualMachineRngPtrOutput { + return o +} + +func (o ClonedVirtualMachineRngPtrOutput) ToClonedVirtualMachineRngPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineRngPtrOutput { + return o +} + +func (o ClonedVirtualMachineRngPtrOutput) Elem() ClonedVirtualMachineRngOutput { + return o.ApplyT(func(v *ClonedVirtualMachineRng) ClonedVirtualMachineRng { + if v != nil { + return *v + } + var ret ClonedVirtualMachineRng + return ret + }).(ClonedVirtualMachineRngOutput) +} + +// Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). +func (o ClonedVirtualMachineRngPtrOutput) MaxBytes() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineRng) *int { + if v == nil { + return nil + } + return v.MaxBytes + }).(pulumi.IntPtrOutput) +} + +// Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). +func (o ClonedVirtualMachineRngPtrOutput) Period() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineRng) *int { + if v == nil { + return nil + } + return v.Period + }).(pulumi.IntPtrOutput) +} + +// The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. +func (o ClonedVirtualMachineRngPtrOutput) Source() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineRng) *string { + if v == nil { + return nil + } + return v.Source + }).(pulumi.StringPtrOutput) +} + +type ClonedVirtualMachineTimeouts struct { + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + Create *string `pulumi:"create"` + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + Delete *string `pulumi:"delete"` + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + Read *string `pulumi:"read"` + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + Update *string `pulumi:"update"` +} + +// ClonedVirtualMachineTimeoutsInput is an input type that accepts ClonedVirtualMachineTimeoutsArgs and ClonedVirtualMachineTimeoutsOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineTimeoutsInput` via: +// +// ClonedVirtualMachineTimeoutsArgs{...} +type ClonedVirtualMachineTimeoutsInput interface { + pulumi.Input + + ToClonedVirtualMachineTimeoutsOutput() ClonedVirtualMachineTimeoutsOutput + ToClonedVirtualMachineTimeoutsOutputWithContext(context.Context) ClonedVirtualMachineTimeoutsOutput +} + +type ClonedVirtualMachineTimeoutsArgs struct { + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + Create pulumi.StringPtrInput `pulumi:"create"` + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + Delete pulumi.StringPtrInput `pulumi:"delete"` + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + Read pulumi.StringPtrInput `pulumi:"read"` + // A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + Update pulumi.StringPtrInput `pulumi:"update"` +} + +func (ClonedVirtualMachineTimeoutsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineTimeouts)(nil)).Elem() +} + +func (i ClonedVirtualMachineTimeoutsArgs) ToClonedVirtualMachineTimeoutsOutput() ClonedVirtualMachineTimeoutsOutput { + return i.ToClonedVirtualMachineTimeoutsOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineTimeoutsArgs) ToClonedVirtualMachineTimeoutsOutputWithContext(ctx context.Context) ClonedVirtualMachineTimeoutsOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineTimeoutsOutput) +} + +func (i ClonedVirtualMachineTimeoutsArgs) ToClonedVirtualMachineTimeoutsPtrOutput() ClonedVirtualMachineTimeoutsPtrOutput { + return i.ToClonedVirtualMachineTimeoutsPtrOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineTimeoutsArgs) ToClonedVirtualMachineTimeoutsPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineTimeoutsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineTimeoutsOutput).ToClonedVirtualMachineTimeoutsPtrOutputWithContext(ctx) +} + +// ClonedVirtualMachineTimeoutsPtrInput is an input type that accepts ClonedVirtualMachineTimeoutsArgs, ClonedVirtualMachineTimeoutsPtr and ClonedVirtualMachineTimeoutsPtrOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineTimeoutsPtrInput` via: +// +// ClonedVirtualMachineTimeoutsArgs{...} +// +// or: +// +// nil +type ClonedVirtualMachineTimeoutsPtrInput interface { + pulumi.Input + + ToClonedVirtualMachineTimeoutsPtrOutput() ClonedVirtualMachineTimeoutsPtrOutput + ToClonedVirtualMachineTimeoutsPtrOutputWithContext(context.Context) ClonedVirtualMachineTimeoutsPtrOutput +} + +type clonedVirtualMachineTimeoutsPtrType ClonedVirtualMachineTimeoutsArgs + +func ClonedVirtualMachineTimeoutsPtr(v *ClonedVirtualMachineTimeoutsArgs) ClonedVirtualMachineTimeoutsPtrInput { + return (*clonedVirtualMachineTimeoutsPtrType)(v) +} + +func (*clonedVirtualMachineTimeoutsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineTimeouts)(nil)).Elem() +} + +func (i *clonedVirtualMachineTimeoutsPtrType) ToClonedVirtualMachineTimeoutsPtrOutput() ClonedVirtualMachineTimeoutsPtrOutput { + return i.ToClonedVirtualMachineTimeoutsPtrOutputWithContext(context.Background()) +} + +func (i *clonedVirtualMachineTimeoutsPtrType) ToClonedVirtualMachineTimeoutsPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineTimeoutsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineTimeoutsPtrOutput) +} + +type ClonedVirtualMachineTimeoutsOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineTimeoutsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineTimeouts)(nil)).Elem() +} + +func (o ClonedVirtualMachineTimeoutsOutput) ToClonedVirtualMachineTimeoutsOutput() ClonedVirtualMachineTimeoutsOutput { + return o +} + +func (o ClonedVirtualMachineTimeoutsOutput) ToClonedVirtualMachineTimeoutsOutputWithContext(ctx context.Context) ClonedVirtualMachineTimeoutsOutput { + return o +} + +func (o ClonedVirtualMachineTimeoutsOutput) ToClonedVirtualMachineTimeoutsPtrOutput() ClonedVirtualMachineTimeoutsPtrOutput { + return o.ToClonedVirtualMachineTimeoutsPtrOutputWithContext(context.Background()) +} + +func (o ClonedVirtualMachineTimeoutsOutput) ToClonedVirtualMachineTimeoutsPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineTimeoutsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClonedVirtualMachineTimeouts) *ClonedVirtualMachineTimeouts { + return &v + }).(ClonedVirtualMachineTimeoutsPtrOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). +func (o ClonedVirtualMachineTimeoutsOutput) Create() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineTimeouts) *string { return v.Create }).(pulumi.StringPtrOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. +func (o ClonedVirtualMachineTimeoutsOutput) Delete() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineTimeouts) *string { return v.Delete }).(pulumi.StringPtrOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. +func (o ClonedVirtualMachineTimeoutsOutput) Read() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineTimeouts) *string { return v.Read }).(pulumi.StringPtrOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). +func (o ClonedVirtualMachineTimeoutsOutput) Update() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineTimeouts) *string { return v.Update }).(pulumi.StringPtrOutput) +} + +type ClonedVirtualMachineTimeoutsPtrOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineTimeoutsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineTimeouts)(nil)).Elem() +} + +func (o ClonedVirtualMachineTimeoutsPtrOutput) ToClonedVirtualMachineTimeoutsPtrOutput() ClonedVirtualMachineTimeoutsPtrOutput { + return o +} + +func (o ClonedVirtualMachineTimeoutsPtrOutput) ToClonedVirtualMachineTimeoutsPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineTimeoutsPtrOutput { + return o +} + +func (o ClonedVirtualMachineTimeoutsPtrOutput) Elem() ClonedVirtualMachineTimeoutsOutput { + return o.ApplyT(func(v *ClonedVirtualMachineTimeouts) ClonedVirtualMachineTimeouts { + if v != nil { + return *v + } + var ret ClonedVirtualMachineTimeouts + return ret + }).(ClonedVirtualMachineTimeoutsOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). +func (o ClonedVirtualMachineTimeoutsPtrOutput) Create() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineTimeouts) *string { + if v == nil { + return nil + } + return v.Create + }).(pulumi.StringPtrOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. +func (o ClonedVirtualMachineTimeoutsPtrOutput) Delete() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineTimeouts) *string { + if v == nil { + return nil + } + return v.Delete + }).(pulumi.StringPtrOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. +func (o ClonedVirtualMachineTimeoutsPtrOutput) Read() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineTimeouts) *string { + if v == nil { + return nil + } + return v.Read + }).(pulumi.StringPtrOutput) +} + +// A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). +func (o ClonedVirtualMachineTimeoutsPtrOutput) Update() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineTimeouts) *string { + if v == nil { + return nil + } + return v.Update + }).(pulumi.StringPtrOutput) +} + +type ClonedVirtualMachineVga struct { + // Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + Clipboard *string `pulumi:"clipboard"` + // The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + Memory *int `pulumi:"memory"` + // The VGA type (defaults to `std`). + Type *string `pulumi:"type"` +} + +// ClonedVirtualMachineVgaInput is an input type that accepts ClonedVirtualMachineVgaArgs and ClonedVirtualMachineVgaOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineVgaInput` via: +// +// ClonedVirtualMachineVgaArgs{...} +type ClonedVirtualMachineVgaInput interface { + pulumi.Input + + ToClonedVirtualMachineVgaOutput() ClonedVirtualMachineVgaOutput + ToClonedVirtualMachineVgaOutputWithContext(context.Context) ClonedVirtualMachineVgaOutput +} + +type ClonedVirtualMachineVgaArgs struct { + // Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + Clipboard pulumi.StringPtrInput `pulumi:"clipboard"` + // The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + Memory pulumi.IntPtrInput `pulumi:"memory"` + // The VGA type (defaults to `std`). + Type pulumi.StringPtrInput `pulumi:"type"` +} + +func (ClonedVirtualMachineVgaArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineVga)(nil)).Elem() +} + +func (i ClonedVirtualMachineVgaArgs) ToClonedVirtualMachineVgaOutput() ClonedVirtualMachineVgaOutput { + return i.ToClonedVirtualMachineVgaOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineVgaArgs) ToClonedVirtualMachineVgaOutputWithContext(ctx context.Context) ClonedVirtualMachineVgaOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineVgaOutput) +} + +func (i ClonedVirtualMachineVgaArgs) ToClonedVirtualMachineVgaPtrOutput() ClonedVirtualMachineVgaPtrOutput { + return i.ToClonedVirtualMachineVgaPtrOutputWithContext(context.Background()) +} + +func (i ClonedVirtualMachineVgaArgs) ToClonedVirtualMachineVgaPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineVgaPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineVgaOutput).ToClonedVirtualMachineVgaPtrOutputWithContext(ctx) +} + +// ClonedVirtualMachineVgaPtrInput is an input type that accepts ClonedVirtualMachineVgaArgs, ClonedVirtualMachineVgaPtr and ClonedVirtualMachineVgaPtrOutput values. +// You can construct a concrete instance of `ClonedVirtualMachineVgaPtrInput` via: +// +// ClonedVirtualMachineVgaArgs{...} +// +// or: +// +// nil +type ClonedVirtualMachineVgaPtrInput interface { + pulumi.Input + + ToClonedVirtualMachineVgaPtrOutput() ClonedVirtualMachineVgaPtrOutput + ToClonedVirtualMachineVgaPtrOutputWithContext(context.Context) ClonedVirtualMachineVgaPtrOutput +} + +type clonedVirtualMachineVgaPtrType ClonedVirtualMachineVgaArgs + +func ClonedVirtualMachineVgaPtr(v *ClonedVirtualMachineVgaArgs) ClonedVirtualMachineVgaPtrInput { + return (*clonedVirtualMachineVgaPtrType)(v) +} + +func (*clonedVirtualMachineVgaPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineVga)(nil)).Elem() +} + +func (i *clonedVirtualMachineVgaPtrType) ToClonedVirtualMachineVgaPtrOutput() ClonedVirtualMachineVgaPtrOutput { + return i.ToClonedVirtualMachineVgaPtrOutputWithContext(context.Background()) +} + +func (i *clonedVirtualMachineVgaPtrType) ToClonedVirtualMachineVgaPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineVgaPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClonedVirtualMachineVgaPtrOutput) +} + +type ClonedVirtualMachineVgaOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineVgaOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClonedVirtualMachineVga)(nil)).Elem() +} + +func (o ClonedVirtualMachineVgaOutput) ToClonedVirtualMachineVgaOutput() ClonedVirtualMachineVgaOutput { + return o +} + +func (o ClonedVirtualMachineVgaOutput) ToClonedVirtualMachineVgaOutputWithContext(ctx context.Context) ClonedVirtualMachineVgaOutput { + return o +} + +func (o ClonedVirtualMachineVgaOutput) ToClonedVirtualMachineVgaPtrOutput() ClonedVirtualMachineVgaPtrOutput { + return o.ToClonedVirtualMachineVgaPtrOutputWithContext(context.Background()) +} + +func (o ClonedVirtualMachineVgaOutput) ToClonedVirtualMachineVgaPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineVgaPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClonedVirtualMachineVga) *ClonedVirtualMachineVga { + return &v + }).(ClonedVirtualMachineVgaPtrOutput) +} + +// Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. +func (o ClonedVirtualMachineVgaOutput) Clipboard() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineVga) *string { return v.Clipboard }).(pulumi.StringPtrOutput) +} + +// The VGA memory in megabytes (4-512 MB). Has no effect with serial display. +func (o ClonedVirtualMachineVgaOutput) Memory() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineVga) *int { return v.Memory }).(pulumi.IntPtrOutput) +} + +// The VGA type (defaults to `std`). +func (o ClonedVirtualMachineVgaOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClonedVirtualMachineVga) *string { return v.Type }).(pulumi.StringPtrOutput) +} + +type ClonedVirtualMachineVgaPtrOutput struct{ *pulumi.OutputState } + +func (ClonedVirtualMachineVgaPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClonedVirtualMachineVga)(nil)).Elem() +} + +func (o ClonedVirtualMachineVgaPtrOutput) ToClonedVirtualMachineVgaPtrOutput() ClonedVirtualMachineVgaPtrOutput { + return o +} + +func (o ClonedVirtualMachineVgaPtrOutput) ToClonedVirtualMachineVgaPtrOutputWithContext(ctx context.Context) ClonedVirtualMachineVgaPtrOutput { + return o +} + +func (o ClonedVirtualMachineVgaPtrOutput) Elem() ClonedVirtualMachineVgaOutput { + return o.ApplyT(func(v *ClonedVirtualMachineVga) ClonedVirtualMachineVga { + if v != nil { + return *v + } + var ret ClonedVirtualMachineVga + return ret + }).(ClonedVirtualMachineVgaOutput) +} + +// Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. +func (o ClonedVirtualMachineVgaPtrOutput) Clipboard() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineVga) *string { + if v == nil { + return nil + } + return v.Clipboard + }).(pulumi.StringPtrOutput) +} + +// The VGA memory in megabytes (4-512 MB). Has no effect with serial display. +func (o ClonedVirtualMachineVgaPtrOutput) Memory() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineVga) *int { + if v == nil { + return nil + } + return v.Memory + }).(pulumi.IntPtrOutput) +} + +// The VGA type (defaults to `std`). +func (o ClonedVirtualMachineVgaPtrOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClonedVirtualMachineVga) *string { + if v == nil { + return nil + } + return v.Type + }).(pulumi.StringPtrOutput) +} + +type VirtualMachine2Cdrom struct { + // The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + FileId *string `pulumi:"fileId"` +} + +// VirtualMachine2CdromInput is an input type that accepts VirtualMachine2CdromArgs and VirtualMachine2CdromOutput values. +// You can construct a concrete instance of `VirtualMachine2CdromInput` via: +// +// VirtualMachine2CdromArgs{...} +type VirtualMachine2CdromInput interface { + pulumi.Input + + ToVirtualMachine2CdromOutput() VirtualMachine2CdromOutput + ToVirtualMachine2CdromOutputWithContext(context.Context) VirtualMachine2CdromOutput +} + +type VirtualMachine2CdromArgs struct { + // The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + FileId pulumi.StringPtrInput `pulumi:"fileId"` +} + +func (VirtualMachine2CdromArgs) ElementType() reflect.Type { + return reflect.TypeOf((*VirtualMachine2Cdrom)(nil)).Elem() +} + +func (i VirtualMachine2CdromArgs) ToVirtualMachine2CdromOutput() VirtualMachine2CdromOutput { + return i.ToVirtualMachine2CdromOutputWithContext(context.Background()) +} + +func (i VirtualMachine2CdromArgs) ToVirtualMachine2CdromOutputWithContext(ctx context.Context) VirtualMachine2CdromOutput { + return pulumi.ToOutputWithContext(ctx, i).(VirtualMachine2CdromOutput) +} + +// VirtualMachine2CdromMapInput is an input type that accepts VirtualMachine2CdromMap and VirtualMachine2CdromMapOutput values. +// You can construct a concrete instance of `VirtualMachine2CdromMapInput` via: +// +// VirtualMachine2CdromMap{ "key": VirtualMachine2CdromArgs{...} } +type VirtualMachine2CdromMapInput interface { + pulumi.Input + + ToVirtualMachine2CdromMapOutput() VirtualMachine2CdromMapOutput + ToVirtualMachine2CdromMapOutputWithContext(context.Context) VirtualMachine2CdromMapOutput +} + +type VirtualMachine2CdromMap map[string]VirtualMachine2CdromInput + +func (VirtualMachine2CdromMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]VirtualMachine2Cdrom)(nil)).Elem() +} + +func (i VirtualMachine2CdromMap) ToVirtualMachine2CdromMapOutput() VirtualMachine2CdromMapOutput { + return i.ToVirtualMachine2CdromMapOutputWithContext(context.Background()) +} + +func (i VirtualMachine2CdromMap) ToVirtualMachine2CdromMapOutputWithContext(ctx context.Context) VirtualMachine2CdromMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(VirtualMachine2CdromMapOutput) +} + +type VirtualMachine2CdromOutput struct{ *pulumi.OutputState } + +func (VirtualMachine2CdromOutput) ElementType() reflect.Type { + return reflect.TypeOf((*VirtualMachine2Cdrom)(nil)).Elem() +} + +func (o VirtualMachine2CdromOutput) ToVirtualMachine2CdromOutput() VirtualMachine2CdromOutput { + return o +} + +func (o VirtualMachine2CdromOutput) ToVirtualMachine2CdromOutputWithContext(ctx context.Context) VirtualMachine2CdromOutput { + return o +} + +// The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. +func (o VirtualMachine2CdromOutput) FileId() pulumi.StringPtrOutput { + return o.ApplyT(func(v VirtualMachine2Cdrom) *string { return v.FileId }).(pulumi.StringPtrOutput) +} + +type VirtualMachine2CdromMapOutput struct{ *pulumi.OutputState } + +func (VirtualMachine2CdromMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]VirtualMachine2Cdrom)(nil)).Elem() +} + +func (o VirtualMachine2CdromMapOutput) ToVirtualMachine2CdromMapOutput() VirtualMachine2CdromMapOutput { + return o +} + +func (o VirtualMachine2CdromMapOutput) ToVirtualMachine2CdromMapOutputWithContext(ctx context.Context) VirtualMachine2CdromMapOutput { + return o +} + +func (o VirtualMachine2CdromMapOutput) MapIndex(k pulumi.StringInput) VirtualMachine2CdromOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) VirtualMachine2Cdrom { + return vs[0].(map[string]VirtualMachine2Cdrom)[vs[1].(string)] + }).(VirtualMachine2CdromOutput) +} + type VirtualMachine2Cpu struct { // The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. Affinity *string `pulumi:"affinity"` - // The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + // The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. Architecture *string `pulumi:"architecture"` // The number of CPU cores per socket (defaults to `1`). Cores *int `pulumi:"cores"` @@ -303,7 +2166,7 @@ type VirtualMachine2CpuInput interface { type VirtualMachine2CpuArgs struct { // The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. Affinity pulumi.StringPtrInput `pulumi:"affinity"` - // The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + // The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. Architecture pulumi.StringPtrInput `pulumi:"architecture"` // The number of CPU cores per socket (defaults to `1`). Cores pulumi.IntPtrInput `pulumi:"cores"` @@ -405,7 +2268,7 @@ func (o VirtualMachine2CpuOutput) Affinity() pulumi.StringPtrOutput { return o.ApplyT(func(v VirtualMachine2Cpu) *string { return v.Affinity }).(pulumi.StringPtrOutput) } -// The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. +// The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. func (o VirtualMachine2CpuOutput) Architecture() pulumi.StringPtrOutput { return o.ApplyT(func(v VirtualMachine2Cpu) *string { return v.Architecture }).(pulumi.StringPtrOutput) } @@ -484,7 +2347,7 @@ func (o VirtualMachine2CpuPtrOutput) Affinity() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } -// The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. +// The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. func (o VirtualMachine2CpuPtrOutput) Architecture() pulumi.StringPtrOutput { return o.ApplyT(func(v *VirtualMachine2Cpu) *string { if v == nil { @@ -2789,11 +4652,15 @@ type VirtualMachineDisk struct { FileFormat *string `pulumi:"fileFormat"` // The file ID for a disk image when importing a disk into VM. The ID format is // `:/`, for example `local:iso/centos8.img`. Can be also taken from - // `Download.File` resource. *Deprecated*, use `importFrom` instead. + // `Download.File` resource. Prefer `importFrom` for uncompressed images. + // Use `fileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + // with `contentType = "iso"` and `decompressionAlgorithm` set. See the + // Create a VM from a Cloud Image guide for examples. FileId *string `pulumi:"fileId"` - // The file ID for a disk image to import into VM. The image must be of `import` content type. - // The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - // a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + // The file ID for a disk image to import into VM. The image must be of `import` content type + // (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + // Can be also taken from `Download.File` resource. Note: compressed images downloaded with + // `decompressionAlgorithm` cannot use `importFrom`; use `fileId` instead. ImportFrom *string `pulumi:"importFrom"` // The disk interface for Proxmox, currently `scsi`, // `sata` and `virtio` interfaces are supported. Append the disk index at @@ -2851,11 +4718,15 @@ type VirtualMachineDiskArgs struct { FileFormat pulumi.StringPtrInput `pulumi:"fileFormat"` // The file ID for a disk image when importing a disk into VM. The ID format is // `:/`, for example `local:iso/centos8.img`. Can be also taken from - // `Download.File` resource. *Deprecated*, use `importFrom` instead. + // `Download.File` resource. Prefer `importFrom` for uncompressed images. + // Use `fileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + // with `contentType = "iso"` and `decompressionAlgorithm` set. See the + // Create a VM from a Cloud Image guide for examples. FileId pulumi.StringPtrInput `pulumi:"fileId"` - // The file ID for a disk image to import into VM. The image must be of `import` content type. - // The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - // a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + // The file ID for a disk image to import into VM. The image must be of `import` content type + // (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + // Can be also taken from `Download.File` resource. Note: compressed images downloaded with + // `decompressionAlgorithm` cannot use `importFrom`; use `fileId` instead. ImportFrom pulumi.StringPtrInput `pulumi:"importFrom"` // The disk interface for Proxmox, currently `scsi`, // `sata` and `virtio` interfaces are supported. Append the disk index at @@ -2970,14 +4841,18 @@ func (o VirtualMachineDiskOutput) FileFormat() pulumi.StringPtrOutput { // The file ID for a disk image when importing a disk into VM. The ID format is // `:/`, for example `local:iso/centos8.img`. Can be also taken from -// `Download.File` resource. *Deprecated*, use `importFrom` instead. +// `Download.File` resource. Prefer `importFrom` for uncompressed images. +// Use `fileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded +// with `contentType = "iso"` and `decompressionAlgorithm` set. See the +// Create a VM from a Cloud Image guide for examples. func (o VirtualMachineDiskOutput) FileId() pulumi.StringPtrOutput { return o.ApplyT(func(v VirtualMachineDisk) *string { return v.FileId }).(pulumi.StringPtrOutput) } -// The file ID for a disk image to import into VM. The image must be of `import` content type. -// The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from -// a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. +// The file ID for a disk image to import into VM. The image must be of `import` content type +// (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. +// Can be also taken from `Download.File` resource. Note: compressed images downloaded with +// `decompressionAlgorithm` cannot use `importFrom`; use `fileId` instead. func (o VirtualMachineDiskOutput) ImportFrom() pulumi.StringPtrOutput { return o.ApplyT(func(v VirtualMachineDisk) *string { return v.ImportFrom }).(pulumi.StringPtrOutput) } @@ -7260,10 +9135,28 @@ func (o GetVirtualMachinesVmArrayOutput) Index(i pulumi.IntInput) GetVirtualMach } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineCdromInput)(nil)).Elem(), ClonedVirtualMachineCdromArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineCdromMapInput)(nil)).Elem(), ClonedVirtualMachineCdromMap{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineCloneInput)(nil)).Elem(), ClonedVirtualMachineCloneArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineClonePtrInput)(nil)).Elem(), ClonedVirtualMachineCloneArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineCpuInput)(nil)).Elem(), ClonedVirtualMachineCpuArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineCpuPtrInput)(nil)).Elem(), ClonedVirtualMachineCpuArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineDeleteInput)(nil)).Elem(), ClonedVirtualMachineDeleteArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineDeletePtrInput)(nil)).Elem(), ClonedVirtualMachineDeleteArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineDiskInput)(nil)).Elem(), ClonedVirtualMachineDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineDiskMapInput)(nil)).Elem(), ClonedVirtualMachineDiskMap{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineMemoryInput)(nil)).Elem(), ClonedVirtualMachineMemoryArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineMemoryPtrInput)(nil)).Elem(), ClonedVirtualMachineMemoryArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineNetworkInput)(nil)).Elem(), ClonedVirtualMachineNetworkArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineNetworkMapInput)(nil)).Elem(), ClonedVirtualMachineNetworkMap{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineRngInput)(nil)).Elem(), ClonedVirtualMachineRngArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineRngPtrInput)(nil)).Elem(), ClonedVirtualMachineRngArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineTimeoutsInput)(nil)).Elem(), ClonedVirtualMachineTimeoutsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineTimeoutsPtrInput)(nil)).Elem(), ClonedVirtualMachineTimeoutsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineVgaInput)(nil)).Elem(), ClonedVirtualMachineVgaArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClonedVirtualMachineVgaPtrInput)(nil)).Elem(), ClonedVirtualMachineVgaArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VirtualMachine2CdromInput)(nil)).Elem(), VirtualMachine2CdromArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VirtualMachine2CdromMapInput)(nil)).Elem(), VirtualMachine2CdromMap{}) - pulumi.RegisterInputType(reflect.TypeOf((*VirtualMachine2CloneInput)(nil)).Elem(), VirtualMachine2CloneArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*VirtualMachine2ClonePtrInput)(nil)).Elem(), VirtualMachine2CloneArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VirtualMachine2CpuInput)(nil)).Elem(), VirtualMachine2CpuArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VirtualMachine2CpuPtrInput)(nil)).Elem(), VirtualMachine2CpuArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*VirtualMachine2RngInput)(nil)).Elem(), VirtualMachine2RngArgs{}) @@ -7336,10 +9229,28 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetVirtualMachinesFilterArrayInput)(nil)).Elem(), GetVirtualMachinesFilterArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetVirtualMachinesVmInput)(nil)).Elem(), GetVirtualMachinesVmArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetVirtualMachinesVmArrayInput)(nil)).Elem(), GetVirtualMachinesVmArray{}) + pulumi.RegisterOutputType(ClonedVirtualMachineCdromOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineCdromMapOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineCloneOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineClonePtrOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineCpuOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineCpuPtrOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineDeleteOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineDeletePtrOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineDiskOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineDiskMapOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineMemoryOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineMemoryPtrOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineNetworkOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineNetworkMapOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineRngOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineRngPtrOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineTimeoutsOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineTimeoutsPtrOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineVgaOutput{}) + pulumi.RegisterOutputType(ClonedVirtualMachineVgaPtrOutput{}) pulumi.RegisterOutputType(VirtualMachine2CdromOutput{}) pulumi.RegisterOutputType(VirtualMachine2CdromMapOutput{}) - pulumi.RegisterOutputType(VirtualMachine2CloneOutput{}) - pulumi.RegisterOutputType(VirtualMachine2ClonePtrOutput{}) pulumi.RegisterOutputType(VirtualMachine2CpuOutput{}) pulumi.RegisterOutputType(VirtualMachine2CpuPtrOutput{}) pulumi.RegisterOutputType(VirtualMachine2RngOutput{}) diff --git a/sdk/go/proxmoxve/vm/virtualMachine.go b/sdk/go/proxmoxve/vm/virtualMachine.go index 2206f27e..89152076 100644 --- a/sdk/go/proxmoxve/vm/virtualMachine.go +++ b/sdk/go/proxmoxve/vm/virtualMachine.go @@ -55,6 +55,10 @@ type VirtualMachine struct { HookScriptFileId pulumi.StringPtrOutput `pulumi:"hookScriptFileId"` // A host PCI device mapping (multiple blocks supported). Hostpcis VirtualMachineHostpciArrayOutput `pulumi:"hostpcis"` + // Selectively enable hotplug features. Supported values + // are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + // or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + Hotplug pulumi.StringOutput `pulumi:"hotplug"` // The cloud-init configuration. Initialization VirtualMachineInitializationPtrOutput `pulumi:"initialization"` // The IPv4 addresses per network interface published by the @@ -156,7 +160,10 @@ type VirtualMachine struct { // Timeout for stopping a VM in seconds (defaults // to 300). TimeoutStopVm pulumi.IntPtrOutput `pulumi:"timeoutStopVm"` - // The TPM state device. + // The TPM state device. The VM must be stopped before + // adding, removing, or moving a TPM state device; the provider automatically + // handles the shutdown/start cycle. Changing `version` requires recreating the + // VM because Proxmox only supports setting the TPM version at creation time. TpmState VirtualMachineTpmStatePtrOutput `pulumi:"tpmState"` // A host USB device mapping (multiple blocks supported). Usbs VirtualMachineUsbArrayOutput `pulumi:"usbs"` @@ -234,6 +241,10 @@ type virtualMachineState struct { HookScriptFileId *string `pulumi:"hookScriptFileId"` // A host PCI device mapping (multiple blocks supported). Hostpcis []VirtualMachineHostpci `pulumi:"hostpcis"` + // Selectively enable hotplug features. Supported values + // are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + // or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + Hotplug *string `pulumi:"hotplug"` // The cloud-init configuration. Initialization *VirtualMachineInitialization `pulumi:"initialization"` // The IPv4 addresses per network interface published by the @@ -335,7 +346,10 @@ type virtualMachineState struct { // Timeout for stopping a VM in seconds (defaults // to 300). TimeoutStopVm *int `pulumi:"timeoutStopVm"` - // The TPM state device. + // The TPM state device. The VM must be stopped before + // adding, removing, or moving a TPM state device; the provider automatically + // handles the shutdown/start cycle. Changing `version` requires recreating the + // VM because Proxmox only supports setting the TPM version at creation time. TpmState *VirtualMachineTpmState `pulumi:"tpmState"` // A host USB device mapping (multiple blocks supported). Usbs []VirtualMachineUsb `pulumi:"usbs"` @@ -381,6 +395,10 @@ type VirtualMachineState struct { HookScriptFileId pulumi.StringPtrInput // A host PCI device mapping (multiple blocks supported). Hostpcis VirtualMachineHostpciArrayInput + // Selectively enable hotplug features. Supported values + // are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + // or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + Hotplug pulumi.StringPtrInput // The cloud-init configuration. Initialization VirtualMachineInitializationPtrInput // The IPv4 addresses per network interface published by the @@ -482,7 +500,10 @@ type VirtualMachineState struct { // Timeout for stopping a VM in seconds (defaults // to 300). TimeoutStopVm pulumi.IntPtrInput - // The TPM state device. + // The TPM state device. The VM must be stopped before + // adding, removing, or moving a TPM state device; the provider automatically + // handles the shutdown/start cycle. Changing `version` requires recreating the + // VM because Proxmox only supports setting the TPM version at creation time. TpmState VirtualMachineTpmStatePtrInput // A host USB device mapping (multiple blocks supported). Usbs VirtualMachineUsbArrayInput @@ -532,6 +553,10 @@ type virtualMachineArgs struct { HookScriptFileId *string `pulumi:"hookScriptFileId"` // A host PCI device mapping (multiple blocks supported). Hostpcis []VirtualMachineHostpci `pulumi:"hostpcis"` + // Selectively enable hotplug features. Supported values + // are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + // or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + Hotplug *string `pulumi:"hotplug"` // The cloud-init configuration. Initialization *VirtualMachineInitialization `pulumi:"initialization"` // The keyboard layout (defaults to `en-us`). @@ -624,7 +649,10 @@ type virtualMachineArgs struct { // Timeout for stopping a VM in seconds (defaults // to 300). TimeoutStopVm *int `pulumi:"timeoutStopVm"` - // The TPM state device. + // The TPM state device. The VM must be stopped before + // adding, removing, or moving a TPM state device; the provider automatically + // handles the shutdown/start cycle. Changing `version` requires recreating the + // VM because Proxmox only supports setting the TPM version at creation time. TpmState *VirtualMachineTpmState `pulumi:"tpmState"` // A host USB device mapping (multiple blocks supported). Usbs []VirtualMachineUsb `pulumi:"usbs"` @@ -671,6 +699,10 @@ type VirtualMachineArgs struct { HookScriptFileId pulumi.StringPtrInput // A host PCI device mapping (multiple blocks supported). Hostpcis VirtualMachineHostpciArrayInput + // Selectively enable hotplug features. Supported values + // are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + // or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + Hotplug pulumi.StringPtrInput // The cloud-init configuration. Initialization VirtualMachineInitializationPtrInput // The keyboard layout (defaults to `en-us`). @@ -763,7 +795,10 @@ type VirtualMachineArgs struct { // Timeout for stopping a VM in seconds (defaults // to 300). TimeoutStopVm pulumi.IntPtrInput - // The TPM state device. + // The TPM state device. The VM must be stopped before + // adding, removing, or moving a TPM state device; the provider automatically + // handles the shutdown/start cycle. Changing `version` requires recreating the + // VM because Proxmox only supports setting the TPM version at creation time. TpmState VirtualMachineTpmStatePtrInput // A host USB device mapping (multiple blocks supported). Usbs VirtualMachineUsbArrayInput @@ -940,6 +975,13 @@ func (o VirtualMachineOutput) Hostpcis() VirtualMachineHostpciArrayOutput { return o.ApplyT(func(v *VirtualMachine) VirtualMachineHostpciArrayOutput { return v.Hostpcis }).(VirtualMachineHostpciArrayOutput) } +// Selectively enable hotplug features. Supported values +// are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, +// or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. +func (o VirtualMachineOutput) Hotplug() pulumi.StringOutput { + return o.ApplyT(func(v *VirtualMachine) pulumi.StringOutput { return v.Hotplug }).(pulumi.StringOutput) +} + // The cloud-init configuration. func (o VirtualMachineOutput) Initialization() VirtualMachineInitializationPtrOutput { return o.ApplyT(func(v *VirtualMachine) VirtualMachineInitializationPtrOutput { return v.Initialization }).(VirtualMachineInitializationPtrOutput) @@ -1158,7 +1200,10 @@ func (o VirtualMachineOutput) TimeoutStopVm() pulumi.IntPtrOutput { return o.ApplyT(func(v *VirtualMachine) pulumi.IntPtrOutput { return v.TimeoutStopVm }).(pulumi.IntPtrOutput) } -// The TPM state device. +// The TPM state device. The VM must be stopped before +// adding, removing, or moving a TPM state device; the provider automatically +// handles the shutdown/start cycle. Changing `version` requires recreating the +// VM because Proxmox only supports setting the TPM version at creation time. func (o VirtualMachineOutput) TpmState() VirtualMachineTpmStatePtrOutput { return o.ApplyT(func(v *VirtualMachine) VirtualMachineTpmStatePtrOutput { return v.TpmState }).(VirtualMachineTpmStatePtrOutput) } diff --git a/sdk/go/proxmoxve/vm/virtualMachine2.go b/sdk/go/proxmoxve/vm/virtualMachine2.go index ee361da8..71fe9f2f 100644 --- a/sdk/go/proxmoxve/vm/virtualMachine2.go +++ b/sdk/go/proxmoxve/vm/virtualMachine2.go @@ -26,8 +26,6 @@ type VirtualMachine2 struct { // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. Cdrom VirtualMachine2CdromMapOutput `pulumi:"cdrom"` - // The cloning configuration. - Clone VirtualMachine2ClonePtrOutput `pulumi:"clone"` // The CPU configuration. Cpu VirtualMachine2CpuOutput `pulumi:"cpu"` // Set to true to delete unreferenced disks on destroy (defaults to `true`). @@ -40,7 +38,7 @@ type VirtualMachine2 struct { NodeName pulumi.StringOutput `pulumi:"nodeName"` // Set to true to purge the VM from backup configurations on destroy (defaults to `true`). PurgeOnDestroy pulumi.BoolOutput `pulumi:"purgeOnDestroy"` - // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. Rng VirtualMachine2RngOutput `pulumi:"rng"` // Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). StopOnDestroy pulumi.BoolOutput `pulumi:"stopOnDestroy"` @@ -88,8 +86,6 @@ func GetVirtualMachine2(ctx *pulumi.Context, type virtualMachine2State struct { // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. Cdrom map[string]VirtualMachine2Cdrom `pulumi:"cdrom"` - // The cloning configuration. - Clone *VirtualMachine2Clone `pulumi:"clone"` // The CPU configuration. Cpu *VirtualMachine2Cpu `pulumi:"cpu"` // Set to true to delete unreferenced disks on destroy (defaults to `true`). @@ -102,7 +98,7 @@ type virtualMachine2State struct { NodeName *string `pulumi:"nodeName"` // Set to true to purge the VM from backup configurations on destroy (defaults to `true`). PurgeOnDestroy *bool `pulumi:"purgeOnDestroy"` - // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. Rng *VirtualMachine2Rng `pulumi:"rng"` // Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). StopOnDestroy *bool `pulumi:"stopOnDestroy"` @@ -118,8 +114,6 @@ type virtualMachine2State struct { type VirtualMachine2State struct { // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. Cdrom VirtualMachine2CdromMapInput - // The cloning configuration. - Clone VirtualMachine2ClonePtrInput // The CPU configuration. Cpu VirtualMachine2CpuPtrInput // Set to true to delete unreferenced disks on destroy (defaults to `true`). @@ -132,7 +126,7 @@ type VirtualMachine2State struct { NodeName pulumi.StringPtrInput // Set to true to purge the VM from backup configurations on destroy (defaults to `true`). PurgeOnDestroy pulumi.BoolPtrInput - // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. Rng VirtualMachine2RngPtrInput // Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). StopOnDestroy pulumi.BoolPtrInput @@ -152,8 +146,6 @@ func (VirtualMachine2State) ElementType() reflect.Type { type virtualMachine2Args struct { // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. Cdrom map[string]VirtualMachine2Cdrom `pulumi:"cdrom"` - // The cloning configuration. - Clone *VirtualMachine2Clone `pulumi:"clone"` // The CPU configuration. Cpu *VirtualMachine2Cpu `pulumi:"cpu"` // Set to true to delete unreferenced disks on destroy (defaults to `true`). @@ -166,7 +158,7 @@ type virtualMachine2Args struct { NodeName string `pulumi:"nodeName"` // Set to true to purge the VM from backup configurations on destroy (defaults to `true`). PurgeOnDestroy *bool `pulumi:"purgeOnDestroy"` - // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. Rng *VirtualMachine2Rng `pulumi:"rng"` // Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). StopOnDestroy *bool `pulumi:"stopOnDestroy"` @@ -183,8 +175,6 @@ type virtualMachine2Args struct { type VirtualMachine2Args struct { // The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. Cdrom VirtualMachine2CdromMapInput - // The cloning configuration. - Clone VirtualMachine2ClonePtrInput // The CPU configuration. Cpu VirtualMachine2CpuPtrInput // Set to true to delete unreferenced disks on destroy (defaults to `true`). @@ -197,7 +187,7 @@ type VirtualMachine2Args struct { NodeName pulumi.StringInput // Set to true to purge the VM from backup configurations on destroy (defaults to `true`). PurgeOnDestroy pulumi.BoolPtrInput - // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + // Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. Rng VirtualMachine2RngPtrInput // Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). StopOnDestroy pulumi.BoolPtrInput @@ -302,11 +292,6 @@ func (o VirtualMachine2Output) Cdrom() VirtualMachine2CdromMapOutput { return o.ApplyT(func(v *VirtualMachine2) VirtualMachine2CdromMapOutput { return v.Cdrom }).(VirtualMachine2CdromMapOutput) } -// The cloning configuration. -func (o VirtualMachine2Output) Clone() VirtualMachine2ClonePtrOutput { - return o.ApplyT(func(v *VirtualMachine2) VirtualMachine2ClonePtrOutput { return v.Clone }).(VirtualMachine2ClonePtrOutput) -} - // The CPU configuration. func (o VirtualMachine2Output) Cpu() VirtualMachine2CpuOutput { return o.ApplyT(func(v *VirtualMachine2) VirtualMachine2CpuOutput { return v.Cpu }).(VirtualMachine2CpuOutput) @@ -337,7 +322,7 @@ func (o VirtualMachine2Output) PurgeOnDestroy() pulumi.BoolOutput { return o.ApplyT(func(v *VirtualMachine2) pulumi.BoolOutput { return v.PurgeOnDestroy }).(pulumi.BoolOutput) } -// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. +// Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. func (o VirtualMachine2Output) Rng() VirtualMachine2RngOutput { return o.ApplyT(func(v *VirtualMachine2) VirtualMachine2RngOutput { return v.Rng }).(VirtualMachine2RngOutput) } diff --git a/sdk/java/.gitattributes b/sdk/java/.gitattributes new file mode 100644 index 00000000..aae64e23 --- /dev/null +++ b/sdk/java/.gitattributes @@ -0,0 +1 @@ +* linguist-generated diff --git a/sdk/java/build.gradle b/sdk/java/build.gradle index fc202e73..4922573b 100644 --- a/sdk/java/build.gradle +++ b/sdk/java/build.gradle @@ -45,7 +45,7 @@ repositories { dependencies { implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.google.code.gson:gson:2.8.9") - implementation("com.pulumi:pulumi:1.17.0") + implementation("com.pulumi:pulumi:1.21.0") } task sourcesJar(type: Jar) { diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/Certificate.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/Certificate.java new file mode 100644 index 00000000..8c95b282 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/Certificate.java @@ -0,0 +1,415 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Acme; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs; +import io.muehlbachler.pulumi.proxmoxve.Acme.inputs.CertificateState; +import io.muehlbachler.pulumi.proxmoxve.Acme.outputs.CertificateDomain; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import javax.annotation.Nullable; + +/** + * Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node. + * + * ## Example Usage + * + * ### Basic ACME Certificate with HTTP-01 Challenge + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.AcmeAccount;
+ * import io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;
+ * import io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;
+ * import io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;
+ * import com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App }{{@code
+ *     public static void main(String[] args) }{{@code
+ *         Pulumi.run(App::stack);
+ *     }}{@code
+ * 
+ *     public static void stack(Context ctx) }{{@code
+ *         // First, create an ACME account
+ *         var example = new AcmeAccount("example", AcmeAccountArgs.builder()
+ *             .name("production")
+ *             .contact("admin}{@literal @}{@code example.com")
+ *             .directory("https://acme-v02.api.letsencrypt.org/directory")
+ *             .tos("https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf")
+ *             .build());
+ * 
+ *         // Order a certificate for the node
+ *         var exampleCertificate = new Certificate("exampleCertificate", CertificateArgs.builder()
+ *             .nodeName("pve")
+ *             .account(example.name())
+ *             .domains(CertificateDomainArgs.builder()
+ *                 .domain("pve.example.com")
+ *                 .build())
+ *             .build());
+ * 
+ *     }}{@code
+ * }}{@code
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ### ACME Certificate with DNS-01 Challenge + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.AcmeAccount;
+ * import io.muehlbachler.pulumi.proxmoxve.AcmeAccountArgs;
+ * import io.muehlbachler.pulumi.proxmoxve.AcmeDnsPlugin;
+ * import io.muehlbachler.pulumi.proxmoxve.AcmeDnsPluginArgs;
+ * import io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;
+ * import io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;
+ * import com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;
+ * import com.pulumi.resources.CustomResourceOptions;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App }{{@code
+ *     public static void main(String[] args) }{{@code
+ *         Pulumi.run(App::stack);
+ *     }}{@code
+ * 
+ *     public static void stack(Context ctx) }{{@code
+ *         // Create an ACME account
+ *         var example = new AcmeAccount("example", AcmeAccountArgs.builder()
+ *             .name("production")
+ *             .contact("admin}{@literal @}{@code example.com")
+ *             .directory("https://acme-v02.api.letsencrypt.org/directory")
+ *             .tos("https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf")
+ *             .build());
+ * 
+ *         // Configure a DNS plugin (Desec example)
+ *         var desec = new AcmeDnsPlugin("desec", AcmeDnsPluginArgs.builder()
+ *             .plugin("desec")
+ *             .api("desec")
+ *             .data(Map.of("DEDYN_TOKEN", dedynToken))
+ *             .build());
+ * 
+ *         // Order a certificate using the DNS plugin
+ *         var test = new Certificate("test", CertificateArgs.builder()
+ *             .nodeName("pve")
+ *             .account(example.name())
+ *             .force(false)
+ *             .domains(CertificateDomainArgs.builder()
+ *                 .domain("pve.example.dedyn.io")
+ *                 .plugin(desec.plugin())
+ *                 .build())
+ *             .build(), CustomResourceOptions.builder()
+ *                 .dependsOn(                
+ *                     example,
+ *                     desec)
+ *                 .build());
+ * 
+ *     }}{@code
+ * }}{@code
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ### Force Certificate Renewal + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Acme.Certificate;
+ * import io.muehlbachler.pulumi.proxmoxve.Acme.CertificateArgs;
+ * import com.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var exampleForce = new Certificate("exampleForce", CertificateArgs.builder()
+ *             .nodeName("pve")
+ *             .account(example.name())
+ *             .force(true)
+ *             .domains(CertificateDomainArgs.builder()
+ *                 .domain("pve.example.com")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Related Resources + * + * - <span pulumi-lang-nodejs="`proxmoxve.AcmeAccount`" pulumi-lang-dotnet="`proxmoxve.AcmeAccount`" pulumi-lang-go="`AcmeAccount`" pulumi-lang-python="`AcmeAccount`" pulumi-lang-yaml="`proxmoxve.AcmeAccount`" pulumi-lang-java="`proxmoxve.AcmeAccount`">`proxmoxve.AcmeAccount`</span> - Manages ACME accounts + * - <span pulumi-lang-nodejs="`proxmoxve.AcmeDnsPlugin`" pulumi-lang-dotnet="`proxmoxve.AcmeDnsPlugin`" pulumi-lang-go="`AcmeDnsPlugin`" pulumi-lang-python="`AcmeDnsPlugin`" pulumi-lang-yaml="`proxmoxve.AcmeDnsPlugin`" pulumi-lang-java="`proxmoxve.AcmeDnsPlugin`">`proxmoxve.AcmeDnsPlugin`</span> - Manages ACME DNS plugins for DNS-01 challenges + * - <span pulumi-lang-nodejs="`proxmoxve.Certifi`" pulumi-lang-dotnet="`proxmoxve.Certifi`" pulumi-lang-go="`Certifi`" pulumi-lang-python="`Certifi`" pulumi-lang-yaml="`proxmoxve.Certifi`" pulumi-lang-java="`proxmoxve.Certifi`">`proxmoxve.Certifi`</span> - Manages custom SSL/TLS certificates (non-ACME) + * + * ## Import + * + * ACME certificates can be imported using the node name: + * + * #!/usr/bin/env sh + * + * ACME certificates can be imported using the node name, e.g.: + * + * ```sh + * $ pulumi import proxmoxve:Acme/certificate:Certificate example pve + * ``` + * + */ +@ResourceType(type="proxmoxve:Acme/certificate:Certificate") +public class Certificate extends com.pulumi.resources.CustomResource { + /** + * The ACME account name to use for ordering the certificate. + * + */ + @Export(name="account", refs={String.class}, tree="[0]") + private Output account; + + /** + * @return The ACME account name to use for ordering the certificate. + * + */ + public Output account() { + return this.account; + } + /** + * The PEM-encoded certificate data. + * + */ + @Export(name="certificate", refs={String.class}, tree="[0]") + private Output certificate; + + /** + * @return The PEM-encoded certificate data. + * + */ + public Output certificate() { + return this.certificate; + } + /** + * The list of domains to include in the certificate. At least one domain is required. + * + */ + @Export(name="domains", refs={List.class,CertificateDomain.class}, tree="[0,1]") + private Output> domains; + + /** + * @return The list of domains to include in the certificate. At least one domain is required. + * + */ + public Output> domains() { + return this.domains; + } + /** + * The certificate fingerprint. + * + */ + @Export(name="fingerprint", refs={String.class}, tree="[0]") + private Output fingerprint; + + /** + * @return The certificate fingerprint. + * + */ + public Output fingerprint() { + return this.fingerprint; + } + /** + * Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + */ + @Export(name="force", refs={Boolean.class}, tree="[0]") + private Output force; + + /** + * @return Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + */ + public Output force() { + return this.force; + } + /** + * The certificate issuer. + * + */ + @Export(name="issuer", refs={String.class}, tree="[0]") + private Output issuer; + + /** + * @return The certificate issuer. + * + */ + public Output issuer() { + return this.issuer; + } + /** + * The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + */ + @Export(name="nodeName", refs={String.class}, tree="[0]") + private Output nodeName; + + /** + * @return The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + */ + public Output nodeName() { + return this.nodeName; + } + /** + * The certificate expiration timestamp. + * + */ + @Export(name="notAfter", refs={String.class}, tree="[0]") + private Output notAfter; + + /** + * @return The certificate expiration timestamp. + * + */ + public Output notAfter() { + return this.notAfter; + } + /** + * The certificate start timestamp. + * + */ + @Export(name="notBefore", refs={String.class}, tree="[0]") + private Output notBefore; + + /** + * @return The certificate start timestamp. + * + */ + public Output notBefore() { + return this.notBefore; + } + /** + * The certificate subject. + * + */ + @Export(name="subject", refs={String.class}, tree="[0]") + private Output subject; + + /** + * @return The certificate subject. + * + */ + public Output subject() { + return this.subject; + } + /** + * The certificate subject alternative names (SANs). + * + */ + @Export(name="subjectAlternativeNames", refs={List.class,String.class}, tree="[0,1]") + private Output> subjectAlternativeNames; + + /** + * @return The certificate subject alternative names (SANs). + * + */ + public Output> subjectAlternativeNames() { + return this.subjectAlternativeNames; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Certificate(java.lang.String name) { + this(name, CertificateArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Certificate(java.lang.String name, CertificateArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Certificate(java.lang.String name, CertificateArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Acme/certificate:Certificate", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Certificate(java.lang.String name, Output id, @Nullable CertificateState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Acme/certificate:Certificate", name, state, makeResourceOptions(options, id), false); + } + + private static CertificateArgs makeArgs(CertificateArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? CertificateArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Certificate get(java.lang.String name, Output id, @Nullable CertificateState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Certificate(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/CertificateArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/CertificateArgs.java new file mode 100644 index 00000000..ddcdd93d --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/CertificateArgs.java @@ -0,0 +1,217 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Acme; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import io.muehlbachler.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CertificateArgs extends com.pulumi.resources.ResourceArgs { + + public static final CertificateArgs Empty = new CertificateArgs(); + + /** + * The ACME account name to use for ordering the certificate. + * + */ + @Import(name="account", required=true) + private Output account; + + /** + * @return The ACME account name to use for ordering the certificate. + * + */ + public Output account() { + return this.account; + } + + /** + * The list of domains to include in the certificate. At least one domain is required. + * + */ + @Import(name="domains", required=true) + private Output> domains; + + /** + * @return The list of domains to include in the certificate. At least one domain is required. + * + */ + public Output> domains() { + return this.domains; + } + + /** + * Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + */ + @Import(name="force") + private @Nullable Output force; + + /** + * @return Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + */ + public Optional> force() { + return Optional.ofNullable(this.force); + } + + /** + * The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + */ + @Import(name="nodeName", required=true) + private Output nodeName; + + /** + * @return The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + */ + public Output nodeName() { + return this.nodeName; + } + + private CertificateArgs() {} + + private CertificateArgs(CertificateArgs $) { + this.account = $.account; + this.domains = $.domains; + this.force = $.force; + this.nodeName = $.nodeName; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CertificateArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CertificateArgs $; + + public Builder() { + $ = new CertificateArgs(); + } + + public Builder(CertificateArgs defaults) { + $ = new CertificateArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param account The ACME account name to use for ordering the certificate. + * + * @return builder + * + */ + public Builder account(Output account) { + $.account = account; + return this; + } + + /** + * @param account The ACME account name to use for ordering the certificate. + * + * @return builder + * + */ + public Builder account(String account) { + return account(Output.of(account)); + } + + /** + * @param domains The list of domains to include in the certificate. At least one domain is required. + * + * @return builder + * + */ + public Builder domains(Output> domains) { + $.domains = domains; + return this; + } + + /** + * @param domains The list of domains to include in the certificate. At least one domain is required. + * + * @return builder + * + */ + public Builder domains(List domains) { + return domains(Output.of(domains)); + } + + /** + * @param domains The list of domains to include in the certificate. At least one domain is required. + * + * @return builder + * + */ + public Builder domains(CertificateDomainArgs... domains) { + return domains(List.of(domains)); + } + + /** + * @param force Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + * @return builder + * + */ + public Builder force(@Nullable Output force) { + $.force = force; + return this; + } + + /** + * @param force Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + * @return builder + * + */ + public Builder force(Boolean force) { + return force(Output.of(force)); + } + + /** + * @param nodeName The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + * @return builder + * + */ + public Builder nodeName(Output nodeName) { + $.nodeName = nodeName; + return this; + } + + /** + * @param nodeName The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + * @return builder + * + */ + public Builder nodeName(String nodeName) { + return nodeName(Output.of(nodeName)); + } + + public CertificateArgs build() { + if ($.account == null) { + throw new MissingRequiredPropertyException("CertificateArgs", "account"); + } + if ($.domains == null) { + throw new MissingRequiredPropertyException("CertificateArgs", "domains"); + } + if ($.nodeName == null) { + throw new MissingRequiredPropertyException("CertificateArgs", "nodeName"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/inputs/CertificateDomainArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/inputs/CertificateDomainArgs.java new file mode 100644 index 00000000..49edf39a --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/inputs/CertificateDomainArgs.java @@ -0,0 +1,161 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Acme.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CertificateDomainArgs extends com.pulumi.resources.ResourceArgs { + + public static final CertificateDomainArgs Empty = new CertificateDomainArgs(); + + /** + * An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + * + */ + @Import(name="alias") + private @Nullable Output alias; + + /** + * @return An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + * + */ + public Optional> alias() { + return Optional.ofNullable(this.alias); + } + + /** + * The domain name to include in the certificate. + * + */ + @Import(name="domain", required=true) + private Output domain; + + /** + * @return The domain name to include in the certificate. + * + */ + public Output domain() { + return this.domain; + } + + /** + * The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + * + */ + @Import(name="plugin") + private @Nullable Output plugin; + + /** + * @return The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + * + */ + public Optional> plugin() { + return Optional.ofNullable(this.plugin); + } + + private CertificateDomainArgs() {} + + private CertificateDomainArgs(CertificateDomainArgs $) { + this.alias = $.alias; + this.domain = $.domain; + this.plugin = $.plugin; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CertificateDomainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CertificateDomainArgs $; + + public Builder() { + $ = new CertificateDomainArgs(); + } + + public Builder(CertificateDomainArgs defaults) { + $ = new CertificateDomainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param alias An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + * + * @return builder + * + */ + public Builder alias(@Nullable Output alias) { + $.alias = alias; + return this; + } + + /** + * @param alias An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + * + * @return builder + * + */ + public Builder alias(String alias) { + return alias(Output.of(alias)); + } + + /** + * @param domain The domain name to include in the certificate. + * + * @return builder + * + */ + public Builder domain(Output domain) { + $.domain = domain; + return this; + } + + /** + * @param domain The domain name to include in the certificate. + * + * @return builder + * + */ + public Builder domain(String domain) { + return domain(Output.of(domain)); + } + + /** + * @param plugin The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + * + * @return builder + * + */ + public Builder plugin(@Nullable Output plugin) { + $.plugin = plugin; + return this; + } + + /** + * @param plugin The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + * + * @return builder + * + */ + public Builder plugin(String plugin) { + return plugin(Output.of(plugin)); + } + + public CertificateDomainArgs build() { + if ($.domain == null) { + throw new MissingRequiredPropertyException("CertificateDomainArgs", "domain"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/inputs/CertificateState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/inputs/CertificateState.java new file mode 100644 index 00000000..290511b1 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/inputs/CertificateState.java @@ -0,0 +1,476 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Acme.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import io.muehlbachler.pulumi.proxmoxve.Acme.inputs.CertificateDomainArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CertificateState extends com.pulumi.resources.ResourceArgs { + + public static final CertificateState Empty = new CertificateState(); + + /** + * The ACME account name to use for ordering the certificate. + * + */ + @Import(name="account") + private @Nullable Output account; + + /** + * @return The ACME account name to use for ordering the certificate. + * + */ + public Optional> account() { + return Optional.ofNullable(this.account); + } + + /** + * The PEM-encoded certificate data. + * + */ + @Import(name="certificate") + private @Nullable Output certificate; + + /** + * @return The PEM-encoded certificate data. + * + */ + public Optional> certificate() { + return Optional.ofNullable(this.certificate); + } + + /** + * The list of domains to include in the certificate. At least one domain is required. + * + */ + @Import(name="domains") + private @Nullable Output> domains; + + /** + * @return The list of domains to include in the certificate. At least one domain is required. + * + */ + public Optional>> domains() { + return Optional.ofNullable(this.domains); + } + + /** + * The certificate fingerprint. + * + */ + @Import(name="fingerprint") + private @Nullable Output fingerprint; + + /** + * @return The certificate fingerprint. + * + */ + public Optional> fingerprint() { + return Optional.ofNullable(this.fingerprint); + } + + /** + * Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + */ + @Import(name="force") + private @Nullable Output force; + + /** + * @return Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + */ + public Optional> force() { + return Optional.ofNullable(this.force); + } + + /** + * The certificate issuer. + * + */ + @Import(name="issuer") + private @Nullable Output issuer; + + /** + * @return The certificate issuer. + * + */ + public Optional> issuer() { + return Optional.ofNullable(this.issuer); + } + + /** + * The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + */ + @Import(name="nodeName") + private @Nullable Output nodeName; + + /** + * @return The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + */ + public Optional> nodeName() { + return Optional.ofNullable(this.nodeName); + } + + /** + * The certificate expiration timestamp. + * + */ + @Import(name="notAfter") + private @Nullable Output notAfter; + + /** + * @return The certificate expiration timestamp. + * + */ + public Optional> notAfter() { + return Optional.ofNullable(this.notAfter); + } + + /** + * The certificate start timestamp. + * + */ + @Import(name="notBefore") + private @Nullable Output notBefore; + + /** + * @return The certificate start timestamp. + * + */ + public Optional> notBefore() { + return Optional.ofNullable(this.notBefore); + } + + /** + * The certificate subject. + * + */ + @Import(name="subject") + private @Nullable Output subject; + + /** + * @return The certificate subject. + * + */ + public Optional> subject() { + return Optional.ofNullable(this.subject); + } + + /** + * The certificate subject alternative names (SANs). + * + */ + @Import(name="subjectAlternativeNames") + private @Nullable Output> subjectAlternativeNames; + + /** + * @return The certificate subject alternative names (SANs). + * + */ + public Optional>> subjectAlternativeNames() { + return Optional.ofNullable(this.subjectAlternativeNames); + } + + private CertificateState() {} + + private CertificateState(CertificateState $) { + this.account = $.account; + this.certificate = $.certificate; + this.domains = $.domains; + this.fingerprint = $.fingerprint; + this.force = $.force; + this.issuer = $.issuer; + this.nodeName = $.nodeName; + this.notAfter = $.notAfter; + this.notBefore = $.notBefore; + this.subject = $.subject; + this.subjectAlternativeNames = $.subjectAlternativeNames; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CertificateState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CertificateState $; + + public Builder() { + $ = new CertificateState(); + } + + public Builder(CertificateState defaults) { + $ = new CertificateState(Objects.requireNonNull(defaults)); + } + + /** + * @param account The ACME account name to use for ordering the certificate. + * + * @return builder + * + */ + public Builder account(@Nullable Output account) { + $.account = account; + return this; + } + + /** + * @param account The ACME account name to use for ordering the certificate. + * + * @return builder + * + */ + public Builder account(String account) { + return account(Output.of(account)); + } + + /** + * @param certificate The PEM-encoded certificate data. + * + * @return builder + * + */ + public Builder certificate(@Nullable Output certificate) { + $.certificate = certificate; + return this; + } + + /** + * @param certificate The PEM-encoded certificate data. + * + * @return builder + * + */ + public Builder certificate(String certificate) { + return certificate(Output.of(certificate)); + } + + /** + * @param domains The list of domains to include in the certificate. At least one domain is required. + * + * @return builder + * + */ + public Builder domains(@Nullable Output> domains) { + $.domains = domains; + return this; + } + + /** + * @param domains The list of domains to include in the certificate. At least one domain is required. + * + * @return builder + * + */ + public Builder domains(List domains) { + return domains(Output.of(domains)); + } + + /** + * @param domains The list of domains to include in the certificate. At least one domain is required. + * + * @return builder + * + */ + public Builder domains(CertificateDomainArgs... domains) { + return domains(List.of(domains)); + } + + /** + * @param fingerprint The certificate fingerprint. + * + * @return builder + * + */ + public Builder fingerprint(@Nullable Output fingerprint) { + $.fingerprint = fingerprint; + return this; + } + + /** + * @param fingerprint The certificate fingerprint. + * + * @return builder + * + */ + public Builder fingerprint(String fingerprint) { + return fingerprint(Output.of(fingerprint)); + } + + /** + * @param force Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + * @return builder + * + */ + public Builder force(@Nullable Output force) { + $.force = force; + return this; + } + + /** + * @param force Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + * + * @return builder + * + */ + public Builder force(Boolean force) { + return force(Output.of(force)); + } + + /** + * @param issuer The certificate issuer. + * + * @return builder + * + */ + public Builder issuer(@Nullable Output issuer) { + $.issuer = issuer; + return this; + } + + /** + * @param issuer The certificate issuer. + * + * @return builder + * + */ + public Builder issuer(String issuer) { + return issuer(Output.of(issuer)); + } + + /** + * @param nodeName The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + * @return builder + * + */ + public Builder nodeName(@Nullable Output nodeName) { + $.nodeName = nodeName; + return this; + } + + /** + * @param nodeName The name of the Proxmox VE node for which to order/manage the ACME certificate. + * + * @return builder + * + */ + public Builder nodeName(String nodeName) { + return nodeName(Output.of(nodeName)); + } + + /** + * @param notAfter The certificate expiration timestamp. + * + * @return builder + * + */ + public Builder notAfter(@Nullable Output notAfter) { + $.notAfter = notAfter; + return this; + } + + /** + * @param notAfter The certificate expiration timestamp. + * + * @return builder + * + */ + public Builder notAfter(String notAfter) { + return notAfter(Output.of(notAfter)); + } + + /** + * @param notBefore The certificate start timestamp. + * + * @return builder + * + */ + public Builder notBefore(@Nullable Output notBefore) { + $.notBefore = notBefore; + return this; + } + + /** + * @param notBefore The certificate start timestamp. + * + * @return builder + * + */ + public Builder notBefore(String notBefore) { + return notBefore(Output.of(notBefore)); + } + + /** + * @param subject The certificate subject. + * + * @return builder + * + */ + public Builder subject(@Nullable Output subject) { + $.subject = subject; + return this; + } + + /** + * @param subject The certificate subject. + * + * @return builder + * + */ + public Builder subject(String subject) { + return subject(Output.of(subject)); + } + + /** + * @param subjectAlternativeNames The certificate subject alternative names (SANs). + * + * @return builder + * + */ + public Builder subjectAlternativeNames(@Nullable Output> subjectAlternativeNames) { + $.subjectAlternativeNames = subjectAlternativeNames; + return this; + } + + /** + * @param subjectAlternativeNames The certificate subject alternative names (SANs). + * + * @return builder + * + */ + public Builder subjectAlternativeNames(List subjectAlternativeNames) { + return subjectAlternativeNames(Output.of(subjectAlternativeNames)); + } + + /** + * @param subjectAlternativeNames The certificate subject alternative names (SANs). + * + * @return builder + * + */ + public Builder subjectAlternativeNames(String... subjectAlternativeNames) { + return subjectAlternativeNames(List.of(subjectAlternativeNames)); + } + + public CertificateState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/outputs/CertificateDomain.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/outputs/CertificateDomain.java new file mode 100644 index 00000000..6bd508cd --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Acme/outputs/CertificateDomain.java @@ -0,0 +1,102 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Acme.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class CertificateDomain { + /** + * @return An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + * + */ + private @Nullable String alias; + /** + * @return The domain name to include in the certificate. + * + */ + private String domain; + /** + * @return The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + * + */ + private @Nullable String plugin; + + private CertificateDomain() {} + /** + * @return An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + * + */ + public Optional alias() { + return Optional.ofNullable(this.alias); + } + /** + * @return The domain name to include in the certificate. + * + */ + public String domain() { + return this.domain; + } + /** + * @return The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + * + */ + public Optional plugin() { + return Optional.ofNullable(this.plugin); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(CertificateDomain defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String alias; + private String domain; + private @Nullable String plugin; + public Builder() {} + public Builder(CertificateDomain defaults) { + Objects.requireNonNull(defaults); + this.alias = defaults.alias; + this.domain = defaults.domain; + this.plugin = defaults.plugin; + } + + @CustomType.Setter + public Builder alias(@Nullable String alias) { + + this.alias = alias; + return this; + } + @CustomType.Setter + public Builder domain(String domain) { + if (domain == null) { + throw new MissingRequiredPropertyException("CertificateDomain", "domain"); + } + this.domain = domain; + return this; + } + @CustomType.Setter + public Builder plugin(@Nullable String plugin) { + + this.plugin = plugin; + return this; + } + public CertificateDomain build() { + final var _resultValue = new CertificateDomain(); + _resultValue.alias = alias; + _resultValue.domain = domain; + _resultValue.plugin = plugin; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/Repository.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/Repository.java index 0876a569..c5742ec2 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/Repository.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/Repository.java @@ -104,14 +104,14 @@ public Output filePath() { return this.filePath; } /** - * The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * */ @Export(name="handle", refs={String.class}, tree="[0]") private Output handle; /** - * @return The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * @return The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * */ public Output handle() { diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/RepositoryArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/RepositoryArgs.java index 9d75e04b..5a115a06 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/RepositoryArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/RepositoryArgs.java @@ -15,14 +15,14 @@ public final class RepositoryArgs extends com.pulumi.resources.ResourceArgs { public static final RepositoryArgs Empty = new RepositoryArgs(); /** - * The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * */ @Import(name="handle", required=true) private Output handle; /** - * @return The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * @return The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * */ public Output handle() { @@ -70,7 +70,7 @@ public Builder(RepositoryArgs defaults) { } /** - * @param handle The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * @param handle The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * * @return builder * @@ -81,7 +81,7 @@ public Builder handle(Output handle) { } /** - * @param handle The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * @param handle The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/inputs/RepositoryState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/inputs/RepositoryState.java index c58c9721..fff35f59 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/inputs/RepositoryState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Apt_standard/inputs/RepositoryState.java @@ -47,14 +47,14 @@ public Optional> filePath() { } /** - * The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * */ @Import(name="handle") private @Nullable Output handle; /** - * @return The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * @return The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * */ public Optional> handle() { @@ -194,7 +194,7 @@ public Builder filePath(String filePath) { } /** - * @param handle The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * @param handle The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * * @return builder * @@ -205,7 +205,7 @@ public Builder handle(@Nullable Output handle) { } /** - * @param handle The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. + * @param handle The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | <span pulumi-lang-nodejs="`enterprise`" pulumi-lang-dotnet="`Enterprise`" pulumi-lang-go="`enterprise`" pulumi-lang-python="`enterprise`" pulumi-lang-yaml="`enterprise`" pulumi-lang-java="`enterprise`">`enterprise`</span> | `no-subscription` | <span pulumi-lang-nodejs="`test`" pulumi-lang-dotnet="`Test`" pulumi-lang-go="`test`" pulumi-lang-python="`test`" pulumi-lang-yaml="`test`" pulumi-lang-java="`test`">`test`</span>. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/Firewall.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/Firewall.java new file mode 100644 index 00000000..056d5052 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/Firewall.java @@ -0,0 +1,306 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Node; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Node.FirewallArgs; +import io.muehlbachler.pulumi.proxmoxve.Node.inputs.FirewallState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import javax.annotation.Nullable; + +/** + * Manages Proxmox VE Node Firewall options. + * + * > This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options). + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Node.Firewall;
+ * import io.muehlbachler.pulumi.proxmoxve.Node.FirewallArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var node_pve1 = new Firewall("node-pve1", FirewallArgs.builder()
+ *             .nodeName("pve1")
+ *             .enabled(false)
+ *             .build());
+ * 
+ *         var pve2 = new Firewall("pve2", FirewallArgs.builder()
+ *             .nodeName("pve2")
+ *             .enabled(true)
+ *             .logLevelIn("alert")
+ *             .logLevelOut("alert")
+ *             .logLevelForward("alert")
+ *             .ndp(true)
+ *             .nftables(true)
+ *             .nosmurfs(true)
+ *             .smurfLogLevel("alert")
+ *             .tcpFlagsLogLevel("alert")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * ```sh + * $ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1 + * ``` + * + */ +@ResourceType(type="proxmoxve:Node/firewall:Firewall") +public class Firewall extends com.pulumi.resources.CustomResource { + /** + * Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Export(name="enabled", refs={Boolean.class}, tree="[0]") + private Output enabled; + + /** + * @return Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Output enabled() { + return this.enabled; + } + /** + * Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Export(name="logLevelForward", refs={String.class}, tree="[0]") + private Output logLevelForward; + + /** + * @return Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Output logLevelForward() { + return this.logLevelForward; + } + /** + * Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Export(name="logLevelIn", refs={String.class}, tree="[0]") + private Output logLevelIn; + + /** + * @return Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Output logLevelIn() { + return this.logLevelIn; + } + /** + * Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Export(name="logLevelOut", refs={String.class}, tree="[0]") + private Output logLevelOut; + + /** + * @return Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Output logLevelOut() { + return this.logLevelOut; + } + /** + * Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Export(name="ndp", refs={Boolean.class}, tree="[0]") + private Output ndp; + + /** + * @return Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Output ndp() { + return this.ndp; + } + /** + * Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + */ + @Export(name="nfConntrackMax", refs={Integer.class}, tree="[0]") + private Output nfConntrackMax; + + /** + * @return Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + */ + public Output nfConntrackMax() { + return this.nfConntrackMax; + } + /** + * Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + */ + @Export(name="nfConntrackTcpTimeoutEstablished", refs={Integer.class}, tree="[0]") + private Output nfConntrackTcpTimeoutEstablished; + + /** + * @return Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + */ + public Output nfConntrackTcpTimeoutEstablished() { + return this.nfConntrackTcpTimeoutEstablished; + } + /** + * Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + @Export(name="nftables", refs={Boolean.class}, tree="[0]") + private Output nftables; + + /** + * @return Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + public Output nftables() { + return this.nftables; + } + /** + * The cluster node name. + * + */ + @Export(name="nodeName", refs={String.class}, tree="[0]") + private Output nodeName; + + /** + * @return The cluster node name. + * + */ + public Output nodeName() { + return this.nodeName; + } + /** + * Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Export(name="nosmurfs", refs={Boolean.class}, tree="[0]") + private Output nosmurfs; + + /** + * @return Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Output nosmurfs() { + return this.nosmurfs; + } + /** + * Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Export(name="smurfLogLevel", refs={String.class}, tree="[0]") + private Output smurfLogLevel; + + /** + * @return Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Output smurfLogLevel() { + return this.smurfLogLevel; + } + /** + * Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Export(name="tcpFlagsLogLevel", refs={String.class}, tree="[0]") + private Output tcpFlagsLogLevel; + + /** + * @return Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Output tcpFlagsLogLevel() { + return this.tcpFlagsLogLevel; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Firewall(java.lang.String name) { + this(name, FirewallArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Firewall(java.lang.String name, FirewallArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Firewall(java.lang.String name, FirewallArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Node/firewall:Firewall", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Firewall(java.lang.String name, Output id, @Nullable FirewallState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Node/firewall:Firewall", name, state, makeResourceOptions(options, id), false); + } + + private static FirewallArgs makeArgs(FirewallArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? FirewallArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Firewall get(java.lang.String name, Output id, @Nullable FirewallState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Firewall(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/FirewallArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/FirewallArgs.java new file mode 100644 index 00000000..dc3370e1 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/FirewallArgs.java @@ -0,0 +1,496 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Node; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class FirewallArgs extends com.pulumi.resources.ResourceArgs { + + public static final FirewallArgs Empty = new FirewallArgs(); + + /** + * Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Import(name="enabled") + private @Nullable Output enabled; + + /** + * @return Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Optional> enabled() { + return Optional.ofNullable(this.enabled); + } + + /** + * Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="logLevelForward") + private @Nullable Output logLevelForward; + + /** + * @return Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> logLevelForward() { + return Optional.ofNullable(this.logLevelForward); + } + + /** + * Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="logLevelIn") + private @Nullable Output logLevelIn; + + /** + * @return Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> logLevelIn() { + return Optional.ofNullable(this.logLevelIn); + } + + /** + * Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="logLevelOut") + private @Nullable Output logLevelOut; + + /** + * @return Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> logLevelOut() { + return Optional.ofNullable(this.logLevelOut); + } + + /** + * Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Import(name="ndp") + private @Nullable Output ndp; + + /** + * @return Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Optional> ndp() { + return Optional.ofNullable(this.ndp); + } + + /** + * Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + */ + @Import(name="nfConntrackMax") + private @Nullable Output nfConntrackMax; + + /** + * @return Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + */ + public Optional> nfConntrackMax() { + return Optional.ofNullable(this.nfConntrackMax); + } + + /** + * Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + */ + @Import(name="nfConntrackTcpTimeoutEstablished") + private @Nullable Output nfConntrackTcpTimeoutEstablished; + + /** + * @return Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + */ + public Optional> nfConntrackTcpTimeoutEstablished() { + return Optional.ofNullable(this.nfConntrackTcpTimeoutEstablished); + } + + /** + * Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + @Import(name="nftables") + private @Nullable Output nftables; + + /** + * @return Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + public Optional> nftables() { + return Optional.ofNullable(this.nftables); + } + + /** + * The cluster node name. + * + */ + @Import(name="nodeName", required=true) + private Output nodeName; + + /** + * @return The cluster node name. + * + */ + public Output nodeName() { + return this.nodeName; + } + + /** + * Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Import(name="nosmurfs") + private @Nullable Output nosmurfs; + + /** + * @return Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Optional> nosmurfs() { + return Optional.ofNullable(this.nosmurfs); + } + + /** + * Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="smurfLogLevel") + private @Nullable Output smurfLogLevel; + + /** + * @return Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> smurfLogLevel() { + return Optional.ofNullable(this.smurfLogLevel); + } + + /** + * Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="tcpFlagsLogLevel") + private @Nullable Output tcpFlagsLogLevel; + + /** + * @return Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> tcpFlagsLogLevel() { + return Optional.ofNullable(this.tcpFlagsLogLevel); + } + + private FirewallArgs() {} + + private FirewallArgs(FirewallArgs $) { + this.enabled = $.enabled; + this.logLevelForward = $.logLevelForward; + this.logLevelIn = $.logLevelIn; + this.logLevelOut = $.logLevelOut; + this.ndp = $.ndp; + this.nfConntrackMax = $.nfConntrackMax; + this.nfConntrackTcpTimeoutEstablished = $.nfConntrackTcpTimeoutEstablished; + this.nftables = $.nftables; + this.nodeName = $.nodeName; + this.nosmurfs = $.nosmurfs; + this.smurfLogLevel = $.smurfLogLevel; + this.tcpFlagsLogLevel = $.tcpFlagsLogLevel; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(FirewallArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private FirewallArgs $; + + public Builder() { + $ = new FirewallArgs(); + } + + public Builder(FirewallArgs defaults) { + $ = new FirewallArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param enabled Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder enabled(@Nullable Output enabled) { + $.enabled = enabled; + return this; + } + + /** + * @param enabled Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder enabled(Boolean enabled) { + return enabled(Output.of(enabled)); + } + + /** + * @param logLevelForward Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelForward(@Nullable Output logLevelForward) { + $.logLevelForward = logLevelForward; + return this; + } + + /** + * @param logLevelForward Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelForward(String logLevelForward) { + return logLevelForward(Output.of(logLevelForward)); + } + + /** + * @param logLevelIn Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelIn(@Nullable Output logLevelIn) { + $.logLevelIn = logLevelIn; + return this; + } + + /** + * @param logLevelIn Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelIn(String logLevelIn) { + return logLevelIn(Output.of(logLevelIn)); + } + + /** + * @param logLevelOut Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelOut(@Nullable Output logLevelOut) { + $.logLevelOut = logLevelOut; + return this; + } + + /** + * @param logLevelOut Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelOut(String logLevelOut) { + return logLevelOut(Output.of(logLevelOut)); + } + + /** + * @param ndp Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder ndp(@Nullable Output ndp) { + $.ndp = ndp; + return this; + } + + /** + * @param ndp Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder ndp(Boolean ndp) { + return ndp(Output.of(ndp)); + } + + /** + * @param nfConntrackMax Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + * @return builder + * + */ + public Builder nfConntrackMax(@Nullable Output nfConntrackMax) { + $.nfConntrackMax = nfConntrackMax; + return this; + } + + /** + * @param nfConntrackMax Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + * @return builder + * + */ + public Builder nfConntrackMax(Integer nfConntrackMax) { + return nfConntrackMax(Output.of(nfConntrackMax)); + } + + /** + * @param nfConntrackTcpTimeoutEstablished Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + * @return builder + * + */ + public Builder nfConntrackTcpTimeoutEstablished(@Nullable Output nfConntrackTcpTimeoutEstablished) { + $.nfConntrackTcpTimeoutEstablished = nfConntrackTcpTimeoutEstablished; + return this; + } + + /** + * @param nfConntrackTcpTimeoutEstablished Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + * @return builder + * + */ + public Builder nfConntrackTcpTimeoutEstablished(Integer nfConntrackTcpTimeoutEstablished) { + return nfConntrackTcpTimeoutEstablished(Output.of(nfConntrackTcpTimeoutEstablished)); + } + + /** + * @param nftables Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder nftables(@Nullable Output nftables) { + $.nftables = nftables; + return this; + } + + /** + * @param nftables Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder nftables(Boolean nftables) { + return nftables(Output.of(nftables)); + } + + /** + * @param nodeName The cluster node name. + * + * @return builder + * + */ + public Builder nodeName(Output nodeName) { + $.nodeName = nodeName; + return this; + } + + /** + * @param nodeName The cluster node name. + * + * @return builder + * + */ + public Builder nodeName(String nodeName) { + return nodeName(Output.of(nodeName)); + } + + /** + * @param nosmurfs Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder nosmurfs(@Nullable Output nosmurfs) { + $.nosmurfs = nosmurfs; + return this; + } + + /** + * @param nosmurfs Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder nosmurfs(Boolean nosmurfs) { + return nosmurfs(Output.of(nosmurfs)); + } + + /** + * @param smurfLogLevel Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder smurfLogLevel(@Nullable Output smurfLogLevel) { + $.smurfLogLevel = smurfLogLevel; + return this; + } + + /** + * @param smurfLogLevel Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder smurfLogLevel(String smurfLogLevel) { + return smurfLogLevel(Output.of(smurfLogLevel)); + } + + /** + * @param tcpFlagsLogLevel Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder tcpFlagsLogLevel(@Nullable Output tcpFlagsLogLevel) { + $.tcpFlagsLogLevel = tcpFlagsLogLevel; + return this; + } + + /** + * @param tcpFlagsLogLevel Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder tcpFlagsLogLevel(String tcpFlagsLogLevel) { + return tcpFlagsLogLevel(Output.of(tcpFlagsLogLevel)); + } + + public FirewallArgs build() { + if ($.nodeName == null) { + throw new MissingRequiredPropertyException("FirewallArgs", "nodeName"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/inputs/FirewallState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/inputs/FirewallState.java new file mode 100644 index 00000000..8f1f4779 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Node/inputs/FirewallState.java @@ -0,0 +1,492 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Node.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class FirewallState extends com.pulumi.resources.ResourceArgs { + + public static final FirewallState Empty = new FirewallState(); + + /** + * Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Import(name="enabled") + private @Nullable Output enabled; + + /** + * @return Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Optional> enabled() { + return Optional.ofNullable(this.enabled); + } + + /** + * Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="logLevelForward") + private @Nullable Output logLevelForward; + + /** + * @return Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> logLevelForward() { + return Optional.ofNullable(this.logLevelForward); + } + + /** + * Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="logLevelIn") + private @Nullable Output logLevelIn; + + /** + * @return Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> logLevelIn() { + return Optional.ofNullable(this.logLevelIn); + } + + /** + * Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="logLevelOut") + private @Nullable Output logLevelOut; + + /** + * @return Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> logLevelOut() { + return Optional.ofNullable(this.logLevelOut); + } + + /** + * Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Import(name="ndp") + private @Nullable Output ndp; + + /** + * @return Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Optional> ndp() { + return Optional.ofNullable(this.ndp); + } + + /** + * Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + */ + @Import(name="nfConntrackMax") + private @Nullable Output nfConntrackMax; + + /** + * @return Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + */ + public Optional> nfConntrackMax() { + return Optional.ofNullable(this.nfConntrackMax); + } + + /** + * Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + */ + @Import(name="nfConntrackTcpTimeoutEstablished") + private @Nullable Output nfConntrackTcpTimeoutEstablished; + + /** + * @return Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + */ + public Optional> nfConntrackTcpTimeoutEstablished() { + return Optional.ofNullable(this.nfConntrackTcpTimeoutEstablished); + } + + /** + * Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + @Import(name="nftables") + private @Nullable Output nftables; + + /** + * @return Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + public Optional> nftables() { + return Optional.ofNullable(this.nftables); + } + + /** + * The cluster node name. + * + */ + @Import(name="nodeName") + private @Nullable Output nodeName; + + /** + * @return The cluster node name. + * + */ + public Optional> nodeName() { + return Optional.ofNullable(this.nodeName); + } + + /** + * Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + @Import(name="nosmurfs") + private @Nullable Output nosmurfs; + + /** + * @return Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + */ + public Optional> nosmurfs() { + return Optional.ofNullable(this.nosmurfs); + } + + /** + * Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="smurfLogLevel") + private @Nullable Output smurfLogLevel; + + /** + * @return Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> smurfLogLevel() { + return Optional.ofNullable(this.smurfLogLevel); + } + + /** + * Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + @Import(name="tcpFlagsLogLevel") + private @Nullable Output tcpFlagsLogLevel; + + /** + * @return Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + */ + public Optional> tcpFlagsLogLevel() { + return Optional.ofNullable(this.tcpFlagsLogLevel); + } + + private FirewallState() {} + + private FirewallState(FirewallState $) { + this.enabled = $.enabled; + this.logLevelForward = $.logLevelForward; + this.logLevelIn = $.logLevelIn; + this.logLevelOut = $.logLevelOut; + this.ndp = $.ndp; + this.nfConntrackMax = $.nfConntrackMax; + this.nfConntrackTcpTimeoutEstablished = $.nfConntrackTcpTimeoutEstablished; + this.nftables = $.nftables; + this.nodeName = $.nodeName; + this.nosmurfs = $.nosmurfs; + this.smurfLogLevel = $.smurfLogLevel; + this.tcpFlagsLogLevel = $.tcpFlagsLogLevel; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(FirewallState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private FirewallState $; + + public Builder() { + $ = new FirewallState(); + } + + public Builder(FirewallState defaults) { + $ = new FirewallState(Objects.requireNonNull(defaults)); + } + + /** + * @param enabled Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder enabled(@Nullable Output enabled) { + $.enabled = enabled; + return this; + } + + /** + * @param enabled Enable host firewall rules (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder enabled(Boolean enabled) { + return enabled(Output.of(enabled)); + } + + /** + * @param logLevelForward Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelForward(@Nullable Output logLevelForward) { + $.logLevelForward = logLevelForward; + return this; + } + + /** + * @param logLevelForward Log level for forwarded traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelForward(String logLevelForward) { + return logLevelForward(Output.of(logLevelForward)); + } + + /** + * @param logLevelIn Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelIn(@Nullable Output logLevelIn) { + $.logLevelIn = logLevelIn; + return this; + } + + /** + * @param logLevelIn Log level for incoming traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelIn(String logLevelIn) { + return logLevelIn(Output.of(logLevelIn)); + } + + /** + * @param logLevelOut Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelOut(@Nullable Output logLevelOut) { + $.logLevelOut = logLevelOut; + return this; + } + + /** + * @param logLevelOut Log level for outgoing traffic. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder logLevelOut(String logLevelOut) { + return logLevelOut(Output.of(logLevelOut)); + } + + /** + * @param ndp Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder ndp(@Nullable Output ndp) { + $.ndp = ndp; + return this; + } + + /** + * @param ndp Enable NDP - Neighbor Discovery Protocol (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder ndp(Boolean ndp) { + return ndp(Output.of(ndp)); + } + + /** + * @param nfConntrackMax Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + * @return builder + * + */ + public Builder nfConntrackMax(@Nullable Output nfConntrackMax) { + $.nfConntrackMax = nfConntrackMax; + return this; + } + + /** + * @param nfConntrackMax Maximum number of tracked connections (defaults to <span pulumi-lang-nodejs="`262144`" pulumi-lang-dotnet="`262144`" pulumi-lang-go="`262144`" pulumi-lang-python="`262144`" pulumi-lang-yaml="`262144`" pulumi-lang-java="`262144`">`262144`</span>). Minimum value is <span pulumi-lang-nodejs="`32768`" pulumi-lang-dotnet="`32768`" pulumi-lang-go="`32768`" pulumi-lang-python="`32768`" pulumi-lang-yaml="`32768`" pulumi-lang-java="`32768`">`32768`</span>. + * + * @return builder + * + */ + public Builder nfConntrackMax(Integer nfConntrackMax) { + return nfConntrackMax(Output.of(nfConntrackMax)); + } + + /** + * @param nfConntrackTcpTimeoutEstablished Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + * @return builder + * + */ + public Builder nfConntrackTcpTimeoutEstablished(@Nullable Output nfConntrackTcpTimeoutEstablished) { + $.nfConntrackTcpTimeoutEstablished = nfConntrackTcpTimeoutEstablished; + return this; + } + + /** + * @param nfConntrackTcpTimeoutEstablished Conntrack established timeout in seconds (defaults to <span pulumi-lang-nodejs="`432000`" pulumi-lang-dotnet="`432000`" pulumi-lang-go="`432000`" pulumi-lang-python="`432000`" pulumi-lang-yaml="`432000`" pulumi-lang-java="`432000`">`432000`</span> - 5 days). Minimum value is <span pulumi-lang-nodejs="`7875`" pulumi-lang-dotnet="`7875`" pulumi-lang-go="`7875`" pulumi-lang-python="`7875`" pulumi-lang-yaml="`7875`" pulumi-lang-java="`7875`">`7875`</span>. + * + * @return builder + * + */ + public Builder nfConntrackTcpTimeoutEstablished(Integer nfConntrackTcpTimeoutEstablished) { + return nfConntrackTcpTimeoutEstablished(Output.of(nfConntrackTcpTimeoutEstablished)); + } + + /** + * @param nftables Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder nftables(@Nullable Output nftables) { + $.nftables = nftables; + return this; + } + + /** + * @param nftables Enable nftables based firewall (tech preview, defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder nftables(Boolean nftables) { + return nftables(Output.of(nftables)); + } + + /** + * @param nodeName The cluster node name. + * + * @return builder + * + */ + public Builder nodeName(@Nullable Output nodeName) { + $.nodeName = nodeName; + return this; + } + + /** + * @param nodeName The cluster node name. + * + * @return builder + * + */ + public Builder nodeName(String nodeName) { + return nodeName(Output.of(nodeName)); + } + + /** + * @param nosmurfs Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder nosmurfs(@Nullable Output nosmurfs) { + $.nosmurfs = nosmurfs; + return this; + } + + /** + * @param nosmurfs Enable SMURFS filter (defaults to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>). + * + * @return builder + * + */ + public Builder nosmurfs(Boolean nosmurfs) { + return nosmurfs(Output.of(nosmurfs)); + } + + /** + * @param smurfLogLevel Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder smurfLogLevel(@Nullable Output smurfLogLevel) { + $.smurfLogLevel = smurfLogLevel; + return this; + } + + /** + * @param smurfLogLevel Log level for SMURFS filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder smurfLogLevel(String smurfLogLevel) { + return smurfLogLevel(Output.of(smurfLogLevel)); + } + + /** + * @param tcpFlagsLogLevel Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder tcpFlagsLogLevel(@Nullable Output tcpFlagsLogLevel) { + $.tcpFlagsLogLevel = tcpFlagsLogLevel; + return this; + } + + /** + * @param tcpFlagsLogLevel Log level for illegal tcp flags filter. Must be one of: <span pulumi-lang-nodejs="`emerg`" pulumi-lang-dotnet="`Emerg`" pulumi-lang-go="`emerg`" pulumi-lang-python="`emerg`" pulumi-lang-yaml="`emerg`" pulumi-lang-java="`emerg`">`emerg`</span>, <span pulumi-lang-nodejs="`alert`" pulumi-lang-dotnet="`Alert`" pulumi-lang-go="`alert`" pulumi-lang-python="`alert`" pulumi-lang-yaml="`alert`" pulumi-lang-java="`alert`">`alert`</span>, <span pulumi-lang-nodejs="`crit`" pulumi-lang-dotnet="`Crit`" pulumi-lang-go="`crit`" pulumi-lang-python="`crit`" pulumi-lang-yaml="`crit`" pulumi-lang-java="`crit`">`crit`</span>, <span pulumi-lang-nodejs="`err`" pulumi-lang-dotnet="`Err`" pulumi-lang-go="`err`" pulumi-lang-python="`err`" pulumi-lang-yaml="`err`" pulumi-lang-java="`err`">`err`</span>, <span pulumi-lang-nodejs="`warning`" pulumi-lang-dotnet="`Warning`" pulumi-lang-go="`warning`" pulumi-lang-python="`warning`" pulumi-lang-yaml="`warning`" pulumi-lang-java="`warning`">`warning`</span>, <span pulumi-lang-nodejs="`notice`" pulumi-lang-dotnet="`Notice`" pulumi-lang-go="`notice`" pulumi-lang-python="`notice`" pulumi-lang-yaml="`notice`" pulumi-lang-java="`notice`">`notice`</span>, <span pulumi-lang-nodejs="`info`" pulumi-lang-dotnet="`Info`" pulumi-lang-go="`info`" pulumi-lang-python="`info`" pulumi-lang-yaml="`info`" pulumi-lang-java="`info`">`info`</span>, <span pulumi-lang-nodejs="`debug`" pulumi-lang-dotnet="`Debug`" pulumi-lang-go="`debug`" pulumi-lang-python="`debug`" pulumi-lang-yaml="`debug`" pulumi-lang-java="`debug`">`debug`</span>, <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span> (defaults to <span pulumi-lang-nodejs="`nolog`" pulumi-lang-dotnet="`Nolog`" pulumi-lang-go="`nolog`" pulumi-lang-python="`nolog`" pulumi-lang-yaml="`nolog`" pulumi-lang-java="`nolog`">`nolog`</span>). + * + * @return builder + * + */ + public Builder tcpFlagsLogLevel(String tcpFlagsLogLevel) { + return tcpFlagsLogLevel(Output.of(tcpFlagsLogLevel)); + } + + public FirewallState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/Ldap.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/Ldap.java new file mode 100644 index 00000000..04590781 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/Ldap.java @@ -0,0 +1,464 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Realm; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Realm.LdapArgs; +import io.muehlbachler.pulumi.proxmoxve.Realm.inputs.LdapState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Import + * + * #!/usr/bin/env sh + * + * LDAP realms can be imported using the realm identifier, e.g.: + * + * ```sh + * $ pulumi import proxmoxve:Realm/ldap:Ldap example example.com + * ``` + * + * -> When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform. + * + */ +@ResourceType(type="proxmoxve:Realm/ldap:Ldap") +public class Ldap extends com.pulumi.resources.CustomResource { + /** + * LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + */ + @Export(name="baseDn", refs={String.class}, tree="[0]") + private Output baseDn; + + /** + * @return LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + */ + public Output baseDn() { + return this.baseDn; + } + /** + * LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + */ + @Export(name="bindDn", refs={String.class}, tree="[0]") + private Output bindDn; + + /** + * @return LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + */ + public Output> bindDn() { + return Codegen.optional(this.bindDn); + } + /** + * Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + */ + @Export(name="bindPassword", refs={String.class}, tree="[0]") + private Output bindPassword; + + /** + * @return Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + */ + public Output> bindPassword() { + return Codegen.optional(this.bindPassword); + } + /** + * Path to CA certificate file for SSL verification. + * + */ + @Export(name="caPath", refs={String.class}, tree="[0]") + private Output caPath; + + /** + * @return Path to CA certificate file for SSL verification. + * + */ + public Output> caPath() { + return Codegen.optional(this.caPath); + } + /** + * Enable case-sensitive username matching. + * + */ + @Export(name="caseSensitive", refs={Boolean.class}, tree="[0]") + private Output caseSensitive; + + /** + * @return Enable case-sensitive username matching. + * + */ + public Output caseSensitive() { + return this.caseSensitive; + } + /** + * Path to client certificate key. + * + */ + @Export(name="certKeyPath", refs={String.class}, tree="[0]") + private Output certKeyPath; + + /** + * @return Path to client certificate key. + * + */ + public Output> certKeyPath() { + return Codegen.optional(this.certKeyPath); + } + /** + * Path to client certificate for SSL authentication. + * + */ + @Export(name="certPath", refs={String.class}, tree="[0]") + private Output certPath; + + /** + * @return Path to client certificate for SSL authentication. + * + */ + public Output> certPath() { + return Codegen.optional(this.certPath); + } + /** + * Description of the realm. + * + */ + @Export(name="comment", refs={String.class}, tree="[0]") + private Output comment; + + /** + * @return Description of the realm. + * + */ + public Output> comment() { + return Codegen.optional(this.comment); + } + /** + * Use this realm as the default for login. + * + */ + @Export(name="default", refs={Boolean.class}, tree="[0]") + private Output default_; + + /** + * @return Use this realm as the default for login. + * + */ + public Output default_() { + return this.default_; + } + /** + * LDAP filter for user searches. + * + */ + @Export(name="filter", refs={String.class}, tree="[0]") + private Output filter; + + /** + * @return LDAP filter for user searches. + * + */ + public Output> filter() { + return Codegen.optional(this.filter); + } + /** + * LDAP objectClasses for groups (comma-separated). + * + */ + @Export(name="groupClasses", refs={String.class}, tree="[0]") + private Output groupClasses; + + /** + * @return LDAP objectClasses for groups (comma-separated). + * + */ + public Output> groupClasses() { + return Codegen.optional(this.groupClasses); + } + /** + * LDAP base DN for group searches. + * + */ + @Export(name="groupDn", refs={String.class}, tree="[0]") + private Output groupDn; + + /** + * @return LDAP base DN for group searches. + * + */ + public Output> groupDn() { + return Codegen.optional(this.groupDn); + } + /** + * LDAP filter for group searches. + * + */ + @Export(name="groupFilter", refs={String.class}, tree="[0]") + private Output groupFilter; + + /** + * @return LDAP filter for group searches. + * + */ + public Output> groupFilter() { + return Codegen.optional(this.groupFilter); + } + /** + * LDAP attribute representing the group name. + * + */ + @Export(name="groupNameAttr", refs={String.class}, tree="[0]") + private Output groupNameAttr; + + /** + * @return LDAP attribute representing the group name. + * + */ + public Output> groupNameAttr() { + return Codegen.optional(this.groupNameAttr); + } + /** + * LDAP connection mode (ldap, ldaps, ldap+starttls). + * + */ + @Export(name="mode", refs={String.class}, tree="[0]") + private Output mode; + + /** + * @return LDAP connection mode (ldap, ldaps, ldap+starttls). + * + */ + public Output> mode() { + return Codegen.optional(this.mode); + } + /** + * LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + */ + @Export(name="port", refs={Integer.class}, tree="[0]") + private Output port; + + /** + * @return LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + */ + public Output> port() { + return Codegen.optional(this.port); + } + /** + * Realm identifier (e.g., 'example.com'). + * + */ + @Export(name="realm", refs={String.class}, tree="[0]") + private Output realm; + + /** + * @return Realm identifier (e.g., 'example.com'). + * + */ + public Output realm() { + return this.realm; + } + /** + * Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + @Export(name="secure", refs={Boolean.class}, tree="[0]") + private Output secure; + + /** + * @return Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + */ + public Output secure() { + return this.secure; + } + /** + * Primary LDAP server hostname or IP address. + * + */ + @Export(name="server1", refs={String.class}, tree="[0]") + private Output server1; + + /** + * @return Primary LDAP server hostname or IP address. + * + */ + public Output server1() { + return this.server1; + } + /** + * Fallback LDAP server hostname or IP address. + * + */ + @Export(name="server2", refs={String.class}, tree="[0]") + private Output server2; + + /** + * @return Fallback LDAP server hostname or IP address. + * + */ + public Output> server2() { + return Codegen.optional(this.server2); + } + /** + * SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + */ + @Export(name="sslVersion", refs={String.class}, tree="[0]") + private Output sslVersion; + + /** + * @return SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + */ + public Output> sslVersion() { + return Codegen.optional(this.sslVersion); + } + /** + * Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + */ + @Export(name="syncAttributes", refs={String.class}, tree="[0]") + private Output syncAttributes; + + /** + * @return Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + */ + public Output> syncAttributes() { + return Codegen.optional(this.syncAttributes); + } + /** + * Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + */ + @Export(name="syncDefaultsOptions", refs={String.class}, tree="[0]") + private Output syncDefaultsOptions; + + /** + * @return Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + */ + public Output> syncDefaultsOptions() { + return Codegen.optional(this.syncDefaultsOptions); + } + /** + * LDAP attribute representing the username. + * + */ + @Export(name="userAttr", refs={String.class}, tree="[0]") + private Output userAttr; + + /** + * @return LDAP attribute representing the username. + * + */ + public Output userAttr() { + return this.userAttr; + } + /** + * LDAP objectClasses for users (comma-separated). + * + */ + @Export(name="userClasses", refs={String.class}, tree="[0]") + private Output userClasses; + + /** + * @return LDAP objectClasses for users (comma-separated). + * + */ + public Output> userClasses() { + return Codegen.optional(this.userClasses); + } + /** + * Verify LDAP server SSL certificate. + * + */ + @Export(name="verify", refs={Boolean.class}, tree="[0]") + private Output verify; + + /** + * @return Verify LDAP server SSL certificate. + * + */ + public Output verify() { + return this.verify; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Ldap(java.lang.String name) { + this(name, LdapArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Ldap(java.lang.String name, LdapArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Ldap(java.lang.String name, LdapArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Realm/ldap:Ldap", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Ldap(java.lang.String name, Output id, @Nullable LdapState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Realm/ldap:Ldap", name, state, makeResourceOptions(options, id), false); + } + + private static LdapArgs makeArgs(LdapArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? LdapArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .additionalSecretOutputs(List.of( + "bindPassword" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Ldap get(java.lang.String name, Output id, @Nullable LdapState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Ldap(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/LdapArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/LdapArgs.java new file mode 100644 index 00000000..01c32c76 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/LdapArgs.java @@ -0,0 +1,1036 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Realm; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class LdapArgs extends com.pulumi.resources.ResourceArgs { + + public static final LdapArgs Empty = new LdapArgs(); + + /** + * LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + */ + @Import(name="baseDn", required=true) + private Output baseDn; + + /** + * @return LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + */ + public Output baseDn() { + return this.baseDn; + } + + /** + * LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + */ + @Import(name="bindDn") + private @Nullable Output bindDn; + + /** + * @return LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + */ + public Optional> bindDn() { + return Optional.ofNullable(this.bindDn); + } + + /** + * Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + */ + @Import(name="bindPassword") + private @Nullable Output bindPassword; + + /** + * @return Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + */ + public Optional> bindPassword() { + return Optional.ofNullable(this.bindPassword); + } + + /** + * Path to CA certificate file for SSL verification. + * + */ + @Import(name="caPath") + private @Nullable Output caPath; + + /** + * @return Path to CA certificate file for SSL verification. + * + */ + public Optional> caPath() { + return Optional.ofNullable(this.caPath); + } + + /** + * Enable case-sensitive username matching. + * + */ + @Import(name="caseSensitive") + private @Nullable Output caseSensitive; + + /** + * @return Enable case-sensitive username matching. + * + */ + public Optional> caseSensitive() { + return Optional.ofNullable(this.caseSensitive); + } + + /** + * Path to client certificate key. + * + */ + @Import(name="certKeyPath") + private @Nullable Output certKeyPath; + + /** + * @return Path to client certificate key. + * + */ + public Optional> certKeyPath() { + return Optional.ofNullable(this.certKeyPath); + } + + /** + * Path to client certificate for SSL authentication. + * + */ + @Import(name="certPath") + private @Nullable Output certPath; + + /** + * @return Path to client certificate for SSL authentication. + * + */ + public Optional> certPath() { + return Optional.ofNullable(this.certPath); + } + + /** + * Description of the realm. + * + */ + @Import(name="comment") + private @Nullable Output comment; + + /** + * @return Description of the realm. + * + */ + public Optional> comment() { + return Optional.ofNullable(this.comment); + } + + /** + * Use this realm as the default for login. + * + */ + @Import(name="default") + private @Nullable Output default_; + + /** + * @return Use this realm as the default for login. + * + */ + public Optional> default_() { + return Optional.ofNullable(this.default_); + } + + /** + * LDAP filter for user searches. + * + */ + @Import(name="filter") + private @Nullable Output filter; + + /** + * @return LDAP filter for user searches. + * + */ + public Optional> filter() { + return Optional.ofNullable(this.filter); + } + + /** + * LDAP objectClasses for groups (comma-separated). + * + */ + @Import(name="groupClasses") + private @Nullable Output groupClasses; + + /** + * @return LDAP objectClasses for groups (comma-separated). + * + */ + public Optional> groupClasses() { + return Optional.ofNullable(this.groupClasses); + } + + /** + * LDAP base DN for group searches. + * + */ + @Import(name="groupDn") + private @Nullable Output groupDn; + + /** + * @return LDAP base DN for group searches. + * + */ + public Optional> groupDn() { + return Optional.ofNullable(this.groupDn); + } + + /** + * LDAP filter for group searches. + * + */ + @Import(name="groupFilter") + private @Nullable Output groupFilter; + + /** + * @return LDAP filter for group searches. + * + */ + public Optional> groupFilter() { + return Optional.ofNullable(this.groupFilter); + } + + /** + * LDAP attribute representing the group name. + * + */ + @Import(name="groupNameAttr") + private @Nullable Output groupNameAttr; + + /** + * @return LDAP attribute representing the group name. + * + */ + public Optional> groupNameAttr() { + return Optional.ofNullable(this.groupNameAttr); + } + + /** + * LDAP connection mode (ldap, ldaps, ldap+starttls). + * + */ + @Import(name="mode") + private @Nullable Output mode; + + /** + * @return LDAP connection mode (ldap, ldaps, ldap+starttls). + * + */ + public Optional> mode() { + return Optional.ofNullable(this.mode); + } + + /** + * LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + */ + @Import(name="port") + private @Nullable Output port; + + /** + * @return LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + */ + public Optional> port() { + return Optional.ofNullable(this.port); + } + + /** + * Realm identifier (e.g., 'example.com'). + * + */ + @Import(name="realm", required=true) + private Output realm; + + /** + * @return Realm identifier (e.g., 'example.com'). + * + */ + public Output realm() { + return this.realm; + } + + /** + * Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + @Import(name="secure") + private @Nullable Output secure; + + /** + * @return Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + public Optional> secure() { + return Optional.ofNullable(this.secure); + } + + /** + * Primary LDAP server hostname or IP address. + * + */ + @Import(name="server1", required=true) + private Output server1; + + /** + * @return Primary LDAP server hostname or IP address. + * + */ + public Output server1() { + return this.server1; + } + + /** + * Fallback LDAP server hostname or IP address. + * + */ + @Import(name="server2") + private @Nullable Output server2; + + /** + * @return Fallback LDAP server hostname or IP address. + * + */ + public Optional> server2() { + return Optional.ofNullable(this.server2); + } + + /** + * SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + */ + @Import(name="sslVersion") + private @Nullable Output sslVersion; + + /** + * @return SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + */ + public Optional> sslVersion() { + return Optional.ofNullable(this.sslVersion); + } + + /** + * Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + */ + @Import(name="syncAttributes") + private @Nullable Output syncAttributes; + + /** + * @return Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + */ + public Optional> syncAttributes() { + return Optional.ofNullable(this.syncAttributes); + } + + /** + * Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + */ + @Import(name="syncDefaultsOptions") + private @Nullable Output syncDefaultsOptions; + + /** + * @return Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + */ + public Optional> syncDefaultsOptions() { + return Optional.ofNullable(this.syncDefaultsOptions); + } + + /** + * LDAP attribute representing the username. + * + */ + @Import(name="userAttr") + private @Nullable Output userAttr; + + /** + * @return LDAP attribute representing the username. + * + */ + public Optional> userAttr() { + return Optional.ofNullable(this.userAttr); + } + + /** + * LDAP objectClasses for users (comma-separated). + * + */ + @Import(name="userClasses") + private @Nullable Output userClasses; + + /** + * @return LDAP objectClasses for users (comma-separated). + * + */ + public Optional> userClasses() { + return Optional.ofNullable(this.userClasses); + } + + /** + * Verify LDAP server SSL certificate. + * + */ + @Import(name="verify") + private @Nullable Output verify; + + /** + * @return Verify LDAP server SSL certificate. + * + */ + public Optional> verify() { + return Optional.ofNullable(this.verify); + } + + private LdapArgs() {} + + private LdapArgs(LdapArgs $) { + this.baseDn = $.baseDn; + this.bindDn = $.bindDn; + this.bindPassword = $.bindPassword; + this.caPath = $.caPath; + this.caseSensitive = $.caseSensitive; + this.certKeyPath = $.certKeyPath; + this.certPath = $.certPath; + this.comment = $.comment; + this.default_ = $.default_; + this.filter = $.filter; + this.groupClasses = $.groupClasses; + this.groupDn = $.groupDn; + this.groupFilter = $.groupFilter; + this.groupNameAttr = $.groupNameAttr; + this.mode = $.mode; + this.port = $.port; + this.realm = $.realm; + this.secure = $.secure; + this.server1 = $.server1; + this.server2 = $.server2; + this.sslVersion = $.sslVersion; + this.syncAttributes = $.syncAttributes; + this.syncDefaultsOptions = $.syncDefaultsOptions; + this.userAttr = $.userAttr; + this.userClasses = $.userClasses; + this.verify = $.verify; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LdapArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LdapArgs $; + + public Builder() { + $ = new LdapArgs(); + } + + public Builder(LdapArgs defaults) { + $ = new LdapArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param baseDn LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder baseDn(Output baseDn) { + $.baseDn = baseDn; + return this; + } + + /** + * @param baseDn LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder baseDn(String baseDn) { + return baseDn(Output.of(baseDn)); + } + + /** + * @param bindDn LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder bindDn(@Nullable Output bindDn) { + $.bindDn = bindDn; + return this; + } + + /** + * @param bindDn LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder bindDn(String bindDn) { + return bindDn(Output.of(bindDn)); + } + + /** + * @param bindPassword Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + * @return builder + * + */ + public Builder bindPassword(@Nullable Output bindPassword) { + $.bindPassword = bindPassword; + return this; + } + + /** + * @param bindPassword Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + * @return builder + * + */ + public Builder bindPassword(String bindPassword) { + return bindPassword(Output.of(bindPassword)); + } + + /** + * @param caPath Path to CA certificate file for SSL verification. + * + * @return builder + * + */ + public Builder caPath(@Nullable Output caPath) { + $.caPath = caPath; + return this; + } + + /** + * @param caPath Path to CA certificate file for SSL verification. + * + * @return builder + * + */ + public Builder caPath(String caPath) { + return caPath(Output.of(caPath)); + } + + /** + * @param caseSensitive Enable case-sensitive username matching. + * + * @return builder + * + */ + public Builder caseSensitive(@Nullable Output caseSensitive) { + $.caseSensitive = caseSensitive; + return this; + } + + /** + * @param caseSensitive Enable case-sensitive username matching. + * + * @return builder + * + */ + public Builder caseSensitive(Boolean caseSensitive) { + return caseSensitive(Output.of(caseSensitive)); + } + + /** + * @param certKeyPath Path to client certificate key. + * + * @return builder + * + */ + public Builder certKeyPath(@Nullable Output certKeyPath) { + $.certKeyPath = certKeyPath; + return this; + } + + /** + * @param certKeyPath Path to client certificate key. + * + * @return builder + * + */ + public Builder certKeyPath(String certKeyPath) { + return certKeyPath(Output.of(certKeyPath)); + } + + /** + * @param certPath Path to client certificate for SSL authentication. + * + * @return builder + * + */ + public Builder certPath(@Nullable Output certPath) { + $.certPath = certPath; + return this; + } + + /** + * @param certPath Path to client certificate for SSL authentication. + * + * @return builder + * + */ + public Builder certPath(String certPath) { + return certPath(Output.of(certPath)); + } + + /** + * @param comment Description of the realm. + * + * @return builder + * + */ + public Builder comment(@Nullable Output comment) { + $.comment = comment; + return this; + } + + /** + * @param comment Description of the realm. + * + * @return builder + * + */ + public Builder comment(String comment) { + return comment(Output.of(comment)); + } + + /** + * @param default_ Use this realm as the default for login. + * + * @return builder + * + */ + public Builder default_(@Nullable Output default_) { + $.default_ = default_; + return this; + } + + /** + * @param default_ Use this realm as the default for login. + * + * @return builder + * + */ + public Builder default_(Boolean default_) { + return default_(Output.of(default_)); + } + + /** + * @param filter LDAP filter for user searches. + * + * @return builder + * + */ + public Builder filter(@Nullable Output filter) { + $.filter = filter; + return this; + } + + /** + * @param filter LDAP filter for user searches. + * + * @return builder + * + */ + public Builder filter(String filter) { + return filter(Output.of(filter)); + } + + /** + * @param groupClasses LDAP objectClasses for groups (comma-separated). + * + * @return builder + * + */ + public Builder groupClasses(@Nullable Output groupClasses) { + $.groupClasses = groupClasses; + return this; + } + + /** + * @param groupClasses LDAP objectClasses for groups (comma-separated). + * + * @return builder + * + */ + public Builder groupClasses(String groupClasses) { + return groupClasses(Output.of(groupClasses)); + } + + /** + * @param groupDn LDAP base DN for group searches. + * + * @return builder + * + */ + public Builder groupDn(@Nullable Output groupDn) { + $.groupDn = groupDn; + return this; + } + + /** + * @param groupDn LDAP base DN for group searches. + * + * @return builder + * + */ + public Builder groupDn(String groupDn) { + return groupDn(Output.of(groupDn)); + } + + /** + * @param groupFilter LDAP filter for group searches. + * + * @return builder + * + */ + public Builder groupFilter(@Nullable Output groupFilter) { + $.groupFilter = groupFilter; + return this; + } + + /** + * @param groupFilter LDAP filter for group searches. + * + * @return builder + * + */ + public Builder groupFilter(String groupFilter) { + return groupFilter(Output.of(groupFilter)); + } + + /** + * @param groupNameAttr LDAP attribute representing the group name. + * + * @return builder + * + */ + public Builder groupNameAttr(@Nullable Output groupNameAttr) { + $.groupNameAttr = groupNameAttr; + return this; + } + + /** + * @param groupNameAttr LDAP attribute representing the group name. + * + * @return builder + * + */ + public Builder groupNameAttr(String groupNameAttr) { + return groupNameAttr(Output.of(groupNameAttr)); + } + + /** + * @param mode LDAP connection mode (ldap, ldaps, ldap+starttls). + * + * @return builder + * + */ + public Builder mode(@Nullable Output mode) { + $.mode = mode; + return this; + } + + /** + * @param mode LDAP connection mode (ldap, ldaps, ldap+starttls). + * + * @return builder + * + */ + public Builder mode(String mode) { + return mode(Output.of(mode)); + } + + /** + * @param port LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + * @return builder + * + */ + public Builder port(@Nullable Output port) { + $.port = port; + return this; + } + + /** + * @param port LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + * @return builder + * + */ + public Builder port(Integer port) { + return port(Output.of(port)); + } + + /** + * @param realm Realm identifier (e.g., 'example.com'). + * + * @return builder + * + */ + public Builder realm(Output realm) { + $.realm = realm; + return this; + } + + /** + * @param realm Realm identifier (e.g., 'example.com'). + * + * @return builder + * + */ + public Builder realm(String realm) { + return realm(Output.of(realm)); + } + + /** + * @param secure Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + public Builder secure(@Nullable Output secure) { + $.secure = secure; + return this; + } + + /** + * @param secure Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + public Builder secure(Boolean secure) { + return secure(Output.of(secure)); + } + + /** + * @param server1 Primary LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server1(Output server1) { + $.server1 = server1; + return this; + } + + /** + * @param server1 Primary LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server1(String server1) { + return server1(Output.of(server1)); + } + + /** + * @param server2 Fallback LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server2(@Nullable Output server2) { + $.server2 = server2; + return this; + } + + /** + * @param server2 Fallback LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server2(String server2) { + return server2(Output.of(server2)); + } + + /** + * @param sslVersion SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + * @return builder + * + */ + public Builder sslVersion(@Nullable Output sslVersion) { + $.sslVersion = sslVersion; + return this; + } + + /** + * @param sslVersion SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + * @return builder + * + */ + public Builder sslVersion(String sslVersion) { + return sslVersion(Output.of(sslVersion)); + } + + /** + * @param syncAttributes Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + * @return builder + * + */ + public Builder syncAttributes(@Nullable Output syncAttributes) { + $.syncAttributes = syncAttributes; + return this; + } + + /** + * @param syncAttributes Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + * @return builder + * + */ + public Builder syncAttributes(String syncAttributes) { + return syncAttributes(Output.of(syncAttributes)); + } + + /** + * @param syncDefaultsOptions Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + * @return builder + * + */ + public Builder syncDefaultsOptions(@Nullable Output syncDefaultsOptions) { + $.syncDefaultsOptions = syncDefaultsOptions; + return this; + } + + /** + * @param syncDefaultsOptions Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + * @return builder + * + */ + public Builder syncDefaultsOptions(String syncDefaultsOptions) { + return syncDefaultsOptions(Output.of(syncDefaultsOptions)); + } + + /** + * @param userAttr LDAP attribute representing the username. + * + * @return builder + * + */ + public Builder userAttr(@Nullable Output userAttr) { + $.userAttr = userAttr; + return this; + } + + /** + * @param userAttr LDAP attribute representing the username. + * + * @return builder + * + */ + public Builder userAttr(String userAttr) { + return userAttr(Output.of(userAttr)); + } + + /** + * @param userClasses LDAP objectClasses for users (comma-separated). + * + * @return builder + * + */ + public Builder userClasses(@Nullable Output userClasses) { + $.userClasses = userClasses; + return this; + } + + /** + * @param userClasses LDAP objectClasses for users (comma-separated). + * + * @return builder + * + */ + public Builder userClasses(String userClasses) { + return userClasses(Output.of(userClasses)); + } + + /** + * @param verify Verify LDAP server SSL certificate. + * + * @return builder + * + */ + public Builder verify(@Nullable Output verify) { + $.verify = verify; + return this; + } + + /** + * @param verify Verify LDAP server SSL certificate. + * + * @return builder + * + */ + public Builder verify(Boolean verify) { + return verify(Output.of(verify)); + } + + public LdapArgs build() { + if ($.baseDn == null) { + throw new MissingRequiredPropertyException("LdapArgs", "baseDn"); + } + if ($.realm == null) { + throw new MissingRequiredPropertyException("LdapArgs", "realm"); + } + if ($.server1 == null) { + throw new MissingRequiredPropertyException("LdapArgs", "server1"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/Sync.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/Sync.java new file mode 100644 index 00000000..c9fbc011 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/Sync.java @@ -0,0 +1,199 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Realm; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Realm.SyncArgs; +import io.muehlbachler.pulumi.proxmoxve.Realm.inputs.SyncState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Import + * + * #!/usr/bin/env sh + * + * Realm sync resources can be imported by realm name, e.g.: + * + * ```sh + * $ pulumi import proxmoxve:Realm/sync:Sync example example.com + * ``` + * + * Importing only populates the `realm` and `id` attributes; other fields must + * + * be set in configuration. + * + */ +@ResourceType(type="proxmoxve:Realm/sync:Sync") +public class Sync extends com.pulumi.resources.CustomResource { + /** + * Only simulate the sync without applying changes. + * + */ + @Export(name="dryRun", refs={Boolean.class}, tree="[0]") + private Output dryRun; + + /** + * @return Only simulate the sync without applying changes. + * + */ + public Output> dryRun() { + return Codegen.optional(this.dryRun); + } + /** + * Enable newly synced users. + * + */ + @Export(name="enableNew", refs={Boolean.class}, tree="[0]") + private Output enableNew; + + /** + * @return Enable newly synced users. + * + */ + public Output> enableNew() { + return Codegen.optional(this.enableNew); + } + /** + * Perform a full sync. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + @Export(name="full", refs={Boolean.class}, tree="[0]") + private Output full; + + /** + * @return Perform a full sync. + * + */ + public Output> full() { + return Codegen.optional(this.full); + } + /** + * Purge removed entries. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + @Export(name="purge", refs={Boolean.class}, tree="[0]") + private Output purge; + + /** + * @return Purge removed entries. + * + */ + public Output> purge() { + return Codegen.optional(this.purge); + } + /** + * Name of the realm to synchronize. + * + */ + @Export(name="realm", refs={String.class}, tree="[0]") + private Output realm; + + /** + * @return Name of the realm to synchronize. + * + */ + public Output realm() { + return this.realm; + } + /** + * How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + */ + @Export(name="removeVanished", refs={String.class}, tree="[0]") + private Output removeVanished; + + /** + * @return How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + */ + public Output> removeVanished() { + return Codegen.optional(this.removeVanished); + } + /** + * Sync scope: users, groups, or both. + * + */ + @Export(name="scope", refs={String.class}, tree="[0]") + private Output scope; + + /** + * @return Sync scope: users, groups, or both. + * + */ + public Output> scope() { + return Codegen.optional(this.scope); + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Sync(java.lang.String name) { + this(name, SyncArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Sync(java.lang.String name, SyncArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Sync(java.lang.String name, SyncArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Realm/sync:Sync", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Sync(java.lang.String name, Output id, @Nullable SyncState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Realm/sync:Sync", name, state, makeResourceOptions(options, id), false); + } + + private static SyncArgs makeArgs(SyncArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? SyncArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Sync get(java.lang.String name, Output id, @Nullable SyncState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Sync(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/SyncArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/SyncArgs.java new file mode 100644 index 00000000..90d71167 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/SyncArgs.java @@ -0,0 +1,342 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Realm; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class SyncArgs extends com.pulumi.resources.ResourceArgs { + + public static final SyncArgs Empty = new SyncArgs(); + + /** + * Only simulate the sync without applying changes. + * + */ + @Import(name="dryRun") + private @Nullable Output dryRun; + + /** + * @return Only simulate the sync without applying changes. + * + */ + public Optional> dryRun() { + return Optional.ofNullable(this.dryRun); + } + + /** + * Enable newly synced users. + * + */ + @Import(name="enableNew") + private @Nullable Output enableNew; + + /** + * @return Enable newly synced users. + * + */ + public Optional> enableNew() { + return Optional.ofNullable(this.enableNew); + } + + /** + * Perform a full sync. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + @Import(name="full") + private @Nullable Output full; + + /** + * @return Perform a full sync. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Optional> full() { + return Optional.ofNullable(this.full); + } + + /** + * Purge removed entries. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + @Import(name="purge") + private @Nullable Output purge; + + /** + * @return Purge removed entries. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Optional> purge() { + return Optional.ofNullable(this.purge); + } + + /** + * Name of the realm to synchronize. + * + */ + @Import(name="realm", required=true) + private Output realm; + + /** + * @return Name of the realm to synchronize. + * + */ + public Output realm() { + return this.realm; + } + + /** + * How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + */ + @Import(name="removeVanished") + private @Nullable Output removeVanished; + + /** + * @return How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + */ + public Optional> removeVanished() { + return Optional.ofNullable(this.removeVanished); + } + + /** + * Sync scope: users, groups, or both. + * + */ + @Import(name="scope") + private @Nullable Output scope; + + /** + * @return Sync scope: users, groups, or both. + * + */ + public Optional> scope() { + return Optional.ofNullable(this.scope); + } + + private SyncArgs() {} + + private SyncArgs(SyncArgs $) { + this.dryRun = $.dryRun; + this.enableNew = $.enableNew; + this.full = $.full; + this.purge = $.purge; + this.realm = $.realm; + this.removeVanished = $.removeVanished; + this.scope = $.scope; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(SyncArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private SyncArgs $; + + public Builder() { + $ = new SyncArgs(); + } + + public Builder(SyncArgs defaults) { + $ = new SyncArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param dryRun Only simulate the sync without applying changes. + * + * @return builder + * + */ + public Builder dryRun(@Nullable Output dryRun) { + $.dryRun = dryRun; + return this; + } + + /** + * @param dryRun Only simulate the sync without applying changes. + * + * @return builder + * + */ + public Builder dryRun(Boolean dryRun) { + return dryRun(Output.of(dryRun)); + } + + /** + * @param enableNew Enable newly synced users. + * + * @return builder + * + */ + public Builder enableNew(@Nullable Output enableNew) { + $.enableNew = enableNew; + return this; + } + + /** + * @param enableNew Enable newly synced users. + * + * @return builder + * + */ + public Builder enableNew(Boolean enableNew) { + return enableNew(Output.of(enableNew)); + } + + /** + * @param full Perform a full sync. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder full(@Nullable Output full) { + $.full = full; + return this; + } + + /** + * @param full Perform a full sync. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder full(Boolean full) { + return full(Output.of(full)); + } + + /** + * @param purge Purge removed entries. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder purge(@Nullable Output purge) { + $.purge = purge; + return this; + } + + /** + * @param purge Purge removed entries. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder purge(Boolean purge) { + return purge(Output.of(purge)); + } + + /** + * @param realm Name of the realm to synchronize. + * + * @return builder + * + */ + public Builder realm(Output realm) { + $.realm = realm; + return this; + } + + /** + * @param realm Name of the realm to synchronize. + * + * @return builder + * + */ + public Builder realm(String realm) { + return realm(Output.of(realm)); + } + + /** + * @param removeVanished How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + * @return builder + * + */ + public Builder removeVanished(@Nullable Output removeVanished) { + $.removeVanished = removeVanished; + return this; + } + + /** + * @param removeVanished How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + * @return builder + * + */ + public Builder removeVanished(String removeVanished) { + return removeVanished(Output.of(removeVanished)); + } + + /** + * @param scope Sync scope: users, groups, or both. + * + * @return builder + * + */ + public Builder scope(@Nullable Output scope) { + $.scope = scope; + return this; + } + + /** + * @param scope Sync scope: users, groups, or both. + * + * @return builder + * + */ + public Builder scope(String scope) { + return scope(Output.of(scope)); + } + + public SyncArgs build() { + if ($.realm == null) { + throw new MissingRequiredPropertyException("SyncArgs", "realm"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/inputs/LdapState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/inputs/LdapState.java new file mode 100644 index 00000000..322fecbc --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/inputs/LdapState.java @@ -0,0 +1,1026 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Realm.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class LdapState extends com.pulumi.resources.ResourceArgs { + + public static final LdapState Empty = new LdapState(); + + /** + * LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + */ + @Import(name="baseDn") + private @Nullable Output baseDn; + + /** + * @return LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + */ + public Optional> baseDn() { + return Optional.ofNullable(this.baseDn); + } + + /** + * LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + */ + @Import(name="bindDn") + private @Nullable Output bindDn; + + /** + * @return LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + */ + public Optional> bindDn() { + return Optional.ofNullable(this.bindDn); + } + + /** + * Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + */ + @Import(name="bindPassword") + private @Nullable Output bindPassword; + + /** + * @return Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + */ + public Optional> bindPassword() { + return Optional.ofNullable(this.bindPassword); + } + + /** + * Path to CA certificate file for SSL verification. + * + */ + @Import(name="caPath") + private @Nullable Output caPath; + + /** + * @return Path to CA certificate file for SSL verification. + * + */ + public Optional> caPath() { + return Optional.ofNullable(this.caPath); + } + + /** + * Enable case-sensitive username matching. + * + */ + @Import(name="caseSensitive") + private @Nullable Output caseSensitive; + + /** + * @return Enable case-sensitive username matching. + * + */ + public Optional> caseSensitive() { + return Optional.ofNullable(this.caseSensitive); + } + + /** + * Path to client certificate key. + * + */ + @Import(name="certKeyPath") + private @Nullable Output certKeyPath; + + /** + * @return Path to client certificate key. + * + */ + public Optional> certKeyPath() { + return Optional.ofNullable(this.certKeyPath); + } + + /** + * Path to client certificate for SSL authentication. + * + */ + @Import(name="certPath") + private @Nullable Output certPath; + + /** + * @return Path to client certificate for SSL authentication. + * + */ + public Optional> certPath() { + return Optional.ofNullable(this.certPath); + } + + /** + * Description of the realm. + * + */ + @Import(name="comment") + private @Nullable Output comment; + + /** + * @return Description of the realm. + * + */ + public Optional> comment() { + return Optional.ofNullable(this.comment); + } + + /** + * Use this realm as the default for login. + * + */ + @Import(name="default") + private @Nullable Output default_; + + /** + * @return Use this realm as the default for login. + * + */ + public Optional> default_() { + return Optional.ofNullable(this.default_); + } + + /** + * LDAP filter for user searches. + * + */ + @Import(name="filter") + private @Nullable Output filter; + + /** + * @return LDAP filter for user searches. + * + */ + public Optional> filter() { + return Optional.ofNullable(this.filter); + } + + /** + * LDAP objectClasses for groups (comma-separated). + * + */ + @Import(name="groupClasses") + private @Nullable Output groupClasses; + + /** + * @return LDAP objectClasses for groups (comma-separated). + * + */ + public Optional> groupClasses() { + return Optional.ofNullable(this.groupClasses); + } + + /** + * LDAP base DN for group searches. + * + */ + @Import(name="groupDn") + private @Nullable Output groupDn; + + /** + * @return LDAP base DN for group searches. + * + */ + public Optional> groupDn() { + return Optional.ofNullable(this.groupDn); + } + + /** + * LDAP filter for group searches. + * + */ + @Import(name="groupFilter") + private @Nullable Output groupFilter; + + /** + * @return LDAP filter for group searches. + * + */ + public Optional> groupFilter() { + return Optional.ofNullable(this.groupFilter); + } + + /** + * LDAP attribute representing the group name. + * + */ + @Import(name="groupNameAttr") + private @Nullable Output groupNameAttr; + + /** + * @return LDAP attribute representing the group name. + * + */ + public Optional> groupNameAttr() { + return Optional.ofNullable(this.groupNameAttr); + } + + /** + * LDAP connection mode (ldap, ldaps, ldap+starttls). + * + */ + @Import(name="mode") + private @Nullable Output mode; + + /** + * @return LDAP connection mode (ldap, ldaps, ldap+starttls). + * + */ + public Optional> mode() { + return Optional.ofNullable(this.mode); + } + + /** + * LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + */ + @Import(name="port") + private @Nullable Output port; + + /** + * @return LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + */ + public Optional> port() { + return Optional.ofNullable(this.port); + } + + /** + * Realm identifier (e.g., 'example.com'). + * + */ + @Import(name="realm") + private @Nullable Output realm; + + /** + * @return Realm identifier (e.g., 'example.com'). + * + */ + public Optional> realm() { + return Optional.ofNullable(this.realm); + } + + /** + * Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + @Import(name="secure") + private @Nullable Output secure; + + /** + * @return Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + public Optional> secure() { + return Optional.ofNullable(this.secure); + } + + /** + * Primary LDAP server hostname or IP address. + * + */ + @Import(name="server1") + private @Nullable Output server1; + + /** + * @return Primary LDAP server hostname or IP address. + * + */ + public Optional> server1() { + return Optional.ofNullable(this.server1); + } + + /** + * Fallback LDAP server hostname or IP address. + * + */ + @Import(name="server2") + private @Nullable Output server2; + + /** + * @return Fallback LDAP server hostname or IP address. + * + */ + public Optional> server2() { + return Optional.ofNullable(this.server2); + } + + /** + * SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + */ + @Import(name="sslVersion") + private @Nullable Output sslVersion; + + /** + * @return SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + */ + public Optional> sslVersion() { + return Optional.ofNullable(this.sslVersion); + } + + /** + * Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + */ + @Import(name="syncAttributes") + private @Nullable Output syncAttributes; + + /** + * @return Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + */ + public Optional> syncAttributes() { + return Optional.ofNullable(this.syncAttributes); + } + + /** + * Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + */ + @Import(name="syncDefaultsOptions") + private @Nullable Output syncDefaultsOptions; + + /** + * @return Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + */ + public Optional> syncDefaultsOptions() { + return Optional.ofNullable(this.syncDefaultsOptions); + } + + /** + * LDAP attribute representing the username. + * + */ + @Import(name="userAttr") + private @Nullable Output userAttr; + + /** + * @return LDAP attribute representing the username. + * + */ + public Optional> userAttr() { + return Optional.ofNullable(this.userAttr); + } + + /** + * LDAP objectClasses for users (comma-separated). + * + */ + @Import(name="userClasses") + private @Nullable Output userClasses; + + /** + * @return LDAP objectClasses for users (comma-separated). + * + */ + public Optional> userClasses() { + return Optional.ofNullable(this.userClasses); + } + + /** + * Verify LDAP server SSL certificate. + * + */ + @Import(name="verify") + private @Nullable Output verify; + + /** + * @return Verify LDAP server SSL certificate. + * + */ + public Optional> verify() { + return Optional.ofNullable(this.verify); + } + + private LdapState() {} + + private LdapState(LdapState $) { + this.baseDn = $.baseDn; + this.bindDn = $.bindDn; + this.bindPassword = $.bindPassword; + this.caPath = $.caPath; + this.caseSensitive = $.caseSensitive; + this.certKeyPath = $.certKeyPath; + this.certPath = $.certPath; + this.comment = $.comment; + this.default_ = $.default_; + this.filter = $.filter; + this.groupClasses = $.groupClasses; + this.groupDn = $.groupDn; + this.groupFilter = $.groupFilter; + this.groupNameAttr = $.groupNameAttr; + this.mode = $.mode; + this.port = $.port; + this.realm = $.realm; + this.secure = $.secure; + this.server1 = $.server1; + this.server2 = $.server2; + this.sslVersion = $.sslVersion; + this.syncAttributes = $.syncAttributes; + this.syncDefaultsOptions = $.syncDefaultsOptions; + this.userAttr = $.userAttr; + this.userClasses = $.userClasses; + this.verify = $.verify; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LdapState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LdapState $; + + public Builder() { + $ = new LdapState(); + } + + public Builder(LdapState defaults) { + $ = new LdapState(Objects.requireNonNull(defaults)); + } + + /** + * @param baseDn LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder baseDn(@Nullable Output baseDn) { + $.baseDn = baseDn; + return this; + } + + /** + * @param baseDn LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder baseDn(String baseDn) { + return baseDn(Output.of(baseDn)); + } + + /** + * @param bindDn LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder bindDn(@Nullable Output bindDn) { + $.bindDn = bindDn; + return this; + } + + /** + * @param bindDn LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + * + * @return builder + * + */ + public Builder bindDn(String bindDn) { + return bindDn(Output.of(bindDn)); + } + + /** + * @param bindPassword Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + * @return builder + * + */ + public Builder bindPassword(@Nullable Output bindPassword) { + $.bindPassword = bindPassword; + return this; + } + + /** + * @param bindPassword Password for the bind DN. Note: stored in Proxmox but not returned by API. + * + * @return builder + * + */ + public Builder bindPassword(String bindPassword) { + return bindPassword(Output.of(bindPassword)); + } + + /** + * @param caPath Path to CA certificate file for SSL verification. + * + * @return builder + * + */ + public Builder caPath(@Nullable Output caPath) { + $.caPath = caPath; + return this; + } + + /** + * @param caPath Path to CA certificate file for SSL verification. + * + * @return builder + * + */ + public Builder caPath(String caPath) { + return caPath(Output.of(caPath)); + } + + /** + * @param caseSensitive Enable case-sensitive username matching. + * + * @return builder + * + */ + public Builder caseSensitive(@Nullable Output caseSensitive) { + $.caseSensitive = caseSensitive; + return this; + } + + /** + * @param caseSensitive Enable case-sensitive username matching. + * + * @return builder + * + */ + public Builder caseSensitive(Boolean caseSensitive) { + return caseSensitive(Output.of(caseSensitive)); + } + + /** + * @param certKeyPath Path to client certificate key. + * + * @return builder + * + */ + public Builder certKeyPath(@Nullable Output certKeyPath) { + $.certKeyPath = certKeyPath; + return this; + } + + /** + * @param certKeyPath Path to client certificate key. + * + * @return builder + * + */ + public Builder certKeyPath(String certKeyPath) { + return certKeyPath(Output.of(certKeyPath)); + } + + /** + * @param certPath Path to client certificate for SSL authentication. + * + * @return builder + * + */ + public Builder certPath(@Nullable Output certPath) { + $.certPath = certPath; + return this; + } + + /** + * @param certPath Path to client certificate for SSL authentication. + * + * @return builder + * + */ + public Builder certPath(String certPath) { + return certPath(Output.of(certPath)); + } + + /** + * @param comment Description of the realm. + * + * @return builder + * + */ + public Builder comment(@Nullable Output comment) { + $.comment = comment; + return this; + } + + /** + * @param comment Description of the realm. + * + * @return builder + * + */ + public Builder comment(String comment) { + return comment(Output.of(comment)); + } + + /** + * @param default_ Use this realm as the default for login. + * + * @return builder + * + */ + public Builder default_(@Nullable Output default_) { + $.default_ = default_; + return this; + } + + /** + * @param default_ Use this realm as the default for login. + * + * @return builder + * + */ + public Builder default_(Boolean default_) { + return default_(Output.of(default_)); + } + + /** + * @param filter LDAP filter for user searches. + * + * @return builder + * + */ + public Builder filter(@Nullable Output filter) { + $.filter = filter; + return this; + } + + /** + * @param filter LDAP filter for user searches. + * + * @return builder + * + */ + public Builder filter(String filter) { + return filter(Output.of(filter)); + } + + /** + * @param groupClasses LDAP objectClasses for groups (comma-separated). + * + * @return builder + * + */ + public Builder groupClasses(@Nullable Output groupClasses) { + $.groupClasses = groupClasses; + return this; + } + + /** + * @param groupClasses LDAP objectClasses for groups (comma-separated). + * + * @return builder + * + */ + public Builder groupClasses(String groupClasses) { + return groupClasses(Output.of(groupClasses)); + } + + /** + * @param groupDn LDAP base DN for group searches. + * + * @return builder + * + */ + public Builder groupDn(@Nullable Output groupDn) { + $.groupDn = groupDn; + return this; + } + + /** + * @param groupDn LDAP base DN for group searches. + * + * @return builder + * + */ + public Builder groupDn(String groupDn) { + return groupDn(Output.of(groupDn)); + } + + /** + * @param groupFilter LDAP filter for group searches. + * + * @return builder + * + */ + public Builder groupFilter(@Nullable Output groupFilter) { + $.groupFilter = groupFilter; + return this; + } + + /** + * @param groupFilter LDAP filter for group searches. + * + * @return builder + * + */ + public Builder groupFilter(String groupFilter) { + return groupFilter(Output.of(groupFilter)); + } + + /** + * @param groupNameAttr LDAP attribute representing the group name. + * + * @return builder + * + */ + public Builder groupNameAttr(@Nullable Output groupNameAttr) { + $.groupNameAttr = groupNameAttr; + return this; + } + + /** + * @param groupNameAttr LDAP attribute representing the group name. + * + * @return builder + * + */ + public Builder groupNameAttr(String groupNameAttr) { + return groupNameAttr(Output.of(groupNameAttr)); + } + + /** + * @param mode LDAP connection mode (ldap, ldaps, ldap+starttls). + * + * @return builder + * + */ + public Builder mode(@Nullable Output mode) { + $.mode = mode; + return this; + } + + /** + * @param mode LDAP connection mode (ldap, ldaps, ldap+starttls). + * + * @return builder + * + */ + public Builder mode(String mode) { + return mode(Output.of(mode)); + } + + /** + * @param port LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + * @return builder + * + */ + public Builder port(@Nullable Output port) { + $.port = port; + return this; + } + + /** + * @param port LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + * + * @return builder + * + */ + public Builder port(Integer port) { + return port(Output.of(port)); + } + + /** + * @param realm Realm identifier (e.g., 'example.com'). + * + * @return builder + * + */ + public Builder realm(@Nullable Output realm) { + $.realm = realm; + return this; + } + + /** + * @param realm Realm identifier (e.g., 'example.com'). + * + * @return builder + * + */ + public Builder realm(String realm) { + return realm(Output.of(realm)); + } + + /** + * @param secure Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + public Builder secure(@Nullable Output secure) { + $.secure = secure; + return this; + } + + /** + * @param secure Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use mode instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use mode instead. */ + public Builder secure(Boolean secure) { + return secure(Output.of(secure)); + } + + /** + * @param server1 Primary LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server1(@Nullable Output server1) { + $.server1 = server1; + return this; + } + + /** + * @param server1 Primary LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server1(String server1) { + return server1(Output.of(server1)); + } + + /** + * @param server2 Fallback LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server2(@Nullable Output server2) { + $.server2 = server2; + return this; + } + + /** + * @param server2 Fallback LDAP server hostname or IP address. + * + * @return builder + * + */ + public Builder server2(String server2) { + return server2(Output.of(server2)); + } + + /** + * @param sslVersion SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + * @return builder + * + */ + public Builder sslVersion(@Nullable Output sslVersion) { + $.sslVersion = sslVersion; + return this; + } + + /** + * @param sslVersion SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + * + * @return builder + * + */ + public Builder sslVersion(String sslVersion) { + return sslVersion(Output.of(sslVersion)); + } + + /** + * @param syncAttributes Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + * @return builder + * + */ + public Builder syncAttributes(@Nullable Output syncAttributes) { + $.syncAttributes = syncAttributes; + return this; + } + + /** + * @param syncAttributes Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + * + * @return builder + * + */ + public Builder syncAttributes(String syncAttributes) { + return syncAttributes(Output.of(syncAttributes)); + } + + /** + * @param syncDefaultsOptions Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + * @return builder + * + */ + public Builder syncDefaultsOptions(@Nullable Output syncDefaultsOptions) { + $.syncDefaultsOptions = syncDefaultsOptions; + return this; + } + + /** + * @param syncDefaultsOptions Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + * + * @return builder + * + */ + public Builder syncDefaultsOptions(String syncDefaultsOptions) { + return syncDefaultsOptions(Output.of(syncDefaultsOptions)); + } + + /** + * @param userAttr LDAP attribute representing the username. + * + * @return builder + * + */ + public Builder userAttr(@Nullable Output userAttr) { + $.userAttr = userAttr; + return this; + } + + /** + * @param userAttr LDAP attribute representing the username. + * + * @return builder + * + */ + public Builder userAttr(String userAttr) { + return userAttr(Output.of(userAttr)); + } + + /** + * @param userClasses LDAP objectClasses for users (comma-separated). + * + * @return builder + * + */ + public Builder userClasses(@Nullable Output userClasses) { + $.userClasses = userClasses; + return this; + } + + /** + * @param userClasses LDAP objectClasses for users (comma-separated). + * + * @return builder + * + */ + public Builder userClasses(String userClasses) { + return userClasses(Output.of(userClasses)); + } + + /** + * @param verify Verify LDAP server SSL certificate. + * + * @return builder + * + */ + public Builder verify(@Nullable Output verify) { + $.verify = verify; + return this; + } + + /** + * @param verify Verify LDAP server SSL certificate. + * + * @return builder + * + */ + public Builder verify(Boolean verify) { + return verify(Output.of(verify)); + } + + public LdapState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/inputs/SyncState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/inputs/SyncState.java new file mode 100644 index 00000000..a72f5e56 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Realm/inputs/SyncState.java @@ -0,0 +1,338 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Realm.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class SyncState extends com.pulumi.resources.ResourceArgs { + + public static final SyncState Empty = new SyncState(); + + /** + * Only simulate the sync without applying changes. + * + */ + @Import(name="dryRun") + private @Nullable Output dryRun; + + /** + * @return Only simulate the sync without applying changes. + * + */ + public Optional> dryRun() { + return Optional.ofNullable(this.dryRun); + } + + /** + * Enable newly synced users. + * + */ + @Import(name="enableNew") + private @Nullable Output enableNew; + + /** + * @return Enable newly synced users. + * + */ + public Optional> enableNew() { + return Optional.ofNullable(this.enableNew); + } + + /** + * Perform a full sync. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + @Import(name="full") + private @Nullable Output full; + + /** + * @return Perform a full sync. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Optional> full() { + return Optional.ofNullable(this.full); + } + + /** + * Purge removed entries. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + @Import(name="purge") + private @Nullable Output purge; + + /** + * @return Purge removed entries. + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Optional> purge() { + return Optional.ofNullable(this.purge); + } + + /** + * Name of the realm to synchronize. + * + */ + @Import(name="realm") + private @Nullable Output realm; + + /** + * @return Name of the realm to synchronize. + * + */ + public Optional> realm() { + return Optional.ofNullable(this.realm); + } + + /** + * How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + */ + @Import(name="removeVanished") + private @Nullable Output removeVanished; + + /** + * @return How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + */ + public Optional> removeVanished() { + return Optional.ofNullable(this.removeVanished); + } + + /** + * Sync scope: users, groups, or both. + * + */ + @Import(name="scope") + private @Nullable Output scope; + + /** + * @return Sync scope: users, groups, or both. + * + */ + public Optional> scope() { + return Optional.ofNullable(this.scope); + } + + private SyncState() {} + + private SyncState(SyncState $) { + this.dryRun = $.dryRun; + this.enableNew = $.enableNew; + this.full = $.full; + this.purge = $.purge; + this.realm = $.realm; + this.removeVanished = $.removeVanished; + this.scope = $.scope; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(SyncState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private SyncState $; + + public Builder() { + $ = new SyncState(); + } + + public Builder(SyncState defaults) { + $ = new SyncState(Objects.requireNonNull(defaults)); + } + + /** + * @param dryRun Only simulate the sync without applying changes. + * + * @return builder + * + */ + public Builder dryRun(@Nullable Output dryRun) { + $.dryRun = dryRun; + return this; + } + + /** + * @param dryRun Only simulate the sync without applying changes. + * + * @return builder + * + */ + public Builder dryRun(Boolean dryRun) { + return dryRun(Output.of(dryRun)); + } + + /** + * @param enableNew Enable newly synced users. + * + * @return builder + * + */ + public Builder enableNew(@Nullable Output enableNew) { + $.enableNew = enableNew; + return this; + } + + /** + * @param enableNew Enable newly synced users. + * + * @return builder + * + */ + public Builder enableNew(Boolean enableNew) { + return enableNew(Output.of(enableNew)); + } + + /** + * @param full Perform a full sync. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder full(@Nullable Output full) { + $.full = full; + return this; + } + + /** + * @param full Perform a full sync. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder full(Boolean full) { + return full(Output.of(full)); + } + + /** + * @param purge Purge removed entries. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder purge(@Nullable Output purge) { + $.purge = purge; + return this; + } + + /** + * @param purge Purge removed entries. + * + * @return builder + * + * @deprecated + * Deprecated by Proxmox: use<span pulumi-lang-nodejs=" removeVanished " pulumi-lang-dotnet=" RemoveVanished " pulumi-lang-go=" removeVanished " pulumi-lang-python=" remove_vanished " pulumi-lang-yaml=" removeVanished " pulumi-lang-java=" removeVanished "> remove_vanished </span>instead. + * + */ + @Deprecated /* Deprecated by Proxmox: use remove_vanished instead. */ + public Builder purge(Boolean purge) { + return purge(Output.of(purge)); + } + + /** + * @param realm Name of the realm to synchronize. + * + * @return builder + * + */ + public Builder realm(@Nullable Output realm) { + $.realm = realm; + return this; + } + + /** + * @param realm Name of the realm to synchronize. + * + * @return builder + * + */ + public Builder realm(String realm) { + return realm(Output.of(realm)); + } + + /** + * @param removeVanished How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + * @return builder + * + */ + public Builder removeVanished(@Nullable Output removeVanished) { + $.removeVanished = removeVanished; + return this; + } + + /** + * @param removeVanished How to handle vanished entries (e.g. `acl;properties;entry` or <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span>). + * + * @return builder + * + */ + public Builder removeVanished(String removeVanished) { + return removeVanished(Output.of(removeVanished)); + } + + /** + * @param scope Sync scope: users, groups, or both. + * + * @return builder + * + */ + public Builder scope(@Nullable Output scope) { + $.scope = scope; + return this; + } + + /** + * @param scope Sync scope: users, groups, or both. + * + * @return builder + * + */ + public Builder scope(String scope) { + return scope(Output.of(scope)); + } + + public SyncState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OSPF.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OSPF.java new file mode 100644 index 00000000..f8fa34b1 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OSPF.java @@ -0,0 +1,158 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.SDNFabric; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPFArgs; +import io.muehlbachler.pulumi.proxmoxve.SDNFabric.inputs.OSPFState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.String; +import javax.annotation.Nullable; + +/** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPF;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPFArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var main = new OSPF("main", OSPFArgs.builder()
+ *             .ospfId("main-fabric")
+ *             .ipPrefix("10.0.0.0/16")
+ *             .area("0")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:SDNFabric/oSPF:OSPF") +public class OSPF extends com.pulumi.resources.CustomResource { + /** + * OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + @Export(name="area", refs={String.class}, tree="[0]") + private Output area; + + /** + * @return OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + public Output area() { + return this.area; + } + /** + * IPv4 prefix cidr for the fabric. + * + */ + @Export(name="ipPrefix", refs={String.class}, tree="[0]") + private Output ipPrefix; + + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public Output ipPrefix() { + return this.ipPrefix; + } + /** + * The unique identifier of the SDN fabric. + * + */ + @Export(name="ospfId", refs={String.class}, tree="[0]") + private Output ospfId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output ospfId() { + return this.ospfId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public OSPF(java.lang.String name) { + this(name, OSPFArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public OSPF(java.lang.String name, OSPFArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public OSPF(java.lang.String name, OSPFArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:SDNFabric/oSPF:OSPF", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private OSPF(java.lang.String name, Output id, @Nullable OSPFState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:SDNFabric/oSPF:OSPF", name, state, makeResourceOptions(options, id), false); + } + + private static OSPFArgs makeArgs(OSPFArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? OSPFArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static OSPF get(java.lang.String name, Output id, @Nullable OSPFState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new OSPF(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OSPFArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OSPFArgs.java new file mode 100644 index 00000000..cfe6708c --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OSPFArgs.java @@ -0,0 +1,165 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.SDNFabric; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class OSPFArgs extends com.pulumi.resources.ResourceArgs { + + public static final OSPFArgs Empty = new OSPFArgs(); + + /** + * OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + @Import(name="area", required=true) + private Output area; + + /** + * @return OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + public Output area() { + return this.area; + } + + /** + * IPv4 prefix cidr for the fabric. + * + */ + @Import(name="ipPrefix", required=true) + private Output ipPrefix; + + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public Output ipPrefix() { + return this.ipPrefix; + } + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="ospfId", required=true) + private Output ospfId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output ospfId() { + return this.ospfId; + } + + private OSPFArgs() {} + + private OSPFArgs(OSPFArgs $) { + this.area = $.area; + this.ipPrefix = $.ipPrefix; + this.ospfId = $.ospfId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OSPFArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OSPFArgs $; + + public Builder() { + $ = new OSPFArgs(); + } + + public Builder(OSPFArgs defaults) { + $ = new OSPFArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param area OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + * @return builder + * + */ + public Builder area(Output area) { + $.area = area; + return this; + } + + /** + * @param area OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + * @return builder + * + */ + public Builder area(String area) { + return area(Output.of(area)); + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(Output ipPrefix) { + $.ipPrefix = ipPrefix; + return this; + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(String ipPrefix) { + return ipPrefix(Output.of(ipPrefix)); + } + + /** + * @param ospfId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder ospfId(Output ospfId) { + $.ospfId = ospfId; + return this; + } + + /** + * @param ospfId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder ospfId(String ospfId) { + return ospfId(Output.of(ospfId)); + } + + public OSPFArgs build() { + if ($.area == null) { + throw new MissingRequiredPropertyException("OSPFArgs", "area"); + } + if ($.ipPrefix == null) { + throw new MissingRequiredPropertyException("OSPFArgs", "ipPrefix"); + } + if ($.ospfId == null) { + throw new MissingRequiredPropertyException("OSPFArgs", "ospfId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OpenFabric.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OpenFabric.java new file mode 100644 index 00000000..25ad0b00 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OpenFabric.java @@ -0,0 +1,187 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.SDNFabric; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabricArgs; +import io.muehlbachler.pulumi.proxmoxve.SDNFabric.inputs.OpenFabricState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Integer; +import java.lang.String; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabric;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabricArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var main = new OpenFabric("main", OpenFabricArgs.builder()
+ *             .fabricId("main-fabric")
+ *             .ipPrefix("10.0.0.0/16")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:SDNFabric/openFabric:OpenFabric") +public class OpenFabric extends com.pulumi.resources.CustomResource { + /** + * The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + @Export(name="csnpInterval", refs={Integer.class}, tree="[0]") + private Output csnpInterval; + + /** + * @return The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + public Output> csnpInterval() { + return Codegen.optional(this.csnpInterval); + } + /** + * The unique identifier of the SDN fabric. + * + */ + @Export(name="fabricId", refs={String.class}, tree="[0]") + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + /** + * The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + @Export(name="helloInterval", refs={Integer.class}, tree="[0]") + private Output helloInterval; + + /** + * @return The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + public Output> helloInterval() { + return Codegen.optional(this.helloInterval); + } + /** + * IPv6 prefix cidr for the fabric. + * + */ + @Export(name="ip6Prefix", refs={String.class}, tree="[0]") + private Output ip6Prefix; + + /** + * @return IPv6 prefix cidr for the fabric. + * + */ + public Output> ip6Prefix() { + return Codegen.optional(this.ip6Prefix); + } + /** + * IPv4 prefix cidr for the fabric. + * + */ + @Export(name="ipPrefix", refs={String.class}, tree="[0]") + private Output ipPrefix; + + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public Output> ipPrefix() { + return Codegen.optional(this.ipPrefix); + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public OpenFabric(java.lang.String name) { + this(name, OpenFabricArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public OpenFabric(java.lang.String name, OpenFabricArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public OpenFabric(java.lang.String name, OpenFabricArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:SDNFabric/openFabric:OpenFabric", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private OpenFabric(java.lang.String name, Output id, @Nullable OpenFabricState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:SDNFabric/openFabric:OpenFabric", name, state, makeResourceOptions(options, id), false); + } + + private static OpenFabricArgs makeArgs(OpenFabricArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? OpenFabricArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static OpenFabric get(java.lang.String name, Output id, @Nullable OpenFabricState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new OpenFabric(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OpenFabricArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OpenFabricArgs.java new file mode 100644 index 00000000..5c16439e --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/OpenFabricArgs.java @@ -0,0 +1,236 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.SDNFabric; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class OpenFabricArgs extends com.pulumi.resources.ResourceArgs { + + public static final OpenFabricArgs Empty = new OpenFabricArgs(); + + /** + * The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + @Import(name="csnpInterval") + private @Nullable Output csnpInterval; + + /** + * @return The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + public Optional> csnpInterval() { + return Optional.ofNullable(this.csnpInterval); + } + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId", required=true) + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + + /** + * The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + @Import(name="helloInterval") + private @Nullable Output helloInterval; + + /** + * @return The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + public Optional> helloInterval() { + return Optional.ofNullable(this.helloInterval); + } + + /** + * IPv6 prefix cidr for the fabric. + * + */ + @Import(name="ip6Prefix") + private @Nullable Output ip6Prefix; + + /** + * @return IPv6 prefix cidr for the fabric. + * + */ + public Optional> ip6Prefix() { + return Optional.ofNullable(this.ip6Prefix); + } + + /** + * IPv4 prefix cidr for the fabric. + * + */ + @Import(name="ipPrefix") + private @Nullable Output ipPrefix; + + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public Optional> ipPrefix() { + return Optional.ofNullable(this.ipPrefix); + } + + private OpenFabricArgs() {} + + private OpenFabricArgs(OpenFabricArgs $) { + this.csnpInterval = $.csnpInterval; + this.fabricId = $.fabricId; + this.helloInterval = $.helloInterval; + this.ip6Prefix = $.ip6Prefix; + this.ipPrefix = $.ipPrefix; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OpenFabricArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OpenFabricArgs $; + + public Builder() { + $ = new OpenFabricArgs(); + } + + public Builder(OpenFabricArgs defaults) { + $ = new OpenFabricArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param csnpInterval The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder csnpInterval(@Nullable Output csnpInterval) { + $.csnpInterval = csnpInterval; + return this; + } + + /** + * @param csnpInterval The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder csnpInterval(Integer csnpInterval) { + return csnpInterval(Output.of(csnpInterval)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param helloInterval The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder helloInterval(@Nullable Output helloInterval) { + $.helloInterval = helloInterval; + return this; + } + + /** + * @param helloInterval The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder helloInterval(Integer helloInterval) { + return helloInterval(Output.of(helloInterval)); + } + + /** + * @param ip6Prefix IPv6 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ip6Prefix(@Nullable Output ip6Prefix) { + $.ip6Prefix = ip6Prefix; + return this; + } + + /** + * @param ip6Prefix IPv6 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ip6Prefix(String ip6Prefix) { + return ip6Prefix(Output.of(ip6Prefix)); + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(@Nullable Output ipPrefix) { + $.ipPrefix = ipPrefix; + return this; + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(String ipPrefix) { + return ipPrefix(Output.of(ipPrefix)); + } + + public OpenFabricArgs build() { + if ($.fabricId == null) { + throw new MissingRequiredPropertyException("OpenFabricArgs", "fabricId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/inputs/OSPFState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/inputs/OSPFState.java new file mode 100644 index 00000000..cdb18d6f --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/inputs/OSPFState.java @@ -0,0 +1,157 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.SDNFabric.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class OSPFState extends com.pulumi.resources.ResourceArgs { + + public static final OSPFState Empty = new OSPFState(); + + /** + * OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + @Import(name="area") + private @Nullable Output area; + + /** + * @return OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + public Optional> area() { + return Optional.ofNullable(this.area); + } + + /** + * IPv4 prefix cidr for the fabric. + * + */ + @Import(name="ipPrefix") + private @Nullable Output ipPrefix; + + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public Optional> ipPrefix() { + return Optional.ofNullable(this.ipPrefix); + } + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="ospfId") + private @Nullable Output ospfId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Optional> ospfId() { + return Optional.ofNullable(this.ospfId); + } + + private OSPFState() {} + + private OSPFState(OSPFState $) { + this.area = $.area; + this.ipPrefix = $.ipPrefix; + this.ospfId = $.ospfId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OSPFState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OSPFState $; + + public Builder() { + $ = new OSPFState(); + } + + public Builder(OSPFState defaults) { + $ = new OSPFState(Objects.requireNonNull(defaults)); + } + + /** + * @param area OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + * @return builder + * + */ + public Builder area(@Nullable Output area) { + $.area = area; + return this; + } + + /** + * @param area OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + * @return builder + * + */ + public Builder area(String area) { + return area(Output.of(area)); + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(@Nullable Output ipPrefix) { + $.ipPrefix = ipPrefix; + return this; + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(String ipPrefix) { + return ipPrefix(Output.of(ipPrefix)); + } + + /** + * @param ospfId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder ospfId(@Nullable Output ospfId) { + $.ospfId = ospfId; + return this; + } + + /** + * @param ospfId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder ospfId(String ospfId) { + return ospfId(Output.of(ospfId)); + } + + public OSPFState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/inputs/OpenFabricState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/inputs/OpenFabricState.java new file mode 100644 index 00000000..8993e728 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNFabric/inputs/OpenFabricState.java @@ -0,0 +1,232 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.SDNFabric.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class OpenFabricState extends com.pulumi.resources.ResourceArgs { + + public static final OpenFabricState Empty = new OpenFabricState(); + + /** + * The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + @Import(name="csnpInterval") + private @Nullable Output csnpInterval; + + /** + * @return The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + public Optional> csnpInterval() { + return Optional.ofNullable(this.csnpInterval); + } + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId") + private @Nullable Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Optional> fabricId() { + return Optional.ofNullable(this.fabricId); + } + + /** + * The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + @Import(name="helloInterval") + private @Nullable Output helloInterval; + + /** + * @return The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + public Optional> helloInterval() { + return Optional.ofNullable(this.helloInterval); + } + + /** + * IPv6 prefix cidr for the fabric. + * + */ + @Import(name="ip6Prefix") + private @Nullable Output ip6Prefix; + + /** + * @return IPv6 prefix cidr for the fabric. + * + */ + public Optional> ip6Prefix() { + return Optional.ofNullable(this.ip6Prefix); + } + + /** + * IPv4 prefix cidr for the fabric. + * + */ + @Import(name="ipPrefix") + private @Nullable Output ipPrefix; + + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public Optional> ipPrefix() { + return Optional.ofNullable(this.ipPrefix); + } + + private OpenFabricState() {} + + private OpenFabricState(OpenFabricState $) { + this.csnpInterval = $.csnpInterval; + this.fabricId = $.fabricId; + this.helloInterval = $.helloInterval; + this.ip6Prefix = $.ip6Prefix; + this.ipPrefix = $.ipPrefix; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OpenFabricState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OpenFabricState $; + + public Builder() { + $ = new OpenFabricState(); + } + + public Builder(OpenFabricState defaults) { + $ = new OpenFabricState(Objects.requireNonNull(defaults)); + } + + /** + * @param csnpInterval The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder csnpInterval(@Nullable Output csnpInterval) { + $.csnpInterval = csnpInterval; + return this; + } + + /** + * @param csnpInterval The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder csnpInterval(Integer csnpInterval) { + return csnpInterval(Output.of(csnpInterval)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(@Nullable Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param helloInterval The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder helloInterval(@Nullable Output helloInterval) { + $.helloInterval = helloInterval; + return this; + } + + /** + * @param helloInterval The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + * @return builder + * + */ + public Builder helloInterval(Integer helloInterval) { + return helloInterval(Output.of(helloInterval)); + } + + /** + * @param ip6Prefix IPv6 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ip6Prefix(@Nullable Output ip6Prefix) { + $.ip6Prefix = ip6Prefix; + return this; + } + + /** + * @param ip6Prefix IPv6 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ip6Prefix(String ip6Prefix) { + return ip6Prefix(Output.of(ip6Prefix)); + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(@Nullable Output ipPrefix) { + $.ipPrefix = ipPrefix; + return this; + } + + /** + * @param ipPrefix IPv4 prefix cidr for the fabric. + * + * @return builder + * + */ + public Builder ipPrefix(String ipPrefix) { + return ipPrefix(Output.of(ipPrefix)); + } + + public OpenFabricState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Evpn.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Evpn.java index 873685b7..5a1cf897 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Evpn.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Evpn.java @@ -89,14 +89,14 @@ public class Evpn extends com.pulumi.resources.CustomResource { * */ @Export(name="advertiseSubnets", refs={Boolean.class}, tree="[0]") - private Output advertiseSubnets; + private Output advertiseSubnets; /** * @return Enable subnet advertisement for EVPN. * */ - public Output> advertiseSubnets() { - return Codegen.optional(this.advertiseSubnets); + public Output advertiseSubnets() { + return this.advertiseSubnets; } /** * EVPN controller address. @@ -117,14 +117,14 @@ public Output controller() { * */ @Export(name="disableArpNdSuppression", refs={Boolean.class}, tree="[0]") - private Output disableArpNdSuppression; + private Output disableArpNdSuppression; /** * @return Disable ARP/ND suppression for EVPN. * */ - public Output> disableArpNdSuppression() { - return Codegen.optional(this.disableArpNdSuppression); + public Output disableArpNdSuppression() { + return this.disableArpNdSuppression; } /** * DNS API server address. @@ -173,14 +173,14 @@ public Output> exitNodes() { * */ @Export(name="exitNodesLocalRouting", refs={Boolean.class}, tree="[0]") - private Output exitNodesLocalRouting; + private Output exitNodesLocalRouting; /** * @return Enable local routing for EVPN exit nodes. * */ - public Output> exitNodesLocalRouting() { - return Codegen.optional(this.exitNodesLocalRouting); + public Output exitNodesLocalRouting() { + return this.exitNodesLocalRouting; } /** * IP Address Management system. @@ -197,18 +197,18 @@ public Output> ipam() { return Codegen.optional(this.ipam); } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Export(name="mtu", refs={Integer.class}, tree="[0]") - private Output mtu; + private Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ - public Output> mtu() { - return Codegen.optional(this.mtu); + public Output mtu() { + return this.mtu; } /** * The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/EvpnArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/EvpnArgs.java index cb266c7d..55eb16a2 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/EvpnArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/EvpnArgs.java @@ -140,14 +140,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -461,7 +461,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -472,7 +472,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Qinq.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Qinq.java index e1c265b2..d9cf0a99 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Qinq.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Qinq.java @@ -133,18 +133,18 @@ public Output> ipam() { return Codegen.optional(this.ipam); } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Export(name="mtu", refs={Integer.class}, tree="[0]") - private Output mtu; + private Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ - public Output> mtu() { - return Codegen.optional(this.mtu); + public Output mtu() { + return this.mtu; } /** * The Proxmox nodes which the zone and associated VNets should be deployed on @@ -207,14 +207,14 @@ public Output serviceVlan() { * */ @Export(name="serviceVlanProtocol", refs={String.class}, tree="[0]") - private Output serviceVlanProtocol; + private Output serviceVlanProtocol; /** * @return Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`. * */ - public Output> serviceVlanProtocol() { - return Codegen.optional(this.serviceVlanProtocol); + public Output serviceVlanProtocol() { + return this.serviceVlanProtocol; } /** * Indicates the current state of the zone. diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/QinqArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/QinqArgs.java index d2e8665b..a4d522b4 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/QinqArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/QinqArgs.java @@ -79,14 +79,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -286,7 +286,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -297,7 +297,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Simple.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Simple.java index 446b3251..fe9084bc 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Simple.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Simple.java @@ -131,18 +131,18 @@ public Output> ipam() { return Codegen.optional(this.ipam); } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Export(name="mtu", refs={Integer.class}, tree="[0]") - private Output mtu; + private Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ - public Output> mtu() { - return Codegen.optional(this.mtu); + public Output mtu() { + return this.mtu; } /** * The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/SimpleArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/SimpleArgs.java index fcf32039..11ce2557 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/SimpleArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/SimpleArgs.java @@ -79,14 +79,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -254,7 +254,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -265,7 +265,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vlan.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vlan.java index b9158c44..21a45d96 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vlan.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vlan.java @@ -131,18 +131,18 @@ public Output> ipam() { return Codegen.optional(this.ipam); } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Export(name="mtu", refs={Integer.class}, tree="[0]") - private Output mtu; + private Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ - public Output> mtu() { - return Codegen.optional(this.mtu); + public Output mtu() { + return this.mtu; } /** * The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VlanArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VlanArgs.java index c57c2dc5..920d8811 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VlanArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VlanArgs.java @@ -79,14 +79,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -254,7 +254,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -265,7 +265,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vxlan.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vxlan.java index 8fe3fa5d..3467db39 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vxlan.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/Vxlan.java @@ -120,18 +120,18 @@ public Output> ipam() { return Codegen.optional(this.ipam); } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Export(name="mtu", refs={Integer.class}, tree="[0]") - private Output mtu; + private Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ - public Output> mtu() { - return Codegen.optional(this.mtu); + public Output mtu() { + return this.mtu; } /** * The Proxmox nodes which the zone and associated VNets should be deployed on diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VxlanArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VxlanArgs.java index 14333fc7..61d64222 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VxlanArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/VxlanArgs.java @@ -64,14 +64,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -233,7 +233,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -244,7 +244,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/EvpnState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/EvpnState.java index fcb1a09c..7fe73dab 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/EvpnState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/EvpnState.java @@ -139,14 +139,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -492,7 +492,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -503,7 +503,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/QinqState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/QinqState.java index bf1e0fe2..f2cb39e7 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/QinqState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/QinqState.java @@ -79,14 +79,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -318,7 +318,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -329,7 +329,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/SimpleState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/SimpleState.java index 710da29c..8ba2cf59 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/SimpleState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/SimpleState.java @@ -79,14 +79,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -286,7 +286,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -297,7 +297,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VlanState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VlanState.java index 590b0f32..9ce8c905 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VlanState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VlanState.java @@ -79,14 +79,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -286,7 +286,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -297,7 +297,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VxlanState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VxlanState.java index 7303ac3c..14ba03c7 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VxlanState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/SDNZone/inputs/VxlanState.java @@ -64,14 +64,14 @@ public Optional> ipam() { } /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ @Import(name="mtu") private @Nullable Output mtu; /** - * @return MTU value for the zone. + * @return MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * */ public Optional> mtu() { @@ -265,7 +265,7 @@ public Builder ipam(String ipam) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * @@ -276,7 +276,7 @@ public Builder mtu(@Nullable Output mtu) { } /** - * @param mtu MTU value for the zone. + * @param mtu MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/Sdn_fabricFunctions.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/Sdn_fabricFunctions.java new file mode 100644 index 00000000..8a9b74f9 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/Sdn_fabricFunctions.java @@ -0,0 +1,441 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric; + +import com.pulumi.core.Output; +import com.pulumi.core.TypeShape; +import com.pulumi.deployment.Deployment; +import com.pulumi.deployment.InvokeOptions; +import com.pulumi.deployment.InvokeOutputOptions; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs.GetOpenfabricArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs.GetOpenfabricPlainArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs.GetOspfArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs.GetOspfPlainArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.outputs.GetOpenfabricResult; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.outputs.GetOspfResult; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.util.concurrent.CompletableFuture; + +public final class Sdn_fabricFunctions { + /** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOpenfabric(GetOpenfabricArgs args) { + return getOpenfabric(args, InvokeOptions.Empty); + } + /** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOpenfabricPlain(GetOpenfabricPlainArgs args) { + return getOpenfabricPlain(args, InvokeOptions.Empty); + } + /** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOpenfabric(GetOpenfabricArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", TypeShape.of(GetOpenfabricResult.class), args, Utilities.withVersion(options)); + } + /** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOpenfabric(GetOpenfabricArgs args, InvokeOutputOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", TypeShape.of(GetOpenfabricResult.class), args, Utilities.withVersion(options)); + } + /** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOpenfabricPlain(GetOpenfabricPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", TypeShape.of(GetOpenfabricResult.class), args, Utilities.withVersion(options)); + } + /** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOspf(GetOspfArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOspf(GetOspfArgs args) { + return getOspf(args, InvokeOptions.Empty); + } + /** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOspf(GetOspfArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOspfPlain(GetOspfPlainArgs args) { + return getOspfPlain(args, InvokeOptions.Empty); + } + /** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOspf(GetOspfArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOspf(GetOspfArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/getOspf:getOspf", TypeShape.of(GetOspfResult.class), args, Utilities.withVersion(options)); + } + /** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOspf(GetOspfArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOspf(GetOspfArgs args, InvokeOutputOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/getOspf:getOspf", TypeShape.of(GetOspfResult.class), args, Utilities.withVersion(options)); + } + /** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric.Sdn_fabricFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabricFunctions.getOspf(GetOspfArgs.builder()
+     *             .id("main-fabric")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOspfPlain(GetOspfPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("proxmoxve:Sdn/fabric/getOspf:getOspf", TypeShape.of(GetOspfResult.class), args, Utilities.withVersion(options)); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOpenfabricArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOpenfabricArgs.java new file mode 100644 index 00000000..89323187 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOpenfabricArgs.java @@ -0,0 +1,85 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOpenfabricArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOpenfabricArgs Empty = new GetOpenfabricArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="id", required=true) + private Output id; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output id() { + return this.id; + } + + private GetOpenfabricArgs() {} + + private GetOpenfabricArgs(GetOpenfabricArgs $) { + this.id = $.id; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOpenfabricArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOpenfabricArgs $; + + public Builder() { + $ = new GetOpenfabricArgs(); + } + + public Builder(GetOpenfabricArgs defaults) { + $ = new GetOpenfabricArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param id The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder id(Output id) { + $.id = id; + return this; + } + + /** + * @param id The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder id(String id) { + return id(Output.of(id)); + } + + public GetOpenfabricArgs build() { + if ($.id == null) { + throw new MissingRequiredPropertyException("GetOpenfabricArgs", "id"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOpenfabricPlainArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOpenfabricPlainArgs.java new file mode 100644 index 00000000..fc111ed5 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOpenfabricPlainArgs.java @@ -0,0 +1,74 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOpenfabricPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOpenfabricPlainArgs Empty = new GetOpenfabricPlainArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="id", required=true) + private String id; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String id() { + return this.id; + } + + private GetOpenfabricPlainArgs() {} + + private GetOpenfabricPlainArgs(GetOpenfabricPlainArgs $) { + this.id = $.id; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOpenfabricPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOpenfabricPlainArgs $; + + public Builder() { + $ = new GetOpenfabricPlainArgs(); + } + + public Builder(GetOpenfabricPlainArgs defaults) { + $ = new GetOpenfabricPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param id The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder id(String id) { + $.id = id; + return this; + } + + public GetOpenfabricPlainArgs build() { + if ($.id == null) { + throw new MissingRequiredPropertyException("GetOpenfabricPlainArgs", "id"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOspfArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOspfArgs.java new file mode 100644 index 00000000..747c3903 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOspfArgs.java @@ -0,0 +1,85 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOspfArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOspfArgs Empty = new GetOspfArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="id", required=true) + private Output id; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output id() { + return this.id; + } + + private GetOspfArgs() {} + + private GetOspfArgs(GetOspfArgs $) { + this.id = $.id; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOspfArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOspfArgs $; + + public Builder() { + $ = new GetOspfArgs(); + } + + public Builder(GetOspfArgs defaults) { + $ = new GetOspfArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param id The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder id(Output id) { + $.id = id; + return this; + } + + /** + * @param id The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder id(String id) { + return id(Output.of(id)); + } + + public GetOspfArgs build() { + if ($.id == null) { + throw new MissingRequiredPropertyException("GetOspfArgs", "id"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOspfPlainArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOspfPlainArgs.java new file mode 100644 index 00000000..d6d34d27 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/inputs/GetOspfPlainArgs.java @@ -0,0 +1,74 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOspfPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOspfPlainArgs Empty = new GetOspfPlainArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="id", required=true) + private String id; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String id() { + return this.id; + } + + private GetOspfPlainArgs() {} + + private GetOspfPlainArgs(GetOspfPlainArgs $) { + this.id = $.id; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOspfPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOspfPlainArgs $; + + public Builder() { + $ = new GetOspfPlainArgs(); + } + + public Builder(GetOspfPlainArgs defaults) { + $ = new GetOspfPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param id The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder id(String id) { + $.id = id; + return this; + } + + public GetOspfPlainArgs build() { + if ($.id == null) { + throw new MissingRequiredPropertyException("GetOspfPlainArgs", "id"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/outputs/GetOpenfabricResult.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/outputs/GetOpenfabricResult.java new file mode 100644 index 00000000..178bf16a --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/outputs/GetOpenfabricResult.java @@ -0,0 +1,151 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetOpenfabricResult { + /** + * @return The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + private Integer csnpInterval; + /** + * @return The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + private Integer helloInterval; + /** + * @return The unique identifier of the SDN fabric. + * + */ + private String id; + /** + * @return IPv6 prefix cidr for the fabric. + * + */ + private String ip6Prefix; + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + private String ipPrefix; + + private GetOpenfabricResult() {} + /** + * @return The<span pulumi-lang-nodejs=" csnpInterval " pulumi-lang-dotnet=" CsnpInterval " pulumi-lang-go=" csnpInterval " pulumi-lang-python=" csnp_interval " pulumi-lang-yaml=" csnpInterval " pulumi-lang-java=" csnpInterval "> csnp_interval </span>property for OpenFabric. + * + */ + public Integer csnpInterval() { + return this.csnpInterval; + } + /** + * @return The<span pulumi-lang-nodejs=" helloInterval " pulumi-lang-dotnet=" HelloInterval " pulumi-lang-go=" helloInterval " pulumi-lang-python=" hello_interval " pulumi-lang-yaml=" helloInterval " pulumi-lang-java=" helloInterval "> hello_interval </span>property for OpenFabric. + * + */ + public Integer helloInterval() { + return this.helloInterval; + } + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String id() { + return this.id; + } + /** + * @return IPv6 prefix cidr for the fabric. + * + */ + public String ip6Prefix() { + return this.ip6Prefix; + } + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public String ipPrefix() { + return this.ipPrefix; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetOpenfabricResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Integer csnpInterval; + private Integer helloInterval; + private String id; + private String ip6Prefix; + private String ipPrefix; + public Builder() {} + public Builder(GetOpenfabricResult defaults) { + Objects.requireNonNull(defaults); + this.csnpInterval = defaults.csnpInterval; + this.helloInterval = defaults.helloInterval; + this.id = defaults.id; + this.ip6Prefix = defaults.ip6Prefix; + this.ipPrefix = defaults.ipPrefix; + } + + @CustomType.Setter + public Builder csnpInterval(Integer csnpInterval) { + if (csnpInterval == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "csnpInterval"); + } + this.csnpInterval = csnpInterval; + return this; + } + @CustomType.Setter + public Builder helloInterval(Integer helloInterval) { + if (helloInterval == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "helloInterval"); + } + this.helloInterval = helloInterval; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder ip6Prefix(String ip6Prefix) { + if (ip6Prefix == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "ip6Prefix"); + } + this.ip6Prefix = ip6Prefix; + return this; + } + @CustomType.Setter + public Builder ipPrefix(String ipPrefix) { + if (ipPrefix == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "ipPrefix"); + } + this.ipPrefix = ipPrefix; + return this; + } + public GetOpenfabricResult build() { + final var _resultValue = new GetOpenfabricResult(); + _resultValue.csnpInterval = csnpInterval; + _resultValue.helloInterval = helloInterval; + _resultValue.id = id; + _resultValue.ip6Prefix = ip6Prefix; + _resultValue.ipPrefix = ipPrefix; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/outputs/GetOspfResult.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/outputs/GetOspfResult.java new file mode 100644 index 00000000..7682020f --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric/outputs/GetOspfResult.java @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetOspfResult { + /** + * @return OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + private String area; + /** + * @return The unique identifier of the SDN fabric. + * + */ + private String id; + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + private String ipPrefix; + + private GetOspfResult() {} + /** + * @return OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + * + */ + public String area() { + return this.area; + } + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String id() { + return this.id; + } + /** + * @return IPv4 prefix cidr for the fabric. + * + */ + public String ipPrefix() { + return this.ipPrefix; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetOspfResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String area; + private String id; + private String ipPrefix; + public Builder() {} + public Builder(GetOspfResult defaults) { + Objects.requireNonNull(defaults); + this.area = defaults.area; + this.id = defaults.id; + this.ipPrefix = defaults.ipPrefix; + } + + @CustomType.Setter + public Builder area(String area) { + if (area == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "area"); + } + this.area = area; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder ipPrefix(String ipPrefix) { + if (ipPrefix == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "ipPrefix"); + } + this.ipPrefix = ipPrefix; + return this; + } + public GetOspfResult build() { + final var _resultValue = new GetOspfResult(); + _resultValue.area = area; + _resultValue.id = id; + _resultValue.ipPrefix = ipPrefix; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Openfabric.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Openfabric.java new file mode 100644 index 00000000..1bc5e271 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Openfabric.java @@ -0,0 +1,198 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.OpenfabricArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs.OpenfabricState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabric;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OpenFabricArgs;
+ * import io.muehlbachler.pulumi.proxmoxve.Sdn.Openfabric;
+ * import io.muehlbachler.pulumi.proxmoxve.Sdn.OpenfabricArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var main = new OpenFabric("main", OpenFabricArgs.builder()
+ *             .fabricId("main-fabric")
+ *             .ipPrefix("10.0.0.0/16")
+ *             .build());
+ * 
+ *         var mainOpenfabric = new Openfabric("mainOpenfabric", OpenfabricArgs.builder()
+ *             .fabricId(main.fabricId())
+ *             .nodeId("pve")
+ *             .ip("10.0.0.1")
+ *             .interfaceNames(            
+ *                 "nic0",
+ *                 "nic1")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Sdn/fabric/node/openfabric:Openfabric") +public class Openfabric extends com.pulumi.resources.CustomResource { + /** + * The unique identifier of the SDN fabric. + * + */ + @Export(name="fabricId", refs={String.class}, tree="[0]") + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + /** + * Set of interfaces associated with the fabric node. + * + */ + @Export(name="interfaceNames", refs={List.class,String.class}, tree="[0,1]") + private Output> interfaceNames; + + /** + * @return Set of interfaces associated with the fabric node. + * + */ + public Output> interfaceNames() { + return this.interfaceNames; + } + /** + * IPv4 address for the fabric node. + * + */ + @Export(name="ip", refs={String.class}, tree="[0]") + private Output ip; + + /** + * @return IPv4 address for the fabric node. + * + */ + public Output> ip() { + return Codegen.optional(this.ip); + } + /** + * IPv6 address for the fabric node. + * + */ + @Export(name="ip6", refs={String.class}, tree="[0]") + private Output ip6; + + /** + * @return IPv6 address for the fabric node. + * + */ + public Output> ip6() { + return Codegen.optional(this.ip6); + } + /** + * The unique identifier of the SDN fabric. + * + */ + @Export(name="nodeId", refs={String.class}, tree="[0]") + private Output nodeId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output nodeId() { + return this.nodeId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Openfabric(java.lang.String name) { + this(name, OpenfabricArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Openfabric(java.lang.String name, OpenfabricArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Openfabric(java.lang.String name, OpenfabricArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Sdn/fabric/node/openfabric:Openfabric", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Openfabric(java.lang.String name, Output id, @Nullable OpenfabricState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Sdn/fabric/node/openfabric:Openfabric", name, state, makeResourceOptions(options, id), false); + } + + private static OpenfabricArgs makeArgs(OpenfabricArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? OpenfabricArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Openfabric get(java.lang.String name, Output id, @Nullable OpenfabricState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Openfabric(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/OpenfabricArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/OpenfabricArgs.java new file mode 100644 index 00000000..b2f403bc --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/OpenfabricArgs.java @@ -0,0 +1,252 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class OpenfabricArgs extends com.pulumi.resources.ResourceArgs { + + public static final OpenfabricArgs Empty = new OpenfabricArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId", required=true) + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + + /** + * Set of interfaces associated with the fabric node. + * + */ + @Import(name="interfaceNames", required=true) + private Output> interfaceNames; + + /** + * @return Set of interfaces associated with the fabric node. + * + */ + public Output> interfaceNames() { + return this.interfaceNames; + } + + /** + * IPv4 address for the fabric node. + * + */ + @Import(name="ip") + private @Nullable Output ip; + + /** + * @return IPv4 address for the fabric node. + * + */ + public Optional> ip() { + return Optional.ofNullable(this.ip); + } + + /** + * IPv6 address for the fabric node. + * + */ + @Import(name="ip6") + private @Nullable Output ip6; + + /** + * @return IPv6 address for the fabric node. + * + */ + public Optional> ip6() { + return Optional.ofNullable(this.ip6); + } + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="nodeId", required=true) + private Output nodeId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output nodeId() { + return this.nodeId; + } + + private OpenfabricArgs() {} + + private OpenfabricArgs(OpenfabricArgs $) { + this.fabricId = $.fabricId; + this.interfaceNames = $.interfaceNames; + this.ip = $.ip; + this.ip6 = $.ip6; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OpenfabricArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OpenfabricArgs $; + + public Builder() { + $ = new OpenfabricArgs(); + } + + public Builder(OpenfabricArgs defaults) { + $ = new OpenfabricArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(Output> interfaceNames) { + $.interfaceNames = interfaceNames; + return this; + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(List interfaceNames) { + return interfaceNames(Output.of(interfaceNames)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(String... interfaceNames) { + return interfaceNames(List.of(interfaceNames)); + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(@Nullable Output ip) { + $.ip = ip; + return this; + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(String ip) { + return ip(Output.of(ip)); + } + + /** + * @param ip6 IPv6 address for the fabric node. + * + * @return builder + * + */ + public Builder ip6(@Nullable Output ip6) { + $.ip6 = ip6; + return this; + } + + /** + * @param ip6 IPv6 address for the fabric node. + * + * @return builder + * + */ + public Builder ip6(String ip6) { + return ip6(Output.of(ip6)); + } + + /** + * @param nodeId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder nodeId(Output nodeId) { + $.nodeId = nodeId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + return nodeId(Output.of(nodeId)); + } + + public OpenfabricArgs build() { + if ($.fabricId == null) { + throw new MissingRequiredPropertyException("OpenfabricArgs", "fabricId"); + } + if ($.interfaceNames == null) { + throw new MissingRequiredPropertyException("OpenfabricArgs", "interfaceNames"); + } + if ($.nodeId == null) { + throw new MissingRequiredPropertyException("OpenfabricArgs", "nodeId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Ospf.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Ospf.java new file mode 100644 index 00000000..d1556381 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Ospf.java @@ -0,0 +1,184 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.OspfArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs.OspfState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.String; +import java.util.List; +import javax.annotation.Nullable; + +/** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPF;
+ * import io.muehlbachler.pulumi.proxmoxve.SDNFabric.OSPFArgs;
+ * import io.muehlbachler.pulumi.proxmoxve.Sdn.Ospf;
+ * import io.muehlbachler.pulumi.proxmoxve.Sdn.OspfArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var main = new OSPF("main", OSPFArgs.builder()
+ *             .ospfId("main-fabric")
+ *             .ipPrefix("10.0.0.0/16")
+ *             .area("0")
+ *             .build());
+ * 
+ *         var mainOspf = new Ospf("mainOspf", OspfArgs.builder()
+ *             .fabricId(main.ospfId())
+ *             .nodeId("pve")
+ *             .ip("10.0.0.1")
+ *             .interfaceNames(            
+ *                 "nic0",
+ *                 "nic1")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Sdn/fabric/node/ospf:Ospf") +public class Ospf extends com.pulumi.resources.CustomResource { + /** + * The unique identifier of the SDN fabric. + * + */ + @Export(name="fabricId", refs={String.class}, tree="[0]") + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + /** + * Set of interfaces associated with the fabric node. + * + */ + @Export(name="interfaceNames", refs={List.class,String.class}, tree="[0,1]") + private Output> interfaceNames; + + /** + * @return Set of interfaces associated with the fabric node. + * + */ + public Output> interfaceNames() { + return this.interfaceNames; + } + /** + * IPv4 address for the fabric node. + * + */ + @Export(name="ip", refs={String.class}, tree="[0]") + private Output ip; + + /** + * @return IPv4 address for the fabric node. + * + */ + public Output ip() { + return this.ip; + } + /** + * The unique identifier of the SDN fabric node. + * + */ + @Export(name="nodeId", refs={String.class}, tree="[0]") + private Output nodeId; + + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public Output nodeId() { + return this.nodeId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Ospf(java.lang.String name) { + this(name, OspfArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Ospf(java.lang.String name, OspfArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Ospf(java.lang.String name, OspfArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Sdn/fabric/node/ospf:Ospf", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Ospf(java.lang.String name, Output id, @Nullable OspfState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Sdn/fabric/node/ospf:Ospf", name, state, makeResourceOptions(options, id), false); + } + + private static OspfArgs makeArgs(OspfArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? OspfArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Ospf get(java.lang.String name, Output id, @Nullable OspfState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Ospf(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/OspfArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/OspfArgs.java new file mode 100644 index 00000000..7a499b54 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/OspfArgs.java @@ -0,0 +1,216 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; + + +public final class OspfArgs extends com.pulumi.resources.ResourceArgs { + + public static final OspfArgs Empty = new OspfArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId", required=true) + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + + /** + * Set of interfaces associated with the fabric node. + * + */ + @Import(name="interfaceNames", required=true) + private Output> interfaceNames; + + /** + * @return Set of interfaces associated with the fabric node. + * + */ + public Output> interfaceNames() { + return this.interfaceNames; + } + + /** + * IPv4 address for the fabric node. + * + */ + @Import(name="ip", required=true) + private Output ip; + + /** + * @return IPv4 address for the fabric node. + * + */ + public Output ip() { + return this.ip; + } + + /** + * The unique identifier of the SDN fabric node. + * + */ + @Import(name="nodeId", required=true) + private Output nodeId; + + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public Output nodeId() { + return this.nodeId; + } + + private OspfArgs() {} + + private OspfArgs(OspfArgs $) { + this.fabricId = $.fabricId; + this.interfaceNames = $.interfaceNames; + this.ip = $.ip; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OspfArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OspfArgs $; + + public Builder() { + $ = new OspfArgs(); + } + + public Builder(OspfArgs defaults) { + $ = new OspfArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(Output> interfaceNames) { + $.interfaceNames = interfaceNames; + return this; + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(List interfaceNames) { + return interfaceNames(Output.of(interfaceNames)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(String... interfaceNames) { + return interfaceNames(List.of(interfaceNames)); + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(Output ip) { + $.ip = ip; + return this; + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(String ip) { + return ip(Output.of(ip)); + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(Output nodeId) { + $.nodeId = nodeId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + return nodeId(Output.of(nodeId)); + } + + public OspfArgs build() { + if ($.fabricId == null) { + throw new MissingRequiredPropertyException("OspfArgs", "fabricId"); + } + if ($.interfaceNames == null) { + throw new MissingRequiredPropertyException("OspfArgs", "interfaceNames"); + } + if ($.ip == null) { + throw new MissingRequiredPropertyException("OspfArgs", "ip"); + } + if ($.nodeId == null) { + throw new MissingRequiredPropertyException("OspfArgs", "nodeId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Sdn_fabric_nodeFunctions.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Sdn_fabric_nodeFunctions.java new file mode 100644 index 00000000..10d5af8b --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/Sdn_fabric_nodeFunctions.java @@ -0,0 +1,451 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node; + +import com.pulumi.core.Output; +import com.pulumi.core.TypeShape; +import com.pulumi.deployment.Deployment; +import com.pulumi.deployment.InvokeOptions; +import com.pulumi.deployment.InvokeOutputOptions; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs.GetOpenfabricArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs.GetOpenfabricPlainArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs.GetOspfArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs.GetOspfPlainArgs; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.outputs.GetOpenfabricResult; +import io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.outputs.GetOspfResult; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.util.concurrent.CompletableFuture; + +public final class Sdn_fabric_nodeFunctions { + /** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOpenfabric(GetOpenfabricArgs args) { + return getOpenfabric(args, InvokeOptions.Empty); + } + /** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOpenfabricPlain(GetOpenfabricPlainArgs args) { + return getOpenfabricPlain(args, InvokeOptions.Empty); + } + /** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOpenfabric(GetOpenfabricArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", TypeShape.of(GetOpenfabricResult.class), args, Utilities.withVersion(options)); + } + /** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOpenfabric(GetOpenfabricArgs args, InvokeOutputOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", TypeShape.of(GetOpenfabricResult.class), args, Utilities.withVersion(options)); + } + /** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOpenfabricArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOpenfabric(GetOpenfabricArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOpenfabricPlain(GetOpenfabricPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", TypeShape.of(GetOpenfabricResult.class), args, Utilities.withVersion(options)); + } + /** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOspf(GetOspfArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOspf(GetOspfArgs args) { + return getOspf(args, InvokeOptions.Empty); + } + /** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOspf(GetOspfArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOspfPlain(GetOspfPlainArgs args) { + return getOspfPlain(args, InvokeOptions.Empty); + } + /** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOspf(GetOspfArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOspf(GetOspfArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/node/getOspf:getOspf", TypeShape.of(GetOspfResult.class), args, Utilities.withVersion(options)); + } + /** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOspf(GetOspfArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getOspf(GetOspfArgs args, InvokeOutputOptions options) { + return Deployment.getInstance().invoke("proxmoxve:Sdn/fabric/node/getOspf:getOspf", TypeShape.of(GetOspfResult.class), args, Utilities.withVersion(options)); + } + /** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.proxmoxve.Sdn_fabric_node.Sdn_fabric_nodeFunctions;
+     * import com.pulumi.proxmoxve.Sdn.inputs.GetOspfArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var main = Sdn_fabric_nodeFunctions.getOspf(GetOspfArgs.builder()
+     *             .fabricId("main-fabric")
+     *             .nodeId("pve")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getOspfPlain(GetOspfPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("proxmoxve:Sdn/fabric/node/getOspf:getOspf", TypeShape.of(GetOspfResult.class), args, Utilities.withVersion(options)); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOpenfabricArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOpenfabricArgs.java new file mode 100644 index 00000000..0dbd9297 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOpenfabricArgs.java @@ -0,0 +1,125 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOpenfabricArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOpenfabricArgs Empty = new GetOpenfabricArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId", required=true) + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + + /** + * The unique identifier of the SDN fabric node. + * + */ + @Import(name="nodeId", required=true) + private Output nodeId; + + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public Output nodeId() { + return this.nodeId; + } + + private GetOpenfabricArgs() {} + + private GetOpenfabricArgs(GetOpenfabricArgs $) { + this.fabricId = $.fabricId; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOpenfabricArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOpenfabricArgs $; + + public Builder() { + $ = new GetOpenfabricArgs(); + } + + public Builder(GetOpenfabricArgs defaults) { + $ = new GetOpenfabricArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(Output nodeId) { + $.nodeId = nodeId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + return nodeId(Output.of(nodeId)); + } + + public GetOpenfabricArgs build() { + if ($.fabricId == null) { + throw new MissingRequiredPropertyException("GetOpenfabricArgs", "fabricId"); + } + if ($.nodeId == null) { + throw new MissingRequiredPropertyException("GetOpenfabricArgs", "nodeId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOpenfabricPlainArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOpenfabricPlainArgs.java new file mode 100644 index 00000000..f4002d21 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOpenfabricPlainArgs.java @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOpenfabricPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOpenfabricPlainArgs Empty = new GetOpenfabricPlainArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId", required=true) + private String fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String fabricId() { + return this.fabricId; + } + + /** + * The unique identifier of the SDN fabric node. + * + */ + @Import(name="nodeId", required=true) + private String nodeId; + + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public String nodeId() { + return this.nodeId; + } + + private GetOpenfabricPlainArgs() {} + + private GetOpenfabricPlainArgs(GetOpenfabricPlainArgs $) { + this.fabricId = $.fabricId; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOpenfabricPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOpenfabricPlainArgs $; + + public Builder() { + $ = new GetOpenfabricPlainArgs(); + } + + public Builder(GetOpenfabricPlainArgs defaults) { + $ = new GetOpenfabricPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + $.nodeId = nodeId; + return this; + } + + public GetOpenfabricPlainArgs build() { + if ($.fabricId == null) { + throw new MissingRequiredPropertyException("GetOpenfabricPlainArgs", "fabricId"); + } + if ($.nodeId == null) { + throw new MissingRequiredPropertyException("GetOpenfabricPlainArgs", "nodeId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOspfArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOspfArgs.java new file mode 100644 index 00000000..93a8b308 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOspfArgs.java @@ -0,0 +1,125 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOspfArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOspfArgs Empty = new GetOspfArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId", required=true) + private Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Output fabricId() { + return this.fabricId; + } + + /** + * The unique identifier of the SDN fabric node. + * + */ + @Import(name="nodeId", required=true) + private Output nodeId; + + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public Output nodeId() { + return this.nodeId; + } + + private GetOspfArgs() {} + + private GetOspfArgs(GetOspfArgs $) { + this.fabricId = $.fabricId; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOspfArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOspfArgs $; + + public Builder() { + $ = new GetOspfArgs(); + } + + public Builder(GetOspfArgs defaults) { + $ = new GetOspfArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(Output nodeId) { + $.nodeId = nodeId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + return nodeId(Output.of(nodeId)); + } + + public GetOspfArgs build() { + if ($.fabricId == null) { + throw new MissingRequiredPropertyException("GetOspfArgs", "fabricId"); + } + if ($.nodeId == null) { + throw new MissingRequiredPropertyException("GetOspfArgs", "nodeId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOspfPlainArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOspfPlainArgs.java new file mode 100644 index 00000000..d003b464 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/GetOspfPlainArgs.java @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetOspfPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetOspfPlainArgs Empty = new GetOspfPlainArgs(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId", required=true) + private String fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String fabricId() { + return this.fabricId; + } + + /** + * The unique identifier of the SDN fabric node. + * + */ + @Import(name="nodeId", required=true) + private String nodeId; + + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public String nodeId() { + return this.nodeId; + } + + private GetOspfPlainArgs() {} + + private GetOspfPlainArgs(GetOspfPlainArgs $) { + this.fabricId = $.fabricId; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetOspfPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetOspfPlainArgs $; + + public Builder() { + $ = new GetOspfPlainArgs(); + } + + public Builder(GetOspfPlainArgs defaults) { + $ = new GetOspfPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + $.nodeId = nodeId; + return this; + } + + public GetOspfPlainArgs build() { + if ($.fabricId == null) { + throw new MissingRequiredPropertyException("GetOspfPlainArgs", "fabricId"); + } + if ($.nodeId == null) { + throw new MissingRequiredPropertyException("GetOspfPlainArgs", "nodeId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/OpenfabricState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/OpenfabricState.java new file mode 100644 index 00000000..b7b6526e --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/OpenfabricState.java @@ -0,0 +1,242 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class OpenfabricState extends com.pulumi.resources.ResourceArgs { + + public static final OpenfabricState Empty = new OpenfabricState(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId") + private @Nullable Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Optional> fabricId() { + return Optional.ofNullable(this.fabricId); + } + + /** + * Set of interfaces associated with the fabric node. + * + */ + @Import(name="interfaceNames") + private @Nullable Output> interfaceNames; + + /** + * @return Set of interfaces associated with the fabric node. + * + */ + public Optional>> interfaceNames() { + return Optional.ofNullable(this.interfaceNames); + } + + /** + * IPv4 address for the fabric node. + * + */ + @Import(name="ip") + private @Nullable Output ip; + + /** + * @return IPv4 address for the fabric node. + * + */ + public Optional> ip() { + return Optional.ofNullable(this.ip); + } + + /** + * IPv6 address for the fabric node. + * + */ + @Import(name="ip6") + private @Nullable Output ip6; + + /** + * @return IPv6 address for the fabric node. + * + */ + public Optional> ip6() { + return Optional.ofNullable(this.ip6); + } + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="nodeId") + private @Nullable Output nodeId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Optional> nodeId() { + return Optional.ofNullable(this.nodeId); + } + + private OpenfabricState() {} + + private OpenfabricState(OpenfabricState $) { + this.fabricId = $.fabricId; + this.interfaceNames = $.interfaceNames; + this.ip = $.ip; + this.ip6 = $.ip6; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OpenfabricState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OpenfabricState $; + + public Builder() { + $ = new OpenfabricState(); + } + + public Builder(OpenfabricState defaults) { + $ = new OpenfabricState(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(@Nullable Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(@Nullable Output> interfaceNames) { + $.interfaceNames = interfaceNames; + return this; + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(List interfaceNames) { + return interfaceNames(Output.of(interfaceNames)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(String... interfaceNames) { + return interfaceNames(List.of(interfaceNames)); + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(@Nullable Output ip) { + $.ip = ip; + return this; + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(String ip) { + return ip(Output.of(ip)); + } + + /** + * @param ip6 IPv6 address for the fabric node. + * + * @return builder + * + */ + public Builder ip6(@Nullable Output ip6) { + $.ip6 = ip6; + return this; + } + + /** + * @param ip6 IPv6 address for the fabric node. + * + * @return builder + * + */ + public Builder ip6(String ip6) { + return ip6(Output.of(ip6)); + } + + /** + * @param nodeId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder nodeId(@Nullable Output nodeId) { + $.nodeId = nodeId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + return nodeId(Output.of(nodeId)); + } + + public OpenfabricState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/OspfState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/OspfState.java new file mode 100644 index 00000000..c8fc75bc --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/inputs/OspfState.java @@ -0,0 +1,205 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class OspfState extends com.pulumi.resources.ResourceArgs { + + public static final OspfState Empty = new OspfState(); + + /** + * The unique identifier of the SDN fabric. + * + */ + @Import(name="fabricId") + private @Nullable Output fabricId; + + /** + * @return The unique identifier of the SDN fabric. + * + */ + public Optional> fabricId() { + return Optional.ofNullable(this.fabricId); + } + + /** + * Set of interfaces associated with the fabric node. + * + */ + @Import(name="interfaceNames") + private @Nullable Output> interfaceNames; + + /** + * @return Set of interfaces associated with the fabric node. + * + */ + public Optional>> interfaceNames() { + return Optional.ofNullable(this.interfaceNames); + } + + /** + * IPv4 address for the fabric node. + * + */ + @Import(name="ip") + private @Nullable Output ip; + + /** + * @return IPv4 address for the fabric node. + * + */ + public Optional> ip() { + return Optional.ofNullable(this.ip); + } + + /** + * The unique identifier of the SDN fabric node. + * + */ + @Import(name="nodeId") + private @Nullable Output nodeId; + + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public Optional> nodeId() { + return Optional.ofNullable(this.nodeId); + } + + private OspfState() {} + + private OspfState(OspfState $) { + this.fabricId = $.fabricId; + this.interfaceNames = $.interfaceNames; + this.ip = $.ip; + this.nodeId = $.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(OspfState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private OspfState $; + + public Builder() { + $ = new OspfState(); + } + + public Builder(OspfState defaults) { + $ = new OspfState(Objects.requireNonNull(defaults)); + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(@Nullable Output fabricId) { + $.fabricId = fabricId; + return this; + } + + /** + * @param fabricId The unique identifier of the SDN fabric. + * + * @return builder + * + */ + public Builder fabricId(String fabricId) { + return fabricId(Output.of(fabricId)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(@Nullable Output> interfaceNames) { + $.interfaceNames = interfaceNames; + return this; + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(List interfaceNames) { + return interfaceNames(Output.of(interfaceNames)); + } + + /** + * @param interfaceNames Set of interfaces associated with the fabric node. + * + * @return builder + * + */ + public Builder interfaceNames(String... interfaceNames) { + return interfaceNames(List.of(interfaceNames)); + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(@Nullable Output ip) { + $.ip = ip; + return this; + } + + /** + * @param ip IPv4 address for the fabric node. + * + * @return builder + * + */ + public Builder ip(String ip) { + return ip(Output.of(ip)); + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(@Nullable Output nodeId) { + $.nodeId = nodeId; + return this; + } + + /** + * @param nodeId The unique identifier of the SDN fabric node. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + return nodeId(Output.of(nodeId)); + } + + public OspfState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/outputs/GetOpenfabricResult.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/outputs/GetOpenfabricResult.java new file mode 100644 index 00000000..69e7e60a --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/outputs/GetOpenfabricResult.java @@ -0,0 +1,169 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetOpenfabricResult { + /** + * @return The unique identifier of the SDN fabric. + * + */ + private String fabricId; + private String id; + /** + * @return Set of interface names associated with the fabric node. + * + */ + private List interfaceNames; + /** + * @return IPv4 address for the fabric node. + * + */ + private String ip; + /** + * @return IPv6 address for the fabric node. + * + */ + private String ip6; + /** + * @return The unique identifier of the SDN fabric node. + * + */ + private String nodeId; + + private GetOpenfabricResult() {} + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String fabricId() { + return this.fabricId; + } + public String id() { + return this.id; + } + /** + * @return Set of interface names associated with the fabric node. + * + */ + public List interfaceNames() { + return this.interfaceNames; + } + /** + * @return IPv4 address for the fabric node. + * + */ + public String ip() { + return this.ip; + } + /** + * @return IPv6 address for the fabric node. + * + */ + public String ip6() { + return this.ip6; + } + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public String nodeId() { + return this.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetOpenfabricResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String fabricId; + private String id; + private List interfaceNames; + private String ip; + private String ip6; + private String nodeId; + public Builder() {} + public Builder(GetOpenfabricResult defaults) { + Objects.requireNonNull(defaults); + this.fabricId = defaults.fabricId; + this.id = defaults.id; + this.interfaceNames = defaults.interfaceNames; + this.ip = defaults.ip; + this.ip6 = defaults.ip6; + this.nodeId = defaults.nodeId; + } + + @CustomType.Setter + public Builder fabricId(String fabricId) { + if (fabricId == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "fabricId"); + } + this.fabricId = fabricId; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder interfaceNames(List interfaceNames) { + if (interfaceNames == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "interfaceNames"); + } + this.interfaceNames = interfaceNames; + return this; + } + public Builder interfaceNames(String... interfaceNames) { + return interfaceNames(List.of(interfaceNames)); + } + @CustomType.Setter + public Builder ip(String ip) { + if (ip == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "ip"); + } + this.ip = ip; + return this; + } + @CustomType.Setter + public Builder ip6(String ip6) { + if (ip6 == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "ip6"); + } + this.ip6 = ip6; + return this; + } + @CustomType.Setter + public Builder nodeId(String nodeId) { + if (nodeId == null) { + throw new MissingRequiredPropertyException("GetOpenfabricResult", "nodeId"); + } + this.nodeId = nodeId; + return this; + } + public GetOpenfabricResult build() { + final var _resultValue = new GetOpenfabricResult(); + _resultValue.fabricId = fabricId; + _resultValue.id = id; + _resultValue.interfaceNames = interfaceNames; + _resultValue.ip = ip; + _resultValue.ip6 = ip6; + _resultValue.nodeId = nodeId; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/outputs/GetOspfResult.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/outputs/GetOspfResult.java new file mode 100644 index 00000000..18381e29 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/Sdn_fabric_node/outputs/GetOspfResult.java @@ -0,0 +1,146 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Sdn_fabric_node.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetOspfResult { + /** + * @return The unique identifier of the SDN fabric. + * + */ + private String fabricId; + private String id; + /** + * @return Set of interface names associated with the fabric node. + * + */ + private List interfaceNames; + /** + * @return IPv4 address for the fabric node. + * + */ + private String ip; + /** + * @return The unique identifier of the SDN fabric node. + * + */ + private String nodeId; + + private GetOspfResult() {} + /** + * @return The unique identifier of the SDN fabric. + * + */ + public String fabricId() { + return this.fabricId; + } + public String id() { + return this.id; + } + /** + * @return Set of interface names associated with the fabric node. + * + */ + public List interfaceNames() { + return this.interfaceNames; + } + /** + * @return IPv4 address for the fabric node. + * + */ + public String ip() { + return this.ip; + } + /** + * @return The unique identifier of the SDN fabric node. + * + */ + public String nodeId() { + return this.nodeId; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetOspfResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String fabricId; + private String id; + private List interfaceNames; + private String ip; + private String nodeId; + public Builder() {} + public Builder(GetOspfResult defaults) { + Objects.requireNonNull(defaults); + this.fabricId = defaults.fabricId; + this.id = defaults.id; + this.interfaceNames = defaults.interfaceNames; + this.ip = defaults.ip; + this.nodeId = defaults.nodeId; + } + + @CustomType.Setter + public Builder fabricId(String fabricId) { + if (fabricId == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "fabricId"); + } + this.fabricId = fabricId; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder interfaceNames(List interfaceNames) { + if (interfaceNames == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "interfaceNames"); + } + this.interfaceNames = interfaceNames; + return this; + } + public Builder interfaceNames(String... interfaceNames) { + return interfaceNames(List.of(interfaceNames)); + } + @CustomType.Setter + public Builder ip(String ip) { + if (ip == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "ip"); + } + this.ip = ip; + return this; + } + @CustomType.Setter + public Builder nodeId(String nodeId) { + if (nodeId == null) { + throw new MissingRequiredPropertyException("GetOspfResult", "nodeId"); + } + this.nodeId = nodeId; + return this; + } + public GetOspfResult build() { + final var _resultValue = new GetOspfResult(); + _resultValue.fabricId = fabricId; + _resultValue.id = id; + _resultValue.interfaceNames = interfaceNames; + _resultValue.ip = ip; + _resultValue.nodeId = nodeId; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/Container.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/Container.java index 4f6a91d7..3a7a37b3 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/Container.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/Container.java @@ -135,6 +135,11 @@ * .volume("local-lvm") * .size("10G") * .path("/mnt/volume") + * .build(), + * ContainerMountPointArgs.builder() + * .volume("local-lvm:subvol-108-disk-101") + * .size("10G") + * .path("/mnt/data") * .build()) * .startup(ContainerStartupArgs.builder() * .order(3) diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerDiskArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerDiskArgs.java index 655cfdd7..c06df2a4 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerDiskArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerDiskArgs.java @@ -65,6 +65,23 @@ public Optional>> mountOptions() { return Optional.ofNullable(this.mountOptions); } + /** + * The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + * + */ + @Import(name="pathInDatastore") + private @Nullable Output pathInDatastore; + + /** + * @return The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + * + */ + public Optional> pathInDatastore() { + return Optional.ofNullable(this.pathInDatastore); + } + /** * Enable user quotas for the container rootfs * @@ -120,6 +137,7 @@ private ContainerDiskArgs(ContainerDiskArgs $) { this.acl = $.acl; this.datastoreId = $.datastoreId; this.mountOptions = $.mountOptions; + this.pathInDatastore = $.pathInDatastore; this.quota = $.quota; this.replicate = $.replicate; this.size = $.size; @@ -218,6 +236,29 @@ public Builder mountOptions(String... mountOptions) { return mountOptions(List.of(mountOptions)); } + /** + * @param pathInDatastore The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + * + * @return builder + * + */ + public Builder pathInDatastore(@Nullable Output pathInDatastore) { + $.pathInDatastore = pathInDatastore; + return this; + } + + /** + * @param pathInDatastore The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + * + * @return builder + * + */ + public Builder pathInDatastore(String pathInDatastore) { + return pathInDatastore(Output.of(pathInDatastore)); + } + /** * @param quota Enable user quotas for the container rootfs * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerMountPointArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerMountPointArgs.java index 865e39c1..edb4bbfa 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerMountPointArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/inputs/ContainerMountPointArgs.java @@ -82,6 +82,23 @@ public Output path() { return this.path; } + /** + * The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of <span pulumi-lang-nodejs="`volume`" pulumi-lang-dotnet="`Volume`" pulumi-lang-go="`volume`" pulumi-lang-python="`volume`" pulumi-lang-yaml="`volume`" pulumi-lang-java="`volume`">`volume`</span>. + * + */ + @Import(name="pathInDatastore") + private @Nullable Output pathInDatastore; + + /** + * @return The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of <span pulumi-lang-nodejs="`volume`" pulumi-lang-dotnet="`Volume`" pulumi-lang-go="`volume`" pulumi-lang-python="`volume`" pulumi-lang-yaml="`volume`" pulumi-lang-java="`volume`">`volume`</span>. + * + */ + public Optional> pathInDatastore() { + return Optional.ofNullable(this.pathInDatastore); + } + /** * Enable user quotas inside the container (not supported * with ZFS subvolumes). @@ -187,6 +204,7 @@ private ContainerMountPointArgs(ContainerMountPointArgs $) { this.backup = $.backup; this.mountOptions = $.mountOptions; this.path = $.path; + this.pathInDatastore = $.pathInDatastore; this.quota = $.quota; this.readOnly = $.readOnly; this.replicate = $.replicate; @@ -311,6 +329,29 @@ public Builder path(String path) { return path(Output.of(path)); } + /** + * @param pathInDatastore The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of <span pulumi-lang-nodejs="`volume`" pulumi-lang-dotnet="`Volume`" pulumi-lang-go="`volume`" pulumi-lang-python="`volume`" pulumi-lang-yaml="`volume`" pulumi-lang-java="`volume`">`volume`</span>. + * + * @return builder + * + */ + public Builder pathInDatastore(@Nullable Output pathInDatastore) { + $.pathInDatastore = pathInDatastore; + return this; + } + + /** + * @param pathInDatastore The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of <span pulumi-lang-nodejs="`volume`" pulumi-lang-dotnet="`Volume`" pulumi-lang-go="`volume`" pulumi-lang-python="`volume`" pulumi-lang-yaml="`volume`" pulumi-lang-java="`volume`">`volume`</span>. + * + * @return builder + * + */ + public Builder pathInDatastore(String pathInDatastore) { + return pathInDatastore(Output.of(pathInDatastore)); + } + /** * @param quota Enable user quotas inside the container (not supported * with ZFS subvolumes). diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerDisk.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerDisk.java index b6d716bb..2c422ff3 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerDisk.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerDisk.java @@ -30,6 +30,12 @@ public final class ContainerDisk { * */ private @Nullable List mountOptions; + /** + * @return The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + * + */ + private @Nullable String pathInDatastore; /** * @return Enable user quotas for the container rootfs * @@ -71,6 +77,14 @@ public Optional datastoreId() { public List mountOptions() { return this.mountOptions == null ? List.of() : this.mountOptions; } + /** + * @return The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + * + */ + public Optional pathInDatastore() { + return Optional.ofNullable(this.pathInDatastore); + } /** * @return Enable user quotas for the container rootfs * @@ -107,6 +121,7 @@ public static final class Builder { private @Nullable Boolean acl; private @Nullable String datastoreId; private @Nullable List mountOptions; + private @Nullable String pathInDatastore; private @Nullable Boolean quota; private @Nullable Boolean replicate; private @Nullable Integer size; @@ -116,6 +131,7 @@ public Builder(ContainerDisk defaults) { this.acl = defaults.acl; this.datastoreId = defaults.datastoreId; this.mountOptions = defaults.mountOptions; + this.pathInDatastore = defaults.pathInDatastore; this.quota = defaults.quota; this.replicate = defaults.replicate; this.size = defaults.size; @@ -143,6 +159,12 @@ public Builder mountOptions(String... mountOptions) { return mountOptions(List.of(mountOptions)); } @CustomType.Setter + public Builder pathInDatastore(@Nullable String pathInDatastore) { + + this.pathInDatastore = pathInDatastore; + return this; + } + @CustomType.Setter public Builder quota(@Nullable Boolean quota) { this.quota = quota; @@ -165,6 +187,7 @@ public ContainerDisk build() { _resultValue.acl = acl; _resultValue.datastoreId = datastoreId; _resultValue.mountOptions = mountOptions; + _resultValue.pathInDatastore = pathInDatastore; _resultValue.quota = quota; _resultValue.replicate = replicate; _resultValue.size = size; diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerMountPoint.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerMountPoint.java index 50304d9a..143ac145 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerMountPoint.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/ct/outputs/ContainerMountPoint.java @@ -36,6 +36,12 @@ public final class ContainerMountPoint { * */ private String path; + /** + * @return The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of <span pulumi-lang-nodejs="`volume`" pulumi-lang-dotnet="`Volume`" pulumi-lang-go="`volume`" pulumi-lang-python="`volume`" pulumi-lang-yaml="`volume`" pulumi-lang-java="`volume`">`volume`</span>. + * + */ + private @Nullable String pathInDatastore; /** * @return Enable user quotas inside the container (not supported * with ZFS subvolumes). @@ -102,6 +108,14 @@ public List mountOptions() { public String path() { return this.path; } + /** + * @return The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of <span pulumi-lang-nodejs="`volume`" pulumi-lang-dotnet="`Volume`" pulumi-lang-go="`volume`" pulumi-lang-python="`volume`" pulumi-lang-yaml="`volume`" pulumi-lang-java="`volume`">`volume`</span>. + * + */ + public Optional pathInDatastore() { + return Optional.ofNullable(this.pathInDatastore); + } /** * @return Enable user quotas inside the container (not supported * with ZFS subvolumes). @@ -162,6 +176,7 @@ public static final class Builder { private @Nullable Boolean backup; private @Nullable List mountOptions; private String path; + private @Nullable String pathInDatastore; private @Nullable Boolean quota; private @Nullable Boolean readOnly; private @Nullable Boolean replicate; @@ -175,6 +190,7 @@ public Builder(ContainerMountPoint defaults) { this.backup = defaults.backup; this.mountOptions = defaults.mountOptions; this.path = defaults.path; + this.pathInDatastore = defaults.pathInDatastore; this.quota = defaults.quota; this.readOnly = defaults.readOnly; this.replicate = defaults.replicate; @@ -213,6 +229,12 @@ public Builder path(String path) { return this; } @CustomType.Setter + public Builder pathInDatastore(@Nullable String pathInDatastore) { + + this.pathInDatastore = pathInDatastore; + return this; + } + @CustomType.Setter public Builder quota(@Nullable Boolean quota) { this.quota = quota; @@ -256,6 +278,7 @@ public ContainerMountPoint build() { _resultValue.backup = backup; _resultValue.mountOptions = mountOptions; _resultValue.path = path; + _resultValue.pathInDatastore = pathInDatastore; _resultValue.quota = quota; _resultValue.readOnly = readOnly; _resultValue.replicate = replicate; diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/File.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/File.java index 0a0a071a..ded5f343 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/File.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/File.java @@ -222,17 +222,9 @@ public Output fileName() { public Output nodeName() { return this.nodeName; } - /** - * By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - */ @Export(name="overwrite", refs={Boolean.class}, tree="[0]") private Output overwrite; - /** - * @return By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - */ public Output overwrite() { return this.overwrite; } diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/FileArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/FileArgs.java index 83da56b1..8ac64c91 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/FileArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/FileArgs.java @@ -123,17 +123,9 @@ public Output nodeName() { return this.nodeName; } - /** - * By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - */ @Import(name="overwrite") private @Nullable Output overwrite; - /** - * @return By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - */ public Optional> overwrite() { return Optional.ofNullable(this.overwrite); } @@ -380,23 +372,11 @@ public Builder nodeName(String nodeName) { return nodeName(Output.of(nodeName)); } - /** - * @param overwrite By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - * @return builder - * - */ public Builder overwrite(@Nullable Output overwrite) { $.overwrite = overwrite; return this; } - /** - * @param overwrite By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - * @return builder - * - */ public Builder overwrite(Boolean overwrite) { return overwrite(Output.of(overwrite)); } diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/inputs/FileState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/inputs/FileState.java index 506944dd..92d9dea4 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/inputs/FileState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/download/inputs/FileState.java @@ -122,17 +122,9 @@ public Optional> nodeName() { return Optional.ofNullable(this.nodeName); } - /** - * By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - */ @Import(name="overwrite") private @Nullable Output overwrite; - /** - * @return By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - */ public Optional> overwrite() { return Optional.ofNullable(this.overwrite); } @@ -395,23 +387,11 @@ public Builder nodeName(String nodeName) { return nodeName(Output.of(nodeName)); } - /** - * @param overwrite By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - * @return builder - * - */ public Builder overwrite(@Nullable Output overwrite) { $.overwrite = overwrite; return this; } - /** - * @param overwrite By default <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span>. If <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> and file size has changed in the datastore, it will be replaced. If <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>, there will be no check. - * - * @return builder - * - */ public Builder overwrite(Boolean overwrite) { return overwrite(Output.of(overwrite)); } diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2Args.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2Args.java index 988915f0..8afebeb1 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2Args.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2Args.java @@ -6,7 +6,6 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; -import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2CloneArgs; import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2CpuArgs; import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2RngArgs; import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2TimeoutsArgs; @@ -24,21 +23,6 @@ public final class GetVm2Args extends com.pulumi.resources.InvokeArgs { public static final GetVm2Args Empty = new GetVm2Args(); - /** - * The cloning configuration. - * - */ - @Import(name="clone") - private @Nullable Output clone; - - /** - * @return The cloning configuration. - * - */ - public Optional> clone_() { - return Optional.ofNullable(this.clone); - } - /** * The CPU configuration. * @@ -184,7 +168,6 @@ public Optional> vga() { private GetVm2Args() {} private GetVm2Args(GetVm2Args $) { - this.clone = $.clone; this.cpu = $.cpu; this.description = $.description; this.id = $.id; @@ -215,27 +198,6 @@ public Builder(GetVm2Args defaults) { $ = new GetVm2Args(Objects.requireNonNull(defaults)); } - /** - * @param clone The cloning configuration. - * - * @return builder - * - */ - public Builder clone_(@Nullable Output clone) { - $.clone = clone; - return this; - } - - /** - * @param clone The cloning configuration. - * - * @return builder - * - */ - public Builder clone_(GetVm2CloneArgs clone) { - return clone_(Output.of(clone)); - } - /** * @param cpu The CPU configuration. * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2Clone.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2Clone.java deleted file mode 100644 index 56dd734b..00000000 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2Clone.java +++ /dev/null @@ -1,104 +0,0 @@ -// *** WARNING: this file was generated by pulumi-java-gen. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -package io.muehlbachler.pulumi.proxmoxve.inputs; - -import com.pulumi.core.annotations.Import; -import com.pulumi.exceptions.MissingRequiredPropertyException; -import java.lang.Integer; -import java.util.Objects; - - -public final class GetVm2Clone extends com.pulumi.resources.InvokeArgs { - - public static final GetVm2Clone Empty = new GetVm2Clone(); - - /** - * The ID of the VM to clone. - * - */ - @Import(name="id", required=true) - private Integer id; - - /** - * @return The ID of the VM to clone. - * - */ - public Integer id() { - return this.id; - } - - /** - * The number of retries to perform when cloning the VM (default: 3). - * - */ - @Import(name="retries", required=true) - private Integer retries; - - /** - * @return The number of retries to perform when cloning the VM (default: 3). - * - */ - public Integer retries() { - return this.retries; - } - - private GetVm2Clone() {} - - private GetVm2Clone(GetVm2Clone $) { - this.id = $.id; - this.retries = $.retries; - } - - public static Builder builder() { - return new Builder(); - } - public static Builder builder(GetVm2Clone defaults) { - return new Builder(defaults); - } - - public static final class Builder { - private GetVm2Clone $; - - public Builder() { - $ = new GetVm2Clone(); - } - - public Builder(GetVm2Clone defaults) { - $ = new GetVm2Clone(Objects.requireNonNull(defaults)); - } - - /** - * @param id The ID of the VM to clone. - * - * @return builder - * - */ - public Builder id(Integer id) { - $.id = id; - return this; - } - - /** - * @param retries The number of retries to perform when cloning the VM (default: 3). - * - * @return builder - * - */ - public Builder retries(Integer retries) { - $.retries = retries; - return this; - } - - public GetVm2Clone build() { - if ($.id == null) { - throw new MissingRequiredPropertyException("GetVm2Clone", "id"); - } - if ($.retries == null) { - throw new MissingRequiredPropertyException("GetVm2Clone", "retries"); - } - return $; - } - } - -} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2CloneArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2CloneArgs.java deleted file mode 100644 index 7c23a892..00000000 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2CloneArgs.java +++ /dev/null @@ -1,125 +0,0 @@ -// *** WARNING: this file was generated by pulumi-java-gen. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -package io.muehlbachler.pulumi.proxmoxve.inputs; - -import com.pulumi.core.Output; -import com.pulumi.core.annotations.Import; -import com.pulumi.exceptions.MissingRequiredPropertyException; -import java.lang.Integer; -import java.util.Objects; - - -public final class GetVm2CloneArgs extends com.pulumi.resources.ResourceArgs { - - public static final GetVm2CloneArgs Empty = new GetVm2CloneArgs(); - - /** - * The ID of the VM to clone. - * - */ - @Import(name="id", required=true) - private Output id; - - /** - * @return The ID of the VM to clone. - * - */ - public Output id() { - return this.id; - } - - /** - * The number of retries to perform when cloning the VM (default: 3). - * - */ - @Import(name="retries", required=true) - private Output retries; - - /** - * @return The number of retries to perform when cloning the VM (default: 3). - * - */ - public Output retries() { - return this.retries; - } - - private GetVm2CloneArgs() {} - - private GetVm2CloneArgs(GetVm2CloneArgs $) { - this.id = $.id; - this.retries = $.retries; - } - - public static Builder builder() { - return new Builder(); - } - public static Builder builder(GetVm2CloneArgs defaults) { - return new Builder(defaults); - } - - public static final class Builder { - private GetVm2CloneArgs $; - - public Builder() { - $ = new GetVm2CloneArgs(); - } - - public Builder(GetVm2CloneArgs defaults) { - $ = new GetVm2CloneArgs(Objects.requireNonNull(defaults)); - } - - /** - * @param id The ID of the VM to clone. - * - * @return builder - * - */ - public Builder id(Output id) { - $.id = id; - return this; - } - - /** - * @param id The ID of the VM to clone. - * - * @return builder - * - */ - public Builder id(Integer id) { - return id(Output.of(id)); - } - - /** - * @param retries The number of retries to perform when cloning the VM (default: 3). - * - * @return builder - * - */ - public Builder retries(Output retries) { - $.retries = retries; - return this; - } - - /** - * @param retries The number of retries to perform when cloning the VM (default: 3). - * - * @return builder - * - */ - public Builder retries(Integer retries) { - return retries(Output.of(retries)); - } - - public GetVm2CloneArgs build() { - if ($.id == null) { - throw new MissingRequiredPropertyException("GetVm2CloneArgs", "id"); - } - if ($.retries == null) { - throw new MissingRequiredPropertyException("GetVm2CloneArgs", "retries"); - } - return $; - } - } - -} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2PlainArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2PlainArgs.java index 45a51681..df8522be 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2PlainArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/inputs/GetVm2PlainArgs.java @@ -5,7 +5,6 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; -import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2Clone; import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2Cpu; import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2Rng; import io.muehlbachler.pulumi.proxmoxve.inputs.GetVm2Timeouts; @@ -23,21 +22,6 @@ public final class GetVm2PlainArgs extends com.pulumi.resources.InvokeArgs { public static final GetVm2PlainArgs Empty = new GetVm2PlainArgs(); - /** - * The cloning configuration. - * - */ - @Import(name="clone") - private @Nullable GetVm2Clone clone; - - /** - * @return The cloning configuration. - * - */ - public Optional clone_() { - return Optional.ofNullable(this.clone); - } - /** * The CPU configuration. * @@ -183,7 +167,6 @@ public Optional vga() { private GetVm2PlainArgs() {} private GetVm2PlainArgs(GetVm2PlainArgs $) { - this.clone = $.clone; this.cpu = $.cpu; this.description = $.description; this.id = $.id; @@ -214,17 +197,6 @@ public Builder(GetVm2PlainArgs defaults) { $ = new GetVm2PlainArgs(Objects.requireNonNull(defaults)); } - /** - * @param clone The cloning configuration. - * - * @return builder - * - */ - public Builder clone_(@Nullable GetVm2Clone clone) { - $.clone = clone; - return this; - } - /** * @param cpu The CPU configuration. * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptions.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptions.java index 6813d240..ccfb6bcb 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptions.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptions.java @@ -88,14 +88,14 @@ @ResourceType(type="proxmoxve:Network/firewallOptions:FirewallOptions") public class FirewallOptions extends com.pulumi.resources.CustomResource { /** - * Container ID. + * Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ @Export(name="containerId", refs={Integer.class}, tree="[0]") private Output containerId; /** - * @return Container ID. + * @return Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ public Output> containerId() { @@ -276,14 +276,14 @@ public Output> radv() { return Codegen.optional(this.radv); } /** - * VM ID. + * VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ @Export(name="vmId", refs={Integer.class}, tree="[0]") private Output vmId; /** - * @return VM ID. + * @return VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ public Output> vmId() { diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptionsArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptionsArgs.java index 8bb6e4a8..cfef6aad 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptionsArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallOptionsArgs.java @@ -19,14 +19,14 @@ public final class FirewallOptionsArgs extends com.pulumi.resources.ResourceArgs public static final FirewallOptionsArgs Empty = new FirewallOptionsArgs(); /** - * Container ID. + * Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ @Import(name="containerId") private @Nullable Output containerId; /** - * @return Container ID. + * @return Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ public Optional> containerId() { @@ -219,14 +219,14 @@ public Optional> radv() { } /** - * VM ID. + * VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ @Import(name="vmId") private @Nullable Output vmId; /** - * @return VM ID. + * @return VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ public Optional> vmId() { @@ -270,7 +270,7 @@ public Builder(FirewallOptionsArgs defaults) { } /** - * @param containerId Container ID. + * @param containerId Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * @@ -281,7 +281,7 @@ public Builder containerId(@Nullable Output containerId) { } /** - * @param containerId Container ID. + * @param containerId Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * @@ -542,7 +542,7 @@ public Builder radv(Boolean radv) { } /** - * @param vmId VM ID. + * @param vmId VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * @@ -553,7 +553,7 @@ public Builder vmId(@Nullable Output vmId) { } /** - * @param vmId VM ID. + * @param vmId VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallRules.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallRules.java index cd6a1406..5395d104 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallRules.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/FirewallRules.java @@ -20,8 +20,7 @@ /** * Manages cluster-level, node-level or VM/container-level firewall rules. * - * > **Note:** Before creating a new <span pulumi-lang-nodejs="`proxmoxve.Network.FirewallRules`" pulumi-lang-dotnet="`proxmoxve.Network.FirewallRules`" pulumi-lang-go="`Network.FirewallRules`" pulumi-lang-python="`Network.FirewallRules`" pulumi-lang-yaml="`proxmoxve.Network.FirewallRules`" pulumi-lang-java="`proxmoxve.Network.FirewallRules`">`proxmoxve.Network.FirewallRules`</span> resource, verify that no rules already exist for the target (cluster, node, VM, or container). - * If rules are already configured, import them first using the appropriate import command. + * > Before creating a new <span pulumi-lang-nodejs="`proxmoxve.Network.FirewallRules`" pulumi-lang-dotnet="`proxmoxve.Network.FirewallRules`" pulumi-lang-go="`Network.FirewallRules`" pulumi-lang-python="`Network.FirewallRules`" pulumi-lang-yaml="`proxmoxve.Network.FirewallRules`" pulumi-lang-java="`proxmoxve.Network.FirewallRules`">`proxmoxve.Network.FirewallRules`</span> resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command. * * ## Example Usage * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/inputs/FirewallOptionsState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/inputs/FirewallOptionsState.java index 27af482b..ec4ef9d8 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/inputs/FirewallOptionsState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/network/inputs/FirewallOptionsState.java @@ -18,14 +18,14 @@ public final class FirewallOptionsState extends com.pulumi.resources.ResourceArg public static final FirewallOptionsState Empty = new FirewallOptionsState(); /** - * Container ID. + * Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ @Import(name="containerId") private @Nullable Output containerId; /** - * @return Container ID. + * @return Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ public Optional> containerId() { @@ -218,14 +218,14 @@ public Optional> radv() { } /** - * VM ID. + * VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ @Import(name="vmId") private @Nullable Output vmId; /** - * @return VM ID. + * @return VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * */ public Optional> vmId() { @@ -269,7 +269,7 @@ public Builder(FirewallOptionsState defaults) { } /** - * @param containerId Container ID. + * @param containerId Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * @@ -280,7 +280,7 @@ public Builder containerId(@Nullable Output containerId) { } /** - * @param containerId Container ID. + * @param containerId Container ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * @@ -541,7 +541,7 @@ public Builder radv(Boolean radv) { } /** - * @param vmId VM ID. + * @param vmId VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * @@ -552,7 +552,7 @@ public Builder vmId(@Nullable Output vmId) { } /** - * @param vmId VM ID. + * @param vmId VM ID. **Exactly one of <span pulumi-lang-nodejs="`vmId`" pulumi-lang-dotnet="`VmId`" pulumi-lang-go="`vmId`" pulumi-lang-python="`vm_id`" pulumi-lang-yaml="`vmId`" pulumi-lang-java="`vmId`">`vm_id`</span> or <span pulumi-lang-nodejs="`containerId`" pulumi-lang-dotnet="`ContainerId`" pulumi-lang-go="`containerId`" pulumi-lang-python="`container_id`" pulumi-lang-yaml="`containerId`" pulumi-lang-java="`containerId`">`container_id`</span> must be specified.** * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/outputs/GetVm2Clone.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/outputs/GetVm2Clone.java deleted file mode 100644 index 113df83a..00000000 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/outputs/GetVm2Clone.java +++ /dev/null @@ -1,81 +0,0 @@ -// *** WARNING: this file was generated by pulumi-java-gen. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -package io.muehlbachler.pulumi.proxmoxve.outputs; - -import com.pulumi.core.annotations.CustomType; -import com.pulumi.exceptions.MissingRequiredPropertyException; -import java.lang.Integer; -import java.util.Objects; - -@CustomType -public final class GetVm2Clone { - /** - * @return The ID of the VM to clone. - * - */ - private Integer id; - /** - * @return The number of retries to perform when cloning the VM (default: 3). - * - */ - private Integer retries; - - private GetVm2Clone() {} - /** - * @return The ID of the VM to clone. - * - */ - public Integer id() { - return this.id; - } - /** - * @return The number of retries to perform when cloning the VM (default: 3). - * - */ - public Integer retries() { - return this.retries; - } - - public static Builder builder() { - return new Builder(); - } - - public static Builder builder(GetVm2Clone defaults) { - return new Builder(defaults); - } - @CustomType.Builder - public static final class Builder { - private Integer id; - private Integer retries; - public Builder() {} - public Builder(GetVm2Clone defaults) { - Objects.requireNonNull(defaults); - this.id = defaults.id; - this.retries = defaults.retries; - } - - @CustomType.Setter - public Builder id(Integer id) { - if (id == null) { - throw new MissingRequiredPropertyException("GetVm2Clone", "id"); - } - this.id = id; - return this; - } - @CustomType.Setter - public Builder retries(Integer retries) { - if (retries == null) { - throw new MissingRequiredPropertyException("GetVm2Clone", "retries"); - } - this.retries = retries; - return this; - } - public GetVm2Clone build() { - final var _resultValue = new GetVm2Clone(); - _resultValue.id = id; - _resultValue.retries = retries; - return _resultValue; - } - } -} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/outputs/GetVm2Result.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/outputs/GetVm2Result.java index 0751b6af..c9f28cab 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/outputs/GetVm2Result.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/outputs/GetVm2Result.java @@ -5,7 +5,6 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; -import io.muehlbachler.pulumi.proxmoxve.outputs.GetVm2Clone; import io.muehlbachler.pulumi.proxmoxve.outputs.GetVm2Cpu; import io.muehlbachler.pulumi.proxmoxve.outputs.GetVm2Rng; import io.muehlbachler.pulumi.proxmoxve.outputs.GetVm2Timeouts; @@ -20,11 +19,6 @@ @CustomType public final class GetVm2Result { - /** - * @return The cloning configuration. - * - */ - private @Nullable GetVm2Clone clone; /** * @return The CPU configuration. * @@ -73,13 +67,6 @@ public final class GetVm2Result { private GetVm2Vga vga; private GetVm2Result() {} - /** - * @return The cloning configuration. - * - */ - public Optional clone_() { - return Optional.ofNullable(this.clone); - } /** * @return The CPU configuration. * @@ -156,7 +143,6 @@ public static Builder builder(GetVm2Result defaults) { } @CustomType.Builder public static final class Builder { - private @Nullable GetVm2Clone clone; private GetVm2Cpu cpu; private @Nullable String description; private Integer id; @@ -170,7 +156,6 @@ public static final class Builder { public Builder() {} public Builder(GetVm2Result defaults) { Objects.requireNonNull(defaults); - this.clone = defaults.clone; this.cpu = defaults.cpu; this.description = defaults.description; this.id = defaults.id; @@ -183,12 +168,6 @@ public Builder(GetVm2Result defaults) { this.vga = defaults.vga; } - @CustomType.Setter("clone") - public Builder clone_(@Nullable GetVm2Clone clone) { - - this.clone = clone; - return this; - } @CustomType.Setter public Builder cpu(GetVm2Cpu cpu) { if (cpu == null) { @@ -266,7 +245,6 @@ public Builder vga(GetVm2Vga vga) { } public GetVm2Result build() { final var _resultValue = new GetVm2Result(); - _resultValue.clone = clone; _resultValue.cpu = cpu; _resultValue.description = description; _resultValue.id = id; diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/CIFS.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/CIFS.java new file mode 100644 index 00000000..d1f28407 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/CIFS.java @@ -0,0 +1,332 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Storage.CIFSArgs; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.CIFSState; +import io.muehlbachler.pulumi.proxmoxve.Storage.outputs.CIFSBackups; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Manages an SMB/CIFS based storage server in Proxmox VE. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.CIFS;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.CIFSArgs;
+ * import com.pulumi.proxmoxve.Storage.inputs.CIFSBackupsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new CIFS("example", CIFSArgs.builder()
+ *             .cifsId("example-cifs")
+ *             .nodes("pve")
+ *             .server("10.0.0.20")
+ *             .share("proxmox")
+ *             .username("cifs-user")
+ *             .password("cifs-password")
+ *             .contents("images")
+ *             .domain("WORKGROUP")
+ *             .subdirectory("terraform")
+ *             .preallocation("metadata")
+ *             .snapshotAsVolumeChain(true)
+ *             .backups(CIFSBackupsArgs.builder()
+ *                 .maxProtectedBackups(5)
+ *                 .keepDaily(7)
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Storage/cIFS:CIFS") +public class CIFS extends com.pulumi.resources.CustomResource { + /** + * Configure backup retention settings for the storage type. + * + */ + @Export(name="backups", refs={CIFSBackups.class}, tree="[0]") + private Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Output> backups() { + return Codegen.optional(this.backups); + } + /** + * The unique identifier of the storage. + * + */ + @Export(name="cifsId", refs={String.class}, tree="[0]") + private Output cifsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output cifsId() { + return this.cifsId; + } + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Export(name="contents", refs={List.class,String.class}, tree="[0,1]") + private Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Output> contents() { + return this.contents; + } + /** + * Whether the storage is disabled. + * + */ + @Export(name="disable", refs={Boolean.class}, tree="[0]") + private Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Output disable() { + return this.disable; + } + /** + * The SMB/CIFS domain. + * + */ + @Export(name="domain", refs={String.class}, tree="[0]") + private Output domain; + + /** + * @return The SMB/CIFS domain. + * + */ + public Output> domain() { + return Codegen.optional(this.domain); + } + /** + * A list of nodes where this storage is available. + * + */ + @Export(name="nodes", refs={List.class,String.class}, tree="[0,1]") + private Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Output> nodes() { + return this.nodes; + } + /** + * The password for authenticating with the SMB/CIFS server. + * + */ + @Export(name="password", refs={String.class}, tree="[0]") + private Output password; + + /** + * @return The password for authenticating with the SMB/CIFS server. + * + */ + public Output password() { + return this.password; + } + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Export(name="preallocation", refs={String.class}, tree="[0]") + private Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Output> preallocation() { + return Codegen.optional(this.preallocation); + } + /** + * The IP address or DNS name of the SMB/CIFS server. + * + */ + @Export(name="server", refs={String.class}, tree="[0]") + private Output server; + + /** + * @return The IP address or DNS name of the SMB/CIFS server. + * + */ + public Output server() { + return this.server; + } + /** + * The name of the SMB/CIFS share. + * + */ + @Export(name="share", refs={String.class}, tree="[0]") + private Output share; + + /** + * @return The name of the SMB/CIFS share. + * + */ + public Output share() { + return this.share; + } + /** + * Whether the storage is shared across all nodes. + * + */ + @Export(name="shared", refs={Boolean.class}, tree="[0]") + private Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Output shared() { + return this.shared; + } + /** + * Enable support for creating snapshots through volume backing-chains. + * + */ + @Export(name="snapshotAsVolumeChain", refs={Boolean.class}, tree="[0]") + private Output snapshotAsVolumeChain; + + /** + * @return Enable support for creating snapshots through volume backing-chains. + * + */ + public Output> snapshotAsVolumeChain() { + return Codegen.optional(this.snapshotAsVolumeChain); + } + /** + * A subdirectory to mount within the share. + * + */ + @Export(name="subdirectory", refs={String.class}, tree="[0]") + private Output subdirectory; + + /** + * @return A subdirectory to mount within the share. + * + */ + public Output> subdirectory() { + return Codegen.optional(this.subdirectory); + } + /** + * The username for authenticating with the SMB/CIFS server. + * + */ + @Export(name="username", refs={String.class}, tree="[0]") + private Output username; + + /** + * @return The username for authenticating with the SMB/CIFS server. + * + */ + public Output username() { + return this.username; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public CIFS(java.lang.String name) { + this(name, CIFSArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public CIFS(java.lang.String name, CIFSArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public CIFS(java.lang.String name, CIFSArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/cIFS:CIFS", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private CIFS(java.lang.String name, Output id, @Nullable CIFSState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/cIFS:CIFS", name, state, makeResourceOptions(options, id), false); + } + + private static CIFSArgs makeArgs(CIFSArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? CIFSArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .additionalSecretOutputs(List.of( + "password" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static CIFS get(java.lang.String name, Output id, @Nullable CIFSState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new CIFS(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/CIFSArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/CIFSArgs.java new file mode 100644 index 00000000..4eedd55b --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/CIFSArgs.java @@ -0,0 +1,566 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.CIFSBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CIFSArgs extends com.pulumi.resources.ResourceArgs { + + public static final CIFSArgs Empty = new CIFSArgs(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="cifsId", required=true) + private Output cifsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output cifsId() { + return this.cifsId; + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The SMB/CIFS domain. + * + */ + @Import(name="domain") + private @Nullable Output domain; + + /** + * @return The SMB/CIFS domain. + * + */ + public Optional> domain() { + return Optional.ofNullable(this.domain); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The password for authenticating with the SMB/CIFS server. + * + */ + @Import(name="password", required=true) + private Output password; + + /** + * @return The password for authenticating with the SMB/CIFS server. + * + */ + public Output password() { + return this.password; + } + + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Import(name="preallocation") + private @Nullable Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Optional> preallocation() { + return Optional.ofNullable(this.preallocation); + } + + /** + * The IP address or DNS name of the SMB/CIFS server. + * + */ + @Import(name="server", required=true) + private Output server; + + /** + * @return The IP address or DNS name of the SMB/CIFS server. + * + */ + public Output server() { + return this.server; + } + + /** + * The name of the SMB/CIFS share. + * + */ + @Import(name="share", required=true) + private Output share; + + /** + * @return The name of the SMB/CIFS share. + * + */ + public Output share() { + return this.share; + } + + /** + * Enable support for creating snapshots through volume backing-chains. + * + */ + @Import(name="snapshotAsVolumeChain") + private @Nullable Output snapshotAsVolumeChain; + + /** + * @return Enable support for creating snapshots through volume backing-chains. + * + */ + public Optional> snapshotAsVolumeChain() { + return Optional.ofNullable(this.snapshotAsVolumeChain); + } + + /** + * A subdirectory to mount within the share. + * + */ + @Import(name="subdirectory") + private @Nullable Output subdirectory; + + /** + * @return A subdirectory to mount within the share. + * + */ + public Optional> subdirectory() { + return Optional.ofNullable(this.subdirectory); + } + + /** + * The username for authenticating with the SMB/CIFS server. + * + */ + @Import(name="username", required=true) + private Output username; + + /** + * @return The username for authenticating with the SMB/CIFS server. + * + */ + public Output username() { + return this.username; + } + + private CIFSArgs() {} + + private CIFSArgs(CIFSArgs $) { + this.backups = $.backups; + this.cifsId = $.cifsId; + this.contents = $.contents; + this.disable = $.disable; + this.domain = $.domain; + this.nodes = $.nodes; + this.password = $.password; + this.preallocation = $.preallocation; + this.server = $.server; + this.share = $.share; + this.snapshotAsVolumeChain = $.snapshotAsVolumeChain; + this.subdirectory = $.subdirectory; + this.username = $.username; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CIFSArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CIFSArgs $; + + public Builder() { + $ = new CIFSArgs(); + } + + public Builder(CIFSArgs defaults) { + $ = new CIFSArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(CIFSBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param cifsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder cifsId(Output cifsId) { + $.cifsId = cifsId; + return this; + } + + /** + * @param cifsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder cifsId(String cifsId) { + return cifsId(Output.of(cifsId)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param domain The SMB/CIFS domain. + * + * @return builder + * + */ + public Builder domain(@Nullable Output domain) { + $.domain = domain; + return this; + } + + /** + * @param domain The SMB/CIFS domain. + * + * @return builder + * + */ + public Builder domain(String domain) { + return domain(Output.of(domain)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param password The password for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder password(Output password) { + $.password = password; + return this; + } + + /** + * @param password The password for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder password(String password) { + return password(Output.of(password)); + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(@Nullable Output preallocation) { + $.preallocation = preallocation; + return this; + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(String preallocation) { + return preallocation(Output.of(preallocation)); + } + + /** + * @param server The IP address or DNS name of the SMB/CIFS server. + * + * @return builder + * + */ + public Builder server(Output server) { + $.server = server; + return this; + } + + /** + * @param server The IP address or DNS name of the SMB/CIFS server. + * + * @return builder + * + */ + public Builder server(String server) { + return server(Output.of(server)); + } + + /** + * @param share The name of the SMB/CIFS share. + * + * @return builder + * + */ + public Builder share(Output share) { + $.share = share; + return this; + } + + /** + * @param share The name of the SMB/CIFS share. + * + * @return builder + * + */ + public Builder share(String share) { + return share(Output.of(share)); + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(@Nullable Output snapshotAsVolumeChain) { + $.snapshotAsVolumeChain = snapshotAsVolumeChain; + return this; + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(Boolean snapshotAsVolumeChain) { + return snapshotAsVolumeChain(Output.of(snapshotAsVolumeChain)); + } + + /** + * @param subdirectory A subdirectory to mount within the share. + * + * @return builder + * + */ + public Builder subdirectory(@Nullable Output subdirectory) { + $.subdirectory = subdirectory; + return this; + } + + /** + * @param subdirectory A subdirectory to mount within the share. + * + * @return builder + * + */ + public Builder subdirectory(String subdirectory) { + return subdirectory(Output.of(subdirectory)); + } + + /** + * @param username The username for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder username(Output username) { + $.username = username; + return this; + } + + /** + * @param username The username for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder username(String username) { + return username(Output.of(username)); + } + + public CIFSArgs build() { + if ($.cifsId == null) { + throw new MissingRequiredPropertyException("CIFSArgs", "cifsId"); + } + if ($.password == null) { + throw new MissingRequiredPropertyException("CIFSArgs", "password"); + } + if ($.server == null) { + throw new MissingRequiredPropertyException("CIFSArgs", "server"); + } + if ($.share == null) { + throw new MissingRequiredPropertyException("CIFSArgs", "share"); + } + if ($.username == null) { + throw new MissingRequiredPropertyException("CIFSArgs", "username"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/Directory.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/Directory.java new file mode 100644 index 00000000..b66d9e71 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/Directory.java @@ -0,0 +1,240 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Storage.DirectoryArgs; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.DirectoryState; +import io.muehlbachler.pulumi.proxmoxve.Storage.outputs.DirectoryBackups; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Manages directory-based storage in Proxmox VE. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.Directory;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.DirectoryArgs;
+ * import com.pulumi.proxmoxve.Storage.inputs.DirectoryBackupsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new Directory("example", DirectoryArgs.builder()
+ *             .directoryId("example-dir")
+ *             .path("/var/lib/vz")
+ *             .nodes("pve")
+ *             .contents("images")
+ *             .shared(true)
+ *             .disable(false)
+ *             .backups(DirectoryBackupsArgs.builder()
+ *                 .maxProtectedBackups(5)
+ *                 .keepDaily(7)
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Storage/directory:Directory") +public class Directory extends com.pulumi.resources.CustomResource { + /** + * Configure backup retention settings for the storage type. + * + */ + @Export(name="backups", refs={DirectoryBackups.class}, tree="[0]") + private Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Output> backups() { + return Codegen.optional(this.backups); + } + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Export(name="contents", refs={List.class,String.class}, tree="[0,1]") + private Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Output> contents() { + return this.contents; + } + /** + * The unique identifier of the storage. + * + */ + @Export(name="directoryId", refs={String.class}, tree="[0]") + private Output directoryId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output directoryId() { + return this.directoryId; + } + /** + * Whether the storage is disabled. + * + */ + @Export(name="disable", refs={Boolean.class}, tree="[0]") + private Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Output disable() { + return this.disable; + } + /** + * A list of nodes where this storage is available. + * + */ + @Export(name="nodes", refs={List.class,String.class}, tree="[0,1]") + private Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Output> nodes() { + return this.nodes; + } + /** + * The path to the directory on the Proxmox node. + * + */ + @Export(name="path", refs={String.class}, tree="[0]") + private Output path; + + /** + * @return The path to the directory on the Proxmox node. + * + */ + public Output path() { + return this.path; + } + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Export(name="preallocation", refs={String.class}, tree="[0]") + private Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Output> preallocation() { + return Codegen.optional(this.preallocation); + } + /** + * Whether the storage is shared across all nodes. + * + */ + @Export(name="shared", refs={Boolean.class}, tree="[0]") + private Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Output shared() { + return this.shared; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Directory(java.lang.String name) { + this(name, DirectoryArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Directory(java.lang.String name, DirectoryArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public Directory(java.lang.String name, DirectoryArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/directory:Directory", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private Directory(java.lang.String name, Output id, @Nullable DirectoryState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/directory:Directory", name, state, makeResourceOptions(options, id), false); + } + + private static DirectoryArgs makeArgs(DirectoryArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? DirectoryArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static Directory get(java.lang.String name, Output id, @Nullable DirectoryState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Directory(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/DirectoryArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/DirectoryArgs.java new file mode 100644 index 00000000..964cd4af --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/DirectoryArgs.java @@ -0,0 +1,372 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.DirectoryBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class DirectoryArgs extends com.pulumi.resources.ResourceArgs { + + public static final DirectoryArgs Empty = new DirectoryArgs(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="directoryId", required=true) + private Output directoryId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output directoryId() { + return this.directoryId; + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The path to the directory on the Proxmox node. + * + */ + @Import(name="path", required=true) + private Output path; + + /** + * @return The path to the directory on the Proxmox node. + * + */ + public Output path() { + return this.path; + } + + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Import(name="preallocation") + private @Nullable Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Optional> preallocation() { + return Optional.ofNullable(this.preallocation); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + private DirectoryArgs() {} + + private DirectoryArgs(DirectoryArgs $) { + this.backups = $.backups; + this.contents = $.contents; + this.directoryId = $.directoryId; + this.disable = $.disable; + this.nodes = $.nodes; + this.path = $.path; + this.preallocation = $.preallocation; + this.shared = $.shared; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(DirectoryArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private DirectoryArgs $; + + public Builder() { + $ = new DirectoryArgs(); + } + + public Builder(DirectoryArgs defaults) { + $ = new DirectoryArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(DirectoryBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param directoryId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder directoryId(Output directoryId) { + $.directoryId = directoryId; + return this; + } + + /** + * @param directoryId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder directoryId(String directoryId) { + return directoryId(Output.of(directoryId)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param path The path to the directory on the Proxmox node. + * + * @return builder + * + */ + public Builder path(Output path) { + $.path = path; + return this; + } + + /** + * @param path The path to the directory on the Proxmox node. + * + * @return builder + * + */ + public Builder path(String path) { + return path(Output.of(path)); + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(@Nullable Output preallocation) { + $.preallocation = preallocation; + return this; + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(String preallocation) { + return preallocation(Output.of(preallocation)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + public DirectoryArgs build() { + if ($.directoryId == null) { + throw new MissingRequiredPropertyException("DirectoryArgs", "directoryId"); + } + if ($.path == null) { + throw new MissingRequiredPropertyException("DirectoryArgs", "path"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVM.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVM.java new file mode 100644 index 00000000..d9a1449f --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVM.java @@ -0,0 +1,218 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Storage.LVMArgs; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.LVMState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import javax.annotation.Nullable; + +/** + * Manages LVM-based storage in Proxmox VE. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.LVM;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.LVMArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new LVM("example", LVMArgs.builder()
+ *             .lvmId("example-lvm")
+ *             .nodes("pve")
+ *             .volumeGroup("vg0")
+ *             .contents("images")
+ *             .wipeRemovedVolumes(false)
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Storage/lVM:LVM") +public class LVM extends com.pulumi.resources.CustomResource { + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Export(name="contents", refs={List.class,String.class}, tree="[0,1]") + private Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Output> contents() { + return this.contents; + } + /** + * Whether the storage is disabled. + * + */ + @Export(name="disable", refs={Boolean.class}, tree="[0]") + private Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Output disable() { + return this.disable; + } + /** + * The unique identifier of the storage. + * + */ + @Export(name="lvmId", refs={String.class}, tree="[0]") + private Output lvmId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output lvmId() { + return this.lvmId; + } + /** + * A list of nodes where this storage is available. + * + */ + @Export(name="nodes", refs={List.class,String.class}, tree="[0,1]") + private Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Output> nodes() { + return this.nodes; + } + /** + * Whether the storage is shared across all nodes. + * + */ + @Export(name="shared", refs={Boolean.class}, tree="[0]") + private Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Output shared() { + return this.shared; + } + /** + * The name of the volume group to use. + * + */ + @Export(name="volumeGroup", refs={String.class}, tree="[0]") + private Output volumeGroup; + + /** + * @return The name of the volume group to use. + * + */ + public Output volumeGroup() { + return this.volumeGroup; + } + /** + * Whether to zero-out data when removing LVMs. + * + */ + @Export(name="wipeRemovedVolumes", refs={Boolean.class}, tree="[0]") + private Output wipeRemovedVolumes; + + /** + * @return Whether to zero-out data when removing LVMs. + * + */ + public Output wipeRemovedVolumes() { + return this.wipeRemovedVolumes; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public LVM(java.lang.String name) { + this(name, LVMArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public LVM(java.lang.String name, LVMArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public LVM(java.lang.String name, LVMArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/lVM:LVM", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private LVM(java.lang.String name, Output id, @Nullable LVMState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/lVM:LVM", name, state, makeResourceOptions(options, id), false); + } + + private static LVMArgs makeArgs(LVMArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? LVMArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static LVM get(java.lang.String name, Output id, @Nullable LVMState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new LVM(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMArgs.java new file mode 100644 index 00000000..f4b81390 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMArgs.java @@ -0,0 +1,334 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class LVMArgs extends com.pulumi.resources.ResourceArgs { + + public static final LVMArgs Empty = new LVMArgs(); + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="lvmId", required=true) + private Output lvmId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output lvmId() { + return this.lvmId; + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + /** + * The name of the volume group to use. + * + */ + @Import(name="volumeGroup", required=true) + private Output volumeGroup; + + /** + * @return The name of the volume group to use. + * + */ + public Output volumeGroup() { + return this.volumeGroup; + } + + /** + * Whether to zero-out data when removing LVMs. + * + */ + @Import(name="wipeRemovedVolumes") + private @Nullable Output wipeRemovedVolumes; + + /** + * @return Whether to zero-out data when removing LVMs. + * + */ + public Optional> wipeRemovedVolumes() { + return Optional.ofNullable(this.wipeRemovedVolumes); + } + + private LVMArgs() {} + + private LVMArgs(LVMArgs $) { + this.contents = $.contents; + this.disable = $.disable; + this.lvmId = $.lvmId; + this.nodes = $.nodes; + this.shared = $.shared; + this.volumeGroup = $.volumeGroup; + this.wipeRemovedVolumes = $.wipeRemovedVolumes; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LVMArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LVMArgs $; + + public Builder() { + $ = new LVMArgs(); + } + + public Builder(LVMArgs defaults) { + $ = new LVMArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param lvmId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmId(Output lvmId) { + $.lvmId = lvmId; + return this; + } + + /** + * @param lvmId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmId(String lvmId) { + return lvmId(Output.of(lvmId)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(Output volumeGroup) { + $.volumeGroup = volumeGroup; + return this; + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(String volumeGroup) { + return volumeGroup(Output.of(volumeGroup)); + } + + /** + * @param wipeRemovedVolumes Whether to zero-out data when removing LVMs. + * + * @return builder + * + */ + public Builder wipeRemovedVolumes(@Nullable Output wipeRemovedVolumes) { + $.wipeRemovedVolumes = wipeRemovedVolumes; + return this; + } + + /** + * @param wipeRemovedVolumes Whether to zero-out data when removing LVMs. + * + * @return builder + * + */ + public Builder wipeRemovedVolumes(Boolean wipeRemovedVolumes) { + return wipeRemovedVolumes(Output.of(wipeRemovedVolumes)); + } + + public LVMArgs build() { + if ($.lvmId == null) { + throw new MissingRequiredPropertyException("LVMArgs", "lvmId"); + } + if ($.volumeGroup == null) { + throw new MissingRequiredPropertyException("LVMArgs", "volumeGroup"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMThin.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMThin.java new file mode 100644 index 00000000..5b2c77da --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMThin.java @@ -0,0 +1,218 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Storage.LVMThinArgs; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.LVMThinState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import javax.annotation.Nullable; + +/** + * Manages thin LVM-based storage in Proxmox VE. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.LVMThin;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.LVMThinArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new LVMThin("example", LVMThinArgs.builder()
+ *             .lvmThinId("example-lvmthin")
+ *             .nodes("pve")
+ *             .volumeGroup("vg0")
+ *             .thinPool("data")
+ *             .contents("images")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Storage/lVMThin:LVMThin") +public class LVMThin extends com.pulumi.resources.CustomResource { + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Export(name="contents", refs={List.class,String.class}, tree="[0,1]") + private Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Output> contents() { + return this.contents; + } + /** + * Whether the storage is disabled. + * + */ + @Export(name="disable", refs={Boolean.class}, tree="[0]") + private Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Output disable() { + return this.disable; + } + /** + * The unique identifier of the storage. + * + */ + @Export(name="lvmThinId", refs={String.class}, tree="[0]") + private Output lvmThinId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output lvmThinId() { + return this.lvmThinId; + } + /** + * A list of nodes where this storage is available. + * + */ + @Export(name="nodes", refs={List.class,String.class}, tree="[0,1]") + private Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Output> nodes() { + return this.nodes; + } + /** + * Whether the storage is shared across all nodes. + * + */ + @Export(name="shared", refs={Boolean.class}, tree="[0]") + private Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Output shared() { + return this.shared; + } + /** + * The name of the LVM thin pool to use. + * + */ + @Export(name="thinPool", refs={String.class}, tree="[0]") + private Output thinPool; + + /** + * @return The name of the LVM thin pool to use. + * + */ + public Output thinPool() { + return this.thinPool; + } + /** + * The name of the volume group to use. + * + */ + @Export(name="volumeGroup", refs={String.class}, tree="[0]") + private Output volumeGroup; + + /** + * @return The name of the volume group to use. + * + */ + public Output volumeGroup() { + return this.volumeGroup; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public LVMThin(java.lang.String name) { + this(name, LVMThinArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public LVMThin(java.lang.String name, LVMThinArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public LVMThin(java.lang.String name, LVMThinArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/lVMThin:LVMThin", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private LVMThin(java.lang.String name, Output id, @Nullable LVMThinState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/lVMThin:LVMThin", name, state, makeResourceOptions(options, id), false); + } + + private static LVMThinArgs makeArgs(LVMThinArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? LVMThinArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static LVMThin get(java.lang.String name, Output id, @Nullable LVMThinState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new LVMThin(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMThinArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMThinArgs.java new file mode 100644 index 00000000..54110bfd --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/LVMThinArgs.java @@ -0,0 +1,300 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class LVMThinArgs extends com.pulumi.resources.ResourceArgs { + + public static final LVMThinArgs Empty = new LVMThinArgs(); + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="lvmThinId", required=true) + private Output lvmThinId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output lvmThinId() { + return this.lvmThinId; + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The name of the LVM thin pool to use. + * + */ + @Import(name="thinPool", required=true) + private Output thinPool; + + /** + * @return The name of the LVM thin pool to use. + * + */ + public Output thinPool() { + return this.thinPool; + } + + /** + * The name of the volume group to use. + * + */ + @Import(name="volumeGroup", required=true) + private Output volumeGroup; + + /** + * @return The name of the volume group to use. + * + */ + public Output volumeGroup() { + return this.volumeGroup; + } + + private LVMThinArgs() {} + + private LVMThinArgs(LVMThinArgs $) { + this.contents = $.contents; + this.disable = $.disable; + this.lvmThinId = $.lvmThinId; + this.nodes = $.nodes; + this.thinPool = $.thinPool; + this.volumeGroup = $.volumeGroup; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LVMThinArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LVMThinArgs $; + + public Builder() { + $ = new LVMThinArgs(); + } + + public Builder(LVMThinArgs defaults) { + $ = new LVMThinArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param lvmThinId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmThinId(Output lvmThinId) { + $.lvmThinId = lvmThinId; + return this; + } + + /** + * @param lvmThinId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmThinId(String lvmThinId) { + return lvmThinId(Output.of(lvmThinId)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param thinPool The name of the LVM thin pool to use. + * + * @return builder + * + */ + public Builder thinPool(Output thinPool) { + $.thinPool = thinPool; + return this; + } + + /** + * @param thinPool The name of the LVM thin pool to use. + * + * @return builder + * + */ + public Builder thinPool(String thinPool) { + return thinPool(Output.of(thinPool)); + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(Output volumeGroup) { + $.volumeGroup = volumeGroup; + return this; + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(String volumeGroup) { + return volumeGroup(Output.of(volumeGroup)); + } + + public LVMThinArgs build() { + if ($.lvmThinId == null) { + throw new MissingRequiredPropertyException("LVMThinArgs", "lvmThinId"); + } + if ($.thinPool == null) { + throw new MissingRequiredPropertyException("LVMThinArgs", "thinPool"); + } + if ($.volumeGroup == null) { + throw new MissingRequiredPropertyException("LVMThinArgs", "volumeGroup"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/NFS.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/NFS.java new file mode 100644 index 00000000..4b332e16 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/NFS.java @@ -0,0 +1,287 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Storage.NFSArgs; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.NFSState; +import io.muehlbachler.pulumi.proxmoxve.Storage.outputs.NFSBackups; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Manages an NFS-based storage in Proxmox VE. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.NFS;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.NFSArgs;
+ * import com.pulumi.proxmoxve.Storage.inputs.NFSBackupsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new NFS("example", NFSArgs.builder()
+ *             .nfsId("example-nfs")
+ *             .nodes("pve")
+ *             .server("10.0.0.10")
+ *             .export("/exports/proxmox")
+ *             .contents(            
+ *                 "images",
+ *                 "iso",
+ *                 "backup")
+ *             .options("vers=4.2")
+ *             .preallocation("metadata")
+ *             .snapshotAsVolumeChain(true)
+ *             .backups(NFSBackupsArgs.builder()
+ *                 .maxProtectedBackups(5)
+ *                 .keepDaily(7)
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Storage/nFS:NFS") +public class NFS extends com.pulumi.resources.CustomResource { + /** + * Configure backup retention settings for the storage type. + * + */ + @Export(name="backups", refs={NFSBackups.class}, tree="[0]") + private Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Output> backups() { + return Codegen.optional(this.backups); + } + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Export(name="contents", refs={List.class,String.class}, tree="[0,1]") + private Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Output> contents() { + return this.contents; + } + /** + * Whether the storage is disabled. + * + */ + @Export(name="disable", refs={Boolean.class}, tree="[0]") + private Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Output disable() { + return this.disable; + } + /** + * The path of the NFS export. + * + */ + @Export(name="export", refs={String.class}, tree="[0]") + private Output export; + + /** + * @return The path of the NFS export. + * + */ + public Output export() { + return this.export; + } + /** + * The unique identifier of the storage. + * + */ + @Export(name="nfsId", refs={String.class}, tree="[0]") + private Output nfsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output nfsId() { + return this.nfsId; + } + /** + * A list of nodes where this storage is available. + * + */ + @Export(name="nodes", refs={List.class,String.class}, tree="[0,1]") + private Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Output> nodes() { + return this.nodes; + } + /** + * The options to pass to the NFS service. + * + */ + @Export(name="options", refs={String.class}, tree="[0]") + private Output options; + + /** + * @return The options to pass to the NFS service. + * + */ + public Output> options() { + return Codegen.optional(this.options); + } + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Export(name="preallocation", refs={String.class}, tree="[0]") + private Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Output> preallocation() { + return Codegen.optional(this.preallocation); + } + /** + * The IP address or DNS name of the NFS server. + * + */ + @Export(name="server", refs={String.class}, tree="[0]") + private Output server; + + /** + * @return The IP address or DNS name of the NFS server. + * + */ + public Output server() { + return this.server; + } + /** + * Whether the storage is shared across all nodes. + * + */ + @Export(name="shared", refs={Boolean.class}, tree="[0]") + private Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Output shared() { + return this.shared; + } + /** + * Enable support for creating snapshots through volume backing-chains. + * + */ + @Export(name="snapshotAsVolumeChain", refs={Boolean.class}, tree="[0]") + private Output snapshotAsVolumeChain; + + /** + * @return Enable support for creating snapshots through volume backing-chains. + * + */ + public Output> snapshotAsVolumeChain() { + return Codegen.optional(this.snapshotAsVolumeChain); + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public NFS(java.lang.String name) { + this(name, NFSArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public NFS(java.lang.String name, NFSArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public NFS(java.lang.String name, NFSArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/nFS:NFS", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private NFS(java.lang.String name, Output id, @Nullable NFSState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/nFS:NFS", name, state, makeResourceOptions(options, id), false); + } + + private static NFSArgs makeArgs(NFSArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? NFSArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static NFS get(java.lang.String name, Output id, @Nullable NFSState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new NFS(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/NFSArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/NFSArgs.java new file mode 100644 index 00000000..27ffdb71 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/NFSArgs.java @@ -0,0 +1,449 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.NFSBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class NFSArgs extends com.pulumi.resources.ResourceArgs { + + public static final NFSArgs Empty = new NFSArgs(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The path of the NFS export. + * + */ + @Import(name="export", required=true) + private Output export; + + /** + * @return The path of the NFS export. + * + */ + public Output export() { + return this.export; + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="nfsId", required=true) + private Output nfsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output nfsId() { + return this.nfsId; + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The options to pass to the NFS service. + * + */ + @Import(name="options") + private @Nullable Output options; + + /** + * @return The options to pass to the NFS service. + * + */ + public Optional> options() { + return Optional.ofNullable(this.options); + } + + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Import(name="preallocation") + private @Nullable Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Optional> preallocation() { + return Optional.ofNullable(this.preallocation); + } + + /** + * The IP address or DNS name of the NFS server. + * + */ + @Import(name="server", required=true) + private Output server; + + /** + * @return The IP address or DNS name of the NFS server. + * + */ + public Output server() { + return this.server; + } + + /** + * Enable support for creating snapshots through volume backing-chains. + * + */ + @Import(name="snapshotAsVolumeChain") + private @Nullable Output snapshotAsVolumeChain; + + /** + * @return Enable support for creating snapshots through volume backing-chains. + * + */ + public Optional> snapshotAsVolumeChain() { + return Optional.ofNullable(this.snapshotAsVolumeChain); + } + + private NFSArgs() {} + + private NFSArgs(NFSArgs $) { + this.backups = $.backups; + this.contents = $.contents; + this.disable = $.disable; + this.export = $.export; + this.nfsId = $.nfsId; + this.nodes = $.nodes; + this.options = $.options; + this.preallocation = $.preallocation; + this.server = $.server; + this.snapshotAsVolumeChain = $.snapshotAsVolumeChain; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(NFSArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private NFSArgs $; + + public Builder() { + $ = new NFSArgs(); + } + + public Builder(NFSArgs defaults) { + $ = new NFSArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(NFSBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param export The path of the NFS export. + * + * @return builder + * + */ + public Builder export(Output export) { + $.export = export; + return this; + } + + /** + * @param export The path of the NFS export. + * + * @return builder + * + */ + public Builder export(String export) { + return export(Output.of(export)); + } + + /** + * @param nfsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder nfsId(Output nfsId) { + $.nfsId = nfsId; + return this; + } + + /** + * @param nfsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder nfsId(String nfsId) { + return nfsId(Output.of(nfsId)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param options The options to pass to the NFS service. + * + * @return builder + * + */ + public Builder options(@Nullable Output options) { + $.options = options; + return this; + } + + /** + * @param options The options to pass to the NFS service. + * + * @return builder + * + */ + public Builder options(String options) { + return options(Output.of(options)); + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(@Nullable Output preallocation) { + $.preallocation = preallocation; + return this; + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(String preallocation) { + return preallocation(Output.of(preallocation)); + } + + /** + * @param server The IP address or DNS name of the NFS server. + * + * @return builder + * + */ + public Builder server(Output server) { + $.server = server; + return this; + } + + /** + * @param server The IP address or DNS name of the NFS server. + * + * @return builder + * + */ + public Builder server(String server) { + return server(Output.of(server)); + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(@Nullable Output snapshotAsVolumeChain) { + $.snapshotAsVolumeChain = snapshotAsVolumeChain; + return this; + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(Boolean snapshotAsVolumeChain) { + return snapshotAsVolumeChain(Output.of(snapshotAsVolumeChain)); + } + + public NFSArgs build() { + if ($.export == null) { + throw new MissingRequiredPropertyException("NFSArgs", "export"); + } + if ($.nfsId == null) { + throw new MissingRequiredPropertyException("NFSArgs", "nfsId"); + } + if ($.server == null) { + throw new MissingRequiredPropertyException("NFSArgs", "server"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/PBS.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/PBS.java new file mode 100644 index 00000000..2859f366 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/PBS.java @@ -0,0 +1,355 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Storage.PBSArgs; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.PBSState; +import io.muehlbachler.pulumi.proxmoxve.Storage.outputs.PBSBackups; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Manages a Proxmox Backup Server (PBS) storage in Proxmox VE. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.PBS;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.PBSArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new PBS("example", PBSArgs.builder()
+ *             .pbsId("example-pbs")
+ *             .nodes("pve")
+ *             .server("pbs.example.local")
+ *             .datastore("backup")
+ *             .username("pbs-user")
+ *             .password("pbs-password")
+ *             .fingerprint("AA:BB:CC:DD:EE:FF")
+ *             .contents("backup")
+ *             .generateEncryptionKey(true)
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Storage/pBS:PBS") +public class PBS extends com.pulumi.resources.CustomResource { + /** + * Configure backup retention settings for the storage type. + * + */ + @Export(name="backups", refs={PBSBackups.class}, tree="[0]") + private Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Output> backups() { + return Codegen.optional(this.backups); + } + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Export(name="contents", refs={List.class,String.class}, tree="[0,1]") + private Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Output> contents() { + return this.contents; + } + /** + * The name of the datastore on the Proxmox Backup Server. + * + */ + @Export(name="datastore", refs={String.class}, tree="[0]") + private Output datastore; + + /** + * @return The name of the datastore on the Proxmox Backup Server. + * + */ + public Output datastore() { + return this.datastore; + } + /** + * Whether the storage is disabled. + * + */ + @Export(name="disable", refs={Boolean.class}, tree="[0]") + private Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Output disable() { + return this.disable; + } + /** + * An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + */ + @Export(name="encryptionKey", refs={String.class}, tree="[0]") + private Output encryptionKey; + + /** + * @return An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + */ + public Output> encryptionKey() { + return Codegen.optional(this.encryptionKey); + } + /** + * The SHA256 fingerprint of the encryption key currently in use. + * + */ + @Export(name="encryptionKeyFingerprint", refs={String.class}, tree="[0]") + private Output encryptionKeyFingerprint; + + /** + * @return The SHA256 fingerprint of the encryption key currently in use. + * + */ + public Output encryptionKeyFingerprint() { + return this.encryptionKeyFingerprint; + } + /** + * The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + */ + @Export(name="fingerprint", refs={String.class}, tree="[0]") + private Output fingerprint; + + /** + * @return The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + */ + public Output> fingerprint() { + return Codegen.optional(this.fingerprint); + } + /** + * If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + */ + @Export(name="generateEncryptionKey", refs={Boolean.class}, tree="[0]") + private Output generateEncryptionKey; + + /** + * @return If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + */ + public Output> generateEncryptionKey() { + return Codegen.optional(this.generateEncryptionKey); + } + /** + * The encryption key returned by Proxmox when <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span> is true. + * + */ + @Export(name="generatedEncryptionKey", refs={String.class}, tree="[0]") + private Output generatedEncryptionKey; + + /** + * @return The encryption key returned by Proxmox when <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span> is true. + * + */ + public Output generatedEncryptionKey() { + return this.generatedEncryptionKey; + } + /** + * The namespace to use on the Proxmox Backup Server. + * + */ + @Export(name="namespace", refs={String.class}, tree="[0]") + private Output namespace; + + /** + * @return The namespace to use on the Proxmox Backup Server. + * + */ + public Output> namespace() { + return Codegen.optional(this.namespace); + } + /** + * A list of nodes where this storage is available. + * + */ + @Export(name="nodes", refs={List.class,String.class}, tree="[0,1]") + private Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Output> nodes() { + return this.nodes; + } + /** + * The password for authenticating with the Proxmox Backup Server. + * + */ + @Export(name="password", refs={String.class}, tree="[0]") + private Output password; + + /** + * @return The password for authenticating with the Proxmox Backup Server. + * + */ + public Output password() { + return this.password; + } + /** + * The unique identifier of the storage. + * + */ + @Export(name="pbsId", refs={String.class}, tree="[0]") + private Output pbsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output pbsId() { + return this.pbsId; + } + /** + * The IP address or DNS name of the Proxmox Backup Server. + * + */ + @Export(name="server", refs={String.class}, tree="[0]") + private Output server; + + /** + * @return The IP address or DNS name of the Proxmox Backup Server. + * + */ + public Output server() { + return this.server; + } + /** + * Whether the storage is shared across all nodes. + * + */ + @Export(name="shared", refs={Boolean.class}, tree="[0]") + private Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Output shared() { + return this.shared; + } + /** + * The username for authenticating with the Proxmox Backup Server. + * + */ + @Export(name="username", refs={String.class}, tree="[0]") + private Output username; + + /** + * @return The username for authenticating with the Proxmox Backup Server. + * + */ + public Output username() { + return this.username; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public PBS(java.lang.String name) { + this(name, PBSArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public PBS(java.lang.String name, PBSArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public PBS(java.lang.String name, PBSArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/pBS:PBS", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private PBS(java.lang.String name, Output id, @Nullable PBSState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/pBS:PBS", name, state, makeResourceOptions(options, id), false); + } + + private static PBSArgs makeArgs(PBSArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? PBSArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .additionalSecretOutputs(List.of( + "encryptionKey", + "generatedEncryptionKey", + "password" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static PBS get(java.lang.String name, Output id, @Nullable PBSState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new PBS(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/PBSArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/PBSArgs.java new file mode 100644 index 00000000..2660dd51 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/PBSArgs.java @@ -0,0 +1,566 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.PBSBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class PBSArgs extends com.pulumi.resources.ResourceArgs { + + public static final PBSArgs Empty = new PBSArgs(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * The name of the datastore on the Proxmox Backup Server. + * + */ + @Import(name="datastore", required=true) + private Output datastore; + + /** + * @return The name of the datastore on the Proxmox Backup Server. + * + */ + public Output datastore() { + return this.datastore; + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + */ + @Import(name="encryptionKey") + private @Nullable Output encryptionKey; + + /** + * @return An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + */ + public Optional> encryptionKey() { + return Optional.ofNullable(this.encryptionKey); + } + + /** + * The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + */ + @Import(name="fingerprint") + private @Nullable Output fingerprint; + + /** + * @return The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + */ + public Optional> fingerprint() { + return Optional.ofNullable(this.fingerprint); + } + + /** + * If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + */ + @Import(name="generateEncryptionKey") + private @Nullable Output generateEncryptionKey; + + /** + * @return If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + */ + public Optional> generateEncryptionKey() { + return Optional.ofNullable(this.generateEncryptionKey); + } + + /** + * The namespace to use on the Proxmox Backup Server. + * + */ + @Import(name="namespace") + private @Nullable Output namespace; + + /** + * @return The namespace to use on the Proxmox Backup Server. + * + */ + public Optional> namespace() { + return Optional.ofNullable(this.namespace); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The password for authenticating with the Proxmox Backup Server. + * + */ + @Import(name="password", required=true) + private Output password; + + /** + * @return The password for authenticating with the Proxmox Backup Server. + * + */ + public Output password() { + return this.password; + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="pbsId", required=true) + private Output pbsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output pbsId() { + return this.pbsId; + } + + /** + * The IP address or DNS name of the Proxmox Backup Server. + * + */ + @Import(name="server", required=true) + private Output server; + + /** + * @return The IP address or DNS name of the Proxmox Backup Server. + * + */ + public Output server() { + return this.server; + } + + /** + * The username for authenticating with the Proxmox Backup Server. + * + */ + @Import(name="username", required=true) + private Output username; + + /** + * @return The username for authenticating with the Proxmox Backup Server. + * + */ + public Output username() { + return this.username; + } + + private PBSArgs() {} + + private PBSArgs(PBSArgs $) { + this.backups = $.backups; + this.contents = $.contents; + this.datastore = $.datastore; + this.disable = $.disable; + this.encryptionKey = $.encryptionKey; + this.fingerprint = $.fingerprint; + this.generateEncryptionKey = $.generateEncryptionKey; + this.namespace = $.namespace; + this.nodes = $.nodes; + this.password = $.password; + this.pbsId = $.pbsId; + this.server = $.server; + this.username = $.username; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(PBSArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private PBSArgs $; + + public Builder() { + $ = new PBSArgs(); + } + + public Builder(PBSArgs defaults) { + $ = new PBSArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(PBSBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param datastore The name of the datastore on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder datastore(Output datastore) { + $.datastore = datastore; + return this; + } + + /** + * @param datastore The name of the datastore on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder datastore(String datastore) { + return datastore(Output.of(datastore)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param encryptionKey An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + * @return builder + * + */ + public Builder encryptionKey(@Nullable Output encryptionKey) { + $.encryptionKey = encryptionKey; + return this; + } + + /** + * @param encryptionKey An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + * @return builder + * + */ + public Builder encryptionKey(String encryptionKey) { + return encryptionKey(Output.of(encryptionKey)); + } + + /** + * @param fingerprint The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + * @return builder + * + */ + public Builder fingerprint(@Nullable Output fingerprint) { + $.fingerprint = fingerprint; + return this; + } + + /** + * @param fingerprint The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + * @return builder + * + */ + public Builder fingerprint(String fingerprint) { + return fingerprint(Output.of(fingerprint)); + } + + /** + * @param generateEncryptionKey If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + * @return builder + * + */ + public Builder generateEncryptionKey(@Nullable Output generateEncryptionKey) { + $.generateEncryptionKey = generateEncryptionKey; + return this; + } + + /** + * @param generateEncryptionKey If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + * @return builder + * + */ + public Builder generateEncryptionKey(Boolean generateEncryptionKey) { + return generateEncryptionKey(Output.of(generateEncryptionKey)); + } + + /** + * @param namespace The namespace to use on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder namespace(@Nullable Output namespace) { + $.namespace = namespace; + return this; + } + + /** + * @param namespace The namespace to use on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder namespace(String namespace) { + return namespace(Output.of(namespace)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param password The password for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder password(Output password) { + $.password = password; + return this; + } + + /** + * @param password The password for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder password(String password) { + return password(Output.of(password)); + } + + /** + * @param pbsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder pbsId(Output pbsId) { + $.pbsId = pbsId; + return this; + } + + /** + * @param pbsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder pbsId(String pbsId) { + return pbsId(Output.of(pbsId)); + } + + /** + * @param server The IP address or DNS name of the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder server(Output server) { + $.server = server; + return this; + } + + /** + * @param server The IP address or DNS name of the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder server(String server) { + return server(Output.of(server)); + } + + /** + * @param username The username for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder username(Output username) { + $.username = username; + return this; + } + + /** + * @param username The username for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder username(String username) { + return username(Output.of(username)); + } + + public PBSArgs build() { + if ($.datastore == null) { + throw new MissingRequiredPropertyException("PBSArgs", "datastore"); + } + if ($.password == null) { + throw new MissingRequiredPropertyException("PBSArgs", "password"); + } + if ($.pbsId == null) { + throw new MissingRequiredPropertyException("PBSArgs", "pbsId"); + } + if ($.server == null) { + throw new MissingRequiredPropertyException("PBSArgs", "server"); + } + if ($.username == null) { + throw new MissingRequiredPropertyException("PBSArgs", "username"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/ZFSPool.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/ZFSPool.java new file mode 100644 index 00000000..e7e214f0 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/ZFSPool.java @@ -0,0 +1,234 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Storage.ZFSPoolArgs; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.ZFSPoolState; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Manages ZFS-based storage in Proxmox VE. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.ZFSPool;
+ * import io.muehlbachler.pulumi.proxmoxve.Storage.ZFSPoolArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new ZFSPool("example", ZFSPoolArgs.builder()
+ *             .zfsPoolId("example-zfs")
+ *             .nodes("pve")
+ *             .zfsPool("rpool/data")
+ *             .contents("images")
+ *             .thinProvision(true)
+ *             .blocksize("64k")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:Storage/zFSPool:ZFSPool") +public class ZFSPool extends com.pulumi.resources.CustomResource { + /** + * Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + */ + @Export(name="blocksize", refs={String.class}, tree="[0]") + private Output blocksize; + + /** + * @return Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + */ + public Output> blocksize() { + return Codegen.optional(this.blocksize); + } + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Export(name="contents", refs={List.class,String.class}, tree="[0,1]") + private Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Output> contents() { + return this.contents; + } + /** + * Whether the storage is disabled. + * + */ + @Export(name="disable", refs={Boolean.class}, tree="[0]") + private Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Output disable() { + return this.disable; + } + /** + * A list of nodes where this storage is available. + * + */ + @Export(name="nodes", refs={List.class,String.class}, tree="[0,1]") + private Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Output> nodes() { + return this.nodes; + } + /** + * Whether the storage is shared across all nodes. + * + */ + @Export(name="shared", refs={Boolean.class}, tree="[0]") + private Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Output shared() { + return this.shared; + } + /** + * Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + */ + @Export(name="thinProvision", refs={Boolean.class}, tree="[0]") + private Output thinProvision; + + /** + * @return Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + */ + public Output> thinProvision() { + return Codegen.optional(this.thinProvision); + } + /** + * The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + */ + @Export(name="zfsPool", refs={String.class}, tree="[0]") + private Output zfsPool; + + /** + * @return The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + */ + public Output zfsPool() { + return this.zfsPool; + } + /** + * The unique identifier of the storage. + * + */ + @Export(name="zfsPoolId", refs={String.class}, tree="[0]") + private Output zfsPoolId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output zfsPoolId() { + return this.zfsPoolId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public ZFSPool(java.lang.String name) { + this(name, ZFSPoolArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public ZFSPool(java.lang.String name, ZFSPoolArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public ZFSPool(java.lang.String name, ZFSPoolArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/zFSPool:ZFSPool", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private ZFSPool(java.lang.String name, Output id, @Nullable ZFSPoolState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:Storage/zFSPool:ZFSPool", name, state, makeResourceOptions(options, id), false); + } + + private static ZFSPoolArgs makeArgs(ZFSPoolArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? ZFSPoolArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static ZFSPool get(java.lang.String name, Output id, @Nullable ZFSPoolState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new ZFSPool(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/ZFSPoolArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/ZFSPoolArgs.java new file mode 100644 index 00000000..70ef695a --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/ZFSPoolArgs.java @@ -0,0 +1,334 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ZFSPoolArgs extends com.pulumi.resources.ResourceArgs { + + public static final ZFSPoolArgs Empty = new ZFSPoolArgs(); + + /** + * Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + */ + @Import(name="blocksize") + private @Nullable Output blocksize; + + /** + * @return Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + */ + public Optional> blocksize() { + return Optional.ofNullable(this.blocksize); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + */ + @Import(name="thinProvision") + private @Nullable Output thinProvision; + + /** + * @return Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + */ + public Optional> thinProvision() { + return Optional.ofNullable(this.thinProvision); + } + + /** + * The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + */ + @Import(name="zfsPool", required=true) + private Output zfsPool; + + /** + * @return The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + */ + public Output zfsPool() { + return this.zfsPool; + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="zfsPoolId", required=true) + private Output zfsPoolId; + + /** + * @return The unique identifier of the storage. + * + */ + public Output zfsPoolId() { + return this.zfsPoolId; + } + + private ZFSPoolArgs() {} + + private ZFSPoolArgs(ZFSPoolArgs $) { + this.blocksize = $.blocksize; + this.contents = $.contents; + this.disable = $.disable; + this.nodes = $.nodes; + this.thinProvision = $.thinProvision; + this.zfsPool = $.zfsPool; + this.zfsPoolId = $.zfsPoolId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ZFSPoolArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ZFSPoolArgs $; + + public Builder() { + $ = new ZFSPoolArgs(); + } + + public Builder(ZFSPoolArgs defaults) { + $ = new ZFSPoolArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param blocksize Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + * @return builder + * + */ + public Builder blocksize(@Nullable Output blocksize) { + $.blocksize = blocksize; + return this; + } + + /** + * @param blocksize Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + * @return builder + * + */ + public Builder blocksize(String blocksize) { + return blocksize(Output.of(blocksize)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param thinProvision Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + * @return builder + * + */ + public Builder thinProvision(@Nullable Output thinProvision) { + $.thinProvision = thinProvision; + return this; + } + + /** + * @param thinProvision Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + * @return builder + * + */ + public Builder thinProvision(Boolean thinProvision) { + return thinProvision(Output.of(thinProvision)); + } + + /** + * @param zfsPool The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + * @return builder + * + */ + public Builder zfsPool(Output zfsPool) { + $.zfsPool = zfsPool; + return this; + } + + /** + * @param zfsPool The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + * @return builder + * + */ + public Builder zfsPool(String zfsPool) { + return zfsPool(Output.of(zfsPool)); + } + + /** + * @param zfsPoolId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder zfsPoolId(Output zfsPoolId) { + $.zfsPoolId = zfsPoolId; + return this; + } + + /** + * @param zfsPoolId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder zfsPoolId(String zfsPoolId) { + return zfsPoolId(Output.of(zfsPoolId)); + } + + public ZFSPoolArgs build() { + if ($.zfsPool == null) { + throw new MissingRequiredPropertyException("ZFSPoolArgs", "zfsPool"); + } + if ($.zfsPoolId == null) { + throw new MissingRequiredPropertyException("ZFSPoolArgs", "zfsPoolId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/CIFSBackupsArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/CIFSBackupsArgs.java new file mode 100644 index 00000000..f95c9bbe --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/CIFSBackupsArgs.java @@ -0,0 +1,343 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CIFSBackupsArgs extends com.pulumi.resources.ResourceArgs { + + public static final CIFSBackupsArgs Empty = new CIFSBackupsArgs(); + + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + @Import(name="keepAll") + private @Nullable Output keepAll; + + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional> keepAll() { + return Optional.ofNullable(this.keepAll); + } + + /** + * The number of daily backups to keep. Older backups will be removed. + * + */ + @Import(name="keepDaily") + private @Nullable Output keepDaily; + + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional> keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + + /** + * The number of hourly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepHourly") + private @Nullable Output keepHourly; + + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional> keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + @Import(name="keepLast") + private @Nullable Output keepLast; + + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional> keepLast() { + return Optional.ofNullable(this.keepLast); + } + + /** + * The number of monthly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepMonthly") + private @Nullable Output keepMonthly; + + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional> keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + + /** + * The number of weekly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepWeekly") + private @Nullable Output keepWeekly; + + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional> keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + + /** + * The number of yearly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepYearly") + private @Nullable Output keepYearly; + + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional> keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + @Import(name="maxProtectedBackups") + private @Nullable Output maxProtectedBackups; + + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional> maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + private CIFSBackupsArgs() {} + + private CIFSBackupsArgs(CIFSBackupsArgs $) { + this.keepAll = $.keepAll; + this.keepDaily = $.keepDaily; + this.keepHourly = $.keepHourly; + this.keepLast = $.keepLast; + this.keepMonthly = $.keepMonthly; + this.keepWeekly = $.keepWeekly; + this.keepYearly = $.keepYearly; + this.maxProtectedBackups = $.maxProtectedBackups; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CIFSBackupsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CIFSBackupsArgs $; + + public Builder() { + $ = new CIFSBackupsArgs(); + } + + public Builder(CIFSBackupsArgs defaults) { + $ = new CIFSBackupsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(@Nullable Output keepAll) { + $.keepAll = keepAll; + return this; + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(Boolean keepAll) { + return keepAll(Output.of(keepAll)); + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(@Nullable Output keepDaily) { + $.keepDaily = keepDaily; + return this; + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(Integer keepDaily) { + return keepDaily(Output.of(keepDaily)); + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(@Nullable Output keepHourly) { + $.keepHourly = keepHourly; + return this; + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(Integer keepHourly) { + return keepHourly(Output.of(keepHourly)); + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(@Nullable Output keepLast) { + $.keepLast = keepLast; + return this; + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(Integer keepLast) { + return keepLast(Output.of(keepLast)); + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(@Nullable Output keepMonthly) { + $.keepMonthly = keepMonthly; + return this; + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(Integer keepMonthly) { + return keepMonthly(Output.of(keepMonthly)); + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(@Nullable Output keepWeekly) { + $.keepWeekly = keepWeekly; + return this; + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(Integer keepWeekly) { + return keepWeekly(Output.of(keepWeekly)); + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(@Nullable Output keepYearly) { + $.keepYearly = keepYearly; + return this; + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(Integer keepYearly) { + return keepYearly(Output.of(keepYearly)); + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(@Nullable Output maxProtectedBackups) { + $.maxProtectedBackups = maxProtectedBackups; + return this; + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(Integer maxProtectedBackups) { + return maxProtectedBackups(Output.of(maxProtectedBackups)); + } + + public CIFSBackupsArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/CIFSState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/CIFSState.java new file mode 100644 index 00000000..dc2defa6 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/CIFSState.java @@ -0,0 +1,587 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.CIFSBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CIFSState extends com.pulumi.resources.ResourceArgs { + + public static final CIFSState Empty = new CIFSState(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="cifsId") + private @Nullable Output cifsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Optional> cifsId() { + return Optional.ofNullable(this.cifsId); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The SMB/CIFS domain. + * + */ + @Import(name="domain") + private @Nullable Output domain; + + /** + * @return The SMB/CIFS domain. + * + */ + public Optional> domain() { + return Optional.ofNullable(this.domain); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The password for authenticating with the SMB/CIFS server. + * + */ + @Import(name="password") + private @Nullable Output password; + + /** + * @return The password for authenticating with the SMB/CIFS server. + * + */ + public Optional> password() { + return Optional.ofNullable(this.password); + } + + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Import(name="preallocation") + private @Nullable Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Optional> preallocation() { + return Optional.ofNullable(this.preallocation); + } + + /** + * The IP address or DNS name of the SMB/CIFS server. + * + */ + @Import(name="server") + private @Nullable Output server; + + /** + * @return The IP address or DNS name of the SMB/CIFS server. + * + */ + public Optional> server() { + return Optional.ofNullable(this.server); + } + + /** + * The name of the SMB/CIFS share. + * + */ + @Import(name="share") + private @Nullable Output share; + + /** + * @return The name of the SMB/CIFS share. + * + */ + public Optional> share() { + return Optional.ofNullable(this.share); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + /** + * Enable support for creating snapshots through volume backing-chains. + * + */ + @Import(name="snapshotAsVolumeChain") + private @Nullable Output snapshotAsVolumeChain; + + /** + * @return Enable support for creating snapshots through volume backing-chains. + * + */ + public Optional> snapshotAsVolumeChain() { + return Optional.ofNullable(this.snapshotAsVolumeChain); + } + + /** + * A subdirectory to mount within the share. + * + */ + @Import(name="subdirectory") + private @Nullable Output subdirectory; + + /** + * @return A subdirectory to mount within the share. + * + */ + public Optional> subdirectory() { + return Optional.ofNullable(this.subdirectory); + } + + /** + * The username for authenticating with the SMB/CIFS server. + * + */ + @Import(name="username") + private @Nullable Output username; + + /** + * @return The username for authenticating with the SMB/CIFS server. + * + */ + public Optional> username() { + return Optional.ofNullable(this.username); + } + + private CIFSState() {} + + private CIFSState(CIFSState $) { + this.backups = $.backups; + this.cifsId = $.cifsId; + this.contents = $.contents; + this.disable = $.disable; + this.domain = $.domain; + this.nodes = $.nodes; + this.password = $.password; + this.preallocation = $.preallocation; + this.server = $.server; + this.share = $.share; + this.shared = $.shared; + this.snapshotAsVolumeChain = $.snapshotAsVolumeChain; + this.subdirectory = $.subdirectory; + this.username = $.username; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CIFSState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CIFSState $; + + public Builder() { + $ = new CIFSState(); + } + + public Builder(CIFSState defaults) { + $ = new CIFSState(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(CIFSBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param cifsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder cifsId(@Nullable Output cifsId) { + $.cifsId = cifsId; + return this; + } + + /** + * @param cifsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder cifsId(String cifsId) { + return cifsId(Output.of(cifsId)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param domain The SMB/CIFS domain. + * + * @return builder + * + */ + public Builder domain(@Nullable Output domain) { + $.domain = domain; + return this; + } + + /** + * @param domain The SMB/CIFS domain. + * + * @return builder + * + */ + public Builder domain(String domain) { + return domain(Output.of(domain)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param password The password for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder password(@Nullable Output password) { + $.password = password; + return this; + } + + /** + * @param password The password for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder password(String password) { + return password(Output.of(password)); + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(@Nullable Output preallocation) { + $.preallocation = preallocation; + return this; + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(String preallocation) { + return preallocation(Output.of(preallocation)); + } + + /** + * @param server The IP address or DNS name of the SMB/CIFS server. + * + * @return builder + * + */ + public Builder server(@Nullable Output server) { + $.server = server; + return this; + } + + /** + * @param server The IP address or DNS name of the SMB/CIFS server. + * + * @return builder + * + */ + public Builder server(String server) { + return server(Output.of(server)); + } + + /** + * @param share The name of the SMB/CIFS share. + * + * @return builder + * + */ + public Builder share(@Nullable Output share) { + $.share = share; + return this; + } + + /** + * @param share The name of the SMB/CIFS share. + * + * @return builder + * + */ + public Builder share(String share) { + return share(Output.of(share)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(@Nullable Output snapshotAsVolumeChain) { + $.snapshotAsVolumeChain = snapshotAsVolumeChain; + return this; + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(Boolean snapshotAsVolumeChain) { + return snapshotAsVolumeChain(Output.of(snapshotAsVolumeChain)); + } + + /** + * @param subdirectory A subdirectory to mount within the share. + * + * @return builder + * + */ + public Builder subdirectory(@Nullable Output subdirectory) { + $.subdirectory = subdirectory; + return this; + } + + /** + * @param subdirectory A subdirectory to mount within the share. + * + * @return builder + * + */ + public Builder subdirectory(String subdirectory) { + return subdirectory(Output.of(subdirectory)); + } + + /** + * @param username The username for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder username(@Nullable Output username) { + $.username = username; + return this; + } + + /** + * @param username The username for authenticating with the SMB/CIFS server. + * + * @return builder + * + */ + public Builder username(String username) { + return username(Output.of(username)); + } + + public CIFSState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/DirectoryBackupsArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/DirectoryBackupsArgs.java new file mode 100644 index 00000000..8e840dc9 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/DirectoryBackupsArgs.java @@ -0,0 +1,343 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class DirectoryBackupsArgs extends com.pulumi.resources.ResourceArgs { + + public static final DirectoryBackupsArgs Empty = new DirectoryBackupsArgs(); + + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + @Import(name="keepAll") + private @Nullable Output keepAll; + + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional> keepAll() { + return Optional.ofNullable(this.keepAll); + } + + /** + * The number of daily backups to keep. Older backups will be removed. + * + */ + @Import(name="keepDaily") + private @Nullable Output keepDaily; + + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional> keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + + /** + * The number of hourly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepHourly") + private @Nullable Output keepHourly; + + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional> keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + @Import(name="keepLast") + private @Nullable Output keepLast; + + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional> keepLast() { + return Optional.ofNullable(this.keepLast); + } + + /** + * The number of monthly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepMonthly") + private @Nullable Output keepMonthly; + + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional> keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + + /** + * The number of weekly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepWeekly") + private @Nullable Output keepWeekly; + + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional> keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + + /** + * The number of yearly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepYearly") + private @Nullable Output keepYearly; + + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional> keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + @Import(name="maxProtectedBackups") + private @Nullable Output maxProtectedBackups; + + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional> maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + private DirectoryBackupsArgs() {} + + private DirectoryBackupsArgs(DirectoryBackupsArgs $) { + this.keepAll = $.keepAll; + this.keepDaily = $.keepDaily; + this.keepHourly = $.keepHourly; + this.keepLast = $.keepLast; + this.keepMonthly = $.keepMonthly; + this.keepWeekly = $.keepWeekly; + this.keepYearly = $.keepYearly; + this.maxProtectedBackups = $.maxProtectedBackups; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(DirectoryBackupsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private DirectoryBackupsArgs $; + + public Builder() { + $ = new DirectoryBackupsArgs(); + } + + public Builder(DirectoryBackupsArgs defaults) { + $ = new DirectoryBackupsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(@Nullable Output keepAll) { + $.keepAll = keepAll; + return this; + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(Boolean keepAll) { + return keepAll(Output.of(keepAll)); + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(@Nullable Output keepDaily) { + $.keepDaily = keepDaily; + return this; + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(Integer keepDaily) { + return keepDaily(Output.of(keepDaily)); + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(@Nullable Output keepHourly) { + $.keepHourly = keepHourly; + return this; + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(Integer keepHourly) { + return keepHourly(Output.of(keepHourly)); + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(@Nullable Output keepLast) { + $.keepLast = keepLast; + return this; + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(Integer keepLast) { + return keepLast(Output.of(keepLast)); + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(@Nullable Output keepMonthly) { + $.keepMonthly = keepMonthly; + return this; + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(Integer keepMonthly) { + return keepMonthly(Output.of(keepMonthly)); + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(@Nullable Output keepWeekly) { + $.keepWeekly = keepWeekly; + return this; + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(Integer keepWeekly) { + return keepWeekly(Output.of(keepWeekly)); + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(@Nullable Output keepYearly) { + $.keepYearly = keepYearly; + return this; + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(Integer keepYearly) { + return keepYearly(Output.of(keepYearly)); + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(@Nullable Output maxProtectedBackups) { + $.maxProtectedBackups = maxProtectedBackups; + return this; + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(Integer maxProtectedBackups) { + return maxProtectedBackups(Output.of(maxProtectedBackups)); + } + + public DirectoryBackupsArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/DirectoryState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/DirectoryState.java new file mode 100644 index 00000000..28c8684a --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/DirectoryState.java @@ -0,0 +1,365 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.DirectoryBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class DirectoryState extends com.pulumi.resources.ResourceArgs { + + public static final DirectoryState Empty = new DirectoryState(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="directoryId") + private @Nullable Output directoryId; + + /** + * @return The unique identifier of the storage. + * + */ + public Optional> directoryId() { + return Optional.ofNullable(this.directoryId); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The path to the directory on the Proxmox node. + * + */ + @Import(name="path") + private @Nullable Output path; + + /** + * @return The path to the directory on the Proxmox node. + * + */ + public Optional> path() { + return Optional.ofNullable(this.path); + } + + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Import(name="preallocation") + private @Nullable Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Optional> preallocation() { + return Optional.ofNullable(this.preallocation); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + private DirectoryState() {} + + private DirectoryState(DirectoryState $) { + this.backups = $.backups; + this.contents = $.contents; + this.directoryId = $.directoryId; + this.disable = $.disable; + this.nodes = $.nodes; + this.path = $.path; + this.preallocation = $.preallocation; + this.shared = $.shared; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(DirectoryState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private DirectoryState $; + + public Builder() { + $ = new DirectoryState(); + } + + public Builder(DirectoryState defaults) { + $ = new DirectoryState(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(DirectoryBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param directoryId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder directoryId(@Nullable Output directoryId) { + $.directoryId = directoryId; + return this; + } + + /** + * @param directoryId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder directoryId(String directoryId) { + return directoryId(Output.of(directoryId)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param path The path to the directory on the Proxmox node. + * + * @return builder + * + */ + public Builder path(@Nullable Output path) { + $.path = path; + return this; + } + + /** + * @param path The path to the directory on the Proxmox node. + * + * @return builder + * + */ + public Builder path(String path) { + return path(Output.of(path)); + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(@Nullable Output preallocation) { + $.preallocation = preallocation; + return this; + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(String preallocation) { + return preallocation(Output.of(preallocation)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + public DirectoryState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/LVMState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/LVMState.java new file mode 100644 index 00000000..c516f221 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/LVMState.java @@ -0,0 +1,327 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class LVMState extends com.pulumi.resources.ResourceArgs { + + public static final LVMState Empty = new LVMState(); + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="lvmId") + private @Nullable Output lvmId; + + /** + * @return The unique identifier of the storage. + * + */ + public Optional> lvmId() { + return Optional.ofNullable(this.lvmId); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + /** + * The name of the volume group to use. + * + */ + @Import(name="volumeGroup") + private @Nullable Output volumeGroup; + + /** + * @return The name of the volume group to use. + * + */ + public Optional> volumeGroup() { + return Optional.ofNullable(this.volumeGroup); + } + + /** + * Whether to zero-out data when removing LVMs. + * + */ + @Import(name="wipeRemovedVolumes") + private @Nullable Output wipeRemovedVolumes; + + /** + * @return Whether to zero-out data when removing LVMs. + * + */ + public Optional> wipeRemovedVolumes() { + return Optional.ofNullable(this.wipeRemovedVolumes); + } + + private LVMState() {} + + private LVMState(LVMState $) { + this.contents = $.contents; + this.disable = $.disable; + this.lvmId = $.lvmId; + this.nodes = $.nodes; + this.shared = $.shared; + this.volumeGroup = $.volumeGroup; + this.wipeRemovedVolumes = $.wipeRemovedVolumes; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LVMState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LVMState $; + + public Builder() { + $ = new LVMState(); + } + + public Builder(LVMState defaults) { + $ = new LVMState(Objects.requireNonNull(defaults)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param lvmId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmId(@Nullable Output lvmId) { + $.lvmId = lvmId; + return this; + } + + /** + * @param lvmId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmId(String lvmId) { + return lvmId(Output.of(lvmId)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(@Nullable Output volumeGroup) { + $.volumeGroup = volumeGroup; + return this; + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(String volumeGroup) { + return volumeGroup(Output.of(volumeGroup)); + } + + /** + * @param wipeRemovedVolumes Whether to zero-out data when removing LVMs. + * + * @return builder + * + */ + public Builder wipeRemovedVolumes(@Nullable Output wipeRemovedVolumes) { + $.wipeRemovedVolumes = wipeRemovedVolumes; + return this; + } + + /** + * @param wipeRemovedVolumes Whether to zero-out data when removing LVMs. + * + * @return builder + * + */ + public Builder wipeRemovedVolumes(Boolean wipeRemovedVolumes) { + return wipeRemovedVolumes(Output.of(wipeRemovedVolumes)); + } + + public LVMState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/LVMThinState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/LVMThinState.java new file mode 100644 index 00000000..a2c1085b --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/LVMThinState.java @@ -0,0 +1,327 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class LVMThinState extends com.pulumi.resources.ResourceArgs { + + public static final LVMThinState Empty = new LVMThinState(); + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="lvmThinId") + private @Nullable Output lvmThinId; + + /** + * @return The unique identifier of the storage. + * + */ + public Optional> lvmThinId() { + return Optional.ofNullable(this.lvmThinId); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + /** + * The name of the LVM thin pool to use. + * + */ + @Import(name="thinPool") + private @Nullable Output thinPool; + + /** + * @return The name of the LVM thin pool to use. + * + */ + public Optional> thinPool() { + return Optional.ofNullable(this.thinPool); + } + + /** + * The name of the volume group to use. + * + */ + @Import(name="volumeGroup") + private @Nullable Output volumeGroup; + + /** + * @return The name of the volume group to use. + * + */ + public Optional> volumeGroup() { + return Optional.ofNullable(this.volumeGroup); + } + + private LVMThinState() {} + + private LVMThinState(LVMThinState $) { + this.contents = $.contents; + this.disable = $.disable; + this.lvmThinId = $.lvmThinId; + this.nodes = $.nodes; + this.shared = $.shared; + this.thinPool = $.thinPool; + this.volumeGroup = $.volumeGroup; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LVMThinState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LVMThinState $; + + public Builder() { + $ = new LVMThinState(); + } + + public Builder(LVMThinState defaults) { + $ = new LVMThinState(Objects.requireNonNull(defaults)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param lvmThinId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmThinId(@Nullable Output lvmThinId) { + $.lvmThinId = lvmThinId; + return this; + } + + /** + * @param lvmThinId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder lvmThinId(String lvmThinId) { + return lvmThinId(Output.of(lvmThinId)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + /** + * @param thinPool The name of the LVM thin pool to use. + * + * @return builder + * + */ + public Builder thinPool(@Nullable Output thinPool) { + $.thinPool = thinPool; + return this; + } + + /** + * @param thinPool The name of the LVM thin pool to use. + * + * @return builder + * + */ + public Builder thinPool(String thinPool) { + return thinPool(Output.of(thinPool)); + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(@Nullable Output volumeGroup) { + $.volumeGroup = volumeGroup; + return this; + } + + /** + * @param volumeGroup The name of the volume group to use. + * + * @return builder + * + */ + public Builder volumeGroup(String volumeGroup) { + return volumeGroup(Output.of(volumeGroup)); + } + + public LVMThinState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/NFSBackupsArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/NFSBackupsArgs.java new file mode 100644 index 00000000..375bca5c --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/NFSBackupsArgs.java @@ -0,0 +1,343 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class NFSBackupsArgs extends com.pulumi.resources.ResourceArgs { + + public static final NFSBackupsArgs Empty = new NFSBackupsArgs(); + + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + @Import(name="keepAll") + private @Nullable Output keepAll; + + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional> keepAll() { + return Optional.ofNullable(this.keepAll); + } + + /** + * The number of daily backups to keep. Older backups will be removed. + * + */ + @Import(name="keepDaily") + private @Nullable Output keepDaily; + + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional> keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + + /** + * The number of hourly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepHourly") + private @Nullable Output keepHourly; + + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional> keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + @Import(name="keepLast") + private @Nullable Output keepLast; + + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional> keepLast() { + return Optional.ofNullable(this.keepLast); + } + + /** + * The number of monthly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepMonthly") + private @Nullable Output keepMonthly; + + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional> keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + + /** + * The number of weekly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepWeekly") + private @Nullable Output keepWeekly; + + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional> keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + + /** + * The number of yearly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepYearly") + private @Nullable Output keepYearly; + + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional> keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + @Import(name="maxProtectedBackups") + private @Nullable Output maxProtectedBackups; + + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional> maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + private NFSBackupsArgs() {} + + private NFSBackupsArgs(NFSBackupsArgs $) { + this.keepAll = $.keepAll; + this.keepDaily = $.keepDaily; + this.keepHourly = $.keepHourly; + this.keepLast = $.keepLast; + this.keepMonthly = $.keepMonthly; + this.keepWeekly = $.keepWeekly; + this.keepYearly = $.keepYearly; + this.maxProtectedBackups = $.maxProtectedBackups; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(NFSBackupsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private NFSBackupsArgs $; + + public Builder() { + $ = new NFSBackupsArgs(); + } + + public Builder(NFSBackupsArgs defaults) { + $ = new NFSBackupsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(@Nullable Output keepAll) { + $.keepAll = keepAll; + return this; + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(Boolean keepAll) { + return keepAll(Output.of(keepAll)); + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(@Nullable Output keepDaily) { + $.keepDaily = keepDaily; + return this; + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(Integer keepDaily) { + return keepDaily(Output.of(keepDaily)); + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(@Nullable Output keepHourly) { + $.keepHourly = keepHourly; + return this; + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(Integer keepHourly) { + return keepHourly(Output.of(keepHourly)); + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(@Nullable Output keepLast) { + $.keepLast = keepLast; + return this; + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(Integer keepLast) { + return keepLast(Output.of(keepLast)); + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(@Nullable Output keepMonthly) { + $.keepMonthly = keepMonthly; + return this; + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(Integer keepMonthly) { + return keepMonthly(Output.of(keepMonthly)); + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(@Nullable Output keepWeekly) { + $.keepWeekly = keepWeekly; + return this; + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(Integer keepWeekly) { + return keepWeekly(Output.of(keepWeekly)); + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(@Nullable Output keepYearly) { + $.keepYearly = keepYearly; + return this; + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(Integer keepYearly) { + return keepYearly(Output.of(keepYearly)); + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(@Nullable Output maxProtectedBackups) { + $.maxProtectedBackups = maxProtectedBackups; + return this; + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(Integer maxProtectedBackups) { + return maxProtectedBackups(Output.of(maxProtectedBackups)); + } + + public NFSBackupsArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/NFSState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/NFSState.java new file mode 100644 index 00000000..0a29c8ff --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/NFSState.java @@ -0,0 +1,476 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.NFSBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class NFSState extends com.pulumi.resources.ResourceArgs { + + public static final NFSState Empty = new NFSState(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * The path of the NFS export. + * + */ + @Import(name="export") + private @Nullable Output export; + + /** + * @return The path of the NFS export. + * + */ + public Optional> export() { + return Optional.ofNullable(this.export); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="nfsId") + private @Nullable Output nfsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Optional> nfsId() { + return Optional.ofNullable(this.nfsId); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The options to pass to the NFS service. + * + */ + @Import(name="options") + private @Nullable Output options; + + /** + * @return The options to pass to the NFS service. + * + */ + public Optional> options() { + return Optional.ofNullable(this.options); + } + + /** + * The preallocation mode for raw and qcow2 images. + * + */ + @Import(name="preallocation") + private @Nullable Output preallocation; + + /** + * @return The preallocation mode for raw and qcow2 images. + * + */ + public Optional> preallocation() { + return Optional.ofNullable(this.preallocation); + } + + /** + * The IP address or DNS name of the NFS server. + * + */ + @Import(name="server") + private @Nullable Output server; + + /** + * @return The IP address or DNS name of the NFS server. + * + */ + public Optional> server() { + return Optional.ofNullable(this.server); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + /** + * Enable support for creating snapshots through volume backing-chains. + * + */ + @Import(name="snapshotAsVolumeChain") + private @Nullable Output snapshotAsVolumeChain; + + /** + * @return Enable support for creating snapshots through volume backing-chains. + * + */ + public Optional> snapshotAsVolumeChain() { + return Optional.ofNullable(this.snapshotAsVolumeChain); + } + + private NFSState() {} + + private NFSState(NFSState $) { + this.backups = $.backups; + this.contents = $.contents; + this.disable = $.disable; + this.export = $.export; + this.nfsId = $.nfsId; + this.nodes = $.nodes; + this.options = $.options; + this.preallocation = $.preallocation; + this.server = $.server; + this.shared = $.shared; + this.snapshotAsVolumeChain = $.snapshotAsVolumeChain; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(NFSState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private NFSState $; + + public Builder() { + $ = new NFSState(); + } + + public Builder(NFSState defaults) { + $ = new NFSState(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(NFSBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param export The path of the NFS export. + * + * @return builder + * + */ + public Builder export(@Nullable Output export) { + $.export = export; + return this; + } + + /** + * @param export The path of the NFS export. + * + * @return builder + * + */ + public Builder export(String export) { + return export(Output.of(export)); + } + + /** + * @param nfsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder nfsId(@Nullable Output nfsId) { + $.nfsId = nfsId; + return this; + } + + /** + * @param nfsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder nfsId(String nfsId) { + return nfsId(Output.of(nfsId)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param options The options to pass to the NFS service. + * + * @return builder + * + */ + public Builder options(@Nullable Output options) { + $.options = options; + return this; + } + + /** + * @param options The options to pass to the NFS service. + * + * @return builder + * + */ + public Builder options(String options) { + return options(Output.of(options)); + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(@Nullable Output preallocation) { + $.preallocation = preallocation; + return this; + } + + /** + * @param preallocation The preallocation mode for raw and qcow2 images. + * + * @return builder + * + */ + public Builder preallocation(String preallocation) { + return preallocation(Output.of(preallocation)); + } + + /** + * @param server The IP address or DNS name of the NFS server. + * + * @return builder + * + */ + public Builder server(@Nullable Output server) { + $.server = server; + return this; + } + + /** + * @param server The IP address or DNS name of the NFS server. + * + * @return builder + * + */ + public Builder server(String server) { + return server(Output.of(server)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(@Nullable Output snapshotAsVolumeChain) { + $.snapshotAsVolumeChain = snapshotAsVolumeChain; + return this; + } + + /** + * @param snapshotAsVolumeChain Enable support for creating snapshots through volume backing-chains. + * + * @return builder + * + */ + public Builder snapshotAsVolumeChain(Boolean snapshotAsVolumeChain) { + return snapshotAsVolumeChain(Output.of(snapshotAsVolumeChain)); + } + + public NFSState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/PBSBackupsArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/PBSBackupsArgs.java new file mode 100644 index 00000000..b728182c --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/PBSBackupsArgs.java @@ -0,0 +1,343 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class PBSBackupsArgs extends com.pulumi.resources.ResourceArgs { + + public static final PBSBackupsArgs Empty = new PBSBackupsArgs(); + + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + @Import(name="keepAll") + private @Nullable Output keepAll; + + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional> keepAll() { + return Optional.ofNullable(this.keepAll); + } + + /** + * The number of daily backups to keep. Older backups will be removed. + * + */ + @Import(name="keepDaily") + private @Nullable Output keepDaily; + + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional> keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + + /** + * The number of hourly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepHourly") + private @Nullable Output keepHourly; + + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional> keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + @Import(name="keepLast") + private @Nullable Output keepLast; + + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional> keepLast() { + return Optional.ofNullable(this.keepLast); + } + + /** + * The number of monthly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepMonthly") + private @Nullable Output keepMonthly; + + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional> keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + + /** + * The number of weekly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepWeekly") + private @Nullable Output keepWeekly; + + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional> keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + + /** + * The number of yearly backups to keep. Older backups will be removed. + * + */ + @Import(name="keepYearly") + private @Nullable Output keepYearly; + + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional> keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + @Import(name="maxProtectedBackups") + private @Nullable Output maxProtectedBackups; + + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional> maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + private PBSBackupsArgs() {} + + private PBSBackupsArgs(PBSBackupsArgs $) { + this.keepAll = $.keepAll; + this.keepDaily = $.keepDaily; + this.keepHourly = $.keepHourly; + this.keepLast = $.keepLast; + this.keepMonthly = $.keepMonthly; + this.keepWeekly = $.keepWeekly; + this.keepYearly = $.keepYearly; + this.maxProtectedBackups = $.maxProtectedBackups; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(PBSBackupsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private PBSBackupsArgs $; + + public Builder() { + $ = new PBSBackupsArgs(); + } + + public Builder(PBSBackupsArgs defaults) { + $ = new PBSBackupsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(@Nullable Output keepAll) { + $.keepAll = keepAll; + return this; + } + + /** + * @param keepAll Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + * @return builder + * + */ + public Builder keepAll(Boolean keepAll) { + return keepAll(Output.of(keepAll)); + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(@Nullable Output keepDaily) { + $.keepDaily = keepDaily; + return this; + } + + /** + * @param keepDaily The number of daily backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepDaily(Integer keepDaily) { + return keepDaily(Output.of(keepDaily)); + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(@Nullable Output keepHourly) { + $.keepHourly = keepHourly; + return this; + } + + /** + * @param keepHourly The number of hourly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepHourly(Integer keepHourly) { + return keepHourly(Output.of(keepHourly)); + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(@Nullable Output keepLast) { + $.keepLast = keepLast; + return this; + } + + /** + * @param keepLast Specifies the number of the most recent backups to keep, regardless of their age. + * + * @return builder + * + */ + public Builder keepLast(Integer keepLast) { + return keepLast(Output.of(keepLast)); + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(@Nullable Output keepMonthly) { + $.keepMonthly = keepMonthly; + return this; + } + + /** + * @param keepMonthly The number of monthly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepMonthly(Integer keepMonthly) { + return keepMonthly(Output.of(keepMonthly)); + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(@Nullable Output keepWeekly) { + $.keepWeekly = keepWeekly; + return this; + } + + /** + * @param keepWeekly The number of weekly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepWeekly(Integer keepWeekly) { + return keepWeekly(Output.of(keepWeekly)); + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(@Nullable Output keepYearly) { + $.keepYearly = keepYearly; + return this; + } + + /** + * @param keepYearly The number of yearly backups to keep. Older backups will be removed. + * + * @return builder + * + */ + public Builder keepYearly(Integer keepYearly) { + return keepYearly(Output.of(keepYearly)); + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(@Nullable Output maxProtectedBackups) { + $.maxProtectedBackups = maxProtectedBackups; + return this; + } + + /** + * @param maxProtectedBackups The maximum number of protected backups per guest. Use '-1' for unlimited. + * + * @return builder + * + */ + public Builder maxProtectedBackups(Integer maxProtectedBackups) { + return maxProtectedBackups(Output.of(maxProtectedBackups)); + } + + public PBSBackupsArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/PBSState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/PBSState.java new file mode 100644 index 00000000..d9d5c2eb --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/PBSState.java @@ -0,0 +1,661 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import io.muehlbachler.pulumi.proxmoxve.Storage.inputs.PBSBackupsArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class PBSState extends com.pulumi.resources.ResourceArgs { + + public static final PBSState Empty = new PBSState(); + + /** + * Configure backup retention settings for the storage type. + * + */ + @Import(name="backups") + private @Nullable Output backups; + + /** + * @return Configure backup retention settings for the storage type. + * + */ + public Optional> backups() { + return Optional.ofNullable(this.backups); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * The name of the datastore on the Proxmox Backup Server. + * + */ + @Import(name="datastore") + private @Nullable Output datastore; + + /** + * @return The name of the datastore on the Proxmox Backup Server. + * + */ + public Optional> datastore() { + return Optional.ofNullable(this.datastore); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + */ + @Import(name="encryptionKey") + private @Nullable Output encryptionKey; + + /** + * @return An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + */ + public Optional> encryptionKey() { + return Optional.ofNullable(this.encryptionKey); + } + + /** + * The SHA256 fingerprint of the encryption key currently in use. + * + */ + @Import(name="encryptionKeyFingerprint") + private @Nullable Output encryptionKeyFingerprint; + + /** + * @return The SHA256 fingerprint of the encryption key currently in use. + * + */ + public Optional> encryptionKeyFingerprint() { + return Optional.ofNullable(this.encryptionKeyFingerprint); + } + + /** + * The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + */ + @Import(name="fingerprint") + private @Nullable Output fingerprint; + + /** + * @return The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + */ + public Optional> fingerprint() { + return Optional.ofNullable(this.fingerprint); + } + + /** + * If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + */ + @Import(name="generateEncryptionKey") + private @Nullable Output generateEncryptionKey; + + /** + * @return If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + */ + public Optional> generateEncryptionKey() { + return Optional.ofNullable(this.generateEncryptionKey); + } + + /** + * The encryption key returned by Proxmox when <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span> is true. + * + */ + @Import(name="generatedEncryptionKey") + private @Nullable Output generatedEncryptionKey; + + /** + * @return The encryption key returned by Proxmox when <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span> is true. + * + */ + public Optional> generatedEncryptionKey() { + return Optional.ofNullable(this.generatedEncryptionKey); + } + + /** + * The namespace to use on the Proxmox Backup Server. + * + */ + @Import(name="namespace") + private @Nullable Output namespace; + + /** + * @return The namespace to use on the Proxmox Backup Server. + * + */ + public Optional> namespace() { + return Optional.ofNullable(this.namespace); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * The password for authenticating with the Proxmox Backup Server. + * + */ + @Import(name="password") + private @Nullable Output password; + + /** + * @return The password for authenticating with the Proxmox Backup Server. + * + */ + public Optional> password() { + return Optional.ofNullable(this.password); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="pbsId") + private @Nullable Output pbsId; + + /** + * @return The unique identifier of the storage. + * + */ + public Optional> pbsId() { + return Optional.ofNullable(this.pbsId); + } + + /** + * The IP address or DNS name of the Proxmox Backup Server. + * + */ + @Import(name="server") + private @Nullable Output server; + + /** + * @return The IP address or DNS name of the Proxmox Backup Server. + * + */ + public Optional> server() { + return Optional.ofNullable(this.server); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + /** + * The username for authenticating with the Proxmox Backup Server. + * + */ + @Import(name="username") + private @Nullable Output username; + + /** + * @return The username for authenticating with the Proxmox Backup Server. + * + */ + public Optional> username() { + return Optional.ofNullable(this.username); + } + + private PBSState() {} + + private PBSState(PBSState $) { + this.backups = $.backups; + this.contents = $.contents; + this.datastore = $.datastore; + this.disable = $.disable; + this.encryptionKey = $.encryptionKey; + this.encryptionKeyFingerprint = $.encryptionKeyFingerprint; + this.fingerprint = $.fingerprint; + this.generateEncryptionKey = $.generateEncryptionKey; + this.generatedEncryptionKey = $.generatedEncryptionKey; + this.namespace = $.namespace; + this.nodes = $.nodes; + this.password = $.password; + this.pbsId = $.pbsId; + this.server = $.server; + this.shared = $.shared; + this.username = $.username; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(PBSState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private PBSState $; + + public Builder() { + $ = new PBSState(); + } + + public Builder(PBSState defaults) { + $ = new PBSState(Objects.requireNonNull(defaults)); + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(@Nullable Output backups) { + $.backups = backups; + return this; + } + + /** + * @param backups Configure backup retention settings for the storage type. + * + * @return builder + * + */ + public Builder backups(PBSBackupsArgs backups) { + return backups(Output.of(backups)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param datastore The name of the datastore on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder datastore(@Nullable Output datastore) { + $.datastore = datastore; + return this; + } + + /** + * @param datastore The name of the datastore on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder datastore(String datastore) { + return datastore(Output.of(datastore)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param encryptionKey An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + * @return builder + * + */ + public Builder encryptionKey(@Nullable Output encryptionKey) { + $.encryptionKey = encryptionKey; + return this; + } + + /** + * @param encryptionKey An existing encryption key for the datastore. This is a sensitive value. Conflicts with <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span>. + * + * @return builder + * + */ + public Builder encryptionKey(String encryptionKey) { + return encryptionKey(Output.of(encryptionKey)); + } + + /** + * @param encryptionKeyFingerprint The SHA256 fingerprint of the encryption key currently in use. + * + * @return builder + * + */ + public Builder encryptionKeyFingerprint(@Nullable Output encryptionKeyFingerprint) { + $.encryptionKeyFingerprint = encryptionKeyFingerprint; + return this; + } + + /** + * @param encryptionKeyFingerprint The SHA256 fingerprint of the encryption key currently in use. + * + * @return builder + * + */ + public Builder encryptionKeyFingerprint(String encryptionKeyFingerprint) { + return encryptionKeyFingerprint(Output.of(encryptionKeyFingerprint)); + } + + /** + * @param fingerprint The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + * @return builder + * + */ + public Builder fingerprint(@Nullable Output fingerprint) { + $.fingerprint = fingerprint; + return this; + } + + /** + * @param fingerprint The SHA256 fingerprint of the Proxmox Backup Server's certificate. + * + * @return builder + * + */ + public Builder fingerprint(String fingerprint) { + return fingerprint(Output.of(fingerprint)); + } + + /** + * @param generateEncryptionKey If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + * @return builder + * + */ + public Builder generateEncryptionKey(@Nullable Output generateEncryptionKey) { + $.generateEncryptionKey = generateEncryptionKey; + return this; + } + + /** + * @param generateEncryptionKey If set to true, Proxmox will generate a new encryption key. The key will be stored in the <span pulumi-lang-nodejs="`generatedEncryptionKey`" pulumi-lang-dotnet="`GeneratedEncryptionKey`" pulumi-lang-go="`generatedEncryptionKey`" pulumi-lang-python="`generated_encryption_key`" pulumi-lang-yaml="`generatedEncryptionKey`" pulumi-lang-java="`generatedEncryptionKey`">`generated_encryption_key`</span> attribute. Conflicts with <span pulumi-lang-nodejs="`encryptionKey`" pulumi-lang-dotnet="`EncryptionKey`" pulumi-lang-go="`encryptionKey`" pulumi-lang-python="`encryption_key`" pulumi-lang-yaml="`encryptionKey`" pulumi-lang-java="`encryptionKey`">`encryption_key`</span>. + * + * @return builder + * + */ + public Builder generateEncryptionKey(Boolean generateEncryptionKey) { + return generateEncryptionKey(Output.of(generateEncryptionKey)); + } + + /** + * @param generatedEncryptionKey The encryption key returned by Proxmox when <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span> is true. + * + * @return builder + * + */ + public Builder generatedEncryptionKey(@Nullable Output generatedEncryptionKey) { + $.generatedEncryptionKey = generatedEncryptionKey; + return this; + } + + /** + * @param generatedEncryptionKey The encryption key returned by Proxmox when <span pulumi-lang-nodejs="`generateEncryptionKey`" pulumi-lang-dotnet="`GenerateEncryptionKey`" pulumi-lang-go="`generateEncryptionKey`" pulumi-lang-python="`generate_encryption_key`" pulumi-lang-yaml="`generateEncryptionKey`" pulumi-lang-java="`generateEncryptionKey`">`generate_encryption_key`</span> is true. + * + * @return builder + * + */ + public Builder generatedEncryptionKey(String generatedEncryptionKey) { + return generatedEncryptionKey(Output.of(generatedEncryptionKey)); + } + + /** + * @param namespace The namespace to use on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder namespace(@Nullable Output namespace) { + $.namespace = namespace; + return this; + } + + /** + * @param namespace The namespace to use on the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder namespace(String namespace) { + return namespace(Output.of(namespace)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param password The password for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder password(@Nullable Output password) { + $.password = password; + return this; + } + + /** + * @param password The password for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder password(String password) { + return password(Output.of(password)); + } + + /** + * @param pbsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder pbsId(@Nullable Output pbsId) { + $.pbsId = pbsId; + return this; + } + + /** + * @param pbsId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder pbsId(String pbsId) { + return pbsId(Output.of(pbsId)); + } + + /** + * @param server The IP address or DNS name of the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder server(@Nullable Output server) { + $.server = server; + return this; + } + + /** + * @param server The IP address or DNS name of the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder server(String server) { + return server(Output.of(server)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + /** + * @param username The username for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder username(@Nullable Output username) { + $.username = username; + return this; + } + + /** + * @param username The username for authenticating with the Proxmox Backup Server. + * + * @return builder + * + */ + public Builder username(String username) { + return username(Output.of(username)); + } + + public PBSState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/ZFSPoolState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/ZFSPoolState.java new file mode 100644 index 00000000..c0494caa --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/inputs/ZFSPoolState.java @@ -0,0 +1,364 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ZFSPoolState extends com.pulumi.resources.ResourceArgs { + + public static final ZFSPoolState Empty = new ZFSPoolState(); + + /** + * Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + */ + @Import(name="blocksize") + private @Nullable Output blocksize; + + /** + * @return Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + */ + public Optional> blocksize() { + return Optional.ofNullable(this.blocksize); + } + + /** + * The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + @Import(name="contents") + private @Nullable Output> contents; + + /** + * @return The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + */ + public Optional>> contents() { + return Optional.ofNullable(this.contents); + } + + /** + * Whether the storage is disabled. + * + */ + @Import(name="disable") + private @Nullable Output disable; + + /** + * @return Whether the storage is disabled. + * + */ + public Optional> disable() { + return Optional.ofNullable(this.disable); + } + + /** + * A list of nodes where this storage is available. + * + */ + @Import(name="nodes") + private @Nullable Output> nodes; + + /** + * @return A list of nodes where this storage is available. + * + */ + public Optional>> nodes() { + return Optional.ofNullable(this.nodes); + } + + /** + * Whether the storage is shared across all nodes. + * + */ + @Import(name="shared") + private @Nullable Output shared; + + /** + * @return Whether the storage is shared across all nodes. + * + */ + public Optional> shared() { + return Optional.ofNullable(this.shared); + } + + /** + * Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + */ + @Import(name="thinProvision") + private @Nullable Output thinProvision; + + /** + * @return Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + */ + public Optional> thinProvision() { + return Optional.ofNullable(this.thinProvision); + } + + /** + * The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + */ + @Import(name="zfsPool") + private @Nullable Output zfsPool; + + /** + * @return The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + */ + public Optional> zfsPool() { + return Optional.ofNullable(this.zfsPool); + } + + /** + * The unique identifier of the storage. + * + */ + @Import(name="zfsPoolId") + private @Nullable Output zfsPoolId; + + /** + * @return The unique identifier of the storage. + * + */ + public Optional> zfsPoolId() { + return Optional.ofNullable(this.zfsPoolId); + } + + private ZFSPoolState() {} + + private ZFSPoolState(ZFSPoolState $) { + this.blocksize = $.blocksize; + this.contents = $.contents; + this.disable = $.disable; + this.nodes = $.nodes; + this.shared = $.shared; + this.thinProvision = $.thinProvision; + this.zfsPool = $.zfsPool; + this.zfsPoolId = $.zfsPoolId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ZFSPoolState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ZFSPoolState $; + + public Builder() { + $ = new ZFSPoolState(); + } + + public Builder(ZFSPoolState defaults) { + $ = new ZFSPoolState(Objects.requireNonNull(defaults)); + } + + /** + * @param blocksize Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + * @return builder + * + */ + public Builder blocksize(@Nullable Output blocksize) { + $.blocksize = blocksize; + return this; + } + + /** + * @param blocksize Block size for newly created volumes (e.g. <span pulumi-lang-nodejs="`4k`" pulumi-lang-dotnet="`4k`" pulumi-lang-go="`4k`" pulumi-lang-python="`4k`" pulumi-lang-yaml="`4k`" pulumi-lang-java="`4k`">`4k`</span>, <span pulumi-lang-nodejs="`8k`" pulumi-lang-dotnet="`8k`" pulumi-lang-go="`8k`" pulumi-lang-python="`8k`" pulumi-lang-yaml="`8k`" pulumi-lang-java="`8k`">`8k`</span>, <span pulumi-lang-nodejs="`16k`" pulumi-lang-dotnet="`16k`" pulumi-lang-go="`16k`" pulumi-lang-python="`16k`" pulumi-lang-yaml="`16k`" pulumi-lang-java="`16k`">`16k`</span>). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + * + * @return builder + * + */ + public Builder blocksize(String blocksize) { + return blocksize(Output.of(blocksize)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(@Nullable Output> contents) { + $.contents = contents; + return this; + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(List contents) { + return contents(Output.of(contents)); + } + + /** + * @param contents The content types that can be stored on this storage. Valid values: <span pulumi-lang-nodejs="`backup`" pulumi-lang-dotnet="`Backup`" pulumi-lang-go="`backup`" pulumi-lang-python="`backup`" pulumi-lang-yaml="`backup`" pulumi-lang-java="`backup`">`backup`</span> (VM backups), <span pulumi-lang-nodejs="`images`" pulumi-lang-dotnet="`Images`" pulumi-lang-go="`images`" pulumi-lang-python="`images`" pulumi-lang-yaml="`images`" pulumi-lang-java="`images`">`images`</span> (VM disk images), <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> (VM disk images for import), <span pulumi-lang-nodejs="`iso`" pulumi-lang-dotnet="`Iso`" pulumi-lang-go="`iso`" pulumi-lang-python="`iso`" pulumi-lang-yaml="`iso`" pulumi-lang-java="`iso`">`iso`</span> (ISO images), <span pulumi-lang-nodejs="`rootdir`" pulumi-lang-dotnet="`Rootdir`" pulumi-lang-go="`rootdir`" pulumi-lang-python="`rootdir`" pulumi-lang-yaml="`rootdir`" pulumi-lang-java="`rootdir`">`rootdir`</span> (container root directories), <span pulumi-lang-nodejs="`snippets`" pulumi-lang-dotnet="`Snippets`" pulumi-lang-go="`snippets`" pulumi-lang-python="`snippets`" pulumi-lang-yaml="`snippets`" pulumi-lang-java="`snippets`">`snippets`</span> (cloud-init, hook scripts, etc.), <span pulumi-lang-nodejs="`vztmpl`" pulumi-lang-dotnet="`Vztmpl`" pulumi-lang-go="`vztmpl`" pulumi-lang-python="`vztmpl`" pulumi-lang-yaml="`vztmpl`" pulumi-lang-java="`vztmpl`">`vztmpl`</span> (container templates). + * + * @return builder + * + */ + public Builder contents(String... contents) { + return contents(List.of(contents)); + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(@Nullable Output disable) { + $.disable = disable; + return this; + } + + /** + * @param disable Whether the storage is disabled. + * + * @return builder + * + */ + public Builder disable(Boolean disable) { + return disable(Output.of(disable)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(@Nullable Output> nodes) { + $.nodes = nodes; + return this; + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(List nodes) { + return nodes(Output.of(nodes)); + } + + /** + * @param nodes A list of nodes where this storage is available. + * + * @return builder + * + */ + public Builder nodes(String... nodes) { + return nodes(List.of(nodes)); + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(@Nullable Output shared) { + $.shared = shared; + return this; + } + + /** + * @param shared Whether the storage is shared across all nodes. + * + * @return builder + * + */ + public Builder shared(Boolean shared) { + return shared(Output.of(shared)); + } + + /** + * @param thinProvision Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + * @return builder + * + */ + public Builder thinProvision(@Nullable Output thinProvision) { + $.thinProvision = thinProvision; + return this; + } + + /** + * @param thinProvision Whether to enable thin provisioning (<span pulumi-lang-nodejs="`on`" pulumi-lang-dotnet="`On`" pulumi-lang-go="`on`" pulumi-lang-python="`on`" pulumi-lang-yaml="`on`" pulumi-lang-java="`on`">`on`</span> or <span pulumi-lang-nodejs="`off`" pulumi-lang-dotnet="`Off`" pulumi-lang-go="`off`" pulumi-lang-python="`off`" pulumi-lang-yaml="`off`" pulumi-lang-java="`off`">`off`</span>). Thin provisioning allows flexible disk allocation without pre-allocating full space. + * + * @return builder + * + */ + public Builder thinProvision(Boolean thinProvision) { + return thinProvision(Output.of(thinProvision)); + } + + /** + * @param zfsPool The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + * @return builder + * + */ + public Builder zfsPool(@Nullable Output zfsPool) { + $.zfsPool = zfsPool; + return this; + } + + /** + * @param zfsPool The name of the ZFS storage pool to use (e.g. <span pulumi-lang-nodejs="`tank`" pulumi-lang-dotnet="`Tank`" pulumi-lang-go="`tank`" pulumi-lang-python="`tank`" pulumi-lang-yaml="`tank`" pulumi-lang-java="`tank`">`tank`</span>, `rpool/data`). + * + * @return builder + * + */ + public Builder zfsPool(String zfsPool) { + return zfsPool(Output.of(zfsPool)); + } + + /** + * @param zfsPoolId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder zfsPoolId(@Nullable Output zfsPoolId) { + $.zfsPoolId = zfsPoolId; + return this; + } + + /** + * @param zfsPoolId The unique identifier of the storage. + * + * @return builder + * + */ + public Builder zfsPoolId(String zfsPoolId) { + return zfsPoolId(Output.of(zfsPoolId)); + } + + public ZFSPoolState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/CIFSBackups.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/CIFSBackups.java new file mode 100644 index 00000000..4d23333c --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/CIFSBackups.java @@ -0,0 +1,205 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class CIFSBackups { + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + private @Nullable Boolean keepAll; + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepDaily; + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepHourly; + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + private @Nullable Integer keepLast; + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepMonthly; + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepWeekly; + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepYearly; + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + private @Nullable Integer maxProtectedBackups; + + private CIFSBackups() {} + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional keepAll() { + return Optional.ofNullable(this.keepAll); + } + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional keepLast() { + return Optional.ofNullable(this.keepLast); + } + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(CIFSBackups defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean keepAll; + private @Nullable Integer keepDaily; + private @Nullable Integer keepHourly; + private @Nullable Integer keepLast; + private @Nullable Integer keepMonthly; + private @Nullable Integer keepWeekly; + private @Nullable Integer keepYearly; + private @Nullable Integer maxProtectedBackups; + public Builder() {} + public Builder(CIFSBackups defaults) { + Objects.requireNonNull(defaults); + this.keepAll = defaults.keepAll; + this.keepDaily = defaults.keepDaily; + this.keepHourly = defaults.keepHourly; + this.keepLast = defaults.keepLast; + this.keepMonthly = defaults.keepMonthly; + this.keepWeekly = defaults.keepWeekly; + this.keepYearly = defaults.keepYearly; + this.maxProtectedBackups = defaults.maxProtectedBackups; + } + + @CustomType.Setter + public Builder keepAll(@Nullable Boolean keepAll) { + + this.keepAll = keepAll; + return this; + } + @CustomType.Setter + public Builder keepDaily(@Nullable Integer keepDaily) { + + this.keepDaily = keepDaily; + return this; + } + @CustomType.Setter + public Builder keepHourly(@Nullable Integer keepHourly) { + + this.keepHourly = keepHourly; + return this; + } + @CustomType.Setter + public Builder keepLast(@Nullable Integer keepLast) { + + this.keepLast = keepLast; + return this; + } + @CustomType.Setter + public Builder keepMonthly(@Nullable Integer keepMonthly) { + + this.keepMonthly = keepMonthly; + return this; + } + @CustomType.Setter + public Builder keepWeekly(@Nullable Integer keepWeekly) { + + this.keepWeekly = keepWeekly; + return this; + } + @CustomType.Setter + public Builder keepYearly(@Nullable Integer keepYearly) { + + this.keepYearly = keepYearly; + return this; + } + @CustomType.Setter + public Builder maxProtectedBackups(@Nullable Integer maxProtectedBackups) { + + this.maxProtectedBackups = maxProtectedBackups; + return this; + } + public CIFSBackups build() { + final var _resultValue = new CIFSBackups(); + _resultValue.keepAll = keepAll; + _resultValue.keepDaily = keepDaily; + _resultValue.keepHourly = keepHourly; + _resultValue.keepLast = keepLast; + _resultValue.keepMonthly = keepMonthly; + _resultValue.keepWeekly = keepWeekly; + _resultValue.keepYearly = keepYearly; + _resultValue.maxProtectedBackups = maxProtectedBackups; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/DirectoryBackups.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/DirectoryBackups.java new file mode 100644 index 00000000..53d9035f --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/DirectoryBackups.java @@ -0,0 +1,205 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class DirectoryBackups { + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + private @Nullable Boolean keepAll; + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepDaily; + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepHourly; + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + private @Nullable Integer keepLast; + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepMonthly; + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepWeekly; + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepYearly; + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + private @Nullable Integer maxProtectedBackups; + + private DirectoryBackups() {} + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional keepAll() { + return Optional.ofNullable(this.keepAll); + } + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional keepLast() { + return Optional.ofNullable(this.keepLast); + } + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(DirectoryBackups defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean keepAll; + private @Nullable Integer keepDaily; + private @Nullable Integer keepHourly; + private @Nullable Integer keepLast; + private @Nullable Integer keepMonthly; + private @Nullable Integer keepWeekly; + private @Nullable Integer keepYearly; + private @Nullable Integer maxProtectedBackups; + public Builder() {} + public Builder(DirectoryBackups defaults) { + Objects.requireNonNull(defaults); + this.keepAll = defaults.keepAll; + this.keepDaily = defaults.keepDaily; + this.keepHourly = defaults.keepHourly; + this.keepLast = defaults.keepLast; + this.keepMonthly = defaults.keepMonthly; + this.keepWeekly = defaults.keepWeekly; + this.keepYearly = defaults.keepYearly; + this.maxProtectedBackups = defaults.maxProtectedBackups; + } + + @CustomType.Setter + public Builder keepAll(@Nullable Boolean keepAll) { + + this.keepAll = keepAll; + return this; + } + @CustomType.Setter + public Builder keepDaily(@Nullable Integer keepDaily) { + + this.keepDaily = keepDaily; + return this; + } + @CustomType.Setter + public Builder keepHourly(@Nullable Integer keepHourly) { + + this.keepHourly = keepHourly; + return this; + } + @CustomType.Setter + public Builder keepLast(@Nullable Integer keepLast) { + + this.keepLast = keepLast; + return this; + } + @CustomType.Setter + public Builder keepMonthly(@Nullable Integer keepMonthly) { + + this.keepMonthly = keepMonthly; + return this; + } + @CustomType.Setter + public Builder keepWeekly(@Nullable Integer keepWeekly) { + + this.keepWeekly = keepWeekly; + return this; + } + @CustomType.Setter + public Builder keepYearly(@Nullable Integer keepYearly) { + + this.keepYearly = keepYearly; + return this; + } + @CustomType.Setter + public Builder maxProtectedBackups(@Nullable Integer maxProtectedBackups) { + + this.maxProtectedBackups = maxProtectedBackups; + return this; + } + public DirectoryBackups build() { + final var _resultValue = new DirectoryBackups(); + _resultValue.keepAll = keepAll; + _resultValue.keepDaily = keepDaily; + _resultValue.keepHourly = keepHourly; + _resultValue.keepLast = keepLast; + _resultValue.keepMonthly = keepMonthly; + _resultValue.keepWeekly = keepWeekly; + _resultValue.keepYearly = keepYearly; + _resultValue.maxProtectedBackups = maxProtectedBackups; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/NFSBackups.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/NFSBackups.java new file mode 100644 index 00000000..f79b335d --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/NFSBackups.java @@ -0,0 +1,205 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class NFSBackups { + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + private @Nullable Boolean keepAll; + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepDaily; + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepHourly; + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + private @Nullable Integer keepLast; + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepMonthly; + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepWeekly; + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepYearly; + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + private @Nullable Integer maxProtectedBackups; + + private NFSBackups() {} + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional keepAll() { + return Optional.ofNullable(this.keepAll); + } + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional keepLast() { + return Optional.ofNullable(this.keepLast); + } + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(NFSBackups defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean keepAll; + private @Nullable Integer keepDaily; + private @Nullable Integer keepHourly; + private @Nullable Integer keepLast; + private @Nullable Integer keepMonthly; + private @Nullable Integer keepWeekly; + private @Nullable Integer keepYearly; + private @Nullable Integer maxProtectedBackups; + public Builder() {} + public Builder(NFSBackups defaults) { + Objects.requireNonNull(defaults); + this.keepAll = defaults.keepAll; + this.keepDaily = defaults.keepDaily; + this.keepHourly = defaults.keepHourly; + this.keepLast = defaults.keepLast; + this.keepMonthly = defaults.keepMonthly; + this.keepWeekly = defaults.keepWeekly; + this.keepYearly = defaults.keepYearly; + this.maxProtectedBackups = defaults.maxProtectedBackups; + } + + @CustomType.Setter + public Builder keepAll(@Nullable Boolean keepAll) { + + this.keepAll = keepAll; + return this; + } + @CustomType.Setter + public Builder keepDaily(@Nullable Integer keepDaily) { + + this.keepDaily = keepDaily; + return this; + } + @CustomType.Setter + public Builder keepHourly(@Nullable Integer keepHourly) { + + this.keepHourly = keepHourly; + return this; + } + @CustomType.Setter + public Builder keepLast(@Nullable Integer keepLast) { + + this.keepLast = keepLast; + return this; + } + @CustomType.Setter + public Builder keepMonthly(@Nullable Integer keepMonthly) { + + this.keepMonthly = keepMonthly; + return this; + } + @CustomType.Setter + public Builder keepWeekly(@Nullable Integer keepWeekly) { + + this.keepWeekly = keepWeekly; + return this; + } + @CustomType.Setter + public Builder keepYearly(@Nullable Integer keepYearly) { + + this.keepYearly = keepYearly; + return this; + } + @CustomType.Setter + public Builder maxProtectedBackups(@Nullable Integer maxProtectedBackups) { + + this.maxProtectedBackups = maxProtectedBackups; + return this; + } + public NFSBackups build() { + final var _resultValue = new NFSBackups(); + _resultValue.keepAll = keepAll; + _resultValue.keepDaily = keepDaily; + _resultValue.keepHourly = keepHourly; + _resultValue.keepLast = keepLast; + _resultValue.keepMonthly = keepMonthly; + _resultValue.keepWeekly = keepWeekly; + _resultValue.keepYearly = keepYearly; + _resultValue.maxProtectedBackups = maxProtectedBackups; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/PBSBackups.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/PBSBackups.java new file mode 100644 index 00000000..15da1258 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/storage/outputs/PBSBackups.java @@ -0,0 +1,205 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.Storage.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class PBSBackups { + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + private @Nullable Boolean keepAll; + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepDaily; + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepHourly; + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + private @Nullable Integer keepLast; + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepMonthly; + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepWeekly; + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + private @Nullable Integer keepYearly; + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + private @Nullable Integer maxProtectedBackups; + + private PBSBackups() {} + /** + * @return Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + * + */ + public Optional keepAll() { + return Optional.ofNullable(this.keepAll); + } + /** + * @return The number of daily backups to keep. Older backups will be removed. + * + */ + public Optional keepDaily() { + return Optional.ofNullable(this.keepDaily); + } + /** + * @return The number of hourly backups to keep. Older backups will be removed. + * + */ + public Optional keepHourly() { + return Optional.ofNullable(this.keepHourly); + } + /** + * @return Specifies the number of the most recent backups to keep, regardless of their age. + * + */ + public Optional keepLast() { + return Optional.ofNullable(this.keepLast); + } + /** + * @return The number of monthly backups to keep. Older backups will be removed. + * + */ + public Optional keepMonthly() { + return Optional.ofNullable(this.keepMonthly); + } + /** + * @return The number of weekly backups to keep. Older backups will be removed. + * + */ + public Optional keepWeekly() { + return Optional.ofNullable(this.keepWeekly); + } + /** + * @return The number of yearly backups to keep. Older backups will be removed. + * + */ + public Optional keepYearly() { + return Optional.ofNullable(this.keepYearly); + } + /** + * @return The maximum number of protected backups per guest. Use '-1' for unlimited. + * + */ + public Optional maxProtectedBackups() { + return Optional.ofNullable(this.maxProtectedBackups); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(PBSBackups defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean keepAll; + private @Nullable Integer keepDaily; + private @Nullable Integer keepHourly; + private @Nullable Integer keepLast; + private @Nullable Integer keepMonthly; + private @Nullable Integer keepWeekly; + private @Nullable Integer keepYearly; + private @Nullable Integer maxProtectedBackups; + public Builder() {} + public Builder(PBSBackups defaults) { + Objects.requireNonNull(defaults); + this.keepAll = defaults.keepAll; + this.keepDaily = defaults.keepDaily; + this.keepHourly = defaults.keepHourly; + this.keepLast = defaults.keepLast; + this.keepMonthly = defaults.keepMonthly; + this.keepWeekly = defaults.keepWeekly; + this.keepYearly = defaults.keepYearly; + this.maxProtectedBackups = defaults.maxProtectedBackups; + } + + @CustomType.Setter + public Builder keepAll(@Nullable Boolean keepAll) { + + this.keepAll = keepAll; + return this; + } + @CustomType.Setter + public Builder keepDaily(@Nullable Integer keepDaily) { + + this.keepDaily = keepDaily; + return this; + } + @CustomType.Setter + public Builder keepHourly(@Nullable Integer keepHourly) { + + this.keepHourly = keepHourly; + return this; + } + @CustomType.Setter + public Builder keepLast(@Nullable Integer keepLast) { + + this.keepLast = keepLast; + return this; + } + @CustomType.Setter + public Builder keepMonthly(@Nullable Integer keepMonthly) { + + this.keepMonthly = keepMonthly; + return this; + } + @CustomType.Setter + public Builder keepWeekly(@Nullable Integer keepWeekly) { + + this.keepWeekly = keepWeekly; + return this; + } + @CustomType.Setter + public Builder keepYearly(@Nullable Integer keepYearly) { + + this.keepYearly = keepYearly; + return this; + } + @CustomType.Setter + public Builder maxProtectedBackups(@Nullable Integer maxProtectedBackups) { + + this.maxProtectedBackups = maxProtectedBackups; + return this; + } + public PBSBackups build() { + final var _resultValue = new PBSBackups(); + _resultValue.keepAll = keepAll; + _resultValue.keepDaily = keepDaily; + _resultValue.keepHourly = keepHourly; + _resultValue.keepLast = keepLast; + _resultValue.keepMonthly = keepMonthly; + _resultValue.keepWeekly = keepWeekly; + _resultValue.keepYearly = keepYearly; + _resultValue.maxProtectedBackups = maxProtectedBackups; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/ClonedVirtualMachine.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/ClonedVirtualMachine.java new file mode 100644 index 00000000..5a0a4d2c --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/ClonedVirtualMachine.java @@ -0,0 +1,543 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import io.muehlbachler.pulumi.proxmoxve.Utilities; +import io.muehlbachler.pulumi.proxmoxve.VM.ClonedVirtualMachineArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineState; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineCdrom; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineClone; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineCpu; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineDelete; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineDisk; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineMemory; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineNetwork; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineRng; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineTimeouts; +import io.muehlbachler.pulumi.proxmoxve.VM.outputs.ClonedVirtualMachineVga; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import io.muehlbachler.pulumi.proxmoxve.VM.ClonedVirtualMachine;
+ * import io.muehlbachler.pulumi.proxmoxve.VM.ClonedVirtualMachineArgs;
+ * import com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCloneArgs;
+ * import com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCpuArgs;
+ * import com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineDeleteArgs;
+ * import com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineMemoryArgs;
+ * import com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineVgaArgs;
+ * import com.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineTimeoutsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         // Example 1: Basic clone with minimal management
+ *         var basicClone = new ClonedVirtualMachine("basicClone", ClonedVirtualMachineArgs.builder()
+ *             .nodeName("pve")
+ *             .name("basic-clone")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .full(true)
+ *                 .build())
+ *             .cpu(ClonedVirtualMachineCpuArgs.builder()
+ *                 .cores(4)
+ *                 .build())
+ *             .build());
+ * 
+ *         // Example 2: Clone with explicit network management
+ *         var networkManaged = new ClonedVirtualMachine("networkManaged", ClonedVirtualMachineArgs.builder()
+ *             .nodeName("pve")
+ *             .name("network-clone")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .build())
+ *             .network(Map.ofEntries(
+ *                 Map.entry("net0", ClonedVirtualMachineNetworkArgs.builder()
+ *                     .bridge("vmbr0")
+ *                     .model("virtio")
+ *                     .tag(100)
+ *                     .build()),
+ *                 Map.entry("net1", ClonedVirtualMachineNetworkArgs.builder()
+ *                     .bridge("vmbr1")
+ *                     .model("virtio")
+ *                     .firewall(true)
+ *                     .macAddress("BC:24:11:2E:C5:00")
+ *                     .build())
+ *             ))
+ *             .cpu(ClonedVirtualMachineCpuArgs.builder()
+ *                 .cores(2)
+ *                 .build())
+ *             .build());
+ * 
+ *         // Example 3: Clone with disk management
+ *         var diskManaged = new ClonedVirtualMachine("diskManaged", ClonedVirtualMachineArgs.builder()
+ *             .nodeName("pve")
+ *             .name("disk-clone")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .targetDatastore("local-lvm")
+ *                 .build())
+ *             .disk(Map.ofEntries(
+ *                 Map.entry("scsi0", ClonedVirtualMachineDiskArgs.builder()
+ *                     .datastoreId("local-lvm")
+ *                     .sizeGb(50)
+ *                     .discard("on")
+ *                     .ssd(true)
+ *                     .build()),
+ *                 Map.entry("scsi1", ClonedVirtualMachineDiskArgs.builder()
+ *                     .datastoreId("local-lvm")
+ *                     .sizeGb(100)
+ *                     .backup(false)
+ *                     .build())
+ *             ))
+ *             .build());
+ * 
+ *         // Example 4: Clone with explicit device deletion
+ *         var selectiveDelete = new ClonedVirtualMachine("selectiveDelete", ClonedVirtualMachineArgs.builder()
+ *             .nodeName("pve")
+ *             .name("minimal-clone")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .build())
+ *             .network(Map.of("net0", ClonedVirtualMachineNetworkArgs.builder()
+ *                 .bridge("vmbr0")
+ *                 .model("virtio")
+ *                 .build()))
+ *             .delete(ClonedVirtualMachineDeleteArgs.builder()
+ *                 .networks(                
+ *                     "net1",
+ *                     "net2")
+ *                 .build())
+ *             .build());
+ * 
+ *         // Example 5: Full-featured clone with multiple settings
+ *         var fullFeatured = new ClonedVirtualMachine("fullFeatured", ClonedVirtualMachineArgs.builder()
+ *             .nodeName("pve")
+ *             .name("production-vm")
+ *             .description("Production VM cloned from template")
+ *             .tags(            
+ *                 "production",
+ *                 "web")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .sourceNodeName("pve")
+ *                 .full(true)
+ *                 .targetDatastore("local-lvm")
+ *                 .retries(3)
+ *                 .build())
+ *             .cpu(ClonedVirtualMachineCpuArgs.builder()
+ *                 .cores(8)
+ *                 .sockets(1)
+ *                 .architecture("x86_64")
+ *                 .type("host")
+ *                 .build())
+ *             .memory(ClonedVirtualMachineMemoryArgs.builder()
+ *                 .size(8192)
+ *                 .balloon(2048)
+ *                 .shares(2000)
+ *                 .build())
+ *             .network(Map.of("net0", ClonedVirtualMachineNetworkArgs.builder()
+ *                 .bridge("vmbr0")
+ *                 .model("virtio")
+ *                 .tag(100)
+ *                 .firewall(true)
+ *                 .rateLimit(100.0)
+ *                 .build()))
+ *             .disk(Map.of("scsi0", ClonedVirtualMachineDiskArgs.builder()
+ *                 .datastoreId("local-lvm")
+ *                 .sizeGb(100)
+ *                 .discard("on")
+ *                 .iothread(true)
+ *                 .ssd(true)
+ *                 .cache("writethrough")
+ *                 .build()))
+ *             .vga(ClonedVirtualMachineVgaArgs.builder()
+ *                 .type("std")
+ *                 .memory(16)
+ *                 .build())
+ *             .delete(ClonedVirtualMachineDeleteArgs.builder()
+ *                 .disks("ide2")
+ *                 .build())
+ *             .stopOnDestroy(false)
+ *             .purgeOnDestroy(true)
+ *             .deleteUnreferencedDisksOnDestroy(false)
+ *             .timeouts(ClonedVirtualMachineTimeoutsArgs.builder()
+ *                 .create("30m")
+ *                 .update("30m")
+ *                 .delete("10m")
+ *                 .build())
+ *             .build());
+ * 
+ *         // Example 6: Linked clone for testing
+ *         var testClone = new ClonedVirtualMachine("testClone", ClonedVirtualMachineArgs.builder()
+ *             .nodeName("pve")
+ *             .name("test-vm")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .full(false)
+ *                 .build())
+ *             .cpu(ClonedVirtualMachineCpuArgs.builder()
+ *                 .cores(2)
+ *                 .build())
+ *             .network(Map.of("net0", ClonedVirtualMachineNetworkArgs.builder()
+ *                 .bridge("vmbr0")
+ *                 .model("virtio")
+ *                 .build()))
+ *             .build());
+ * 
+ *         // Example 7: Clone with pool assignment
+ *         var pooledClone = new ClonedVirtualMachine("pooledClone", ClonedVirtualMachineArgs.builder()
+ *             .nodeName("pve")
+ *             .name("pooled-vm")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .poolId("production")
+ *                 .build())
+ *             .cpu(ClonedVirtualMachineCpuArgs.builder()
+ *                 .cores(4)
+ *                 .build())
+ *             .build());
+ * 
+ *         // Example 8: Import existing cloned VM
+ *         var imported = new ClonedVirtualMachine("imported", ClonedVirtualMachineArgs.builder()
+ *             .vmId("123")
+ *             .nodeName("pve")
+ *             .clone(ClonedVirtualMachineCloneArgs.builder()
+ *                 .sourceVmId(100)
+ *                 .build())
+ *             .cpu(ClonedVirtualMachineCpuArgs.builder()
+ *                 .cores(4)
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + */ +@ResourceType(type="proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine") +public class ClonedVirtualMachine extends com.pulumi.resources.CustomResource { + /** + * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + */ + @Export(name="cdrom", refs={Map.class,String.class,ClonedVirtualMachineCdrom.class}, tree="[0,1,2]") + private Output> cdrom; + + /** + * @return The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + */ + public Output>> cdrom() { + return Codegen.optional(this.cdrom); + } + /** + * Clone settings. Changes require recreation. + * + */ + @Export(name="clone", refs={ClonedVirtualMachineClone.class}, tree="[0]") + private Output clone; + + /** + * @return Clone settings. Changes require recreation. + * + */ + public Output clone_() { + return this.clone; + } + /** + * The CPU configuration. + * + */ + @Export(name="cpu", refs={ClonedVirtualMachineCpu.class}, tree="[0]") + private Output cpu; + + /** + * @return The CPU configuration. + * + */ + public Output> cpu() { + return Codegen.optional(this.cpu); + } + /** + * Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + */ + @Export(name="delete", refs={ClonedVirtualMachineDelete.class}, tree="[0]") + private Output delete; + + /** + * @return Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + */ + public Output> delete() { + return Codegen.optional(this.delete); + } + @Export(name="deleteUnreferencedDisksOnDestroy", refs={Boolean.class}, tree="[0]") + private Output deleteUnreferencedDisksOnDestroy; + + public Output deleteUnreferencedDisksOnDestroy() { + return this.deleteUnreferencedDisksOnDestroy; + } + /** + * Optional VM description applied after cloning. + * + */ + @Export(name="description", refs={String.class}, tree="[0]") + private Output description; + + /** + * @return Optional VM description applied after cloning. + * + */ + public Output> description() { + return Codegen.optional(this.description); + } + /** + * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + */ + @Export(name="disk", refs={Map.class,String.class,ClonedVirtualMachineDisk.class}, tree="[0,1,2]") + private Output> disk; + + /** + * @return Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + */ + public Output>> disk() { + return Codegen.optional(this.disk); + } + /** + * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + */ + @Export(name="memory", refs={ClonedVirtualMachineMemory.class}, tree="[0]") + private Output memory; + + /** + * @return Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + */ + public Output> memory() { + return Codegen.optional(this.memory); + } + /** + * Optional VM name override applied after cloning. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Optional VM name override applied after cloning. + * + */ + public Output name() { + return this.name; + } + /** + * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + */ + @Export(name="network", refs={Map.class,String.class,ClonedVirtualMachineNetwork.class}, tree="[0,1,2]") + private Output> network; + + /** + * @return Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + */ + public Output>> network() { + return Codegen.optional(this.network); + } + /** + * Target node for the cloned VM. + * + */ + @Export(name="nodeName", refs={String.class}, tree="[0]") + private Output nodeName; + + /** + * @return Target node for the cloned VM. + * + */ + public Output nodeName() { + return this.nodeName; + } + /** + * Purge backup configuration on destroy. + * + */ + @Export(name="purgeOnDestroy", refs={Boolean.class}, tree="[0]") + private Output purgeOnDestroy; + + /** + * @return Purge backup configuration on destroy. + * + */ + public Output purgeOnDestroy() { + return this.purgeOnDestroy; + } + /** + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + */ + @Export(name="rng", refs={ClonedVirtualMachineRng.class}, tree="[0]") + private Output rng; + + /** + * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + */ + public Output> rng() { + return Codegen.optional(this.rng); + } + /** + * Stop the VM on destroy (instead of shutdown). + * + */ + @Export(name="stopOnDestroy", refs={Boolean.class}, tree="[0]") + private Output stopOnDestroy; + + /** + * @return Stop the VM on destroy (instead of shutdown). + * + */ + public Output stopOnDestroy() { + return this.stopOnDestroy; + } + /** + * Tags applied after cloning. + * + */ + @Export(name="tags", refs={List.class,String.class}, tree="[0,1]") + private Output> tags; + + /** + * @return Tags applied after cloning. + * + */ + public Output>> tags() { + return Codegen.optional(this.tags); + } + @Export(name="timeouts", refs={ClonedVirtualMachineTimeouts.class}, tree="[0]") + private Output timeouts; + + public Output> timeouts() { + return Codegen.optional(this.timeouts); + } + /** + * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + */ + @Export(name="vga", refs={ClonedVirtualMachineVga.class}, tree="[0]") + private Output vga; + + /** + * @return Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + */ + public Output> vga() { + return Codegen.optional(this.vga); + } + /** + * The VM identifier in the Proxmox cluster. + * + */ + @Export(name="vmId", refs={String.class}, tree="[0]") + private Output vmId; + + /** + * @return The VM identifier in the Proxmox cluster. + * + */ + public Output vmId() { + return this.vmId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public ClonedVirtualMachine(java.lang.String name) { + this(name, ClonedVirtualMachineArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public ClonedVirtualMachine(java.lang.String name, ClonedVirtualMachineArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public ClonedVirtualMachine(java.lang.String name, ClonedVirtualMachineArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private ClonedVirtualMachine(java.lang.String name, Output id, @Nullable ClonedVirtualMachineState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine", name, state, makeResourceOptions(options, id), false); + } + + private static ClonedVirtualMachineArgs makeArgs(ClonedVirtualMachineArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? ClonedVirtualMachineArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .pluginDownloadURL("github://api.github.com/muhlba91/pulumi-proxmoxve") + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static ClonedVirtualMachine get(java.lang.String name, Output id, @Nullable ClonedVirtualMachineState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new ClonedVirtualMachine(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/ClonedVirtualMachineArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/ClonedVirtualMachineArgs.java new file mode 100644 index 00000000..0791bfcf --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/ClonedVirtualMachineArgs.java @@ -0,0 +1,702 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCdromArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCloneArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCpuArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineDeleteArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineDiskArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineMemoryArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineNetworkArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineRngArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineTimeoutsArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineVgaArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineArgs Empty = new ClonedVirtualMachineArgs(); + + /** + * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + */ + @Import(name="cdrom") + private @Nullable Output> cdrom; + + /** + * @return The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + */ + public Optional>> cdrom() { + return Optional.ofNullable(this.cdrom); + } + + /** + * Clone settings. Changes require recreation. + * + */ + @Import(name="clone", required=true) + private Output clone; + + /** + * @return Clone settings. Changes require recreation. + * + */ + public Output clone_() { + return this.clone; + } + + /** + * The CPU configuration. + * + */ + @Import(name="cpu") + private @Nullable Output cpu; + + /** + * @return The CPU configuration. + * + */ + public Optional> cpu() { + return Optional.ofNullable(this.cpu); + } + + /** + * Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + */ + @Import(name="delete") + private @Nullable Output delete; + + /** + * @return Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + */ + public Optional> delete() { + return Optional.ofNullable(this.delete); + } + + @Import(name="deleteUnreferencedDisksOnDestroy") + private @Nullable Output deleteUnreferencedDisksOnDestroy; + + public Optional> deleteUnreferencedDisksOnDestroy() { + return Optional.ofNullable(this.deleteUnreferencedDisksOnDestroy); + } + + /** + * Optional VM description applied after cloning. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return Optional VM description applied after cloning. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + */ + @Import(name="disk") + private @Nullable Output> disk; + + /** + * @return Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + */ + public Optional>> disk() { + return Optional.ofNullable(this.disk); + } + + /** + * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + */ + @Import(name="memory") + private @Nullable Output memory; + + /** + * @return Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + */ + public Optional> memory() { + return Optional.ofNullable(this.memory); + } + + /** + * Optional VM name override applied after cloning. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Optional VM name override applied after cloning. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + */ + @Import(name="network") + private @Nullable Output> network; + + /** + * @return Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + */ + public Optional>> network() { + return Optional.ofNullable(this.network); + } + + /** + * Target node for the cloned VM. + * + */ + @Import(name="nodeName", required=true) + private Output nodeName; + + /** + * @return Target node for the cloned VM. + * + */ + public Output nodeName() { + return this.nodeName; + } + + /** + * Purge backup configuration on destroy. + * + */ + @Import(name="purgeOnDestroy") + private @Nullable Output purgeOnDestroy; + + /** + * @return Purge backup configuration on destroy. + * + */ + public Optional> purgeOnDestroy() { + return Optional.ofNullable(this.purgeOnDestroy); + } + + /** + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + */ + @Import(name="rng") + private @Nullable Output rng; + + /** + * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + */ + public Optional> rng() { + return Optional.ofNullable(this.rng); + } + + /** + * Stop the VM on destroy (instead of shutdown). + * + */ + @Import(name="stopOnDestroy") + private @Nullable Output stopOnDestroy; + + /** + * @return Stop the VM on destroy (instead of shutdown). + * + */ + public Optional> stopOnDestroy() { + return Optional.ofNullable(this.stopOnDestroy); + } + + /** + * Tags applied after cloning. + * + */ + @Import(name="tags") + private @Nullable Output> tags; + + /** + * @return Tags applied after cloning. + * + */ + public Optional>> tags() { + return Optional.ofNullable(this.tags); + } + + @Import(name="timeouts") + private @Nullable Output timeouts; + + public Optional> timeouts() { + return Optional.ofNullable(this.timeouts); + } + + /** + * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + */ + @Import(name="vga") + private @Nullable Output vga; + + /** + * @return Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + */ + public Optional> vga() { + return Optional.ofNullable(this.vga); + } + + /** + * The VM identifier in the Proxmox cluster. + * + */ + @Import(name="vmId") + private @Nullable Output vmId; + + /** + * @return The VM identifier in the Proxmox cluster. + * + */ + public Optional> vmId() { + return Optional.ofNullable(this.vmId); + } + + private ClonedVirtualMachineArgs() {} + + private ClonedVirtualMachineArgs(ClonedVirtualMachineArgs $) { + this.cdrom = $.cdrom; + this.clone = $.clone; + this.cpu = $.cpu; + this.delete = $.delete; + this.deleteUnreferencedDisksOnDestroy = $.deleteUnreferencedDisksOnDestroy; + this.description = $.description; + this.disk = $.disk; + this.memory = $.memory; + this.name = $.name; + this.network = $.network; + this.nodeName = $.nodeName; + this.purgeOnDestroy = $.purgeOnDestroy; + this.rng = $.rng; + this.stopOnDestroy = $.stopOnDestroy; + this.tags = $.tags; + this.timeouts = $.timeouts; + this.vga = $.vga; + this.vmId = $.vmId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineArgs $; + + public Builder() { + $ = new ClonedVirtualMachineArgs(); + } + + public Builder(ClonedVirtualMachineArgs defaults) { + $ = new ClonedVirtualMachineArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cdrom The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + * @return builder + * + */ + public Builder cdrom(@Nullable Output> cdrom) { + $.cdrom = cdrom; + return this; + } + + /** + * @param cdrom The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + * @return builder + * + */ + public Builder cdrom(Map cdrom) { + return cdrom(Output.of(cdrom)); + } + + /** + * @param clone Clone settings. Changes require recreation. + * + * @return builder + * + */ + public Builder clone_(Output clone) { + $.clone = clone; + return this; + } + + /** + * @param clone Clone settings. Changes require recreation. + * + * @return builder + * + */ + public Builder clone_(ClonedVirtualMachineCloneArgs clone) { + return clone_(Output.of(clone)); + } + + /** + * @param cpu The CPU configuration. + * + * @return builder + * + */ + public Builder cpu(@Nullable Output cpu) { + $.cpu = cpu; + return this; + } + + /** + * @param cpu The CPU configuration. + * + * @return builder + * + */ + public Builder cpu(ClonedVirtualMachineCpuArgs cpu) { + return cpu(Output.of(cpu)); + } + + /** + * @param delete Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + * @return builder + * + */ + public Builder delete(@Nullable Output delete) { + $.delete = delete; + return this; + } + + /** + * @param delete Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + * @return builder + * + */ + public Builder delete(ClonedVirtualMachineDeleteArgs delete) { + return delete(Output.of(delete)); + } + + public Builder deleteUnreferencedDisksOnDestroy(@Nullable Output deleteUnreferencedDisksOnDestroy) { + $.deleteUnreferencedDisksOnDestroy = deleteUnreferencedDisksOnDestroy; + return this; + } + + public Builder deleteUnreferencedDisksOnDestroy(Boolean deleteUnreferencedDisksOnDestroy) { + return deleteUnreferencedDisksOnDestroy(Output.of(deleteUnreferencedDisksOnDestroy)); + } + + /** + * @param description Optional VM description applied after cloning. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description Optional VM description applied after cloning. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param disk Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder disk(@Nullable Output> disk) { + $.disk = disk; + return this; + } + + /** + * @param disk Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder disk(Map disk) { + return disk(Output.of(disk)); + } + + /** + * @param memory Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + * @return builder + * + */ + public Builder memory(@Nullable Output memory) { + $.memory = memory; + return this; + } + + /** + * @param memory Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + * @return builder + * + */ + public Builder memory(ClonedVirtualMachineMemoryArgs memory) { + return memory(Output.of(memory)); + } + + /** + * @param name Optional VM name override applied after cloning. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Optional VM name override applied after cloning. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param network Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder network(@Nullable Output> network) { + $.network = network; + return this; + } + + /** + * @param network Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder network(Map network) { + return network(Output.of(network)); + } + + /** + * @param nodeName Target node for the cloned VM. + * + * @return builder + * + */ + public Builder nodeName(Output nodeName) { + $.nodeName = nodeName; + return this; + } + + /** + * @param nodeName Target node for the cloned VM. + * + * @return builder + * + */ + public Builder nodeName(String nodeName) { + return nodeName(Output.of(nodeName)); + } + + /** + * @param purgeOnDestroy Purge backup configuration on destroy. + * + * @return builder + * + */ + public Builder purgeOnDestroy(@Nullable Output purgeOnDestroy) { + $.purgeOnDestroy = purgeOnDestroy; + return this; + } + + /** + * @param purgeOnDestroy Purge backup configuration on destroy. + * + * @return builder + * + */ + public Builder purgeOnDestroy(Boolean purgeOnDestroy) { + return purgeOnDestroy(Output.of(purgeOnDestroy)); + } + + /** + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + * @return builder + * + */ + public Builder rng(@Nullable Output rng) { + $.rng = rng; + return this; + } + + /** + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + * @return builder + * + */ + public Builder rng(ClonedVirtualMachineRngArgs rng) { + return rng(Output.of(rng)); + } + + /** + * @param stopOnDestroy Stop the VM on destroy (instead of shutdown). + * + * @return builder + * + */ + public Builder stopOnDestroy(@Nullable Output stopOnDestroy) { + $.stopOnDestroy = stopOnDestroy; + return this; + } + + /** + * @param stopOnDestroy Stop the VM on destroy (instead of shutdown). + * + * @return builder + * + */ + public Builder stopOnDestroy(Boolean stopOnDestroy) { + return stopOnDestroy(Output.of(stopOnDestroy)); + } + + /** + * @param tags Tags applied after cloning. + * + * @return builder + * + */ + public Builder tags(@Nullable Output> tags) { + $.tags = tags; + return this; + } + + /** + * @param tags Tags applied after cloning. + * + * @return builder + * + */ + public Builder tags(List tags) { + return tags(Output.of(tags)); + } + + /** + * @param tags Tags applied after cloning. + * + * @return builder + * + */ + public Builder tags(String... tags) { + return tags(List.of(tags)); + } + + public Builder timeouts(@Nullable Output timeouts) { + $.timeouts = timeouts; + return this; + } + + public Builder timeouts(ClonedVirtualMachineTimeoutsArgs timeouts) { + return timeouts(Output.of(timeouts)); + } + + /** + * @param vga Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + * @return builder + * + */ + public Builder vga(@Nullable Output vga) { + $.vga = vga; + return this; + } + + /** + * @param vga Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + * @return builder + * + */ + public Builder vga(ClonedVirtualMachineVgaArgs vga) { + return vga(Output.of(vga)); + } + + /** + * @param vmId The VM identifier in the Proxmox cluster. + * + * @return builder + * + */ + public Builder vmId(@Nullable Output vmId) { + $.vmId = vmId; + return this; + } + + /** + * @param vmId The VM identifier in the Proxmox cluster. + * + * @return builder + * + */ + public Builder vmId(String vmId) { + return vmId(Output.of(vmId)); + } + + public ClonedVirtualMachineArgs build() { + if ($.clone == null) { + throw new MissingRequiredPropertyException("ClonedVirtualMachineArgs", "clone"); + } + if ($.nodeName == null) { + throw new MissingRequiredPropertyException("ClonedVirtualMachineArgs", "nodeName"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine.java index 54f31d33..8cffb815 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine.java @@ -266,6 +266,24 @@ public Output> hookScriptFileId() { public Output>> hostpcis() { return Codegen.optional(this.hostpcis); } + /** + * Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + */ + @Export(name="hotplug", refs={String.class}, tree="[0]") + private Output hotplug; + + /** + * @return Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + */ + public Output hotplug() { + return this.hotplug; + } /** * The cloud-init configuration. * @@ -859,14 +877,20 @@ public Output> timeoutStopVm() { return Codegen.optional(this.timeoutStopVm); } /** - * The TPM state device. + * The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * */ @Export(name="tpmState", refs={VirtualMachineTpmState.class}, tree="[0]") private Output tpmState; /** - * @return The TPM state device. + * @return The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * */ public Output> tpmState() { diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2.java index 519f586b..aac911a0 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2.java @@ -11,7 +11,6 @@ import io.muehlbachler.pulumi.proxmoxve.VM.VirtualMachine2Args; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2State; import io.muehlbachler.pulumi.proxmoxve.VM.outputs.VirtualMachine2Cdrom; -import io.muehlbachler.pulumi.proxmoxve.VM.outputs.VirtualMachine2Clone; import io.muehlbachler.pulumi.proxmoxve.VM.outputs.VirtualMachine2Cpu; import io.muehlbachler.pulumi.proxmoxve.VM.outputs.VirtualMachine2Rng; import io.muehlbachler.pulumi.proxmoxve.VM.outputs.VirtualMachine2Timeouts; @@ -51,20 +50,6 @@ public class VirtualMachine2 extends com.pulumi.resources.CustomResource { public Output> cdrom() { return this.cdrom; } - /** - * The cloning configuration. - * - */ - @Export(name="clone", refs={VirtualMachine2Clone.class}, tree="[0]") - private Output clone; - - /** - * @return The cloning configuration. - * - */ - public Output> clone_() { - return Codegen.optional(this.clone); - } /** * The CPU configuration. * @@ -150,14 +135,14 @@ public Output purgeOnDestroy() { return this.purgeOnDestroy; } /** - * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * */ @Export(name="rng", refs={VirtualMachine2Rng.class}, tree="[0]") private Output rng; /** - * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * */ public Output rng() { diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2Args.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2Args.java index 0920ad58..7bd2cb67 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2Args.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachine2Args.java @@ -7,7 +7,6 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2CdromArgs; -import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2CloneArgs; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2CpuArgs; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2RngArgs; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2TimeoutsArgs; @@ -40,21 +39,6 @@ public Optional>> cdrom() { return Optional.ofNullable(this.cdrom); } - /** - * The cloning configuration. - * - */ - @Import(name="clone") - private @Nullable Output clone; - - /** - * @return The cloning configuration. - * - */ - public Optional> clone_() { - return Optional.ofNullable(this.clone); - } - /** * The CPU configuration. * @@ -146,14 +130,14 @@ public Optional> purgeOnDestroy() { } /** - * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * */ @Import(name="rng") private @Nullable Output rng; /** - * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * */ public Optional> rng() { @@ -231,7 +215,6 @@ private VirtualMachine2Args() {} private VirtualMachine2Args(VirtualMachine2Args $) { this.cdrom = $.cdrom; - this.clone = $.clone; this.cpu = $.cpu; this.deleteUnreferencedDisksOnDestroy = $.deleteUnreferencedDisksOnDestroy; this.description = $.description; @@ -285,27 +268,6 @@ public Builder cdrom(Map cdrom) { return cdrom(Output.of(cdrom)); } - /** - * @param clone The cloning configuration. - * - * @return builder - * - */ - public Builder clone_(@Nullable Output clone) { - $.clone = clone; - return this; - } - - /** - * @param clone The cloning configuration. - * - * @return builder - * - */ - public Builder clone_(VirtualMachine2CloneArgs clone) { - return clone_(Output.of(clone)); - } - /** * @param cpu The CPU configuration. * @@ -433,7 +395,7 @@ public Builder purgeOnDestroy(Boolean purgeOnDestroy) { } /** - * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * * @return builder * @@ -444,7 +406,7 @@ public Builder rng(@Nullable Output rng) { } /** - * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachineArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachineArgs.java index e48c82e0..0e55f45d 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachineArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/VirtualMachineArgs.java @@ -269,6 +269,25 @@ public Optional>> hostpcis() { return Optional.ofNullable(this.hostpcis); } + /** + * Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + */ + @Import(name="hotplug") + private @Nullable Output hotplug; + + /** + * @return Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + */ + public Optional> hotplug() { + return Optional.ofNullable(this.hotplug); + } + /** * The cloud-init configuration. * @@ -854,14 +873,20 @@ public Optional> timeoutStopVm() { } /** - * The TPM state device. + * The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * */ @Import(name="tpmState") private @Nullable Output tpmState; /** - * @return The TPM state device. + * @return The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * */ public Optional> tpmState() { @@ -961,6 +986,7 @@ private VirtualMachineArgs(VirtualMachineArgs $) { this.efiDisk = $.efiDisk; this.hookScriptFileId = $.hookScriptFileId; this.hostpcis = $.hostpcis; + this.hotplug = $.hotplug; this.initialization = $.initialization; this.keyboardLayout = $.keyboardLayout; this.kvmArguments = $.kvmArguments; @@ -1370,6 +1396,31 @@ public Builder hostpcis(VirtualMachineHostpciArgs... hostpcis) { return hostpcis(List.of(hostpcis)); } + /** + * @param hotplug Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + * @return builder + * + */ + public Builder hotplug(@Nullable Output hotplug) { + $.hotplug = hotplug; + return this; + } + + /** + * @param hotplug Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + * @return builder + * + */ + public Builder hotplug(String hotplug) { + return hotplug(Output.of(hotplug)); + } + /** * @param initialization The cloud-init configuration. * @@ -2236,7 +2287,10 @@ public Builder timeoutStopVm(Integer timeoutStopVm) { } /** - * @param tpmState The TPM state device. + * @param tpmState The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * * @return builder * @@ -2247,7 +2301,10 @@ public Builder tpmState(@Nullable Output tpmState) { } /** - * @param tpmState The TPM state device. + * @param tpmState The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCdromArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCdromArgs.java new file mode 100644 index 00000000..eec1b88f --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCdromArgs.java @@ -0,0 +1,83 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineCdromArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineCdromArgs Empty = new ClonedVirtualMachineCdromArgs(); + + /** + * The file ID of the CD-ROM, or `cdrom|none`. Defaults to <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span> to leave the CD-ROM empty. Use <span pulumi-lang-nodejs="`cdrom`" pulumi-lang-dotnet="`Cdrom`" pulumi-lang-go="`cdrom`" pulumi-lang-python="`cdrom`" pulumi-lang-yaml="`cdrom`" pulumi-lang-java="`cdrom`">`cdrom`</span> to connect to the physical drive. + * + */ + @Import(name="fileId") + private @Nullable Output fileId; + + /** + * @return The file ID of the CD-ROM, or `cdrom|none`. Defaults to <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span> to leave the CD-ROM empty. Use <span pulumi-lang-nodejs="`cdrom`" pulumi-lang-dotnet="`Cdrom`" pulumi-lang-go="`cdrom`" pulumi-lang-python="`cdrom`" pulumi-lang-yaml="`cdrom`" pulumi-lang-java="`cdrom`">`cdrom`</span> to connect to the physical drive. + * + */ + public Optional> fileId() { + return Optional.ofNullable(this.fileId); + } + + private ClonedVirtualMachineCdromArgs() {} + + private ClonedVirtualMachineCdromArgs(ClonedVirtualMachineCdromArgs $) { + this.fileId = $.fileId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineCdromArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineCdromArgs $; + + public Builder() { + $ = new ClonedVirtualMachineCdromArgs(); + } + + public Builder(ClonedVirtualMachineCdromArgs defaults) { + $ = new ClonedVirtualMachineCdromArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param fileId The file ID of the CD-ROM, or `cdrom|none`. Defaults to <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span> to leave the CD-ROM empty. Use <span pulumi-lang-nodejs="`cdrom`" pulumi-lang-dotnet="`Cdrom`" pulumi-lang-go="`cdrom`" pulumi-lang-python="`cdrom`" pulumi-lang-yaml="`cdrom`" pulumi-lang-java="`cdrom`">`cdrom`</span> to connect to the physical drive. + * + * @return builder + * + */ + public Builder fileId(@Nullable Output fileId) { + $.fileId = fileId; + return this; + } + + /** + * @param fileId The file ID of the CD-ROM, or `cdrom|none`. Defaults to <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span> to leave the CD-ROM empty. Use <span pulumi-lang-nodejs="`cdrom`" pulumi-lang-dotnet="`Cdrom`" pulumi-lang-go="`cdrom`" pulumi-lang-python="`cdrom`" pulumi-lang-yaml="`cdrom`" pulumi-lang-java="`cdrom`">`cdrom`</span> to connect to the physical drive. + * + * @return builder + * + */ + public Builder fileId(String fileId) { + return fileId(Output.of(fileId)); + } + + public ClonedVirtualMachineCdromArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCloneArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCloneArgs.java new file mode 100644 index 00000000..d73d73c3 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCloneArgs.java @@ -0,0 +1,385 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineCloneArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineCloneArgs Empty = new ClonedVirtualMachineCloneArgs(); + + /** + * Clone bandwidth limit in MB/s. + * + */ + @Import(name="bandwidthLimit") + private @Nullable Output bandwidthLimit; + + /** + * @return Clone bandwidth limit in MB/s. + * + */ + public Optional> bandwidthLimit() { + return Optional.ofNullable(this.bandwidthLimit); + } + + /** + * Perform a full clone (true) or linked clone (false). + * + */ + @Import(name="full") + private @Nullable Output full; + + /** + * @return Perform a full clone (true) or linked clone (false). + * + */ + public Optional> full() { + return Optional.ofNullable(this.full); + } + + /** + * Pool to assign the cloned VM to. + * + */ + @Import(name="poolId") + private @Nullable Output poolId; + + /** + * @return Pool to assign the cloned VM to. + * + */ + public Optional> poolId() { + return Optional.ofNullable(this.poolId); + } + + /** + * Number of retries for clone operations. + * + */ + @Import(name="retries") + private @Nullable Output retries; + + /** + * @return Number of retries for clone operations. + * + */ + public Optional> retries() { + return Optional.ofNullable(this.retries); + } + + /** + * Snapshot name to clone from. + * + */ + @Import(name="snapshotName") + private @Nullable Output snapshotName; + + /** + * @return Snapshot name to clone from. + * + */ + public Optional> snapshotName() { + return Optional.ofNullable(this.snapshotName); + } + + /** + * Source node of the VM/template. Defaults to target node if unset. + * + */ + @Import(name="sourceNodeName") + private @Nullable Output sourceNodeName; + + /** + * @return Source node of the VM/template. Defaults to target node if unset. + * + */ + public Optional> sourceNodeName() { + return Optional.ofNullable(this.sourceNodeName); + } + + /** + * Source VM/template ID to clone from. + * + */ + @Import(name="sourceVmId", required=true) + private Output sourceVmId; + + /** + * @return Source VM/template ID to clone from. + * + */ + public Output sourceVmId() { + return this.sourceVmId; + } + + /** + * Target datastore for cloned disks. + * + */ + @Import(name="targetDatastore") + private @Nullable Output targetDatastore; + + /** + * @return Target datastore for cloned disks. + * + */ + public Optional> targetDatastore() { + return Optional.ofNullable(this.targetDatastore); + } + + /** + * Target disk format for clone (e.g., raw, qcow2). + * + */ + @Import(name="targetFormat") + private @Nullable Output targetFormat; + + /** + * @return Target disk format for clone (e.g., raw, qcow2). + * + */ + public Optional> targetFormat() { + return Optional.ofNullable(this.targetFormat); + } + + private ClonedVirtualMachineCloneArgs() {} + + private ClonedVirtualMachineCloneArgs(ClonedVirtualMachineCloneArgs $) { + this.bandwidthLimit = $.bandwidthLimit; + this.full = $.full; + this.poolId = $.poolId; + this.retries = $.retries; + this.snapshotName = $.snapshotName; + this.sourceNodeName = $.sourceNodeName; + this.sourceVmId = $.sourceVmId; + this.targetDatastore = $.targetDatastore; + this.targetFormat = $.targetFormat; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineCloneArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineCloneArgs $; + + public Builder() { + $ = new ClonedVirtualMachineCloneArgs(); + } + + public Builder(ClonedVirtualMachineCloneArgs defaults) { + $ = new ClonedVirtualMachineCloneArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param bandwidthLimit Clone bandwidth limit in MB/s. + * + * @return builder + * + */ + public Builder bandwidthLimit(@Nullable Output bandwidthLimit) { + $.bandwidthLimit = bandwidthLimit; + return this; + } + + /** + * @param bandwidthLimit Clone bandwidth limit in MB/s. + * + * @return builder + * + */ + public Builder bandwidthLimit(Integer bandwidthLimit) { + return bandwidthLimit(Output.of(bandwidthLimit)); + } + + /** + * @param full Perform a full clone (true) or linked clone (false). + * + * @return builder + * + */ + public Builder full(@Nullable Output full) { + $.full = full; + return this; + } + + /** + * @param full Perform a full clone (true) or linked clone (false). + * + * @return builder + * + */ + public Builder full(Boolean full) { + return full(Output.of(full)); + } + + /** + * @param poolId Pool to assign the cloned VM to. + * + * @return builder + * + */ + public Builder poolId(@Nullable Output poolId) { + $.poolId = poolId; + return this; + } + + /** + * @param poolId Pool to assign the cloned VM to. + * + * @return builder + * + */ + public Builder poolId(String poolId) { + return poolId(Output.of(poolId)); + } + + /** + * @param retries Number of retries for clone operations. + * + * @return builder + * + */ + public Builder retries(@Nullable Output retries) { + $.retries = retries; + return this; + } + + /** + * @param retries Number of retries for clone operations. + * + * @return builder + * + */ + public Builder retries(Integer retries) { + return retries(Output.of(retries)); + } + + /** + * @param snapshotName Snapshot name to clone from. + * + * @return builder + * + */ + public Builder snapshotName(@Nullable Output snapshotName) { + $.snapshotName = snapshotName; + return this; + } + + /** + * @param snapshotName Snapshot name to clone from. + * + * @return builder + * + */ + public Builder snapshotName(String snapshotName) { + return snapshotName(Output.of(snapshotName)); + } + + /** + * @param sourceNodeName Source node of the VM/template. Defaults to target node if unset. + * + * @return builder + * + */ + public Builder sourceNodeName(@Nullable Output sourceNodeName) { + $.sourceNodeName = sourceNodeName; + return this; + } + + /** + * @param sourceNodeName Source node of the VM/template. Defaults to target node if unset. + * + * @return builder + * + */ + public Builder sourceNodeName(String sourceNodeName) { + return sourceNodeName(Output.of(sourceNodeName)); + } + + /** + * @param sourceVmId Source VM/template ID to clone from. + * + * @return builder + * + */ + public Builder sourceVmId(Output sourceVmId) { + $.sourceVmId = sourceVmId; + return this; + } + + /** + * @param sourceVmId Source VM/template ID to clone from. + * + * @return builder + * + */ + public Builder sourceVmId(Integer sourceVmId) { + return sourceVmId(Output.of(sourceVmId)); + } + + /** + * @param targetDatastore Target datastore for cloned disks. + * + * @return builder + * + */ + public Builder targetDatastore(@Nullable Output targetDatastore) { + $.targetDatastore = targetDatastore; + return this; + } + + /** + * @param targetDatastore Target datastore for cloned disks. + * + * @return builder + * + */ + public Builder targetDatastore(String targetDatastore) { + return targetDatastore(Output.of(targetDatastore)); + } + + /** + * @param targetFormat Target disk format for clone (e.g., raw, qcow2). + * + * @return builder + * + */ + public Builder targetFormat(@Nullable Output targetFormat) { + $.targetFormat = targetFormat; + return this; + } + + /** + * @param targetFormat Target disk format for clone (e.g., raw, qcow2). + * + * @return builder + * + */ + public Builder targetFormat(String targetFormat) { + return targetFormat(Output.of(targetFormat)); + } + + public ClonedVirtualMachineCloneArgs build() { + if ($.sourceVmId == null) { + throw new MissingRequiredPropertyException("ClonedVirtualMachineCloneArgs", "sourceVmId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCpuArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCpuArgs.java new file mode 100644 index 00000000..3a730fdd --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineCpuArgs.java @@ -0,0 +1,429 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineCpuArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineCpuArgs Empty = new ClonedVirtualMachineCpuArgs(); + + /** + * The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + @Import(name="affinity") + private @Nullable Output affinity; + + /** + * @return The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + public Optional> affinity() { + return Optional.ofNullable(this.affinity); + } + + /** + * The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + @Import(name="architecture") + private @Nullable Output architecture; + + /** + * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + public Optional> architecture() { + return Optional.ofNullable(this.architecture); + } + + /** + * The number of CPU cores per socket (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + @Import(name="cores") + private @Nullable Output cores; + + /** + * @return The number of CPU cores per socket (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + public Optional> cores() { + return Optional.ofNullable(this.cores); + } + + /** + * Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: <span pulumi-lang-nodejs="`pcid`" pulumi-lang-dotnet="`Pcid`" pulumi-lang-go="`pcid`" pulumi-lang-python="`pcid`" pulumi-lang-yaml="`pcid`" pulumi-lang-java="`pcid`">`pcid`</span>, `spec-ctrl`, <span pulumi-lang-nodejs="`ibpb`" pulumi-lang-dotnet="`Ibpb`" pulumi-lang-go="`ibpb`" pulumi-lang-python="`ibpb`" pulumi-lang-yaml="`ibpb`" pulumi-lang-java="`ibpb`">`ibpb`</span>, <span pulumi-lang-nodejs="`ssbd`" pulumi-lang-dotnet="`Ssbd`" pulumi-lang-go="`ssbd`" pulumi-lang-python="`ssbd`" pulumi-lang-yaml="`ssbd`" pulumi-lang-java="`ssbd`">`ssbd`</span>, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, <span pulumi-lang-nodejs="`pdpe1gb`" pulumi-lang-dotnet="`Pdpe1gb`" pulumi-lang-go="`pdpe1gb`" pulumi-lang-python="`pdpe1gb`" pulumi-lang-yaml="`pdpe1gb`" pulumi-lang-java="`pdpe1gb`">`pdpe1gb`</span>, `md-clear`, `hv-tlbflush`, `hv-evmcs`, <span pulumi-lang-nodejs="`aes`" pulumi-lang-dotnet="`Aes`" pulumi-lang-go="`aes`" pulumi-lang-python="`aes`" pulumi-lang-yaml="`aes`" pulumi-lang-java="`aes`">`aes`</span>. + * + */ + @Import(name="flags") + private @Nullable Output> flags; + + /** + * @return Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: <span pulumi-lang-nodejs="`pcid`" pulumi-lang-dotnet="`Pcid`" pulumi-lang-go="`pcid`" pulumi-lang-python="`pcid`" pulumi-lang-yaml="`pcid`" pulumi-lang-java="`pcid`">`pcid`</span>, `spec-ctrl`, <span pulumi-lang-nodejs="`ibpb`" pulumi-lang-dotnet="`Ibpb`" pulumi-lang-go="`ibpb`" pulumi-lang-python="`ibpb`" pulumi-lang-yaml="`ibpb`" pulumi-lang-java="`ibpb`">`ibpb`</span>, <span pulumi-lang-nodejs="`ssbd`" pulumi-lang-dotnet="`Ssbd`" pulumi-lang-go="`ssbd`" pulumi-lang-python="`ssbd`" pulumi-lang-yaml="`ssbd`" pulumi-lang-java="`ssbd`">`ssbd`</span>, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, <span pulumi-lang-nodejs="`pdpe1gb`" pulumi-lang-dotnet="`Pdpe1gb`" pulumi-lang-go="`pdpe1gb`" pulumi-lang-python="`pdpe1gb`" pulumi-lang-yaml="`pdpe1gb`" pulumi-lang-java="`pdpe1gb`">`pdpe1gb`</span>, `md-clear`, `hv-tlbflush`, `hv-evmcs`, <span pulumi-lang-nodejs="`aes`" pulumi-lang-dotnet="`Aes`" pulumi-lang-go="`aes`" pulumi-lang-python="`aes`" pulumi-lang-yaml="`aes`" pulumi-lang-java="`aes`">`aes`</span>. + * + */ + public Optional>> flags() { + return Optional.ofNullable(this.flags); + } + + /** + * The number of hotplugged vCPUs (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + @Import(name="hotplugged") + private @Nullable Output hotplugged; + + /** + * @return The number of hotplugged vCPUs (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + public Optional> hotplugged() { + return Optional.ofNullable(this.hotplugged); + } + + /** + * Limit of CPU usage (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> which means no limit). + * + */ + @Import(name="limit") + private @Nullable Output limit; + + /** + * @return Limit of CPU usage (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> which means no limit). + * + */ + public Optional> limit() { + return Optional.ofNullable(this.limit); + } + + /** + * Enable NUMA (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + @Import(name="numa") + private @Nullable Output numa; + + /** + * @return Enable NUMA (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + public Optional> numa() { + return Optional.ofNullable(this.numa); + } + + /** + * The number of CPU sockets (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + @Import(name="sockets") + private @Nullable Output sockets; + + /** + * @return The number of CPU sockets (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + public Optional> sockets() { + return Optional.ofNullable(this.sockets); + } + + /** + * Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to <span pulumi-lang-nodejs="`kvm64`" pulumi-lang-dotnet="`Kvm64`" pulumi-lang-go="`kvm64`" pulumi-lang-python="`kvm64`" pulumi-lang-yaml="`kvm64`" pulumi-lang-java="`kvm64`">`kvm64`</span>). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + * + */ + @Import(name="type") + private @Nullable Output type; + + /** + * @return Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to <span pulumi-lang-nodejs="`kvm64`" pulumi-lang-dotnet="`Kvm64`" pulumi-lang-go="`kvm64`" pulumi-lang-python="`kvm64`" pulumi-lang-yaml="`kvm64`" pulumi-lang-java="`kvm64`">`kvm64`</span>). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + * + */ + public Optional> type() { + return Optional.ofNullable(this.type); + } + + /** + * CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + * + */ + @Import(name="units") + private @Nullable Output units; + + /** + * @return CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + * + */ + public Optional> units() { + return Optional.ofNullable(this.units); + } + + private ClonedVirtualMachineCpuArgs() {} + + private ClonedVirtualMachineCpuArgs(ClonedVirtualMachineCpuArgs $) { + this.affinity = $.affinity; + this.architecture = $.architecture; + this.cores = $.cores; + this.flags = $.flags; + this.hotplugged = $.hotplugged; + this.limit = $.limit; + this.numa = $.numa; + this.sockets = $.sockets; + this.type = $.type; + this.units = $.units; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineCpuArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineCpuArgs $; + + public Builder() { + $ = new ClonedVirtualMachineCpuArgs(); + } + + public Builder(ClonedVirtualMachineCpuArgs defaults) { + $ = new ClonedVirtualMachineCpuArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param affinity The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + * @return builder + * + */ + public Builder affinity(@Nullable Output affinity) { + $.affinity = affinity; + return this; + } + + /** + * @param affinity The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + * @return builder + * + */ + public Builder affinity(String affinity) { + return affinity(Output.of(affinity)); + } + + /** + * @param architecture The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + * @return builder + * + */ + public Builder architecture(@Nullable Output architecture) { + $.architecture = architecture; + return this; + } + + /** + * @param architecture The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + * @return builder + * + */ + public Builder architecture(String architecture) { + return architecture(Output.of(architecture)); + } + + /** + * @param cores The number of CPU cores per socket (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + * @return builder + * + */ + public Builder cores(@Nullable Output cores) { + $.cores = cores; + return this; + } + + /** + * @param cores The number of CPU cores per socket (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + * @return builder + * + */ + public Builder cores(Integer cores) { + return cores(Output.of(cores)); + } + + /** + * @param flags Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: <span pulumi-lang-nodejs="`pcid`" pulumi-lang-dotnet="`Pcid`" pulumi-lang-go="`pcid`" pulumi-lang-python="`pcid`" pulumi-lang-yaml="`pcid`" pulumi-lang-java="`pcid`">`pcid`</span>, `spec-ctrl`, <span pulumi-lang-nodejs="`ibpb`" pulumi-lang-dotnet="`Ibpb`" pulumi-lang-go="`ibpb`" pulumi-lang-python="`ibpb`" pulumi-lang-yaml="`ibpb`" pulumi-lang-java="`ibpb`">`ibpb`</span>, <span pulumi-lang-nodejs="`ssbd`" pulumi-lang-dotnet="`Ssbd`" pulumi-lang-go="`ssbd`" pulumi-lang-python="`ssbd`" pulumi-lang-yaml="`ssbd`" pulumi-lang-java="`ssbd`">`ssbd`</span>, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, <span pulumi-lang-nodejs="`pdpe1gb`" pulumi-lang-dotnet="`Pdpe1gb`" pulumi-lang-go="`pdpe1gb`" pulumi-lang-python="`pdpe1gb`" pulumi-lang-yaml="`pdpe1gb`" pulumi-lang-java="`pdpe1gb`">`pdpe1gb`</span>, `md-clear`, `hv-tlbflush`, `hv-evmcs`, <span pulumi-lang-nodejs="`aes`" pulumi-lang-dotnet="`Aes`" pulumi-lang-go="`aes`" pulumi-lang-python="`aes`" pulumi-lang-yaml="`aes`" pulumi-lang-java="`aes`">`aes`</span>. + * + * @return builder + * + */ + public Builder flags(@Nullable Output> flags) { + $.flags = flags; + return this; + } + + /** + * @param flags Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: <span pulumi-lang-nodejs="`pcid`" pulumi-lang-dotnet="`Pcid`" pulumi-lang-go="`pcid`" pulumi-lang-python="`pcid`" pulumi-lang-yaml="`pcid`" pulumi-lang-java="`pcid`">`pcid`</span>, `spec-ctrl`, <span pulumi-lang-nodejs="`ibpb`" pulumi-lang-dotnet="`Ibpb`" pulumi-lang-go="`ibpb`" pulumi-lang-python="`ibpb`" pulumi-lang-yaml="`ibpb`" pulumi-lang-java="`ibpb`">`ibpb`</span>, <span pulumi-lang-nodejs="`ssbd`" pulumi-lang-dotnet="`Ssbd`" pulumi-lang-go="`ssbd`" pulumi-lang-python="`ssbd`" pulumi-lang-yaml="`ssbd`" pulumi-lang-java="`ssbd`">`ssbd`</span>, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, <span pulumi-lang-nodejs="`pdpe1gb`" pulumi-lang-dotnet="`Pdpe1gb`" pulumi-lang-go="`pdpe1gb`" pulumi-lang-python="`pdpe1gb`" pulumi-lang-yaml="`pdpe1gb`" pulumi-lang-java="`pdpe1gb`">`pdpe1gb`</span>, `md-clear`, `hv-tlbflush`, `hv-evmcs`, <span pulumi-lang-nodejs="`aes`" pulumi-lang-dotnet="`Aes`" pulumi-lang-go="`aes`" pulumi-lang-python="`aes`" pulumi-lang-yaml="`aes`" pulumi-lang-java="`aes`">`aes`</span>. + * + * @return builder + * + */ + public Builder flags(List flags) { + return flags(Output.of(flags)); + } + + /** + * @param flags Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: <span pulumi-lang-nodejs="`pcid`" pulumi-lang-dotnet="`Pcid`" pulumi-lang-go="`pcid`" pulumi-lang-python="`pcid`" pulumi-lang-yaml="`pcid`" pulumi-lang-java="`pcid`">`pcid`</span>, `spec-ctrl`, <span pulumi-lang-nodejs="`ibpb`" pulumi-lang-dotnet="`Ibpb`" pulumi-lang-go="`ibpb`" pulumi-lang-python="`ibpb`" pulumi-lang-yaml="`ibpb`" pulumi-lang-java="`ibpb`">`ibpb`</span>, <span pulumi-lang-nodejs="`ssbd`" pulumi-lang-dotnet="`Ssbd`" pulumi-lang-go="`ssbd`" pulumi-lang-python="`ssbd`" pulumi-lang-yaml="`ssbd`" pulumi-lang-java="`ssbd`">`ssbd`</span>, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, <span pulumi-lang-nodejs="`pdpe1gb`" pulumi-lang-dotnet="`Pdpe1gb`" pulumi-lang-go="`pdpe1gb`" pulumi-lang-python="`pdpe1gb`" pulumi-lang-yaml="`pdpe1gb`" pulumi-lang-java="`pdpe1gb`">`pdpe1gb`</span>, `md-clear`, `hv-tlbflush`, `hv-evmcs`, <span pulumi-lang-nodejs="`aes`" pulumi-lang-dotnet="`Aes`" pulumi-lang-go="`aes`" pulumi-lang-python="`aes`" pulumi-lang-yaml="`aes`" pulumi-lang-java="`aes`">`aes`</span>. + * + * @return builder + * + */ + public Builder flags(String... flags) { + return flags(List.of(flags)); + } + + /** + * @param hotplugged The number of hotplugged vCPUs (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + * @return builder + * + */ + public Builder hotplugged(@Nullable Output hotplugged) { + $.hotplugged = hotplugged; + return this; + } + + /** + * @param hotplugged The number of hotplugged vCPUs (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + * @return builder + * + */ + public Builder hotplugged(Integer hotplugged) { + return hotplugged(Output.of(hotplugged)); + } + + /** + * @param limit Limit of CPU usage (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> which means no limit). + * + * @return builder + * + */ + public Builder limit(@Nullable Output limit) { + $.limit = limit; + return this; + } + + /** + * @param limit Limit of CPU usage (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> which means no limit). + * + * @return builder + * + */ + public Builder limit(Integer limit) { + return limit(Output.of(limit)); + } + + /** + * @param numa Enable NUMA (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder numa(@Nullable Output numa) { + $.numa = numa; + return this; + } + + /** + * @param numa Enable NUMA (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder numa(Boolean numa) { + return numa(Output.of(numa)); + } + + /** + * @param sockets The number of CPU sockets (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + * @return builder + * + */ + public Builder sockets(@Nullable Output sockets) { + $.sockets = sockets; + return this; + } + + /** + * @param sockets The number of CPU sockets (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + * @return builder + * + */ + public Builder sockets(Integer sockets) { + return sockets(Output.of(sockets)); + } + + /** + * @param type Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to <span pulumi-lang-nodejs="`kvm64`" pulumi-lang-dotnet="`Kvm64`" pulumi-lang-go="`kvm64`" pulumi-lang-python="`kvm64`" pulumi-lang-yaml="`kvm64`" pulumi-lang-java="`kvm64`">`kvm64`</span>). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + * + * @return builder + * + */ + public Builder type(@Nullable Output type) { + $.type = type; + return this; + } + + /** + * @param type Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to <span pulumi-lang-nodejs="`kvm64`" pulumi-lang-dotnet="`Kvm64`" pulumi-lang-go="`kvm64`" pulumi-lang-python="`kvm64`" pulumi-lang-yaml="`kvm64`" pulumi-lang-java="`kvm64`">`kvm64`</span>). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + * + * @return builder + * + */ + public Builder type(String type) { + return type(Output.of(type)); + } + + /** + * @param units CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + * + * @return builder + * + */ + public Builder units(@Nullable Output units) { + $.units = units; + return this; + } + + /** + * @param units CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + * + * @return builder + * + */ + public Builder units(Integer units) { + return units(Output.of(units)); + } + + public ClonedVirtualMachineCpuArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineDeleteArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineDeleteArgs.java new file mode 100644 index 00000000..373142a0 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineDeleteArgs.java @@ -0,0 +1,141 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineDeleteArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineDeleteArgs Empty = new ClonedVirtualMachineDeleteArgs(); + + /** + * Disk slots to delete (e.g., scsi2). + * + */ + @Import(name="disks") + private @Nullable Output> disks; + + /** + * @return Disk slots to delete (e.g., scsi2). + * + */ + public Optional>> disks() { + return Optional.ofNullable(this.disks); + } + + /** + * Network slots to delete (e.g., net1). + * + */ + @Import(name="networks") + private @Nullable Output> networks; + + /** + * @return Network slots to delete (e.g., net1). + * + */ + public Optional>> networks() { + return Optional.ofNullable(this.networks); + } + + private ClonedVirtualMachineDeleteArgs() {} + + private ClonedVirtualMachineDeleteArgs(ClonedVirtualMachineDeleteArgs $) { + this.disks = $.disks; + this.networks = $.networks; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineDeleteArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineDeleteArgs $; + + public Builder() { + $ = new ClonedVirtualMachineDeleteArgs(); + } + + public Builder(ClonedVirtualMachineDeleteArgs defaults) { + $ = new ClonedVirtualMachineDeleteArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param disks Disk slots to delete (e.g., scsi2). + * + * @return builder + * + */ + public Builder disks(@Nullable Output> disks) { + $.disks = disks; + return this; + } + + /** + * @param disks Disk slots to delete (e.g., scsi2). + * + * @return builder + * + */ + public Builder disks(List disks) { + return disks(Output.of(disks)); + } + + /** + * @param disks Disk slots to delete (e.g., scsi2). + * + * @return builder + * + */ + public Builder disks(String... disks) { + return disks(List.of(disks)); + } + + /** + * @param networks Network slots to delete (e.g., net1). + * + * @return builder + * + */ + public Builder networks(@Nullable Output> networks) { + $.networks = networks; + return this; + } + + /** + * @param networks Network slots to delete (e.g., net1). + * + * @return builder + * + */ + public Builder networks(List networks) { + return networks(Output.of(networks)); + } + + /** + * @param networks Network slots to delete (e.g., net1). + * + * @return builder + * + */ + public Builder networks(String... networks) { + return networks(List.of(networks)); + } + + public ClonedVirtualMachineDeleteArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineDiskArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineDiskArgs.java new file mode 100644 index 00000000..4a411390 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineDiskArgs.java @@ -0,0 +1,566 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineDiskArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineDiskArgs Empty = new ClonedVirtualMachineDiskArgs(); + + /** + * AIO mode (io_uring, native, threads). + * + */ + @Import(name="aio") + private @Nullable Output aio; + + /** + * @return AIO mode (io_uring, native, threads). + * + */ + public Optional> aio() { + return Optional.ofNullable(this.aio); + } + + /** + * Include disk in backups. + * + */ + @Import(name="backup") + private @Nullable Output backup; + + /** + * @return Include disk in backups. + * + */ + public Optional> backup() { + return Optional.ofNullable(this.backup); + } + + /** + * Cache mode. + * + */ + @Import(name="cache") + private @Nullable Output cache; + + /** + * @return Cache mode. + * + */ + public Optional> cache() { + return Optional.ofNullable(this.cache); + } + + /** + * Target datastore for new disks when file is not provided. + * + */ + @Import(name="datastoreId") + private @Nullable Output datastoreId; + + /** + * @return Target datastore for new disks when file is not provided. + * + */ + public Optional> datastoreId() { + return Optional.ofNullable(this.datastoreId); + } + + /** + * Discard/trim behavior. + * + */ + @Import(name="discard") + private @Nullable Output discard; + + /** + * @return Discard/trim behavior. + * + */ + public Optional> discard() { + return Optional.ofNullable(this.discard); + } + + /** + * Existing volume reference (e.g., local-lvm:vm-100-disk-0). + * + */ + @Import(name="file") + private @Nullable Output file; + + /** + * @return Existing volume reference (e.g., local-lvm:vm-100-disk-0). + * + */ + public Optional> file() { + return Optional.ofNullable(this.file); + } + + /** + * Disk format (raw, qcow2, vmdk). + * + */ + @Import(name="format") + private @Nullable Output format; + + /** + * @return Disk format (raw, qcow2, vmdk). + * + */ + public Optional> format() { + return Optional.ofNullable(this.format); + } + + /** + * Import source volume/file id. + * + */ + @Import(name="importFrom") + private @Nullable Output importFrom; + + /** + * @return Import source volume/file id. + * + */ + public Optional> importFrom() { + return Optional.ofNullable(this.importFrom); + } + + /** + * Use IO thread. + * + */ + @Import(name="iothread") + private @Nullable Output iothread; + + /** + * @return Use IO thread. + * + */ + public Optional> iothread() { + return Optional.ofNullable(this.iothread); + } + + /** + * Disk media (e.g., disk, cdrom). + * + */ + @Import(name="media") + private @Nullable Output media; + + /** + * @return Disk media (e.g., disk, cdrom). + * + */ + public Optional> media() { + return Optional.ofNullable(this.media); + } + + /** + * Consider disk for replication. + * + */ + @Import(name="replicate") + private @Nullable Output replicate; + + /** + * @return Consider disk for replication. + * + */ + public Optional> replicate() { + return Optional.ofNullable(this.replicate); + } + + /** + * Disk serial number. + * + */ + @Import(name="serial") + private @Nullable Output serial; + + /** + * @return Disk serial number. + * + */ + public Optional> serial() { + return Optional.ofNullable(this.serial); + } + + /** + * Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set <span pulumi-lang-nodejs="`sizeGb`" pulumi-lang-dotnet="`SizeGb`" pulumi-lang-go="`sizeGb`" pulumi-lang-python="`size_gb`" pulumi-lang-yaml="`sizeGb`" pulumi-lang-java="`sizeGb`">`size_gb`</span> to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + * + */ + @Import(name="sizeGb") + private @Nullable Output sizeGb; + + /** + * @return Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set <span pulumi-lang-nodejs="`sizeGb`" pulumi-lang-dotnet="`SizeGb`" pulumi-lang-go="`sizeGb`" pulumi-lang-python="`size_gb`" pulumi-lang-yaml="`sizeGb`" pulumi-lang-java="`sizeGb`">`size_gb`</span> to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + * + */ + public Optional> sizeGb() { + return Optional.ofNullable(this.sizeGb); + } + + /** + * Mark disk as SSD. + * + */ + @Import(name="ssd") + private @Nullable Output ssd; + + /** + * @return Mark disk as SSD. + * + */ + public Optional> ssd() { + return Optional.ofNullable(this.ssd); + } + + private ClonedVirtualMachineDiskArgs() {} + + private ClonedVirtualMachineDiskArgs(ClonedVirtualMachineDiskArgs $) { + this.aio = $.aio; + this.backup = $.backup; + this.cache = $.cache; + this.datastoreId = $.datastoreId; + this.discard = $.discard; + this.file = $.file; + this.format = $.format; + this.importFrom = $.importFrom; + this.iothread = $.iothread; + this.media = $.media; + this.replicate = $.replicate; + this.serial = $.serial; + this.sizeGb = $.sizeGb; + this.ssd = $.ssd; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineDiskArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineDiskArgs $; + + public Builder() { + $ = new ClonedVirtualMachineDiskArgs(); + } + + public Builder(ClonedVirtualMachineDiskArgs defaults) { + $ = new ClonedVirtualMachineDiskArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param aio AIO mode (io_uring, native, threads). + * + * @return builder + * + */ + public Builder aio(@Nullable Output aio) { + $.aio = aio; + return this; + } + + /** + * @param aio AIO mode (io_uring, native, threads). + * + * @return builder + * + */ + public Builder aio(String aio) { + return aio(Output.of(aio)); + } + + /** + * @param backup Include disk in backups. + * + * @return builder + * + */ + public Builder backup(@Nullable Output backup) { + $.backup = backup; + return this; + } + + /** + * @param backup Include disk in backups. + * + * @return builder + * + */ + public Builder backup(Boolean backup) { + return backup(Output.of(backup)); + } + + /** + * @param cache Cache mode. + * + * @return builder + * + */ + public Builder cache(@Nullable Output cache) { + $.cache = cache; + return this; + } + + /** + * @param cache Cache mode. + * + * @return builder + * + */ + public Builder cache(String cache) { + return cache(Output.of(cache)); + } + + /** + * @param datastoreId Target datastore for new disks when file is not provided. + * + * @return builder + * + */ + public Builder datastoreId(@Nullable Output datastoreId) { + $.datastoreId = datastoreId; + return this; + } + + /** + * @param datastoreId Target datastore for new disks when file is not provided. + * + * @return builder + * + */ + public Builder datastoreId(String datastoreId) { + return datastoreId(Output.of(datastoreId)); + } + + /** + * @param discard Discard/trim behavior. + * + * @return builder + * + */ + public Builder discard(@Nullable Output discard) { + $.discard = discard; + return this; + } + + /** + * @param discard Discard/trim behavior. + * + * @return builder + * + */ + public Builder discard(String discard) { + return discard(Output.of(discard)); + } + + /** + * @param file Existing volume reference (e.g., local-lvm:vm-100-disk-0). + * + * @return builder + * + */ + public Builder file(@Nullable Output file) { + $.file = file; + return this; + } + + /** + * @param file Existing volume reference (e.g., local-lvm:vm-100-disk-0). + * + * @return builder + * + */ + public Builder file(String file) { + return file(Output.of(file)); + } + + /** + * @param format Disk format (raw, qcow2, vmdk). + * + * @return builder + * + */ + public Builder format(@Nullable Output format) { + $.format = format; + return this; + } + + /** + * @param format Disk format (raw, qcow2, vmdk). + * + * @return builder + * + */ + public Builder format(String format) { + return format(Output.of(format)); + } + + /** + * @param importFrom Import source volume/file id. + * + * @return builder + * + */ + public Builder importFrom(@Nullable Output importFrom) { + $.importFrom = importFrom; + return this; + } + + /** + * @param importFrom Import source volume/file id. + * + * @return builder + * + */ + public Builder importFrom(String importFrom) { + return importFrom(Output.of(importFrom)); + } + + /** + * @param iothread Use IO thread. + * + * @return builder + * + */ + public Builder iothread(@Nullable Output iothread) { + $.iothread = iothread; + return this; + } + + /** + * @param iothread Use IO thread. + * + * @return builder + * + */ + public Builder iothread(Boolean iothread) { + return iothread(Output.of(iothread)); + } + + /** + * @param media Disk media (e.g., disk, cdrom). + * + * @return builder + * + */ + public Builder media(@Nullable Output media) { + $.media = media; + return this; + } + + /** + * @param media Disk media (e.g., disk, cdrom). + * + * @return builder + * + */ + public Builder media(String media) { + return media(Output.of(media)); + } + + /** + * @param replicate Consider disk for replication. + * + * @return builder + * + */ + public Builder replicate(@Nullable Output replicate) { + $.replicate = replicate; + return this; + } + + /** + * @param replicate Consider disk for replication. + * + * @return builder + * + */ + public Builder replicate(Boolean replicate) { + return replicate(Output.of(replicate)); + } + + /** + * @param serial Disk serial number. + * + * @return builder + * + */ + public Builder serial(@Nullable Output serial) { + $.serial = serial; + return this; + } + + /** + * @param serial Disk serial number. + * + * @return builder + * + */ + public Builder serial(String serial) { + return serial(Output.of(serial)); + } + + /** + * @param sizeGb Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set <span pulumi-lang-nodejs="`sizeGb`" pulumi-lang-dotnet="`SizeGb`" pulumi-lang-go="`sizeGb`" pulumi-lang-python="`size_gb`" pulumi-lang-yaml="`sizeGb`" pulumi-lang-java="`sizeGb`">`size_gb`</span> to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + * + * @return builder + * + */ + public Builder sizeGb(@Nullable Output sizeGb) { + $.sizeGb = sizeGb; + return this; + } + + /** + * @param sizeGb Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set <span pulumi-lang-nodejs="`sizeGb`" pulumi-lang-dotnet="`SizeGb`" pulumi-lang-go="`sizeGb`" pulumi-lang-python="`size_gb`" pulumi-lang-yaml="`sizeGb`" pulumi-lang-java="`sizeGb`">`size_gb`</span> to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + * + * @return builder + * + */ + public Builder sizeGb(Integer sizeGb) { + return sizeGb(Output.of(sizeGb)); + } + + /** + * @param ssd Mark disk as SSD. + * + * @return builder + * + */ + public Builder ssd(@Nullable Output ssd) { + $.ssd = ssd; + return this; + } + + /** + * @param ssd Mark disk as SSD. + * + * @return builder + * + */ + public Builder ssd(Boolean ssd) { + return ssd(Output.of(ssd)); + } + + public ClonedVirtualMachineDiskArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineMemoryArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineMemoryArgs.java new file mode 100644 index 00000000..8003d835 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineMemoryArgs.java @@ -0,0 +1,253 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineMemoryArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineMemoryArgs Empty = new ClonedVirtualMachineMemoryArgs(); + + /** + * Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> disables the balloon driver entirely (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + @Import(name="balloon") + private @Nullable Output balloon; + + /** + * @return Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> disables the balloon driver entirely (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + public Optional> balloon() { + return Optional.ofNullable(this.balloon); + } + + /** + * Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - <span pulumi-lang-nodejs="`2`" pulumi-lang-dotnet="`2`" pulumi-lang-go="`2`" pulumi-lang-python="`2`" pulumi-lang-yaml="`2`" pulumi-lang-java="`2`">`2`</span> - Use 2 MiB hugepages + * - <span pulumi-lang-nodejs="`1024`" pulumi-lang-dotnet="`1024`" pulumi-lang-go="`1024`" pulumi-lang-python="`1024`" pulumi-lang-yaml="`1024`" pulumi-lang-java="`1024`">`1024`</span> - Use 1 GiB hugepages + * - <span pulumi-lang-nodejs="`any`" pulumi-lang-dotnet="`Any`" pulumi-lang-go="`any`" pulumi-lang-python="`any`" pulumi-lang-yaml="`any`" pulumi-lang-java="`any`">`any`</span> - Use any available hugepage size + * + */ + @Import(name="hugepages") + private @Nullable Output hugepages; + + /** + * @return Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - <span pulumi-lang-nodejs="`2`" pulumi-lang-dotnet="`2`" pulumi-lang-go="`2`" pulumi-lang-python="`2`" pulumi-lang-yaml="`2`" pulumi-lang-java="`2`">`2`</span> - Use 2 MiB hugepages + * - <span pulumi-lang-nodejs="`1024`" pulumi-lang-dotnet="`1024`" pulumi-lang-go="`1024`" pulumi-lang-python="`1024`" pulumi-lang-yaml="`1024`" pulumi-lang-java="`1024`">`1024`</span> - Use 1 GiB hugepages + * - <span pulumi-lang-nodejs="`any`" pulumi-lang-dotnet="`Any`" pulumi-lang-go="`any`" pulumi-lang-python="`any`" pulumi-lang-yaml="`any`" pulumi-lang-java="`any`">`any`</span> - Use any available hugepage size + * + */ + public Optional> hugepages() { + return Optional.ofNullable(this.hugepages); + } + + /** + * Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> keeps them allocated for faster VM startup (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + @Import(name="keepHugepages") + private @Nullable Output keepHugepages; + + /** + * @return Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> keeps them allocated for faster VM startup (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + public Optional> keepHugepages() { + return Optional.ofNullable(this.keepHugepages); + } + + /** + * CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to <span pulumi-lang-nodejs="`1000`" pulumi-lang-dotnet="`1000`" pulumi-lang-go="`1000`" pulumi-lang-python="`1000`" pulumi-lang-yaml="`1000`" pulumi-lang-java="`1000`">`1000`</span>). + * + */ + @Import(name="shares") + private @Nullable Output shares; + + /** + * @return CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to <span pulumi-lang-nodejs="`1000`" pulumi-lang-dotnet="`1000`" pulumi-lang-go="`1000`" pulumi-lang-python="`1000`" pulumi-lang-yaml="`1000`" pulumi-lang-java="`1000`">`1000`</span>). + * + */ + public Optional> shares() { + return Optional.ofNullable(this.shares); + } + + /** + * Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> and <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to <span pulumi-lang-nodejs="`512`" pulumi-lang-dotnet="`512`" pulumi-lang-go="`512`" pulumi-lang-python="`512`" pulumi-lang-yaml="`512`" pulumi-lang-java="`512`">`512`</span> MiB). + * + */ + @Import(name="size") + private @Nullable Output size; + + /** + * @return Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> and <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to <span pulumi-lang-nodejs="`512`" pulumi-lang-dotnet="`512`" pulumi-lang-go="`512`" pulumi-lang-python="`512`" pulumi-lang-yaml="`512`" pulumi-lang-java="`512`">`512`</span> MiB). + * + */ + public Optional> size() { + return Optional.ofNullable(this.size); + } + + private ClonedVirtualMachineMemoryArgs() {} + + private ClonedVirtualMachineMemoryArgs(ClonedVirtualMachineMemoryArgs $) { + this.balloon = $.balloon; + this.hugepages = $.hugepages; + this.keepHugepages = $.keepHugepages; + this.shares = $.shares; + this.size = $.size; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineMemoryArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineMemoryArgs $; + + public Builder() { + $ = new ClonedVirtualMachineMemoryArgs(); + } + + public Builder(ClonedVirtualMachineMemoryArgs defaults) { + $ = new ClonedVirtualMachineMemoryArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param balloon Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> disables the balloon driver entirely (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + * @return builder + * + */ + public Builder balloon(@Nullable Output balloon) { + $.balloon = balloon; + return this; + } + + /** + * @param balloon Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> disables the balloon driver entirely (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + * @return builder + * + */ + public Builder balloon(Integer balloon) { + return balloon(Output.of(balloon)); + } + + /** + * @param hugepages Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - <span pulumi-lang-nodejs="`2`" pulumi-lang-dotnet="`2`" pulumi-lang-go="`2`" pulumi-lang-python="`2`" pulumi-lang-yaml="`2`" pulumi-lang-java="`2`">`2`</span> - Use 2 MiB hugepages + * - <span pulumi-lang-nodejs="`1024`" pulumi-lang-dotnet="`1024`" pulumi-lang-go="`1024`" pulumi-lang-python="`1024`" pulumi-lang-yaml="`1024`" pulumi-lang-java="`1024`">`1024`</span> - Use 1 GiB hugepages + * - <span pulumi-lang-nodejs="`any`" pulumi-lang-dotnet="`Any`" pulumi-lang-go="`any`" pulumi-lang-python="`any`" pulumi-lang-yaml="`any`" pulumi-lang-java="`any`">`any`</span> - Use any available hugepage size + * + * @return builder + * + */ + public Builder hugepages(@Nullable Output hugepages) { + $.hugepages = hugepages; + return this; + } + + /** + * @param hugepages Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - <span pulumi-lang-nodejs="`2`" pulumi-lang-dotnet="`2`" pulumi-lang-go="`2`" pulumi-lang-python="`2`" pulumi-lang-yaml="`2`" pulumi-lang-java="`2`">`2`</span> - Use 2 MiB hugepages + * - <span pulumi-lang-nodejs="`1024`" pulumi-lang-dotnet="`1024`" pulumi-lang-go="`1024`" pulumi-lang-python="`1024`" pulumi-lang-yaml="`1024`" pulumi-lang-java="`1024`">`1024`</span> - Use 1 GiB hugepages + * - <span pulumi-lang-nodejs="`any`" pulumi-lang-dotnet="`Any`" pulumi-lang-go="`any`" pulumi-lang-python="`any`" pulumi-lang-yaml="`any`" pulumi-lang-java="`any`">`any`</span> - Use any available hugepage size + * + * @return builder + * + */ + public Builder hugepages(String hugepages) { + return hugepages(Output.of(hugepages)); + } + + /** + * @param keepHugepages Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> keeps them allocated for faster VM startup (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder keepHugepages(@Nullable Output keepHugepages) { + $.keepHugepages = keepHugepages; + return this; + } + + /** + * @param keepHugepages Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> keeps them allocated for faster VM startup (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + * @return builder + * + */ + public Builder keepHugepages(Boolean keepHugepages) { + return keepHugepages(Output.of(keepHugepages)); + } + + /** + * @param shares CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to <span pulumi-lang-nodejs="`1000`" pulumi-lang-dotnet="`1000`" pulumi-lang-go="`1000`" pulumi-lang-python="`1000`" pulumi-lang-yaml="`1000`" pulumi-lang-java="`1000`">`1000`</span>). + * + * @return builder + * + */ + public Builder shares(@Nullable Output shares) { + $.shares = shares; + return this; + } + + /** + * @param shares CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to <span pulumi-lang-nodejs="`1000`" pulumi-lang-dotnet="`1000`" pulumi-lang-go="`1000`" pulumi-lang-python="`1000`" pulumi-lang-yaml="`1000`" pulumi-lang-java="`1000`">`1000`</span>). + * + * @return builder + * + */ + public Builder shares(Integer shares) { + return shares(Output.of(shares)); + } + + /** + * @param size Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> and <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to <span pulumi-lang-nodejs="`512`" pulumi-lang-dotnet="`512`" pulumi-lang-go="`512`" pulumi-lang-python="`512`" pulumi-lang-yaml="`512`" pulumi-lang-java="`512`">`512`</span> MiB). + * + * @return builder + * + */ + public Builder size(@Nullable Output size) { + $.size = size; + return this; + } + + /** + * @param size Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> and <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to <span pulumi-lang-nodejs="`512`" pulumi-lang-dotnet="`512`" pulumi-lang-go="`512`" pulumi-lang-python="`512`" pulumi-lang-yaml="`512`" pulumi-lang-java="`512`">`512`</span> MiB). + * + * @return builder + * + */ + public Builder size(Integer size) { + return size(Output.of(size)); + } + + public ClonedVirtualMachineMemoryArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineNetworkArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineNetworkArgs.java new file mode 100644 index 00000000..ca9d60aa --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineNetworkArgs.java @@ -0,0 +1,430 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.Double; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineNetworkArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineNetworkArgs Empty = new ClonedVirtualMachineNetworkArgs(); + + /** + * Bridge name. + * + */ + @Import(name="bridge") + private @Nullable Output bridge; + + /** + * @return Bridge name. + * + */ + public Optional> bridge() { + return Optional.ofNullable(this.bridge); + } + + /** + * Enable firewall on this interface. + * + */ + @Import(name="firewall") + private @Nullable Output firewall; + + /** + * @return Enable firewall on this interface. + * + */ + public Optional> firewall() { + return Optional.ofNullable(this.firewall); + } + + /** + * Keep link down. + * + */ + @Import(name="linkDown") + private @Nullable Output linkDown; + + /** + * @return Keep link down. + * + */ + public Optional> linkDown() { + return Optional.ofNullable(this.linkDown); + } + + /** + * MAC address (computed if omitted). + * + */ + @Import(name="macAddress") + private @Nullable Output macAddress; + + /** + * @return MAC address (computed if omitted). + * + */ + public Optional> macAddress() { + return Optional.ofNullable(this.macAddress); + } + + /** + * NIC model (e.g., virtio, e1000). + * + */ + @Import(name="model") + private @Nullable Output model; + + /** + * @return NIC model (e.g., virtio, e1000). + * + */ + public Optional> model() { + return Optional.ofNullable(this.model); + } + + /** + * Interface MTU. + * + */ + @Import(name="mtu") + private @Nullable Output mtu; + + /** + * @return Interface MTU. + * + */ + public Optional> mtu() { + return Optional.ofNullable(this.mtu); + } + + /** + * Number of multiqueue NIC queues. + * + */ + @Import(name="queues") + private @Nullable Output queues; + + /** + * @return Number of multiqueue NIC queues. + * + */ + public Optional> queues() { + return Optional.ofNullable(this.queues); + } + + /** + * Rate limit (MB/s). + * + */ + @Import(name="rateLimit") + private @Nullable Output rateLimit; + + /** + * @return Rate limit (MB/s). + * + */ + public Optional> rateLimit() { + return Optional.ofNullable(this.rateLimit); + } + + /** + * VLAN tag. + * + */ + @Import(name="tag") + private @Nullable Output tag; + + /** + * @return VLAN tag. + * + */ + public Optional> tag() { + return Optional.ofNullable(this.tag); + } + + /** + * Trunk VLAN IDs. + * + */ + @Import(name="trunks") + private @Nullable Output> trunks; + + /** + * @return Trunk VLAN IDs. + * + */ + public Optional>> trunks() { + return Optional.ofNullable(this.trunks); + } + + private ClonedVirtualMachineNetworkArgs() {} + + private ClonedVirtualMachineNetworkArgs(ClonedVirtualMachineNetworkArgs $) { + this.bridge = $.bridge; + this.firewall = $.firewall; + this.linkDown = $.linkDown; + this.macAddress = $.macAddress; + this.model = $.model; + this.mtu = $.mtu; + this.queues = $.queues; + this.rateLimit = $.rateLimit; + this.tag = $.tag; + this.trunks = $.trunks; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineNetworkArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineNetworkArgs $; + + public Builder() { + $ = new ClonedVirtualMachineNetworkArgs(); + } + + public Builder(ClonedVirtualMachineNetworkArgs defaults) { + $ = new ClonedVirtualMachineNetworkArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param bridge Bridge name. + * + * @return builder + * + */ + public Builder bridge(@Nullable Output bridge) { + $.bridge = bridge; + return this; + } + + /** + * @param bridge Bridge name. + * + * @return builder + * + */ + public Builder bridge(String bridge) { + return bridge(Output.of(bridge)); + } + + /** + * @param firewall Enable firewall on this interface. + * + * @return builder + * + */ + public Builder firewall(@Nullable Output firewall) { + $.firewall = firewall; + return this; + } + + /** + * @param firewall Enable firewall on this interface. + * + * @return builder + * + */ + public Builder firewall(Boolean firewall) { + return firewall(Output.of(firewall)); + } + + /** + * @param linkDown Keep link down. + * + * @return builder + * + */ + public Builder linkDown(@Nullable Output linkDown) { + $.linkDown = linkDown; + return this; + } + + /** + * @param linkDown Keep link down. + * + * @return builder + * + */ + public Builder linkDown(Boolean linkDown) { + return linkDown(Output.of(linkDown)); + } + + /** + * @param macAddress MAC address (computed if omitted). + * + * @return builder + * + */ + public Builder macAddress(@Nullable Output macAddress) { + $.macAddress = macAddress; + return this; + } + + /** + * @param macAddress MAC address (computed if omitted). + * + * @return builder + * + */ + public Builder macAddress(String macAddress) { + return macAddress(Output.of(macAddress)); + } + + /** + * @param model NIC model (e.g., virtio, e1000). + * + * @return builder + * + */ + public Builder model(@Nullable Output model) { + $.model = model; + return this; + } + + /** + * @param model NIC model (e.g., virtio, e1000). + * + * @return builder + * + */ + public Builder model(String model) { + return model(Output.of(model)); + } + + /** + * @param mtu Interface MTU. + * + * @return builder + * + */ + public Builder mtu(@Nullable Output mtu) { + $.mtu = mtu; + return this; + } + + /** + * @param mtu Interface MTU. + * + * @return builder + * + */ + public Builder mtu(Integer mtu) { + return mtu(Output.of(mtu)); + } + + /** + * @param queues Number of multiqueue NIC queues. + * + * @return builder + * + */ + public Builder queues(@Nullable Output queues) { + $.queues = queues; + return this; + } + + /** + * @param queues Number of multiqueue NIC queues. + * + * @return builder + * + */ + public Builder queues(Integer queues) { + return queues(Output.of(queues)); + } + + /** + * @param rateLimit Rate limit (MB/s). + * + * @return builder + * + */ + public Builder rateLimit(@Nullable Output rateLimit) { + $.rateLimit = rateLimit; + return this; + } + + /** + * @param rateLimit Rate limit (MB/s). + * + * @return builder + * + */ + public Builder rateLimit(Double rateLimit) { + return rateLimit(Output.of(rateLimit)); + } + + /** + * @param tag VLAN tag. + * + * @return builder + * + */ + public Builder tag(@Nullable Output tag) { + $.tag = tag; + return this; + } + + /** + * @param tag VLAN tag. + * + * @return builder + * + */ + public Builder tag(Integer tag) { + return tag(Output.of(tag)); + } + + /** + * @param trunks Trunk VLAN IDs. + * + * @return builder + * + */ + public Builder trunks(@Nullable Output> trunks) { + $.trunks = trunks; + return this; + } + + /** + * @param trunks Trunk VLAN IDs. + * + * @return builder + * + */ + public Builder trunks(List trunks) { + return trunks(Output.of(trunks)); + } + + /** + * @param trunks Trunk VLAN IDs. + * + * @return builder + * + */ + public Builder trunks(Integer... trunks) { + return trunks(List.of(trunks)); + } + + public ClonedVirtualMachineNetworkArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineRngArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineRngArgs.java new file mode 100644 index 00000000..bcf177f4 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineRngArgs.java @@ -0,0 +1,158 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineRngArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineRngArgs Empty = new ClonedVirtualMachineRngArgs(); + + /** + * Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + * + */ + @Import(name="maxBytes") + private @Nullable Output maxBytes; + + /** + * @return Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + * + */ + public Optional> maxBytes() { + return Optional.ofNullable(this.maxBytes); + } + + /** + * Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + * + */ + @Import(name="period") + private @Nullable Output period; + + /** + * @return Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + * + */ + public Optional> period() { + return Optional.ofNullable(this.period); + } + + /** + * The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + * + */ + @Import(name="source") + private @Nullable Output source; + + /** + * @return The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + * + */ + public Optional> source() { + return Optional.ofNullable(this.source); + } + + private ClonedVirtualMachineRngArgs() {} + + private ClonedVirtualMachineRngArgs(ClonedVirtualMachineRngArgs $) { + this.maxBytes = $.maxBytes; + this.period = $.period; + this.source = $.source; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineRngArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineRngArgs $; + + public Builder() { + $ = new ClonedVirtualMachineRngArgs(); + } + + public Builder(ClonedVirtualMachineRngArgs defaults) { + $ = new ClonedVirtualMachineRngArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param maxBytes Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + * + * @return builder + * + */ + public Builder maxBytes(@Nullable Output maxBytes) { + $.maxBytes = maxBytes; + return this; + } + + /** + * @param maxBytes Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + * + * @return builder + * + */ + public Builder maxBytes(Integer maxBytes) { + return maxBytes(Output.of(maxBytes)); + } + + /** + * @param period Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + * + * @return builder + * + */ + public Builder period(@Nullable Output period) { + $.period = period; + return this; + } + + /** + * @param period Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + * + * @return builder + * + */ + public Builder period(Integer period) { + return period(Output.of(period)); + } + + /** + * @param source The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + * + * @return builder + * + */ + public Builder source(@Nullable Output source) { + $.source = source; + return this; + } + + /** + * @param source The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + * + * @return builder + * + */ + public Builder source(String source) { + return source(Output.of(source)); + } + + public ClonedVirtualMachineRngArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineState.java new file mode 100644 index 00000000..4ba61bfb --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineState.java @@ -0,0 +1,695 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCdromArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCloneArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineCpuArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineDeleteArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineDiskArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineMemoryArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineNetworkArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineRngArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineTimeoutsArgs; +import io.muehlbachler.pulumi.proxmoxve.VM.inputs.ClonedVirtualMachineVgaArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineState extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineState Empty = new ClonedVirtualMachineState(); + + /** + * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + */ + @Import(name="cdrom") + private @Nullable Output> cdrom; + + /** + * @return The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + */ + public Optional>> cdrom() { + return Optional.ofNullable(this.cdrom); + } + + /** + * Clone settings. Changes require recreation. + * + */ + @Import(name="clone") + private @Nullable Output clone; + + /** + * @return Clone settings. Changes require recreation. + * + */ + public Optional> clone_() { + return Optional.ofNullable(this.clone); + } + + /** + * The CPU configuration. + * + */ + @Import(name="cpu") + private @Nullable Output cpu; + + /** + * @return The CPU configuration. + * + */ + public Optional> cpu() { + return Optional.ofNullable(this.cpu); + } + + /** + * Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + */ + @Import(name="delete") + private @Nullable Output delete; + + /** + * @return Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + */ + public Optional> delete() { + return Optional.ofNullable(this.delete); + } + + @Import(name="deleteUnreferencedDisksOnDestroy") + private @Nullable Output deleteUnreferencedDisksOnDestroy; + + public Optional> deleteUnreferencedDisksOnDestroy() { + return Optional.ofNullable(this.deleteUnreferencedDisksOnDestroy); + } + + /** + * Optional VM description applied after cloning. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return Optional VM description applied after cloning. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + */ + @Import(name="disk") + private @Nullable Output> disk; + + /** + * @return Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + */ + public Optional>> disk() { + return Optional.ofNullable(this.disk); + } + + /** + * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + */ + @Import(name="memory") + private @Nullable Output memory; + + /** + * @return Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + */ + public Optional> memory() { + return Optional.ofNullable(this.memory); + } + + /** + * Optional VM name override applied after cloning. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Optional VM name override applied after cloning. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + */ + @Import(name="network") + private @Nullable Output> network; + + /** + * @return Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + */ + public Optional>> network() { + return Optional.ofNullable(this.network); + } + + /** + * Target node for the cloned VM. + * + */ + @Import(name="nodeName") + private @Nullable Output nodeName; + + /** + * @return Target node for the cloned VM. + * + */ + public Optional> nodeName() { + return Optional.ofNullable(this.nodeName); + } + + /** + * Purge backup configuration on destroy. + * + */ + @Import(name="purgeOnDestroy") + private @Nullable Output purgeOnDestroy; + + /** + * @return Purge backup configuration on destroy. + * + */ + public Optional> purgeOnDestroy() { + return Optional.ofNullable(this.purgeOnDestroy); + } + + /** + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + */ + @Import(name="rng") + private @Nullable Output rng; + + /** + * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + */ + public Optional> rng() { + return Optional.ofNullable(this.rng); + } + + /** + * Stop the VM on destroy (instead of shutdown). + * + */ + @Import(name="stopOnDestroy") + private @Nullable Output stopOnDestroy; + + /** + * @return Stop the VM on destroy (instead of shutdown). + * + */ + public Optional> stopOnDestroy() { + return Optional.ofNullable(this.stopOnDestroy); + } + + /** + * Tags applied after cloning. + * + */ + @Import(name="tags") + private @Nullable Output> tags; + + /** + * @return Tags applied after cloning. + * + */ + public Optional>> tags() { + return Optional.ofNullable(this.tags); + } + + @Import(name="timeouts") + private @Nullable Output timeouts; + + public Optional> timeouts() { + return Optional.ofNullable(this.timeouts); + } + + /** + * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + */ + @Import(name="vga") + private @Nullable Output vga; + + /** + * @return Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + */ + public Optional> vga() { + return Optional.ofNullable(this.vga); + } + + /** + * The VM identifier in the Proxmox cluster. + * + */ + @Import(name="vmId") + private @Nullable Output vmId; + + /** + * @return The VM identifier in the Proxmox cluster. + * + */ + public Optional> vmId() { + return Optional.ofNullable(this.vmId); + } + + private ClonedVirtualMachineState() {} + + private ClonedVirtualMachineState(ClonedVirtualMachineState $) { + this.cdrom = $.cdrom; + this.clone = $.clone; + this.cpu = $.cpu; + this.delete = $.delete; + this.deleteUnreferencedDisksOnDestroy = $.deleteUnreferencedDisksOnDestroy; + this.description = $.description; + this.disk = $.disk; + this.memory = $.memory; + this.name = $.name; + this.network = $.network; + this.nodeName = $.nodeName; + this.purgeOnDestroy = $.purgeOnDestroy; + this.rng = $.rng; + this.stopOnDestroy = $.stopOnDestroy; + this.tags = $.tags; + this.timeouts = $.timeouts; + this.vga = $.vga; + this.vmId = $.vmId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineState $; + + public Builder() { + $ = new ClonedVirtualMachineState(); + } + + public Builder(ClonedVirtualMachineState defaults) { + $ = new ClonedVirtualMachineState(Objects.requireNonNull(defaults)); + } + + /** + * @param cdrom The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + * @return builder + * + */ + public Builder cdrom(@Nullable Output> cdrom) { + $.cdrom = cdrom; + return this; + } + + /** + * @param cdrom The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that <span pulumi-lang-nodejs="`q35`" pulumi-lang-dotnet="`Q35`" pulumi-lang-go="`q35`" pulumi-lang-python="`q35`" pulumi-lang-yaml="`q35`" pulumi-lang-java="`q35`">`q35`</span> machine type only supports <span pulumi-lang-nodejs="`ide0`" pulumi-lang-dotnet="`Ide0`" pulumi-lang-go="`ide0`" pulumi-lang-python="`ide0`" pulumi-lang-yaml="`ide0`" pulumi-lang-java="`ide0`">`ide0`</span> and <span pulumi-lang-nodejs="`ide2`" pulumi-lang-dotnet="`Ide2`" pulumi-lang-go="`ide2`" pulumi-lang-python="`ide2`" pulumi-lang-yaml="`ide2`" pulumi-lang-java="`ide2`">`ide2`</span> of IDE interfaces. + * + * @return builder + * + */ + public Builder cdrom(Map cdrom) { + return cdrom(Output.of(cdrom)); + } + + /** + * @param clone Clone settings. Changes require recreation. + * + * @return builder + * + */ + public Builder clone_(@Nullable Output clone) { + $.clone = clone; + return this; + } + + /** + * @param clone Clone settings. Changes require recreation. + * + * @return builder + * + */ + public Builder clone_(ClonedVirtualMachineCloneArgs clone) { + return clone_(Output.of(clone)); + } + + /** + * @param cpu The CPU configuration. + * + * @return builder + * + */ + public Builder cpu(@Nullable Output cpu) { + $.cpu = cpu; + return this; + } + + /** + * @param cpu The CPU configuration. + * + * @return builder + * + */ + public Builder cpu(ClonedVirtualMachineCpuArgs cpu) { + return cpu(Output.of(cpu)); + } + + /** + * @param delete Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + * @return builder + * + */ + public Builder delete(@Nullable Output delete) { + $.delete = delete; + return this; + } + + /** + * @param delete Explicit deletions to perform after cloning/updating. Entries persist across applies. + * + * @return builder + * + */ + public Builder delete(ClonedVirtualMachineDeleteArgs delete) { + return delete(Output.of(delete)); + } + + public Builder deleteUnreferencedDisksOnDestroy(@Nullable Output deleteUnreferencedDisksOnDestroy) { + $.deleteUnreferencedDisksOnDestroy = deleteUnreferencedDisksOnDestroy; + return this; + } + + public Builder deleteUnreferencedDisksOnDestroy(Boolean deleteUnreferencedDisksOnDestroy) { + return deleteUnreferencedDisksOnDestroy(Output.of(deleteUnreferencedDisksOnDestroy)); + } + + /** + * @param description Optional VM description applied after cloning. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description Optional VM description applied after cloning. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param disk Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder disk(@Nullable Output> disk) { + $.disk = disk; + return this; + } + + /** + * @param disk Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder disk(Map disk) { + return disk(Output.of(disk)); + } + + /** + * @param memory Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + * @return builder + * + */ + public Builder memory(@Nullable Output memory) { + $.memory = memory; + return this; + } + + /** + * @param memory Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> sets the total available RAM, while <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> sets the guaranteed floor. The host can reclaim memory between these values when needed. + * + * @return builder + * + */ + public Builder memory(ClonedVirtualMachineMemoryArgs memory) { + return memory(Output.of(memory)); + } + + /** + * @param name Optional VM name override applied after cloning. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Optional VM name override applied after cloning. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param network Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder network(@Nullable Output> network) { + $.network = network; + return this; + } + + /** + * @param network Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + * + * @return builder + * + */ + public Builder network(Map network) { + return network(Output.of(network)); + } + + /** + * @param nodeName Target node for the cloned VM. + * + * @return builder + * + */ + public Builder nodeName(@Nullable Output nodeName) { + $.nodeName = nodeName; + return this; + } + + /** + * @param nodeName Target node for the cloned VM. + * + * @return builder + * + */ + public Builder nodeName(String nodeName) { + return nodeName(Output.of(nodeName)); + } + + /** + * @param purgeOnDestroy Purge backup configuration on destroy. + * + * @return builder + * + */ + public Builder purgeOnDestroy(@Nullable Output purgeOnDestroy) { + $.purgeOnDestroy = purgeOnDestroy; + return this; + } + + /** + * @param purgeOnDestroy Purge backup configuration on destroy. + * + * @return builder + * + */ + public Builder purgeOnDestroy(Boolean purgeOnDestroy) { + return purgeOnDestroy(Output.of(purgeOnDestroy)); + } + + /** + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + * @return builder + * + */ + public Builder rng(@Nullable Output rng) { + $.rng = rng; + return this; + } + + /** + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * + * @return builder + * + */ + public Builder rng(ClonedVirtualMachineRngArgs rng) { + return rng(Output.of(rng)); + } + + /** + * @param stopOnDestroy Stop the VM on destroy (instead of shutdown). + * + * @return builder + * + */ + public Builder stopOnDestroy(@Nullable Output stopOnDestroy) { + $.stopOnDestroy = stopOnDestroy; + return this; + } + + /** + * @param stopOnDestroy Stop the VM on destroy (instead of shutdown). + * + * @return builder + * + */ + public Builder stopOnDestroy(Boolean stopOnDestroy) { + return stopOnDestroy(Output.of(stopOnDestroy)); + } + + /** + * @param tags Tags applied after cloning. + * + * @return builder + * + */ + public Builder tags(@Nullable Output> tags) { + $.tags = tags; + return this; + } + + /** + * @param tags Tags applied after cloning. + * + * @return builder + * + */ + public Builder tags(List tags) { + return tags(Output.of(tags)); + } + + /** + * @param tags Tags applied after cloning. + * + * @return builder + * + */ + public Builder tags(String... tags) { + return tags(List.of(tags)); + } + + public Builder timeouts(@Nullable Output timeouts) { + $.timeouts = timeouts; + return this; + } + + public Builder timeouts(ClonedVirtualMachineTimeoutsArgs timeouts) { + return timeouts(Output.of(timeouts)); + } + + /** + * @param vga Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + * @return builder + * + */ + public Builder vga(@Nullable Output vga) { + $.vga = vga; + return this; + } + + /** + * @param vga Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span> for all OS types besides some Windows versions (XP and older) which use <span pulumi-lang-nodejs="`cirrus`" pulumi-lang-dotnet="`Cirrus`" pulumi-lang-go="`cirrus`" pulumi-lang-python="`cirrus`" pulumi-lang-yaml="`cirrus`" pulumi-lang-java="`cirrus`">`cirrus`</span>. The <span pulumi-lang-nodejs="`qxl`" pulumi-lang-dotnet="`Qxl`" pulumi-lang-go="`qxl`" pulumi-lang-python="`qxl`" pulumi-lang-yaml="`qxl`" pulumi-lang-java="`qxl`">`qxl`</span> option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + * + * @return builder + * + */ + public Builder vga(ClonedVirtualMachineVgaArgs vga) { + return vga(Output.of(vga)); + } + + /** + * @param vmId The VM identifier in the Proxmox cluster. + * + * @return builder + * + */ + public Builder vmId(@Nullable Output vmId) { + $.vmId = vmId; + return this; + } + + /** + * @param vmId The VM identifier in the Proxmox cluster. + * + * @return builder + * + */ + public Builder vmId(String vmId) { + return vmId(Output.of(vmId)); + } + + public ClonedVirtualMachineState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineTimeoutsArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineTimeoutsArgs.java new file mode 100644 index 00000000..51c1fd78 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineTimeoutsArgs.java @@ -0,0 +1,194 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineTimeoutsArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineTimeoutsArgs Empty = new ClonedVirtualMachineTimeoutsArgs(); + + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + @Import(name="create") + private @Nullable Output create; + + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + public Optional> create() { + return Optional.ofNullable(this.create); + } + + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + * + */ + @Import(name="delete") + private @Nullable Output delete; + + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + * + */ + public Optional> delete() { + return Optional.ofNullable(this.delete); + } + + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + * + */ + @Import(name="read") + private @Nullable Output read; + + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + * + */ + public Optional> read() { + return Optional.ofNullable(this.read); + } + + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + @Import(name="update") + private @Nullable Output update; + + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + public Optional> update() { + return Optional.ofNullable(this.update); + } + + private ClonedVirtualMachineTimeoutsArgs() {} + + private ClonedVirtualMachineTimeoutsArgs(ClonedVirtualMachineTimeoutsArgs $) { + this.create = $.create; + this.delete = $.delete; + this.read = $.read; + this.update = $.update; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineTimeoutsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineTimeoutsArgs $; + + public Builder() { + $ = new ClonedVirtualMachineTimeoutsArgs(); + } + + public Builder(ClonedVirtualMachineTimeoutsArgs defaults) { + $ = new ClonedVirtualMachineTimeoutsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param create A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + * @return builder + * + */ + public Builder create(@Nullable Output create) { + $.create = create; + return this; + } + + /** + * @param create A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + * @return builder + * + */ + public Builder create(String create) { + return create(Output.of(create)); + } + + /** + * @param delete A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + * + * @return builder + * + */ + public Builder delete(@Nullable Output delete) { + $.delete = delete; + return this; + } + + /** + * @param delete A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + * + * @return builder + * + */ + public Builder delete(String delete) { + return delete(Output.of(delete)); + } + + /** + * @param read A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + * + * @return builder + * + */ + public Builder read(@Nullable Output read) { + $.read = read; + return this; + } + + /** + * @param read A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + * + * @return builder + * + */ + public Builder read(String read) { + return read(Output.of(read)); + } + + /** + * @param update A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + * @return builder + * + */ + public Builder update(@Nullable Output update) { + $.update = update; + return this; + } + + /** + * @param update A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + * @return builder + * + */ + public Builder update(String update) { + return update(Output.of(update)); + } + + public ClonedVirtualMachineTimeoutsArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineVgaArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineVgaArgs.java new file mode 100644 index 00000000..9392b37f --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/ClonedVirtualMachineVgaArgs.java @@ -0,0 +1,158 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClonedVirtualMachineVgaArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClonedVirtualMachineVgaArgs Empty = new ClonedVirtualMachineVgaArgs(); + + /** + * Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only <span pulumi-lang-nodejs="`vnc`" pulumi-lang-dotnet="`Vnc`" pulumi-lang-go="`vnc`" pulumi-lang-python="`vnc`" pulumi-lang-yaml="`vnc`" pulumi-lang-java="`vnc`">`vnc`</span> is available. Migration with VNC clipboard is not supported by Proxmox. + * + */ + @Import(name="clipboard") + private @Nullable Output clipboard; + + /** + * @return Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only <span pulumi-lang-nodejs="`vnc`" pulumi-lang-dotnet="`Vnc`" pulumi-lang-go="`vnc`" pulumi-lang-python="`vnc`" pulumi-lang-yaml="`vnc`" pulumi-lang-java="`vnc`">`vnc`</span> is available. Migration with VNC clipboard is not supported by Proxmox. + * + */ + public Optional> clipboard() { + return Optional.ofNullable(this.clipboard); + } + + /** + * The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + * + */ + @Import(name="memory") + private @Nullable Output memory; + + /** + * @return The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + * + */ + public Optional> memory() { + return Optional.ofNullable(this.memory); + } + + /** + * The VGA type (defaults to <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span>). + * + */ + @Import(name="type") + private @Nullable Output type; + + /** + * @return The VGA type (defaults to <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span>). + * + */ + public Optional> type() { + return Optional.ofNullable(this.type); + } + + private ClonedVirtualMachineVgaArgs() {} + + private ClonedVirtualMachineVgaArgs(ClonedVirtualMachineVgaArgs $) { + this.clipboard = $.clipboard; + this.memory = $.memory; + this.type = $.type; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClonedVirtualMachineVgaArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClonedVirtualMachineVgaArgs $; + + public Builder() { + $ = new ClonedVirtualMachineVgaArgs(); + } + + public Builder(ClonedVirtualMachineVgaArgs defaults) { + $ = new ClonedVirtualMachineVgaArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param clipboard Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only <span pulumi-lang-nodejs="`vnc`" pulumi-lang-dotnet="`Vnc`" pulumi-lang-go="`vnc`" pulumi-lang-python="`vnc`" pulumi-lang-yaml="`vnc`" pulumi-lang-java="`vnc`">`vnc`</span> is available. Migration with VNC clipboard is not supported by Proxmox. + * + * @return builder + * + */ + public Builder clipboard(@Nullable Output clipboard) { + $.clipboard = clipboard; + return this; + } + + /** + * @param clipboard Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only <span pulumi-lang-nodejs="`vnc`" pulumi-lang-dotnet="`Vnc`" pulumi-lang-go="`vnc`" pulumi-lang-python="`vnc`" pulumi-lang-yaml="`vnc`" pulumi-lang-java="`vnc`">`vnc`</span> is available. Migration with VNC clipboard is not supported by Proxmox. + * + * @return builder + * + */ + public Builder clipboard(String clipboard) { + return clipboard(Output.of(clipboard)); + } + + /** + * @param memory The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + * + * @return builder + * + */ + public Builder memory(@Nullable Output memory) { + $.memory = memory; + return this; + } + + /** + * @param memory The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + * + * @return builder + * + */ + public Builder memory(Integer memory) { + return memory(Output.of(memory)); + } + + /** + * @param type The VGA type (defaults to <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span>). + * + * @return builder + * + */ + public Builder type(@Nullable Output type) { + $.type = type; + return this; + } + + /** + * @param type The VGA type (defaults to <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span>). + * + * @return builder + * + */ + public Builder type(String type) { + return type(Output.of(type)); + } + + public ClonedVirtualMachineVgaArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2CloneArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2CloneArgs.java deleted file mode 100644 index edc040e3..00000000 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2CloneArgs.java +++ /dev/null @@ -1,124 +0,0 @@ -// *** WARNING: this file was generated by pulumi-java-gen. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -package io.muehlbachler.pulumi.proxmoxve.VM.inputs; - -import com.pulumi.core.Output; -import com.pulumi.core.annotations.Import; -import com.pulumi.exceptions.MissingRequiredPropertyException; -import java.lang.Integer; -import java.util.Objects; -import java.util.Optional; -import javax.annotation.Nullable; - - -public final class VirtualMachine2CloneArgs extends com.pulumi.resources.ResourceArgs { - - public static final VirtualMachine2CloneArgs Empty = new VirtualMachine2CloneArgs(); - - /** - * The ID of the VM to clone. - * - */ - @Import(name="id", required=true) - private Output id; - - /** - * @return The ID of the VM to clone. - * - */ - public Output id() { - return this.id; - } - - /** - * The number of retries to perform when cloning the VM (default: 3). - * - */ - @Import(name="retries") - private @Nullable Output retries; - - /** - * @return The number of retries to perform when cloning the VM (default: 3). - * - */ - public Optional> retries() { - return Optional.ofNullable(this.retries); - } - - private VirtualMachine2CloneArgs() {} - - private VirtualMachine2CloneArgs(VirtualMachine2CloneArgs $) { - this.id = $.id; - this.retries = $.retries; - } - - public static Builder builder() { - return new Builder(); - } - public static Builder builder(VirtualMachine2CloneArgs defaults) { - return new Builder(defaults); - } - - public static final class Builder { - private VirtualMachine2CloneArgs $; - - public Builder() { - $ = new VirtualMachine2CloneArgs(); - } - - public Builder(VirtualMachine2CloneArgs defaults) { - $ = new VirtualMachine2CloneArgs(Objects.requireNonNull(defaults)); - } - - /** - * @param id The ID of the VM to clone. - * - * @return builder - * - */ - public Builder id(Output id) { - $.id = id; - return this; - } - - /** - * @param id The ID of the VM to clone. - * - * @return builder - * - */ - public Builder id(Integer id) { - return id(Output.of(id)); - } - - /** - * @param retries The number of retries to perform when cloning the VM (default: 3). - * - * @return builder - * - */ - public Builder retries(@Nullable Output retries) { - $.retries = retries; - return this; - } - - /** - * @param retries The number of retries to perform when cloning the VM (default: 3). - * - * @return builder - * - */ - public Builder retries(Integer retries) { - return retries(Output.of(retries)); - } - - public VirtualMachine2CloneArgs build() { - if ($.id == null) { - throw new MissingRequiredPropertyException("VirtualMachine2CloneArgs", "id"); - } - return $; - } - } - -} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2CpuArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2CpuArgs.java index 17bbc8ee..b0459d9e 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2CpuArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2CpuArgs.java @@ -34,14 +34,14 @@ public Optional> affinity() { } /** - * The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. * */ @Import(name="architecture") private @Nullable Output architecture; /** - * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. * */ public Optional> architecture() { @@ -223,7 +223,7 @@ public Builder affinity(String affinity) { } /** - * @param architecture The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * @param architecture The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. * * @return builder * @@ -234,7 +234,7 @@ public Builder architecture(@Nullable Output architecture) { } /** - * @param architecture The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * @param architecture The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2State.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2State.java index 8e50b2f5..381dea06 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2State.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachine2State.java @@ -6,7 +6,6 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2CdromArgs; -import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2CloneArgs; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2CpuArgs; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2RngArgs; import io.muehlbachler.pulumi.proxmoxve.VM.inputs.VirtualMachine2TimeoutsArgs; @@ -39,21 +38,6 @@ public Optional>> cdrom() { return Optional.ofNullable(this.cdrom); } - /** - * The cloning configuration. - * - */ - @Import(name="clone") - private @Nullable Output clone; - - /** - * @return The cloning configuration. - * - */ - public Optional> clone_() { - return Optional.ofNullable(this.clone); - } - /** * The CPU configuration. * @@ -145,14 +129,14 @@ public Optional> purgeOnDestroy() { } /** - * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * */ @Import(name="rng") private @Nullable Output rng; /** - * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * @return Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * */ public Optional> rng() { @@ -230,7 +214,6 @@ private VirtualMachine2State() {} private VirtualMachine2State(VirtualMachine2State $) { this.cdrom = $.cdrom; - this.clone = $.clone; this.cpu = $.cpu; this.deleteUnreferencedDisksOnDestroy = $.deleteUnreferencedDisksOnDestroy; this.description = $.description; @@ -284,27 +267,6 @@ public Builder cdrom(Map cdrom) { return cdrom(Output.of(cdrom)); } - /** - * @param clone The cloning configuration. - * - * @return builder - * - */ - public Builder clone_(@Nullable Output clone) { - $.clone = clone; - return this; - } - - /** - * @param clone The cloning configuration. - * - * @return builder - * - */ - public Builder clone_(VirtualMachine2CloneArgs clone) { - return clone_(Output.of(clone)); - } - /** * @param cpu The CPU configuration. * @@ -432,7 +394,7 @@ public Builder purgeOnDestroy(Boolean purgeOnDestroy) { } /** - * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * * @return builder * @@ -443,7 +405,7 @@ public Builder rng(@Nullable Output rng) { } /** - * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * @param rng Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root{@literal @}pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineDiskArgs.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineDiskArgs.java index 16278356..f8eb3908 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineDiskArgs.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineDiskArgs.java @@ -118,7 +118,10 @@ public Optional> fileFormat() { /** * The file ID for a disk image when importing a disk into VM. The ID format is * `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. *Deprecated*, use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> instead. + * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Prefer <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> for uncompressed images. + * Use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with <span pulumi-lang-nodejs="`contentType " pulumi-lang-dotnet="`ContentType " pulumi-lang-go="`contentType " pulumi-lang-python="`content_type " pulumi-lang-yaml="`contentType " pulumi-lang-java="`contentType ">`content_type </span>= "iso"` and <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> set. See the + * Create a VM from a Cloud Image guide for examples. * */ @Import(name="fileId") @@ -127,7 +130,10 @@ public Optional> fileFormat() { /** * @return The file ID for a disk image when importing a disk into VM. The ID format is * `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. *Deprecated*, use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> instead. + * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Prefer <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> for uncompressed images. + * Use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with <span pulumi-lang-nodejs="`contentType " pulumi-lang-dotnet="`ContentType " pulumi-lang-go="`contentType " pulumi-lang-python="`content_type " pulumi-lang-yaml="`contentType " pulumi-lang-java="`contentType ">`content_type </span>= "iso"` and <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> set. See the + * Create a VM from a Cloud Image guide for examples. * */ public Optional> fileId() { @@ -135,18 +141,20 @@ public Optional> fileId() { } /** - * The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type. - * The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type + * (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + * Can be also taken from <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Note: compressed images downloaded with + * <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> cannot use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span>; use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> instead. * */ @Import(name="importFrom") private @Nullable Output importFrom; /** - * @return The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type. - * The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * @return The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type + * (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + * Can be also taken from <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Note: compressed images downloaded with + * <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> cannot use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span>; use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> instead. * */ public Optional> importFrom() { @@ -465,7 +473,10 @@ public Builder fileFormat(String fileFormat) { /** * @param fileId The file ID for a disk image when importing a disk into VM. The ID format is * `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. *Deprecated*, use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> instead. + * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Prefer <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> for uncompressed images. + * Use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with <span pulumi-lang-nodejs="`contentType " pulumi-lang-dotnet="`ContentType " pulumi-lang-go="`contentType " pulumi-lang-python="`content_type " pulumi-lang-yaml="`contentType " pulumi-lang-java="`contentType ">`content_type </span>= "iso"` and <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> set. See the + * Create a VM from a Cloud Image guide for examples. * * @return builder * @@ -478,7 +489,10 @@ public Builder fileId(@Nullable Output fileId) { /** * @param fileId The file ID for a disk image when importing a disk into VM. The ID format is * `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. *Deprecated*, use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> instead. + * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Prefer <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> for uncompressed images. + * Use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with <span pulumi-lang-nodejs="`contentType " pulumi-lang-dotnet="`ContentType " pulumi-lang-go="`contentType " pulumi-lang-python="`content_type " pulumi-lang-yaml="`contentType " pulumi-lang-java="`contentType ">`content_type </span>= "iso"` and <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> set. See the + * Create a VM from a Cloud Image guide for examples. * * @return builder * @@ -488,9 +502,10 @@ public Builder fileId(String fileId) { } /** - * @param importFrom The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type. - * The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * @param importFrom The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type + * (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + * Can be also taken from <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Note: compressed images downloaded with + * <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> cannot use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span>; use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> instead. * * @return builder * @@ -501,9 +516,10 @@ public Builder importFrom(@Nullable Output importFrom) { } /** - * @param importFrom The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type. - * The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * @param importFrom The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type + * (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + * Can be also taken from <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Note: compressed images downloaded with + * <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> cannot use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span>; use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> instead. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineState.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineState.java index 7292c722..d375e080 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineState.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/inputs/VirtualMachineState.java @@ -268,6 +268,25 @@ public Optional>> hostpcis() { return Optional.ofNullable(this.hostpcis); } + /** + * Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + */ + @Import(name="hotplug") + private @Nullable Output hotplug; + + /** + * @return Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + */ + public Optional> hotplug() { + return Optional.ofNullable(this.hotplug); + } + /** * The cloud-init configuration. * @@ -904,14 +923,20 @@ public Optional> timeoutStopVm() { } /** - * The TPM state device. + * The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * */ @Import(name="tpmState") private @Nullable Output tpmState; /** - * @return The TPM state device. + * @return The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * */ public Optional> tpmState() { @@ -1011,6 +1036,7 @@ private VirtualMachineState(VirtualMachineState $) { this.efiDisk = $.efiDisk; this.hookScriptFileId = $.hookScriptFileId; this.hostpcis = $.hostpcis; + this.hotplug = $.hotplug; this.initialization = $.initialization; this.ipv4Addresses = $.ipv4Addresses; this.ipv6Addresses = $.ipv6Addresses; @@ -1423,6 +1449,31 @@ public Builder hostpcis(VirtualMachineHostpciArgs... hostpcis) { return hostpcis(List.of(hostpcis)); } + /** + * @param hotplug Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + * @return builder + * + */ + public Builder hotplug(@Nullable Output hotplug) { + $.hotplug = hotplug; + return this; + } + + /** + * @param hotplug Selectively enable hotplug features. Supported values + * are <span pulumi-lang-nodejs="`cpu`" pulumi-lang-dotnet="`Cpu`" pulumi-lang-go="`cpu`" pulumi-lang-python="`cpu`" pulumi-lang-yaml="`cpu`" pulumi-lang-java="`cpu`">`cpu`</span>, <span pulumi-lang-nodejs="`disk`" pulumi-lang-dotnet="`Disk`" pulumi-lang-go="`disk`" pulumi-lang-python="`disk`" pulumi-lang-yaml="`disk`" pulumi-lang-java="`disk`">`disk`</span>, <span pulumi-lang-nodejs="`memory`" pulumi-lang-dotnet="`Memory`" pulumi-lang-go="`memory`" pulumi-lang-python="`memory`" pulumi-lang-yaml="`memory`" pulumi-lang-java="`memory`">`memory`</span>, <span pulumi-lang-nodejs="`network`" pulumi-lang-dotnet="`Network`" pulumi-lang-go="`network`" pulumi-lang-python="`network`" pulumi-lang-yaml="`network`" pulumi-lang-java="`network`">`network`</span>, and <span pulumi-lang-nodejs="`usb`" pulumi-lang-dotnet="`Usb`" pulumi-lang-go="`usb`" pulumi-lang-python="`usb`" pulumi-lang-yaml="`usb`" pulumi-lang-java="`usb`">`usb`</span>. Use <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> to disable all, + * or <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span> to enable all. If not set, PVE defaults to `network,disk,usb`. + * + * @return builder + * + */ + public Builder hotplug(String hotplug) { + return hotplug(Output.of(hotplug)); + } + /** * @param initialization The cloud-init configuration. * @@ -2391,7 +2442,10 @@ public Builder timeoutStopVm(Integer timeoutStopVm) { } /** - * @param tpmState The TPM state device. + * @param tpmState The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * * @return builder * @@ -2402,7 +2456,10 @@ public Builder tpmState(@Nullable Output tpmState) { } /** - * @param tpmState The TPM state device. + * @param tpmState The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing <span pulumi-lang-nodejs="`version`" pulumi-lang-dotnet="`Version`" pulumi-lang-go="`version`" pulumi-lang-python="`version`" pulumi-lang-yaml="`version`" pulumi-lang-java="`version`">`version`</span> requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. * * @return builder * diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineCdrom.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineCdrom.java new file mode 100644 index 00000000..34cb2bdc --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineCdrom.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineCdrom { + /** + * @return The file ID of the CD-ROM, or `cdrom|none`. Defaults to <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span> to leave the CD-ROM empty. Use <span pulumi-lang-nodejs="`cdrom`" pulumi-lang-dotnet="`Cdrom`" pulumi-lang-go="`cdrom`" pulumi-lang-python="`cdrom`" pulumi-lang-yaml="`cdrom`" pulumi-lang-java="`cdrom`">`cdrom`</span> to connect to the physical drive. + * + */ + private @Nullable String fileId; + + private ClonedVirtualMachineCdrom() {} + /** + * @return The file ID of the CD-ROM, or `cdrom|none`. Defaults to <span pulumi-lang-nodejs="`none`" pulumi-lang-dotnet="`None`" pulumi-lang-go="`none`" pulumi-lang-python="`none`" pulumi-lang-yaml="`none`" pulumi-lang-java="`none`">`none`</span> to leave the CD-ROM empty. Use <span pulumi-lang-nodejs="`cdrom`" pulumi-lang-dotnet="`Cdrom`" pulumi-lang-go="`cdrom`" pulumi-lang-python="`cdrom`" pulumi-lang-yaml="`cdrom`" pulumi-lang-java="`cdrom`">`cdrom`</span> to connect to the physical drive. + * + */ + public Optional fileId() { + return Optional.ofNullable(this.fileId); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineCdrom defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String fileId; + public Builder() {} + public Builder(ClonedVirtualMachineCdrom defaults) { + Objects.requireNonNull(defaults); + this.fileId = defaults.fileId; + } + + @CustomType.Setter + public Builder fileId(@Nullable String fileId) { + + this.fileId = fileId; + return this; + } + public ClonedVirtualMachineCdrom build() { + final var _resultValue = new ClonedVirtualMachineCdrom(); + _resultValue.fileId = fileId; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineClone.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineClone.java new file mode 100644 index 00000000..ef9a0953 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineClone.java @@ -0,0 +1,230 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineClone { + /** + * @return Clone bandwidth limit in MB/s. + * + */ + private @Nullable Integer bandwidthLimit; + /** + * @return Perform a full clone (true) or linked clone (false). + * + */ + private @Nullable Boolean full; + /** + * @return Pool to assign the cloned VM to. + * + */ + private @Nullable String poolId; + /** + * @return Number of retries for clone operations. + * + */ + private @Nullable Integer retries; + /** + * @return Snapshot name to clone from. + * + */ + private @Nullable String snapshotName; + /** + * @return Source node of the VM/template. Defaults to target node if unset. + * + */ + private @Nullable String sourceNodeName; + /** + * @return Source VM/template ID to clone from. + * + */ + private Integer sourceVmId; + /** + * @return Target datastore for cloned disks. + * + */ + private @Nullable String targetDatastore; + /** + * @return Target disk format for clone (e.g., raw, qcow2). + * + */ + private @Nullable String targetFormat; + + private ClonedVirtualMachineClone() {} + /** + * @return Clone bandwidth limit in MB/s. + * + */ + public Optional bandwidthLimit() { + return Optional.ofNullable(this.bandwidthLimit); + } + /** + * @return Perform a full clone (true) or linked clone (false). + * + */ + public Optional full() { + return Optional.ofNullable(this.full); + } + /** + * @return Pool to assign the cloned VM to. + * + */ + public Optional poolId() { + return Optional.ofNullable(this.poolId); + } + /** + * @return Number of retries for clone operations. + * + */ + public Optional retries() { + return Optional.ofNullable(this.retries); + } + /** + * @return Snapshot name to clone from. + * + */ + public Optional snapshotName() { + return Optional.ofNullable(this.snapshotName); + } + /** + * @return Source node of the VM/template. Defaults to target node if unset. + * + */ + public Optional sourceNodeName() { + return Optional.ofNullable(this.sourceNodeName); + } + /** + * @return Source VM/template ID to clone from. + * + */ + public Integer sourceVmId() { + return this.sourceVmId; + } + /** + * @return Target datastore for cloned disks. + * + */ + public Optional targetDatastore() { + return Optional.ofNullable(this.targetDatastore); + } + /** + * @return Target disk format for clone (e.g., raw, qcow2). + * + */ + public Optional targetFormat() { + return Optional.ofNullable(this.targetFormat); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineClone defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer bandwidthLimit; + private @Nullable Boolean full; + private @Nullable String poolId; + private @Nullable Integer retries; + private @Nullable String snapshotName; + private @Nullable String sourceNodeName; + private Integer sourceVmId; + private @Nullable String targetDatastore; + private @Nullable String targetFormat; + public Builder() {} + public Builder(ClonedVirtualMachineClone defaults) { + Objects.requireNonNull(defaults); + this.bandwidthLimit = defaults.bandwidthLimit; + this.full = defaults.full; + this.poolId = defaults.poolId; + this.retries = defaults.retries; + this.snapshotName = defaults.snapshotName; + this.sourceNodeName = defaults.sourceNodeName; + this.sourceVmId = defaults.sourceVmId; + this.targetDatastore = defaults.targetDatastore; + this.targetFormat = defaults.targetFormat; + } + + @CustomType.Setter + public Builder bandwidthLimit(@Nullable Integer bandwidthLimit) { + + this.bandwidthLimit = bandwidthLimit; + return this; + } + @CustomType.Setter + public Builder full(@Nullable Boolean full) { + + this.full = full; + return this; + } + @CustomType.Setter + public Builder poolId(@Nullable String poolId) { + + this.poolId = poolId; + return this; + } + @CustomType.Setter + public Builder retries(@Nullable Integer retries) { + + this.retries = retries; + return this; + } + @CustomType.Setter + public Builder snapshotName(@Nullable String snapshotName) { + + this.snapshotName = snapshotName; + return this; + } + @CustomType.Setter + public Builder sourceNodeName(@Nullable String sourceNodeName) { + + this.sourceNodeName = sourceNodeName; + return this; + } + @CustomType.Setter + public Builder sourceVmId(Integer sourceVmId) { + if (sourceVmId == null) { + throw new MissingRequiredPropertyException("ClonedVirtualMachineClone", "sourceVmId"); + } + this.sourceVmId = sourceVmId; + return this; + } + @CustomType.Setter + public Builder targetDatastore(@Nullable String targetDatastore) { + + this.targetDatastore = targetDatastore; + return this; + } + @CustomType.Setter + public Builder targetFormat(@Nullable String targetFormat) { + + this.targetFormat = targetFormat; + return this; + } + public ClonedVirtualMachineClone build() { + final var _resultValue = new ClonedVirtualMachineClone(); + _resultValue.bandwidthLimit = bandwidthLimit; + _resultValue.full = full; + _resultValue.poolId = poolId; + _resultValue.retries = retries; + _resultValue.snapshotName = snapshotName; + _resultValue.sourceNodeName = sourceNodeName; + _resultValue.sourceVmId = sourceVmId; + _resultValue.targetDatastore = targetDatastore; + _resultValue.targetFormat = targetFormat; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineCpu.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineCpu.java new file mode 100644 index 00000000..632b5fa7 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineCpu.java @@ -0,0 +1,252 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineCpu { + /** + * @return The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + private @Nullable String affinity; + /** + * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + private @Nullable String architecture; + /** + * @return The number of CPU cores per socket (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + private @Nullable Integer cores; + /** + * @return Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: <span pulumi-lang-nodejs="`pcid`" pulumi-lang-dotnet="`Pcid`" pulumi-lang-go="`pcid`" pulumi-lang-python="`pcid`" pulumi-lang-yaml="`pcid`" pulumi-lang-java="`pcid`">`pcid`</span>, `spec-ctrl`, <span pulumi-lang-nodejs="`ibpb`" pulumi-lang-dotnet="`Ibpb`" pulumi-lang-go="`ibpb`" pulumi-lang-python="`ibpb`" pulumi-lang-yaml="`ibpb`" pulumi-lang-java="`ibpb`">`ibpb`</span>, <span pulumi-lang-nodejs="`ssbd`" pulumi-lang-dotnet="`Ssbd`" pulumi-lang-go="`ssbd`" pulumi-lang-python="`ssbd`" pulumi-lang-yaml="`ssbd`" pulumi-lang-java="`ssbd`">`ssbd`</span>, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, <span pulumi-lang-nodejs="`pdpe1gb`" pulumi-lang-dotnet="`Pdpe1gb`" pulumi-lang-go="`pdpe1gb`" pulumi-lang-python="`pdpe1gb`" pulumi-lang-yaml="`pdpe1gb`" pulumi-lang-java="`pdpe1gb`">`pdpe1gb`</span>, `md-clear`, `hv-tlbflush`, `hv-evmcs`, <span pulumi-lang-nodejs="`aes`" pulumi-lang-dotnet="`Aes`" pulumi-lang-go="`aes`" pulumi-lang-python="`aes`" pulumi-lang-yaml="`aes`" pulumi-lang-java="`aes`">`aes`</span>. + * + */ + private @Nullable List flags; + /** + * @return The number of hotplugged vCPUs (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + private @Nullable Integer hotplugged; + /** + * @return Limit of CPU usage (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> which means no limit). + * + */ + private @Nullable Integer limit; + /** + * @return Enable NUMA (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + private @Nullable Boolean numa; + /** + * @return The number of CPU sockets (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + private @Nullable Integer sockets; + /** + * @return Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to <span pulumi-lang-nodejs="`kvm64`" pulumi-lang-dotnet="`Kvm64`" pulumi-lang-go="`kvm64`" pulumi-lang-python="`kvm64`" pulumi-lang-yaml="`kvm64`" pulumi-lang-java="`kvm64`">`kvm64`</span>). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + * + */ + private @Nullable String type; + /** + * @return CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + * + */ + private @Nullable Integer units; + + private ClonedVirtualMachineCpu() {} + /** + * @return The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + public Optional affinity() { + return Optional.ofNullable(this.affinity); + } + /** + * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. + * + */ + public Optional architecture() { + return Optional.ofNullable(this.architecture); + } + /** + * @return The number of CPU cores per socket (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + public Optional cores() { + return Optional.ofNullable(this.cores); + } + /** + * @return Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: <span pulumi-lang-nodejs="`pcid`" pulumi-lang-dotnet="`Pcid`" pulumi-lang-go="`pcid`" pulumi-lang-python="`pcid`" pulumi-lang-yaml="`pcid`" pulumi-lang-java="`pcid`">`pcid`</span>, `spec-ctrl`, <span pulumi-lang-nodejs="`ibpb`" pulumi-lang-dotnet="`Ibpb`" pulumi-lang-go="`ibpb`" pulumi-lang-python="`ibpb`" pulumi-lang-yaml="`ibpb`" pulumi-lang-java="`ibpb`">`ibpb`</span>, <span pulumi-lang-nodejs="`ssbd`" pulumi-lang-dotnet="`Ssbd`" pulumi-lang-go="`ssbd`" pulumi-lang-python="`ssbd`" pulumi-lang-yaml="`ssbd`" pulumi-lang-java="`ssbd`">`ssbd`</span>, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, <span pulumi-lang-nodejs="`pdpe1gb`" pulumi-lang-dotnet="`Pdpe1gb`" pulumi-lang-go="`pdpe1gb`" pulumi-lang-python="`pdpe1gb`" pulumi-lang-yaml="`pdpe1gb`" pulumi-lang-java="`pdpe1gb`">`pdpe1gb`</span>, `md-clear`, `hv-tlbflush`, `hv-evmcs`, <span pulumi-lang-nodejs="`aes`" pulumi-lang-dotnet="`Aes`" pulumi-lang-go="`aes`" pulumi-lang-python="`aes`" pulumi-lang-yaml="`aes`" pulumi-lang-java="`aes`">`aes`</span>. + * + */ + public List flags() { + return this.flags == null ? List.of() : this.flags; + } + /** + * @return The number of hotplugged vCPUs (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + public Optional hotplugged() { + return Optional.ofNullable(this.hotplugged); + } + /** + * @return Limit of CPU usage (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> which means no limit). + * + */ + public Optional limit() { + return Optional.ofNullable(this.limit); + } + /** + * @return Enable NUMA (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + public Optional numa() { + return Optional.ofNullable(this.numa); + } + /** + * @return The number of CPU sockets (defaults to <span pulumi-lang-nodejs="`1`" pulumi-lang-dotnet="`1`" pulumi-lang-go="`1`" pulumi-lang-python="`1`" pulumi-lang-yaml="`1`" pulumi-lang-java="`1`">`1`</span>). + * + */ + public Optional sockets() { + return Optional.ofNullable(this.sockets); + } + /** + * @return Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to <span pulumi-lang-nodejs="`kvm64`" pulumi-lang-dotnet="`Kvm64`" pulumi-lang-go="`kvm64`" pulumi-lang-python="`kvm64`" pulumi-lang-yaml="`kvm64`" pulumi-lang-java="`kvm64`">`kvm64`</span>). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + * + */ + public Optional type() { + return Optional.ofNullable(this.type); + } + /** + * @return CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + * + */ + public Optional units() { + return Optional.ofNullable(this.units); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineCpu defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String affinity; + private @Nullable String architecture; + private @Nullable Integer cores; + private @Nullable List flags; + private @Nullable Integer hotplugged; + private @Nullable Integer limit; + private @Nullable Boolean numa; + private @Nullable Integer sockets; + private @Nullable String type; + private @Nullable Integer units; + public Builder() {} + public Builder(ClonedVirtualMachineCpu defaults) { + Objects.requireNonNull(defaults); + this.affinity = defaults.affinity; + this.architecture = defaults.architecture; + this.cores = defaults.cores; + this.flags = defaults.flags; + this.hotplugged = defaults.hotplugged; + this.limit = defaults.limit; + this.numa = defaults.numa; + this.sockets = defaults.sockets; + this.type = defaults.type; + this.units = defaults.units; + } + + @CustomType.Setter + public Builder affinity(@Nullable String affinity) { + + this.affinity = affinity; + return this; + } + @CustomType.Setter + public Builder architecture(@Nullable String architecture) { + + this.architecture = architecture; + return this; + } + @CustomType.Setter + public Builder cores(@Nullable Integer cores) { + + this.cores = cores; + return this; + } + @CustomType.Setter + public Builder flags(@Nullable List flags) { + + this.flags = flags; + return this; + } + public Builder flags(String... flags) { + return flags(List.of(flags)); + } + @CustomType.Setter + public Builder hotplugged(@Nullable Integer hotplugged) { + + this.hotplugged = hotplugged; + return this; + } + @CustomType.Setter + public Builder limit(@Nullable Integer limit) { + + this.limit = limit; + return this; + } + @CustomType.Setter + public Builder numa(@Nullable Boolean numa) { + + this.numa = numa; + return this; + } + @CustomType.Setter + public Builder sockets(@Nullable Integer sockets) { + + this.sockets = sockets; + return this; + } + @CustomType.Setter + public Builder type(@Nullable String type) { + + this.type = type; + return this; + } + @CustomType.Setter + public Builder units(@Nullable Integer units) { + + this.units = units; + return this; + } + public ClonedVirtualMachineCpu build() { + final var _resultValue = new ClonedVirtualMachineCpu(); + _resultValue.affinity = affinity; + _resultValue.architecture = architecture; + _resultValue.cores = cores; + _resultValue.flags = flags; + _resultValue.hotplugged = hotplugged; + _resultValue.limit = limit; + _resultValue.numa = numa; + _resultValue.sockets = sockets; + _resultValue.type = type; + _resultValue.units = units; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineDelete.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineDelete.java new file mode 100644 index 00000000..5cefdb6e --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineDelete.java @@ -0,0 +1,84 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineDelete { + /** + * @return Disk slots to delete (e.g., scsi2). + * + */ + private @Nullable List disks; + /** + * @return Network slots to delete (e.g., net1). + * + */ + private @Nullable List networks; + + private ClonedVirtualMachineDelete() {} + /** + * @return Disk slots to delete (e.g., scsi2). + * + */ + public List disks() { + return this.disks == null ? List.of() : this.disks; + } + /** + * @return Network slots to delete (e.g., net1). + * + */ + public List networks() { + return this.networks == null ? List.of() : this.networks; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineDelete defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List disks; + private @Nullable List networks; + public Builder() {} + public Builder(ClonedVirtualMachineDelete defaults) { + Objects.requireNonNull(defaults); + this.disks = defaults.disks; + this.networks = defaults.networks; + } + + @CustomType.Setter + public Builder disks(@Nullable List disks) { + + this.disks = disks; + return this; + } + public Builder disks(String... disks) { + return disks(List.of(disks)); + } + @CustomType.Setter + public Builder networks(@Nullable List networks) { + + this.networks = networks; + return this; + } + public Builder networks(String... networks) { + return networks(List.of(networks)); + } + public ClonedVirtualMachineDelete build() { + final var _resultValue = new ClonedVirtualMachineDelete(); + _resultValue.disks = disks; + _resultValue.networks = networks; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineDisk.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineDisk.java new file mode 100644 index 00000000..b2c668ec --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineDisk.java @@ -0,0 +1,332 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineDisk { + /** + * @return AIO mode (io_uring, native, threads). + * + */ + private @Nullable String aio; + /** + * @return Include disk in backups. + * + */ + private @Nullable Boolean backup; + /** + * @return Cache mode. + * + */ + private @Nullable String cache; + /** + * @return Target datastore for new disks when file is not provided. + * + */ + private @Nullable String datastoreId; + /** + * @return Discard/trim behavior. + * + */ + private @Nullable String discard; + /** + * @return Existing volume reference (e.g., local-lvm:vm-100-disk-0). + * + */ + private @Nullable String file; + /** + * @return Disk format (raw, qcow2, vmdk). + * + */ + private @Nullable String format; + /** + * @return Import source volume/file id. + * + */ + private @Nullable String importFrom; + /** + * @return Use IO thread. + * + */ + private @Nullable Boolean iothread; + /** + * @return Disk media (e.g., disk, cdrom). + * + */ + private @Nullable String media; + /** + * @return Consider disk for replication. + * + */ + private @Nullable Boolean replicate; + /** + * @return Disk serial number. + * + */ + private @Nullable String serial; + /** + * @return Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set <span pulumi-lang-nodejs="`sizeGb`" pulumi-lang-dotnet="`SizeGb`" pulumi-lang-go="`sizeGb`" pulumi-lang-python="`size_gb`" pulumi-lang-yaml="`sizeGb`" pulumi-lang-java="`sizeGb`">`size_gb`</span> to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + * + */ + private @Nullable Integer sizeGb; + /** + * @return Mark disk as SSD. + * + */ + private @Nullable Boolean ssd; + + private ClonedVirtualMachineDisk() {} + /** + * @return AIO mode (io_uring, native, threads). + * + */ + public Optional aio() { + return Optional.ofNullable(this.aio); + } + /** + * @return Include disk in backups. + * + */ + public Optional backup() { + return Optional.ofNullable(this.backup); + } + /** + * @return Cache mode. + * + */ + public Optional cache() { + return Optional.ofNullable(this.cache); + } + /** + * @return Target datastore for new disks when file is not provided. + * + */ + public Optional datastoreId() { + return Optional.ofNullable(this.datastoreId); + } + /** + * @return Discard/trim behavior. + * + */ + public Optional discard() { + return Optional.ofNullable(this.discard); + } + /** + * @return Existing volume reference (e.g., local-lvm:vm-100-disk-0). + * + */ + public Optional file() { + return Optional.ofNullable(this.file); + } + /** + * @return Disk format (raw, qcow2, vmdk). + * + */ + public Optional format() { + return Optional.ofNullable(this.format); + } + /** + * @return Import source volume/file id. + * + */ + public Optional importFrom() { + return Optional.ofNullable(this.importFrom); + } + /** + * @return Use IO thread. + * + */ + public Optional iothread() { + return Optional.ofNullable(this.iothread); + } + /** + * @return Disk media (e.g., disk, cdrom). + * + */ + public Optional media() { + return Optional.ofNullable(this.media); + } + /** + * @return Consider disk for replication. + * + */ + public Optional replicate() { + return Optional.ofNullable(this.replicate); + } + /** + * @return Disk serial number. + * + */ + public Optional serial() { + return Optional.ofNullable(this.serial); + } + /** + * @return Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set <span pulumi-lang-nodejs="`sizeGb`" pulumi-lang-dotnet="`SizeGb`" pulumi-lang-go="`sizeGb`" pulumi-lang-python="`size_gb`" pulumi-lang-yaml="`sizeGb`" pulumi-lang-java="`sizeGb`">`size_gb`</span> to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + * + */ + public Optional sizeGb() { + return Optional.ofNullable(this.sizeGb); + } + /** + * @return Mark disk as SSD. + * + */ + public Optional ssd() { + return Optional.ofNullable(this.ssd); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineDisk defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String aio; + private @Nullable Boolean backup; + private @Nullable String cache; + private @Nullable String datastoreId; + private @Nullable String discard; + private @Nullable String file; + private @Nullable String format; + private @Nullable String importFrom; + private @Nullable Boolean iothread; + private @Nullable String media; + private @Nullable Boolean replicate; + private @Nullable String serial; + private @Nullable Integer sizeGb; + private @Nullable Boolean ssd; + public Builder() {} + public Builder(ClonedVirtualMachineDisk defaults) { + Objects.requireNonNull(defaults); + this.aio = defaults.aio; + this.backup = defaults.backup; + this.cache = defaults.cache; + this.datastoreId = defaults.datastoreId; + this.discard = defaults.discard; + this.file = defaults.file; + this.format = defaults.format; + this.importFrom = defaults.importFrom; + this.iothread = defaults.iothread; + this.media = defaults.media; + this.replicate = defaults.replicate; + this.serial = defaults.serial; + this.sizeGb = defaults.sizeGb; + this.ssd = defaults.ssd; + } + + @CustomType.Setter + public Builder aio(@Nullable String aio) { + + this.aio = aio; + return this; + } + @CustomType.Setter + public Builder backup(@Nullable Boolean backup) { + + this.backup = backup; + return this; + } + @CustomType.Setter + public Builder cache(@Nullable String cache) { + + this.cache = cache; + return this; + } + @CustomType.Setter + public Builder datastoreId(@Nullable String datastoreId) { + + this.datastoreId = datastoreId; + return this; + } + @CustomType.Setter + public Builder discard(@Nullable String discard) { + + this.discard = discard; + return this; + } + @CustomType.Setter + public Builder file(@Nullable String file) { + + this.file = file; + return this; + } + @CustomType.Setter + public Builder format(@Nullable String format) { + + this.format = format; + return this; + } + @CustomType.Setter + public Builder importFrom(@Nullable String importFrom) { + + this.importFrom = importFrom; + return this; + } + @CustomType.Setter + public Builder iothread(@Nullable Boolean iothread) { + + this.iothread = iothread; + return this; + } + @CustomType.Setter + public Builder media(@Nullable String media) { + + this.media = media; + return this; + } + @CustomType.Setter + public Builder replicate(@Nullable Boolean replicate) { + + this.replicate = replicate; + return this; + } + @CustomType.Setter + public Builder serial(@Nullable String serial) { + + this.serial = serial; + return this; + } + @CustomType.Setter + public Builder sizeGb(@Nullable Integer sizeGb) { + + this.sizeGb = sizeGb; + return this; + } + @CustomType.Setter + public Builder ssd(@Nullable Boolean ssd) { + + this.ssd = ssd; + return this; + } + public ClonedVirtualMachineDisk build() { + final var _resultValue = new ClonedVirtualMachineDisk(); + _resultValue.aio = aio; + _resultValue.backup = backup; + _resultValue.cache = cache; + _resultValue.datastoreId = datastoreId; + _resultValue.discard = discard; + _resultValue.file = file; + _resultValue.format = format; + _resultValue.importFrom = importFrom; + _resultValue.iothread = iothread; + _resultValue.media = media; + _resultValue.replicate = replicate; + _resultValue.serial = serial; + _resultValue.sizeGb = sizeGb; + _resultValue.ssd = ssd; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineMemory.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineMemory.java new file mode 100644 index 00000000..c16ef94c --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineMemory.java @@ -0,0 +1,153 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineMemory { + /** + * @return Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> disables the balloon driver entirely (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + private @Nullable Integer balloon; + /** + * @return Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - <span pulumi-lang-nodejs="`2`" pulumi-lang-dotnet="`2`" pulumi-lang-go="`2`" pulumi-lang-python="`2`" pulumi-lang-yaml="`2`" pulumi-lang-java="`2`">`2`</span> - Use 2 MiB hugepages + * - <span pulumi-lang-nodejs="`1024`" pulumi-lang-dotnet="`1024`" pulumi-lang-go="`1024`" pulumi-lang-python="`1024`" pulumi-lang-yaml="`1024`" pulumi-lang-java="`1024`">`1024`</span> - Use 1 GiB hugepages + * - <span pulumi-lang-nodejs="`any`" pulumi-lang-dotnet="`Any`" pulumi-lang-go="`any`" pulumi-lang-python="`any`" pulumi-lang-yaml="`any`" pulumi-lang-java="`any`">`any`</span> - Use any available hugepage size + * + */ + private @Nullable String hugepages; + /** + * @return Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> keeps them allocated for faster VM startup (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + private @Nullable Boolean keepHugepages; + /** + * @return CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to <span pulumi-lang-nodejs="`1000`" pulumi-lang-dotnet="`1000`" pulumi-lang-go="`1000`" pulumi-lang-python="`1000`" pulumi-lang-yaml="`1000`" pulumi-lang-java="`1000`">`1000`</span>). + * + */ + private @Nullable Integer shares; + /** + * @return Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> and <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to <span pulumi-lang-nodejs="`512`" pulumi-lang-dotnet="`512`" pulumi-lang-go="`512`" pulumi-lang-python="`512`" pulumi-lang-yaml="`512`" pulumi-lang-java="`512`">`512`</span> MiB). + * + */ + private @Nullable Integer size; + + private ClonedVirtualMachineMemory() {} + /** + * @return Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span> disables the balloon driver entirely (defaults to <span pulumi-lang-nodejs="`0`" pulumi-lang-dotnet="`0`" pulumi-lang-go="`0`" pulumi-lang-python="`0`" pulumi-lang-yaml="`0`" pulumi-lang-java="`0`">`0`</span>). + * + */ + public Optional balloon() { + return Optional.ofNullable(this.balloon); + } + /** + * @return Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - <span pulumi-lang-nodejs="`2`" pulumi-lang-dotnet="`2`" pulumi-lang-go="`2`" pulumi-lang-python="`2`" pulumi-lang-yaml="`2`" pulumi-lang-java="`2`">`2`</span> - Use 2 MiB hugepages + * - <span pulumi-lang-nodejs="`1024`" pulumi-lang-dotnet="`1024`" pulumi-lang-go="`1024`" pulumi-lang-python="`1024`" pulumi-lang-yaml="`1024`" pulumi-lang-java="`1024`">`1024`</span> - Use 1 GiB hugepages + * - <span pulumi-lang-nodejs="`any`" pulumi-lang-dotnet="`Any`" pulumi-lang-go="`any`" pulumi-lang-python="`any`" pulumi-lang-yaml="`any`" pulumi-lang-java="`any`">`any`</span> - Use any available hugepage size + * + */ + public Optional hugepages() { + return Optional.ofNullable(this.hugepages); + } + /** + * @return Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to <span pulumi-lang-nodejs="`true`" pulumi-lang-dotnet="`True`" pulumi-lang-go="`true`" pulumi-lang-python="`true`" pulumi-lang-yaml="`true`" pulumi-lang-java="`true`">`true`</span> keeps them allocated for faster VM startup (defaults to <span pulumi-lang-nodejs="`false`" pulumi-lang-dotnet="`False`" pulumi-lang-go="`false`" pulumi-lang-python="`false`" pulumi-lang-yaml="`false`" pulumi-lang-java="`false`">`false`</span>). + * + */ + public Optional keepHugepages() { + return Optional.ofNullable(this.keepHugepages); + } + /** + * @return CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to <span pulumi-lang-nodejs="`1000`" pulumi-lang-dotnet="`1000`" pulumi-lang-go="`1000`" pulumi-lang-python="`1000`" pulumi-lang-yaml="`1000`" pulumi-lang-java="`1000`">`1000`</span>). + * + */ + public Optional shares() { + return Optional.ofNullable(this.shares); + } + /** + * @return Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between <span pulumi-lang-nodejs="`balloon`" pulumi-lang-dotnet="`Balloon`" pulumi-lang-go="`balloon`" pulumi-lang-python="`balloon`" pulumi-lang-yaml="`balloon`" pulumi-lang-java="`balloon`">`balloon`</span> and <span pulumi-lang-nodejs="`size`" pulumi-lang-dotnet="`Size`" pulumi-lang-go="`size`" pulumi-lang-python="`size`" pulumi-lang-yaml="`size`" pulumi-lang-java="`size`">`size`</span> can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to <span pulumi-lang-nodejs="`512`" pulumi-lang-dotnet="`512`" pulumi-lang-go="`512`" pulumi-lang-python="`512`" pulumi-lang-yaml="`512`" pulumi-lang-java="`512`">`512`</span> MiB). + * + */ + public Optional size() { + return Optional.ofNullable(this.size); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineMemory defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer balloon; + private @Nullable String hugepages; + private @Nullable Boolean keepHugepages; + private @Nullable Integer shares; + private @Nullable Integer size; + public Builder() {} + public Builder(ClonedVirtualMachineMemory defaults) { + Objects.requireNonNull(defaults); + this.balloon = defaults.balloon; + this.hugepages = defaults.hugepages; + this.keepHugepages = defaults.keepHugepages; + this.shares = defaults.shares; + this.size = defaults.size; + } + + @CustomType.Setter + public Builder balloon(@Nullable Integer balloon) { + + this.balloon = balloon; + return this; + } + @CustomType.Setter + public Builder hugepages(@Nullable String hugepages) { + + this.hugepages = hugepages; + return this; + } + @CustomType.Setter + public Builder keepHugepages(@Nullable Boolean keepHugepages) { + + this.keepHugepages = keepHugepages; + return this; + } + @CustomType.Setter + public Builder shares(@Nullable Integer shares) { + + this.shares = shares; + return this; + } + @CustomType.Setter + public Builder size(@Nullable Integer size) { + + this.size = size; + return this; + } + public ClonedVirtualMachineMemory build() { + final var _resultValue = new ClonedVirtualMachineMemory(); + _resultValue.balloon = balloon; + _resultValue.hugepages = hugepages; + _resultValue.keepHugepages = keepHugepages; + _resultValue.shares = shares; + _resultValue.size = size; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineNetwork.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineNetwork.java new file mode 100644 index 00000000..c2bccd59 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineNetwork.java @@ -0,0 +1,253 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.Double; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineNetwork { + /** + * @return Bridge name. + * + */ + private @Nullable String bridge; + /** + * @return Enable firewall on this interface. + * + */ + private @Nullable Boolean firewall; + /** + * @return Keep link down. + * + */ + private @Nullable Boolean linkDown; + /** + * @return MAC address (computed if omitted). + * + */ + private @Nullable String macAddress; + /** + * @return NIC model (e.g., virtio, e1000). + * + */ + private @Nullable String model; + /** + * @return Interface MTU. + * + */ + private @Nullable Integer mtu; + /** + * @return Number of multiqueue NIC queues. + * + */ + private @Nullable Integer queues; + /** + * @return Rate limit (MB/s). + * + */ + private @Nullable Double rateLimit; + /** + * @return VLAN tag. + * + */ + private @Nullable Integer tag; + /** + * @return Trunk VLAN IDs. + * + */ + private @Nullable List trunks; + + private ClonedVirtualMachineNetwork() {} + /** + * @return Bridge name. + * + */ + public Optional bridge() { + return Optional.ofNullable(this.bridge); + } + /** + * @return Enable firewall on this interface. + * + */ + public Optional firewall() { + return Optional.ofNullable(this.firewall); + } + /** + * @return Keep link down. + * + */ + public Optional linkDown() { + return Optional.ofNullable(this.linkDown); + } + /** + * @return MAC address (computed if omitted). + * + */ + public Optional macAddress() { + return Optional.ofNullable(this.macAddress); + } + /** + * @return NIC model (e.g., virtio, e1000). + * + */ + public Optional model() { + return Optional.ofNullable(this.model); + } + /** + * @return Interface MTU. + * + */ + public Optional mtu() { + return Optional.ofNullable(this.mtu); + } + /** + * @return Number of multiqueue NIC queues. + * + */ + public Optional queues() { + return Optional.ofNullable(this.queues); + } + /** + * @return Rate limit (MB/s). + * + */ + public Optional rateLimit() { + return Optional.ofNullable(this.rateLimit); + } + /** + * @return VLAN tag. + * + */ + public Optional tag() { + return Optional.ofNullable(this.tag); + } + /** + * @return Trunk VLAN IDs. + * + */ + public List trunks() { + return this.trunks == null ? List.of() : this.trunks; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineNetwork defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String bridge; + private @Nullable Boolean firewall; + private @Nullable Boolean linkDown; + private @Nullable String macAddress; + private @Nullable String model; + private @Nullable Integer mtu; + private @Nullable Integer queues; + private @Nullable Double rateLimit; + private @Nullable Integer tag; + private @Nullable List trunks; + public Builder() {} + public Builder(ClonedVirtualMachineNetwork defaults) { + Objects.requireNonNull(defaults); + this.bridge = defaults.bridge; + this.firewall = defaults.firewall; + this.linkDown = defaults.linkDown; + this.macAddress = defaults.macAddress; + this.model = defaults.model; + this.mtu = defaults.mtu; + this.queues = defaults.queues; + this.rateLimit = defaults.rateLimit; + this.tag = defaults.tag; + this.trunks = defaults.trunks; + } + + @CustomType.Setter + public Builder bridge(@Nullable String bridge) { + + this.bridge = bridge; + return this; + } + @CustomType.Setter + public Builder firewall(@Nullable Boolean firewall) { + + this.firewall = firewall; + return this; + } + @CustomType.Setter + public Builder linkDown(@Nullable Boolean linkDown) { + + this.linkDown = linkDown; + return this; + } + @CustomType.Setter + public Builder macAddress(@Nullable String macAddress) { + + this.macAddress = macAddress; + return this; + } + @CustomType.Setter + public Builder model(@Nullable String model) { + + this.model = model; + return this; + } + @CustomType.Setter + public Builder mtu(@Nullable Integer mtu) { + + this.mtu = mtu; + return this; + } + @CustomType.Setter + public Builder queues(@Nullable Integer queues) { + + this.queues = queues; + return this; + } + @CustomType.Setter + public Builder rateLimit(@Nullable Double rateLimit) { + + this.rateLimit = rateLimit; + return this; + } + @CustomType.Setter + public Builder tag(@Nullable Integer tag) { + + this.tag = tag; + return this; + } + @CustomType.Setter + public Builder trunks(@Nullable List trunks) { + + this.trunks = trunks; + return this; + } + public Builder trunks(Integer... trunks) { + return trunks(List.of(trunks)); + } + public ClonedVirtualMachineNetwork build() { + final var _resultValue = new ClonedVirtualMachineNetwork(); + _resultValue.bridge = bridge; + _resultValue.firewall = firewall; + _resultValue.linkDown = linkDown; + _resultValue.macAddress = macAddress; + _resultValue.model = model; + _resultValue.mtu = mtu; + _resultValue.queues = queues; + _resultValue.rateLimit = rateLimit; + _resultValue.tag = tag; + _resultValue.trunks = trunks; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineRng.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineRng.java new file mode 100644 index 00000000..e356de22 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineRng.java @@ -0,0 +1,100 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineRng { + /** + * @return Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + * + */ + private @Nullable Integer maxBytes; + /** + * @return Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + * + */ + private @Nullable Integer period; + /** + * @return The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + * + */ + private @Nullable String source; + + private ClonedVirtualMachineRng() {} + /** + * @return Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + * + */ + public Optional maxBytes() { + return Optional.ofNullable(this.maxBytes); + } + /** + * @return Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + * + */ + public Optional period() { + return Optional.ofNullable(this.period); + } + /** + * @return The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + * + */ + public Optional source() { + return Optional.ofNullable(this.source); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineRng defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer maxBytes; + private @Nullable Integer period; + private @Nullable String source; + public Builder() {} + public Builder(ClonedVirtualMachineRng defaults) { + Objects.requireNonNull(defaults); + this.maxBytes = defaults.maxBytes; + this.period = defaults.period; + this.source = defaults.source; + } + + @CustomType.Setter + public Builder maxBytes(@Nullable Integer maxBytes) { + + this.maxBytes = maxBytes; + return this; + } + @CustomType.Setter + public Builder period(@Nullable Integer period) { + + this.period = period; + return this; + } + @CustomType.Setter + public Builder source(@Nullable String source) { + + this.source = source; + return this; + } + public ClonedVirtualMachineRng build() { + final var _resultValue = new ClonedVirtualMachineRng(); + _resultValue.maxBytes = maxBytes; + _resultValue.period = period; + _resultValue.source = source; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineTimeouts.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineTimeouts.java new file mode 100644 index 00000000..519e2835 --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineTimeouts.java @@ -0,0 +1,120 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineTimeouts { + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + private @Nullable String create; + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + * + */ + private @Nullable String delete; + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + * + */ + private @Nullable String read; + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + private @Nullable String update; + + private ClonedVirtualMachineTimeouts() {} + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + public Optional create() { + return Optional.ofNullable(this.create); + } + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + * + */ + public Optional delete() { + return Optional.ofNullable(this.delete); + } + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + * + */ + public Optional read() { + return Optional.ofNullable(this.read); + } + /** + * @return A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + * + */ + public Optional update() { + return Optional.ofNullable(this.update); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineTimeouts defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String create; + private @Nullable String delete; + private @Nullable String read; + private @Nullable String update; + public Builder() {} + public Builder(ClonedVirtualMachineTimeouts defaults) { + Objects.requireNonNull(defaults); + this.create = defaults.create; + this.delete = defaults.delete; + this.read = defaults.read; + this.update = defaults.update; + } + + @CustomType.Setter + public Builder create(@Nullable String create) { + + this.create = create; + return this; + } + @CustomType.Setter + public Builder delete(@Nullable String delete) { + + this.delete = delete; + return this; + } + @CustomType.Setter + public Builder read(@Nullable String read) { + + this.read = read; + return this; + } + @CustomType.Setter + public Builder update(@Nullable String update) { + + this.update = update; + return this; + } + public ClonedVirtualMachineTimeouts build() { + final var _resultValue = new ClonedVirtualMachineTimeouts(); + _resultValue.create = create; + _resultValue.delete = delete; + _resultValue.read = read; + _resultValue.update = update; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineVga.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineVga.java new file mode 100644 index 00000000..4a7cbb9b --- /dev/null +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/ClonedVirtualMachineVga.java @@ -0,0 +1,100 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package io.muehlbachler.pulumi.proxmoxve.VM.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClonedVirtualMachineVga { + /** + * @return Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only <span pulumi-lang-nodejs="`vnc`" pulumi-lang-dotnet="`Vnc`" pulumi-lang-go="`vnc`" pulumi-lang-python="`vnc`" pulumi-lang-yaml="`vnc`" pulumi-lang-java="`vnc`">`vnc`</span> is available. Migration with VNC clipboard is not supported by Proxmox. + * + */ + private @Nullable String clipboard; + /** + * @return The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + * + */ + private @Nullable Integer memory; + /** + * @return The VGA type (defaults to <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span>). + * + */ + private @Nullable String type; + + private ClonedVirtualMachineVga() {} + /** + * @return Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only <span pulumi-lang-nodejs="`vnc`" pulumi-lang-dotnet="`Vnc`" pulumi-lang-go="`vnc`" pulumi-lang-python="`vnc`" pulumi-lang-yaml="`vnc`" pulumi-lang-java="`vnc`">`vnc`</span> is available. Migration with VNC clipboard is not supported by Proxmox. + * + */ + public Optional clipboard() { + return Optional.ofNullable(this.clipboard); + } + /** + * @return The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + * + */ + public Optional memory() { + return Optional.ofNullable(this.memory); + } + /** + * @return The VGA type (defaults to <span pulumi-lang-nodejs="`std`" pulumi-lang-dotnet="`Std`" pulumi-lang-go="`std`" pulumi-lang-python="`std`" pulumi-lang-yaml="`std`" pulumi-lang-java="`std`">`std`</span>). + * + */ + public Optional type() { + return Optional.ofNullable(this.type); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClonedVirtualMachineVga defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String clipboard; + private @Nullable Integer memory; + private @Nullable String type; + public Builder() {} + public Builder(ClonedVirtualMachineVga defaults) { + Objects.requireNonNull(defaults); + this.clipboard = defaults.clipboard; + this.memory = defaults.memory; + this.type = defaults.type; + } + + @CustomType.Setter + public Builder clipboard(@Nullable String clipboard) { + + this.clipboard = clipboard; + return this; + } + @CustomType.Setter + public Builder memory(@Nullable Integer memory) { + + this.memory = memory; + return this; + } + @CustomType.Setter + public Builder type(@Nullable String type) { + + this.type = type; + return this; + } + public ClonedVirtualMachineVga build() { + final var _resultValue = new ClonedVirtualMachineVga(); + _resultValue.clipboard = clipboard; + _resultValue.memory = memory; + _resultValue.type = type; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachine2Clone.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachine2Clone.java deleted file mode 100644 index 73b25198..00000000 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachine2Clone.java +++ /dev/null @@ -1,81 +0,0 @@ -// *** WARNING: this file was generated by pulumi-java-gen. *** -// *** Do not edit by hand unless you're certain you know what you are doing! *** - -package io.muehlbachler.pulumi.proxmoxve.VM.outputs; - -import com.pulumi.core.annotations.CustomType; -import com.pulumi.exceptions.MissingRequiredPropertyException; -import java.lang.Integer; -import java.util.Objects; -import java.util.Optional; -import javax.annotation.Nullable; - -@CustomType -public final class VirtualMachine2Clone { - /** - * @return The ID of the VM to clone. - * - */ - private Integer id; - /** - * @return The number of retries to perform when cloning the VM (default: 3). - * - */ - private @Nullable Integer retries; - - private VirtualMachine2Clone() {} - /** - * @return The ID of the VM to clone. - * - */ - public Integer id() { - return this.id; - } - /** - * @return The number of retries to perform when cloning the VM (default: 3). - * - */ - public Optional retries() { - return Optional.ofNullable(this.retries); - } - - public static Builder builder() { - return new Builder(); - } - - public static Builder builder(VirtualMachine2Clone defaults) { - return new Builder(defaults); - } - @CustomType.Builder - public static final class Builder { - private Integer id; - private @Nullable Integer retries; - public Builder() {} - public Builder(VirtualMachine2Clone defaults) { - Objects.requireNonNull(defaults); - this.id = defaults.id; - this.retries = defaults.retries; - } - - @CustomType.Setter - public Builder id(Integer id) { - if (id == null) { - throw new MissingRequiredPropertyException("VirtualMachine2Clone", "id"); - } - this.id = id; - return this; - } - @CustomType.Setter - public Builder retries(@Nullable Integer retries) { - - this.retries = retries; - return this; - } - public VirtualMachine2Clone build() { - final var _resultValue = new VirtualMachine2Clone(); - _resultValue.id = id; - _resultValue.retries = retries; - return _resultValue; - } - } -} diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachine2Cpu.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachine2Cpu.java index 97587466..c4464fd8 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachine2Cpu.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachine2Cpu.java @@ -20,7 +20,7 @@ public final class VirtualMachine2Cpu { */ private @Nullable String affinity; /** - * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. * */ private @Nullable String architecture; @@ -74,7 +74,7 @@ public Optional affinity() { return Optional.ofNullable(this.affinity); } /** - * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`affinity`" pulumi-lang-dotnet="`Affinity`" pulumi-lang-go="`affinity`" pulumi-lang-python="`affinity`" pulumi-lang-yaml="`affinity`" pulumi-lang-java="`affinity`">`affinity`</span> is only allowed for `root{@literal @}pam` authenticated user. + * @return The CPU architecture `<aarch64 | x86_64>` (defaults to the host). Setting <span pulumi-lang-nodejs="`architecture`" pulumi-lang-dotnet="`Architecture`" pulumi-lang-go="`architecture`" pulumi-lang-python="`architecture`" pulumi-lang-yaml="`architecture`" pulumi-lang-java="`architecture`">`architecture`</span> is only allowed for `root{@literal @}pam` authenticated user. * */ public Optional architecture() { diff --git a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachineDisk.java b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachineDisk.java index 527cc2cd..fd9a935a 100644 --- a/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachineDisk.java +++ b/sdk/java/src/main/java/io/muehlbachler/pulumi/proxmoxve/vm/outputs/VirtualMachineDisk.java @@ -51,14 +51,18 @@ public final class VirtualMachineDisk { /** * @return The file ID for a disk image when importing a disk into VM. The ID format is * `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. *Deprecated*, use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> instead. + * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Prefer <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> for uncompressed images. + * Use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with <span pulumi-lang-nodejs="`contentType " pulumi-lang-dotnet="`ContentType " pulumi-lang-go="`contentType " pulumi-lang-python="`content_type " pulumi-lang-yaml="`contentType " pulumi-lang-java="`contentType ">`content_type </span>= "iso"` and <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> set. See the + * Create a VM from a Cloud Image guide for examples. * */ private @Nullable String fileId; /** - * @return The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type. - * The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * @return The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type + * (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + * Can be also taken from <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Note: compressed images downloaded with + * <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> cannot use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span>; use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> instead. * */ private @Nullable String importFrom; @@ -161,16 +165,20 @@ public Optional fileFormat() { /** * @return The file ID for a disk image when importing a disk into VM. The ID format is * `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from - * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. *Deprecated*, use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> instead. + * <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Prefer <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span> for uncompressed images. + * Use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with <span pulumi-lang-nodejs="`contentType " pulumi-lang-dotnet="`ContentType " pulumi-lang-go="`contentType " pulumi-lang-python="`content_type " pulumi-lang-yaml="`contentType " pulumi-lang-java="`contentType ">`content_type </span>= "iso"` and <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> set. See the + * Create a VM from a Cloud Image guide for examples. * */ public Optional fileId() { return Optional.ofNullable(this.fileId); } /** - * @return The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type. - * The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * @return The file ID for a disk image to import into VM. The image must be of <span pulumi-lang-nodejs="`import`" pulumi-lang-dotnet="`Import`" pulumi-lang-go="`import`" pulumi-lang-python="`import`" pulumi-lang-yaml="`import`" pulumi-lang-java="`import`">`import`</span> content type + * (uncompressed images only). The ID format is `<datastore_id>:import/<file_name>`, for example `local:import/centos8.qcow2`. + * Can be also taken from <span pulumi-lang-nodejs="`proxmoxve.Download.File`" pulumi-lang-dotnet="`proxmoxve.Download.File`" pulumi-lang-go="`Download.File`" pulumi-lang-python="`Download.File`" pulumi-lang-yaml="`proxmoxve.Download.File`" pulumi-lang-java="`proxmoxve.Download.File`">`proxmoxve.Download.File`</span> resource. Note: compressed images downloaded with + * <span pulumi-lang-nodejs="`decompressionAlgorithm`" pulumi-lang-dotnet="`DecompressionAlgorithm`" pulumi-lang-go="`decompressionAlgorithm`" pulumi-lang-python="`decompression_algorithm`" pulumi-lang-yaml="`decompressionAlgorithm`" pulumi-lang-java="`decompressionAlgorithm`">`decompression_algorithm`</span> cannot use <span pulumi-lang-nodejs="`importFrom`" pulumi-lang-dotnet="`ImportFrom`" pulumi-lang-go="`importFrom`" pulumi-lang-python="`import_from`" pulumi-lang-yaml="`importFrom`" pulumi-lang-java="`importFrom`">`import_from`</span>; use <span pulumi-lang-nodejs="`fileId`" pulumi-lang-dotnet="`FileId`" pulumi-lang-go="`fileId`" pulumi-lang-python="`file_id`" pulumi-lang-yaml="`fileId`" pulumi-lang-java="`fileId`">`file_id`</span> instead. * */ public Optional importFrom() { diff --git a/sdk/nodejs/.pnp.cjs b/sdk/nodejs/.pnp.cjs index d64db2ed..357429f9 100755 --- a/sdk/nodejs/.pnp.cjs +++ b/sdk/nodejs/.pnp.cjs @@ -27,7 +27,7 @@ const RAW_RUNTIME_STATE = [null, {\ "packageLocation": "./",\ "packageDependencies": [\ - ["@pulumi/pulumi", "virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.212.0"],\ + ["@pulumi/pulumi", "virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.219.0"],\ ["@types/mime", "npm:2.0.3"],\ ["@types/node", "npm:10.17.60"],\ ["typescript", "patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587"]\ @@ -59,26 +59,31 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@isaacs/cliui", [\ - ["npm:8.0.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-10c0.zip/node_modules/@isaacs/cliui/",\ + ["@isaacs/balanced-match", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@isaacs-balanced-match-npm-4.0.1-8965afafe6-10c0.zip/node_modules/@isaacs/balanced-match/",\ "packageDependencies": [\ - ["@isaacs/cliui", "npm:8.0.2"],\ - ["string-width", "npm:5.1.2"],\ - ["string-width-cjs", [\ - "string-width",\ - "npm:4.2.3"\ - ]],\ - ["strip-ansi", "npm:7.1.2"],\ - ["strip-ansi-cjs", [\ - "strip-ansi",\ - "npm:6.0.1"\ - ]],\ - ["wrap-ansi", "npm:8.1.0"],\ - ["wrap-ansi-cjs", [\ - "wrap-ansi",\ - "npm:7.0.0"\ - ]]\ + ["@isaacs/balanced-match", "npm:4.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@isaacs/brace-expansion", [\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@isaacs-brace-expansion-npm-5.0.1-79f48d6db7-10c0.zip/node_modules/@isaacs/brace-expansion/",\ + "packageDependencies": [\ + ["@isaacs/brace-expansion", "npm:5.0.1"],\ + ["@isaacs/balanced-match", "npm:4.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@isaacs/fs-minipass", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@isaacs-fs-minipass-npm-4.0.1-677026e841-10c0.zip/node_modules/@isaacs/fs-minipass/",\ + "packageDependencies": [\ + ["@isaacs/fs-minipass", "npm:4.0.1"],\ + ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ @@ -115,7 +120,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./",\ "packageDependencies": [\ ["@muhlba91/pulumi-proxmoxve", "workspace:."],\ - ["@pulumi/pulumi", "virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.212.0"],\ + ["@pulumi/pulumi", "virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.219.0"],\ ["@types/mime", "npm:2.0.3"],\ ["@types/node", "npm:10.17.60"],\ ["typescript", "patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587"]\ @@ -124,203 +129,200 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@npmcli/agent", [\ - ["npm:2.2.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-agent-npm-2.2.2-e2f559d6c0-10c0.zip/node_modules/@npmcli/agent/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-agent-npm-4.0.0-502e5ae4f0-10c0.zip/node_modules/@npmcli/agent/",\ "packageDependencies": [\ - ["@npmcli/agent", "npm:2.2.2"],\ + ["@npmcli/agent", "npm:4.0.0"],\ ["agent-base", "npm:7.1.4"],\ ["http-proxy-agent", "npm:7.0.2"],\ ["https-proxy-agent", "npm:7.0.6"],\ - ["lru-cache", "npm:10.4.3"],\ + ["lru-cache", "npm:11.2.5"],\ ["socks-proxy-agent", "npm:8.0.5"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/arborist", [\ - ["npm:7.5.4", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-arborist-npm-7.5.4-34c4ae62bc-10c0.zip/node_modules/@npmcli/arborist/",\ + ["npm:9.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-arborist-npm-9.2.0-d8349f9ed8-10c0.zip/node_modules/@npmcli/arborist/",\ "packageDependencies": [\ - ["@npmcli/arborist", "npm:7.5.4"],\ + ["@npmcli/arborist", "npm:9.2.0"],\ ["@isaacs/string-locale-compare", "npm:1.1.0"],\ - ["@npmcli/fs", "npm:3.1.1"],\ - ["@npmcli/installed-package-contents", "npm:2.1.0"],\ - ["@npmcli/map-workspaces", "npm:3.0.6"],\ - ["@npmcli/metavuln-calculator", "npm:7.1.1"],\ - ["@npmcli/name-from-folder", "npm:2.0.0"],\ - ["@npmcli/node-gyp", "npm:3.0.0"],\ - ["@npmcli/package-json", "npm:5.2.1"],\ - ["@npmcli/query", "npm:3.1.0"],\ - ["@npmcli/redact", "npm:2.0.1"],\ - ["@npmcli/run-script", "npm:8.1.0"],\ - ["bin-links", "npm:4.0.4"],\ - ["cacache", "npm:18.0.4"],\ - ["common-ancestor-path", "npm:1.0.1"],\ - ["hosted-git-info", "npm:7.0.2"],\ - ["json-parse-even-better-errors", "npm:3.0.2"],\ + ["@npmcli/fs", "npm:5.0.0"],\ + ["@npmcli/installed-package-contents", "npm:4.0.0"],\ + ["@npmcli/map-workspaces", "npm:5.0.3"],\ + ["@npmcli/metavuln-calculator", "npm:9.0.3"],\ + ["@npmcli/name-from-folder", "npm:4.0.0"],\ + ["@npmcli/node-gyp", "npm:5.0.0"],\ + ["@npmcli/package-json", "npm:7.0.4"],\ + ["@npmcli/query", "npm:5.0.0"],\ + ["@npmcli/redact", "npm:4.0.0"],\ + ["@npmcli/run-script", "npm:10.0.3"],\ + ["bin-links", "npm:6.0.0"],\ + ["cacache", "npm:20.0.3"],\ + ["common-ancestor-path", "npm:2.0.0"],\ + ["hosted-git-info", "npm:9.0.2"],\ ["json-stringify-nice", "npm:1.1.4"],\ - ["lru-cache", "npm:10.4.3"],\ - ["minimatch", "npm:9.0.5"],\ - ["nopt", "npm:7.2.1"],\ - ["npm-install-checks", "npm:6.3.0"],\ - ["npm-package-arg", "npm:11.0.3"],\ - ["npm-pick-manifest", "npm:9.1.0"],\ - ["npm-registry-fetch", "npm:17.1.0"],\ - ["pacote", "npm:18.0.6"],\ - ["parse-conflict-json", "npm:3.0.1"],\ - ["proc-log", "npm:4.2.0"],\ - ["proggy", "npm:2.0.0"],\ + ["lru-cache", "npm:11.2.5"],\ + ["minimatch", "npm:10.1.2"],\ + ["nopt", "npm:9.0.0"],\ + ["npm-install-checks", "npm:8.0.0"],\ + ["npm-package-arg", "npm:13.0.2"],\ + ["npm-pick-manifest", "npm:11.0.3"],\ + ["npm-registry-fetch", "npm:19.1.1"],\ + ["pacote", "npm:21.2.0"],\ + ["parse-conflict-json", "npm:5.0.1"],\ + ["proc-log", "npm:6.1.0"],\ + ["proggy", "npm:4.0.0"],\ ["promise-all-reject-late", "npm:1.0.1"],\ ["promise-call-limit", "npm:3.0.2"],\ - ["read-package-json-fast", "npm:3.0.2"],\ - ["semver", "npm:7.7.3"],\ - ["ssri", "npm:10.0.6"],\ + ["semver", "npm:7.7.4"],\ + ["ssri", "npm:13.0.0"],\ ["treeverse", "npm:3.0.0"],\ - ["walk-up-path", "npm:3.0.1"]\ + ["walk-up-path", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/fs", [\ - ["npm:3.1.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-fs-npm-3.1.1-c19bd09f3c-10c0.zip/node_modules/@npmcli/fs/",\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-fs-npm-5.0.0-9d737ae2f3-10c0.zip/node_modules/@npmcli/fs/",\ "packageDependencies": [\ - ["@npmcli/fs", "npm:3.1.1"],\ - ["semver", "npm:7.7.3"]\ + ["@npmcli/fs", "npm:5.0.0"],\ + ["semver", "npm:7.7.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/git", [\ - ["npm:5.0.8", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-git-npm-5.0.8-f327e06825-10c0.zip/node_modules/@npmcli/git/",\ - "packageDependencies": [\ - ["@npmcli/git", "npm:5.0.8"],\ - ["@npmcli/promise-spawn", "npm:7.0.2"],\ - ["ini", "npm:4.1.3"],\ - ["lru-cache", "npm:10.4.3"],\ - ["npm-pick-manifest", "npm:9.1.0"],\ - ["proc-log", "npm:4.2.0"],\ - ["promise-inflight", "virtual:f327e06825271fbd1f8872cc997e35ed056c2f62f95d2e714b19fdcf8be1089e73740b97a9f852b61ff81422ed2b94476af671eb08408145709eb05039b24ebc#npm:1.0.1"],\ + ["npm:7.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-git-npm-7.0.1-c280d577f1-10c0.zip/node_modules/@npmcli/git/",\ + "packageDependencies": [\ + ["@npmcli/git", "npm:7.0.1"],\ + ["@npmcli/promise-spawn", "npm:9.0.1"],\ + ["ini", "npm:6.0.0"],\ + ["lru-cache", "npm:11.2.5"],\ + ["npm-pick-manifest", "npm:11.0.3"],\ + ["proc-log", "npm:6.1.0"],\ ["promise-retry", "npm:2.0.1"],\ - ["semver", "npm:7.7.3"],\ - ["which", "npm:4.0.0"]\ + ["semver", "npm:7.7.4"],\ + ["which", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/installed-package-contents", [\ - ["npm:2.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-installed-package-contents-npm-2.1.0-82f7020627-10c0.zip/node_modules/@npmcli/installed-package-contents/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-installed-package-contents-npm-4.0.0-6231d4194f-10c0.zip/node_modules/@npmcli/installed-package-contents/",\ "packageDependencies": [\ - ["@npmcli/installed-package-contents", "npm:2.1.0"],\ - ["npm-bundled", "npm:3.0.1"],\ - ["npm-normalize-package-bin", "npm:3.0.1"]\ + ["@npmcli/installed-package-contents", "npm:4.0.0"],\ + ["npm-bundled", "npm:5.0.0"],\ + ["npm-normalize-package-bin", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/map-workspaces", [\ - ["npm:3.0.6", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-map-workspaces-npm-3.0.6-dcaa328de8-10c0.zip/node_modules/@npmcli/map-workspaces/",\ + ["npm:5.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-map-workspaces-npm-5.0.3-6e148774e9-10c0.zip/node_modules/@npmcli/map-workspaces/",\ "packageDependencies": [\ - ["@npmcli/map-workspaces", "npm:3.0.6"],\ - ["@npmcli/name-from-folder", "npm:2.0.0"],\ - ["glob", "npm:10.5.0"],\ - ["minimatch", "npm:9.0.5"],\ - ["read-package-json-fast", "npm:3.0.2"]\ + ["@npmcli/map-workspaces", "npm:5.0.3"],\ + ["@npmcli/name-from-folder", "npm:4.0.0"],\ + ["@npmcli/package-json", "npm:7.0.4"],\ + ["glob", "npm:13.0.1"],\ + ["minimatch", "npm:10.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/metavuln-calculator", [\ - ["npm:7.1.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-metavuln-calculator-npm-7.1.1-392e62877e-10c0.zip/node_modules/@npmcli/metavuln-calculator/",\ + ["npm:9.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-metavuln-calculator-npm-9.0.3-1567408142-10c0.zip/node_modules/@npmcli/metavuln-calculator/",\ "packageDependencies": [\ - ["@npmcli/metavuln-calculator", "npm:7.1.1"],\ - ["cacache", "npm:18.0.4"],\ - ["json-parse-even-better-errors", "npm:3.0.2"],\ - ["pacote", "npm:18.0.6"],\ - ["proc-log", "npm:4.2.0"],\ - ["semver", "npm:7.7.3"]\ + ["@npmcli/metavuln-calculator", "npm:9.0.3"],\ + ["cacache", "npm:20.0.3"],\ + ["json-parse-even-better-errors", "npm:5.0.0"],\ + ["pacote", "npm:21.2.0"],\ + ["proc-log", "npm:6.1.0"],\ + ["semver", "npm:7.7.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/name-from-folder", [\ - ["npm:2.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-name-from-folder-npm-2.0.0-18e2dba870-10c0.zip/node_modules/@npmcli/name-from-folder/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-name-from-folder-npm-4.0.0-c17fde9c6e-10c0.zip/node_modules/@npmcli/name-from-folder/",\ "packageDependencies": [\ - ["@npmcli/name-from-folder", "npm:2.0.0"]\ + ["@npmcli/name-from-folder", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/node-gyp", [\ - ["npm:3.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-node-gyp-npm-3.0.0-b160a0116c-10c0.zip/node_modules/@npmcli/node-gyp/",\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-node-gyp-npm-5.0.0-e94e585358-10c0.zip/node_modules/@npmcli/node-gyp/",\ "packageDependencies": [\ - ["@npmcli/node-gyp", "npm:3.0.0"]\ + ["@npmcli/node-gyp", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/package-json", [\ - ["npm:5.2.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-package-json-npm-5.2.1-bca4abe5be-10c0.zip/node_modules/@npmcli/package-json/",\ - "packageDependencies": [\ - ["@npmcli/package-json", "npm:5.2.1"],\ - ["@npmcli/git", "npm:5.0.8"],\ - ["glob", "npm:10.5.0"],\ - ["hosted-git-info", "npm:7.0.2"],\ - ["json-parse-even-better-errors", "npm:3.0.2"],\ - ["normalize-package-data", "npm:6.0.2"],\ - ["proc-log", "npm:4.2.0"],\ - ["semver", "npm:7.7.3"]\ + ["npm:7.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-package-json-npm-7.0.4-f39b5ccb9e-10c0.zip/node_modules/@npmcli/package-json/",\ + "packageDependencies": [\ + ["@npmcli/package-json", "npm:7.0.4"],\ + ["@npmcli/git", "npm:7.0.1"],\ + ["glob", "npm:13.0.1"],\ + ["hosted-git-info", "npm:9.0.2"],\ + ["json-parse-even-better-errors", "npm:5.0.0"],\ + ["proc-log", "npm:6.1.0"],\ + ["semver", "npm:7.7.4"],\ + ["validate-npm-package-license", "npm:3.0.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/promise-spawn", [\ - ["npm:7.0.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-promise-spawn-npm-7.0.2-643915b5c0-10c0.zip/node_modules/@npmcli/promise-spawn/",\ + ["npm:9.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-promise-spawn-npm-9.0.1-d8e0669e23-10c0.zip/node_modules/@npmcli/promise-spawn/",\ "packageDependencies": [\ - ["@npmcli/promise-spawn", "npm:7.0.2"],\ - ["which", "npm:4.0.0"]\ + ["@npmcli/promise-spawn", "npm:9.0.1"],\ + ["which", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/query", [\ - ["npm:3.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-query-npm-3.1.0-88f6486c5b-10c0.zip/node_modules/@npmcli/query/",\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-query-npm-5.0.0-ec11e9706d-10c0.zip/node_modules/@npmcli/query/",\ "packageDependencies": [\ - ["@npmcli/query", "npm:3.1.0"],\ - ["postcss-selector-parser", "npm:6.1.2"]\ + ["@npmcli/query", "npm:5.0.0"],\ + ["postcss-selector-parser", "npm:7.1.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/redact", [\ - ["npm:2.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-redact-npm-2.0.1-aabc2eefef-10c0.zip/node_modules/@npmcli/redact/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-redact-npm-4.0.0-b3e2eeb8d8-10c0.zip/node_modules/@npmcli/redact/",\ "packageDependencies": [\ - ["@npmcli/redact", "npm:2.0.1"]\ + ["@npmcli/redact", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@npmcli/run-script", [\ - ["npm:8.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@npmcli-run-script-npm-8.1.0-e82d9acd40-10c0.zip/node_modules/@npmcli/run-script/",\ + ["npm:10.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/@npmcli-run-script-npm-10.0.3-b818b0ebc7-10c0.zip/node_modules/@npmcli/run-script/",\ "packageDependencies": [\ - ["@npmcli/run-script", "npm:8.1.0"],\ - ["@npmcli/node-gyp", "npm:3.0.0"],\ - ["@npmcli/package-json", "npm:5.2.1"],\ - ["@npmcli/promise-spawn", "npm:7.0.2"],\ - ["node-gyp", "npm:10.3.1"],\ - ["proc-log", "npm:4.2.0"],\ - ["which", "npm:4.0.0"]\ + ["@npmcli/run-script", "npm:10.0.3"],\ + ["@npmcli/node-gyp", "npm:5.0.0"],\ + ["@npmcli/package-json", "npm:7.0.4"],\ + ["@npmcli/promise-spawn", "npm:9.0.1"],\ + ["node-gyp", "npm:12.2.0"],\ + ["proc-log", "npm:6.1.0"],\ + ["which", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -352,10 +354,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-context-async-hooks-virtual-d98a1b3583/5/.yarn/berry/cache/@opentelemetry-context-async-hooks-npm-1.30.1-6c85d1d7e3-10c0.zip/node_modules/@opentelemetry/context-async-hooks/",\ + ["virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-context-async-hooks-virtual-1a0ca1ce80/5/.yarn/berry/cache/@opentelemetry-context-async-hooks-npm-1.30.1-6c85d1d7e3-10c0.zip/node_modules/@opentelemetry/context-async-hooks/",\ "packageDependencies": [\ - ["@opentelemetry/context-async-hooks", "virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1"],\ + ["@opentelemetry/context-async-hooks", "virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ ["@types/opentelemetry__api", null]\ ],\ @@ -374,10 +376,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-core-virtual-9aa957d407/5/.yarn/berry/cache/@opentelemetry-core-npm-1.30.1-6bab40a361-10c0.zip/node_modules/@opentelemetry/core/",\ + ["virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-core-virtual-980c8ae17a/5/.yarn/berry/cache/@opentelemetry-core-npm-1.30.1-6bab40a361-10c0.zip/node_modules/@opentelemetry/core/",\ "packageDependencies": [\ - ["@opentelemetry/core", "virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1"],\ + ["@opentelemetry/core", "virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ ["@opentelemetry/semantic-conventions", "npm:1.28.0"],\ ["@types/opentelemetry__api", null]\ @@ -397,14 +399,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-exporter-zipkin-virtual-454474fed4/5/.yarn/berry/cache/@opentelemetry-exporter-zipkin-npm-1.30.1-2b7dd3bbbe-10c0.zip/node_modules/@opentelemetry/exporter-zipkin/",\ + ["virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-exporter-zipkin-virtual-c457bdb066/5/.yarn/berry/cache/@opentelemetry-exporter-zipkin-npm-1.30.1-2b7dd3bbbe-10c0.zip/node_modules/@opentelemetry/exporter-zipkin/",\ "packageDependencies": [\ - ["@opentelemetry/exporter-zipkin", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/exporter-zipkin", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/core", "virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1"],\ - ["@opentelemetry/resources", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ - ["@opentelemetry/sdk-trace-base", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/core", "virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1"],\ + ["@opentelemetry/resources", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ + ["@opentelemetry/sdk-trace-base", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@opentelemetry/semantic-conventions", "npm:1.28.0"],\ ["@types/opentelemetry__api", null]\ ],\ @@ -423,17 +425,17 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:0.55.0", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-instrumentation-virtual-58740cb337/5/.yarn/berry/cache/@opentelemetry-instrumentation-npm-0.55.0-55c76601fc-10c0.zip/node_modules/@opentelemetry/instrumentation/",\ + ["virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:0.55.0", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-instrumentation-virtual-f3ccc3d5cf/5/.yarn/berry/cache/@opentelemetry-instrumentation-npm-0.55.0-55c76601fc-10c0.zip/node_modules/@opentelemetry/instrumentation/",\ "packageDependencies": [\ - ["@opentelemetry/instrumentation", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:0.55.0"],\ + ["@opentelemetry/instrumentation", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:0.55.0"],\ ["@opentelemetry/api", "npm:1.9.0"],\ ["@opentelemetry/api-logs", "npm:0.55.0"],\ ["@types/opentelemetry__api", null],\ ["@types/shimmer", "npm:1.2.0"],\ ["import-in-the-middle", "npm:1.15.0"],\ ["require-in-the-middle", "npm:7.5.2"],\ - ["semver", "npm:7.7.3"],\ + ["semver", "npm:7.7.4"],\ ["shimmer", "npm:1.2.1"]\ ],\ "packagePeers": [\ @@ -451,12 +453,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:0.55.0", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-instrumentation-grpc-virtual-2eb4be2ed1/5/.yarn/berry/cache/@opentelemetry-instrumentation-grpc-npm-0.55.0-027ddaac0a-10c0.zip/node_modules/@opentelemetry/instrumentation-grpc/",\ + ["virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:0.55.0", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-instrumentation-grpc-virtual-6dbe36623f/5/.yarn/berry/cache/@opentelemetry-instrumentation-grpc-npm-0.55.0-027ddaac0a-10c0.zip/node_modules/@opentelemetry/instrumentation-grpc/",\ "packageDependencies": [\ - ["@opentelemetry/instrumentation-grpc", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:0.55.0"],\ + ["@opentelemetry/instrumentation-grpc", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:0.55.0"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/instrumentation", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:0.55.0"],\ + ["@opentelemetry/instrumentation", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:0.55.0"],\ ["@opentelemetry/semantic-conventions", "npm:1.27.0"],\ ["@types/opentelemetry__api", null]\ ],\ @@ -475,12 +477,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-propagator-b3-virtual-390df636d5/5/.yarn/berry/cache/@opentelemetry-propagator-b3-npm-1.30.1-590a976998-10c0.zip/node_modules/@opentelemetry/propagator-b3/",\ + ["virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-propagator-b3-virtual-21448a7b8a/5/.yarn/berry/cache/@opentelemetry-propagator-b3-npm-1.30.1-590a976998-10c0.zip/node_modules/@opentelemetry/propagator-b3/",\ "packageDependencies": [\ - ["@opentelemetry/propagator-b3", "virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1"],\ + ["@opentelemetry/propagator-b3", "virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/core", "virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1"],\ + ["@opentelemetry/core", "virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1"],\ ["@types/opentelemetry__api", null]\ ],\ "packagePeers": [\ @@ -498,12 +500,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-propagator-jaeger-virtual-0f4954f8be/5/.yarn/berry/cache/@opentelemetry-propagator-jaeger-npm-1.30.1-7b2134bf11-10c0.zip/node_modules/@opentelemetry/propagator-jaeger/",\ + ["virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-propagator-jaeger-virtual-5f6377f780/5/.yarn/berry/cache/@opentelemetry-propagator-jaeger-npm-1.30.1-7b2134bf11-10c0.zip/node_modules/@opentelemetry/propagator-jaeger/",\ "packageDependencies": [\ - ["@opentelemetry/propagator-jaeger", "virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1"],\ + ["@opentelemetry/propagator-jaeger", "virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/core", "virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1"],\ + ["@opentelemetry/core", "virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1"],\ ["@types/opentelemetry__api", null]\ ],\ "packagePeers": [\ @@ -521,12 +523,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-resources-virtual-bf7dade00d/5/.yarn/berry/cache/@opentelemetry-resources-npm-1.30.1-1afce2cc97-10c0.zip/node_modules/@opentelemetry/resources/",\ + ["virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-resources-virtual-5e23ef71ab/5/.yarn/berry/cache/@opentelemetry-resources-npm-1.30.1-1afce2cc97-10c0.zip/node_modules/@opentelemetry/resources/",\ "packageDependencies": [\ - ["@opentelemetry/resources", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/resources", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/core", "virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1"],\ + ["@opentelemetry/core", "virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1"],\ ["@opentelemetry/semantic-conventions", "npm:1.28.0"],\ ["@types/opentelemetry__api", null]\ ],\ @@ -545,13 +547,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-sdk-trace-base-virtual-294ba34dcb/5/.yarn/berry/cache/@opentelemetry-sdk-trace-base-npm-1.30.1-6263d5195f-10c0.zip/node_modules/@opentelemetry/sdk-trace-base/",\ + ["virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-sdk-trace-base-virtual-e80387b452/5/.yarn/berry/cache/@opentelemetry-sdk-trace-base-npm-1.30.1-6263d5195f-10c0.zip/node_modules/@opentelemetry/sdk-trace-base/",\ "packageDependencies": [\ - ["@opentelemetry/sdk-trace-base", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/sdk-trace-base", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/core", "virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1"],\ - ["@opentelemetry/resources", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/core", "virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1"],\ + ["@opentelemetry/resources", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@opentelemetry/semantic-conventions", "npm:1.28.0"],\ ["@types/opentelemetry__api", null]\ ],\ @@ -570,18 +572,18 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1", {\ - "packageLocation": "./.yarn/__virtual__/@opentelemetry-sdk-trace-node-virtual-5f02ee24f3/5/.yarn/berry/cache/@opentelemetry-sdk-trace-node-npm-1.30.1-6bc52726d5-10c0.zip/node_modules/@opentelemetry/sdk-trace-node/",\ + ["virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1", {\ + "packageLocation": "./.yarn/__virtual__/@opentelemetry-sdk-trace-node-virtual-76a61741a7/5/.yarn/berry/cache/@opentelemetry-sdk-trace-node-npm-1.30.1-6bc52726d5-10c0.zip/node_modules/@opentelemetry/sdk-trace-node/",\ "packageDependencies": [\ - ["@opentelemetry/sdk-trace-node", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/sdk-trace-node", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/context-async-hooks", "virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1"],\ - ["@opentelemetry/core", "virtual:454474fed4c1a06d0ad6b91c528da7a3d2d74965c905fefab700f04ce5c15bb0b13da34c4327662576ebc40d610d704e97ced7fcea6dfbc240ebae0bc8c848cb#npm:1.30.1"],\ - ["@opentelemetry/propagator-b3", "virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1"],\ - ["@opentelemetry/propagator-jaeger", "virtual:5f02ee24f3cb99c4427b539ce2379c70cadab77f7ec713d9a61c957497c4b1e2bde622c2feb3058f7dd100a9ca0bafece5cd2fc69f5733e370c56826c643d3a4#npm:1.30.1"],\ - ["@opentelemetry/sdk-trace-base", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/context-async-hooks", "virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1"],\ + ["@opentelemetry/core", "virtual:c457bdb066e9e0df3787a8b64b3196fccebb3ae041f4cbf80169a7069601fe47efe25b06849ceef843cf2fad934de12cf4dabdafa7511ce054c0c7eeb08ee08c#npm:1.30.1"],\ + ["@opentelemetry/propagator-b3", "virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1"],\ + ["@opentelemetry/propagator-jaeger", "virtual:76a61741a7d5c1558630426ee7aaac103dafba2a7f734c4e07345e9ff059ed50e254405593b1c57ca401a965b170ee3327c4cef0f96f504964936dab0ad5f59e#npm:1.30.1"],\ + ["@opentelemetry/sdk-trace-base", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@types/opentelemetry__api", null],\ - ["semver", "npm:7.7.3"]\ + ["semver", "npm:7.7.4"]\ ],\ "packagePeers": [\ "@opentelemetry/api",\ @@ -606,15 +608,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@pkgjs/parseargs", [\ - ["npm:0.11.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-10c0.zip/node_modules/@pkgjs/parseargs/",\ - "packageDependencies": [\ - ["@pkgjs/parseargs", "npm:0.11.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["@protobufjs/aspromise", [\ ["npm:1.1.2", {\ "packageLocation": "../../../../.yarn/berry/cache/@protobufjs-aspromise-npm-1.1.2-71d00b938f-10c0.zip/node_modules/@protobufjs/aspromise/",\ @@ -708,44 +701,44 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@pulumi/pulumi", [\ - ["npm:3.212.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@pulumi-pulumi-npm-3.212.0-cfd3119426-10c0.zip/node_modules/@pulumi/pulumi/",\ + ["npm:3.219.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@pulumi-pulumi-npm-3.219.0-bad7955955-10c0.zip/node_modules/@pulumi/pulumi/",\ "packageDependencies": [\ - ["@pulumi/pulumi", "npm:3.212.0"]\ + ["@pulumi/pulumi", "npm:3.219.0"]\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.212.0", {\ - "packageLocation": "./.yarn/__virtual__/@pulumi-pulumi-virtual-a04dca9a07/5/.yarn/berry/cache/@pulumi-pulumi-npm-3.212.0-cfd3119426-10c0.zip/node_modules/@pulumi/pulumi/",\ + ["virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.219.0", {\ + "packageLocation": "./.yarn/__virtual__/@pulumi-pulumi-virtual-909484a05a/5/.yarn/berry/cache/@pulumi-pulumi-npm-3.219.0-bad7955955-10c0.zip/node_modules/@pulumi/pulumi/",\ "packageDependencies": [\ - ["@pulumi/pulumi", "virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.212.0"],\ + ["@pulumi/pulumi", "virtual:e3ea5596057613f291e16aefd182df0dffbcd648afc59958478e10ea0ea51a3f83e06f13f67e87917b0e48034bc768eb4bbff7fe0fb77981a25950767a2254e6#npm:3.219.0"],\ ["@grpc/grpc-js", "npm:1.14.3"],\ ["@logdna/tail-file", "npm:2.2.0"],\ - ["@npmcli/arborist", "npm:7.5.4"],\ + ["@npmcli/arborist", "npm:9.2.0"],\ ["@opentelemetry/api", "npm:1.9.0"],\ - ["@opentelemetry/exporter-zipkin", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ - ["@opentelemetry/instrumentation", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:0.55.0"],\ - ["@opentelemetry/instrumentation-grpc", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:0.55.0"],\ - ["@opentelemetry/resources", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ - ["@opentelemetry/sdk-trace-base", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ - ["@opentelemetry/sdk-trace-node", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:1.30.1"],\ + ["@opentelemetry/exporter-zipkin", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ + ["@opentelemetry/instrumentation", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:0.55.0"],\ + ["@opentelemetry/instrumentation-grpc", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:0.55.0"],\ + ["@opentelemetry/resources", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ + ["@opentelemetry/sdk-trace-base", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ + ["@opentelemetry/sdk-trace-node", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:1.30.1"],\ ["@types/google-protobuf", "npm:3.15.12"],\ ["@types/semver", "npm:7.7.1"],\ ["@types/tmp", "npm:0.2.6"],\ ["@types/ts-node", null],\ ["@types/typescript", null],\ ["execa", "npm:5.1.1"],\ - ["fdir", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:6.5.0"],\ + ["fdir", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:6.5.0"],\ ["google-protobuf", "npm:3.21.4"],\ ["got", "npm:11.8.6"],\ ["ini", "npm:2.0.0"],\ ["js-yaml", "npm:3.14.2"],\ ["minimist", "npm:1.2.8"],\ ["normalize-package-data", "npm:6.0.2"],\ - ["package-directory", "npm:8.1.0"],\ + ["package-directory", "npm:8.2.0"],\ ["picomatch", "npm:3.0.1"],\ ["require-from-string", "npm:2.0.2"],\ - ["semver", "npm:7.7.3"],\ + ["semver", "npm:7.7.4"],\ ["source-map-support", "npm:0.5.21"],\ ["tmp", "npm:0.2.5"],\ ["ts-node", null],\ @@ -762,67 +755,67 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@sigstore/bundle", [\ - ["npm:2.3.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/@sigstore-bundle-npm-2.3.2-ce9028d56c-10c0.zip/node_modules/@sigstore/bundle/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@sigstore-bundle-npm-4.0.0-89fd941c52-10c0.zip/node_modules/@sigstore/bundle/",\ "packageDependencies": [\ - ["@sigstore/bundle", "npm:2.3.2"],\ - ["@sigstore/protobuf-specs", "npm:0.3.3"]\ + ["@sigstore/bundle", "npm:4.0.0"],\ + ["@sigstore/protobuf-specs", "npm:0.5.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sigstore/core", [\ - ["npm:1.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/@sigstore-core-npm-1.1.0-44b420f972-10c0.zip/node_modules/@sigstore/core/",\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@sigstore-core-npm-3.1.0-f44e85e3b4-10c0.zip/node_modules/@sigstore/core/",\ "packageDependencies": [\ - ["@sigstore/core", "npm:1.1.0"]\ + ["@sigstore/core", "npm:3.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sigstore/protobuf-specs", [\ - ["npm:0.3.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/@sigstore-protobuf-specs-npm-0.3.3-6aba7d84e5-10c0.zip/node_modules/@sigstore/protobuf-specs/",\ + ["npm:0.5.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@sigstore-protobuf-specs-npm-0.5.0-d73a48735e-10c0.zip/node_modules/@sigstore/protobuf-specs/",\ "packageDependencies": [\ - ["@sigstore/protobuf-specs", "npm:0.3.3"]\ + ["@sigstore/protobuf-specs", "npm:0.5.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sigstore/sign", [\ - ["npm:2.3.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/@sigstore-sign-npm-2.3.2-2c1302c9b4-10c0.zip/node_modules/@sigstore/sign/",\ - "packageDependencies": [\ - ["@sigstore/sign", "npm:2.3.2"],\ - ["@sigstore/bundle", "npm:2.3.2"],\ - ["@sigstore/core", "npm:1.1.0"],\ - ["@sigstore/protobuf-specs", "npm:0.3.3"],\ - ["make-fetch-happen", "npm:13.0.1"],\ - ["proc-log", "npm:4.2.0"],\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@sigstore-sign-npm-4.1.0-63a85b0d9f-10c0.zip/node_modules/@sigstore/sign/",\ + "packageDependencies": [\ + ["@sigstore/sign", "npm:4.1.0"],\ + ["@sigstore/bundle", "npm:4.0.0"],\ + ["@sigstore/core", "npm:3.1.0"],\ + ["@sigstore/protobuf-specs", "npm:0.5.0"],\ + ["make-fetch-happen", "npm:15.0.3"],\ + ["proc-log", "npm:6.1.0"],\ ["promise-retry", "npm:2.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sigstore/tuf", [\ - ["npm:2.3.4", {\ - "packageLocation": "../../../../.yarn/berry/cache/@sigstore-tuf-npm-2.3.4-a77c728ae9-10c0.zip/node_modules/@sigstore/tuf/",\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@sigstore-tuf-npm-4.0.1-01a069ecac-10c0.zip/node_modules/@sigstore/tuf/",\ "packageDependencies": [\ - ["@sigstore/tuf", "npm:2.3.4"],\ - ["@sigstore/protobuf-specs", "npm:0.3.3"],\ - ["tuf-js", "npm:2.2.1"]\ + ["@sigstore/tuf", "npm:4.0.1"],\ + ["@sigstore/protobuf-specs", "npm:0.5.0"],\ + ["tuf-js", "npm:4.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["@sigstore/verify", [\ - ["npm:1.2.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/@sigstore-verify-npm-1.2.1-f2cb932ce3-10c0.zip/node_modules/@sigstore/verify/",\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@sigstore-verify-npm-3.1.0-bb4bf8821b-10c0.zip/node_modules/@sigstore/verify/",\ "packageDependencies": [\ - ["@sigstore/verify", "npm:1.2.1"],\ - ["@sigstore/bundle", "npm:2.3.2"],\ - ["@sigstore/core", "npm:1.1.0"],\ - ["@sigstore/protobuf-specs", "npm:0.3.3"]\ + ["@sigstore/verify", "npm:3.1.0"],\ + ["@sigstore/bundle", "npm:4.0.0"],\ + ["@sigstore/core", "npm:3.1.0"],\ + ["@sigstore/protobuf-specs", "npm:0.5.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -856,12 +849,12 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@tufjs/models", [\ - ["npm:2.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/@tufjs-models-npm-2.0.1-39153b9fec-10c0.zip/node_modules/@tufjs/models/",\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@tufjs-models-npm-4.1.0-771963a1bc-10c0.zip/node_modules/@tufjs/models/",\ "packageDependencies": [\ - ["@tufjs/models", "npm:2.0.1"],\ + ["@tufjs/models", "npm:4.1.0"],\ ["@tufjs/canonical-json", "npm:2.0.0"],\ - ["minimatch", "npm:9.0.5"]\ + ["minimatch", "npm:10.1.2"]\ ],\ "linkType": "HARD"\ }]\ @@ -871,9 +864,9 @@ const RAW_RUNTIME_STATE = "packageLocation": "../../../../.yarn/berry/cache/@types-cacheable-request-npm-6.0.3-770619032a-10c0.zip/node_modules/@types/cacheable-request/",\ "packageDependencies": [\ ["@types/cacheable-request", "npm:6.0.3"],\ - ["@types/http-cache-semantics", "npm:4.0.4"],\ + ["@types/http-cache-semantics", "npm:4.2.0"],\ ["@types/keyv", "npm:3.1.4"],\ - ["@types/node", "npm:25.0.1"],\ + ["@types/node", "npm:25.2.1"],\ ["@types/responselike", "npm:1.0.3"]\ ],\ "linkType": "HARD"\ @@ -889,10 +882,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@types/http-cache-semantics", [\ - ["npm:4.0.4", {\ - "packageLocation": "../../../../.yarn/berry/cache/@types-http-cache-semantics-npm-4.0.4-6d4f413ddd-10c0.zip/node_modules/@types/http-cache-semantics/",\ + ["npm:4.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-http-cache-semantics-npm-4.2.0-e5da51ac6d-10c0.zip/node_modules/@types/http-cache-semantics/",\ "packageDependencies": [\ - ["@types/http-cache-semantics", "npm:4.0.4"]\ + ["@types/http-cache-semantics", "npm:4.2.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -902,7 +895,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "../../../../.yarn/berry/cache/@types-keyv-npm-3.1.4-a8082ea56b-10c0.zip/node_modules/@types/keyv/",\ "packageDependencies": [\ ["@types/keyv", "npm:3.1.4"],\ - ["@types/node", "npm:25.0.1"]\ + ["@types/node", "npm:25.2.1"]\ ],\ "linkType": "HARD"\ }]\ @@ -924,10 +917,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["npm:25.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/@types-node-npm-25.0.1-f378856e31-10c0.zip/node_modules/@types/node/",\ + ["npm:25.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-node-npm-25.2.1-a138d77c79-10c0.zip/node_modules/@types/node/",\ "packageDependencies": [\ - ["@types/node", "npm:25.0.1"],\ + ["@types/node", "npm:25.2.1"],\ ["undici-types", "npm:7.16.0"]\ ],\ "linkType": "HARD"\ @@ -938,7 +931,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "../../../../.yarn/berry/cache/@types-responselike-npm-1.0.3-de0150f03d-10c0.zip/node_modules/@types/responselike/",\ "packageDependencies": [\ ["@types/responselike", "npm:1.0.3"],\ - ["@types/node", "npm:25.0.1"]\ + ["@types/node", "npm:25.2.1"]\ ],\ "linkType": "HARD"\ }]\ @@ -971,10 +964,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["abbrev", [\ - ["npm:2.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/abbrev-npm-2.0.0-0eb38a17e5-10c0.zip/node_modules/abbrev/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/abbrev-npm-4.0.0-7d848a1ef0-10c0.zip/node_modules/abbrev/",\ "packageDependencies": [\ - ["abbrev", "npm:2.0.0"]\ + ["abbrev", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1019,17 +1012,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["aggregate-error", [\ - ["npm:3.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/aggregate-error-npm-3.1.0-415a406f4e-10c0.zip/node_modules/aggregate-error/",\ - "packageDependencies": [\ - ["aggregate-error", "npm:3.1.0"],\ - ["clean-stack", "npm:2.2.0"],\ - ["indent-string", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["ansi-regex", [\ ["npm:5.0.1", {\ "packageLocation": "../../../../.yarn/berry/cache/ansi-regex-npm-5.0.1-c963a48615-10c0.zip/node_modules/ansi-regex/",\ @@ -1037,13 +1019,6 @@ const RAW_RUNTIME_STATE = ["ansi-regex", "npm:5.0.1"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:6.2.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/ansi-regex-npm-6.2.2-f2d6691eb1-10c0.zip/node_modules/ansi-regex/",\ - "packageDependencies": [\ - ["ansi-regex", "npm:6.2.2"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["ansi-styles", [\ @@ -1054,13 +1029,6 @@ const RAW_RUNTIME_STATE = ["color-convert", "npm:2.0.1"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:6.2.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/ansi-styles-npm-6.2.3-6fc7ca2bf5-10c0.zip/node_modules/ansi-styles/",\ - "packageDependencies": [\ - ["ansi-styles", "npm:6.2.3"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["argparse", [\ @@ -1073,34 +1041,16 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["balanced-match", [\ - ["npm:1.0.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/balanced-match-npm-1.0.2-a53c126459-10c0.zip/node_modules/balanced-match/",\ - "packageDependencies": [\ - ["balanced-match", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["bin-links", [\ - ["npm:4.0.4", {\ - "packageLocation": "../../../../.yarn/berry/cache/bin-links-npm-4.0.4-d69a54d1b0-10c0.zip/node_modules/bin-links/",\ - "packageDependencies": [\ - ["bin-links", "npm:4.0.4"],\ - ["cmd-shim", "npm:6.0.3"],\ - ["npm-normalize-package-bin", "npm:3.0.1"],\ - ["read-cmd-shim", "npm:4.0.0"],\ - ["write-file-atomic", "npm:5.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["brace-expansion", [\ - ["npm:2.0.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/brace-expansion-npm-2.0.2-bc7f134bbc-10c0.zip/node_modules/brace-expansion/",\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/bin-links-npm-6.0.0-8366c5499a-10c0.zip/node_modules/bin-links/",\ "packageDependencies": [\ - ["brace-expansion", "npm:2.0.2"],\ - ["balanced-match", "npm:1.0.2"]\ + ["bin-links", "npm:6.0.0"],\ + ["cmd-shim", "npm:8.0.0"],\ + ["npm-normalize-package-bin", "npm:5.0.0"],\ + ["proc-log", "npm:6.1.0"],\ + ["read-cmd-shim", "npm:6.0.0"],\ + ["write-file-atomic", "npm:7.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1115,22 +1065,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["cacache", [\ - ["npm:18.0.4", {\ - "packageLocation": "../../../../.yarn/berry/cache/cacache-npm-18.0.4-3dc4edc849-10c0.zip/node_modules/cacache/",\ + ["npm:20.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/cacache-npm-20.0.3-5f244d5bdd-10c0.zip/node_modules/cacache/",\ "packageDependencies": [\ - ["cacache", "npm:18.0.4"],\ - ["@npmcli/fs", "npm:3.1.1"],\ + ["cacache", "npm:20.0.3"],\ + ["@npmcli/fs", "npm:5.0.0"],\ ["fs-minipass", "npm:3.0.3"],\ - ["glob", "npm:10.5.0"],\ - ["lru-cache", "npm:10.4.3"],\ + ["glob", "npm:13.0.1"],\ + ["lru-cache", "npm:11.2.5"],\ ["minipass", "npm:7.1.2"],\ ["minipass-collect", "npm:2.0.1"],\ ["minipass-flush", "npm:1.0.5"],\ ["minipass-pipeline", "npm:1.2.4"],\ - ["p-map", "npm:4.0.0"],\ - ["ssri", "npm:10.0.6"],\ - ["tar", "npm:6.2.1"],\ - ["unique-filename", "npm:3.0.0"]\ + ["p-map", "npm:7.0.4"],\ + ["ssri", "npm:13.0.0"],\ + ["unique-filename", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1161,10 +1110,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["chownr", [\ - ["npm:2.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/chownr-npm-2.0.0-638f1c9c61-10c0.zip/node_modules/chownr/",\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/chownr-npm-3.0.0-5275e85d25-10c0.zip/node_modules/chownr/",\ "packageDependencies": [\ - ["chownr", "npm:2.0.0"]\ + ["chownr", "npm:3.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1178,15 +1127,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["clean-stack", [\ - ["npm:2.2.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/clean-stack-npm-2.2.0-a8ce435a5c-10c0.zip/node_modules/clean-stack/",\ - "packageDependencies": [\ - ["clean-stack", "npm:2.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["cliui", [\ ["npm:8.0.1", {\ "packageLocation": "../../../../.yarn/berry/cache/cliui-npm-8.0.1-3b029092cf-10c0.zip/node_modules/cliui/",\ @@ -1210,10 +1150,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["cmd-shim", [\ - ["npm:6.0.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/cmd-shim-npm-6.0.3-88c8f0cd90-10c0.zip/node_modules/cmd-shim/",\ + ["npm:8.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/cmd-shim-npm-8.0.0-eb2281f05f-10c0.zip/node_modules/cmd-shim/",\ "packageDependencies": [\ - ["cmd-shim", "npm:6.0.3"]\ + ["cmd-shim", "npm:8.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1238,10 +1178,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["common-ancestor-path", [\ - ["npm:1.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/common-ancestor-path-npm-1.0.1-27534e68da-10c0.zip/node_modules/common-ancestor-path/",\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/common-ancestor-path-npm-2.0.0-6c4db19272-10c0.zip/node_modules/common-ancestor-path/",\ "packageDependencies": [\ - ["common-ancestor-path", "npm:1.0.1"]\ + ["common-ancestor-path", "npm:2.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1309,15 +1249,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["eastasianwidth", [\ - ["npm:0.2.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-10c0.zip/node_modules/eastasianwidth/",\ - "packageDependencies": [\ - ["eastasianwidth", "npm:0.2.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["emoji-regex", [\ ["npm:8.0.0", {\ "packageLocation": "../../../../.yarn/berry/cache/emoji-regex-npm-8.0.0-213764015c-10c0.zip/node_modules/emoji-regex/",\ @@ -1325,13 +1256,6 @@ const RAW_RUNTIME_STATE = ["emoji-regex", "npm:8.0.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:9.2.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/emoji-regex-npm-9.2.2-e6fac8d058-10c0.zip/node_modules/emoji-regex/",\ - "packageDependencies": [\ - ["emoji-regex", "npm:9.2.2"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["encoding", [\ @@ -1425,10 +1349,23 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:6.5.0", {\ - "packageLocation": "./.yarn/__virtual__/fdir-virtual-b8514afbdc/5/.yarn/berry/cache/fdir-npm-6.5.0-8814a0dec7-10c0.zip/node_modules/fdir/",\ + ["virtual:0e783aadbd2b4b8e6f6056033c0b290501892d23bc7c5dad5477e00e48ad8bd3e4434c3962a52dd75a58e06dbb7218094a494bac954ef2f7f6fdb65d9717e5f4#npm:6.5.0", {\ + "packageLocation": "./.yarn/__virtual__/fdir-virtual-abd4ab2082/5/.yarn/berry/cache/fdir-npm-6.5.0-8814a0dec7-10c0.zip/node_modules/fdir/",\ "packageDependencies": [\ - ["fdir", "virtual:a04dca9a07185895f5359490a9561161d41ad58498c7c97976e9ace546d3518249a43fe35b1c9f7277a86bde9be203013d7dc125f2242499375ffff41343fdf2#npm:6.5.0"],\ + ["fdir", "virtual:0e783aadbd2b4b8e6f6056033c0b290501892d23bc7c5dad5477e00e48ad8bd3e4434c3962a52dd75a58e06dbb7218094a494bac954ef2f7f6fdb65d9717e5f4#npm:6.5.0"],\ + ["@types/picomatch", null],\ + ["picomatch", "npm:4.0.3"]\ + ],\ + "packagePeers": [\ + "@types/picomatch",\ + "picomatch"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:6.5.0", {\ + "packageLocation": "./.yarn/__virtual__/fdir-virtual-d12f8abc8b/5/.yarn/berry/cache/fdir-npm-6.5.0-8814a0dec7-10c0.zip/node_modules/fdir/",\ + "packageDependencies": [\ + ["fdir", "virtual:909484a05a9af919acdf10fb470c51aa5caec15605b352cd34a08e470e8f8f97da7fff7ac069818f4df14d9b7b2910598fb6a1da45440f326958d10acf62b912#npm:6.5.0"],\ ["@types/picomatch", null],\ ["picomatch", "npm:3.0.1"]\ ],\ @@ -1448,26 +1385,7 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["foreground-child", [\ - ["npm:3.3.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/foreground-child-npm-3.3.1-b7775fda04-10c0.zip/node_modules/foreground-child/",\ - "packageDependencies": [\ - ["foreground-child", "npm:3.3.1"],\ - ["cross-spawn", "npm:7.0.6"],\ - ["signal-exit", "npm:4.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["fs-minipass", [\ - ["npm:2.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-10c0.zip/node_modules/fs-minipass/",\ - "packageDependencies": [\ - ["fs-minipass", "npm:2.1.0"],\ - ["minipass", "npm:3.3.6"]\ - ],\ - "linkType": "HARD"\ - }],\ ["npm:3.0.3", {\ "packageLocation": "../../../../.yarn/berry/cache/fs-minipass-npm-3.0.3-d148d6ac19-10c0.zip/node_modules/fs-minipass/",\ "packageDependencies": [\ @@ -1513,16 +1431,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["glob", [\ - ["npm:10.5.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/glob-npm-10.5.0-b569657078-10c0.zip/node_modules/glob/",\ + ["npm:13.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/glob-npm-13.0.1-322004d656-10c0.zip/node_modules/glob/",\ "packageDependencies": [\ - ["glob", "npm:10.5.0"],\ - ["foreground-child", "npm:3.3.1"],\ - ["jackspeak", "npm:3.4.3"],\ - ["minimatch", "npm:9.0.5"],\ + ["glob", "npm:13.0.1"],\ + ["minimatch", "npm:10.1.2"],\ ["minipass", "npm:7.1.2"],\ - ["package-json-from-dist", "npm:1.0.1"],\ - ["path-scurry", "npm:1.11.1"]\ + ["path-scurry", "npm:2.0.1"]\ ],\ "linkType": "HARD"\ }]\ @@ -1583,6 +1498,14 @@ const RAW_RUNTIME_STATE = ["lru-cache", "npm:10.4.3"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:9.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/hosted-git-info-npm-9.0.2-2732400c79-10c0.zip/node_modules/hosted-git-info/",\ + "packageDependencies": [\ + ["hosted-git-info", "npm:9.0.2"],\ + ["lru-cache", "npm:11.2.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["http-cache-semantics", [\ @@ -1647,11 +1570,11 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["ignore-walk", [\ - ["npm:6.0.5", {\ - "packageLocation": "../../../../.yarn/berry/cache/ignore-walk-npm-6.0.5-dc11005d4e-10c0.zip/node_modules/ignore-walk/",\ + ["npm:8.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/ignore-walk-npm-8.0.0-2b0093fcf5-10c0.zip/node_modules/ignore-walk/",\ "packageDependencies": [\ - ["ignore-walk", "npm:6.0.5"],\ - ["minimatch", "npm:9.0.5"]\ + ["ignore-walk", "npm:8.0.0"],\ + ["minimatch", "npm:10.1.2"]\ ],\ "linkType": "HARD"\ }]\ @@ -1678,15 +1601,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["indent-string", [\ - ["npm:4.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/indent-string-npm-4.0.0-7b717435b2-10c0.zip/node_modules/indent-string/",\ - "packageDependencies": [\ - ["indent-string", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["ini", [\ ["npm:2.0.0", {\ "packageLocation": "../../../../.yarn/berry/cache/ini-npm-2.0.0-28f7426761-10c0.zip/node_modules/ini/",\ @@ -1695,10 +1609,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["npm:4.1.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/ini-npm-4.1.3-56188f3216-10c0.zip/node_modules/ini/",\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/ini-npm-6.0.0-0d947da023-10c0.zip/node_modules/ini/",\ "packageDependencies": [\ - ["ini", "npm:4.1.3"]\ + ["ini", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1731,15 +1645,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["is-lambda", [\ - ["npm:1.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/is-lambda-npm-1.0.1-7ab55bc8a8-10c0.zip/node_modules/is-lambda/",\ - "packageDependencies": [\ - ["is-lambda", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["is-stream", [\ ["npm:2.0.1", {\ "packageLocation": "../../../../.yarn/berry/cache/is-stream-npm-2.0.1-c802db55e7-10c0.zip/node_modules/is-stream/",\ @@ -1757,21 +1662,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["npm:3.1.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/isexe-npm-3.1.1-9c0061eead-10c0.zip/node_modules/isexe/",\ - "packageDependencies": [\ - ["isexe", "npm:3.1.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["jackspeak", [\ - ["npm:3.4.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/jackspeak-npm-3.4.3-546bfad080-10c0.zip/node_modules/jackspeak/",\ + ["npm:3.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/isexe-npm-3.1.2-5b601d7277-10c0.zip/node_modules/isexe/",\ "packageDependencies": [\ - ["jackspeak", "npm:3.4.3"],\ - ["@isaacs/cliui", "npm:8.0.2"],\ - ["@pkgjs/parseargs", "npm:0.11.0"]\ + ["isexe", "npm:3.1.2"]\ ],\ "linkType": "HARD"\ }]\ @@ -1797,10 +1691,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["json-parse-even-better-errors", [\ - ["npm:3.0.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/json-parse-even-better-errors-npm-3.0.2-3d985a6781-10c0.zip/node_modules/json-parse-even-better-errors/",\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/json-parse-even-better-errors-npm-5.0.0-50b52ec7fb-10c0.zip/node_modules/json-parse-even-better-errors/",\ "packageDependencies": [\ - ["json-parse-even-better-errors", "npm:3.0.2"]\ + ["json-parse-even-better-errors", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1885,25 +1779,31 @@ const RAW_RUNTIME_STATE = ["lru-cache", "npm:10.4.3"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:11.2.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/lru-cache-npm-11.2.5-a56eb40aef-10c0.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:11.2.5"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["make-fetch-happen", [\ - ["npm:13.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/make-fetch-happen-npm-13.0.1-4180f2aaa8-10c0.zip/node_modules/make-fetch-happen/",\ + ["npm:15.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/make-fetch-happen-npm-15.0.3-10a832fcad-10c0.zip/node_modules/make-fetch-happen/",\ "packageDependencies": [\ - ["make-fetch-happen", "npm:13.0.1"],\ - ["@npmcli/agent", "npm:2.2.2"],\ - ["cacache", "npm:18.0.4"],\ + ["make-fetch-happen", "npm:15.0.3"],\ + ["@npmcli/agent", "npm:4.0.0"],\ + ["cacache", "npm:20.0.3"],\ ["http-cache-semantics", "npm:4.2.0"],\ - ["is-lambda", "npm:1.0.1"],\ ["minipass", "npm:7.1.2"],\ - ["minipass-fetch", "npm:3.0.5"],\ + ["minipass-fetch", "npm:5.0.1"],\ ["minipass-flush", "npm:1.0.5"],\ ["minipass-pipeline", "npm:1.2.4"],\ - ["negotiator", "npm:0.6.4"],\ - ["proc-log", "npm:4.2.0"],\ + ["negotiator", "npm:1.0.0"],\ + ["proc-log", "npm:6.1.0"],\ ["promise-retry", "npm:2.0.1"],\ - ["ssri", "npm:10.0.6"]\ + ["ssri", "npm:13.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -1943,11 +1843,11 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["minimatch", [\ - ["npm:9.0.5", {\ - "packageLocation": "../../../../.yarn/berry/cache/minimatch-npm-9.0.5-9aa93d97fa-10c0.zip/node_modules/minimatch/",\ + ["npm:10.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/minimatch-npm-10.1.2-9295d0648a-10c0.zip/node_modules/minimatch/",\ "packageDependencies": [\ - ["minimatch", "npm:9.0.5"],\ - ["brace-expansion", "npm:2.0.2"]\ + ["minimatch", "npm:10.1.2"],\ + ["@isaacs/brace-expansion", "npm:5.0.1"]\ ],\ "linkType": "HARD"\ }]\ @@ -1970,13 +1870,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["npm:5.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/minipass-npm-5.0.0-c64fb63c92-10c0.zip/node_modules/minipass/",\ - "packageDependencies": [\ - ["minipass", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ - }],\ ["npm:7.1.2", {\ "packageLocation": "../../../../.yarn/berry/cache/minipass-npm-7.1.2-3a5327d36d-10c0.zip/node_modules/minipass/",\ "packageDependencies": [\ @@ -1996,14 +1889,14 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["minipass-fetch", [\ - ["npm:3.0.5", {\ - "packageLocation": "../../../../.yarn/berry/cache/minipass-fetch-npm-3.0.5-ed78529694-10c0.zip/node_modules/minipass-fetch/",\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/minipass-fetch-npm-5.0.1-34f846b2fb-10c0.zip/node_modules/minipass-fetch/",\ "packageDependencies": [\ - ["minipass-fetch", "npm:3.0.5"],\ + ["minipass-fetch", "npm:5.0.1"],\ ["encoding", "npm:0.1.13"],\ ["minipass", "npm:7.1.2"],\ - ["minipass-sized", "npm:1.0.3"],\ - ["minizlib", "npm:2.1.2"]\ + ["minipass-sized", "npm:2.0.0"],\ + ["minizlib", "npm:3.1.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -2029,31 +1922,21 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["minipass-sized", [\ - ["npm:1.0.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/minipass-sized-npm-1.0.3-306d86f432-10c0.zip/node_modules/minipass-sized/",\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/minipass-sized-npm-2.0.0-a911fc7d3f-10c0.zip/node_modules/minipass-sized/",\ "packageDependencies": [\ - ["minipass-sized", "npm:1.0.3"],\ - ["minipass", "npm:3.3.6"]\ + ["minipass-sized", "npm:2.0.0"],\ + ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["minizlib", [\ - ["npm:2.1.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-10c0.zip/node_modules/minizlib/",\ - "packageDependencies": [\ - ["minizlib", "npm:2.1.2"],\ - ["minipass", "npm:3.3.6"],\ - ["yallist", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["mkdirp", [\ - ["npm:1.0.4", {\ - "packageLocation": "../../../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-10c0.zip/node_modules/mkdirp/",\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/minizlib-npm-3.1.0-6680befdba-10c0.zip/node_modules/minizlib/",\ "packageDependencies": [\ - ["mkdirp", "npm:1.0.4"]\ + ["minizlib", "npm:3.1.0"],\ + ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ }]\ @@ -2077,39 +1960,39 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["negotiator", [\ - ["npm:0.6.4", {\ - "packageLocation": "../../../../.yarn/berry/cache/negotiator-npm-0.6.4-4a96086720-10c0.zip/node_modules/negotiator/",\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/negotiator-npm-1.0.0-47d727e27e-10c0.zip/node_modules/negotiator/",\ "packageDependencies": [\ - ["negotiator", "npm:0.6.4"]\ + ["negotiator", "npm:1.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["node-gyp", [\ - ["npm:10.3.1", {\ - "packageLocation": "./.yarn/unplugged/node-gyp-npm-10.3.1-08d55ad11a/node_modules/node-gyp/",\ + ["npm:12.2.0", {\ + "packageLocation": "./.yarn/unplugged/node-gyp-npm-12.2.0-11f8fe84f1/node_modules/node-gyp/",\ "packageDependencies": [\ - ["node-gyp", "npm:10.3.1"],\ + ["node-gyp", "npm:12.2.0"],\ ["env-paths", "npm:2.2.1"],\ ["exponential-backoff", "npm:3.1.3"],\ - ["glob", "npm:10.5.0"],\ ["graceful-fs", "npm:4.2.11"],\ - ["make-fetch-happen", "npm:13.0.1"],\ - ["nopt", "npm:7.2.1"],\ - ["proc-log", "npm:4.2.0"],\ - ["semver", "npm:7.7.3"],\ - ["tar", "npm:6.2.1"],\ - ["which", "npm:4.0.0"]\ + ["make-fetch-happen", "npm:15.0.3"],\ + ["nopt", "npm:9.0.0"],\ + ["proc-log", "npm:6.1.0"],\ + ["semver", "npm:7.7.4"],\ + ["tar", "npm:7.5.7"],\ + ["tinyglobby", "npm:0.2.15"],\ + ["which", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["nopt", [\ - ["npm:7.2.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/nopt-npm-7.2.1-635b7da949-10c0.zip/node_modules/nopt/",\ + ["npm:9.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/nopt-npm-9.0.0-81316ec15c-10c0.zip/node_modules/nopt/",\ "packageDependencies": [\ - ["nopt", "npm:7.2.1"],\ - ["abbrev", "npm:2.0.0"]\ + ["nopt", "npm:9.0.0"],\ + ["abbrev", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -2120,7 +2003,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["normalize-package-data", "npm:6.0.2"],\ ["hosted-git-info", "npm:7.0.2"],\ - ["semver", "npm:7.7.3"],\ + ["semver", "npm:7.7.4"],\ ["validate-npm-package-license", "npm:3.0.4"]\ ],\ "linkType": "HARD"\ @@ -2136,83 +2019,84 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["npm-bundled", [\ - ["npm:3.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/npm-bundled-npm-3.0.1-e98b9846dc-10c0.zip/node_modules/npm-bundled/",\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-bundled-npm-5.0.0-ad4d9d2b5f-10c0.zip/node_modules/npm-bundled/",\ "packageDependencies": [\ - ["npm-bundled", "npm:3.0.1"],\ - ["npm-normalize-package-bin", "npm:3.0.1"]\ + ["npm-bundled", "npm:5.0.0"],\ + ["npm-normalize-package-bin", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["npm-install-checks", [\ - ["npm:6.3.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/npm-install-checks-npm-6.3.0-d093d4e008-10c0.zip/node_modules/npm-install-checks/",\ + ["npm:8.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-install-checks-npm-8.0.0-5f270b6e8a-10c0.zip/node_modules/npm-install-checks/",\ "packageDependencies": [\ - ["npm-install-checks", "npm:6.3.0"],\ - ["semver", "npm:7.7.3"]\ + ["npm-install-checks", "npm:8.0.0"],\ + ["semver", "npm:7.7.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["npm-normalize-package-bin", [\ - ["npm:3.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/npm-normalize-package-bin-npm-3.0.1-6c120b50f7-10c0.zip/node_modules/npm-normalize-package-bin/",\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-normalize-package-bin-npm-5.0.0-315361378c-10c0.zip/node_modules/npm-normalize-package-bin/",\ "packageDependencies": [\ - ["npm-normalize-package-bin", "npm:3.0.1"]\ + ["npm-normalize-package-bin", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["npm-package-arg", [\ - ["npm:11.0.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/npm-package-arg-npm-11.0.3-7ba5df96a1-10c0.zip/node_modules/npm-package-arg/",\ + ["npm:13.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-package-arg-npm-13.0.2-13317e2159-10c0.zip/node_modules/npm-package-arg/",\ "packageDependencies": [\ - ["npm-package-arg", "npm:11.0.3"],\ - ["hosted-git-info", "npm:7.0.2"],\ - ["proc-log", "npm:4.2.0"],\ - ["semver", "npm:7.7.3"],\ - ["validate-npm-package-name", "npm:5.0.1"]\ + ["npm-package-arg", "npm:13.0.2"],\ + ["hosted-git-info", "npm:9.0.2"],\ + ["proc-log", "npm:6.1.0"],\ + ["semver", "npm:7.7.4"],\ + ["validate-npm-package-name", "npm:7.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["npm-packlist", [\ - ["npm:8.0.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/npm-packlist-npm-8.0.2-f975a473a6-10c0.zip/node_modules/npm-packlist/",\ + ["npm:10.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-packlist-npm-10.0.3-fdf0e56513-10c0.zip/node_modules/npm-packlist/",\ "packageDependencies": [\ - ["npm-packlist", "npm:8.0.2"],\ - ["ignore-walk", "npm:6.0.5"]\ + ["npm-packlist", "npm:10.0.3"],\ + ["ignore-walk", "npm:8.0.0"],\ + ["proc-log", "npm:6.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["npm-pick-manifest", [\ - ["npm:9.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/npm-pick-manifest-npm-9.1.0-38ecc59c15-10c0.zip/node_modules/npm-pick-manifest/",\ + ["npm:11.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-pick-manifest-npm-11.0.3-e489ad3286-10c0.zip/node_modules/npm-pick-manifest/",\ "packageDependencies": [\ - ["npm-pick-manifest", "npm:9.1.0"],\ - ["npm-install-checks", "npm:6.3.0"],\ - ["npm-normalize-package-bin", "npm:3.0.1"],\ - ["npm-package-arg", "npm:11.0.3"],\ - ["semver", "npm:7.7.3"]\ + ["npm-pick-manifest", "npm:11.0.3"],\ + ["npm-install-checks", "npm:8.0.0"],\ + ["npm-normalize-package-bin", "npm:5.0.0"],\ + ["npm-package-arg", "npm:13.0.2"],\ + ["semver", "npm:7.7.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["npm-registry-fetch", [\ - ["npm:17.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/npm-registry-fetch-npm-17.1.0-8eabd327ea-10c0.zip/node_modules/npm-registry-fetch/",\ + ["npm:19.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-registry-fetch-npm-19.1.1-a5f014c7a9-10c0.zip/node_modules/npm-registry-fetch/",\ "packageDependencies": [\ - ["npm-registry-fetch", "npm:17.1.0"],\ - ["@npmcli/redact", "npm:2.0.1"],\ + ["npm-registry-fetch", "npm:19.1.1"],\ + ["@npmcli/redact", "npm:4.0.0"],\ ["jsonparse", "npm:1.3.1"],\ - ["make-fetch-happen", "npm:13.0.1"],\ + ["make-fetch-happen", "npm:15.0.3"],\ ["minipass", "npm:7.1.2"],\ - ["minipass-fetch", "npm:3.0.5"],\ - ["minizlib", "npm:2.1.2"],\ - ["npm-package-arg", "npm:11.0.3"],\ - ["proc-log", "npm:4.2.0"]\ + ["minipass-fetch", "npm:5.0.1"],\ + ["minizlib", "npm:3.1.0"],\ + ["npm-package-arg", "npm:13.0.2"],\ + ["proc-log", "npm:6.1.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -2257,66 +2141,56 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["p-map", [\ - ["npm:4.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/p-map-npm-4.0.0-4677ae07c7-10c0.zip/node_modules/p-map/",\ + ["npm:7.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/p-map-npm-7.0.4-39386109d0-10c0.zip/node_modules/p-map/",\ "packageDependencies": [\ - ["p-map", "npm:4.0.0"],\ - ["aggregate-error", "npm:3.1.0"]\ + ["p-map", "npm:7.0.4"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["package-directory", [\ - ["npm:8.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/package-directory-npm-8.1.0-1e13103aa1-10c0.zip/node_modules/package-directory/",\ + ["npm:8.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/package-directory-npm-8.2.0-ac96cd2adf-10c0.zip/node_modules/package-directory/",\ "packageDependencies": [\ - ["package-directory", "npm:8.1.0"],\ + ["package-directory", "npm:8.2.0"],\ ["find-up-simple", "npm:1.0.1"]\ ],\ "linkType": "HARD"\ }]\ ]],\ - ["package-json-from-dist", [\ - ["npm:1.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/package-json-from-dist-npm-1.0.1-4631a88465-10c0.zip/node_modules/package-json-from-dist/",\ - "packageDependencies": [\ - ["package-json-from-dist", "npm:1.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["pacote", [\ - ["npm:18.0.6", {\ - "packageLocation": "../../../../.yarn/berry/cache/pacote-npm-18.0.6-42b2ba9f9c-10c0.zip/node_modules/pacote/",\ - "packageDependencies": [\ - ["pacote", "npm:18.0.6"],\ - ["@npmcli/git", "npm:5.0.8"],\ - ["@npmcli/installed-package-contents", "npm:2.1.0"],\ - ["@npmcli/package-json", "npm:5.2.1"],\ - ["@npmcli/promise-spawn", "npm:7.0.2"],\ - ["@npmcli/run-script", "npm:8.1.0"],\ - ["cacache", "npm:18.0.4"],\ + ["npm:21.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/pacote-npm-21.2.0-3c3b4d7b9d-10c0.zip/node_modules/pacote/",\ + "packageDependencies": [\ + ["pacote", "npm:21.2.0"],\ + ["@npmcli/git", "npm:7.0.1"],\ + ["@npmcli/installed-package-contents", "npm:4.0.0"],\ + ["@npmcli/package-json", "npm:7.0.4"],\ + ["@npmcli/promise-spawn", "npm:9.0.1"],\ + ["@npmcli/run-script", "npm:10.0.3"],\ + ["cacache", "npm:20.0.3"],\ ["fs-minipass", "npm:3.0.3"],\ ["minipass", "npm:7.1.2"],\ - ["npm-package-arg", "npm:11.0.3"],\ - ["npm-packlist", "npm:8.0.2"],\ - ["npm-pick-manifest", "npm:9.1.0"],\ - ["npm-registry-fetch", "npm:17.1.0"],\ - ["proc-log", "npm:4.2.0"],\ + ["npm-package-arg", "npm:13.0.2"],\ + ["npm-packlist", "npm:10.0.3"],\ + ["npm-pick-manifest", "npm:11.0.3"],\ + ["npm-registry-fetch", "npm:19.1.1"],\ + ["proc-log", "npm:6.1.0"],\ ["promise-retry", "npm:2.0.1"],\ - ["sigstore", "npm:2.3.1"],\ - ["ssri", "npm:10.0.6"],\ - ["tar", "npm:6.2.1"]\ + ["sigstore", "npm:4.1.0"],\ + ["ssri", "npm:13.0.0"],\ + ["tar", "npm:7.5.7"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["parse-conflict-json", [\ - ["npm:3.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/parse-conflict-json-npm-3.0.1-9455a1ad04-10c0.zip/node_modules/parse-conflict-json/",\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/parse-conflict-json-npm-5.0.1-11a03eaf22-10c0.zip/node_modules/parse-conflict-json/",\ "packageDependencies": [\ - ["parse-conflict-json", "npm:3.0.1"],\ - ["json-parse-even-better-errors", "npm:3.0.2"],\ + ["parse-conflict-json", "npm:5.0.1"],\ + ["json-parse-even-better-errors", "npm:5.0.0"],\ ["just-diff", "npm:6.0.2"],\ ["just-diff-apply", "npm:5.5.0"]\ ],\ @@ -2342,11 +2216,11 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["path-scurry", [\ - ["npm:1.11.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/path-scurry-npm-1.11.1-aaf8c339af-10c0.zip/node_modules/path-scurry/",\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/path-scurry-npm-2.0.1-7744619e5d-10c0.zip/node_modules/path-scurry/",\ "packageDependencies": [\ - ["path-scurry", "npm:1.11.1"],\ - ["lru-cache", "npm:10.4.3"],\ + ["path-scurry", "npm:2.0.1"],\ + ["lru-cache", "npm:11.2.5"],\ ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ @@ -2359,13 +2233,20 @@ const RAW_RUNTIME_STATE = ["picomatch", "npm:3.0.1"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:4.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/picomatch-npm-4.0.3-0a647b87cc-10c0.zip/node_modules/picomatch/",\ + "packageDependencies": [\ + ["picomatch", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["postcss-selector-parser", [\ - ["npm:6.1.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/postcss-selector-parser-npm-6.1.2-46a8e03b00-10c0.zip/node_modules/postcss-selector-parser/",\ + ["npm:7.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/postcss-selector-parser-npm-7.1.1-b4ce358dae-10c0.zip/node_modules/postcss-selector-parser/",\ "packageDependencies": [\ - ["postcss-selector-parser", "npm:6.1.2"],\ + ["postcss-selector-parser", "npm:7.1.1"],\ ["cssesc", "npm:3.0.0"],\ ["util-deprecate", "npm:1.0.2"]\ ],\ @@ -2373,19 +2254,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["proc-log", [\ - ["npm:4.2.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/proc-log-npm-4.2.0-4d65296a9d-10c0.zip/node_modules/proc-log/",\ + ["npm:6.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/proc-log-npm-6.1.0-84e609b3f4-10c0.zip/node_modules/proc-log/",\ "packageDependencies": [\ - ["proc-log", "npm:4.2.0"]\ + ["proc-log", "npm:6.1.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["proggy", [\ - ["npm:2.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/proggy-npm-2.0.0-be7a9905d6-10c0.zip/node_modules/proggy/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/proggy-npm-4.0.0-011d919e56-10c0.zip/node_modules/proggy/",\ "packageDependencies": [\ - ["proggy", "npm:2.0.0"]\ + ["proggy", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -2408,28 +2289,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["promise-inflight", [\ - ["npm:1.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/promise-inflight-npm-1.0.1-5bb925afac-10c0.zip/node_modules/promise-inflight/",\ - "packageDependencies": [\ - ["promise-inflight", "npm:1.0.1"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:f327e06825271fbd1f8872cc997e35ed056c2f62f95d2e714b19fdcf8be1089e73740b97a9f852b61ff81422ed2b94476af671eb08408145709eb05039b24ebc#npm:1.0.1", {\ - "packageLocation": "./.yarn/__virtual__/promise-inflight-virtual-519240eab5/5/.yarn/berry/cache/promise-inflight-npm-1.0.1-5bb925afac-10c0.zip/node_modules/promise-inflight/",\ - "packageDependencies": [\ - ["promise-inflight", "virtual:f327e06825271fbd1f8872cc997e35ed056c2f62f95d2e714b19fdcf8be1089e73740b97a9f852b61ff81422ed2b94476af671eb08408145709eb05039b24ebc#npm:1.0.1"],\ - ["@types/bluebird", null],\ - ["bluebird", null]\ - ],\ - "packagePeers": [\ - "@types/bluebird",\ - "bluebird"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["promise-retry", [\ ["npm:2.0.1", {\ "packageLocation": "../../../../.yarn/berry/cache/promise-retry-npm-2.0.1-871f0b01b7-10c0.zip/node_modules/promise-retry/",\ @@ -2456,7 +2315,7 @@ const RAW_RUNTIME_STATE = ["@protobufjs/path", "npm:1.1.2"],\ ["@protobufjs/pool", "npm:1.1.0"],\ ["@protobufjs/utf8", "npm:1.1.0"],\ - ["@types/node", "npm:25.0.1"],\ + ["@types/node", "npm:25.2.1"],\ ["long", "npm:5.3.2"]\ ],\ "linkType": "HARD"\ @@ -2483,21 +2342,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["read-cmd-shim", [\ - ["npm:4.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/read-cmd-shim-npm-4.0.0-2339b15fb0-10c0.zip/node_modules/read-cmd-shim/",\ - "packageDependencies": [\ - ["read-cmd-shim", "npm:4.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["read-package-json-fast", [\ - ["npm:3.0.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/read-package-json-fast-npm-3.0.2-1232471a07-10c0.zip/node_modules/read-package-json-fast/",\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/read-cmd-shim-npm-6.0.0-fa10bbe28d-10c0.zip/node_modules/read-cmd-shim/",\ "packageDependencies": [\ - ["read-package-json-fast", "npm:3.0.2"],\ - ["json-parse-even-better-errors", "npm:3.0.2"],\ - ["npm-normalize-package-bin", "npm:3.0.1"]\ + ["read-cmd-shim", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -2582,10 +2430,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["semver", [\ - ["npm:7.7.3", {\ - "packageLocation": "../../../../.yarn/berry/cache/semver-npm-7.7.3-9cf7b3b46c-10c0.zip/node_modules/semver/",\ + ["npm:7.7.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/semver-npm-7.7.4-746e538da5-10c0.zip/node_modules/semver/",\ "packageDependencies": [\ - ["semver", "npm:7.7.3"]\ + ["semver", "npm:7.7.4"]\ ],\ "linkType": "HARD"\ }]\ @@ -2635,16 +2483,16 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["sigstore", [\ - ["npm:2.3.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/sigstore-npm-2.3.1-7ab15fe238-10c0.zip/node_modules/sigstore/",\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/sigstore-npm-4.1.0-c356de95f4-10c0.zip/node_modules/sigstore/",\ "packageDependencies": [\ - ["sigstore", "npm:2.3.1"],\ - ["@sigstore/bundle", "npm:2.3.2"],\ - ["@sigstore/core", "npm:1.1.0"],\ - ["@sigstore/protobuf-specs", "npm:0.3.3"],\ - ["@sigstore/sign", "npm:2.3.2"],\ - ["@sigstore/tuf", "npm:2.3.4"],\ - ["@sigstore/verify", "npm:1.2.1"]\ + ["sigstore", "npm:4.1.0"],\ + ["@sigstore/bundle", "npm:4.0.0"],\ + ["@sigstore/core", "npm:3.1.0"],\ + ["@sigstore/protobuf-specs", "npm:0.5.0"],\ + ["@sigstore/sign", "npm:4.1.0"],\ + ["@sigstore/tuf", "npm:4.0.1"],\ + ["@sigstore/verify", "npm:3.1.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -2751,10 +2599,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["ssri", [\ - ["npm:10.0.6", {\ - "packageLocation": "../../../../.yarn/berry/cache/ssri-npm-10.0.6-6b8eaec5ce-10c0.zip/node_modules/ssri/",\ + ["npm:13.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/ssri-npm-13.0.0-f5fa93375d-10c0.zip/node_modules/ssri/",\ "packageDependencies": [\ - ["ssri", "npm:10.0.6"],\ + ["ssri", "npm:13.0.0"],\ ["minipass", "npm:7.1.2"]\ ],\ "linkType": "HARD"\ @@ -2770,16 +2618,6 @@ const RAW_RUNTIME_STATE = ["strip-ansi", "npm:6.0.1"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:5.1.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/string-width-npm-5.1.2-bf60531341-10c0.zip/node_modules/string-width/",\ - "packageDependencies": [\ - ["string-width", "npm:5.1.2"],\ - ["eastasianwidth", "npm:0.2.0"],\ - ["emoji-regex", "npm:9.2.2"],\ - ["strip-ansi", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["strip-ansi", [\ @@ -2790,14 +2628,6 @@ const RAW_RUNTIME_STATE = ["ansi-regex", "npm:5.0.1"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:7.1.2", {\ - "packageLocation": "../../../../.yarn/berry/cache/strip-ansi-npm-7.1.2-aa4fadccd9-10c0.zip/node_modules/strip-ansi/",\ - "packageDependencies": [\ - ["strip-ansi", "npm:7.1.2"],\ - ["ansi-regex", "npm:6.2.2"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["strip-final-newline", [\ @@ -2819,16 +2649,26 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["tar", [\ - ["npm:6.2.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/tar-npm-6.2.1-237800bb20-10c0.zip/node_modules/tar/",\ - "packageDependencies": [\ - ["tar", "npm:6.2.1"],\ - ["chownr", "npm:2.0.0"],\ - ["fs-minipass", "npm:2.1.0"],\ - ["minipass", "npm:5.0.0"],\ - ["minizlib", "npm:2.1.2"],\ - ["mkdirp", "npm:1.0.4"],\ - ["yallist", "npm:4.0.0"]\ + ["npm:7.5.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/tar-npm-7.5.7-053aec5a88-10c0.zip/node_modules/tar/",\ + "packageDependencies": [\ + ["tar", "npm:7.5.7"],\ + ["@isaacs/fs-minipass", "npm:4.0.1"],\ + ["chownr", "npm:3.0.0"],\ + ["minipass", "npm:7.1.2"],\ + ["minizlib", "npm:3.1.0"],\ + ["yallist", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tinyglobby", [\ + ["npm:0.2.15", {\ + "packageLocation": "../../../../.yarn/berry/cache/tinyglobby-npm-0.2.15-0e783aadbd-10c0.zip/node_modules/tinyglobby/",\ + "packageDependencies": [\ + ["tinyglobby", "npm:0.2.15"],\ + ["fdir", "virtual:0e783aadbd2b4b8e6f6056033c0b290501892d23bc7c5dad5477e00e48ad8bd3e4434c3962a52dd75a58e06dbb7218094a494bac954ef2f7f6fdb65d9717e5f4#npm:6.5.0"],\ + ["picomatch", "npm:4.0.3"]\ ],\ "linkType": "HARD"\ }]\ @@ -2852,13 +2692,13 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["tuf-js", [\ - ["npm:2.2.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/tuf-js-npm-2.2.1-3baf642bf9-10c0.zip/node_modules/tuf-js/",\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/tuf-js-npm-4.1.0-e5a68e66e6-10c0.zip/node_modules/tuf-js/",\ "packageDependencies": [\ - ["tuf-js", "npm:2.2.1"],\ - ["@tufjs/models", "npm:2.0.1"],\ + ["tuf-js", "npm:4.1.0"],\ + ["@tufjs/models", "npm:4.1.0"],\ ["debug", "virtual:643ed7cc338bcf145a82d8b05b3bef6bcf150ca545df386225596f10ce53cc90b88b3ca83e348ade1ccea5f3f8e76c92d2f0e2ba544da60d40aff9921c56872d#npm:4.4.3"],\ - ["make-fetch-happen", "npm:13.0.1"]\ + ["make-fetch-happen", "npm:15.0.3"]\ ],\ "linkType": "HARD"\ }]\ @@ -2882,20 +2722,20 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["unique-filename", [\ - ["npm:3.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/unique-filename-npm-3.0.0-77d68e0a45-10c0.zip/node_modules/unique-filename/",\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/unique-filename-npm-5.0.0-605f54f18e-10c0.zip/node_modules/unique-filename/",\ "packageDependencies": [\ - ["unique-filename", "npm:3.0.0"],\ - ["unique-slug", "npm:4.0.0"]\ + ["unique-filename", "npm:5.0.0"],\ + ["unique-slug", "npm:6.0.0"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["unique-slug", [\ - ["npm:4.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/unique-slug-npm-4.0.0-e6b08f28aa-10c0.zip/node_modules/unique-slug/",\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/unique-slug-npm-6.0.0-f26b186e99-10c0.zip/node_modules/unique-slug/",\ "packageDependencies": [\ - ["unique-slug", "npm:4.0.0"],\ + ["unique-slug", "npm:6.0.0"],\ ["imurmurhash", "npm:0.1.4"]\ ],\ "linkType": "HARD"\ @@ -2931,19 +2771,19 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["validate-npm-package-name", [\ - ["npm:5.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/validate-npm-package-name-npm-5.0.1-5af9a082cd-10c0.zip/node_modules/validate-npm-package-name/",\ + ["npm:7.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/validate-npm-package-name-npm-7.0.2-d0e77c15a8-10c0.zip/node_modules/validate-npm-package-name/",\ "packageDependencies": [\ - ["validate-npm-package-name", "npm:5.0.1"]\ + ["validate-npm-package-name", "npm:7.0.2"]\ ],\ "linkType": "HARD"\ }]\ ]],\ ["walk-up-path", [\ - ["npm:3.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/walk-up-path-npm-3.0.1-67ab100d5d-10c0.zip/node_modules/walk-up-path/",\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/walk-up-path-npm-4.0.0-d7e927f7ee-10c0.zip/node_modules/walk-up-path/",\ "packageDependencies": [\ - ["walk-up-path", "npm:3.0.1"]\ + ["walk-up-path", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ }]\ @@ -2957,11 +2797,11 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["npm:4.0.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/which-npm-4.0.0-dd31cd4928-10c0.zip/node_modules/which/",\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/which-npm-6.0.0-48f25f0ec8-10c0.zip/node_modules/which/",\ "packageDependencies": [\ - ["which", "npm:4.0.0"],\ - ["isexe", "npm:3.1.1"]\ + ["which", "npm:6.0.0"],\ + ["isexe", "npm:3.1.2"]\ ],\ "linkType": "HARD"\ }]\ @@ -2976,16 +2816,6 @@ const RAW_RUNTIME_STATE = ["strip-ansi", "npm:6.0.1"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:8.1.0", {\ - "packageLocation": "../../../../.yarn/berry/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-10c0.zip/node_modules/wrap-ansi/",\ - "packageDependencies": [\ - ["wrap-ansi", "npm:8.1.0"],\ - ["ansi-styles", "npm:6.2.3"],\ - ["string-width", "npm:5.1.2"],\ - ["strip-ansi", "npm:7.1.2"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["wrappy", [\ @@ -2998,10 +2828,10 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["write-file-atomic", [\ - ["npm:5.0.1", {\ - "packageLocation": "../../../../.yarn/berry/cache/write-file-atomic-npm-5.0.1-52283db6ee-10c0.zip/node_modules/write-file-atomic/",\ + ["npm:7.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/write-file-atomic-npm-7.0.0-5ac9b21e4c-10c0.zip/node_modules/write-file-atomic/",\ "packageDependencies": [\ - ["write-file-atomic", "npm:5.0.1"],\ + ["write-file-atomic", "npm:7.0.0"],\ ["imurmurhash", "npm:0.1.4"],\ ["signal-exit", "npm:4.1.0"]\ ],\ @@ -3024,6 +2854,13 @@ const RAW_RUNTIME_STATE = ["yallist", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ + }],\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/yallist-npm-5.0.0-8732dd9f1c-10c0.zip/node_modules/yallist/",\ + "packageDependencies": [\ + ["yallist", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ }]\ ]],\ ["yargs", [\ diff --git a/sdk/nodejs/.yarn/install-state.gz b/sdk/nodejs/.yarn/install-state.gz index 9f774c2b..d1127376 100644 Binary files a/sdk/nodejs/.yarn/install-state.gz and b/sdk/nodejs/.yarn/install-state.gz differ diff --git a/sdk/nodejs/Pulumi.yaml b/sdk/nodejs/Pulumi.yaml index e69de29b..c170bb99 100644 --- a/sdk/nodejs/Pulumi.yaml +++ b/sdk/nodejs/Pulumi.yaml @@ -0,0 +1,3 @@ +name: proxmoxve +description: A Pulumi resource provider for proxmoxve. +language: nodejs diff --git a/sdk/nodejs/acme/certificate.ts b/sdk/nodejs/acme/certificate.ts new file mode 100644 index 00000000..c69bd6af --- /dev/null +++ b/sdk/nodejs/acme/certificate.ts @@ -0,0 +1,304 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node. + * + * ## Example Usage + * + * ### Basic ACME Certificate with HTTP-01 Challenge + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * // First, create an ACME account + * const example = new proxmoxve.AcmeAccount("example", { + * name: "production", + * contact: "admin@example.com", + * directory: "https://acme-v02.api.letsencrypt.org/directory", + * tos: "https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf", + * }); + * // Order a certificate for the node + * const exampleCertificate = new proxmoxve.acme.Certificate("example", { + * nodeName: "pve", + * account: example.name, + * domains: [{ + * domain: "pve.example.com", + * }], + * }); + * ``` + * + * ### ACME Certificate with DNS-01 Challenge + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * // Create an ACME account + * const example = new proxmoxve.AcmeAccount("example", { + * name: "production", + * contact: "admin@example.com", + * directory: "https://acme-v02.api.letsencrypt.org/directory", + * tos: "https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf", + * }); + * // Configure a DNS plugin (Desec example) + * const desec = new proxmoxve.AcmeDnsPlugin("desec", { + * plugin: "desec", + * api: "desec", + * data: { + * DEDYN_TOKEN: dedynToken, + * }, + * }); + * // Order a certificate using the DNS plugin + * const test = new proxmoxve.acme.Certificate("test", { + * nodeName: "pve", + * account: example.name, + * force: false, + * domains: [{ + * domain: "pve.example.dedyn.io", + * plugin: desec.plugin, + * }], + * }, { + * dependsOn: [ + * example, + * desec, + * ], + * }); + * ``` + * + * ### Force Certificate Renewal + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const exampleForce = new proxmoxve.acme.Certificate("example_force", { + * nodeName: "pve", + * account: example.name, + * force: true, + * domains: [{ + * domain: "pve.example.com", + * }], + * }); + * ``` + * + * ## Related Resources + * + * - `proxmoxve.AcmeAccount` - Manages ACME accounts + * - `proxmoxve.AcmeDnsPlugin` - Manages ACME DNS plugins for DNS-01 challenges + * - `proxmoxve.Certifi` - Manages custom SSL/TLS certificates (non-ACME) + * + * ## Import + * + * ACME certificates can be imported using the node name: + * + * #!/usr/bin/env sh + * + * ACME certificates can be imported using the node name, e.g.: + * + * ```sh + * $ pulumi import proxmoxve:Acme/certificate:Certificate example pve + * ``` + */ +export class Certificate extends pulumi.CustomResource { + /** + * Get an existing Certificate resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: CertificateState, opts?: pulumi.CustomResourceOptions): Certificate { + return new Certificate(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Acme/certificate:Certificate'; + + /** + * Returns true if the given object is an instance of Certificate. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Certificate { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Certificate.__pulumiType; + } + + /** + * The ACME account name to use for ordering the certificate. + */ + declare public readonly account: pulumi.Output; + /** + * The PEM-encoded certificate data. + */ + declare public /*out*/ readonly certificate: pulumi.Output; + /** + * The list of domains to include in the certificate. At least one domain is required. + */ + declare public readonly domains: pulumi.Output; + /** + * The certificate fingerprint. + */ + declare public /*out*/ readonly fingerprint: pulumi.Output; + /** + * Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + */ + declare public readonly force: pulumi.Output; + /** + * The certificate issuer. + */ + declare public /*out*/ readonly issuer: pulumi.Output; + /** + * The name of the Proxmox VE node for which to order/manage the ACME certificate. + */ + declare public readonly nodeName: pulumi.Output; + /** + * The certificate expiration timestamp. + */ + declare public /*out*/ readonly notAfter: pulumi.Output; + /** + * The certificate start timestamp. + */ + declare public /*out*/ readonly notBefore: pulumi.Output; + /** + * The certificate subject. + */ + declare public /*out*/ readonly subject: pulumi.Output; + /** + * The certificate subject alternative names (SANs). + */ + declare public /*out*/ readonly subjectAlternativeNames: pulumi.Output; + + /** + * Create a Certificate resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: CertificateArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: CertificateArgs | CertificateState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as CertificateState | undefined; + resourceInputs["account"] = state?.account; + resourceInputs["certificate"] = state?.certificate; + resourceInputs["domains"] = state?.domains; + resourceInputs["fingerprint"] = state?.fingerprint; + resourceInputs["force"] = state?.force; + resourceInputs["issuer"] = state?.issuer; + resourceInputs["nodeName"] = state?.nodeName; + resourceInputs["notAfter"] = state?.notAfter; + resourceInputs["notBefore"] = state?.notBefore; + resourceInputs["subject"] = state?.subject; + resourceInputs["subjectAlternativeNames"] = state?.subjectAlternativeNames; + } else { + const args = argsOrState as CertificateArgs | undefined; + if (args?.account === undefined && !opts.urn) { + throw new Error("Missing required property 'account'"); + } + if (args?.domains === undefined && !opts.urn) { + throw new Error("Missing required property 'domains'"); + } + if (args?.nodeName === undefined && !opts.urn) { + throw new Error("Missing required property 'nodeName'"); + } + resourceInputs["account"] = args?.account; + resourceInputs["domains"] = args?.domains; + resourceInputs["force"] = args?.force; + resourceInputs["nodeName"] = args?.nodeName; + resourceInputs["certificate"] = undefined /*out*/; + resourceInputs["fingerprint"] = undefined /*out*/; + resourceInputs["issuer"] = undefined /*out*/; + resourceInputs["notAfter"] = undefined /*out*/; + resourceInputs["notBefore"] = undefined /*out*/; + resourceInputs["subject"] = undefined /*out*/; + resourceInputs["subjectAlternativeNames"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Certificate.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Certificate resources. + */ +export interface CertificateState { + /** + * The ACME account name to use for ordering the certificate. + */ + account?: pulumi.Input; + /** + * The PEM-encoded certificate data. + */ + certificate?: pulumi.Input; + /** + * The list of domains to include in the certificate. At least one domain is required. + */ + domains?: pulumi.Input[]>; + /** + * The certificate fingerprint. + */ + fingerprint?: pulumi.Input; + /** + * Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + */ + force?: pulumi.Input; + /** + * The certificate issuer. + */ + issuer?: pulumi.Input; + /** + * The name of the Proxmox VE node for which to order/manage the ACME certificate. + */ + nodeName?: pulumi.Input; + /** + * The certificate expiration timestamp. + */ + notAfter?: pulumi.Input; + /** + * The certificate start timestamp. + */ + notBefore?: pulumi.Input; + /** + * The certificate subject. + */ + subject?: pulumi.Input; + /** + * The certificate subject alternative names (SANs). + */ + subjectAlternativeNames?: pulumi.Input[]>; +} + +/** + * The set of arguments for constructing a Certificate resource. + */ +export interface CertificateArgs { + /** + * The ACME account name to use for ordering the certificate. + */ + account: pulumi.Input; + /** + * The list of domains to include in the certificate. At least one domain is required. + */ + domains: pulumi.Input[]>; + /** + * Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + */ + force?: pulumi.Input; + /** + * The name of the Proxmox VE node for which to order/manage the ACME certificate. + */ + nodeName: pulumi.Input; +} diff --git a/sdk/nodejs/acme/index.ts b/sdk/nodejs/acme/index.ts index 2a1f8dcf..d966d2d3 100644 --- a/sdk/nodejs/acme/index.ts +++ b/sdk/nodejs/acme/index.ts @@ -1,9 +1,15 @@ // *** WARNING: this file was generated by pulumi-language-nodejs. *** // *** Do not edit by hand unless you're certain you know what you are doing! *** +import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; // Export members: +export { CertificateArgs, CertificateState } from "./certificate"; +export type Certificate = import("./certificate").Certificate; +export const Certificate: typeof import("./certificate").Certificate = null as any; +utilities.lazyLoad(exports, ["Certificate"], () => require("./certificate")); + export { GetAccountArgs, GetAccountResult, GetAccountOutputArgs } from "./getAccount"; export const getAccount: typeof import("./getAccount").getAccount = null as any; export const getAccountOutput: typeof import("./getAccount").getAccountOutput = null as any; @@ -24,3 +30,16 @@ export const getPlugins: typeof import("./getPlugins").getPlugins = null as any; export const getPluginsOutput: typeof import("./getPlugins").getPluginsOutput = null as any; utilities.lazyLoad(exports, ["getPlugins","getPluginsOutput"], () => require("./getPlugins")); + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "proxmoxve:Acme/certificate:Certificate": + return new Certificate(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("proxmoxve", "Acme/certificate", _module) diff --git a/sdk/nodejs/apt/standard/repository.ts b/sdk/nodejs/apt/standard/repository.ts index 8375d51c..24021cbd 100644 --- a/sdk/nodejs/apt/standard/repository.ts +++ b/sdk/nodejs/apt/standard/repository.ts @@ -74,7 +74,7 @@ export class Repository extends pulumi.CustomResource { */ declare public /*out*/ readonly filePath: pulumi.Output; /** - * The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + * The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. */ declare public readonly handle: pulumi.Output; /** @@ -148,7 +148,7 @@ export interface RepositoryState { */ filePath?: pulumi.Input; /** - * The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + * The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. */ handle?: pulumi.Input; /** @@ -174,7 +174,7 @@ export interface RepositoryState { */ export interface RepositoryArgs { /** - * The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + * The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. */ handle: pulumi.Input; /** diff --git a/sdk/nodejs/ct/container.ts b/sdk/nodejs/ct/container.ts index c5a007c7..f9d95040 100644 --- a/sdk/nodejs/ct/container.ts +++ b/sdk/nodejs/ct/container.ts @@ -77,6 +77,11 @@ import * as utilities from "../utilities"; * size: "10G", * path: "/mnt/volume", * }, + * { + * volume: "local-lvm:subvol-108-disk-101", + * size: "10G", + * path: "/mnt/data", + * }, * ], * startup: { * order: 3, diff --git a/sdk/nodejs/download/file.ts b/sdk/nodejs/download/file.ts index e80a1099..edeb18b2 100644 --- a/sdk/nodejs/download/file.ts +++ b/sdk/nodejs/download/file.ts @@ -134,9 +134,6 @@ export class File extends pulumi.CustomResource { * The node name. */ declare public readonly nodeName: pulumi.Output; - /** - * By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - */ declare public readonly overwrite: pulumi.Output; /** * If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. @@ -250,9 +247,6 @@ export interface FileState { * The node name. */ nodeName?: pulumi.Input; - /** - * By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - */ overwrite?: pulumi.Input; /** * If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. @@ -308,9 +302,6 @@ export interface FileArgs { * The node name. */ nodeName: pulumi.Input; - /** - * By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - */ overwrite?: pulumi.Input; /** * If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. diff --git a/sdk/nodejs/getVm2.ts b/sdk/nodejs/getVm2.ts index 24e25f42..626ac09e 100644 --- a/sdk/nodejs/getVm2.ts +++ b/sdk/nodejs/getVm2.ts @@ -13,7 +13,6 @@ import * as utilities from "./utilities"; export function getVm2(args: GetVm2Args, opts?: pulumi.InvokeOptions): Promise { opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); return pulumi.runtime.invoke("proxmoxve:index/getVm2:getVm2", { - "clone": args.clone, "cpu": args.cpu, "description": args.description, "id": args.id, @@ -31,10 +30,6 @@ export function getVm2(args: GetVm2Args, opts?: pulumi.InvokeOptions): Promise { opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); return pulumi.runtime.invokeOutput("proxmoxve:index/getVm2:getVm2", { - "clone": args.clone, "cpu": args.cpu, "description": args.description, "id": args.id, @@ -145,10 +135,6 @@ export function getVm2Output(args: GetVm2OutputArgs, opts?: pulumi.InvokeOutputO * A collection of arguments for invoking getVm2. */ export interface GetVm2OutputArgs { - /** - * The cloning configuration. - */ - clone?: pulumi.Input; /** * The CPU configuration. */ diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index 5208abc3..53c4ecd3 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -80,10 +80,13 @@ import * as ha from "./ha"; import * as hardware from "./hardware"; import * as metrics from "./metrics"; import * as network from "./network"; +import * as node from "./node"; import * as oci from "./oci"; import * as permission from "./permission"; import * as pool from "./pool"; +import * as realm from "./realm"; import * as sdn from "./sdn"; +import * as sdnfabric from "./sdnfabric"; import * as sdnzone from "./sdnzone"; import * as storage from "./storage"; import * as types from "./types"; @@ -101,10 +104,13 @@ export { hardware, metrics, network, + node, oci, permission, pool, + realm, sdn, + sdnfabric, sdnzone, storage, types, diff --git a/sdk/nodejs/network/firewallOptions.ts b/sdk/nodejs/network/firewallOptions.ts index 090abd46..7af20ce6 100644 --- a/sdk/nodejs/network/firewallOptions.ts +++ b/sdk/nodejs/network/firewallOptions.ts @@ -76,7 +76,7 @@ export class FirewallOptions extends pulumi.CustomResource { } /** - * Container ID. + * Container ID. **Exactly one of `vmId` or `containerId` must be specified.** */ declare public readonly containerId: pulumi.Output; /** @@ -134,7 +134,7 @@ export class FirewallOptions extends pulumi.CustomResource { */ declare public readonly radv: pulumi.Output; /** - * VM ID. + * VM ID. **Exactly one of `vmId` or `containerId` must be specified.** */ declare public readonly vmId: pulumi.Output; @@ -193,7 +193,7 @@ export class FirewallOptions extends pulumi.CustomResource { */ export interface FirewallOptionsState { /** - * Container ID. + * Container ID. **Exactly one of `vmId` or `containerId` must be specified.** */ containerId?: pulumi.Input; /** @@ -251,7 +251,7 @@ export interface FirewallOptionsState { */ radv?: pulumi.Input; /** - * VM ID. + * VM ID. **Exactly one of `vmId` or `containerId` must be specified.** */ vmId?: pulumi.Input; } @@ -261,7 +261,7 @@ export interface FirewallOptionsState { */ export interface FirewallOptionsArgs { /** - * Container ID. + * Container ID. **Exactly one of `vmId` or `containerId` must be specified.** */ containerId?: pulumi.Input; /** @@ -319,7 +319,7 @@ export interface FirewallOptionsArgs { */ radv?: pulumi.Input; /** - * VM ID. + * VM ID. **Exactly one of `vmId` or `containerId` must be specified.** */ vmId?: pulumi.Input; } diff --git a/sdk/nodejs/network/firewallRules.ts b/sdk/nodejs/network/firewallRules.ts index caaa7011..02137999 100644 --- a/sdk/nodejs/network/firewallRules.ts +++ b/sdk/nodejs/network/firewallRules.ts @@ -9,8 +9,7 @@ import * as utilities from "../utilities"; /** * Manages cluster-level, node-level or VM/container-level firewall rules. * - * > **Note:** Before creating a new `proxmoxve.Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). - * If rules are already configured, import them first using the appropriate import command. + * > Before creating a new `proxmoxve.Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command. * * ## Example Usage * diff --git a/sdk/nodejs/node/firewall.ts b/sdk/nodejs/node/firewall.ts new file mode 100644 index 00000000..3cbea021 --- /dev/null +++ b/sdk/nodejs/node/firewall.ts @@ -0,0 +1,273 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * Manages Proxmox VE Node Firewall options. + * + * > This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const node_pve1 = new proxmoxve.node.Firewall("node-pve1", { + * nodeName: "pve1", + * enabled: false, + * }); + * const pve2 = new proxmoxve.node.Firewall("pve2", { + * nodeName: "pve2", + * enabled: true, + * logLevelIn: "alert", + * logLevelOut: "alert", + * logLevelForward: "alert", + * ndp: true, + * nftables: true, + * nosmurfs: true, + * smurfLogLevel: "alert", + * tcpFlagsLogLevel: "alert", + * }); + * ``` + * + * ## Import + * + * ```sh + * $ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1 + * ``` + */ +export class Firewall extends pulumi.CustomResource { + /** + * Get an existing Firewall resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: FirewallState, opts?: pulumi.CustomResourceOptions): Firewall { + return new Firewall(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Node/firewall:Firewall'; + + /** + * Returns true if the given object is an instance of Firewall. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Firewall { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Firewall.__pulumiType; + } + + /** + * Enable host firewall rules (defaults to `true`). + */ + declare public readonly enabled: pulumi.Output; + /** + * Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + declare public readonly logLevelForward: pulumi.Output; + /** + * Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + declare public readonly logLevelIn: pulumi.Output; + /** + * Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + declare public readonly logLevelOut: pulumi.Output; + /** + * Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + */ + declare public readonly ndp: pulumi.Output; + /** + * Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + */ + declare public readonly nfConntrackMax: pulumi.Output; + /** + * Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + */ + declare public readonly nfConntrackTcpTimeoutEstablished: pulumi.Output; + /** + * Enable nftables based firewall (tech preview, defaults to `false`). + */ + declare public readonly nftables: pulumi.Output; + /** + * The cluster node name. + */ + declare public readonly nodeName: pulumi.Output; + /** + * Enable SMURFS filter (defaults to `true`). + */ + declare public readonly nosmurfs: pulumi.Output; + /** + * Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + declare public readonly smurfLogLevel: pulumi.Output; + /** + * Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + declare public readonly tcpFlagsLogLevel: pulumi.Output; + + /** + * Create a Firewall resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: FirewallArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: FirewallArgs | FirewallState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as FirewallState | undefined; + resourceInputs["enabled"] = state?.enabled; + resourceInputs["logLevelForward"] = state?.logLevelForward; + resourceInputs["logLevelIn"] = state?.logLevelIn; + resourceInputs["logLevelOut"] = state?.logLevelOut; + resourceInputs["ndp"] = state?.ndp; + resourceInputs["nfConntrackMax"] = state?.nfConntrackMax; + resourceInputs["nfConntrackTcpTimeoutEstablished"] = state?.nfConntrackTcpTimeoutEstablished; + resourceInputs["nftables"] = state?.nftables; + resourceInputs["nodeName"] = state?.nodeName; + resourceInputs["nosmurfs"] = state?.nosmurfs; + resourceInputs["smurfLogLevel"] = state?.smurfLogLevel; + resourceInputs["tcpFlagsLogLevel"] = state?.tcpFlagsLogLevel; + } else { + const args = argsOrState as FirewallArgs | undefined; + if (args?.nodeName === undefined && !opts.urn) { + throw new Error("Missing required property 'nodeName'"); + } + resourceInputs["enabled"] = args?.enabled; + resourceInputs["logLevelForward"] = args?.logLevelForward; + resourceInputs["logLevelIn"] = args?.logLevelIn; + resourceInputs["logLevelOut"] = args?.logLevelOut; + resourceInputs["ndp"] = args?.ndp; + resourceInputs["nfConntrackMax"] = args?.nfConntrackMax; + resourceInputs["nfConntrackTcpTimeoutEstablished"] = args?.nfConntrackTcpTimeoutEstablished; + resourceInputs["nftables"] = args?.nftables; + resourceInputs["nodeName"] = args?.nodeName; + resourceInputs["nosmurfs"] = args?.nosmurfs; + resourceInputs["smurfLogLevel"] = args?.smurfLogLevel; + resourceInputs["tcpFlagsLogLevel"] = args?.tcpFlagsLogLevel; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Firewall.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Firewall resources. + */ +export interface FirewallState { + /** + * Enable host firewall rules (defaults to `true`). + */ + enabled?: pulumi.Input; + /** + * Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + logLevelForward?: pulumi.Input; + /** + * Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + logLevelIn?: pulumi.Input; + /** + * Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + logLevelOut?: pulumi.Input; + /** + * Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + */ + ndp?: pulumi.Input; + /** + * Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + */ + nfConntrackMax?: pulumi.Input; + /** + * Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + */ + nfConntrackTcpTimeoutEstablished?: pulumi.Input; + /** + * Enable nftables based firewall (tech preview, defaults to `false`). + */ + nftables?: pulumi.Input; + /** + * The cluster node name. + */ + nodeName?: pulumi.Input; + /** + * Enable SMURFS filter (defaults to `true`). + */ + nosmurfs?: pulumi.Input; + /** + * Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + smurfLogLevel?: pulumi.Input; + /** + * Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + tcpFlagsLogLevel?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Firewall resource. + */ +export interface FirewallArgs { + /** + * Enable host firewall rules (defaults to `true`). + */ + enabled?: pulumi.Input; + /** + * Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + logLevelForward?: pulumi.Input; + /** + * Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + logLevelIn?: pulumi.Input; + /** + * Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + logLevelOut?: pulumi.Input; + /** + * Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + */ + ndp?: pulumi.Input; + /** + * Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + */ + nfConntrackMax?: pulumi.Input; + /** + * Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + */ + nfConntrackTcpTimeoutEstablished?: pulumi.Input; + /** + * Enable nftables based firewall (tech preview, defaults to `false`). + */ + nftables?: pulumi.Input; + /** + * The cluster node name. + */ + nodeName: pulumi.Input; + /** + * Enable SMURFS filter (defaults to `true`). + */ + nosmurfs?: pulumi.Input; + /** + * Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + smurfLogLevel?: pulumi.Input; + /** + * Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + */ + tcpFlagsLogLevel?: pulumi.Input; +} diff --git a/sdk/nodejs/node/index.ts b/sdk/nodejs/node/index.ts new file mode 100644 index 00000000..8aa2adfd --- /dev/null +++ b/sdk/nodejs/node/index.ts @@ -0,0 +1,25 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { FirewallArgs, FirewallState } from "./firewall"; +export type Firewall = import("./firewall").Firewall; +export const Firewall: typeof import("./firewall").Firewall = null as any; +utilities.lazyLoad(exports, ["Firewall"], () => require("./firewall")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "proxmoxve:Node/firewall:Firewall": + return new Firewall(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("proxmoxve", "Node/firewall", _module) diff --git a/sdk/nodejs/realm/index.ts b/sdk/nodejs/realm/index.ts new file mode 100644 index 00000000..36b67626 --- /dev/null +++ b/sdk/nodejs/realm/index.ts @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { LdapArgs, LdapState } from "./ldap"; +export type Ldap = import("./ldap").Ldap; +export const Ldap: typeof import("./ldap").Ldap = null as any; +utilities.lazyLoad(exports, ["Ldap"], () => require("./ldap")); + +export { SyncArgs, SyncState } from "./sync"; +export type Sync = import("./sync").Sync; +export const Sync: typeof import("./sync").Sync = null as any; +utilities.lazyLoad(exports, ["Sync"], () => require("./sync")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "proxmoxve:Realm/ldap:Ldap": + return new Ldap(name, undefined, { urn }) + case "proxmoxve:Realm/sync:Sync": + return new Sync(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("proxmoxve", "Realm/ldap", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Realm/sync", _module) diff --git a/sdk/nodejs/realm/ldap.ts b/sdk/nodejs/realm/ldap.ts new file mode 100644 index 00000000..bf1440f3 --- /dev/null +++ b/sdk/nodejs/realm/ldap.ts @@ -0,0 +1,461 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## Import + * + * #!/usr/bin/env sh + * + * LDAP realms can be imported using the realm identifier, e.g.: + * + * ```sh + * $ pulumi import proxmoxve:Realm/ldap:Ldap example example.com + * ``` + * + * -> When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform. + */ +export class Ldap extends pulumi.CustomResource { + /** + * Get an existing Ldap resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: LdapState, opts?: pulumi.CustomResourceOptions): Ldap { + return new Ldap(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Realm/ldap:Ldap'; + + /** + * Returns true if the given object is an instance of Ldap. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Ldap { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Ldap.__pulumiType; + } + + /** + * LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + */ + declare public readonly baseDn: pulumi.Output; + /** + * LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + */ + declare public readonly bindDn: pulumi.Output; + /** + * Password for the bind DN. Note: stored in Proxmox but not returned by API. + */ + declare public readonly bindPassword: pulumi.Output; + /** + * Path to CA certificate file for SSL verification. + */ + declare public readonly caPath: pulumi.Output; + /** + * Enable case-sensitive username matching. + */ + declare public readonly caseSensitive: pulumi.Output; + /** + * Path to client certificate key. + */ + declare public readonly certKeyPath: pulumi.Output; + /** + * Path to client certificate for SSL authentication. + */ + declare public readonly certPath: pulumi.Output; + /** + * Description of the realm. + */ + declare public readonly comment: pulumi.Output; + /** + * Use this realm as the default for login. + */ + declare public readonly default: pulumi.Output; + /** + * LDAP filter for user searches. + */ + declare public readonly filter: pulumi.Output; + /** + * LDAP objectClasses for groups (comma-separated). + */ + declare public readonly groupClasses: pulumi.Output; + /** + * LDAP base DN for group searches. + */ + declare public readonly groupDn: pulumi.Output; + /** + * LDAP filter for group searches. + */ + declare public readonly groupFilter: pulumi.Output; + /** + * LDAP attribute representing the group name. + */ + declare public readonly groupNameAttr: pulumi.Output; + /** + * LDAP connection mode (ldap, ldaps, ldap+starttls). + */ + declare public readonly mode: pulumi.Output; + /** + * LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + */ + declare public readonly port: pulumi.Output; + /** + * Realm identifier (e.g., 'example.com'). + */ + declare public readonly realm: pulumi.Output; + /** + * Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated Deprecated by Proxmox: use mode instead. + */ + declare public readonly secure: pulumi.Output; + /** + * Primary LDAP server hostname or IP address. + */ + declare public readonly server1: pulumi.Output; + /** + * Fallback LDAP server hostname or IP address. + */ + declare public readonly server2: pulumi.Output; + /** + * SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + */ + declare public readonly sslVersion: pulumi.Output; + /** + * Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + */ + declare public readonly syncAttributes: pulumi.Output; + /** + * Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + */ + declare public readonly syncDefaultsOptions: pulumi.Output; + /** + * LDAP attribute representing the username. + */ + declare public readonly userAttr: pulumi.Output; + /** + * LDAP objectClasses for users (comma-separated). + */ + declare public readonly userClasses: pulumi.Output; + /** + * Verify LDAP server SSL certificate. + */ + declare public readonly verify: pulumi.Output; + + /** + * Create a Ldap resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: LdapArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: LdapArgs | LdapState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as LdapState | undefined; + resourceInputs["baseDn"] = state?.baseDn; + resourceInputs["bindDn"] = state?.bindDn; + resourceInputs["bindPassword"] = state?.bindPassword; + resourceInputs["caPath"] = state?.caPath; + resourceInputs["caseSensitive"] = state?.caseSensitive; + resourceInputs["certKeyPath"] = state?.certKeyPath; + resourceInputs["certPath"] = state?.certPath; + resourceInputs["comment"] = state?.comment; + resourceInputs["default"] = state?.default; + resourceInputs["filter"] = state?.filter; + resourceInputs["groupClasses"] = state?.groupClasses; + resourceInputs["groupDn"] = state?.groupDn; + resourceInputs["groupFilter"] = state?.groupFilter; + resourceInputs["groupNameAttr"] = state?.groupNameAttr; + resourceInputs["mode"] = state?.mode; + resourceInputs["port"] = state?.port; + resourceInputs["realm"] = state?.realm; + resourceInputs["secure"] = state?.secure; + resourceInputs["server1"] = state?.server1; + resourceInputs["server2"] = state?.server2; + resourceInputs["sslVersion"] = state?.sslVersion; + resourceInputs["syncAttributes"] = state?.syncAttributes; + resourceInputs["syncDefaultsOptions"] = state?.syncDefaultsOptions; + resourceInputs["userAttr"] = state?.userAttr; + resourceInputs["userClasses"] = state?.userClasses; + resourceInputs["verify"] = state?.verify; + } else { + const args = argsOrState as LdapArgs | undefined; + if (args?.baseDn === undefined && !opts.urn) { + throw new Error("Missing required property 'baseDn'"); + } + if (args?.realm === undefined && !opts.urn) { + throw new Error("Missing required property 'realm'"); + } + if (args?.server1 === undefined && !opts.urn) { + throw new Error("Missing required property 'server1'"); + } + resourceInputs["baseDn"] = args?.baseDn; + resourceInputs["bindDn"] = args?.bindDn; + resourceInputs["bindPassword"] = args?.bindPassword ? pulumi.secret(args.bindPassword) : undefined; + resourceInputs["caPath"] = args?.caPath; + resourceInputs["caseSensitive"] = args?.caseSensitive; + resourceInputs["certKeyPath"] = args?.certKeyPath; + resourceInputs["certPath"] = args?.certPath; + resourceInputs["comment"] = args?.comment; + resourceInputs["default"] = args?.default; + resourceInputs["filter"] = args?.filter; + resourceInputs["groupClasses"] = args?.groupClasses; + resourceInputs["groupDn"] = args?.groupDn; + resourceInputs["groupFilter"] = args?.groupFilter; + resourceInputs["groupNameAttr"] = args?.groupNameAttr; + resourceInputs["mode"] = args?.mode; + resourceInputs["port"] = args?.port; + resourceInputs["realm"] = args?.realm; + resourceInputs["secure"] = args?.secure; + resourceInputs["server1"] = args?.server1; + resourceInputs["server2"] = args?.server2; + resourceInputs["sslVersion"] = args?.sslVersion; + resourceInputs["syncAttributes"] = args?.syncAttributes; + resourceInputs["syncDefaultsOptions"] = args?.syncDefaultsOptions; + resourceInputs["userAttr"] = args?.userAttr; + resourceInputs["userClasses"] = args?.userClasses; + resourceInputs["verify"] = args?.verify; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["bindPassword"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Ldap.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Ldap resources. + */ +export interface LdapState { + /** + * LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + */ + baseDn?: pulumi.Input; + /** + * LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + */ + bindDn?: pulumi.Input; + /** + * Password for the bind DN. Note: stored in Proxmox but not returned by API. + */ + bindPassword?: pulumi.Input; + /** + * Path to CA certificate file for SSL verification. + */ + caPath?: pulumi.Input; + /** + * Enable case-sensitive username matching. + */ + caseSensitive?: pulumi.Input; + /** + * Path to client certificate key. + */ + certKeyPath?: pulumi.Input; + /** + * Path to client certificate for SSL authentication. + */ + certPath?: pulumi.Input; + /** + * Description of the realm. + */ + comment?: pulumi.Input; + /** + * Use this realm as the default for login. + */ + default?: pulumi.Input; + /** + * LDAP filter for user searches. + */ + filter?: pulumi.Input; + /** + * LDAP objectClasses for groups (comma-separated). + */ + groupClasses?: pulumi.Input; + /** + * LDAP base DN for group searches. + */ + groupDn?: pulumi.Input; + /** + * LDAP filter for group searches. + */ + groupFilter?: pulumi.Input; + /** + * LDAP attribute representing the group name. + */ + groupNameAttr?: pulumi.Input; + /** + * LDAP connection mode (ldap, ldaps, ldap+starttls). + */ + mode?: pulumi.Input; + /** + * LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + */ + port?: pulumi.Input; + /** + * Realm identifier (e.g., 'example.com'). + */ + realm?: pulumi.Input; + /** + * Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated Deprecated by Proxmox: use mode instead. + */ + secure?: pulumi.Input; + /** + * Primary LDAP server hostname or IP address. + */ + server1?: pulumi.Input; + /** + * Fallback LDAP server hostname or IP address. + */ + server2?: pulumi.Input; + /** + * SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + */ + sslVersion?: pulumi.Input; + /** + * Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + */ + syncAttributes?: pulumi.Input; + /** + * Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + */ + syncDefaultsOptions?: pulumi.Input; + /** + * LDAP attribute representing the username. + */ + userAttr?: pulumi.Input; + /** + * LDAP objectClasses for users (comma-separated). + */ + userClasses?: pulumi.Input; + /** + * Verify LDAP server SSL certificate. + */ + verify?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Ldap resource. + */ +export interface LdapArgs { + /** + * LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + */ + baseDn: pulumi.Input; + /** + * LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + */ + bindDn?: pulumi.Input; + /** + * Password for the bind DN. Note: stored in Proxmox but not returned by API. + */ + bindPassword?: pulumi.Input; + /** + * Path to CA certificate file for SSL verification. + */ + caPath?: pulumi.Input; + /** + * Enable case-sensitive username matching. + */ + caseSensitive?: pulumi.Input; + /** + * Path to client certificate key. + */ + certKeyPath?: pulumi.Input; + /** + * Path to client certificate for SSL authentication. + */ + certPath?: pulumi.Input; + /** + * Description of the realm. + */ + comment?: pulumi.Input; + /** + * Use this realm as the default for login. + */ + default?: pulumi.Input; + /** + * LDAP filter for user searches. + */ + filter?: pulumi.Input; + /** + * LDAP objectClasses for groups (comma-separated). + */ + groupClasses?: pulumi.Input; + /** + * LDAP base DN for group searches. + */ + groupDn?: pulumi.Input; + /** + * LDAP filter for group searches. + */ + groupFilter?: pulumi.Input; + /** + * LDAP attribute representing the group name. + */ + groupNameAttr?: pulumi.Input; + /** + * LDAP connection mode (ldap, ldaps, ldap+starttls). + */ + mode?: pulumi.Input; + /** + * LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + */ + port?: pulumi.Input; + /** + * Realm identifier (e.g., 'example.com'). + */ + realm: pulumi.Input; + /** + * Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + * + * @deprecated Deprecated by Proxmox: use mode instead. + */ + secure?: pulumi.Input; + /** + * Primary LDAP server hostname or IP address. + */ + server1: pulumi.Input; + /** + * Fallback LDAP server hostname or IP address. + */ + server2?: pulumi.Input; + /** + * SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + */ + sslVersion?: pulumi.Input; + /** + * Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + */ + syncAttributes?: pulumi.Input; + /** + * Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + */ + syncDefaultsOptions?: pulumi.Input; + /** + * LDAP attribute representing the username. + */ + userAttr?: pulumi.Input; + /** + * LDAP objectClasses for users (comma-separated). + */ + userClasses?: pulumi.Input; + /** + * Verify LDAP server SSL certificate. + */ + verify?: pulumi.Input; +} diff --git a/sdk/nodejs/realm/sync.ts b/sdk/nodejs/realm/sync.ts new file mode 100644 index 00000000..c63d95b9 --- /dev/null +++ b/sdk/nodejs/realm/sync.ts @@ -0,0 +1,195 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## Import + * + * #!/usr/bin/env sh + * + * Realm sync resources can be imported by realm name, e.g.: + * + * ```sh + * $ pulumi import proxmoxve:Realm/sync:Sync example example.com + * ``` + * + * Importing only populates the `realm` and `id` attributes; other fields must + * + * be set in configuration. + */ +export class Sync extends pulumi.CustomResource { + /** + * Get an existing Sync resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: SyncState, opts?: pulumi.CustomResourceOptions): Sync { + return new Sync(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Realm/sync:Sync'; + + /** + * Returns true if the given object is an instance of Sync. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Sync { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Sync.__pulumiType; + } + + /** + * Only simulate the sync without applying changes. + */ + declare public readonly dryRun: pulumi.Output; + /** + * Enable newly synced users. + */ + declare public readonly enableNew: pulumi.Output; + /** + * Perform a full sync. + * + * @deprecated Deprecated by Proxmox: use removeVanished instead. + */ + declare public readonly full: pulumi.Output; + /** + * Purge removed entries. + * + * @deprecated Deprecated by Proxmox: use removeVanished instead. + */ + declare public readonly purge: pulumi.Output; + /** + * Name of the realm to synchronize. + */ + declare public readonly realm: pulumi.Output; + /** + * How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + */ + declare public readonly removeVanished: pulumi.Output; + /** + * Sync scope: users, groups, or both. + */ + declare public readonly scope: pulumi.Output; + + /** + * Create a Sync resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: SyncArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: SyncArgs | SyncState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as SyncState | undefined; + resourceInputs["dryRun"] = state?.dryRun; + resourceInputs["enableNew"] = state?.enableNew; + resourceInputs["full"] = state?.full; + resourceInputs["purge"] = state?.purge; + resourceInputs["realm"] = state?.realm; + resourceInputs["removeVanished"] = state?.removeVanished; + resourceInputs["scope"] = state?.scope; + } else { + const args = argsOrState as SyncArgs | undefined; + if (args?.realm === undefined && !opts.urn) { + throw new Error("Missing required property 'realm'"); + } + resourceInputs["dryRun"] = args?.dryRun; + resourceInputs["enableNew"] = args?.enableNew; + resourceInputs["full"] = args?.full; + resourceInputs["purge"] = args?.purge; + resourceInputs["realm"] = args?.realm; + resourceInputs["removeVanished"] = args?.removeVanished; + resourceInputs["scope"] = args?.scope; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Sync.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Sync resources. + */ +export interface SyncState { + /** + * Only simulate the sync without applying changes. + */ + dryRun?: pulumi.Input; + /** + * Enable newly synced users. + */ + enableNew?: pulumi.Input; + /** + * Perform a full sync. + * + * @deprecated Deprecated by Proxmox: use removeVanished instead. + */ + full?: pulumi.Input; + /** + * Purge removed entries. + * + * @deprecated Deprecated by Proxmox: use removeVanished instead. + */ + purge?: pulumi.Input; + /** + * Name of the realm to synchronize. + */ + realm?: pulumi.Input; + /** + * How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + */ + removeVanished?: pulumi.Input; + /** + * Sync scope: users, groups, or both. + */ + scope?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Sync resource. + */ +export interface SyncArgs { + /** + * Only simulate the sync without applying changes. + */ + dryRun?: pulumi.Input; + /** + * Enable newly synced users. + */ + enableNew?: pulumi.Input; + /** + * Perform a full sync. + * + * @deprecated Deprecated by Proxmox: use removeVanished instead. + */ + full?: pulumi.Input; + /** + * Purge removed entries. + * + * @deprecated Deprecated by Proxmox: use removeVanished instead. + */ + purge?: pulumi.Input; + /** + * Name of the realm to synchronize. + */ + realm: pulumi.Input; + /** + * How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + */ + removeVanished?: pulumi.Input; + /** + * Sync scope: users, groups, or both. + */ + scope?: pulumi.Input; +} diff --git a/sdk/nodejs/sdn/fabric/getOpenfabric.ts b/sdk/nodejs/sdn/fabric/getOpenfabric.ts new file mode 100644 index 00000000..3cc5d4fd --- /dev/null +++ b/sdk/nodejs/sdn/fabric/getOpenfabric.ts @@ -0,0 +1,92 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../../utilities"; + +/** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.getOpenfabric({ + * id: "main-fabric", + * }); + * ``` + */ +export function getOpenfabric(args: GetOpenfabricArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getOpenfabric. + */ +export interface GetOpenfabricArgs { + /** + * The unique identifier of the SDN fabric. + */ + id: string; +} + +/** + * A collection of values returned by getOpenfabric. + */ +export interface GetOpenfabricResult { + /** + * The csnpInterval property for OpenFabric. + */ + readonly csnpInterval: number; + /** + * The helloInterval property for OpenFabric. + */ + readonly helloInterval: number; + /** + * The unique identifier of the SDN fabric. + */ + readonly id: string; + /** + * IPv6 prefix cidr for the fabric. + */ + readonly ip6Prefix: string; + /** + * IPv4 prefix cidr for the fabric. + */ + readonly ipPrefix: string; +} +/** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.getOpenfabric({ + * id: "main-fabric", + * }); + * ``` + */ +export function getOpenfabricOutput(args: GetOpenfabricOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getOpenfabric. + */ +export interface GetOpenfabricOutputArgs { + /** + * The unique identifier of the SDN fabric. + */ + id: pulumi.Input; +} diff --git a/sdk/nodejs/sdn/fabric/getOspf.ts b/sdk/nodejs/sdn/fabric/getOspf.ts new file mode 100644 index 00000000..e7c042df --- /dev/null +++ b/sdk/nodejs/sdn/fabric/getOspf.ts @@ -0,0 +1,84 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../../utilities"; + +/** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.getOspf({ + * id: "main-fabric", + * }); + * ``` + */ +export function getOspf(args: GetOspfArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("proxmoxve:Sdn/fabric/getOspf:getOspf", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getOspf. + */ +export interface GetOspfArgs { + /** + * The unique identifier of the SDN fabric. + */ + id: string; +} + +/** + * A collection of values returned by getOspf. + */ +export interface GetOspfResult { + /** + * OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + */ + readonly area: string; + /** + * The unique identifier of the SDN fabric. + */ + readonly id: string; + /** + * IPv4 prefix cidr for the fabric. + */ + readonly ipPrefix: string; +} +/** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.getOspf({ + * id: "main-fabric", + * }); + * ``` + */ +export function getOspfOutput(args: GetOspfOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("proxmoxve:Sdn/fabric/getOspf:getOspf", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getOspf. + */ +export interface GetOspfOutputArgs { + /** + * The unique identifier of the SDN fabric. + */ + id: pulumi.Input; +} diff --git a/sdk/nodejs/sdn/fabric/index.ts b/sdk/nodejs/sdn/fabric/index.ts new file mode 100644 index 00000000..e75b908c --- /dev/null +++ b/sdk/nodejs/sdn/fabric/index.ts @@ -0,0 +1,23 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as utilities from "../../utilities"; + +// Export members: +export { GetOpenfabricArgs, GetOpenfabricResult, GetOpenfabricOutputArgs } from "./getOpenfabric"; +export const getOpenfabric: typeof import("./getOpenfabric").getOpenfabric = null as any; +export const getOpenfabricOutput: typeof import("./getOpenfabric").getOpenfabricOutput = null as any; +utilities.lazyLoad(exports, ["getOpenfabric","getOpenfabricOutput"], () => require("./getOpenfabric")); + +export { GetOspfArgs, GetOspfResult, GetOspfOutputArgs } from "./getOspf"; +export const getOspf: typeof import("./getOspf").getOspf = null as any; +export const getOspfOutput: typeof import("./getOspf").getOspfOutput = null as any; +utilities.lazyLoad(exports, ["getOspf","getOspfOutput"], () => require("./getOspf")); + + +// Export sub-modules: +import * as node from "./node"; + +export { + node, +}; diff --git a/sdk/nodejs/sdn/fabric/node/getOpenfabric.ts b/sdk/nodejs/sdn/fabric/node/getOpenfabric.ts new file mode 100644 index 00000000..2d75e744 --- /dev/null +++ b/sdk/nodejs/sdn/fabric/node/getOpenfabric.ts @@ -0,0 +1,105 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../../../utilities"; + +/** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.node.getOpenfabric({ + * fabricId: "main-fabric", + * nodeId: "pve", + * }); + * ``` + */ +export function getOpenfabric(args: GetOpenfabricArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", { + "fabricId": args.fabricId, + "nodeId": args.nodeId, + }, opts); +} + +/** + * A collection of arguments for invoking getOpenfabric. + */ +export interface GetOpenfabricArgs { + /** + * The unique identifier of the SDN fabric. + */ + fabricId: string; + /** + * The unique identifier of the SDN fabric node. + */ + nodeId: string; +} + +/** + * A collection of values returned by getOpenfabric. + */ +export interface GetOpenfabricResult { + /** + * The unique identifier of the SDN fabric. + */ + readonly fabricId: string; + readonly id: string; + /** + * Set of interface names associated with the fabric node. + */ + readonly interfaceNames: string[]; + /** + * IPv4 address for the fabric node. + */ + readonly ip: string; + /** + * IPv6 address for the fabric node. + */ + readonly ip6: string; + /** + * The unique identifier of the SDN fabric node. + */ + readonly nodeId: string; +} +/** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.node.getOpenfabric({ + * fabricId: "main-fabric", + * nodeId: "pve", + * }); + * ``` + */ +export function getOpenfabricOutput(args: GetOpenfabricOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric", { + "fabricId": args.fabricId, + "nodeId": args.nodeId, + }, opts); +} + +/** + * A collection of arguments for invoking getOpenfabric. + */ +export interface GetOpenfabricOutputArgs { + /** + * The unique identifier of the SDN fabric. + */ + fabricId: pulumi.Input; + /** + * The unique identifier of the SDN fabric node. + */ + nodeId: pulumi.Input; +} diff --git a/sdk/nodejs/sdn/fabric/node/getOspf.ts b/sdk/nodejs/sdn/fabric/node/getOspf.ts new file mode 100644 index 00000000..4f05a03c --- /dev/null +++ b/sdk/nodejs/sdn/fabric/node/getOspf.ts @@ -0,0 +1,101 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../../../utilities"; + +/** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.node.getOspf({ + * fabricId: "main-fabric", + * nodeId: "pve", + * }); + * ``` + */ +export function getOspf(args: GetOspfArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("proxmoxve:Sdn/fabric/node/getOspf:getOspf", { + "fabricId": args.fabricId, + "nodeId": args.nodeId, + }, opts); +} + +/** + * A collection of arguments for invoking getOspf. + */ +export interface GetOspfArgs { + /** + * The unique identifier of the SDN fabric. + */ + fabricId: string; + /** + * The unique identifier of the SDN fabric node. + */ + nodeId: string; +} + +/** + * A collection of values returned by getOspf. + */ +export interface GetOspfResult { + /** + * The unique identifier of the SDN fabric. + */ + readonly fabricId: string; + readonly id: string; + /** + * Set of interface names associated with the fabric node. + */ + readonly interfaceNames: string[]; + /** + * IPv4 address for the fabric node. + */ + readonly ip: string; + /** + * The unique identifier of the SDN fabric node. + */ + readonly nodeId: string; +} +/** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = proxmoxve.Sdn.fabric.node.getOspf({ + * fabricId: "main-fabric", + * nodeId: "pve", + * }); + * ``` + */ +export function getOspfOutput(args: GetOspfOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("proxmoxve:Sdn/fabric/node/getOspf:getOspf", { + "fabricId": args.fabricId, + "nodeId": args.nodeId, + }, opts); +} + +/** + * A collection of arguments for invoking getOspf. + */ +export interface GetOspfOutputArgs { + /** + * The unique identifier of the SDN fabric. + */ + fabricId: pulumi.Input; + /** + * The unique identifier of the SDN fabric node. + */ + nodeId: pulumi.Input; +} diff --git a/sdk/nodejs/sdn/fabric/node/index.ts b/sdk/nodejs/sdn/fabric/node/index.ts new file mode 100644 index 00000000..fd047bad --- /dev/null +++ b/sdk/nodejs/sdn/fabric/node/index.ts @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../../../utilities"; + +// Export members: +export { GetOpenfabricArgs, GetOpenfabricResult, GetOpenfabricOutputArgs } from "./getOpenfabric"; +export const getOpenfabric: typeof import("./getOpenfabric").getOpenfabric = null as any; +export const getOpenfabricOutput: typeof import("./getOpenfabric").getOpenfabricOutput = null as any; +utilities.lazyLoad(exports, ["getOpenfabric","getOpenfabricOutput"], () => require("./getOpenfabric")); + +export { GetOspfArgs, GetOspfResult, GetOspfOutputArgs } from "./getOspf"; +export const getOspf: typeof import("./getOspf").getOspf = null as any; +export const getOspfOutput: typeof import("./getOspf").getOspfOutput = null as any; +utilities.lazyLoad(exports, ["getOspf","getOspfOutput"], () => require("./getOspf")); + +export { OpenfabricArgs, OpenfabricState } from "./openfabric"; +export type Openfabric = import("./openfabric").Openfabric; +export const Openfabric: typeof import("./openfabric").Openfabric = null as any; +utilities.lazyLoad(exports, ["Openfabric"], () => require("./openfabric")); + +export { OspfArgs, OspfState } from "./ospf"; +export type Ospf = import("./ospf").Ospf; +export const Ospf: typeof import("./ospf").Ospf = null as any; +utilities.lazyLoad(exports, ["Ospf"], () => require("./ospf")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "proxmoxve:Sdn/fabric/node/openfabric:Openfabric": + return new Openfabric(name, undefined, { urn }) + case "proxmoxve:Sdn/fabric/node/ospf:Ospf": + return new Ospf(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("proxmoxve", "Sdn/fabric/node/openfabric", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Sdn/fabric/node/ospf", _module) diff --git a/sdk/nodejs/sdn/fabric/node/openfabric.ts b/sdk/nodejs/sdn/fabric/node/openfabric.ts new file mode 100644 index 00000000..bc24d608 --- /dev/null +++ b/sdk/nodejs/sdn/fabric/node/openfabric.ts @@ -0,0 +1,170 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../../../utilities"; + +/** + * OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = new proxmoxve.sdnfabric.OpenFabric("main", { + * fabricId: "main-fabric", + * ipPrefix: "10.0.0.0/16", + * }); + * const mainOpenfabric = new proxmoxve.sdn.fabric.node.Openfabric("main", { + * fabricId: main.fabricId, + * nodeId: "pve", + * ip: "10.0.0.1", + * interfaceNames: [ + * "nic0", + * "nic1", + * ], + * }); + * ``` + */ +export class Openfabric extends pulumi.CustomResource { + /** + * Get an existing Openfabric resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: OpenfabricState, opts?: pulumi.CustomResourceOptions): Openfabric { + return new Openfabric(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Sdn/fabric/node/openfabric:Openfabric'; + + /** + * Returns true if the given object is an instance of Openfabric. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Openfabric { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Openfabric.__pulumiType; + } + + /** + * The unique identifier of the SDN fabric. + */ + declare public readonly fabricId: pulumi.Output; + /** + * Set of interfaces associated with the fabric node. + */ + declare public readonly interfaceNames: pulumi.Output; + /** + * IPv4 address for the fabric node. + */ + declare public readonly ip: pulumi.Output; + /** + * IPv6 address for the fabric node. + */ + declare public readonly ip6: pulumi.Output; + /** + * The unique identifier of the SDN fabric. + */ + declare public readonly nodeId: pulumi.Output; + + /** + * Create a Openfabric resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: OpenfabricArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: OpenfabricArgs | OpenfabricState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as OpenfabricState | undefined; + resourceInputs["fabricId"] = state?.fabricId; + resourceInputs["interfaceNames"] = state?.interfaceNames; + resourceInputs["ip"] = state?.ip; + resourceInputs["ip6"] = state?.ip6; + resourceInputs["nodeId"] = state?.nodeId; + } else { + const args = argsOrState as OpenfabricArgs | undefined; + if (args?.fabricId === undefined && !opts.urn) { + throw new Error("Missing required property 'fabricId'"); + } + if (args?.interfaceNames === undefined && !opts.urn) { + throw new Error("Missing required property 'interfaceNames'"); + } + if (args?.nodeId === undefined && !opts.urn) { + throw new Error("Missing required property 'nodeId'"); + } + resourceInputs["fabricId"] = args?.fabricId; + resourceInputs["interfaceNames"] = args?.interfaceNames; + resourceInputs["ip"] = args?.ip; + resourceInputs["ip6"] = args?.ip6; + resourceInputs["nodeId"] = args?.nodeId; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Openfabric.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Openfabric resources. + */ +export interface OpenfabricState { + /** + * The unique identifier of the SDN fabric. + */ + fabricId?: pulumi.Input; + /** + * Set of interfaces associated with the fabric node. + */ + interfaceNames?: pulumi.Input[]>; + /** + * IPv4 address for the fabric node. + */ + ip?: pulumi.Input; + /** + * IPv6 address for the fabric node. + */ + ip6?: pulumi.Input; + /** + * The unique identifier of the SDN fabric. + */ + nodeId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Openfabric resource. + */ +export interface OpenfabricArgs { + /** + * The unique identifier of the SDN fabric. + */ + fabricId: pulumi.Input; + /** + * Set of interfaces associated with the fabric node. + */ + interfaceNames: pulumi.Input[]>; + /** + * IPv4 address for the fabric node. + */ + ip?: pulumi.Input; + /** + * IPv6 address for the fabric node. + */ + ip6?: pulumi.Input; + /** + * The unique identifier of the SDN fabric. + */ + nodeId: pulumi.Input; +} diff --git a/sdk/nodejs/sdn/fabric/node/ospf.ts b/sdk/nodejs/sdn/fabric/node/ospf.ts new file mode 100644 index 00000000..eaa3484f --- /dev/null +++ b/sdk/nodejs/sdn/fabric/node/ospf.ts @@ -0,0 +1,160 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../../../utilities"; + +/** + * OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = new proxmoxve.sdnfabric.OSPF("main", { + * ospfId: "main-fabric", + * ipPrefix: "10.0.0.0/16", + * area: "0", + * }); + * const mainOspf = new proxmoxve.sdn.fabric.node.Ospf("main", { + * fabricId: main.ospfId, + * nodeId: "pve", + * ip: "10.0.0.1", + * interfaceNames: [ + * "nic0", + * "nic1", + * ], + * }); + * ``` + */ +export class Ospf extends pulumi.CustomResource { + /** + * Get an existing Ospf resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: OspfState, opts?: pulumi.CustomResourceOptions): Ospf { + return new Ospf(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Sdn/fabric/node/ospf:Ospf'; + + /** + * Returns true if the given object is an instance of Ospf. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Ospf { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Ospf.__pulumiType; + } + + /** + * The unique identifier of the SDN fabric. + */ + declare public readonly fabricId: pulumi.Output; + /** + * Set of interfaces associated with the fabric node. + */ + declare public readonly interfaceNames: pulumi.Output; + /** + * IPv4 address for the fabric node. + */ + declare public readonly ip: pulumi.Output; + /** + * The unique identifier of the SDN fabric node. + */ + declare public readonly nodeId: pulumi.Output; + + /** + * Create a Ospf resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: OspfArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: OspfArgs | OspfState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as OspfState | undefined; + resourceInputs["fabricId"] = state?.fabricId; + resourceInputs["interfaceNames"] = state?.interfaceNames; + resourceInputs["ip"] = state?.ip; + resourceInputs["nodeId"] = state?.nodeId; + } else { + const args = argsOrState as OspfArgs | undefined; + if (args?.fabricId === undefined && !opts.urn) { + throw new Error("Missing required property 'fabricId'"); + } + if (args?.interfaceNames === undefined && !opts.urn) { + throw new Error("Missing required property 'interfaceNames'"); + } + if (args?.ip === undefined && !opts.urn) { + throw new Error("Missing required property 'ip'"); + } + if (args?.nodeId === undefined && !opts.urn) { + throw new Error("Missing required property 'nodeId'"); + } + resourceInputs["fabricId"] = args?.fabricId; + resourceInputs["interfaceNames"] = args?.interfaceNames; + resourceInputs["ip"] = args?.ip; + resourceInputs["nodeId"] = args?.nodeId; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Ospf.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Ospf resources. + */ +export interface OspfState { + /** + * The unique identifier of the SDN fabric. + */ + fabricId?: pulumi.Input; + /** + * Set of interfaces associated with the fabric node. + */ + interfaceNames?: pulumi.Input[]>; + /** + * IPv4 address for the fabric node. + */ + ip?: pulumi.Input; + /** + * The unique identifier of the SDN fabric node. + */ + nodeId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Ospf resource. + */ +export interface OspfArgs { + /** + * The unique identifier of the SDN fabric. + */ + fabricId: pulumi.Input; + /** + * Set of interfaces associated with the fabric node. + */ + interfaceNames: pulumi.Input[]>; + /** + * IPv4 address for the fabric node. + */ + ip: pulumi.Input; + /** + * The unique identifier of the SDN fabric node. + */ + nodeId: pulumi.Input; +} diff --git a/sdk/nodejs/sdn/index.ts b/sdk/nodejs/sdn/index.ts index 0e3db7d1..91694390 100644 --- a/sdk/nodejs/sdn/index.ts +++ b/sdk/nodejs/sdn/index.ts @@ -41,6 +41,13 @@ export const Vnet: typeof import("./vnet").Vnet = null as any; utilities.lazyLoad(exports, ["Vnet"], () => require("./vnet")); +// Export sub-modules: +import * as fabric from "./fabric"; + +export { + fabric, +}; + const _module = { version: utilities.getVersion(), construct: (name: string, type: string, urn: string): pulumi.Resource => { diff --git a/sdk/nodejs/sdnfabric/index.ts b/sdk/nodejs/sdnfabric/index.ts new file mode 100644 index 00000000..37548a12 --- /dev/null +++ b/sdk/nodejs/sdnfabric/index.ts @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { OpenFabricArgs, OpenFabricState } from "./openFabric"; +export type OpenFabric = import("./openFabric").OpenFabric; +export const OpenFabric: typeof import("./openFabric").OpenFabric = null as any; +utilities.lazyLoad(exports, ["OpenFabric"], () => require("./openFabric")); + +export { OSPFArgs, OSPFState } from "./ospf"; +export type OSPF = import("./ospf").OSPF; +export const OSPF: typeof import("./ospf").OSPF = null as any; +utilities.lazyLoad(exports, ["OSPF"], () => require("./ospf")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "proxmoxve:SDNFabric/oSPF:OSPF": + return new OSPF(name, undefined, { urn }) + case "proxmoxve:SDNFabric/openFabric:OpenFabric": + return new OpenFabric(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("proxmoxve", "SDNFabric/oSPF", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "SDNFabric/openFabric", _module) diff --git a/sdk/nodejs/sdnfabric/openFabric.ts b/sdk/nodejs/sdnfabric/openFabric.ts new file mode 100644 index 00000000..4afe78ba --- /dev/null +++ b/sdk/nodejs/sdnfabric/openFabric.ts @@ -0,0 +1,155 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = new proxmoxve.sdnfabric.OpenFabric("main", { + * fabricId: "main-fabric", + * ipPrefix: "10.0.0.0/16", + * }); + * ``` + */ +export class OpenFabric extends pulumi.CustomResource { + /** + * Get an existing OpenFabric resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: OpenFabricState, opts?: pulumi.CustomResourceOptions): OpenFabric { + return new OpenFabric(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:SDNFabric/openFabric:OpenFabric'; + + /** + * Returns true if the given object is an instance of OpenFabric. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is OpenFabric { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === OpenFabric.__pulumiType; + } + + /** + * The csnpInterval property for OpenFabric. + */ + declare public readonly csnpInterval: pulumi.Output; + /** + * The unique identifier of the SDN fabric. + */ + declare public readonly fabricId: pulumi.Output; + /** + * The helloInterval property for OpenFabric. + */ + declare public readonly helloInterval: pulumi.Output; + /** + * IPv6 prefix cidr for the fabric. + */ + declare public readonly ip6Prefix: pulumi.Output; + /** + * IPv4 prefix cidr for the fabric. + */ + declare public readonly ipPrefix: pulumi.Output; + + /** + * Create a OpenFabric resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: OpenFabricArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: OpenFabricArgs | OpenFabricState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as OpenFabricState | undefined; + resourceInputs["csnpInterval"] = state?.csnpInterval; + resourceInputs["fabricId"] = state?.fabricId; + resourceInputs["helloInterval"] = state?.helloInterval; + resourceInputs["ip6Prefix"] = state?.ip6Prefix; + resourceInputs["ipPrefix"] = state?.ipPrefix; + } else { + const args = argsOrState as OpenFabricArgs | undefined; + if (args?.fabricId === undefined && !opts.urn) { + throw new Error("Missing required property 'fabricId'"); + } + resourceInputs["csnpInterval"] = args?.csnpInterval; + resourceInputs["fabricId"] = args?.fabricId; + resourceInputs["helloInterval"] = args?.helloInterval; + resourceInputs["ip6Prefix"] = args?.ip6Prefix; + resourceInputs["ipPrefix"] = args?.ipPrefix; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(OpenFabric.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering OpenFabric resources. + */ +export interface OpenFabricState { + /** + * The csnpInterval property for OpenFabric. + */ + csnpInterval?: pulumi.Input; + /** + * The unique identifier of the SDN fabric. + */ + fabricId?: pulumi.Input; + /** + * The helloInterval property for OpenFabric. + */ + helloInterval?: pulumi.Input; + /** + * IPv6 prefix cidr for the fabric. + */ + ip6Prefix?: pulumi.Input; + /** + * IPv4 prefix cidr for the fabric. + */ + ipPrefix?: pulumi.Input; +} + +/** + * The set of arguments for constructing a OpenFabric resource. + */ +export interface OpenFabricArgs { + /** + * The csnpInterval property for OpenFabric. + */ + csnpInterval?: pulumi.Input; + /** + * The unique identifier of the SDN fabric. + */ + fabricId: pulumi.Input; + /** + * The helloInterval property for OpenFabric. + */ + helloInterval?: pulumi.Input; + /** + * IPv6 prefix cidr for the fabric. + */ + ip6Prefix?: pulumi.Input; + /** + * IPv4 prefix cidr for the fabric. + */ + ipPrefix?: pulumi.Input; +} diff --git a/sdk/nodejs/sdnfabric/ospf.ts b/sdk/nodejs/sdnfabric/ospf.ts new file mode 100644 index 00000000..abbe408b --- /dev/null +++ b/sdk/nodejs/sdnfabric/ospf.ts @@ -0,0 +1,134 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const main = new proxmoxve.sdnfabric.OSPF("main", { + * ospfId: "main-fabric", + * ipPrefix: "10.0.0.0/16", + * area: "0", + * }); + * ``` + */ +export class OSPF extends pulumi.CustomResource { + /** + * Get an existing OSPF resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: OSPFState, opts?: pulumi.CustomResourceOptions): OSPF { + return new OSPF(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:SDNFabric/oSPF:OSPF'; + + /** + * Returns true if the given object is an instance of OSPF. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is OSPF { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === OSPF.__pulumiType; + } + + /** + * OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + */ + declare public readonly area: pulumi.Output; + /** + * IPv4 prefix cidr for the fabric. + */ + declare public readonly ipPrefix: pulumi.Output; + /** + * The unique identifier of the SDN fabric. + */ + declare public readonly ospfId: pulumi.Output; + + /** + * Create a OSPF resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: OSPFArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: OSPFArgs | OSPFState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as OSPFState | undefined; + resourceInputs["area"] = state?.area; + resourceInputs["ipPrefix"] = state?.ipPrefix; + resourceInputs["ospfId"] = state?.ospfId; + } else { + const args = argsOrState as OSPFArgs | undefined; + if (args?.area === undefined && !opts.urn) { + throw new Error("Missing required property 'area'"); + } + if (args?.ipPrefix === undefined && !opts.urn) { + throw new Error("Missing required property 'ipPrefix'"); + } + if (args?.ospfId === undefined && !opts.urn) { + throw new Error("Missing required property 'ospfId'"); + } + resourceInputs["area"] = args?.area; + resourceInputs["ipPrefix"] = args?.ipPrefix; + resourceInputs["ospfId"] = args?.ospfId; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(OSPF.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering OSPF resources. + */ +export interface OSPFState { + /** + * OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + */ + area?: pulumi.Input; + /** + * IPv4 prefix cidr for the fabric. + */ + ipPrefix?: pulumi.Input; + /** + * The unique identifier of the SDN fabric. + */ + ospfId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a OSPF resource. + */ +export interface OSPFArgs { + /** + * OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + */ + area: pulumi.Input; + /** + * IPv4 prefix cidr for the fabric. + */ + ipPrefix: pulumi.Input; + /** + * The unique identifier of the SDN fabric. + */ + ospfId: pulumi.Input; +} diff --git a/sdk/nodejs/sdnzone/evpn.ts b/sdk/nodejs/sdnzone/evpn.ts index 3fe2dcaf..aa0e3793 100644 --- a/sdk/nodejs/sdnzone/evpn.ts +++ b/sdk/nodejs/sdnzone/evpn.ts @@ -76,7 +76,7 @@ export class Evpn extends pulumi.CustomResource { /** * Enable subnet advertisement for EVPN. */ - declare public readonly advertiseSubnets: pulumi.Output; + declare public readonly advertiseSubnets: pulumi.Output; /** * EVPN controller address. */ @@ -84,7 +84,7 @@ export class Evpn extends pulumi.CustomResource { /** * Disable ARP/ND suppression for EVPN. */ - declare public readonly disableArpNdSuppression: pulumi.Output; + declare public readonly disableArpNdSuppression: pulumi.Output; /** * DNS API server address. */ @@ -100,15 +100,15 @@ export class Evpn extends pulumi.CustomResource { /** * Enable local routing for EVPN exit nodes. */ - declare public readonly exitNodesLocalRouting: pulumi.Output; + declare public readonly exitNodesLocalRouting: pulumi.Output; /** * IP Address Management system. */ declare public readonly ipam: pulumi.Output; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ - declare public readonly mtu: pulumi.Output; + declare public readonly mtu: pulumi.Output; /** * The Proxmox nodes which the zone and associated VNets should be deployed on */ @@ -243,7 +243,7 @@ export interface EvpnState { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** @@ -317,7 +317,7 @@ export interface EvpnArgs { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** diff --git a/sdk/nodejs/sdnzone/qinq.ts b/sdk/nodejs/sdnzone/qinq.ts index 348359b7..a67e4d73 100644 --- a/sdk/nodejs/sdnzone/qinq.ts +++ b/sdk/nodejs/sdnzone/qinq.ts @@ -81,9 +81,9 @@ export class Qinq extends pulumi.CustomResource { */ declare public readonly ipam: pulumi.Output; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ - declare public readonly mtu: pulumi.Output; + declare public readonly mtu: pulumi.Output; /** * The Proxmox nodes which the zone and associated VNets should be deployed on */ @@ -103,7 +103,7 @@ export class Qinq extends pulumi.CustomResource { /** * Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`. */ - declare public readonly serviceVlanProtocol: pulumi.Output; + declare public readonly serviceVlanProtocol: pulumi.Output; /** * Indicates the current state of the zone. */ @@ -188,7 +188,7 @@ export interface QinqState { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** @@ -242,7 +242,7 @@ export interface QinqArgs { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** diff --git a/sdk/nodejs/sdnzone/simple.ts b/sdk/nodejs/sdnzone/simple.ts index 9c3fed43..815d8509 100644 --- a/sdk/nodejs/sdnzone/simple.ts +++ b/sdk/nodejs/sdnzone/simple.ts @@ -79,9 +79,9 @@ export class Simple extends pulumi.CustomResource { */ declare public readonly ipam: pulumi.Output; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ - declare public readonly mtu: pulumi.Output; + declare public readonly mtu: pulumi.Output; /** * The Proxmox nodes which the zone and associated VNets should be deployed on */ @@ -168,7 +168,7 @@ export interface SimpleState { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** @@ -214,7 +214,7 @@ export interface SimpleArgs { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** diff --git a/sdk/nodejs/sdnzone/vlan.ts b/sdk/nodejs/sdnzone/vlan.ts index 1d34201a..36cf3fb2 100644 --- a/sdk/nodejs/sdnzone/vlan.ts +++ b/sdk/nodejs/sdnzone/vlan.ts @@ -79,9 +79,9 @@ export class Vlan extends pulumi.CustomResource { */ declare public readonly ipam: pulumi.Output; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ - declare public readonly mtu: pulumi.Output; + declare public readonly mtu: pulumi.Output; /** * The Proxmox nodes which the zone and associated VNets should be deployed on */ @@ -171,7 +171,7 @@ export interface VlanState { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** @@ -217,7 +217,7 @@ export interface VlanArgs { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** diff --git a/sdk/nodejs/sdnzone/vxlan.ts b/sdk/nodejs/sdnzone/vxlan.ts index 59227d28..1b7f4c6f 100644 --- a/sdk/nodejs/sdnzone/vxlan.ts +++ b/sdk/nodejs/sdnzone/vxlan.ts @@ -79,9 +79,9 @@ export class Vxlan extends pulumi.CustomResource { */ declare public readonly ipam: pulumi.Output; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ - declare public readonly mtu: pulumi.Output; + declare public readonly mtu: pulumi.Output; /** * The Proxmox nodes which the zone and associated VNets should be deployed on */ @@ -171,7 +171,7 @@ export interface VxlanState { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** @@ -217,7 +217,7 @@ export interface VxlanArgs { */ ipam?: pulumi.Input; /** - * MTU value for the zone. + * MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. */ mtu?: pulumi.Input; /** diff --git a/sdk/nodejs/storage/cifs.ts b/sdk/nodejs/storage/cifs.ts new file mode 100644 index 00000000..61db866d --- /dev/null +++ b/sdk/nodejs/storage/cifs.ts @@ -0,0 +1,306 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * Manages an SMB/CIFS based storage server in Proxmox VE. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const example = new proxmoxve.storage.CIFS("example", { + * cifsId: "example-cifs", + * nodes: ["pve"], + * server: "10.0.0.20", + * share: "proxmox", + * username: "cifs-user", + * password: "cifs-password", + * contents: ["images"], + * domain: "WORKGROUP", + * subdirectory: "terraform", + * preallocation: "metadata", + * snapshotAsVolumeChain: true, + * backups: { + * maxProtectedBackups: 5, + * keepDaily: 7, + * }, + * }); + * ``` + */ +export class CIFS extends pulumi.CustomResource { + /** + * Get an existing CIFS resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: CIFSState, opts?: pulumi.CustomResourceOptions): CIFS { + return new CIFS(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Storage/cIFS:CIFS'; + + /** + * Returns true if the given object is an instance of CIFS. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is CIFS { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === CIFS.__pulumiType; + } + + /** + * Configure backup retention settings for the storage type. + */ + declare public readonly backups: pulumi.Output; + /** + * The unique identifier of the storage. + */ + declare public readonly cifsId: pulumi.Output; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + declare public readonly contents: pulumi.Output; + /** + * Whether the storage is disabled. + */ + declare public readonly disable: pulumi.Output; + /** + * The SMB/CIFS domain. + */ + declare public readonly domain: pulumi.Output; + /** + * A list of nodes where this storage is available. + */ + declare public readonly nodes: pulumi.Output; + /** + * The password for authenticating with the SMB/CIFS server. + */ + declare public readonly password: pulumi.Output; + /** + * The preallocation mode for raw and qcow2 images. + */ + declare public readonly preallocation: pulumi.Output; + /** + * The IP address or DNS name of the SMB/CIFS server. + */ + declare public readonly server: pulumi.Output; + /** + * The name of the SMB/CIFS share. + */ + declare public readonly share: pulumi.Output; + /** + * Whether the storage is shared across all nodes. + */ + declare public /*out*/ readonly shared: pulumi.Output; + /** + * Enable support for creating snapshots through volume backing-chains. + */ + declare public readonly snapshotAsVolumeChain: pulumi.Output; + /** + * A subdirectory to mount within the share. + */ + declare public readonly subdirectory: pulumi.Output; + /** + * The username for authenticating with the SMB/CIFS server. + */ + declare public readonly username: pulumi.Output; + + /** + * Create a CIFS resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: CIFSArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: CIFSArgs | CIFSState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as CIFSState | undefined; + resourceInputs["backups"] = state?.backups; + resourceInputs["cifsId"] = state?.cifsId; + resourceInputs["contents"] = state?.contents; + resourceInputs["disable"] = state?.disable; + resourceInputs["domain"] = state?.domain; + resourceInputs["nodes"] = state?.nodes; + resourceInputs["password"] = state?.password; + resourceInputs["preallocation"] = state?.preallocation; + resourceInputs["server"] = state?.server; + resourceInputs["share"] = state?.share; + resourceInputs["shared"] = state?.shared; + resourceInputs["snapshotAsVolumeChain"] = state?.snapshotAsVolumeChain; + resourceInputs["subdirectory"] = state?.subdirectory; + resourceInputs["username"] = state?.username; + } else { + const args = argsOrState as CIFSArgs | undefined; + if (args?.cifsId === undefined && !opts.urn) { + throw new Error("Missing required property 'cifsId'"); + } + if (args?.password === undefined && !opts.urn) { + throw new Error("Missing required property 'password'"); + } + if (args?.server === undefined && !opts.urn) { + throw new Error("Missing required property 'server'"); + } + if (args?.share === undefined && !opts.urn) { + throw new Error("Missing required property 'share'"); + } + if (args?.username === undefined && !opts.urn) { + throw new Error("Missing required property 'username'"); + } + resourceInputs["backups"] = args?.backups; + resourceInputs["cifsId"] = args?.cifsId; + resourceInputs["contents"] = args?.contents; + resourceInputs["disable"] = args?.disable; + resourceInputs["domain"] = args?.domain; + resourceInputs["nodes"] = args?.nodes; + resourceInputs["password"] = args?.password ? pulumi.secret(args.password) : undefined; + resourceInputs["preallocation"] = args?.preallocation; + resourceInputs["server"] = args?.server; + resourceInputs["share"] = args?.share; + resourceInputs["snapshotAsVolumeChain"] = args?.snapshotAsVolumeChain; + resourceInputs["subdirectory"] = args?.subdirectory; + resourceInputs["username"] = args?.username; + resourceInputs["shared"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["password"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(CIFS.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering CIFS resources. + */ +export interface CIFSState { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + cifsId?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The SMB/CIFS domain. + */ + domain?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The password for authenticating with the SMB/CIFS server. + */ + password?: pulumi.Input; + /** + * The preallocation mode for raw and qcow2 images. + */ + preallocation?: pulumi.Input; + /** + * The IP address or DNS name of the SMB/CIFS server. + */ + server?: pulumi.Input; + /** + * The name of the SMB/CIFS share. + */ + share?: pulumi.Input; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; + /** + * Enable support for creating snapshots through volume backing-chains. + */ + snapshotAsVolumeChain?: pulumi.Input; + /** + * A subdirectory to mount within the share. + */ + subdirectory?: pulumi.Input; + /** + * The username for authenticating with the SMB/CIFS server. + */ + username?: pulumi.Input; +} + +/** + * The set of arguments for constructing a CIFS resource. + */ +export interface CIFSArgs { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + cifsId: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The SMB/CIFS domain. + */ + domain?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The password for authenticating with the SMB/CIFS server. + */ + password: pulumi.Input; + /** + * The preallocation mode for raw and qcow2 images. + */ + preallocation?: pulumi.Input; + /** + * The IP address or DNS name of the SMB/CIFS server. + */ + server: pulumi.Input; + /** + * The name of the SMB/CIFS share. + */ + share: pulumi.Input; + /** + * Enable support for creating snapshots through volume backing-chains. + */ + snapshotAsVolumeChain?: pulumi.Input; + /** + * A subdirectory to mount within the share. + */ + subdirectory?: pulumi.Input; + /** + * The username for authenticating with the SMB/CIFS server. + */ + username: pulumi.Input; +} diff --git a/sdk/nodejs/storage/directory.ts b/sdk/nodejs/storage/directory.ts new file mode 100644 index 00000000..f2a960a8 --- /dev/null +++ b/sdk/nodejs/storage/directory.ts @@ -0,0 +1,210 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * Manages directory-based storage in Proxmox VE. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const example = new proxmoxve.storage.Directory("example", { + * directoryId: "example-dir", + * path: "/var/lib/vz", + * nodes: ["pve"], + * contents: ["images"], + * shared: true, + * disable: false, + * backups: { + * maxProtectedBackups: 5, + * keepDaily: 7, + * }, + * }); + * ``` + */ +export class Directory extends pulumi.CustomResource { + /** + * Get an existing Directory resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: DirectoryState, opts?: pulumi.CustomResourceOptions): Directory { + return new Directory(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Storage/directory:Directory'; + + /** + * Returns true if the given object is an instance of Directory. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Directory { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Directory.__pulumiType; + } + + /** + * Configure backup retention settings for the storage type. + */ + declare public readonly backups: pulumi.Output; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + declare public readonly contents: pulumi.Output; + /** + * The unique identifier of the storage. + */ + declare public readonly directoryId: pulumi.Output; + /** + * Whether the storage is disabled. + */ + declare public readonly disable: pulumi.Output; + /** + * A list of nodes where this storage is available. + */ + declare public readonly nodes: pulumi.Output; + /** + * The path to the directory on the Proxmox node. + */ + declare public readonly path: pulumi.Output; + /** + * The preallocation mode for raw and qcow2 images. + */ + declare public readonly preallocation: pulumi.Output; + /** + * Whether the storage is shared across all nodes. + */ + declare public readonly shared: pulumi.Output; + + /** + * Create a Directory resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: DirectoryArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: DirectoryArgs | DirectoryState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as DirectoryState | undefined; + resourceInputs["backups"] = state?.backups; + resourceInputs["contents"] = state?.contents; + resourceInputs["directoryId"] = state?.directoryId; + resourceInputs["disable"] = state?.disable; + resourceInputs["nodes"] = state?.nodes; + resourceInputs["path"] = state?.path; + resourceInputs["preallocation"] = state?.preallocation; + resourceInputs["shared"] = state?.shared; + } else { + const args = argsOrState as DirectoryArgs | undefined; + if (args?.directoryId === undefined && !opts.urn) { + throw new Error("Missing required property 'directoryId'"); + } + if (args?.path === undefined && !opts.urn) { + throw new Error("Missing required property 'path'"); + } + resourceInputs["backups"] = args?.backups; + resourceInputs["contents"] = args?.contents; + resourceInputs["directoryId"] = args?.directoryId; + resourceInputs["disable"] = args?.disable; + resourceInputs["nodes"] = args?.nodes; + resourceInputs["path"] = args?.path; + resourceInputs["preallocation"] = args?.preallocation; + resourceInputs["shared"] = args?.shared; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Directory.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Directory resources. + */ +export interface DirectoryState { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * The unique identifier of the storage. + */ + directoryId?: pulumi.Input; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The path to the directory on the Proxmox node. + */ + path?: pulumi.Input; + /** + * The preallocation mode for raw and qcow2 images. + */ + preallocation?: pulumi.Input; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Directory resource. + */ +export interface DirectoryArgs { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * The unique identifier of the storage. + */ + directoryId: pulumi.Input; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The path to the directory on the Proxmox node. + */ + path: pulumi.Input; + /** + * The preallocation mode for raw and qcow2 images. + */ + preallocation?: pulumi.Input; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; +} diff --git a/sdk/nodejs/storage/index.ts b/sdk/nodejs/storage/index.ts index bb66be11..ff3e66ff 100644 --- a/sdk/nodejs/storage/index.ts +++ b/sdk/nodejs/storage/index.ts @@ -5,6 +5,16 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; // Export members: +export { CIFSArgs, CIFSState } from "./cifs"; +export type CIFS = import("./cifs").CIFS; +export const CIFS: typeof import("./cifs").CIFS = null as any; +utilities.lazyLoad(exports, ["CIFS"], () => require("./cifs")); + +export { DirectoryArgs, DirectoryState } from "./directory"; +export type Directory = import("./directory").Directory; +export const Directory: typeof import("./directory").Directory = null as any; +utilities.lazyLoad(exports, ["Directory"], () => require("./directory")); + export { FileArgs, FileState } from "./file"; export type File = import("./file").File; export const File: typeof import("./file").File = null as any; @@ -15,16 +25,62 @@ export const getDatastores: typeof import("./getDatastores").getDatastores = nul export const getDatastoresOutput: typeof import("./getDatastores").getDatastoresOutput = null as any; utilities.lazyLoad(exports, ["getDatastores","getDatastoresOutput"], () => require("./getDatastores")); +export { LVMArgs, LVMState } from "./lvm"; +export type LVM = import("./lvm").LVM; +export const LVM: typeof import("./lvm").LVM = null as any; +utilities.lazyLoad(exports, ["LVM"], () => require("./lvm")); + +export { LVMThinArgs, LVMThinState } from "./lvmthin"; +export type LVMThin = import("./lvmthin").LVMThin; +export const LVMThin: typeof import("./lvmthin").LVMThin = null as any; +utilities.lazyLoad(exports, ["LVMThin"], () => require("./lvmthin")); + +export { NFSArgs, NFSState } from "./nfs"; +export type NFS = import("./nfs").NFS; +export const NFS: typeof import("./nfs").NFS = null as any; +utilities.lazyLoad(exports, ["NFS"], () => require("./nfs")); + +export { PBSArgs, PBSState } from "./pbs"; +export type PBS = import("./pbs").PBS; +export const PBS: typeof import("./pbs").PBS = null as any; +utilities.lazyLoad(exports, ["PBS"], () => require("./pbs")); + +export { ZFSPoolArgs, ZFSPoolState } from "./zfspool"; +export type ZFSPool = import("./zfspool").ZFSPool; +export const ZFSPool: typeof import("./zfspool").ZFSPool = null as any; +utilities.lazyLoad(exports, ["ZFSPool"], () => require("./zfspool")); + const _module = { version: utilities.getVersion(), construct: (name: string, type: string, urn: string): pulumi.Resource => { switch (type) { + case "proxmoxve:Storage/cIFS:CIFS": + return new CIFS(name, undefined, { urn }) + case "proxmoxve:Storage/directory:Directory": + return new Directory(name, undefined, { urn }) case "proxmoxve:Storage/file:File": return new File(name, undefined, { urn }) + case "proxmoxve:Storage/lVM:LVM": + return new LVM(name, undefined, { urn }) + case "proxmoxve:Storage/lVMThin:LVMThin": + return new LVMThin(name, undefined, { urn }) + case "proxmoxve:Storage/nFS:NFS": + return new NFS(name, undefined, { urn }) + case "proxmoxve:Storage/pBS:PBS": + return new PBS(name, undefined, { urn }) + case "proxmoxve:Storage/zFSPool:ZFSPool": + return new ZFSPool(name, undefined, { urn }) default: throw new Error(`unknown resource type ${type}`); } }, }; +pulumi.runtime.registerResourceModule("proxmoxve", "Storage/cIFS", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Storage/directory", _module) pulumi.runtime.registerResourceModule("proxmoxve", "Storage/file", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Storage/lVM", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Storage/lVMThin", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Storage/nFS", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Storage/pBS", _module) +pulumi.runtime.registerResourceModule("proxmoxve", "Storage/zFSPool", _module) diff --git a/sdk/nodejs/storage/lvm.ts b/sdk/nodejs/storage/lvm.ts new file mode 100644 index 00000000..bcd25a8a --- /dev/null +++ b/sdk/nodejs/storage/lvm.ts @@ -0,0 +1,189 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * Manages LVM-based storage in Proxmox VE. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const example = new proxmoxve.storage.LVM("example", { + * lvmId: "example-lvm", + * nodes: ["pve"], + * volumeGroup: "vg0", + * contents: ["images"], + * wipeRemovedVolumes: false, + * }); + * ``` + */ +export class LVM extends pulumi.CustomResource { + /** + * Get an existing LVM resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: LVMState, opts?: pulumi.CustomResourceOptions): LVM { + return new LVM(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Storage/lVM:LVM'; + + /** + * Returns true if the given object is an instance of LVM. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is LVM { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === LVM.__pulumiType; + } + + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + declare public readonly contents: pulumi.Output; + /** + * Whether the storage is disabled. + */ + declare public readonly disable: pulumi.Output; + /** + * The unique identifier of the storage. + */ + declare public readonly lvmId: pulumi.Output; + /** + * A list of nodes where this storage is available. + */ + declare public readonly nodes: pulumi.Output; + /** + * Whether the storage is shared across all nodes. + */ + declare public readonly shared: pulumi.Output; + /** + * The name of the volume group to use. + */ + declare public readonly volumeGroup: pulumi.Output; + /** + * Whether to zero-out data when removing LVMs. + */ + declare public readonly wipeRemovedVolumes: pulumi.Output; + + /** + * Create a LVM resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: LVMArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: LVMArgs | LVMState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as LVMState | undefined; + resourceInputs["contents"] = state?.contents; + resourceInputs["disable"] = state?.disable; + resourceInputs["lvmId"] = state?.lvmId; + resourceInputs["nodes"] = state?.nodes; + resourceInputs["shared"] = state?.shared; + resourceInputs["volumeGroup"] = state?.volumeGroup; + resourceInputs["wipeRemovedVolumes"] = state?.wipeRemovedVolumes; + } else { + const args = argsOrState as LVMArgs | undefined; + if (args?.lvmId === undefined && !opts.urn) { + throw new Error("Missing required property 'lvmId'"); + } + if (args?.volumeGroup === undefined && !opts.urn) { + throw new Error("Missing required property 'volumeGroup'"); + } + resourceInputs["contents"] = args?.contents; + resourceInputs["disable"] = args?.disable; + resourceInputs["lvmId"] = args?.lvmId; + resourceInputs["nodes"] = args?.nodes; + resourceInputs["shared"] = args?.shared; + resourceInputs["volumeGroup"] = args?.volumeGroup; + resourceInputs["wipeRemovedVolumes"] = args?.wipeRemovedVolumes; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(LVM.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering LVM resources. + */ +export interface LVMState { + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + lvmId?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; + /** + * The name of the volume group to use. + */ + volumeGroup?: pulumi.Input; + /** + * Whether to zero-out data when removing LVMs. + */ + wipeRemovedVolumes?: pulumi.Input; +} + +/** + * The set of arguments for constructing a LVM resource. + */ +export interface LVMArgs { + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + lvmId: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; + /** + * The name of the volume group to use. + */ + volumeGroup: pulumi.Input; + /** + * Whether to zero-out data when removing LVMs. + */ + wipeRemovedVolumes?: pulumi.Input; +} diff --git a/sdk/nodejs/storage/lvmthin.ts b/sdk/nodejs/storage/lvmthin.ts new file mode 100644 index 00000000..f55feb33 --- /dev/null +++ b/sdk/nodejs/storage/lvmthin.ts @@ -0,0 +1,188 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * Manages thin LVM-based storage in Proxmox VE. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const example = new proxmoxve.storage.LVMThin("example", { + * lvmThinId: "example-lvmthin", + * nodes: ["pve"], + * volumeGroup: "vg0", + * thinPool: "data", + * contents: ["images"], + * }); + * ``` + */ +export class LVMThin extends pulumi.CustomResource { + /** + * Get an existing LVMThin resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: LVMThinState, opts?: pulumi.CustomResourceOptions): LVMThin { + return new LVMThin(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Storage/lVMThin:LVMThin'; + + /** + * Returns true if the given object is an instance of LVMThin. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is LVMThin { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === LVMThin.__pulumiType; + } + + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + declare public readonly contents: pulumi.Output; + /** + * Whether the storage is disabled. + */ + declare public readonly disable: pulumi.Output; + /** + * The unique identifier of the storage. + */ + declare public readonly lvmThinId: pulumi.Output; + /** + * A list of nodes where this storage is available. + */ + declare public readonly nodes: pulumi.Output; + /** + * Whether the storage is shared across all nodes. + */ + declare public /*out*/ readonly shared: pulumi.Output; + /** + * The name of the LVM thin pool to use. + */ + declare public readonly thinPool: pulumi.Output; + /** + * The name of the volume group to use. + */ + declare public readonly volumeGroup: pulumi.Output; + + /** + * Create a LVMThin resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: LVMThinArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: LVMThinArgs | LVMThinState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as LVMThinState | undefined; + resourceInputs["contents"] = state?.contents; + resourceInputs["disable"] = state?.disable; + resourceInputs["lvmThinId"] = state?.lvmThinId; + resourceInputs["nodes"] = state?.nodes; + resourceInputs["shared"] = state?.shared; + resourceInputs["thinPool"] = state?.thinPool; + resourceInputs["volumeGroup"] = state?.volumeGroup; + } else { + const args = argsOrState as LVMThinArgs | undefined; + if (args?.lvmThinId === undefined && !opts.urn) { + throw new Error("Missing required property 'lvmThinId'"); + } + if (args?.thinPool === undefined && !opts.urn) { + throw new Error("Missing required property 'thinPool'"); + } + if (args?.volumeGroup === undefined && !opts.urn) { + throw new Error("Missing required property 'volumeGroup'"); + } + resourceInputs["contents"] = args?.contents; + resourceInputs["disable"] = args?.disable; + resourceInputs["lvmThinId"] = args?.lvmThinId; + resourceInputs["nodes"] = args?.nodes; + resourceInputs["thinPool"] = args?.thinPool; + resourceInputs["volumeGroup"] = args?.volumeGroup; + resourceInputs["shared"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(LVMThin.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering LVMThin resources. + */ +export interface LVMThinState { + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + lvmThinId?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; + /** + * The name of the LVM thin pool to use. + */ + thinPool?: pulumi.Input; + /** + * The name of the volume group to use. + */ + volumeGroup?: pulumi.Input; +} + +/** + * The set of arguments for constructing a LVMThin resource. + */ +export interface LVMThinArgs { + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + lvmThinId: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The name of the LVM thin pool to use. + */ + thinPool: pulumi.Input; + /** + * The name of the volume group to use. + */ + volumeGroup: pulumi.Input; +} diff --git a/sdk/nodejs/storage/nfs.ts b/sdk/nodejs/storage/nfs.ts new file mode 100644 index 00000000..3fd4a57f --- /dev/null +++ b/sdk/nodejs/storage/nfs.ts @@ -0,0 +1,257 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * Manages an NFS-based storage in Proxmox VE. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const example = new proxmoxve.storage.NFS("example", { + * nfsId: "example-nfs", + * nodes: ["pve"], + * server: "10.0.0.10", + * "export": "/exports/proxmox", + * contents: [ + * "images", + * "iso", + * "backup", + * ], + * options: "vers=4.2", + * preallocation: "metadata", + * snapshotAsVolumeChain: true, + * backups: { + * maxProtectedBackups: 5, + * keepDaily: 7, + * }, + * }); + * ``` + */ +export class NFS extends pulumi.CustomResource { + /** + * Get an existing NFS resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: NFSState, opts?: pulumi.CustomResourceOptions): NFS { + return new NFS(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Storage/nFS:NFS'; + + /** + * Returns true if the given object is an instance of NFS. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is NFS { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === NFS.__pulumiType; + } + + /** + * Configure backup retention settings for the storage type. + */ + declare public readonly backups: pulumi.Output; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + declare public readonly contents: pulumi.Output; + /** + * Whether the storage is disabled. + */ + declare public readonly disable: pulumi.Output; + /** + * The path of the NFS export. + */ + declare public readonly export: pulumi.Output; + /** + * The unique identifier of the storage. + */ + declare public readonly nfsId: pulumi.Output; + /** + * A list of nodes where this storage is available. + */ + declare public readonly nodes: pulumi.Output; + /** + * The options to pass to the NFS service. + */ + declare public readonly options: pulumi.Output; + /** + * The preallocation mode for raw and qcow2 images. + */ + declare public readonly preallocation: pulumi.Output; + /** + * The IP address or DNS name of the NFS server. + */ + declare public readonly server: pulumi.Output; + /** + * Whether the storage is shared across all nodes. + */ + declare public /*out*/ readonly shared: pulumi.Output; + /** + * Enable support for creating snapshots through volume backing-chains. + */ + declare public readonly snapshotAsVolumeChain: pulumi.Output; + + /** + * Create a NFS resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: NFSArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: NFSArgs | NFSState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as NFSState | undefined; + resourceInputs["backups"] = state?.backups; + resourceInputs["contents"] = state?.contents; + resourceInputs["disable"] = state?.disable; + resourceInputs["export"] = state?.export; + resourceInputs["nfsId"] = state?.nfsId; + resourceInputs["nodes"] = state?.nodes; + resourceInputs["options"] = state?.options; + resourceInputs["preallocation"] = state?.preallocation; + resourceInputs["server"] = state?.server; + resourceInputs["shared"] = state?.shared; + resourceInputs["snapshotAsVolumeChain"] = state?.snapshotAsVolumeChain; + } else { + const args = argsOrState as NFSArgs | undefined; + if (args?.export === undefined && !opts.urn) { + throw new Error("Missing required property 'export'"); + } + if (args?.nfsId === undefined && !opts.urn) { + throw new Error("Missing required property 'nfsId'"); + } + if (args?.server === undefined && !opts.urn) { + throw new Error("Missing required property 'server'"); + } + resourceInputs["backups"] = args?.backups; + resourceInputs["contents"] = args?.contents; + resourceInputs["disable"] = args?.disable; + resourceInputs["export"] = args?.export; + resourceInputs["nfsId"] = args?.nfsId; + resourceInputs["nodes"] = args?.nodes; + resourceInputs["options"] = args?.options; + resourceInputs["preallocation"] = args?.preallocation; + resourceInputs["server"] = args?.server; + resourceInputs["snapshotAsVolumeChain"] = args?.snapshotAsVolumeChain; + resourceInputs["shared"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(NFS.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering NFS resources. + */ +export interface NFSState { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The path of the NFS export. + */ + export?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + nfsId?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The options to pass to the NFS service. + */ + options?: pulumi.Input; + /** + * The preallocation mode for raw and qcow2 images. + */ + preallocation?: pulumi.Input; + /** + * The IP address or DNS name of the NFS server. + */ + server?: pulumi.Input; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; + /** + * Enable support for creating snapshots through volume backing-chains. + */ + snapshotAsVolumeChain?: pulumi.Input; +} + +/** + * The set of arguments for constructing a NFS resource. + */ +export interface NFSArgs { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * The path of the NFS export. + */ + export: pulumi.Input; + /** + * The unique identifier of the storage. + */ + nfsId: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The options to pass to the NFS service. + */ + options?: pulumi.Input; + /** + * The preallocation mode for raw and qcow2 images. + */ + preallocation?: pulumi.Input; + /** + * The IP address or DNS name of the NFS server. + */ + server: pulumi.Input; + /** + * Enable support for creating snapshots through volume backing-chains. + */ + snapshotAsVolumeChain?: pulumi.Input; +} diff --git a/sdk/nodejs/storage/pbs.ts b/sdk/nodejs/storage/pbs.ts new file mode 100644 index 00000000..d01f9446 --- /dev/null +++ b/sdk/nodejs/storage/pbs.ts @@ -0,0 +1,320 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * Manages a Proxmox Backup Server (PBS) storage in Proxmox VE. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const example = new proxmoxve.storage.PBS("example", { + * pbsId: "example-pbs", + * nodes: ["pve"], + * server: "pbs.example.local", + * datastore: "backup", + * username: "pbs-user", + * password: "pbs-password", + * fingerprint: "AA:BB:CC:DD:EE:FF", + * contents: ["backup"], + * generateEncryptionKey: true, + * }); + * ``` + */ +export class PBS extends pulumi.CustomResource { + /** + * Get an existing PBS resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: PBSState, opts?: pulumi.CustomResourceOptions): PBS { + return new PBS(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Storage/pBS:PBS'; + + /** + * Returns true if the given object is an instance of PBS. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is PBS { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === PBS.__pulumiType; + } + + /** + * Configure backup retention settings for the storage type. + */ + declare public readonly backups: pulumi.Output; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + declare public readonly contents: pulumi.Output; + /** + * The name of the datastore on the Proxmox Backup Server. + */ + declare public readonly datastore: pulumi.Output; + /** + * Whether the storage is disabled. + */ + declare public readonly disable: pulumi.Output; + /** + * An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + */ + declare public readonly encryptionKey: pulumi.Output; + /** + * The SHA256 fingerprint of the encryption key currently in use. + */ + declare public /*out*/ readonly encryptionKeyFingerprint: pulumi.Output; + /** + * The SHA256 fingerprint of the Proxmox Backup Server's certificate. + */ + declare public readonly fingerprint: pulumi.Output; + /** + * If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + */ + declare public readonly generateEncryptionKey: pulumi.Output; + /** + * The encryption key returned by Proxmox when `generateEncryptionKey` is true. + */ + declare public /*out*/ readonly generatedEncryptionKey: pulumi.Output; + /** + * The namespace to use on the Proxmox Backup Server. + */ + declare public readonly namespace: pulumi.Output; + /** + * A list of nodes where this storage is available. + */ + declare public readonly nodes: pulumi.Output; + /** + * The password for authenticating with the Proxmox Backup Server. + */ + declare public readonly password: pulumi.Output; + /** + * The unique identifier of the storage. + */ + declare public readonly pbsId: pulumi.Output; + /** + * The IP address or DNS name of the Proxmox Backup Server. + */ + declare public readonly server: pulumi.Output; + /** + * Whether the storage is shared across all nodes. + */ + declare public /*out*/ readonly shared: pulumi.Output; + /** + * The username for authenticating with the Proxmox Backup Server. + */ + declare public readonly username: pulumi.Output; + + /** + * Create a PBS resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: PBSArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: PBSArgs | PBSState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as PBSState | undefined; + resourceInputs["backups"] = state?.backups; + resourceInputs["contents"] = state?.contents; + resourceInputs["datastore"] = state?.datastore; + resourceInputs["disable"] = state?.disable; + resourceInputs["encryptionKey"] = state?.encryptionKey; + resourceInputs["encryptionKeyFingerprint"] = state?.encryptionKeyFingerprint; + resourceInputs["fingerprint"] = state?.fingerprint; + resourceInputs["generateEncryptionKey"] = state?.generateEncryptionKey; + resourceInputs["generatedEncryptionKey"] = state?.generatedEncryptionKey; + resourceInputs["namespace"] = state?.namespace; + resourceInputs["nodes"] = state?.nodes; + resourceInputs["password"] = state?.password; + resourceInputs["pbsId"] = state?.pbsId; + resourceInputs["server"] = state?.server; + resourceInputs["shared"] = state?.shared; + resourceInputs["username"] = state?.username; + } else { + const args = argsOrState as PBSArgs | undefined; + if (args?.datastore === undefined && !opts.urn) { + throw new Error("Missing required property 'datastore'"); + } + if (args?.password === undefined && !opts.urn) { + throw new Error("Missing required property 'password'"); + } + if (args?.pbsId === undefined && !opts.urn) { + throw new Error("Missing required property 'pbsId'"); + } + if (args?.server === undefined && !opts.urn) { + throw new Error("Missing required property 'server'"); + } + if (args?.username === undefined && !opts.urn) { + throw new Error("Missing required property 'username'"); + } + resourceInputs["backups"] = args?.backups; + resourceInputs["contents"] = args?.contents; + resourceInputs["datastore"] = args?.datastore; + resourceInputs["disable"] = args?.disable; + resourceInputs["encryptionKey"] = args?.encryptionKey ? pulumi.secret(args.encryptionKey) : undefined; + resourceInputs["fingerprint"] = args?.fingerprint; + resourceInputs["generateEncryptionKey"] = args?.generateEncryptionKey; + resourceInputs["namespace"] = args?.namespace; + resourceInputs["nodes"] = args?.nodes; + resourceInputs["password"] = args?.password ? pulumi.secret(args.password) : undefined; + resourceInputs["pbsId"] = args?.pbsId; + resourceInputs["server"] = args?.server; + resourceInputs["username"] = args?.username; + resourceInputs["encryptionKeyFingerprint"] = undefined /*out*/; + resourceInputs["generatedEncryptionKey"] = undefined /*out*/; + resourceInputs["shared"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["encryptionKey", "generatedEncryptionKey", "password"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(PBS.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering PBS resources. + */ +export interface PBSState { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * The name of the datastore on the Proxmox Backup Server. + */ + datastore?: pulumi.Input; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + */ + encryptionKey?: pulumi.Input; + /** + * The SHA256 fingerprint of the encryption key currently in use. + */ + encryptionKeyFingerprint?: pulumi.Input; + /** + * The SHA256 fingerprint of the Proxmox Backup Server's certificate. + */ + fingerprint?: pulumi.Input; + /** + * If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + */ + generateEncryptionKey?: pulumi.Input; + /** + * The encryption key returned by Proxmox when `generateEncryptionKey` is true. + */ + generatedEncryptionKey?: pulumi.Input; + /** + * The namespace to use on the Proxmox Backup Server. + */ + namespace?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The password for authenticating with the Proxmox Backup Server. + */ + password?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + pbsId?: pulumi.Input; + /** + * The IP address or DNS name of the Proxmox Backup Server. + */ + server?: pulumi.Input; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; + /** + * The username for authenticating with the Proxmox Backup Server. + */ + username?: pulumi.Input; +} + +/** + * The set of arguments for constructing a PBS resource. + */ +export interface PBSArgs { + /** + * Configure backup retention settings for the storage type. + */ + backups?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * The name of the datastore on the Proxmox Backup Server. + */ + datastore: pulumi.Input; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generateEncryptionKey`. + */ + encryptionKey?: pulumi.Input; + /** + * The SHA256 fingerprint of the Proxmox Backup Server's certificate. + */ + fingerprint?: pulumi.Input; + /** + * If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generatedEncryptionKey` attribute. Conflicts with `encryptionKey`. + */ + generateEncryptionKey?: pulumi.Input; + /** + * The namespace to use on the Proxmox Backup Server. + */ + namespace?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * The password for authenticating with the Proxmox Backup Server. + */ + password: pulumi.Input; + /** + * The unique identifier of the storage. + */ + pbsId: pulumi.Input; + /** + * The IP address or DNS name of the Proxmox Backup Server. + */ + server: pulumi.Input; + /** + * The username for authenticating with the Proxmox Backup Server. + */ + username: pulumi.Input; +} diff --git a/sdk/nodejs/storage/zfspool.ts b/sdk/nodejs/storage/zfspool.ts new file mode 100644 index 00000000..cd2213a0 --- /dev/null +++ b/sdk/nodejs/storage/zfspool.ts @@ -0,0 +1,200 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * Manages ZFS-based storage in Proxmox VE. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * const example = new proxmoxve.storage.ZFSPool("example", { + * zfsPoolId: "example-zfs", + * nodes: ["pve"], + * zfsPool: "rpool/data", + * contents: ["images"], + * thinProvision: true, + * blocksize: "64k", + * }); + * ``` + */ +export class ZFSPool extends pulumi.CustomResource { + /** + * Get an existing ZFSPool resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: ZFSPoolState, opts?: pulumi.CustomResourceOptions): ZFSPool { + return new ZFSPool(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:Storage/zFSPool:ZFSPool'; + + /** + * Returns true if the given object is an instance of ZFSPool. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is ZFSPool { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ZFSPool.__pulumiType; + } + + /** + * Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + */ + declare public readonly blocksize: pulumi.Output; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + declare public readonly contents: pulumi.Output; + /** + * Whether the storage is disabled. + */ + declare public readonly disable: pulumi.Output; + /** + * A list of nodes where this storage is available. + */ + declare public readonly nodes: pulumi.Output; + /** + * Whether the storage is shared across all nodes. + */ + declare public /*out*/ readonly shared: pulumi.Output; + /** + * Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + */ + declare public readonly thinProvision: pulumi.Output; + /** + * The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + */ + declare public readonly zfsPool: pulumi.Output; + /** + * The unique identifier of the storage. + */ + declare public readonly zfsPoolId: pulumi.Output; + + /** + * Create a ZFSPool resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ZFSPoolArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ZFSPoolArgs | ZFSPoolState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ZFSPoolState | undefined; + resourceInputs["blocksize"] = state?.blocksize; + resourceInputs["contents"] = state?.contents; + resourceInputs["disable"] = state?.disable; + resourceInputs["nodes"] = state?.nodes; + resourceInputs["shared"] = state?.shared; + resourceInputs["thinProvision"] = state?.thinProvision; + resourceInputs["zfsPool"] = state?.zfsPool; + resourceInputs["zfsPoolId"] = state?.zfsPoolId; + } else { + const args = argsOrState as ZFSPoolArgs | undefined; + if (args?.zfsPool === undefined && !opts.urn) { + throw new Error("Missing required property 'zfsPool'"); + } + if (args?.zfsPoolId === undefined && !opts.urn) { + throw new Error("Missing required property 'zfsPoolId'"); + } + resourceInputs["blocksize"] = args?.blocksize; + resourceInputs["contents"] = args?.contents; + resourceInputs["disable"] = args?.disable; + resourceInputs["nodes"] = args?.nodes; + resourceInputs["thinProvision"] = args?.thinProvision; + resourceInputs["zfsPool"] = args?.zfsPool; + resourceInputs["zfsPoolId"] = args?.zfsPoolId; + resourceInputs["shared"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ZFSPool.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ZFSPool resources. + */ +export interface ZFSPoolState { + /** + * Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + */ + blocksize?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * Whether the storage is shared across all nodes. + */ + shared?: pulumi.Input; + /** + * Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + */ + thinProvision?: pulumi.Input; + /** + * The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + */ + zfsPool?: pulumi.Input; + /** + * The unique identifier of the storage. + */ + zfsPoolId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ZFSPool resource. + */ +export interface ZFSPoolArgs { + /** + * Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + */ + blocksize?: pulumi.Input; + /** + * The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + */ + contents?: pulumi.Input[]>; + /** + * Whether the storage is disabled. + */ + disable?: pulumi.Input; + /** + * A list of nodes where this storage is available. + */ + nodes?: pulumi.Input[]>; + /** + * Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + */ + thinProvision?: pulumi.Input; + /** + * The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + */ + zfsPool: pulumi.Input; + /** + * The unique identifier of the storage. + */ + zfsPoolId: pulumi.Input; +} diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index 9a5b1e31..1a452a5d 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -14,6 +14,7 @@ }, "files": [ "acl.ts", + "acme/certificate.ts", "acme/getAccount.ts", "acme/getAccounts.ts", "acme/getPlugin.ts", @@ -77,6 +78,8 @@ "network/index.ts", "network/networkBridge.ts", "network/networkVlan.ts", + "node/firewall.ts", + "node/index.ts", "oci/image.ts", "oci/index.ts", "permission/getGroup.ts", @@ -95,7 +98,18 @@ "pool/index.ts", "pool/membership.ts", "provider.ts", + "realm/index.ts", + "realm/ldap.ts", + "realm/sync.ts", "sdn/applier.ts", + "sdn/fabric/getOpenfabric.ts", + "sdn/fabric/getOspf.ts", + "sdn/fabric/index.ts", + "sdn/fabric/node/getOpenfabric.ts", + "sdn/fabric/node/getOspf.ts", + "sdn/fabric/node/index.ts", + "sdn/fabric/node/openfabric.ts", + "sdn/fabric/node/ospf.ts", "sdn/getSubnet.ts", "sdn/getVnet.ts", "sdn/getVnets.ts", @@ -103,6 +117,9 @@ "sdn/index.ts", "sdn/subnet.ts", "sdn/vnet.ts", + "sdnfabric/index.ts", + "sdnfabric/openFabric.ts", + "sdnfabric/ospf.ts", "sdnzone/evpn.ts", "sdnzone/getEvpn.ts", "sdnzone/getQinq.ts", @@ -114,9 +131,16 @@ "sdnzone/simple.ts", "sdnzone/vlan.ts", "sdnzone/vxlan.ts", + "storage/cifs.ts", + "storage/directory.ts", "storage/file.ts", "storage/getDatastores.ts", "storage/index.ts", + "storage/lvm.ts", + "storage/lvmthin.ts", + "storage/nfs.ts", + "storage/pbs.ts", + "storage/zfspool.ts", "time.ts", "types/index.ts", "types/input.ts", @@ -124,6 +148,7 @@ "user/index.ts", "user/token.ts", "utilities.ts", + "vm/clonedVirtualMachine.ts", "vm/getVirtualMachine.ts", "vm/getVirtualMachines.ts", "vm/index.ts", diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index 66a157c4..be4d16cc 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -35,28 +35,6 @@ export interface GetContainersFilterArgs { values: pulumi.Input[]>; } -export interface GetVm2Clone { - /** - * The ID of the VM to clone. - */ - id: number; - /** - * The number of retries to perform when cloning the VM (default: 3). - */ - retries?: number; -} - -export interface GetVm2CloneArgs { - /** - * The ID of the VM to clone. - */ - id: pulumi.Input; - /** - * The number of retries to perform when cloning the VM (default: 3). - */ - retries?: pulumi.Input; -} - export interface GetVm2Cpu { /** * List of host cores used to execute guest processes, for example: '0,5,8-11' @@ -286,6 +264,21 @@ export interface ProviderSshNode { port?: pulumi.Input; } export namespace Acme { + export interface CertificateDomain { + /** + * An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + */ + alias?: pulumi.Input; + /** + * The domain name to include in the certificate. + */ + domain: pulumi.Input; + /** + * The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + */ + plugin?: pulumi.Input; + } + } export namespace CT { @@ -374,6 +367,11 @@ export namespace CT { * List of extra mount options. */ mountOptions?: pulumi.Input[]>; + /** + * The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + */ + pathInDatastore?: pulumi.Input; /** * Enable user quotas for the container rootfs */ @@ -529,6 +527,11 @@ export namespace CT { * container. */ path: pulumi.Input; + /** + * The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of `volume`. + */ + pathInDatastore?: pulumi.Input; /** * Enable user quotas inside the container (not supported * with ZFS subvolumes). @@ -1036,6 +1039,76 @@ export namespace Sdn { } export namespace Storage { + export interface CIFSBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll?: pulumi.Input; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: pulumi.Input; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: pulumi.Input; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: pulumi.Input; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: pulumi.Input; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: pulumi.Input; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: pulumi.Input; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: pulumi.Input; + } + + export interface DirectoryBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll?: pulumi.Input; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: pulumi.Input; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: pulumi.Input; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: pulumi.Input; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: pulumi.Input; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: pulumi.Input; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: pulumi.Input; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: pulumi.Input; + } + export interface FileSourceFile { /** * Whether the source file has changed since the last run @@ -1205,9 +1278,358 @@ export namespace Storage { */ target?: pulumi.Input; } + + export interface NFSBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll?: pulumi.Input; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: pulumi.Input; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: pulumi.Input; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: pulumi.Input; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: pulumi.Input; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: pulumi.Input; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: pulumi.Input; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: pulumi.Input; + } + + export interface PBSBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll?: pulumi.Input; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: pulumi.Input; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: pulumi.Input; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: pulumi.Input; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: pulumi.Input; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: pulumi.Input; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: pulumi.Input; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: pulumi.Input; + } } export namespace VM { + export interface ClonedVirtualMachineCdrom { + /** + * The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + */ + fileId?: pulumi.Input; + } + + export interface ClonedVirtualMachineClone { + /** + * Clone bandwidth limit in MB/s. + */ + bandwidthLimit?: pulumi.Input; + /** + * Perform a full clone (true) or linked clone (false). + */ + full?: pulumi.Input; + /** + * Pool to assign the cloned VM to. + */ + poolId?: pulumi.Input; + /** + * Number of retries for clone operations. + */ + retries?: pulumi.Input; + /** + * Snapshot name to clone from. + */ + snapshotName?: pulumi.Input; + /** + * Source node of the VM/template. Defaults to target node if unset. + */ + sourceNodeName?: pulumi.Input; + /** + * Source VM/template ID to clone from. + */ + sourceVmId: pulumi.Input; + /** + * Target datastore for cloned disks. + */ + targetDatastore?: pulumi.Input; + /** + * Target disk format for clone (e.g., raw, qcow2). + */ + targetFormat?: pulumi.Input; + } + + export interface ClonedVirtualMachineCpu { + /** + * The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + */ + affinity?: pulumi.Input; + /** + * The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + */ + architecture?: pulumi.Input; + /** + * The number of CPU cores per socket (defaults to `1`). + */ + cores?: pulumi.Input; + /** + * Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + */ + flags?: pulumi.Input[]>; + /** + * The number of hotplugged vCPUs (defaults to `0`). + */ + hotplugged?: pulumi.Input; + /** + * Limit of CPU usage (defaults to `0` which means no limit). + */ + limit?: pulumi.Input; + /** + * Enable NUMA (defaults to `false`). + */ + numa?: pulumi.Input; + /** + * The number of CPU sockets (defaults to `1`). + */ + sockets?: pulumi.Input; + /** + * Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + */ + type?: pulumi.Input; + /** + * CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + */ + units?: pulumi.Input; + } + + export interface ClonedVirtualMachineDelete { + /** + * Disk slots to delete (e.g., scsi2). + */ + disks?: pulumi.Input[]>; + /** + * Network slots to delete (e.g., net1). + */ + networks?: pulumi.Input[]>; + } + + export interface ClonedVirtualMachineDisk { + /** + * AIO mode (io_uring, native, threads). + */ + aio?: pulumi.Input; + /** + * Include disk in backups. + */ + backup?: pulumi.Input; + /** + * Cache mode. + */ + cache?: pulumi.Input; + /** + * Target datastore for new disks when file is not provided. + */ + datastoreId?: pulumi.Input; + /** + * Discard/trim behavior. + */ + discard?: pulumi.Input; + /** + * Existing volume reference (e.g., local-lvm:vm-100-disk-0). + */ + file?: pulumi.Input; + /** + * Disk format (raw, qcow2, vmdk). + */ + format?: pulumi.Input; + /** + * Import source volume/file id. + */ + importFrom?: pulumi.Input; + /** + * Use IO thread. + */ + iothread?: pulumi.Input; + /** + * Disk media (e.g., disk, cdrom). + */ + media?: pulumi.Input; + /** + * Consider disk for replication. + */ + replicate?: pulumi.Input; + /** + * Disk serial number. + */ + serial?: pulumi.Input; + /** + * Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `sizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + */ + sizeGb?: pulumi.Input; + /** + * Mark disk as SSD. + */ + ssd?: pulumi.Input; + } + + export interface ClonedVirtualMachineMemory { + /** + * Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + */ + balloon?: pulumi.Input; + /** + * Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - `2` - Use 2 MiB hugepages + * - `1024` - Use 1 GiB hugepages + * - `any` - Use any available hugepage size + */ + hugepages?: pulumi.Input; + /** + * Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + */ + keepHugepages?: pulumi.Input; + /** + * CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + */ + shares?: pulumi.Input; + /** + * Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + */ + size?: pulumi.Input; + } + + export interface ClonedVirtualMachineNetwork { + /** + * Bridge name. + */ + bridge?: pulumi.Input; + /** + * Enable firewall on this interface. + */ + firewall?: pulumi.Input; + /** + * Keep link down. + */ + linkDown?: pulumi.Input; + /** + * MAC address (computed if omitted). + */ + macAddress?: pulumi.Input; + /** + * NIC model (e.g., virtio, e1000). + */ + model?: pulumi.Input; + /** + * Interface MTU. + */ + mtu?: pulumi.Input; + /** + * Number of multiqueue NIC queues. + */ + queues?: pulumi.Input; + /** + * Rate limit (MB/s). + */ + rateLimit?: pulumi.Input; + /** + * VLAN tag. + */ + tag?: pulumi.Input; + /** + * Trunk VLAN IDs. + */ + trunks?: pulumi.Input[]>; + } + + export interface ClonedVirtualMachineRng { + /** + * Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + */ + maxBytes?: pulumi.Input; + /** + * Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + */ + period?: pulumi.Input; + /** + * The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + */ + source?: pulumi.Input; + } + + export interface ClonedVirtualMachineTimeouts { + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + */ + create?: pulumi.Input; + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + */ + delete?: pulumi.Input; + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + */ + read?: pulumi.Input; + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + */ + update?: pulumi.Input; + } + + export interface ClonedVirtualMachineVga { + /** + * Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + */ + clipboard?: pulumi.Input; + /** + * The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + */ + memory?: pulumi.Input; + /** + * The VGA type (defaults to `std`). + */ + type?: pulumi.Input; + } + export interface GetVirtualMachinesFilter { /** * Name of the VM attribute to filter on. One of [`name`, `template`, `status`, `nodeName`] @@ -1245,24 +1667,13 @@ export namespace VM { fileId?: pulumi.Input; } - export interface VirtualMachine2Clone { - /** - * The ID of the VM to clone. - */ - id: pulumi.Input; - /** - * The number of retries to perform when cloning the VM (default: 3). - */ - retries?: pulumi.Input; - } - export interface VirtualMachine2Cpu { /** * The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. */ affinity?: pulumi.Input; /** - * The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + * The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. */ architecture?: pulumi.Input; /** @@ -1582,13 +1993,17 @@ export namespace VM { /** * The file ID for a disk image when importing a disk into VM. The ID format is * `:/`, for example `local:iso/centos8.img`. Can be also taken from - * `proxmoxve.Download.File` resource. *Deprecated*, use `importFrom` instead. + * `proxmoxve.Download.File` resource. Prefer `importFrom` for uncompressed images. + * Use `fileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with `contentType = "iso"` and `decompressionAlgorithm` set. See the + * Create a VM from a Cloud Image guide for examples. */ fileId?: pulumi.Input; /** - * The file ID for a disk image to import into VM. The image must be of `import` content type. - * The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * The file ID for a disk image to import into VM. The image must be of `import` content type + * (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + * Can be also taken from `proxmoxve.Download.File` resource. Note: compressed images downloaded with + * `decompressionAlgorithm` cannot use `importFrom`; use `fileId` instead. */ importFrom?: pulumi.Input; /** diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 7059b50a..f68183e9 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -48,17 +48,6 @@ export interface GetContainersFilter { values: string[]; } -export interface GetVm2Clone { - /** - * The ID of the VM to clone. - */ - id: number; - /** - * The number of retries to perform when cloning the VM (default: 3). - */ - retries: number; -} - export interface GetVm2Cpu { /** * List of host cores used to execute guest processes, for example: '0,5,8-11' @@ -151,6 +140,21 @@ export interface HostsEntry { } export namespace Acme { + export interface CertificateDomain { + /** + * An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + */ + alias?: string; + /** + * The domain name to include in the certificate. + */ + domain: string; + /** + * The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + */ + plugin?: string; + } + export interface GetAccountAccount { /** * An array of contact email addresses. @@ -281,6 +285,11 @@ export namespace CT { * List of extra mount options. */ mountOptions?: string[]; + /** + * The in-datastore path to the disk image. + * Use this attribute for cross-resource references. + */ + pathInDatastore: string; /** * Enable user quotas for the container rootfs */ @@ -436,6 +445,11 @@ export namespace CT { * container. */ path: string; + /** + * The in-datastore path to the mount point volume. + * Use this attribute for cross-resource references instead of `volume`. + */ + pathInDatastore: string; /** * Enable user quotas inside the container (not supported * with ZFS subvolumes). @@ -1108,6 +1122,76 @@ export namespace Sdn { } export namespace Storage { + export interface CIFSBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll: boolean; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: number; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: number; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: number; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: number; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: number; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: number; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: number; + } + + export interface DirectoryBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll: boolean; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: number; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: number; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: number; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: number; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: number; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: number; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: number; + } + export interface FileSourceFile { /** * Whether the source file has changed since the last run @@ -1216,9 +1300,358 @@ export namespace Storage { target?: string; } + export interface NFSBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll: boolean; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: number; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: number; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: number; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: number; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: number; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: number; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: number; + } + + export interface PBSBackups { + /** + * Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + */ + keepAll: boolean; + /** + * The number of daily backups to keep. Older backups will be removed. + */ + keepDaily?: number; + /** + * The number of hourly backups to keep. Older backups will be removed. + */ + keepHourly?: number; + /** + * Specifies the number of the most recent backups to keep, regardless of their age. + */ + keepLast?: number; + /** + * The number of monthly backups to keep. Older backups will be removed. + */ + keepMonthly?: number; + /** + * The number of weekly backups to keep. Older backups will be removed. + */ + keepWeekly?: number; + /** + * The number of yearly backups to keep. Older backups will be removed. + */ + keepYearly?: number; + /** + * The maximum number of protected backups per guest. Use '-1' for unlimited. + */ + maxProtectedBackups?: number; + } + } export namespace VM { + export interface ClonedVirtualMachineCdrom { + /** + * The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + */ + fileId?: string; + } + + export interface ClonedVirtualMachineClone { + /** + * Clone bandwidth limit in MB/s. + */ + bandwidthLimit?: number; + /** + * Perform a full clone (true) or linked clone (false). + */ + full: boolean; + /** + * Pool to assign the cloned VM to. + */ + poolId?: string; + /** + * Number of retries for clone operations. + */ + retries: number; + /** + * Snapshot name to clone from. + */ + snapshotName?: string; + /** + * Source node of the VM/template. Defaults to target node if unset. + */ + sourceNodeName?: string; + /** + * Source VM/template ID to clone from. + */ + sourceVmId: number; + /** + * Target datastore for cloned disks. + */ + targetDatastore?: string; + /** + * Target disk format for clone (e.g., raw, qcow2). + */ + targetFormat?: string; + } + + export interface ClonedVirtualMachineCpu { + /** + * The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + */ + affinity?: string; + /** + * The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + */ + architecture?: string; + /** + * The number of CPU cores per socket (defaults to `1`). + */ + cores?: number; + /** + * Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + */ + flags?: string[]; + /** + * The number of hotplugged vCPUs (defaults to `0`). + */ + hotplugged?: number; + /** + * Limit of CPU usage (defaults to `0` which means no limit). + */ + limit?: number; + /** + * Enable NUMA (defaults to `false`). + */ + numa?: boolean; + /** + * The number of CPU sockets (defaults to `1`). + */ + sockets?: number; + /** + * Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + */ + type?: string; + /** + * CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + */ + units?: number; + } + + export interface ClonedVirtualMachineDelete { + /** + * Disk slots to delete (e.g., scsi2). + */ + disks?: string[]; + /** + * Network slots to delete (e.g., net1). + */ + networks?: string[]; + } + + export interface ClonedVirtualMachineDisk { + /** + * AIO mode (io_uring, native, threads). + */ + aio?: string; + /** + * Include disk in backups. + */ + backup?: boolean; + /** + * Cache mode. + */ + cache?: string; + /** + * Target datastore for new disks when file is not provided. + */ + datastoreId?: string; + /** + * Discard/trim behavior. + */ + discard?: string; + /** + * Existing volume reference (e.g., local-lvm:vm-100-disk-0). + */ + file?: string; + /** + * Disk format (raw, qcow2, vmdk). + */ + format?: string; + /** + * Import source volume/file id. + */ + importFrom?: string; + /** + * Use IO thread. + */ + iothread?: boolean; + /** + * Disk media (e.g., disk, cdrom). + */ + media?: string; + /** + * Consider disk for replication. + */ + replicate?: boolean; + /** + * Disk serial number. + */ + serial?: string; + /** + * Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `sizeGb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + */ + sizeGb?: number; + /** + * Mark disk as SSD. + */ + ssd?: boolean; + } + + export interface ClonedVirtualMachineMemory { + /** + * Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + */ + balloon?: number; + /** + * Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + * + * **Options:** + * - `2` - Use 2 MiB hugepages + * - `1024` - Use 1 GiB hugepages + * - `any` - Use any available hugepage size + */ + hugepages?: string; + /** + * Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + */ + keepHugepages?: boolean; + /** + * CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + */ + shares?: number; + /** + * Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + */ + size?: number; + } + + export interface ClonedVirtualMachineNetwork { + /** + * Bridge name. + */ + bridge?: string; + /** + * Enable firewall on this interface. + */ + firewall?: boolean; + /** + * Keep link down. + */ + linkDown?: boolean; + /** + * MAC address (computed if omitted). + */ + macAddress?: string; + /** + * NIC model (e.g., virtio, e1000). + */ + model?: string; + /** + * Interface MTU. + */ + mtu?: number; + /** + * Number of multiqueue NIC queues. + */ + queues?: number; + /** + * Rate limit (MB/s). + */ + rateLimit?: number; + /** + * VLAN tag. + */ + tag?: number; + /** + * Trunk VLAN IDs. + */ + trunks?: number[]; + } + + export interface ClonedVirtualMachineRng { + /** + * Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + */ + maxBytes?: number; + /** + * Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + */ + period?: number; + /** + * The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + */ + source?: string; + } + + export interface ClonedVirtualMachineTimeouts { + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + */ + create?: string; + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + */ + delete?: string; + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + */ + read?: string; + /** + * A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + */ + update?: string; + } + + export interface ClonedVirtualMachineVga { + /** + * Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + */ + clipboard?: string; + /** + * The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + */ + memory?: number; + /** + * The VGA type (defaults to `std`). + */ + type?: string; + } + export interface GetVirtualMachinesFilter { /** * Name of the VM attribute to filter on. One of [`name`, `template`, `status`, `nodeName`] @@ -1269,24 +1702,13 @@ export namespace VM { fileId: string; } - export interface VirtualMachine2Clone { - /** - * The ID of the VM to clone. - */ - id: number; - /** - * The number of retries to perform when cloning the VM (default: 3). - */ - retries: number; - } - export interface VirtualMachine2Cpu { /** * The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. */ affinity: string; /** - * The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + * The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. */ architecture: string; /** @@ -1606,13 +2028,17 @@ export namespace VM { /** * The file ID for a disk image when importing a disk into VM. The ID format is * `:/`, for example `local:iso/centos8.img`. Can be also taken from - * `proxmoxve.Download.File` resource. *Deprecated*, use `importFrom` instead. + * `proxmoxve.Download.File` resource. Prefer `importFrom` for uncompressed images. + * Use `fileId` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + * with `contentType = "iso"` and `decompressionAlgorithm` set. See the + * Create a VM from a Cloud Image guide for examples. */ fileId?: string; /** - * The file ID for a disk image to import into VM. The image must be of `import` content type. - * The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - * a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + * The file ID for a disk image to import into VM. The image must be of `import` content type + * (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + * Can be also taken from `proxmoxve.Download.File` resource. Note: compressed images downloaded with + * `decompressionAlgorithm` cannot use `importFrom`; use `fileId` instead. */ importFrom?: string; /** diff --git a/sdk/nodejs/vm/clonedVirtualMachine.ts b/sdk/nodejs/vm/clonedVirtualMachine.ts new file mode 100644 index 00000000..b68e06b9 --- /dev/null +++ b/sdk/nodejs/vm/clonedVirtualMachine.ts @@ -0,0 +1,499 @@ +// *** WARNING: this file was generated by pulumi-language-nodejs. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as proxmoxve from "@muhlba91/pulumi-proxmoxve"; + * + * // Example 1: Basic clone with minimal management + * const basicClone = new proxmoxve.vm.ClonedVirtualMachine("basic_clone", { + * nodeName: "pve", + * name: "basic-clone", + * clone: { + * sourceVmId: 100, + * full: true, + * }, + * cpu: { + * cores: 4, + * }, + * }); + * // Example 2: Clone with explicit network management + * const networkManaged = new proxmoxve.vm.ClonedVirtualMachine("network_managed", { + * nodeName: "pve", + * name: "network-clone", + * clone: { + * sourceVmId: 100, + * }, + * network: { + * net0: { + * bridge: "vmbr0", + * model: "virtio", + * tag: 100, + * }, + * net1: { + * bridge: "vmbr1", + * model: "virtio", + * firewall: true, + * macAddress: "BC:24:11:2E:C5:00", + * }, + * }, + * cpu: { + * cores: 2, + * }, + * }); + * // Example 3: Clone with disk management + * const diskManaged = new proxmoxve.vm.ClonedVirtualMachine("disk_managed", { + * nodeName: "pve", + * name: "disk-clone", + * clone: { + * sourceVmId: 100, + * targetDatastore: "local-lvm", + * }, + * disk: { + * scsi0: { + * datastoreId: "local-lvm", + * sizeGb: 50, + * discard: "on", + * ssd: true, + * }, + * scsi1: { + * datastoreId: "local-lvm", + * sizeGb: 100, + * backup: false, + * }, + * }, + * }); + * // Example 4: Clone with explicit device deletion + * const selectiveDelete = new proxmoxve.vm.ClonedVirtualMachine("selective_delete", { + * nodeName: "pve", + * name: "minimal-clone", + * clone: { + * sourceVmId: 100, + * }, + * network: { + * net0: { + * bridge: "vmbr0", + * model: "virtio", + * }, + * }, + * "delete": { + * networks: [ + * "net1", + * "net2", + * ], + * }, + * }); + * // Example 5: Full-featured clone with multiple settings + * const fullFeatured = new proxmoxve.vm.ClonedVirtualMachine("full_featured", { + * nodeName: "pve", + * name: "production-vm", + * description: "Production VM cloned from template", + * tags: [ + * "production", + * "web", + * ], + * clone: { + * sourceVmId: 100, + * sourceNodeName: "pve", + * full: true, + * targetDatastore: "local-lvm", + * retries: 3, + * }, + * cpu: { + * cores: 8, + * sockets: 1, + * architecture: "x86_64", + * type: "host", + * }, + * memory: { + * size: 8192, + * balloon: 2048, + * shares: 2000, + * }, + * network: { + * net0: { + * bridge: "vmbr0", + * model: "virtio", + * tag: 100, + * firewall: true, + * rateLimit: 100, + * }, + * }, + * disk: { + * scsi0: { + * datastoreId: "local-lvm", + * sizeGb: 100, + * discard: "on", + * iothread: true, + * ssd: true, + * cache: "writethrough", + * }, + * }, + * vga: { + * type: "std", + * memory: 16, + * }, + * "delete": { + * disks: ["ide2"], + * }, + * stopOnDestroy: false, + * purgeOnDestroy: true, + * deleteUnreferencedDisksOnDestroy: false, + * timeouts: { + * create: "30m", + * update: "30m", + * "delete": "10m", + * }, + * }); + * // Example 6: Linked clone for testing + * const testClone = new proxmoxve.vm.ClonedVirtualMachine("test_clone", { + * nodeName: "pve", + * name: "test-vm", + * clone: { + * sourceVmId: 100, + * full: false, + * }, + * cpu: { + * cores: 2, + * }, + * network: { + * net0: { + * bridge: "vmbr0", + * model: "virtio", + * }, + * }, + * }); + * // Example 7: Clone with pool assignment + * const pooledClone = new proxmoxve.vm.ClonedVirtualMachine("pooled_clone", { + * nodeName: "pve", + * name: "pooled-vm", + * clone: { + * sourceVmId: 100, + * poolId: "production", + * }, + * cpu: { + * cores: 4, + * }, + * }); + * // Example 8: Import existing cloned VM + * const imported = new proxmoxve.vm.ClonedVirtualMachine("imported", { + * vmId: "123", + * nodeName: "pve", + * clone: { + * sourceVmId: 100, + * }, + * cpu: { + * cores: 4, + * }, + * }); + * ``` + */ +export class ClonedVirtualMachine extends pulumi.CustomResource { + /** + * Get an existing ClonedVirtualMachine resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: ClonedVirtualMachineState, opts?: pulumi.CustomResourceOptions): ClonedVirtualMachine { + return new ClonedVirtualMachine(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine'; + + /** + * Returns true if the given object is an instance of ClonedVirtualMachine. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is ClonedVirtualMachine { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ClonedVirtualMachine.__pulumiType; + } + + /** + * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + */ + declare public readonly cdrom: pulumi.Output<{[key: string]: outputs.VM.ClonedVirtualMachineCdrom} | undefined>; + /** + * Clone settings. Changes require recreation. + */ + declare public readonly clone: pulumi.Output; + /** + * The CPU configuration. + */ + declare public readonly cpu: pulumi.Output; + /** + * Explicit deletions to perform after cloning/updating. Entries persist across applies. + */ + declare public readonly delete: pulumi.Output; + declare public readonly deleteUnreferencedDisksOnDestroy: pulumi.Output; + /** + * Optional VM description applied after cloning. + */ + declare public readonly description: pulumi.Output; + /** + * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + */ + declare public readonly disk: pulumi.Output<{[key: string]: outputs.VM.ClonedVirtualMachineDisk} | undefined>; + /** + * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + */ + declare public readonly memory: pulumi.Output; + /** + * Optional VM name override applied after cloning. + */ + declare public readonly name: pulumi.Output; + /** + * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + */ + declare public readonly network: pulumi.Output<{[key: string]: outputs.VM.ClonedVirtualMachineNetwork} | undefined>; + /** + * Target node for the cloned VM. + */ + declare public readonly nodeName: pulumi.Output; + /** + * Purge backup configuration on destroy. + */ + declare public readonly purgeOnDestroy: pulumi.Output; + /** + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + */ + declare public readonly rng: pulumi.Output; + /** + * Stop the VM on destroy (instead of shutdown). + */ + declare public readonly stopOnDestroy: pulumi.Output; + /** + * Tags applied after cloning. + */ + declare public readonly tags: pulumi.Output; + declare public readonly timeouts: pulumi.Output; + /** + * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + */ + declare public readonly vga: pulumi.Output; + /** + * The VM identifier in the Proxmox cluster. + */ + declare public readonly vmId: pulumi.Output; + + /** + * Create a ClonedVirtualMachine resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ClonedVirtualMachineArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ClonedVirtualMachineArgs | ClonedVirtualMachineState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ClonedVirtualMachineState | undefined; + resourceInputs["cdrom"] = state?.cdrom; + resourceInputs["clone"] = state?.clone; + resourceInputs["cpu"] = state?.cpu; + resourceInputs["delete"] = state?.delete; + resourceInputs["deleteUnreferencedDisksOnDestroy"] = state?.deleteUnreferencedDisksOnDestroy; + resourceInputs["description"] = state?.description; + resourceInputs["disk"] = state?.disk; + resourceInputs["memory"] = state?.memory; + resourceInputs["name"] = state?.name; + resourceInputs["network"] = state?.network; + resourceInputs["nodeName"] = state?.nodeName; + resourceInputs["purgeOnDestroy"] = state?.purgeOnDestroy; + resourceInputs["rng"] = state?.rng; + resourceInputs["stopOnDestroy"] = state?.stopOnDestroy; + resourceInputs["tags"] = state?.tags; + resourceInputs["timeouts"] = state?.timeouts; + resourceInputs["vga"] = state?.vga; + resourceInputs["vmId"] = state?.vmId; + } else { + const args = argsOrState as ClonedVirtualMachineArgs | undefined; + if (args?.clone === undefined && !opts.urn) { + throw new Error("Missing required property 'clone'"); + } + if (args?.nodeName === undefined && !opts.urn) { + throw new Error("Missing required property 'nodeName'"); + } + resourceInputs["cdrom"] = args?.cdrom; + resourceInputs["clone"] = args?.clone; + resourceInputs["cpu"] = args?.cpu; + resourceInputs["delete"] = args?.delete; + resourceInputs["deleteUnreferencedDisksOnDestroy"] = args?.deleteUnreferencedDisksOnDestroy; + resourceInputs["description"] = args?.description; + resourceInputs["disk"] = args?.disk; + resourceInputs["memory"] = args?.memory; + resourceInputs["name"] = args?.name; + resourceInputs["network"] = args?.network; + resourceInputs["nodeName"] = args?.nodeName; + resourceInputs["purgeOnDestroy"] = args?.purgeOnDestroy; + resourceInputs["rng"] = args?.rng; + resourceInputs["stopOnDestroy"] = args?.stopOnDestroy; + resourceInputs["tags"] = args?.tags; + resourceInputs["timeouts"] = args?.timeouts; + resourceInputs["vga"] = args?.vga; + resourceInputs["vmId"] = args?.vmId; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ClonedVirtualMachine.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ClonedVirtualMachine resources. + */ +export interface ClonedVirtualMachineState { + /** + * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + */ + cdrom?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Clone settings. Changes require recreation. + */ + clone?: pulumi.Input; + /** + * The CPU configuration. + */ + cpu?: pulumi.Input; + /** + * Explicit deletions to perform after cloning/updating. Entries persist across applies. + */ + delete?: pulumi.Input; + deleteUnreferencedDisksOnDestroy?: pulumi.Input; + /** + * Optional VM description applied after cloning. + */ + description?: pulumi.Input; + /** + * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + */ + disk?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + */ + memory?: pulumi.Input; + /** + * Optional VM name override applied after cloning. + */ + name?: pulumi.Input; + /** + * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + */ + network?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Target node for the cloned VM. + */ + nodeName?: pulumi.Input; + /** + * Purge backup configuration on destroy. + */ + purgeOnDestroy?: pulumi.Input; + /** + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + */ + rng?: pulumi.Input; + /** + * Stop the VM on destroy (instead of shutdown). + */ + stopOnDestroy?: pulumi.Input; + /** + * Tags applied after cloning. + */ + tags?: pulumi.Input[]>; + timeouts?: pulumi.Input; + /** + * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + */ + vga?: pulumi.Input; + /** + * The VM identifier in the Proxmox cluster. + */ + vmId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ClonedVirtualMachine resource. + */ +export interface ClonedVirtualMachineArgs { + /** + * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + */ + cdrom?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Clone settings. Changes require recreation. + */ + clone: pulumi.Input; + /** + * The CPU configuration. + */ + cpu?: pulumi.Input; + /** + * Explicit deletions to perform after cloning/updating. Entries persist across applies. + */ + delete?: pulumi.Input; + deleteUnreferencedDisksOnDestroy?: pulumi.Input; + /** + * Optional VM description applied after cloning. + */ + description?: pulumi.Input; + /** + * Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + */ + disk?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + */ + memory?: pulumi.Input; + /** + * Optional VM name override applied after cloning. + */ + name?: pulumi.Input; + /** + * Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + */ + network?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Target node for the cloned VM. + */ + nodeName: pulumi.Input; + /** + * Purge backup configuration on destroy. + */ + purgeOnDestroy?: pulumi.Input; + /** + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + */ + rng?: pulumi.Input; + /** + * Stop the VM on destroy (instead of shutdown). + */ + stopOnDestroy?: pulumi.Input; + /** + * Tags applied after cloning. + */ + tags?: pulumi.Input[]>; + timeouts?: pulumi.Input; + /** + * Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + */ + vga?: pulumi.Input; + /** + * The VM identifier in the Proxmox cluster. + */ + vmId?: pulumi.Input; +} diff --git a/sdk/nodejs/vm/index.ts b/sdk/nodejs/vm/index.ts index 8b6c75e2..0dc03f01 100644 --- a/sdk/nodejs/vm/index.ts +++ b/sdk/nodejs/vm/index.ts @@ -5,6 +5,11 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; // Export members: +export { ClonedVirtualMachineArgs, ClonedVirtualMachineState } from "./clonedVirtualMachine"; +export type ClonedVirtualMachine = import("./clonedVirtualMachine").ClonedVirtualMachine; +export const ClonedVirtualMachine: typeof import("./clonedVirtualMachine").ClonedVirtualMachine = null as any; +utilities.lazyLoad(exports, ["ClonedVirtualMachine"], () => require("./clonedVirtualMachine")); + export { GetVirtualMachineArgs, GetVirtualMachineResult, GetVirtualMachineOutputArgs } from "./getVirtualMachine"; export const getVirtualMachine: typeof import("./getVirtualMachine").getVirtualMachine = null as any; export const getVirtualMachineOutput: typeof import("./getVirtualMachine").getVirtualMachineOutput = null as any; @@ -30,6 +35,8 @@ const _module = { version: utilities.getVersion(), construct: (name: string, type: string, urn: string): pulumi.Resource => { switch (type) { + case "proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine": + return new ClonedVirtualMachine(name, undefined, { urn }) case "proxmoxve:VM/virtualMachine2:VirtualMachine2": return new VirtualMachine2(name, undefined, { urn }) case "proxmoxve:VM/virtualMachine:VirtualMachine": @@ -39,5 +46,6 @@ const _module = { } }, }; +pulumi.runtime.registerResourceModule("proxmoxve", "VM/clonedVirtualMachine", _module) pulumi.runtime.registerResourceModule("proxmoxve", "VM/virtualMachine", _module) pulumi.runtime.registerResourceModule("proxmoxve", "VM/virtualMachine2", _module) diff --git a/sdk/nodejs/vm/virtualMachine.ts b/sdk/nodejs/vm/virtualMachine.ts index 03655ba8..66bbc25a 100644 --- a/sdk/nodejs/vm/virtualMachine.ts +++ b/sdk/nodejs/vm/virtualMachine.ts @@ -106,6 +106,12 @@ export class VirtualMachine extends pulumi.CustomResource { * A host PCI device mapping (multiple blocks supported). */ declare public readonly hostpcis: pulumi.Output; + /** + * Selectively enable hotplug features. Supported values + * are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + * or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + */ + declare public readonly hotplug: pulumi.Output; /** * The cloud-init configuration. */ @@ -286,7 +292,10 @@ export class VirtualMachine extends pulumi.CustomResource { */ declare public readonly timeoutStopVm: pulumi.Output; /** - * The TPM state device. + * The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing `version` requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. */ declare public readonly tpmState: pulumi.Output; /** @@ -338,6 +347,7 @@ export class VirtualMachine extends pulumi.CustomResource { resourceInputs["efiDisk"] = state?.efiDisk; resourceInputs["hookScriptFileId"] = state?.hookScriptFileId; resourceInputs["hostpcis"] = state?.hostpcis; + resourceInputs["hotplug"] = state?.hotplug; resourceInputs["initialization"] = state?.initialization; resourceInputs["ipv4Addresses"] = state?.ipv4Addresses; resourceInputs["ipv6Addresses"] = state?.ipv6Addresses; @@ -403,6 +413,7 @@ export class VirtualMachine extends pulumi.CustomResource { resourceInputs["efiDisk"] = args?.efiDisk; resourceInputs["hookScriptFileId"] = args?.hookScriptFileId; resourceInputs["hostpcis"] = args?.hostpcis; + resourceInputs["hotplug"] = args?.hotplug; resourceInputs["initialization"] = args?.initialization; resourceInputs["keyboardLayout"] = args?.keyboardLayout; resourceInputs["kvmArguments"] = args?.kvmArguments; @@ -519,6 +530,12 @@ export interface VirtualMachineState { * A host PCI device mapping (multiple blocks supported). */ hostpcis?: pulumi.Input[]>; + /** + * Selectively enable hotplug features. Supported values + * are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + * or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + */ + hotplug?: pulumi.Input; /** * The cloud-init configuration. */ @@ -699,7 +716,10 @@ export interface VirtualMachineState { */ timeoutStopVm?: pulumi.Input; /** - * The TPM state device. + * The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing `version` requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. */ tpmState?: pulumi.Input; /** @@ -789,6 +809,12 @@ export interface VirtualMachineArgs { * A host PCI device mapping (multiple blocks supported). */ hostpcis?: pulumi.Input[]>; + /** + * Selectively enable hotplug features. Supported values + * are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + * or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + */ + hotplug?: pulumi.Input; /** * The cloud-init configuration. */ @@ -954,7 +980,10 @@ export interface VirtualMachineArgs { */ timeoutStopVm?: pulumi.Input; /** - * The TPM state device. + * The TPM state device. The VM must be stopped before + * adding, removing, or moving a TPM state device; the provider automatically + * handles the shutdown/start cycle. Changing `version` requires recreating the + * VM because Proxmox only supports setting the TPM version at creation time. */ tpmState?: pulumi.Input; /** diff --git a/sdk/nodejs/vm/virtualMachine2.ts b/sdk/nodejs/vm/virtualMachine2.ts index 5316bd20..3626c979 100644 --- a/sdk/nodejs/vm/virtualMachine2.ts +++ b/sdk/nodejs/vm/virtualMachine2.ts @@ -49,10 +49,6 @@ export class VirtualMachine2 extends pulumi.CustomResource { * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. */ declare public readonly cdrom: pulumi.Output<{[key: string]: outputs.VM.VirtualMachine2Cdrom}>; - /** - * The cloning configuration. - */ - declare public readonly clone: pulumi.Output; /** * The CPU configuration. */ @@ -78,7 +74,7 @@ export class VirtualMachine2 extends pulumi.CustomResource { */ declare public readonly purgeOnDestroy: pulumi.Output; /** - * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. */ declare public readonly rng: pulumi.Output; /** @@ -113,7 +109,6 @@ export class VirtualMachine2 extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as VirtualMachine2State | undefined; resourceInputs["cdrom"] = state?.cdrom; - resourceInputs["clone"] = state?.clone; resourceInputs["cpu"] = state?.cpu; resourceInputs["deleteUnreferencedDisksOnDestroy"] = state?.deleteUnreferencedDisksOnDestroy; resourceInputs["description"] = state?.description; @@ -132,7 +127,6 @@ export class VirtualMachine2 extends pulumi.CustomResource { throw new Error("Missing required property 'nodeName'"); } resourceInputs["cdrom"] = args?.cdrom; - resourceInputs["clone"] = args?.clone; resourceInputs["cpu"] = args?.cpu; resourceInputs["deleteUnreferencedDisksOnDestroy"] = args?.deleteUnreferencedDisksOnDestroy; resourceInputs["description"] = args?.description; @@ -159,10 +153,6 @@ export interface VirtualMachine2State { * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. */ cdrom?: pulumi.Input<{[key: string]: pulumi.Input}>; - /** - * The cloning configuration. - */ - clone?: pulumi.Input; /** * The CPU configuration. */ @@ -188,7 +178,7 @@ export interface VirtualMachine2State { */ purgeOnDestroy?: pulumi.Input; /** - * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. */ rng?: pulumi.Input; /** @@ -218,10 +208,6 @@ export interface VirtualMachine2Args { * The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. */ cdrom?: pulumi.Input<{[key: string]: pulumi.Input}>; - /** - * The cloning configuration. - */ - clone?: pulumi.Input; /** * The CPU configuration. */ @@ -247,7 +233,7 @@ export interface VirtualMachine2Args { */ purgeOnDestroy?: pulumi.Input; /** - * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + * Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. */ rng?: pulumi.Input; /** diff --git a/sdk/python/Pulumi.yaml b/sdk/python/Pulumi.yaml index e69de29b..f166d691 100644 --- a/sdk/python/Pulumi.yaml +++ b/sdk/python/Pulumi.yaml @@ -0,0 +1,3 @@ +name: proxmoxve +description: A Pulumi resource provider for proxmoxve. +language: python diff --git a/sdk/python/pulumi_proxmoxve/__init__.py b/sdk/python/pulumi_proxmoxve/__init__.py index 1ad09718..6141d439 100644 --- a/sdk/python/pulumi_proxmoxve/__init__.py +++ b/sdk/python/pulumi_proxmoxve/__init__.py @@ -44,14 +44,20 @@ metrics = __metrics import pulumi_proxmoxve.network as __network network = __network + import pulumi_proxmoxve.node as __node + node = __node import pulumi_proxmoxve.oci as __oci oci = __oci import pulumi_proxmoxve.permission as __permission permission = __permission import pulumi_proxmoxve.pool as __pool pool = __pool + import pulumi_proxmoxve.realm as __realm + realm = __realm import pulumi_proxmoxve.sdn as __sdn sdn = __sdn + import pulumi_proxmoxve.sdnfabric as __sdnfabric + sdnfabric = __sdnfabric import pulumi_proxmoxve.sdnzone as __sdnzone sdnzone = __sdnzone import pulumi_proxmoxve.storage as __storage @@ -71,10 +77,13 @@ hardware = _utilities.lazy_import('pulumi_proxmoxve.hardware') metrics = _utilities.lazy_import('pulumi_proxmoxve.metrics') network = _utilities.lazy_import('pulumi_proxmoxve.network') + node = _utilities.lazy_import('pulumi_proxmoxve.node') oci = _utilities.lazy_import('pulumi_proxmoxve.oci') permission = _utilities.lazy_import('pulumi_proxmoxve.permission') pool = _utilities.lazy_import('pulumi_proxmoxve.pool') + realm = _utilities.lazy_import('pulumi_proxmoxve.realm') sdn = _utilities.lazy_import('pulumi_proxmoxve.sdn') + sdnfabric = _utilities.lazy_import('pulumi_proxmoxve.sdnfabric') sdnzone = _utilities.lazy_import('pulumi_proxmoxve.sdnzone') storage = _utilities.lazy_import('pulumi_proxmoxve.storage') user = _utilities.lazy_import('pulumi_proxmoxve.user') @@ -83,6 +92,14 @@ _utilities.register( resource_modules=""" [ + { + "pkg": "proxmoxve", + "mod": "Acme/certificate", + "fqn": "pulumi_proxmoxve.acme", + "classes": { + "proxmoxve:Acme/certificate:Certificate": "Certificate" + } + }, { "pkg": "proxmoxve", "mod": "Apt/repository", @@ -235,6 +252,14 @@ "proxmoxve:Network/networkVlan:NetworkVlan": "NetworkVlan" } }, + { + "pkg": "proxmoxve", + "mod": "Node/firewall", + "fqn": "pulumi_proxmoxve.node", + "classes": { + "proxmoxve:Node/firewall:Firewall": "Firewall" + } + }, { "pkg": "proxmoxve", "mod": "Oci/image", @@ -283,6 +308,38 @@ "proxmoxve:Pool/membership:Membership": "Membership" } }, + { + "pkg": "proxmoxve", + "mod": "Realm/ldap", + "fqn": "pulumi_proxmoxve.realm", + "classes": { + "proxmoxve:Realm/ldap:Ldap": "Ldap" + } + }, + { + "pkg": "proxmoxve", + "mod": "Realm/sync", + "fqn": "pulumi_proxmoxve.realm", + "classes": { + "proxmoxve:Realm/sync:Sync": "Sync" + } + }, + { + "pkg": "proxmoxve", + "mod": "SDNFabric/oSPF", + "fqn": "pulumi_proxmoxve.sdnfabric", + "classes": { + "proxmoxve:SDNFabric/oSPF:OSPF": "OSPF" + } + }, + { + "pkg": "proxmoxve", + "mod": "SDNFabric/openFabric", + "fqn": "pulumi_proxmoxve.sdnfabric", + "classes": { + "proxmoxve:SDNFabric/openFabric:OpenFabric": "OpenFabric" + } + }, { "pkg": "proxmoxve", "mod": "SDNZone/evpn", @@ -331,6 +388,22 @@ "proxmoxve:Sdn/applier:Applier": "Applier" } }, + { + "pkg": "proxmoxve", + "mod": "Sdn/fabric/node/openfabric", + "fqn": "pulumi_proxmoxve.sdn.fabric.node", + "classes": { + "proxmoxve:Sdn/fabric/node/openfabric:Openfabric": "Openfabric" + } + }, + { + "pkg": "proxmoxve", + "mod": "Sdn/fabric/node/ospf", + "fqn": "pulumi_proxmoxve.sdn.fabric.node", + "classes": { + "proxmoxve:Sdn/fabric/node/ospf:Ospf": "Ospf" + } + }, { "pkg": "proxmoxve", "mod": "Sdn/subnet", @@ -347,6 +420,22 @@ "proxmoxve:Sdn/vnet:Vnet": "Vnet" } }, + { + "pkg": "proxmoxve", + "mod": "Storage/cIFS", + "fqn": "pulumi_proxmoxve.storage", + "classes": { + "proxmoxve:Storage/cIFS:CIFS": "CIFS" + } + }, + { + "pkg": "proxmoxve", + "mod": "Storage/directory", + "fqn": "pulumi_proxmoxve.storage", + "classes": { + "proxmoxve:Storage/directory:Directory": "Directory" + } + }, { "pkg": "proxmoxve", "mod": "Storage/file", @@ -355,6 +444,46 @@ "proxmoxve:Storage/file:File": "File" } }, + { + "pkg": "proxmoxve", + "mod": "Storage/lVM", + "fqn": "pulumi_proxmoxve.storage", + "classes": { + "proxmoxve:Storage/lVM:LVM": "LVM" + } + }, + { + "pkg": "proxmoxve", + "mod": "Storage/lVMThin", + "fqn": "pulumi_proxmoxve.storage", + "classes": { + "proxmoxve:Storage/lVMThin:LVMThin": "LVMThin" + } + }, + { + "pkg": "proxmoxve", + "mod": "Storage/nFS", + "fqn": "pulumi_proxmoxve.storage", + "classes": { + "proxmoxve:Storage/nFS:NFS": "NFS" + } + }, + { + "pkg": "proxmoxve", + "mod": "Storage/pBS", + "fqn": "pulumi_proxmoxve.storage", + "classes": { + "proxmoxve:Storage/pBS:PBS": "PBS" + } + }, + { + "pkg": "proxmoxve", + "mod": "Storage/zFSPool", + "fqn": "pulumi_proxmoxve.storage", + "classes": { + "proxmoxve:Storage/zFSPool:ZFSPool": "ZFSPool" + } + }, { "pkg": "proxmoxve", "mod": "User/token", @@ -363,6 +492,14 @@ "proxmoxve:User/token:Token": "Token" } }, + { + "pkg": "proxmoxve", + "mod": "VM/clonedVirtualMachine", + "fqn": "pulumi_proxmoxve.vm", + "classes": { + "proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine": "ClonedVirtualMachine" + } + }, { "pkg": "proxmoxve", "mod": "VM/virtualMachine", diff --git a/sdk/python/pulumi_proxmoxve/_inputs.py b/sdk/python/pulumi_proxmoxve/_inputs.py index ce67cb45..e229b443 100644 --- a/sdk/python/pulumi_proxmoxve/_inputs.py +++ b/sdk/python/pulumi_proxmoxve/_inputs.py @@ -23,8 +23,6 @@ 'ProviderSshNodeArgsDict', 'GetContainersFilterArgs', 'GetContainersFilterArgsDict', - 'GetVm2CloneArgs', - 'GetVm2CloneArgsDict', 'GetVm2CpuArgs', 'GetVm2CpuArgsDict', 'GetVm2RngArgs', @@ -439,56 +437,6 @@ def regex(self, value: Optional[_builtins.bool]): pulumi.set(self, "regex", value) -if not MYPY: - class GetVm2CloneArgsDict(TypedDict): - id: _builtins.int - """ - The ID of the VM to clone. - """ - retries: _builtins.int - """ - The number of retries to perform when cloning the VM (default: 3). - """ -elif False: - GetVm2CloneArgsDict: TypeAlias = Mapping[str, Any] - -@pulumi.input_type -class GetVm2CloneArgs: - def __init__(__self__, *, - id: _builtins.int, - retries: _builtins.int): - """ - :param _builtins.int id: The ID of the VM to clone. - :param _builtins.int retries: The number of retries to perform when cloning the VM (default: 3). - """ - pulumi.set(__self__, "id", id) - pulumi.set(__self__, "retries", retries) - - @_builtins.property - @pulumi.getter - def id(self) -> _builtins.int: - """ - The ID of the VM to clone. - """ - return pulumi.get(self, "id") - - @id.setter - def id(self, value: _builtins.int): - pulumi.set(self, "id", value) - - @_builtins.property - @pulumi.getter - def retries(self) -> _builtins.int: - """ - The number of retries to perform when cloning the VM (default: 3). - """ - return pulumi.get(self, "retries") - - @retries.setter - def retries(self, value: _builtins.int): - pulumi.set(self, "retries", value) - - if not MYPY: class GetVm2CpuArgsDict(TypedDict): affinity: _builtins.str diff --git a/sdk/python/pulumi_proxmoxve/acme/__init__.py b/sdk/python/pulumi_proxmoxve/acme/__init__.py index 7f2783ed..2a7f2f2e 100644 --- a/sdk/python/pulumi_proxmoxve/acme/__init__.py +++ b/sdk/python/pulumi_proxmoxve/acme/__init__.py @@ -6,8 +6,10 @@ from .. import _utilities import typing # Export this package's modules as members: +from .certificate import * from .get_account import * from .get_accounts import * from .get_plugin import * from .get_plugins import * +from ._inputs import * from . import outputs diff --git a/sdk/python/pulumi_proxmoxve/acme/_inputs.py b/sdk/python/pulumi_proxmoxve/acme/_inputs.py new file mode 100644 index 00000000..eff27984 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/acme/_inputs.py @@ -0,0 +1,94 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'CertificateDomainArgs', + 'CertificateDomainArgsDict', +] + +MYPY = False + +if not MYPY: + class CertificateDomainArgsDict(TypedDict): + domain: pulumi.Input[_builtins.str] + """ + The domain name to include in the certificate. + """ + alias: NotRequired[pulumi.Input[_builtins.str]] + """ + An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + """ + plugin: NotRequired[pulumi.Input[_builtins.str]] + """ + The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + """ +elif False: + CertificateDomainArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class CertificateDomainArgs: + def __init__(__self__, *, + domain: pulumi.Input[_builtins.str], + alias: Optional[pulumi.Input[_builtins.str]] = None, + plugin: Optional[pulumi.Input[_builtins.str]] = None): + """ + :param pulumi.Input[_builtins.str] domain: The domain name to include in the certificate. + :param pulumi.Input[_builtins.str] alias: An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + :param pulumi.Input[_builtins.str] plugin: The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + """ + pulumi.set(__self__, "domain", domain) + if alias is not None: + pulumi.set(__self__, "alias", alias) + if plugin is not None: + pulumi.set(__self__, "plugin", plugin) + + @_builtins.property + @pulumi.getter + def domain(self) -> pulumi.Input[_builtins.str]: + """ + The domain name to include in the certificate. + """ + return pulumi.get(self, "domain") + + @domain.setter + def domain(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "domain", value) + + @_builtins.property + @pulumi.getter + def alias(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + """ + return pulumi.get(self, "alias") + + @alias.setter + def alias(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "alias", value) + + @_builtins.property + @pulumi.getter + def plugin(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + """ + return pulumi.get(self, "plugin") + + @plugin.setter + def plugin(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "plugin", value) + + diff --git a/sdk/python/pulumi_proxmoxve/acme/certificate.py b/sdk/python/pulumi_proxmoxve/acme/certificate.py new file mode 100644 index 00000000..ebe72df8 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/acme/certificate.py @@ -0,0 +1,673 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['CertificateArgs', 'Certificate'] + +@pulumi.input_type +class CertificateArgs: + def __init__(__self__, *, + account: pulumi.Input[_builtins.str], + domains: pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]], + node_name: pulumi.Input[_builtins.str], + force: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a Certificate resource. + :param pulumi.Input[_builtins.str] account: The ACME account name to use for ordering the certificate. + :param pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]] domains: The list of domains to include in the certificate. At least one domain is required. + :param pulumi.Input[_builtins.str] node_name: The name of the Proxmox VE node for which to order/manage the ACME certificate. + :param pulumi.Input[_builtins.bool] force: Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + """ + pulumi.set(__self__, "account", account) + pulumi.set(__self__, "domains", domains) + pulumi.set(__self__, "node_name", node_name) + if force is not None: + pulumi.set(__self__, "force", force) + + @_builtins.property + @pulumi.getter + def account(self) -> pulumi.Input[_builtins.str]: + """ + The ACME account name to use for ordering the certificate. + """ + return pulumi.get(self, "account") + + @account.setter + def account(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "account", value) + + @_builtins.property + @pulumi.getter + def domains(self) -> pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]]: + """ + The list of domains to include in the certificate. At least one domain is required. + """ + return pulumi.get(self, "domains") + + @domains.setter + def domains(self, value: pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]]): + pulumi.set(self, "domains", value) + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> pulumi.Input[_builtins.str]: + """ + The name of the Proxmox VE node for which to order/manage the ACME certificate. + """ + return pulumi.get(self, "node_name") + + @node_name.setter + def node_name(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "node_name", value) + + @_builtins.property + @pulumi.getter + def force(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + """ + return pulumi.get(self, "force") + + @force.setter + def force(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "force", value) + + +@pulumi.input_type +class _CertificateState: + def __init__(__self__, *, + account: Optional[pulumi.Input[_builtins.str]] = None, + certificate: Optional[pulumi.Input[_builtins.str]] = None, + domains: Optional[pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]]] = None, + fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + force: Optional[pulumi.Input[_builtins.bool]] = None, + issuer: Optional[pulumi.Input[_builtins.str]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + not_after: Optional[pulumi.Input[_builtins.str]] = None, + not_before: Optional[pulumi.Input[_builtins.str]] = None, + subject: Optional[pulumi.Input[_builtins.str]] = None, + subject_alternative_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + Input properties used for looking up and filtering Certificate resources. + :param pulumi.Input[_builtins.str] account: The ACME account name to use for ordering the certificate. + :param pulumi.Input[_builtins.str] certificate: The PEM-encoded certificate data. + :param pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]] domains: The list of domains to include in the certificate. At least one domain is required. + :param pulumi.Input[_builtins.str] fingerprint: The certificate fingerprint. + :param pulumi.Input[_builtins.bool] force: Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + :param pulumi.Input[_builtins.str] issuer: The certificate issuer. + :param pulumi.Input[_builtins.str] node_name: The name of the Proxmox VE node for which to order/manage the ACME certificate. + :param pulumi.Input[_builtins.str] not_after: The certificate expiration timestamp. + :param pulumi.Input[_builtins.str] not_before: The certificate start timestamp. + :param pulumi.Input[_builtins.str] subject: The certificate subject. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] subject_alternative_names: The certificate subject alternative names (SANs). + """ + if account is not None: + pulumi.set(__self__, "account", account) + if certificate is not None: + pulumi.set(__self__, "certificate", certificate) + if domains is not None: + pulumi.set(__self__, "domains", domains) + if fingerprint is not None: + pulumi.set(__self__, "fingerprint", fingerprint) + if force is not None: + pulumi.set(__self__, "force", force) + if issuer is not None: + pulumi.set(__self__, "issuer", issuer) + if node_name is not None: + pulumi.set(__self__, "node_name", node_name) + if not_after is not None: + pulumi.set(__self__, "not_after", not_after) + if not_before is not None: + pulumi.set(__self__, "not_before", not_before) + if subject is not None: + pulumi.set(__self__, "subject", subject) + if subject_alternative_names is not None: + pulumi.set(__self__, "subject_alternative_names", subject_alternative_names) + + @_builtins.property + @pulumi.getter + def account(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The ACME account name to use for ordering the certificate. + """ + return pulumi.get(self, "account") + + @account.setter + def account(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "account", value) + + @_builtins.property + @pulumi.getter + def certificate(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The PEM-encoded certificate data. + """ + return pulumi.get(self, "certificate") + + @certificate.setter + def certificate(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "certificate", value) + + @_builtins.property + @pulumi.getter + def domains(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]]]: + """ + The list of domains to include in the certificate. At least one domain is required. + """ + return pulumi.get(self, "domains") + + @domains.setter + def domains(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CertificateDomainArgs']]]]): + pulumi.set(self, "domains", value) + + @_builtins.property + @pulumi.getter + def fingerprint(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The certificate fingerprint. + """ + return pulumi.get(self, "fingerprint") + + @fingerprint.setter + def fingerprint(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "fingerprint", value) + + @_builtins.property + @pulumi.getter + def force(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + """ + return pulumi.get(self, "force") + + @force.setter + def force(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "force", value) + + @_builtins.property + @pulumi.getter + def issuer(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The certificate issuer. + """ + return pulumi.get(self, "issuer") + + @issuer.setter + def issuer(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "issuer", value) + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The name of the Proxmox VE node for which to order/manage the ACME certificate. + """ + return pulumi.get(self, "node_name") + + @node_name.setter + def node_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "node_name", value) + + @_builtins.property + @pulumi.getter(name="notAfter") + def not_after(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The certificate expiration timestamp. + """ + return pulumi.get(self, "not_after") + + @not_after.setter + def not_after(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "not_after", value) + + @_builtins.property + @pulumi.getter(name="notBefore") + def not_before(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The certificate start timestamp. + """ + return pulumi.get(self, "not_before") + + @not_before.setter + def not_before(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "not_before", value) + + @_builtins.property + @pulumi.getter + def subject(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The certificate subject. + """ + return pulumi.get(self, "subject") + + @subject.setter + def subject(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "subject", value) + + @_builtins.property + @pulumi.getter(name="subjectAlternativeNames") + def subject_alternative_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The certificate subject alternative names (SANs). + """ + return pulumi.get(self, "subject_alternative_names") + + @subject_alternative_names.setter + def subject_alternative_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "subject_alternative_names", value) + + +@pulumi.type_token("proxmoxve:Acme/certificate:Certificate") +class Certificate(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + account: Optional[pulumi.Input[_builtins.str]] = None, + domains: Optional[pulumi.Input[Sequence[pulumi.Input[Union['CertificateDomainArgs', 'CertificateDomainArgsDict']]]]] = None, + force: Optional[pulumi.Input[_builtins.bool]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node. + + ## Example Usage + + ### Basic ACME Certificate with HTTP-01 Challenge + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + # First, create an ACME account + example = proxmoxve.AcmeAccount("example", + name="production", + contact="admin@example.com", + directory="https://acme-v02.api.letsencrypt.org/directory", + tos="https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf") + # Order a certificate for the node + example_certificate = proxmoxve.acme.Certificate("example", + node_name="pve", + account=example.name, + domains=[{ + "domain": "pve.example.com", + }]) + ``` + + ### ACME Certificate with DNS-01 Challenge + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + # Create an ACME account + example = proxmoxve.AcmeAccount("example", + name="production", + contact="admin@example.com", + directory="https://acme-v02.api.letsencrypt.org/directory", + tos="https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf") + # Configure a DNS plugin (Desec example) + desec = proxmoxve.AcmeDnsPlugin("desec", + plugin="desec", + api="desec", + data={ + "DEDYN_TOKEN": dedyn_token, + }) + # Order a certificate using the DNS plugin + test = proxmoxve.acme.Certificate("test", + node_name="pve", + account=example.name, + force=False, + domains=[{ + "domain": "pve.example.dedyn.io", + "plugin": desec.plugin, + }], + opts = pulumi.ResourceOptions(depends_on=[ + example, + desec, + ])) + ``` + + ### Force Certificate Renewal + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example_force = proxmoxve.acme.Certificate("example_force", + node_name="pve", + account=example["name"], + force=True, + domains=[{ + "domain": "pve.example.com", + }]) + ``` + + ## Related Resources + + - `AcmeAccount` - Manages ACME accounts + - `AcmeDnsPlugin` - Manages ACME DNS plugins for DNS-01 challenges + - `Certifi` - Manages custom SSL/TLS certificates (non-ACME) + + ## Import + + ACME certificates can be imported using the node name: + + #!/usr/bin/env sh + + ACME certificates can be imported using the node name, e.g.: + + ```sh + $ pulumi import proxmoxve:Acme/certificate:Certificate example pve + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] account: The ACME account name to use for ordering the certificate. + :param pulumi.Input[Sequence[pulumi.Input[Union['CertificateDomainArgs', 'CertificateDomainArgsDict']]]] domains: The list of domains to include in the certificate. At least one domain is required. + :param pulumi.Input[_builtins.bool] force: Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + :param pulumi.Input[_builtins.str] node_name: The name of the Proxmox VE node for which to order/manage the ACME certificate. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: CertificateArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages ACME SSL certificates for Proxmox VE nodes. This resource orders and renews certificates from an ACME Certificate Authority for a specific node. + + ## Example Usage + + ### Basic ACME Certificate with HTTP-01 Challenge + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + # First, create an ACME account + example = proxmoxve.AcmeAccount("example", + name="production", + contact="admin@example.com", + directory="https://acme-v02.api.letsencrypt.org/directory", + tos="https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf") + # Order a certificate for the node + example_certificate = proxmoxve.acme.Certificate("example", + node_name="pve", + account=example.name, + domains=[{ + "domain": "pve.example.com", + }]) + ``` + + ### ACME Certificate with DNS-01 Challenge + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + # Create an ACME account + example = proxmoxve.AcmeAccount("example", + name="production", + contact="admin@example.com", + directory="https://acme-v02.api.letsencrypt.org/directory", + tos="https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf") + # Configure a DNS plugin (Desec example) + desec = proxmoxve.AcmeDnsPlugin("desec", + plugin="desec", + api="desec", + data={ + "DEDYN_TOKEN": dedyn_token, + }) + # Order a certificate using the DNS plugin + test = proxmoxve.acme.Certificate("test", + node_name="pve", + account=example.name, + force=False, + domains=[{ + "domain": "pve.example.dedyn.io", + "plugin": desec.plugin, + }], + opts = pulumi.ResourceOptions(depends_on=[ + example, + desec, + ])) + ``` + + ### Force Certificate Renewal + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example_force = proxmoxve.acme.Certificate("example_force", + node_name="pve", + account=example["name"], + force=True, + domains=[{ + "domain": "pve.example.com", + }]) + ``` + + ## Related Resources + + - `AcmeAccount` - Manages ACME accounts + - `AcmeDnsPlugin` - Manages ACME DNS plugins for DNS-01 challenges + - `Certifi` - Manages custom SSL/TLS certificates (non-ACME) + + ## Import + + ACME certificates can be imported using the node name: + + #!/usr/bin/env sh + + ACME certificates can be imported using the node name, e.g.: + + ```sh + $ pulumi import proxmoxve:Acme/certificate:Certificate example pve + ``` + + :param str resource_name: The name of the resource. + :param CertificateArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(CertificateArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + account: Optional[pulumi.Input[_builtins.str]] = None, + domains: Optional[pulumi.Input[Sequence[pulumi.Input[Union['CertificateDomainArgs', 'CertificateDomainArgsDict']]]]] = None, + force: Optional[pulumi.Input[_builtins.bool]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = CertificateArgs.__new__(CertificateArgs) + + if account is None and not opts.urn: + raise TypeError("Missing required property 'account'") + __props__.__dict__["account"] = account + if domains is None and not opts.urn: + raise TypeError("Missing required property 'domains'") + __props__.__dict__["domains"] = domains + __props__.__dict__["force"] = force + if node_name is None and not opts.urn: + raise TypeError("Missing required property 'node_name'") + __props__.__dict__["node_name"] = node_name + __props__.__dict__["certificate"] = None + __props__.__dict__["fingerprint"] = None + __props__.__dict__["issuer"] = None + __props__.__dict__["not_after"] = None + __props__.__dict__["not_before"] = None + __props__.__dict__["subject"] = None + __props__.__dict__["subject_alternative_names"] = None + super(Certificate, __self__).__init__( + 'proxmoxve:Acme/certificate:Certificate', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + account: Optional[pulumi.Input[_builtins.str]] = None, + certificate: Optional[pulumi.Input[_builtins.str]] = None, + domains: Optional[pulumi.Input[Sequence[pulumi.Input[Union['CertificateDomainArgs', 'CertificateDomainArgsDict']]]]] = None, + fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + force: Optional[pulumi.Input[_builtins.bool]] = None, + issuer: Optional[pulumi.Input[_builtins.str]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + not_after: Optional[pulumi.Input[_builtins.str]] = None, + not_before: Optional[pulumi.Input[_builtins.str]] = None, + subject: Optional[pulumi.Input[_builtins.str]] = None, + subject_alternative_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None) -> 'Certificate': + """ + Get an existing Certificate resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] account: The ACME account name to use for ordering the certificate. + :param pulumi.Input[_builtins.str] certificate: The PEM-encoded certificate data. + :param pulumi.Input[Sequence[pulumi.Input[Union['CertificateDomainArgs', 'CertificateDomainArgsDict']]]] domains: The list of domains to include in the certificate. At least one domain is required. + :param pulumi.Input[_builtins.str] fingerprint: The certificate fingerprint. + :param pulumi.Input[_builtins.bool] force: Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + :param pulumi.Input[_builtins.str] issuer: The certificate issuer. + :param pulumi.Input[_builtins.str] node_name: The name of the Proxmox VE node for which to order/manage the ACME certificate. + :param pulumi.Input[_builtins.str] not_after: The certificate expiration timestamp. + :param pulumi.Input[_builtins.str] not_before: The certificate start timestamp. + :param pulumi.Input[_builtins.str] subject: The certificate subject. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] subject_alternative_names: The certificate subject alternative names (SANs). + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _CertificateState.__new__(_CertificateState) + + __props__.__dict__["account"] = account + __props__.__dict__["certificate"] = certificate + __props__.__dict__["domains"] = domains + __props__.__dict__["fingerprint"] = fingerprint + __props__.__dict__["force"] = force + __props__.__dict__["issuer"] = issuer + __props__.__dict__["node_name"] = node_name + __props__.__dict__["not_after"] = not_after + __props__.__dict__["not_before"] = not_before + __props__.__dict__["subject"] = subject + __props__.__dict__["subject_alternative_names"] = subject_alternative_names + return Certificate(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def account(self) -> pulumi.Output[_builtins.str]: + """ + The ACME account name to use for ordering the certificate. + """ + return pulumi.get(self, "account") + + @_builtins.property + @pulumi.getter + def certificate(self) -> pulumi.Output[_builtins.str]: + """ + The PEM-encoded certificate data. + """ + return pulumi.get(self, "certificate") + + @_builtins.property + @pulumi.getter + def domains(self) -> pulumi.Output[Sequence['outputs.CertificateDomain']]: + """ + The list of domains to include in the certificate. At least one domain is required. + """ + return pulumi.get(self, "domains") + + @_builtins.property + @pulumi.getter + def fingerprint(self) -> pulumi.Output[_builtins.str]: + """ + The certificate fingerprint. + """ + return pulumi.get(self, "fingerprint") + + @_builtins.property + @pulumi.getter + def force(self) -> pulumi.Output[_builtins.bool]: + """ + Force certificate renewal even if the certificate is not due for renewal yet. Setting this to true will trigger a new certificate order on every apply. + """ + return pulumi.get(self, "force") + + @_builtins.property + @pulumi.getter + def issuer(self) -> pulumi.Output[_builtins.str]: + """ + The certificate issuer. + """ + return pulumi.get(self, "issuer") + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> pulumi.Output[_builtins.str]: + """ + The name of the Proxmox VE node for which to order/manage the ACME certificate. + """ + return pulumi.get(self, "node_name") + + @_builtins.property + @pulumi.getter(name="notAfter") + def not_after(self) -> pulumi.Output[_builtins.str]: + """ + The certificate expiration timestamp. + """ + return pulumi.get(self, "not_after") + + @_builtins.property + @pulumi.getter(name="notBefore") + def not_before(self) -> pulumi.Output[_builtins.str]: + """ + The certificate start timestamp. + """ + return pulumi.get(self, "not_before") + + @_builtins.property + @pulumi.getter + def subject(self) -> pulumi.Output[_builtins.str]: + """ + The certificate subject. + """ + return pulumi.get(self, "subject") + + @_builtins.property + @pulumi.getter(name="subjectAlternativeNames") + def subject_alternative_names(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The certificate subject alternative names (SANs). + """ + return pulumi.get(self, "subject_alternative_names") + diff --git a/sdk/python/pulumi_proxmoxve/acme/outputs.py b/sdk/python/pulumi_proxmoxve/acme/outputs.py index 6882cf9d..e45e7b78 100644 --- a/sdk/python/pulumi_proxmoxve/acme/outputs.py +++ b/sdk/python/pulumi_proxmoxve/acme/outputs.py @@ -15,10 +15,53 @@ from .. import _utilities __all__ = [ + 'CertificateDomain', 'GetAccountAccountResult', 'GetPluginsPluginResult', ] +@pulumi.output_type +class CertificateDomain(dict): + def __init__(__self__, *, + domain: _builtins.str, + alias: Optional[_builtins.str] = None, + plugin: Optional[_builtins.str] = None): + """ + :param _builtins.str domain: The domain name to include in the certificate. + :param _builtins.str alias: An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + :param _builtins.str plugin: The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + """ + pulumi.set(__self__, "domain", domain) + if alias is not None: + pulumi.set(__self__, "alias", alias) + if plugin is not None: + pulumi.set(__self__, "plugin", plugin) + + @_builtins.property + @pulumi.getter + def domain(self) -> _builtins.str: + """ + The domain name to include in the certificate. + """ + return pulumi.get(self, "domain") + + @_builtins.property + @pulumi.getter + def alias(self) -> Optional[_builtins.str]: + """ + An optional alias domain for DNS validation. This allows you to validate the domain using a different domain's DNS records. + """ + return pulumi.get(self, "alias") + + @_builtins.property + @pulumi.getter + def plugin(self) -> Optional[_builtins.str]: + """ + The DNS plugin to use for DNS-01 challenge validation. If not specified, the standalone HTTP-01 challenge will be used. + """ + return pulumi.get(self, "plugin") + + @pulumi.output_type class GetAccountAccountResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_proxmoxve/apt/standard/repository.py b/sdk/python/pulumi_proxmoxve/apt/standard/repository.py index 48c40d73..f268237e 100644 --- a/sdk/python/pulumi_proxmoxve/apt/standard/repository.py +++ b/sdk/python/pulumi_proxmoxve/apt/standard/repository.py @@ -23,7 +23,7 @@ def __init__(__self__, *, node: pulumi.Input[_builtins.str]): """ The set of arguments for constructing a Repository resource. - :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. :param pulumi.Input[_builtins.str] node: The name of the target Proxmox VE node. """ pulumi.set(__self__, "handle", handle) @@ -33,7 +33,7 @@ def __init__(__self__, *, @pulumi.getter def handle(self) -> pulumi.Input[_builtins.str]: """ - The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. """ return pulumi.get(self, "handle") @@ -68,7 +68,7 @@ def __init__(__self__, *, Input properties used for looking up and filtering Repository resources. :param pulumi.Input[_builtins.str] description: The description of the APT standard repository. :param pulumi.Input[_builtins.str] file_path: The absolute path of the source list file that contains this standard repository. - :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. :param pulumi.Input[_builtins.int] index: The index within the defining source list file. :param pulumi.Input[_builtins.str] name: The name of the APT standard repository. :param pulumi.Input[_builtins.str] node: The name of the target Proxmox VE node. @@ -117,7 +117,7 @@ def file_path(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def handle(self) -> Optional[pulumi.Input[_builtins.str]]: """ - The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. """ return pulumi.get(self, "handle") @@ -216,7 +216,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. :param pulumi.Input[_builtins.str] node: The name of the target Proxmox VE node. """ ... @@ -319,7 +319,7 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[_builtins.str] description: The description of the APT standard repository. :param pulumi.Input[_builtins.str] file_path: The absolute path of the source list file that contains this standard repository. - :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + :param pulumi.Input[_builtins.str] handle: The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. :param pulumi.Input[_builtins.int] index: The index within the defining source list file. :param pulumi.Input[_builtins.str] name: The name of the APT standard repository. :param pulumi.Input[_builtins.str] node: The name of the target Proxmox VE node. @@ -358,7 +358,7 @@ def file_path(self) -> pulumi.Output[_builtins.str]: @pulumi.getter def handle(self) -> pulumi.Output[_builtins.str]: """ - The handle of the APT standard repository. Must be `ceph-quincy-enterprise` | `ceph-quincy-no-subscription` | `ceph-quincy-test` | `ceph-reef-enterprise` | `ceph-reef-no-subscription` | `ceph-reef-test` | `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. + The handle of the APT standard repository. Must be `ceph-squid-enterprise` | `ceph-squid-no-subscription` | `ceph-squid-test` | `enterprise` | `no-subscription` | `test`. """ return pulumi.get(self, "handle") diff --git a/sdk/python/pulumi_proxmoxve/ct/_inputs.py b/sdk/python/pulumi_proxmoxve/ct/_inputs.py index b4689802..9eb9de3d 100644 --- a/sdk/python/pulumi_proxmoxve/ct/_inputs.py +++ b/sdk/python/pulumi_proxmoxve/ct/_inputs.py @@ -405,6 +405,11 @@ class ContainerDiskArgsDict(TypedDict): """ List of extra mount options. """ + path_in_datastore: NotRequired[pulumi.Input[_builtins.str]] + """ + The in-datastore path to the disk image. + Use this attribute for cross-resource references. + """ quota: NotRequired[pulumi.Input[_builtins.bool]] """ Enable user quotas for the container rootfs @@ -428,6 +433,7 @@ def __init__(__self__, *, acl: Optional[pulumi.Input[_builtins.bool]] = None, datastore_id: Optional[pulumi.Input[_builtins.str]] = None, mount_options: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path_in_datastore: Optional[pulumi.Input[_builtins.str]] = None, quota: Optional[pulumi.Input[_builtins.bool]] = None, replicate: Optional[pulumi.Input[_builtins.bool]] = None, size: Optional[pulumi.Input[_builtins.int]] = None): @@ -436,6 +442,8 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] datastore_id: The identifier for the datastore to create the disk in (defaults to `local`). :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] mount_options: List of extra mount options. + :param pulumi.Input[_builtins.str] path_in_datastore: The in-datastore path to the disk image. + Use this attribute for cross-resource references. :param pulumi.Input[_builtins.bool] quota: Enable user quotas for the container rootfs :param pulumi.Input[_builtins.bool] replicate: Will include this volume to a storage replica job :param pulumi.Input[_builtins.int] size: The size of the root filesystem in gigabytes (defaults @@ -448,6 +456,8 @@ def __init__(__self__, *, pulumi.set(__self__, "datastore_id", datastore_id) if mount_options is not None: pulumi.set(__self__, "mount_options", mount_options) + if path_in_datastore is not None: + pulumi.set(__self__, "path_in_datastore", path_in_datastore) if quota is not None: pulumi.set(__self__, "quota", quota) if replicate is not None: @@ -492,6 +502,19 @@ def mount_options(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins def mount_options(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): pulumi.set(self, "mount_options", value) + @_builtins.property + @pulumi.getter(name="pathInDatastore") + def path_in_datastore(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The in-datastore path to the disk image. + Use this attribute for cross-resource references. + """ + return pulumi.get(self, "path_in_datastore") + + @path_in_datastore.setter + def path_in_datastore(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "path_in_datastore", value) + @_builtins.property @pulumi.getter def quota(self) -> Optional[pulumi.Input[_builtins.bool]]: @@ -1106,6 +1129,11 @@ class ContainerMountPointArgsDict(TypedDict): """ List of extra mount options. """ + path_in_datastore: NotRequired[pulumi.Input[_builtins.str]] + """ + The in-datastore path to the mount point volume. + Use this attribute for cross-resource references instead of `volume`. + """ quota: NotRequired[pulumi.Input[_builtins.bool]] """ Enable user quotas inside the container (not supported @@ -1140,6 +1168,7 @@ def __init__(__self__, *, acl: Optional[pulumi.Input[_builtins.bool]] = None, backup: Optional[pulumi.Input[_builtins.bool]] = None, mount_options: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path_in_datastore: Optional[pulumi.Input[_builtins.str]] = None, quota: Optional[pulumi.Input[_builtins.bool]] = None, read_only: Optional[pulumi.Input[_builtins.bool]] = None, replicate: Optional[pulumi.Input[_builtins.bool]] = None, @@ -1154,6 +1183,8 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.bool] backup: Whether to include the mount point in backups (only used for volume mount points, defaults to `false`). :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] mount_options: List of extra mount options. + :param pulumi.Input[_builtins.str] path_in_datastore: The in-datastore path to the mount point volume. + Use this attribute for cross-resource references instead of `volume`. :param pulumi.Input[_builtins.bool] quota: Enable user quotas inside the container (not supported with ZFS subvolumes). :param pulumi.Input[_builtins.bool] read_only: Read-only mount point. @@ -1171,6 +1202,8 @@ def __init__(__self__, *, pulumi.set(__self__, "backup", backup) if mount_options is not None: pulumi.set(__self__, "mount_options", mount_options) + if path_in_datastore is not None: + pulumi.set(__self__, "path_in_datastore", path_in_datastore) if quota is not None: pulumi.set(__self__, "quota", quota) if read_only is not None: @@ -1245,6 +1278,19 @@ def mount_options(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins def mount_options(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): pulumi.set(self, "mount_options", value) + @_builtins.property + @pulumi.getter(name="pathInDatastore") + def path_in_datastore(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The in-datastore path to the mount point volume. + Use this attribute for cross-resource references instead of `volume`. + """ + return pulumi.get(self, "path_in_datastore") + + @path_in_datastore.setter + def path_in_datastore(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "path_in_datastore", value) + @_builtins.property @pulumi.getter def quota(self) -> Optional[pulumi.Input[_builtins.bool]]: diff --git a/sdk/python/pulumi_proxmoxve/ct/container.py b/sdk/python/pulumi_proxmoxve/ct/container.py index fc039d3b..9aa9294f 100644 --- a/sdk/python/pulumi_proxmoxve/ct/container.py +++ b/sdk/python/pulumi_proxmoxve/ct/container.py @@ -1159,6 +1159,11 @@ def __init__(__self__, "size": "10G", "path": "/mnt/volume", }, + { + "volume": "local-lvm:subvol-108-disk-101", + "size": "10G", + "path": "/mnt/data", + }, ], startup={ "order": 3, @@ -1290,6 +1295,11 @@ def __init__(__self__, "size": "10G", "path": "/mnt/volume", }, + { + "volume": "local-lvm:subvol-108-disk-101", + "size": "10G", + "path": "/mnt/data", + }, ], startup={ "order": 3, diff --git a/sdk/python/pulumi_proxmoxve/ct/outputs.py b/sdk/python/pulumi_proxmoxve/ct/outputs.py index 3ed98558..50193339 100644 --- a/sdk/python/pulumi_proxmoxve/ct/outputs.py +++ b/sdk/python/pulumi_proxmoxve/ct/outputs.py @@ -300,6 +300,8 @@ def __key_warning(key: str): suggest = "datastore_id" elif key == "mountOptions": suggest = "mount_options" + elif key == "pathInDatastore": + suggest = "path_in_datastore" if suggest: pulumi.log.warn(f"Key '{key}' not found in ContainerDisk. Access the value via the '{suggest}' property getter instead.") @@ -316,6 +318,7 @@ def __init__(__self__, *, acl: Optional[_builtins.bool] = None, datastore_id: Optional[_builtins.str] = None, mount_options: Optional[Sequence[_builtins.str]] = None, + path_in_datastore: Optional[_builtins.str] = None, quota: Optional[_builtins.bool] = None, replicate: Optional[_builtins.bool] = None, size: Optional[_builtins.int] = None): @@ -324,6 +327,8 @@ def __init__(__self__, *, :param _builtins.str datastore_id: The identifier for the datastore to create the disk in (defaults to `local`). :param Sequence[_builtins.str] mount_options: List of extra mount options. + :param _builtins.str path_in_datastore: The in-datastore path to the disk image. + Use this attribute for cross-resource references. :param _builtins.bool quota: Enable user quotas for the container rootfs :param _builtins.bool replicate: Will include this volume to a storage replica job :param _builtins.int size: The size of the root filesystem in gigabytes (defaults @@ -336,6 +341,8 @@ def __init__(__self__, *, pulumi.set(__self__, "datastore_id", datastore_id) if mount_options is not None: pulumi.set(__self__, "mount_options", mount_options) + if path_in_datastore is not None: + pulumi.set(__self__, "path_in_datastore", path_in_datastore) if quota is not None: pulumi.set(__self__, "quota", quota) if replicate is not None: @@ -368,6 +375,15 @@ def mount_options(self) -> Optional[Sequence[_builtins.str]]: """ return pulumi.get(self, "mount_options") + @_builtins.property + @pulumi.getter(name="pathInDatastore") + def path_in_datastore(self) -> Optional[_builtins.str]: + """ + The in-datastore path to the disk image. + Use this attribute for cross-resource references. + """ + return pulumi.get(self, "path_in_datastore") + @_builtins.property @pulumi.getter def quota(self) -> Optional[_builtins.bool]: @@ -750,6 +766,8 @@ def __key_warning(key: str): suggest = None if key == "mountOptions": suggest = "mount_options" + elif key == "pathInDatastore": + suggest = "path_in_datastore" elif key == "readOnly": suggest = "read_only" @@ -770,6 +788,7 @@ def __init__(__self__, *, acl: Optional[_builtins.bool] = None, backup: Optional[_builtins.bool] = None, mount_options: Optional[Sequence[_builtins.str]] = None, + path_in_datastore: Optional[_builtins.str] = None, quota: Optional[_builtins.bool] = None, read_only: Optional[_builtins.bool] = None, replicate: Optional[_builtins.bool] = None, @@ -784,6 +803,8 @@ def __init__(__self__, *, :param _builtins.bool backup: Whether to include the mount point in backups (only used for volume mount points, defaults to `false`). :param Sequence[_builtins.str] mount_options: List of extra mount options. + :param _builtins.str path_in_datastore: The in-datastore path to the mount point volume. + Use this attribute for cross-resource references instead of `volume`. :param _builtins.bool quota: Enable user quotas inside the container (not supported with ZFS subvolumes). :param _builtins.bool read_only: Read-only mount point. @@ -801,6 +822,8 @@ def __init__(__self__, *, pulumi.set(__self__, "backup", backup) if mount_options is not None: pulumi.set(__self__, "mount_options", mount_options) + if path_in_datastore is not None: + pulumi.set(__self__, "path_in_datastore", path_in_datastore) if quota is not None: pulumi.set(__self__, "quota", quota) if read_only is not None: @@ -855,6 +878,15 @@ def mount_options(self) -> Optional[Sequence[_builtins.str]]: """ return pulumi.get(self, "mount_options") + @_builtins.property + @pulumi.getter(name="pathInDatastore") + def path_in_datastore(self) -> Optional[_builtins.str]: + """ + The in-datastore path to the mount point volume. + Use this attribute for cross-resource references instead of `volume`. + """ + return pulumi.get(self, "path_in_datastore") + @_builtins.property @pulumi.getter def quota(self) -> Optional[_builtins.bool]: diff --git a/sdk/python/pulumi_proxmoxve/download/file.py b/sdk/python/pulumi_proxmoxve/download/file.py index ae351f3a..eb1f2a2e 100644 --- a/sdk/python/pulumi_proxmoxve/download/file.py +++ b/sdk/python/pulumi_proxmoxve/download/file.py @@ -41,7 +41,6 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] checksum_algorithm: The algorithm to calculate the checksum of the file. Must be `md5` | `sha1` | `sha224` | `sha256` | `sha384` | `sha512`. :param pulumi.Input[_builtins.str] decompression_algorithm: Decompress the downloaded file using the specified compression algorithm. Must be one of `gz` | `lzo` | `zst` | `bz2`. :param pulumi.Input[_builtins.str] file_name: The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. - :param pulumi.Input[_builtins.bool] overwrite: By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. :param pulumi.Input[_builtins.bool] overwrite_unmanaged: If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. :param pulumi.Input[_builtins.int] upload_timeout: The file download timeout seconds. Default is 600 (10min). :param pulumi.Input[_builtins.bool] verify: By default `true`. If `false`, no SSL/TLS certificates will be verified. @@ -166,9 +165,6 @@ def file_name(self, value: Optional[pulumi.Input[_builtins.str]]): @_builtins.property @pulumi.getter def overwrite(self) -> Optional[pulumi.Input[_builtins.bool]]: - """ - By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - """ return pulumi.get(self, "overwrite") @overwrite.setter @@ -237,7 +233,6 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] decompression_algorithm: Decompress the downloaded file using the specified compression algorithm. Must be one of `gz` | `lzo` | `zst` | `bz2`. :param pulumi.Input[_builtins.str] file_name: The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. :param pulumi.Input[_builtins.str] node_name: The node name. - :param pulumi.Input[_builtins.bool] overwrite: By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. :param pulumi.Input[_builtins.bool] overwrite_unmanaged: If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. :param pulumi.Input[_builtins.int] size: The file size in PVE. :param pulumi.Input[_builtins.int] upload_timeout: The file download timeout seconds. Default is 600 (10min). @@ -358,9 +353,6 @@ def node_name(self, value: Optional[pulumi.Input[_builtins.str]]): @_builtins.property @pulumi.getter def overwrite(self) -> Optional[pulumi.Input[_builtins.bool]]: - """ - By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - """ return pulumi.get(self, "overwrite") @overwrite.setter @@ -522,7 +514,6 @@ def __init__(__self__, :param pulumi.Input[_builtins.str] decompression_algorithm: Decompress the downloaded file using the specified compression algorithm. Must be one of `gz` | `lzo` | `zst` | `bz2`. :param pulumi.Input[_builtins.str] file_name: The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. :param pulumi.Input[_builtins.str] node_name: The node name. - :param pulumi.Input[_builtins.bool] overwrite: By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. :param pulumi.Input[_builtins.bool] overwrite_unmanaged: If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. :param pulumi.Input[_builtins.int] upload_timeout: The file download timeout seconds. Default is 600 (10min). :param pulumi.Input[_builtins.str] url: The URL to download the file from. Must match regex: `https?://.*`. @@ -694,7 +685,6 @@ def get(resource_name: str, :param pulumi.Input[_builtins.str] decompression_algorithm: Decompress the downloaded file using the specified compression algorithm. Must be one of `gz` | `lzo` | `zst` | `bz2`. :param pulumi.Input[_builtins.str] file_name: The file name. If not provided, it is calculated using `url`. PVE will raise 'wrong file extension' error for some popular extensions file `.raw` or `.qcow2` on PVE versions prior to 8.4. Workaround is to use e.g. `.img` instead. :param pulumi.Input[_builtins.str] node_name: The node name. - :param pulumi.Input[_builtins.bool] overwrite: By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. :param pulumi.Input[_builtins.bool] overwrite_unmanaged: If `true` and a file with the same name already exists in the datastore, it will be deleted and the new file will be downloaded. If `false` and the file already exists, an error will be returned. :param pulumi.Input[_builtins.int] size: The file size in PVE. :param pulumi.Input[_builtins.int] upload_timeout: The file download timeout seconds. Default is 600 (10min). @@ -779,9 +769,6 @@ def node_name(self) -> pulumi.Output[_builtins.str]: @_builtins.property @pulumi.getter def overwrite(self) -> pulumi.Output[_builtins.bool]: - """ - By default `true`. If `true` and file size has changed in the datastore, it will be replaced. If `false`, there will be no check. - """ return pulumi.get(self, "overwrite") @_builtins.property diff --git a/sdk/python/pulumi_proxmoxve/get_vm2.py b/sdk/python/pulumi_proxmoxve/get_vm2.py index 0e4b1bc1..f0440f07 100644 --- a/sdk/python/pulumi_proxmoxve/get_vm2.py +++ b/sdk/python/pulumi_proxmoxve/get_vm2.py @@ -28,10 +28,7 @@ class GetVm2Result: """ A collection of values returned by getVm2. """ - def __init__(__self__, clone=None, cpu=None, description=None, id=None, name=None, node_name=None, rng=None, tags=None, template=None, timeouts=None, vga=None): - if clone and not isinstance(clone, dict): - raise TypeError("Expected argument 'clone' to be a dict") - pulumi.set(__self__, "clone", clone) + def __init__(__self__, cpu=None, description=None, id=None, name=None, node_name=None, rng=None, tags=None, template=None, timeouts=None, vga=None): if cpu and not isinstance(cpu, dict): raise TypeError("Expected argument 'cpu' to be a dict") pulumi.set(__self__, "cpu", cpu) @@ -63,14 +60,6 @@ def __init__(__self__, clone=None, cpu=None, description=None, id=None, name=Non raise TypeError("Expected argument 'vga' to be a dict") pulumi.set(__self__, "vga", vga) - @_builtins.property - @pulumi.getter - def clone(self) -> Optional['outputs.GetVm2CloneResult']: - """ - The cloning configuration. - """ - return pulumi.get(self, "clone") - @_builtins.property @pulumi.getter def cpu(self) -> 'outputs.GetVm2CpuResult': @@ -155,7 +144,6 @@ def __await__(self): if False: yield self return GetVm2Result( - clone=self.clone, cpu=self.cpu, description=self.description, id=self.id, @@ -168,8 +156,7 @@ def __await__(self): vga=self.vga) -def get_vm2(clone: Optional[Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict']] = None, - cpu: Optional[Union['GetVm2CpuArgs', 'GetVm2CpuArgsDict']] = None, +def get_vm2(cpu: Optional[Union['GetVm2CpuArgs', 'GetVm2CpuArgsDict']] = None, description: Optional[_builtins.str] = None, id: Optional[_builtins.int] = None, name: Optional[_builtins.str] = None, @@ -185,7 +172,6 @@ def get_vm2(clone: Optional[Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict']] = N This is an experimental implementation of a Proxmox VM datasource using Plugin Framework. - :param Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict'] clone: The cloning configuration. :param Union['GetVm2CpuArgs', 'GetVm2CpuArgsDict'] cpu: The CPU configuration. :param _builtins.str description: The description of the VM. :param _builtins.int id: The unique identifier of the VM in the Proxmox cluster. @@ -197,7 +183,6 @@ def get_vm2(clone: Optional[Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict']] = N :param Union['GetVm2VgaArgs', 'GetVm2VgaArgsDict'] vga: The VGA configuration. """ __args__ = dict() - __args__['clone'] = clone __args__['cpu'] = cpu __args__['description'] = description __args__['id'] = id @@ -212,7 +197,6 @@ def get_vm2(clone: Optional[Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict']] = N __ret__ = pulumi.runtime.invoke('proxmoxve:index/getVm2:getVm2', __args__, opts=opts, typ=GetVm2Result).value return AwaitableGetVm2Result( - clone=pulumi.get(__ret__, 'clone'), cpu=pulumi.get(__ret__, 'cpu'), description=pulumi.get(__ret__, 'description'), id=pulumi.get(__ret__, 'id'), @@ -223,8 +207,7 @@ def get_vm2(clone: Optional[Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict']] = N template=pulumi.get(__ret__, 'template'), timeouts=pulumi.get(__ret__, 'timeouts'), vga=pulumi.get(__ret__, 'vga')) -def get_vm2_output(clone: Optional[pulumi.Input[Optional[Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict']]]] = None, - cpu: Optional[pulumi.Input[Optional[Union['GetVm2CpuArgs', 'GetVm2CpuArgsDict']]]] = None, +def get_vm2_output(cpu: Optional[pulumi.Input[Optional[Union['GetVm2CpuArgs', 'GetVm2CpuArgsDict']]]] = None, description: Optional[pulumi.Input[Optional[_builtins.str]]] = None, id: Optional[pulumi.Input[_builtins.int]] = None, name: Optional[pulumi.Input[Optional[_builtins.str]]] = None, @@ -240,7 +223,6 @@ def get_vm2_output(clone: Optional[pulumi.Input[Optional[Union['GetVm2CloneArgs' This is an experimental implementation of a Proxmox VM datasource using Plugin Framework. - :param Union['GetVm2CloneArgs', 'GetVm2CloneArgsDict'] clone: The cloning configuration. :param Union['GetVm2CpuArgs', 'GetVm2CpuArgsDict'] cpu: The CPU configuration. :param _builtins.str description: The description of the VM. :param _builtins.int id: The unique identifier of the VM in the Proxmox cluster. @@ -252,7 +234,6 @@ def get_vm2_output(clone: Optional[pulumi.Input[Optional[Union['GetVm2CloneArgs' :param Union['GetVm2VgaArgs', 'GetVm2VgaArgsDict'] vga: The VGA configuration. """ __args__ = dict() - __args__['clone'] = clone __args__['cpu'] = cpu __args__['description'] = description __args__['id'] = id @@ -266,7 +247,6 @@ def get_vm2_output(clone: Optional[pulumi.Input[Optional[Union['GetVm2CloneArgs' opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) __ret__ = pulumi.runtime.invoke_output('proxmoxve:index/getVm2:getVm2', __args__, opts=opts, typ=GetVm2Result) return __ret__.apply(lambda __response__: GetVm2Result( - clone=pulumi.get(__response__, 'clone'), cpu=pulumi.get(__response__, 'cpu'), description=pulumi.get(__response__, 'description'), id=pulumi.get(__response__, 'id'), diff --git a/sdk/python/pulumi_proxmoxve/network/firewall_options.py b/sdk/python/pulumi_proxmoxve/network/firewall_options.py index 1ad8561c..8ea2d223 100644 --- a/sdk/python/pulumi_proxmoxve/network/firewall_options.py +++ b/sdk/python/pulumi_proxmoxve/network/firewall_options.py @@ -35,7 +35,7 @@ def __init__(__self__, *, """ The set of arguments for constructing a FirewallOptions resource. :param pulumi.Input[_builtins.str] node_name: Node name. - :param pulumi.Input[_builtins.int] container_id: Container ID. + :param pulumi.Input[_builtins.int] container_id: Container ID. **Exactly one of `vm_id` or `container_id` must be specified.** :param pulumi.Input[_builtins.bool] dhcp: Enable DHCP. :param pulumi.Input[_builtins.bool] enabled: Enable or disable the firewall. :param pulumi.Input[_builtins.str] input_policy: The default input @@ -56,7 +56,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] output_policy: The default output policy (`ACCEPT`, `DROP`, `REJECT`). :param pulumi.Input[_builtins.bool] radv: Enable Router Advertisement. - :param pulumi.Input[_builtins.int] vm_id: VM ID. + :param pulumi.Input[_builtins.int] vm_id: VM ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ pulumi.set(__self__, "node_name", node_name) if container_id is not None: @@ -100,7 +100,7 @@ def node_name(self, value: pulumi.Input[_builtins.str]): @pulumi.getter(name="containerId") def container_id(self) -> Optional[pulumi.Input[_builtins.int]]: """ - Container ID. + Container ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ return pulumi.get(self, "container_id") @@ -242,7 +242,7 @@ def radv(self, value: Optional[pulumi.Input[_builtins.bool]]): @pulumi.getter(name="vmId") def vm_id(self) -> Optional[pulumi.Input[_builtins.int]]: """ - VM ID. + VM ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ return pulumi.get(self, "vm_id") @@ -269,7 +269,7 @@ def __init__(__self__, *, vm_id: Optional[pulumi.Input[_builtins.int]] = None): """ Input properties used for looking up and filtering FirewallOptions resources. - :param pulumi.Input[_builtins.int] container_id: Container ID. + :param pulumi.Input[_builtins.int] container_id: Container ID. **Exactly one of `vm_id` or `container_id` must be specified.** :param pulumi.Input[_builtins.bool] dhcp: Enable DHCP. :param pulumi.Input[_builtins.bool] enabled: Enable or disable the firewall. :param pulumi.Input[_builtins.str] input_policy: The default input @@ -291,7 +291,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] output_policy: The default output policy (`ACCEPT`, `DROP`, `REJECT`). :param pulumi.Input[_builtins.bool] radv: Enable Router Advertisement. - :param pulumi.Input[_builtins.int] vm_id: VM ID. + :param pulumi.Input[_builtins.int] vm_id: VM ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ if container_id is not None: pulumi.set(__self__, "container_id", container_id) @@ -324,7 +324,7 @@ def __init__(__self__, *, @pulumi.getter(name="containerId") def container_id(self) -> Optional[pulumi.Input[_builtins.int]]: """ - Container ID. + Container ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ return pulumi.get(self, "container_id") @@ -478,7 +478,7 @@ def radv(self, value: Optional[pulumi.Input[_builtins.bool]]): @pulumi.getter(name="vmId") def vm_id(self) -> Optional[pulumi.Input[_builtins.int]]: """ - VM ID. + VM ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ return pulumi.get(self, "vm_id") @@ -550,7 +550,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[_builtins.int] container_id: Container ID. + :param pulumi.Input[_builtins.int] container_id: Container ID. **Exactly one of `vm_id` or `container_id` must be specified.** :param pulumi.Input[_builtins.bool] dhcp: Enable DHCP. :param pulumi.Input[_builtins.bool] enabled: Enable or disable the firewall. :param pulumi.Input[_builtins.str] input_policy: The default input @@ -572,7 +572,7 @@ def __init__(__self__, :param pulumi.Input[_builtins.str] output_policy: The default output policy (`ACCEPT`, `DROP`, `REJECT`). :param pulumi.Input[_builtins.bool] radv: Enable Router Advertisement. - :param pulumi.Input[_builtins.int] vm_id: VM ID. + :param pulumi.Input[_builtins.int] vm_id: VM ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ ... @overload @@ -703,7 +703,7 @@ def get(resource_name: str, :param str resource_name: The unique name of the resulting resource. :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[_builtins.int] container_id: Container ID. + :param pulumi.Input[_builtins.int] container_id: Container ID. **Exactly one of `vm_id` or `container_id` must be specified.** :param pulumi.Input[_builtins.bool] dhcp: Enable DHCP. :param pulumi.Input[_builtins.bool] enabled: Enable or disable the firewall. :param pulumi.Input[_builtins.str] input_policy: The default input @@ -725,7 +725,7 @@ def get(resource_name: str, :param pulumi.Input[_builtins.str] output_policy: The default output policy (`ACCEPT`, `DROP`, `REJECT`). :param pulumi.Input[_builtins.bool] radv: Enable Router Advertisement. - :param pulumi.Input[_builtins.int] vm_id: VM ID. + :param pulumi.Input[_builtins.int] vm_id: VM ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -750,7 +750,7 @@ def get(resource_name: str, @pulumi.getter(name="containerId") def container_id(self) -> pulumi.Output[Optional[_builtins.int]]: """ - Container ID. + Container ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ return pulumi.get(self, "container_id") @@ -856,7 +856,7 @@ def radv(self) -> pulumi.Output[Optional[_builtins.bool]]: @pulumi.getter(name="vmId") def vm_id(self) -> pulumi.Output[Optional[_builtins.int]]: """ - VM ID. + VM ID. **Exactly one of `vm_id` or `container_id` must be specified.** """ return pulumi.get(self, "vm_id") diff --git a/sdk/python/pulumi_proxmoxve/network/firewall_rules.py b/sdk/python/pulumi_proxmoxve/network/firewall_rules.py index 061d7c19..803308f0 100644 --- a/sdk/python/pulumi_proxmoxve/network/firewall_rules.py +++ b/sdk/python/pulumi_proxmoxve/network/firewall_rules.py @@ -184,8 +184,7 @@ def __init__(__self__, """ Manages cluster-level, node-level or VM/container-level firewall rules. - > **Note:** Before creating a new `Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). - If rules are already configured, import them first using the appropriate import command. + > Before creating a new `Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command. ## Example Usage @@ -261,8 +260,7 @@ def __init__(__self__, """ Manages cluster-level, node-level or VM/container-level firewall rules. - > **Note:** Before creating a new `Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). - If rules are already configured, import them first using the appropriate import command. + > Before creating a new `Network.FirewallRules` resource, verify that no rules already exist for the target (cluster, node, VM, or container). If rules are already configured, import them first using the appropriate import command. ## Example Usage diff --git a/sdk/python/pulumi_proxmoxve/node/__init__.py b/sdk/python/pulumi_proxmoxve/node/__init__.py new file mode 100644 index 00000000..b4aa0b79 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/node/__init__.py @@ -0,0 +1,9 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +from .. import _utilities +import typing +# Export this package's modules as members: +from .firewall import * diff --git a/sdk/python/pulumi_proxmoxve/node/firewall.py b/sdk/python/pulumi_proxmoxve/node/firewall.py new file mode 100644 index 00000000..8c7a6c97 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/node/firewall.py @@ -0,0 +1,729 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['FirewallArgs', 'Firewall'] + +@pulumi.input_type +class FirewallArgs: + def __init__(__self__, *, + node_name: pulumi.Input[_builtins.str], + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + log_level_forward: Optional[pulumi.Input[_builtins.str]] = None, + log_level_in: Optional[pulumi.Input[_builtins.str]] = None, + log_level_out: Optional[pulumi.Input[_builtins.str]] = None, + ndp: Optional[pulumi.Input[_builtins.bool]] = None, + nf_conntrack_max: Optional[pulumi.Input[_builtins.int]] = None, + nf_conntrack_tcp_timeout_established: Optional[pulumi.Input[_builtins.int]] = None, + nftables: Optional[pulumi.Input[_builtins.bool]] = None, + nosmurfs: Optional[pulumi.Input[_builtins.bool]] = None, + smurf_log_level: Optional[pulumi.Input[_builtins.str]] = None, + tcp_flags_log_level: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Firewall resource. + :param pulumi.Input[_builtins.str] node_name: The cluster node name. + :param pulumi.Input[_builtins.bool] enabled: Enable host firewall rules (defaults to `true`). + :param pulumi.Input[_builtins.str] log_level_forward: Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_in: Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_out: Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.bool] ndp: Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + :param pulumi.Input[_builtins.int] nf_conntrack_max: Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + :param pulumi.Input[_builtins.int] nf_conntrack_tcp_timeout_established: Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + :param pulumi.Input[_builtins.bool] nftables: Enable nftables based firewall (tech preview, defaults to `false`). + :param pulumi.Input[_builtins.bool] nosmurfs: Enable SMURFS filter (defaults to `true`). + :param pulumi.Input[_builtins.str] smurf_log_level: Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] tcp_flags_log_level: Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + pulumi.set(__self__, "node_name", node_name) + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if log_level_forward is not None: + pulumi.set(__self__, "log_level_forward", log_level_forward) + if log_level_in is not None: + pulumi.set(__self__, "log_level_in", log_level_in) + if log_level_out is not None: + pulumi.set(__self__, "log_level_out", log_level_out) + if ndp is not None: + pulumi.set(__self__, "ndp", ndp) + if nf_conntrack_max is not None: + pulumi.set(__self__, "nf_conntrack_max", nf_conntrack_max) + if nf_conntrack_tcp_timeout_established is not None: + pulumi.set(__self__, "nf_conntrack_tcp_timeout_established", nf_conntrack_tcp_timeout_established) + if nftables is not None: + pulumi.set(__self__, "nftables", nftables) + if nosmurfs is not None: + pulumi.set(__self__, "nosmurfs", nosmurfs) + if smurf_log_level is not None: + pulumi.set(__self__, "smurf_log_level", smurf_log_level) + if tcp_flags_log_level is not None: + pulumi.set(__self__, "tcp_flags_log_level", tcp_flags_log_level) + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> pulumi.Input[_builtins.str]: + """ + The cluster node name. + """ + return pulumi.get(self, "node_name") + + @node_name.setter + def node_name(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "node_name", value) + + @_builtins.property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable host firewall rules (defaults to `true`). + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enabled", value) + + @_builtins.property + @pulumi.getter(name="logLevelForward") + def log_level_forward(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_forward") + + @log_level_forward.setter + def log_level_forward(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "log_level_forward", value) + + @_builtins.property + @pulumi.getter(name="logLevelIn") + def log_level_in(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_in") + + @log_level_in.setter + def log_level_in(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "log_level_in", value) + + @_builtins.property + @pulumi.getter(name="logLevelOut") + def log_level_out(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_out") + + @log_level_out.setter + def log_level_out(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "log_level_out", value) + + @_builtins.property + @pulumi.getter + def ndp(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + """ + return pulumi.get(self, "ndp") + + @ndp.setter + def ndp(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "ndp", value) + + @_builtins.property + @pulumi.getter(name="nfConntrackMax") + def nf_conntrack_max(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + """ + return pulumi.get(self, "nf_conntrack_max") + + @nf_conntrack_max.setter + def nf_conntrack_max(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "nf_conntrack_max", value) + + @_builtins.property + @pulumi.getter(name="nfConntrackTcpTimeoutEstablished") + def nf_conntrack_tcp_timeout_established(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + """ + return pulumi.get(self, "nf_conntrack_tcp_timeout_established") + + @nf_conntrack_tcp_timeout_established.setter + def nf_conntrack_tcp_timeout_established(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "nf_conntrack_tcp_timeout_established", value) + + @_builtins.property + @pulumi.getter + def nftables(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable nftables based firewall (tech preview, defaults to `false`). + """ + return pulumi.get(self, "nftables") + + @nftables.setter + def nftables(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "nftables", value) + + @_builtins.property + @pulumi.getter + def nosmurfs(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable SMURFS filter (defaults to `true`). + """ + return pulumi.get(self, "nosmurfs") + + @nosmurfs.setter + def nosmurfs(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "nosmurfs", value) + + @_builtins.property + @pulumi.getter(name="smurfLogLevel") + def smurf_log_level(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "smurf_log_level") + + @smurf_log_level.setter + def smurf_log_level(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "smurf_log_level", value) + + @_builtins.property + @pulumi.getter(name="tcpFlagsLogLevel") + def tcp_flags_log_level(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "tcp_flags_log_level") + + @tcp_flags_log_level.setter + def tcp_flags_log_level(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "tcp_flags_log_level", value) + + +@pulumi.input_type +class _FirewallState: + def __init__(__self__, *, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + log_level_forward: Optional[pulumi.Input[_builtins.str]] = None, + log_level_in: Optional[pulumi.Input[_builtins.str]] = None, + log_level_out: Optional[pulumi.Input[_builtins.str]] = None, + ndp: Optional[pulumi.Input[_builtins.bool]] = None, + nf_conntrack_max: Optional[pulumi.Input[_builtins.int]] = None, + nf_conntrack_tcp_timeout_established: Optional[pulumi.Input[_builtins.int]] = None, + nftables: Optional[pulumi.Input[_builtins.bool]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + nosmurfs: Optional[pulumi.Input[_builtins.bool]] = None, + smurf_log_level: Optional[pulumi.Input[_builtins.str]] = None, + tcp_flags_log_level: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Firewall resources. + :param pulumi.Input[_builtins.bool] enabled: Enable host firewall rules (defaults to `true`). + :param pulumi.Input[_builtins.str] log_level_forward: Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_in: Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_out: Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.bool] ndp: Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + :param pulumi.Input[_builtins.int] nf_conntrack_max: Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + :param pulumi.Input[_builtins.int] nf_conntrack_tcp_timeout_established: Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + :param pulumi.Input[_builtins.bool] nftables: Enable nftables based firewall (tech preview, defaults to `false`). + :param pulumi.Input[_builtins.str] node_name: The cluster node name. + :param pulumi.Input[_builtins.bool] nosmurfs: Enable SMURFS filter (defaults to `true`). + :param pulumi.Input[_builtins.str] smurf_log_level: Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] tcp_flags_log_level: Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if log_level_forward is not None: + pulumi.set(__self__, "log_level_forward", log_level_forward) + if log_level_in is not None: + pulumi.set(__self__, "log_level_in", log_level_in) + if log_level_out is not None: + pulumi.set(__self__, "log_level_out", log_level_out) + if ndp is not None: + pulumi.set(__self__, "ndp", ndp) + if nf_conntrack_max is not None: + pulumi.set(__self__, "nf_conntrack_max", nf_conntrack_max) + if nf_conntrack_tcp_timeout_established is not None: + pulumi.set(__self__, "nf_conntrack_tcp_timeout_established", nf_conntrack_tcp_timeout_established) + if nftables is not None: + pulumi.set(__self__, "nftables", nftables) + if node_name is not None: + pulumi.set(__self__, "node_name", node_name) + if nosmurfs is not None: + pulumi.set(__self__, "nosmurfs", nosmurfs) + if smurf_log_level is not None: + pulumi.set(__self__, "smurf_log_level", smurf_log_level) + if tcp_flags_log_level is not None: + pulumi.set(__self__, "tcp_flags_log_level", tcp_flags_log_level) + + @_builtins.property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable host firewall rules (defaults to `true`). + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enabled", value) + + @_builtins.property + @pulumi.getter(name="logLevelForward") + def log_level_forward(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_forward") + + @log_level_forward.setter + def log_level_forward(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "log_level_forward", value) + + @_builtins.property + @pulumi.getter(name="logLevelIn") + def log_level_in(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_in") + + @log_level_in.setter + def log_level_in(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "log_level_in", value) + + @_builtins.property + @pulumi.getter(name="logLevelOut") + def log_level_out(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_out") + + @log_level_out.setter + def log_level_out(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "log_level_out", value) + + @_builtins.property + @pulumi.getter + def ndp(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + """ + return pulumi.get(self, "ndp") + + @ndp.setter + def ndp(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "ndp", value) + + @_builtins.property + @pulumi.getter(name="nfConntrackMax") + def nf_conntrack_max(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + """ + return pulumi.get(self, "nf_conntrack_max") + + @nf_conntrack_max.setter + def nf_conntrack_max(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "nf_conntrack_max", value) + + @_builtins.property + @pulumi.getter(name="nfConntrackTcpTimeoutEstablished") + def nf_conntrack_tcp_timeout_established(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + """ + return pulumi.get(self, "nf_conntrack_tcp_timeout_established") + + @nf_conntrack_tcp_timeout_established.setter + def nf_conntrack_tcp_timeout_established(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "nf_conntrack_tcp_timeout_established", value) + + @_builtins.property + @pulumi.getter + def nftables(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable nftables based firewall (tech preview, defaults to `false`). + """ + return pulumi.get(self, "nftables") + + @nftables.setter + def nftables(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "nftables", value) + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The cluster node name. + """ + return pulumi.get(self, "node_name") + + @node_name.setter + def node_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "node_name", value) + + @_builtins.property + @pulumi.getter + def nosmurfs(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable SMURFS filter (defaults to `true`). + """ + return pulumi.get(self, "nosmurfs") + + @nosmurfs.setter + def nosmurfs(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "nosmurfs", value) + + @_builtins.property + @pulumi.getter(name="smurfLogLevel") + def smurf_log_level(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "smurf_log_level") + + @smurf_log_level.setter + def smurf_log_level(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "smurf_log_level", value) + + @_builtins.property + @pulumi.getter(name="tcpFlagsLogLevel") + def tcp_flags_log_level(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "tcp_flags_log_level") + + @tcp_flags_log_level.setter + def tcp_flags_log_level(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "tcp_flags_log_level", value) + + +@pulumi.type_token("proxmoxve:Node/firewall:Firewall") +class Firewall(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + log_level_forward: Optional[pulumi.Input[_builtins.str]] = None, + log_level_in: Optional[pulumi.Input[_builtins.str]] = None, + log_level_out: Optional[pulumi.Input[_builtins.str]] = None, + ndp: Optional[pulumi.Input[_builtins.bool]] = None, + nf_conntrack_max: Optional[pulumi.Input[_builtins.int]] = None, + nf_conntrack_tcp_timeout_established: Optional[pulumi.Input[_builtins.int]] = None, + nftables: Optional[pulumi.Input[_builtins.bool]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + nosmurfs: Optional[pulumi.Input[_builtins.bool]] = None, + smurf_log_level: Optional[pulumi.Input[_builtins.str]] = None, + tcp_flags_log_level: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Manages Proxmox VE Node Firewall options. + + > This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options). + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + node_pve1 = proxmoxve.node.Firewall("node-pve1", + node_name="pve1", + enabled=False) + pve2 = proxmoxve.node.Firewall("pve2", + node_name="pve2", + enabled=True, + log_level_in="alert", + log_level_out="alert", + log_level_forward="alert", + ndp=True, + nftables=True, + nosmurfs=True, + smurf_log_level="alert", + tcp_flags_log_level="alert") + ``` + + ## Import + + ```sh + $ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1 + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.bool] enabled: Enable host firewall rules (defaults to `true`). + :param pulumi.Input[_builtins.str] log_level_forward: Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_in: Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_out: Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.bool] ndp: Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + :param pulumi.Input[_builtins.int] nf_conntrack_max: Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + :param pulumi.Input[_builtins.int] nf_conntrack_tcp_timeout_established: Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + :param pulumi.Input[_builtins.bool] nftables: Enable nftables based firewall (tech preview, defaults to `false`). + :param pulumi.Input[_builtins.str] node_name: The cluster node name. + :param pulumi.Input[_builtins.bool] nosmurfs: Enable SMURFS filter (defaults to `true`). + :param pulumi.Input[_builtins.str] smurf_log_level: Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] tcp_flags_log_level: Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: FirewallArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages Proxmox VE Node Firewall options. + + > This resource in fact updates existing node firewall configuration created by PVE on bootstrap. All optional attributes have explicit defaults for deterministic behavior (PVE may change defaults in the future). See [API documentation](https://pve.proxmox.com/pve-docs/api-viewer/index.html#/nodes/{node}/firewall/options). + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + node_pve1 = proxmoxve.node.Firewall("node-pve1", + node_name="pve1", + enabled=False) + pve2 = proxmoxve.node.Firewall("pve2", + node_name="pve2", + enabled=True, + log_level_in="alert", + log_level_out="alert", + log_level_forward="alert", + ndp=True, + nftables=True, + nosmurfs=True, + smurf_log_level="alert", + tcp_flags_log_level="alert") + ``` + + ## Import + + ```sh + $ pulumi import proxmoxve:Node/firewall:Firewall node-pve1 pve1 + ``` + + :param str resource_name: The name of the resource. + :param FirewallArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(FirewallArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + log_level_forward: Optional[pulumi.Input[_builtins.str]] = None, + log_level_in: Optional[pulumi.Input[_builtins.str]] = None, + log_level_out: Optional[pulumi.Input[_builtins.str]] = None, + ndp: Optional[pulumi.Input[_builtins.bool]] = None, + nf_conntrack_max: Optional[pulumi.Input[_builtins.int]] = None, + nf_conntrack_tcp_timeout_established: Optional[pulumi.Input[_builtins.int]] = None, + nftables: Optional[pulumi.Input[_builtins.bool]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + nosmurfs: Optional[pulumi.Input[_builtins.bool]] = None, + smurf_log_level: Optional[pulumi.Input[_builtins.str]] = None, + tcp_flags_log_level: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = FirewallArgs.__new__(FirewallArgs) + + __props__.__dict__["enabled"] = enabled + __props__.__dict__["log_level_forward"] = log_level_forward + __props__.__dict__["log_level_in"] = log_level_in + __props__.__dict__["log_level_out"] = log_level_out + __props__.__dict__["ndp"] = ndp + __props__.__dict__["nf_conntrack_max"] = nf_conntrack_max + __props__.__dict__["nf_conntrack_tcp_timeout_established"] = nf_conntrack_tcp_timeout_established + __props__.__dict__["nftables"] = nftables + if node_name is None and not opts.urn: + raise TypeError("Missing required property 'node_name'") + __props__.__dict__["node_name"] = node_name + __props__.__dict__["nosmurfs"] = nosmurfs + __props__.__dict__["smurf_log_level"] = smurf_log_level + __props__.__dict__["tcp_flags_log_level"] = tcp_flags_log_level + super(Firewall, __self__).__init__( + 'proxmoxve:Node/firewall:Firewall', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + enabled: Optional[pulumi.Input[_builtins.bool]] = None, + log_level_forward: Optional[pulumi.Input[_builtins.str]] = None, + log_level_in: Optional[pulumi.Input[_builtins.str]] = None, + log_level_out: Optional[pulumi.Input[_builtins.str]] = None, + ndp: Optional[pulumi.Input[_builtins.bool]] = None, + nf_conntrack_max: Optional[pulumi.Input[_builtins.int]] = None, + nf_conntrack_tcp_timeout_established: Optional[pulumi.Input[_builtins.int]] = None, + nftables: Optional[pulumi.Input[_builtins.bool]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + nosmurfs: Optional[pulumi.Input[_builtins.bool]] = None, + smurf_log_level: Optional[pulumi.Input[_builtins.str]] = None, + tcp_flags_log_level: Optional[pulumi.Input[_builtins.str]] = None) -> 'Firewall': + """ + Get an existing Firewall resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.bool] enabled: Enable host firewall rules (defaults to `true`). + :param pulumi.Input[_builtins.str] log_level_forward: Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_in: Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] log_level_out: Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.bool] ndp: Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + :param pulumi.Input[_builtins.int] nf_conntrack_max: Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + :param pulumi.Input[_builtins.int] nf_conntrack_tcp_timeout_established: Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + :param pulumi.Input[_builtins.bool] nftables: Enable nftables based firewall (tech preview, defaults to `false`). + :param pulumi.Input[_builtins.str] node_name: The cluster node name. + :param pulumi.Input[_builtins.bool] nosmurfs: Enable SMURFS filter (defaults to `true`). + :param pulumi.Input[_builtins.str] smurf_log_level: Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + :param pulumi.Input[_builtins.str] tcp_flags_log_level: Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _FirewallState.__new__(_FirewallState) + + __props__.__dict__["enabled"] = enabled + __props__.__dict__["log_level_forward"] = log_level_forward + __props__.__dict__["log_level_in"] = log_level_in + __props__.__dict__["log_level_out"] = log_level_out + __props__.__dict__["ndp"] = ndp + __props__.__dict__["nf_conntrack_max"] = nf_conntrack_max + __props__.__dict__["nf_conntrack_tcp_timeout_established"] = nf_conntrack_tcp_timeout_established + __props__.__dict__["nftables"] = nftables + __props__.__dict__["node_name"] = node_name + __props__.__dict__["nosmurfs"] = nosmurfs + __props__.__dict__["smurf_log_level"] = smurf_log_level + __props__.__dict__["tcp_flags_log_level"] = tcp_flags_log_level + return Firewall(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def enabled(self) -> pulumi.Output[_builtins.bool]: + """ + Enable host firewall rules (defaults to `true`). + """ + return pulumi.get(self, "enabled") + + @_builtins.property + @pulumi.getter(name="logLevelForward") + def log_level_forward(self) -> pulumi.Output[_builtins.str]: + """ + Log level for forwarded traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_forward") + + @_builtins.property + @pulumi.getter(name="logLevelIn") + def log_level_in(self) -> pulumi.Output[_builtins.str]: + """ + Log level for incoming traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_in") + + @_builtins.property + @pulumi.getter(name="logLevelOut") + def log_level_out(self) -> pulumi.Output[_builtins.str]: + """ + Log level for outgoing traffic. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "log_level_out") + + @_builtins.property + @pulumi.getter + def ndp(self) -> pulumi.Output[_builtins.bool]: + """ + Enable NDP - Neighbor Discovery Protocol (defaults to `true`). + """ + return pulumi.get(self, "ndp") + + @_builtins.property + @pulumi.getter(name="nfConntrackMax") + def nf_conntrack_max(self) -> pulumi.Output[_builtins.int]: + """ + Maximum number of tracked connections (defaults to `262144`). Minimum value is `32768`. + """ + return pulumi.get(self, "nf_conntrack_max") + + @_builtins.property + @pulumi.getter(name="nfConntrackTcpTimeoutEstablished") + def nf_conntrack_tcp_timeout_established(self) -> pulumi.Output[_builtins.int]: + """ + Conntrack established timeout in seconds (defaults to `432000` - 5 days). Minimum value is `7875`. + """ + return pulumi.get(self, "nf_conntrack_tcp_timeout_established") + + @_builtins.property + @pulumi.getter + def nftables(self) -> pulumi.Output[_builtins.bool]: + """ + Enable nftables based firewall (tech preview, defaults to `false`). + """ + return pulumi.get(self, "nftables") + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> pulumi.Output[_builtins.str]: + """ + The cluster node name. + """ + return pulumi.get(self, "node_name") + + @_builtins.property + @pulumi.getter + def nosmurfs(self) -> pulumi.Output[_builtins.bool]: + """ + Enable SMURFS filter (defaults to `true`). + """ + return pulumi.get(self, "nosmurfs") + + @_builtins.property + @pulumi.getter(name="smurfLogLevel") + def smurf_log_level(self) -> pulumi.Output[_builtins.str]: + """ + Log level for SMURFS filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "smurf_log_level") + + @_builtins.property + @pulumi.getter(name="tcpFlagsLogLevel") + def tcp_flags_log_level(self) -> pulumi.Output[_builtins.str]: + """ + Log level for illegal tcp flags filter. Must be one of: `emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`, `nolog` (defaults to `nolog`). + """ + return pulumi.get(self, "tcp_flags_log_level") + diff --git a/sdk/python/pulumi_proxmoxve/outputs.py b/sdk/python/pulumi_proxmoxve/outputs.py index bcf1deaa..fa4c91ca 100644 --- a/sdk/python/pulumi_proxmoxve/outputs.py +++ b/sdk/python/pulumi_proxmoxve/outputs.py @@ -18,7 +18,6 @@ 'HostsEntry', 'GetContainersContainerResult', 'GetContainersFilterResult', - 'GetVm2CloneResult', 'GetVm2CpuResult', 'GetVm2RngResult', 'GetVm2TimeoutsResult', @@ -172,35 +171,6 @@ def regex(self) -> Optional[_builtins.bool]: return pulumi.get(self, "regex") -@pulumi.output_type -class GetVm2CloneResult(dict): - def __init__(__self__, *, - id: _builtins.int, - retries: _builtins.int): - """ - :param _builtins.int id: The ID of the VM to clone. - :param _builtins.int retries: The number of retries to perform when cloning the VM (default: 3). - """ - pulumi.set(__self__, "id", id) - pulumi.set(__self__, "retries", retries) - - @_builtins.property - @pulumi.getter - def id(self) -> _builtins.int: - """ - The ID of the VM to clone. - """ - return pulumi.get(self, "id") - - @_builtins.property - @pulumi.getter - def retries(self) -> _builtins.int: - """ - The number of retries to perform when cloning the VM (default: 3). - """ - return pulumi.get(self, "retries") - - @pulumi.output_type class GetVm2CpuResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_proxmoxve/pulumi-plugin.json b/sdk/python/pulumi_proxmoxve/pulumi-plugin.json index 7c365445..082aed88 100644 --- a/sdk/python/pulumi_proxmoxve/pulumi-plugin.json +++ b/sdk/python/pulumi_proxmoxve/pulumi-plugin.json @@ -1,6 +1,6 @@ { "resource": true, "name": "proxmoxve", - "version": "7.10.0-alpha.1765610037+9fdadc09.dirty", + "version": "7.12.0-alpha.1770476926+eb957559.dirty", "server": "github://api.github.com/muhlba91/pulumi-proxmoxve" } diff --git a/sdk/python/pulumi_proxmoxve/realm/__init__.py b/sdk/python/pulumi_proxmoxve/realm/__init__.py new file mode 100644 index 00000000..a609c9d1 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/realm/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +from .. import _utilities +import typing +# Export this package's modules as members: +from .ldap import * +from .sync import * diff --git a/sdk/python/pulumi_proxmoxve/realm/ldap.py b/sdk/python/pulumi_proxmoxve/realm/ldap.py new file mode 100644 index 00000000..488d44fc --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/realm/ldap.py @@ -0,0 +1,1360 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['LdapArgs', 'Ldap'] + +@pulumi.input_type +class LdapArgs: + def __init__(__self__, *, + base_dn: pulumi.Input[_builtins.str], + realm: pulumi.Input[_builtins.str], + server1: pulumi.Input[_builtins.str], + bind_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_password: Optional[pulumi.Input[_builtins.str]] = None, + ca_path: Optional[pulumi.Input[_builtins.str]] = None, + case_sensitive: Optional[pulumi.Input[_builtins.bool]] = None, + cert_key_path: Optional[pulumi.Input[_builtins.str]] = None, + cert_path: Optional[pulumi.Input[_builtins.str]] = None, + comment: Optional[pulumi.Input[_builtins.str]] = None, + default: Optional[pulumi.Input[_builtins.bool]] = None, + filter: Optional[pulumi.Input[_builtins.str]] = None, + group_classes: Optional[pulumi.Input[_builtins.str]] = None, + group_dn: Optional[pulumi.Input[_builtins.str]] = None, + group_filter: Optional[pulumi.Input[_builtins.str]] = None, + group_name_attr: Optional[pulumi.Input[_builtins.str]] = None, + mode: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + secure: Optional[pulumi.Input[_builtins.bool]] = None, + server2: Optional[pulumi.Input[_builtins.str]] = None, + ssl_version: Optional[pulumi.Input[_builtins.str]] = None, + sync_attributes: Optional[pulumi.Input[_builtins.str]] = None, + sync_defaults_options: Optional[pulumi.Input[_builtins.str]] = None, + user_attr: Optional[pulumi.Input[_builtins.str]] = None, + user_classes: Optional[pulumi.Input[_builtins.str]] = None, + verify: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a Ldap resource. + :param pulumi.Input[_builtins.str] base_dn: LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] realm: Realm identifier (e.g., 'example.com'). + :param pulumi.Input[_builtins.str] server1: Primary LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] bind_dn: LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] bind_password: Password for the bind DN. Note: stored in Proxmox but not returned by API. + :param pulumi.Input[_builtins.str] ca_path: Path to CA certificate file for SSL verification. + :param pulumi.Input[_builtins.bool] case_sensitive: Enable case-sensitive username matching. + :param pulumi.Input[_builtins.str] cert_key_path: Path to client certificate key. + :param pulumi.Input[_builtins.str] cert_path: Path to client certificate for SSL authentication. + :param pulumi.Input[_builtins.str] comment: Description of the realm. + :param pulumi.Input[_builtins.bool] default: Use this realm as the default for login. + :param pulumi.Input[_builtins.str] filter: LDAP filter for user searches. + :param pulumi.Input[_builtins.str] group_classes: LDAP objectClasses for groups (comma-separated). + :param pulumi.Input[_builtins.str] group_dn: LDAP base DN for group searches. + :param pulumi.Input[_builtins.str] group_filter: LDAP filter for group searches. + :param pulumi.Input[_builtins.str] group_name_attr: LDAP attribute representing the group name. + :param pulumi.Input[_builtins.str] mode: LDAP connection mode (ldap, ldaps, ldap+starttls). + :param pulumi.Input[_builtins.int] port: LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + :param pulumi.Input[_builtins.bool] secure: Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + :param pulumi.Input[_builtins.str] server2: Fallback LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] ssl_version: SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + :param pulumi.Input[_builtins.str] sync_attributes: Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + :param pulumi.Input[_builtins.str] sync_defaults_options: Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + :param pulumi.Input[_builtins.str] user_attr: LDAP attribute representing the username. + :param pulumi.Input[_builtins.str] user_classes: LDAP objectClasses for users (comma-separated). + :param pulumi.Input[_builtins.bool] verify: Verify LDAP server SSL certificate. + """ + pulumi.set(__self__, "base_dn", base_dn) + pulumi.set(__self__, "realm", realm) + pulumi.set(__self__, "server1", server1) + if bind_dn is not None: + pulumi.set(__self__, "bind_dn", bind_dn) + if bind_password is not None: + pulumi.set(__self__, "bind_password", bind_password) + if ca_path is not None: + pulumi.set(__self__, "ca_path", ca_path) + if case_sensitive is not None: + pulumi.set(__self__, "case_sensitive", case_sensitive) + if cert_key_path is not None: + pulumi.set(__self__, "cert_key_path", cert_key_path) + if cert_path is not None: + pulumi.set(__self__, "cert_path", cert_path) + if comment is not None: + pulumi.set(__self__, "comment", comment) + if default is not None: + pulumi.set(__self__, "default", default) + if filter is not None: + pulumi.set(__self__, "filter", filter) + if group_classes is not None: + pulumi.set(__self__, "group_classes", group_classes) + if group_dn is not None: + pulumi.set(__self__, "group_dn", group_dn) + if group_filter is not None: + pulumi.set(__self__, "group_filter", group_filter) + if group_name_attr is not None: + pulumi.set(__self__, "group_name_attr", group_name_attr) + if mode is not None: + pulumi.set(__self__, "mode", mode) + if port is not None: + pulumi.set(__self__, "port", port) + if secure is not None: + warnings.warn("""Deprecated by Proxmox: use mode instead.""", DeprecationWarning) + pulumi.log.warn("""secure is deprecated: Deprecated by Proxmox: use mode instead.""") + if secure is not None: + pulumi.set(__self__, "secure", secure) + if server2 is not None: + pulumi.set(__self__, "server2", server2) + if ssl_version is not None: + pulumi.set(__self__, "ssl_version", ssl_version) + if sync_attributes is not None: + pulumi.set(__self__, "sync_attributes", sync_attributes) + if sync_defaults_options is not None: + pulumi.set(__self__, "sync_defaults_options", sync_defaults_options) + if user_attr is not None: + pulumi.set(__self__, "user_attr", user_attr) + if user_classes is not None: + pulumi.set(__self__, "user_classes", user_classes) + if verify is not None: + pulumi.set(__self__, "verify", verify) + + @_builtins.property + @pulumi.getter(name="baseDn") + def base_dn(self) -> pulumi.Input[_builtins.str]: + """ + LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + """ + return pulumi.get(self, "base_dn") + + @base_dn.setter + def base_dn(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "base_dn", value) + + @_builtins.property + @pulumi.getter + def realm(self) -> pulumi.Input[_builtins.str]: + """ + Realm identifier (e.g., 'example.com'). + """ + return pulumi.get(self, "realm") + + @realm.setter + def realm(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "realm", value) + + @_builtins.property + @pulumi.getter + def server1(self) -> pulumi.Input[_builtins.str]: + """ + Primary LDAP server hostname or IP address. + """ + return pulumi.get(self, "server1") + + @server1.setter + def server1(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "server1", value) + + @_builtins.property + @pulumi.getter(name="bindDn") + def bind_dn(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + """ + return pulumi.get(self, "bind_dn") + + @bind_dn.setter + def bind_dn(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bind_dn", value) + + @_builtins.property + @pulumi.getter(name="bindPassword") + def bind_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the bind DN. Note: stored in Proxmox but not returned by API. + """ + return pulumi.get(self, "bind_password") + + @bind_password.setter + def bind_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bind_password", value) + + @_builtins.property + @pulumi.getter(name="caPath") + def ca_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to CA certificate file for SSL verification. + """ + return pulumi.get(self, "ca_path") + + @ca_path.setter + def ca_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ca_path", value) + + @_builtins.property + @pulumi.getter(name="caseSensitive") + def case_sensitive(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable case-sensitive username matching. + """ + return pulumi.get(self, "case_sensitive") + + @case_sensitive.setter + def case_sensitive(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "case_sensitive", value) + + @_builtins.property + @pulumi.getter(name="certKeyPath") + def cert_key_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to client certificate key. + """ + return pulumi.get(self, "cert_key_path") + + @cert_key_path.setter + def cert_key_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cert_key_path", value) + + @_builtins.property + @pulumi.getter(name="certPath") + def cert_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to client certificate for SSL authentication. + """ + return pulumi.get(self, "cert_path") + + @cert_path.setter + def cert_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cert_path", value) + + @_builtins.property + @pulumi.getter + def comment(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Description of the realm. + """ + return pulumi.get(self, "comment") + + @comment.setter + def comment(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "comment", value) + + @_builtins.property + @pulumi.getter + def default(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Use this realm as the default for login. + """ + return pulumi.get(self, "default") + + @default.setter + def default(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "default", value) + + @_builtins.property + @pulumi.getter + def filter(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP filter for user searches. + """ + return pulumi.get(self, "filter") + + @filter.setter + def filter(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "filter", value) + + @_builtins.property + @pulumi.getter(name="groupClasses") + def group_classes(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP objectClasses for groups (comma-separated). + """ + return pulumi.get(self, "group_classes") + + @group_classes.setter + def group_classes(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_classes", value) + + @_builtins.property + @pulumi.getter(name="groupDn") + def group_dn(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP base DN for group searches. + """ + return pulumi.get(self, "group_dn") + + @group_dn.setter + def group_dn(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_dn", value) + + @_builtins.property + @pulumi.getter(name="groupFilter") + def group_filter(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP filter for group searches. + """ + return pulumi.get(self, "group_filter") + + @group_filter.setter + def group_filter(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_filter", value) + + @_builtins.property + @pulumi.getter(name="groupNameAttr") + def group_name_attr(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP attribute representing the group name. + """ + return pulumi.get(self, "group_name_attr") + + @group_name_attr.setter + def group_name_attr(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_name_attr", value) + + @_builtins.property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP connection mode (ldap, ldaps, ldap+starttls). + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode", value) + + @_builtins.property + @pulumi.getter + def port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + """ + return pulumi.get(self, "port") + + @port.setter + def port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "port", value) + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use mode instead.""") + def secure(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + """ + return pulumi.get(self, "secure") + + @secure.setter + def secure(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "secure", value) + + @_builtins.property + @pulumi.getter + def server2(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Fallback LDAP server hostname or IP address. + """ + return pulumi.get(self, "server2") + + @server2.setter + def server2(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server2", value) + + @_builtins.property + @pulumi.getter(name="sslVersion") + def ssl_version(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + """ + return pulumi.get(self, "ssl_version") + + @ssl_version.setter + def ssl_version(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ssl_version", value) + + @_builtins.property + @pulumi.getter(name="syncAttributes") + def sync_attributes(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + """ + return pulumi.get(self, "sync_attributes") + + @sync_attributes.setter + def sync_attributes(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "sync_attributes", value) + + @_builtins.property + @pulumi.getter(name="syncDefaultsOptions") + def sync_defaults_options(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + """ + return pulumi.get(self, "sync_defaults_options") + + @sync_defaults_options.setter + def sync_defaults_options(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "sync_defaults_options", value) + + @_builtins.property + @pulumi.getter(name="userAttr") + def user_attr(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP attribute representing the username. + """ + return pulumi.get(self, "user_attr") + + @user_attr.setter + def user_attr(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "user_attr", value) + + @_builtins.property + @pulumi.getter(name="userClasses") + def user_classes(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP objectClasses for users (comma-separated). + """ + return pulumi.get(self, "user_classes") + + @user_classes.setter + def user_classes(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "user_classes", value) + + @_builtins.property + @pulumi.getter + def verify(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Verify LDAP server SSL certificate. + """ + return pulumi.get(self, "verify") + + @verify.setter + def verify(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "verify", value) + + +@pulumi.input_type +class _LdapState: + def __init__(__self__, *, + base_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_password: Optional[pulumi.Input[_builtins.str]] = None, + ca_path: Optional[pulumi.Input[_builtins.str]] = None, + case_sensitive: Optional[pulumi.Input[_builtins.bool]] = None, + cert_key_path: Optional[pulumi.Input[_builtins.str]] = None, + cert_path: Optional[pulumi.Input[_builtins.str]] = None, + comment: Optional[pulumi.Input[_builtins.str]] = None, + default: Optional[pulumi.Input[_builtins.bool]] = None, + filter: Optional[pulumi.Input[_builtins.str]] = None, + group_classes: Optional[pulumi.Input[_builtins.str]] = None, + group_dn: Optional[pulumi.Input[_builtins.str]] = None, + group_filter: Optional[pulumi.Input[_builtins.str]] = None, + group_name_attr: Optional[pulumi.Input[_builtins.str]] = None, + mode: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + secure: Optional[pulumi.Input[_builtins.bool]] = None, + server1: Optional[pulumi.Input[_builtins.str]] = None, + server2: Optional[pulumi.Input[_builtins.str]] = None, + ssl_version: Optional[pulumi.Input[_builtins.str]] = None, + sync_attributes: Optional[pulumi.Input[_builtins.str]] = None, + sync_defaults_options: Optional[pulumi.Input[_builtins.str]] = None, + user_attr: Optional[pulumi.Input[_builtins.str]] = None, + user_classes: Optional[pulumi.Input[_builtins.str]] = None, + verify: Optional[pulumi.Input[_builtins.bool]] = None): + """ + Input properties used for looking up and filtering Ldap resources. + :param pulumi.Input[_builtins.str] base_dn: LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] bind_dn: LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] bind_password: Password for the bind DN. Note: stored in Proxmox but not returned by API. + :param pulumi.Input[_builtins.str] ca_path: Path to CA certificate file for SSL verification. + :param pulumi.Input[_builtins.bool] case_sensitive: Enable case-sensitive username matching. + :param pulumi.Input[_builtins.str] cert_key_path: Path to client certificate key. + :param pulumi.Input[_builtins.str] cert_path: Path to client certificate for SSL authentication. + :param pulumi.Input[_builtins.str] comment: Description of the realm. + :param pulumi.Input[_builtins.bool] default: Use this realm as the default for login. + :param pulumi.Input[_builtins.str] filter: LDAP filter for user searches. + :param pulumi.Input[_builtins.str] group_classes: LDAP objectClasses for groups (comma-separated). + :param pulumi.Input[_builtins.str] group_dn: LDAP base DN for group searches. + :param pulumi.Input[_builtins.str] group_filter: LDAP filter for group searches. + :param pulumi.Input[_builtins.str] group_name_attr: LDAP attribute representing the group name. + :param pulumi.Input[_builtins.str] mode: LDAP connection mode (ldap, ldaps, ldap+starttls). + :param pulumi.Input[_builtins.int] port: LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + :param pulumi.Input[_builtins.str] realm: Realm identifier (e.g., 'example.com'). + :param pulumi.Input[_builtins.bool] secure: Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + :param pulumi.Input[_builtins.str] server1: Primary LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] server2: Fallback LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] ssl_version: SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + :param pulumi.Input[_builtins.str] sync_attributes: Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + :param pulumi.Input[_builtins.str] sync_defaults_options: Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + :param pulumi.Input[_builtins.str] user_attr: LDAP attribute representing the username. + :param pulumi.Input[_builtins.str] user_classes: LDAP objectClasses for users (comma-separated). + :param pulumi.Input[_builtins.bool] verify: Verify LDAP server SSL certificate. + """ + if base_dn is not None: + pulumi.set(__self__, "base_dn", base_dn) + if bind_dn is not None: + pulumi.set(__self__, "bind_dn", bind_dn) + if bind_password is not None: + pulumi.set(__self__, "bind_password", bind_password) + if ca_path is not None: + pulumi.set(__self__, "ca_path", ca_path) + if case_sensitive is not None: + pulumi.set(__self__, "case_sensitive", case_sensitive) + if cert_key_path is not None: + pulumi.set(__self__, "cert_key_path", cert_key_path) + if cert_path is not None: + pulumi.set(__self__, "cert_path", cert_path) + if comment is not None: + pulumi.set(__self__, "comment", comment) + if default is not None: + pulumi.set(__self__, "default", default) + if filter is not None: + pulumi.set(__self__, "filter", filter) + if group_classes is not None: + pulumi.set(__self__, "group_classes", group_classes) + if group_dn is not None: + pulumi.set(__self__, "group_dn", group_dn) + if group_filter is not None: + pulumi.set(__self__, "group_filter", group_filter) + if group_name_attr is not None: + pulumi.set(__self__, "group_name_attr", group_name_attr) + if mode is not None: + pulumi.set(__self__, "mode", mode) + if port is not None: + pulumi.set(__self__, "port", port) + if realm is not None: + pulumi.set(__self__, "realm", realm) + if secure is not None: + warnings.warn("""Deprecated by Proxmox: use mode instead.""", DeprecationWarning) + pulumi.log.warn("""secure is deprecated: Deprecated by Proxmox: use mode instead.""") + if secure is not None: + pulumi.set(__self__, "secure", secure) + if server1 is not None: + pulumi.set(__self__, "server1", server1) + if server2 is not None: + pulumi.set(__self__, "server2", server2) + if ssl_version is not None: + pulumi.set(__self__, "ssl_version", ssl_version) + if sync_attributes is not None: + pulumi.set(__self__, "sync_attributes", sync_attributes) + if sync_defaults_options is not None: + pulumi.set(__self__, "sync_defaults_options", sync_defaults_options) + if user_attr is not None: + pulumi.set(__self__, "user_attr", user_attr) + if user_classes is not None: + pulumi.set(__self__, "user_classes", user_classes) + if verify is not None: + pulumi.set(__self__, "verify", verify) + + @_builtins.property + @pulumi.getter(name="baseDn") + def base_dn(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + """ + return pulumi.get(self, "base_dn") + + @base_dn.setter + def base_dn(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "base_dn", value) + + @_builtins.property + @pulumi.getter(name="bindDn") + def bind_dn(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + """ + return pulumi.get(self, "bind_dn") + + @bind_dn.setter + def bind_dn(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bind_dn", value) + + @_builtins.property + @pulumi.getter(name="bindPassword") + def bind_password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Password for the bind DN. Note: stored in Proxmox but not returned by API. + """ + return pulumi.get(self, "bind_password") + + @bind_password.setter + def bind_password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bind_password", value) + + @_builtins.property + @pulumi.getter(name="caPath") + def ca_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to CA certificate file for SSL verification. + """ + return pulumi.get(self, "ca_path") + + @ca_path.setter + def ca_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ca_path", value) + + @_builtins.property + @pulumi.getter(name="caseSensitive") + def case_sensitive(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable case-sensitive username matching. + """ + return pulumi.get(self, "case_sensitive") + + @case_sensitive.setter + def case_sensitive(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "case_sensitive", value) + + @_builtins.property + @pulumi.getter(name="certKeyPath") + def cert_key_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to client certificate key. + """ + return pulumi.get(self, "cert_key_path") + + @cert_key_path.setter + def cert_key_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cert_key_path", value) + + @_builtins.property + @pulumi.getter(name="certPath") + def cert_path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Path to client certificate for SSL authentication. + """ + return pulumi.get(self, "cert_path") + + @cert_path.setter + def cert_path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cert_path", value) + + @_builtins.property + @pulumi.getter + def comment(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Description of the realm. + """ + return pulumi.get(self, "comment") + + @comment.setter + def comment(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "comment", value) + + @_builtins.property + @pulumi.getter + def default(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Use this realm as the default for login. + """ + return pulumi.get(self, "default") + + @default.setter + def default(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "default", value) + + @_builtins.property + @pulumi.getter + def filter(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP filter for user searches. + """ + return pulumi.get(self, "filter") + + @filter.setter + def filter(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "filter", value) + + @_builtins.property + @pulumi.getter(name="groupClasses") + def group_classes(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP objectClasses for groups (comma-separated). + """ + return pulumi.get(self, "group_classes") + + @group_classes.setter + def group_classes(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_classes", value) + + @_builtins.property + @pulumi.getter(name="groupDn") + def group_dn(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP base DN for group searches. + """ + return pulumi.get(self, "group_dn") + + @group_dn.setter + def group_dn(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_dn", value) + + @_builtins.property + @pulumi.getter(name="groupFilter") + def group_filter(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP filter for group searches. + """ + return pulumi.get(self, "group_filter") + + @group_filter.setter + def group_filter(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_filter", value) + + @_builtins.property + @pulumi.getter(name="groupNameAttr") + def group_name_attr(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP attribute representing the group name. + """ + return pulumi.get(self, "group_name_attr") + + @group_name_attr.setter + def group_name_attr(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "group_name_attr", value) + + @_builtins.property + @pulumi.getter + def mode(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP connection mode (ldap, ldaps, ldap+starttls). + """ + return pulumi.get(self, "mode") + + @mode.setter + def mode(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mode", value) + + @_builtins.property + @pulumi.getter + def port(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + """ + return pulumi.get(self, "port") + + @port.setter + def port(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "port", value) + + @_builtins.property + @pulumi.getter + def realm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Realm identifier (e.g., 'example.com'). + """ + return pulumi.get(self, "realm") + + @realm.setter + def realm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "realm", value) + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use mode instead.""") + def secure(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + """ + return pulumi.get(self, "secure") + + @secure.setter + def secure(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "secure", value) + + @_builtins.property + @pulumi.getter + def server1(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Primary LDAP server hostname or IP address. + """ + return pulumi.get(self, "server1") + + @server1.setter + def server1(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server1", value) + + @_builtins.property + @pulumi.getter + def server2(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Fallback LDAP server hostname or IP address. + """ + return pulumi.get(self, "server2") + + @server2.setter + def server2(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server2", value) + + @_builtins.property + @pulumi.getter(name="sslVersion") + def ssl_version(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + """ + return pulumi.get(self, "ssl_version") + + @ssl_version.setter + def ssl_version(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ssl_version", value) + + @_builtins.property + @pulumi.getter(name="syncAttributes") + def sync_attributes(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + """ + return pulumi.get(self, "sync_attributes") + + @sync_attributes.setter + def sync_attributes(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "sync_attributes", value) + + @_builtins.property + @pulumi.getter(name="syncDefaultsOptions") + def sync_defaults_options(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + """ + return pulumi.get(self, "sync_defaults_options") + + @sync_defaults_options.setter + def sync_defaults_options(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "sync_defaults_options", value) + + @_builtins.property + @pulumi.getter(name="userAttr") + def user_attr(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP attribute representing the username. + """ + return pulumi.get(self, "user_attr") + + @user_attr.setter + def user_attr(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "user_attr", value) + + @_builtins.property + @pulumi.getter(name="userClasses") + def user_classes(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + LDAP objectClasses for users (comma-separated). + """ + return pulumi.get(self, "user_classes") + + @user_classes.setter + def user_classes(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "user_classes", value) + + @_builtins.property + @pulumi.getter + def verify(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Verify LDAP server SSL certificate. + """ + return pulumi.get(self, "verify") + + @verify.setter + def verify(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "verify", value) + + +@pulumi.type_token("proxmoxve:Realm/ldap:Ldap") +class Ldap(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + base_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_password: Optional[pulumi.Input[_builtins.str]] = None, + ca_path: Optional[pulumi.Input[_builtins.str]] = None, + case_sensitive: Optional[pulumi.Input[_builtins.bool]] = None, + cert_key_path: Optional[pulumi.Input[_builtins.str]] = None, + cert_path: Optional[pulumi.Input[_builtins.str]] = None, + comment: Optional[pulumi.Input[_builtins.str]] = None, + default: Optional[pulumi.Input[_builtins.bool]] = None, + filter: Optional[pulumi.Input[_builtins.str]] = None, + group_classes: Optional[pulumi.Input[_builtins.str]] = None, + group_dn: Optional[pulumi.Input[_builtins.str]] = None, + group_filter: Optional[pulumi.Input[_builtins.str]] = None, + group_name_attr: Optional[pulumi.Input[_builtins.str]] = None, + mode: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + secure: Optional[pulumi.Input[_builtins.bool]] = None, + server1: Optional[pulumi.Input[_builtins.str]] = None, + server2: Optional[pulumi.Input[_builtins.str]] = None, + ssl_version: Optional[pulumi.Input[_builtins.str]] = None, + sync_attributes: Optional[pulumi.Input[_builtins.str]] = None, + sync_defaults_options: Optional[pulumi.Input[_builtins.str]] = None, + user_attr: Optional[pulumi.Input[_builtins.str]] = None, + user_classes: Optional[pulumi.Input[_builtins.str]] = None, + verify: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + """ + ## Import + + #!/usr/bin/env sh + + LDAP realms can be imported using the realm identifier, e.g.: + + ```sh + $ pulumi import proxmoxve:Realm/ldap:Ldap example example.com + ``` + + -> When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] base_dn: LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] bind_dn: LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] bind_password: Password for the bind DN. Note: stored in Proxmox but not returned by API. + :param pulumi.Input[_builtins.str] ca_path: Path to CA certificate file for SSL verification. + :param pulumi.Input[_builtins.bool] case_sensitive: Enable case-sensitive username matching. + :param pulumi.Input[_builtins.str] cert_key_path: Path to client certificate key. + :param pulumi.Input[_builtins.str] cert_path: Path to client certificate for SSL authentication. + :param pulumi.Input[_builtins.str] comment: Description of the realm. + :param pulumi.Input[_builtins.bool] default: Use this realm as the default for login. + :param pulumi.Input[_builtins.str] filter: LDAP filter for user searches. + :param pulumi.Input[_builtins.str] group_classes: LDAP objectClasses for groups (comma-separated). + :param pulumi.Input[_builtins.str] group_dn: LDAP base DN for group searches. + :param pulumi.Input[_builtins.str] group_filter: LDAP filter for group searches. + :param pulumi.Input[_builtins.str] group_name_attr: LDAP attribute representing the group name. + :param pulumi.Input[_builtins.str] mode: LDAP connection mode (ldap, ldaps, ldap+starttls). + :param pulumi.Input[_builtins.int] port: LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + :param pulumi.Input[_builtins.str] realm: Realm identifier (e.g., 'example.com'). + :param pulumi.Input[_builtins.bool] secure: Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + :param pulumi.Input[_builtins.str] server1: Primary LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] server2: Fallback LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] ssl_version: SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + :param pulumi.Input[_builtins.str] sync_attributes: Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + :param pulumi.Input[_builtins.str] sync_defaults_options: Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + :param pulumi.Input[_builtins.str] user_attr: LDAP attribute representing the username. + :param pulumi.Input[_builtins.str] user_classes: LDAP objectClasses for users (comma-separated). + :param pulumi.Input[_builtins.bool] verify: Verify LDAP server SSL certificate. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: LdapArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Import + + #!/usr/bin/env sh + + LDAP realms can be imported using the realm identifier, e.g.: + + ```sh + $ pulumi import proxmoxve:Realm/ldap:Ldap example example.com + ``` + + -> When importing, the `bind_password` attribute cannot be imported since it's not returned by the Proxmox API. You'll need to set this attribute in your Terraform configuration after the import to manage it with Terraform. + + :param str resource_name: The name of the resource. + :param LdapArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(LdapArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + base_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_password: Optional[pulumi.Input[_builtins.str]] = None, + ca_path: Optional[pulumi.Input[_builtins.str]] = None, + case_sensitive: Optional[pulumi.Input[_builtins.bool]] = None, + cert_key_path: Optional[pulumi.Input[_builtins.str]] = None, + cert_path: Optional[pulumi.Input[_builtins.str]] = None, + comment: Optional[pulumi.Input[_builtins.str]] = None, + default: Optional[pulumi.Input[_builtins.bool]] = None, + filter: Optional[pulumi.Input[_builtins.str]] = None, + group_classes: Optional[pulumi.Input[_builtins.str]] = None, + group_dn: Optional[pulumi.Input[_builtins.str]] = None, + group_filter: Optional[pulumi.Input[_builtins.str]] = None, + group_name_attr: Optional[pulumi.Input[_builtins.str]] = None, + mode: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + secure: Optional[pulumi.Input[_builtins.bool]] = None, + server1: Optional[pulumi.Input[_builtins.str]] = None, + server2: Optional[pulumi.Input[_builtins.str]] = None, + ssl_version: Optional[pulumi.Input[_builtins.str]] = None, + sync_attributes: Optional[pulumi.Input[_builtins.str]] = None, + sync_defaults_options: Optional[pulumi.Input[_builtins.str]] = None, + user_attr: Optional[pulumi.Input[_builtins.str]] = None, + user_classes: Optional[pulumi.Input[_builtins.str]] = None, + verify: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = LdapArgs.__new__(LdapArgs) + + if base_dn is None and not opts.urn: + raise TypeError("Missing required property 'base_dn'") + __props__.__dict__["base_dn"] = base_dn + __props__.__dict__["bind_dn"] = bind_dn + __props__.__dict__["bind_password"] = None if bind_password is None else pulumi.Output.secret(bind_password) + __props__.__dict__["ca_path"] = ca_path + __props__.__dict__["case_sensitive"] = case_sensitive + __props__.__dict__["cert_key_path"] = cert_key_path + __props__.__dict__["cert_path"] = cert_path + __props__.__dict__["comment"] = comment + __props__.__dict__["default"] = default + __props__.__dict__["filter"] = filter + __props__.__dict__["group_classes"] = group_classes + __props__.__dict__["group_dn"] = group_dn + __props__.__dict__["group_filter"] = group_filter + __props__.__dict__["group_name_attr"] = group_name_attr + __props__.__dict__["mode"] = mode + __props__.__dict__["port"] = port + if realm is None and not opts.urn: + raise TypeError("Missing required property 'realm'") + __props__.__dict__["realm"] = realm + __props__.__dict__["secure"] = secure + if server1 is None and not opts.urn: + raise TypeError("Missing required property 'server1'") + __props__.__dict__["server1"] = server1 + __props__.__dict__["server2"] = server2 + __props__.__dict__["ssl_version"] = ssl_version + __props__.__dict__["sync_attributes"] = sync_attributes + __props__.__dict__["sync_defaults_options"] = sync_defaults_options + __props__.__dict__["user_attr"] = user_attr + __props__.__dict__["user_classes"] = user_classes + __props__.__dict__["verify"] = verify + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["bindPassword"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Ldap, __self__).__init__( + 'proxmoxve:Realm/ldap:Ldap', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + base_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_dn: Optional[pulumi.Input[_builtins.str]] = None, + bind_password: Optional[pulumi.Input[_builtins.str]] = None, + ca_path: Optional[pulumi.Input[_builtins.str]] = None, + case_sensitive: Optional[pulumi.Input[_builtins.bool]] = None, + cert_key_path: Optional[pulumi.Input[_builtins.str]] = None, + cert_path: Optional[pulumi.Input[_builtins.str]] = None, + comment: Optional[pulumi.Input[_builtins.str]] = None, + default: Optional[pulumi.Input[_builtins.bool]] = None, + filter: Optional[pulumi.Input[_builtins.str]] = None, + group_classes: Optional[pulumi.Input[_builtins.str]] = None, + group_dn: Optional[pulumi.Input[_builtins.str]] = None, + group_filter: Optional[pulumi.Input[_builtins.str]] = None, + group_name_attr: Optional[pulumi.Input[_builtins.str]] = None, + mode: Optional[pulumi.Input[_builtins.str]] = None, + port: Optional[pulumi.Input[_builtins.int]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + secure: Optional[pulumi.Input[_builtins.bool]] = None, + server1: Optional[pulumi.Input[_builtins.str]] = None, + server2: Optional[pulumi.Input[_builtins.str]] = None, + ssl_version: Optional[pulumi.Input[_builtins.str]] = None, + sync_attributes: Optional[pulumi.Input[_builtins.str]] = None, + sync_defaults_options: Optional[pulumi.Input[_builtins.str]] = None, + user_attr: Optional[pulumi.Input[_builtins.str]] = None, + user_classes: Optional[pulumi.Input[_builtins.str]] = None, + verify: Optional[pulumi.Input[_builtins.bool]] = None) -> 'Ldap': + """ + Get an existing Ldap resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] base_dn: LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] bind_dn: LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + :param pulumi.Input[_builtins.str] bind_password: Password for the bind DN. Note: stored in Proxmox but not returned by API. + :param pulumi.Input[_builtins.str] ca_path: Path to CA certificate file for SSL verification. + :param pulumi.Input[_builtins.bool] case_sensitive: Enable case-sensitive username matching. + :param pulumi.Input[_builtins.str] cert_key_path: Path to client certificate key. + :param pulumi.Input[_builtins.str] cert_path: Path to client certificate for SSL authentication. + :param pulumi.Input[_builtins.str] comment: Description of the realm. + :param pulumi.Input[_builtins.bool] default: Use this realm as the default for login. + :param pulumi.Input[_builtins.str] filter: LDAP filter for user searches. + :param pulumi.Input[_builtins.str] group_classes: LDAP objectClasses for groups (comma-separated). + :param pulumi.Input[_builtins.str] group_dn: LDAP base DN for group searches. + :param pulumi.Input[_builtins.str] group_filter: LDAP filter for group searches. + :param pulumi.Input[_builtins.str] group_name_attr: LDAP attribute representing the group name. + :param pulumi.Input[_builtins.str] mode: LDAP connection mode (ldap, ldaps, ldap+starttls). + :param pulumi.Input[_builtins.int] port: LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + :param pulumi.Input[_builtins.str] realm: Realm identifier (e.g., 'example.com'). + :param pulumi.Input[_builtins.bool] secure: Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + :param pulumi.Input[_builtins.str] server1: Primary LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] server2: Fallback LDAP server hostname or IP address. + :param pulumi.Input[_builtins.str] ssl_version: SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + :param pulumi.Input[_builtins.str] sync_attributes: Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + :param pulumi.Input[_builtins.str] sync_defaults_options: Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + :param pulumi.Input[_builtins.str] user_attr: LDAP attribute representing the username. + :param pulumi.Input[_builtins.str] user_classes: LDAP objectClasses for users (comma-separated). + :param pulumi.Input[_builtins.bool] verify: Verify LDAP server SSL certificate. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _LdapState.__new__(_LdapState) + + __props__.__dict__["base_dn"] = base_dn + __props__.__dict__["bind_dn"] = bind_dn + __props__.__dict__["bind_password"] = bind_password + __props__.__dict__["ca_path"] = ca_path + __props__.__dict__["case_sensitive"] = case_sensitive + __props__.__dict__["cert_key_path"] = cert_key_path + __props__.__dict__["cert_path"] = cert_path + __props__.__dict__["comment"] = comment + __props__.__dict__["default"] = default + __props__.__dict__["filter"] = filter + __props__.__dict__["group_classes"] = group_classes + __props__.__dict__["group_dn"] = group_dn + __props__.__dict__["group_filter"] = group_filter + __props__.__dict__["group_name_attr"] = group_name_attr + __props__.__dict__["mode"] = mode + __props__.__dict__["port"] = port + __props__.__dict__["realm"] = realm + __props__.__dict__["secure"] = secure + __props__.__dict__["server1"] = server1 + __props__.__dict__["server2"] = server2 + __props__.__dict__["ssl_version"] = ssl_version + __props__.__dict__["sync_attributes"] = sync_attributes + __props__.__dict__["sync_defaults_options"] = sync_defaults_options + __props__.__dict__["user_attr"] = user_attr + __props__.__dict__["user_classes"] = user_classes + __props__.__dict__["verify"] = verify + return Ldap(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="baseDn") + def base_dn(self) -> pulumi.Output[_builtins.str]: + """ + LDAP base DN for user searches (e.g., 'ou=users,dc=example,dc=com'). + """ + return pulumi.get(self, "base_dn") + + @_builtins.property + @pulumi.getter(name="bindDn") + def bind_dn(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP bind DN for authentication (e.g., 'cn=admin,dc=example,dc=com'). + """ + return pulumi.get(self, "bind_dn") + + @_builtins.property + @pulumi.getter(name="bindPassword") + def bind_password(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Password for the bind DN. Note: stored in Proxmox but not returned by API. + """ + return pulumi.get(self, "bind_password") + + @_builtins.property + @pulumi.getter(name="caPath") + def ca_path(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Path to CA certificate file for SSL verification. + """ + return pulumi.get(self, "ca_path") + + @_builtins.property + @pulumi.getter(name="caseSensitive") + def case_sensitive(self) -> pulumi.Output[_builtins.bool]: + """ + Enable case-sensitive username matching. + """ + return pulumi.get(self, "case_sensitive") + + @_builtins.property + @pulumi.getter(name="certKeyPath") + def cert_key_path(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Path to client certificate key. + """ + return pulumi.get(self, "cert_key_path") + + @_builtins.property + @pulumi.getter(name="certPath") + def cert_path(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Path to client certificate for SSL authentication. + """ + return pulumi.get(self, "cert_path") + + @_builtins.property + @pulumi.getter + def comment(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Description of the realm. + """ + return pulumi.get(self, "comment") + + @_builtins.property + @pulumi.getter + def default(self) -> pulumi.Output[_builtins.bool]: + """ + Use this realm as the default for login. + """ + return pulumi.get(self, "default") + + @_builtins.property + @pulumi.getter + def filter(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP filter for user searches. + """ + return pulumi.get(self, "filter") + + @_builtins.property + @pulumi.getter(name="groupClasses") + def group_classes(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP objectClasses for groups (comma-separated). + """ + return pulumi.get(self, "group_classes") + + @_builtins.property + @pulumi.getter(name="groupDn") + def group_dn(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP base DN for group searches. + """ + return pulumi.get(self, "group_dn") + + @_builtins.property + @pulumi.getter(name="groupFilter") + def group_filter(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP filter for group searches. + """ + return pulumi.get(self, "group_filter") + + @_builtins.property + @pulumi.getter(name="groupNameAttr") + def group_name_attr(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP attribute representing the group name. + """ + return pulumi.get(self, "group_name_attr") + + @_builtins.property + @pulumi.getter + def mode(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP connection mode (ldap, ldaps, ldap+starttls). + """ + return pulumi.get(self, "mode") + + @_builtins.property + @pulumi.getter + def port(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + LDAP server port. Default: 389 (LDAP) or 636 (LDAPS). + """ + return pulumi.get(self, "port") + + @_builtins.property + @pulumi.getter + def realm(self) -> pulumi.Output[_builtins.str]: + """ + Realm identifier (e.g., 'example.com'). + """ + return pulumi.get(self, "realm") + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use mode instead.""") + def secure(self) -> pulumi.Output[_builtins.bool]: + """ + Use LDAPS (LDAP over SSL/TLS) instead of plain LDAP. + """ + return pulumi.get(self, "secure") + + @_builtins.property + @pulumi.getter + def server1(self) -> pulumi.Output[_builtins.str]: + """ + Primary LDAP server hostname or IP address. + """ + return pulumi.get(self, "server1") + + @_builtins.property + @pulumi.getter + def server2(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Fallback LDAP server hostname or IP address. + """ + return pulumi.get(self, "server2") + + @_builtins.property + @pulumi.getter(name="sslVersion") + def ssl_version(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + SSL/TLS version (tlsv1, tlsv1*1, tlsv1*2, tlsv1_3). + """ + return pulumi.get(self, "ssl_version") + + @_builtins.property + @pulumi.getter(name="syncAttributes") + def sync_attributes(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Comma-separated list of attributes to sync (e.g., 'email=mail,firstname=givenName'). + """ + return pulumi.get(self, "sync_attributes") + + @_builtins.property + @pulumi.getter(name="syncDefaultsOptions") + def sync_defaults_options(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Default synchronization options. Format: comma-separated 'key=value' pairs. Valid keys: 'scope' (users/groups/both), 'enable-new' (1/0), 'remove-vanished' (semicolon-separated: entry/acl/properties), 'full' (deprecated), 'purge' (deprecated). Example: 'scope=users,enable-new=1,remove-vanished=entry;acl'. + """ + return pulumi.get(self, "sync_defaults_options") + + @_builtins.property + @pulumi.getter(name="userAttr") + def user_attr(self) -> pulumi.Output[_builtins.str]: + """ + LDAP attribute representing the username. + """ + return pulumi.get(self, "user_attr") + + @_builtins.property + @pulumi.getter(name="userClasses") + def user_classes(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + LDAP objectClasses for users (comma-separated). + """ + return pulumi.get(self, "user_classes") + + @_builtins.property + @pulumi.getter + def verify(self) -> pulumi.Output[_builtins.bool]: + """ + Verify LDAP server SSL certificate. + """ + return pulumi.get(self, "verify") + diff --git a/sdk/python/pulumi_proxmoxve/realm/sync.py b/sdk/python/pulumi_proxmoxve/realm/sync.py new file mode 100644 index 00000000..484527f6 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/realm/sync.py @@ -0,0 +1,476 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['SyncArgs', 'Sync'] + +@pulumi.input_type +class SyncArgs: + def __init__(__self__, *, + realm: pulumi.Input[_builtins.str], + dry_run: Optional[pulumi.Input[_builtins.bool]] = None, + enable_new: Optional[pulumi.Input[_builtins.bool]] = None, + full: Optional[pulumi.Input[_builtins.bool]] = None, + purge: Optional[pulumi.Input[_builtins.bool]] = None, + remove_vanished: Optional[pulumi.Input[_builtins.str]] = None, + scope: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Sync resource. + :param pulumi.Input[_builtins.str] realm: Name of the realm to synchronize. + :param pulumi.Input[_builtins.bool] dry_run: Only simulate the sync without applying changes. + :param pulumi.Input[_builtins.bool] enable_new: Enable newly synced users. + :param pulumi.Input[_builtins.bool] full: Perform a full sync. + :param pulumi.Input[_builtins.bool] purge: Purge removed entries. + :param pulumi.Input[_builtins.str] remove_vanished: How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + :param pulumi.Input[_builtins.str] scope: Sync scope: users, groups, or both. + """ + pulumi.set(__self__, "realm", realm) + if dry_run is not None: + pulumi.set(__self__, "dry_run", dry_run) + if enable_new is not None: + pulumi.set(__self__, "enable_new", enable_new) + if full is not None: + warnings.warn("""Deprecated by Proxmox: use remove_vanished instead.""", DeprecationWarning) + pulumi.log.warn("""full is deprecated: Deprecated by Proxmox: use remove_vanished instead.""") + if full is not None: + pulumi.set(__self__, "full", full) + if purge is not None: + warnings.warn("""Deprecated by Proxmox: use remove_vanished instead.""", DeprecationWarning) + pulumi.log.warn("""purge is deprecated: Deprecated by Proxmox: use remove_vanished instead.""") + if purge is not None: + pulumi.set(__self__, "purge", purge) + if remove_vanished is not None: + pulumi.set(__self__, "remove_vanished", remove_vanished) + if scope is not None: + pulumi.set(__self__, "scope", scope) + + @_builtins.property + @pulumi.getter + def realm(self) -> pulumi.Input[_builtins.str]: + """ + Name of the realm to synchronize. + """ + return pulumi.get(self, "realm") + + @realm.setter + def realm(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "realm", value) + + @_builtins.property + @pulumi.getter(name="dryRun") + def dry_run(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Only simulate the sync without applying changes. + """ + return pulumi.get(self, "dry_run") + + @dry_run.setter + def dry_run(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "dry_run", value) + + @_builtins.property + @pulumi.getter(name="enableNew") + def enable_new(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable newly synced users. + """ + return pulumi.get(self, "enable_new") + + @enable_new.setter + def enable_new(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enable_new", value) + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use remove_vanished instead.""") + def full(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Perform a full sync. + """ + return pulumi.get(self, "full") + + @full.setter + def full(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "full", value) + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use remove_vanished instead.""") + def purge(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Purge removed entries. + """ + return pulumi.get(self, "purge") + + @purge.setter + def purge(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "purge", value) + + @_builtins.property + @pulumi.getter(name="removeVanished") + def remove_vanished(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + """ + return pulumi.get(self, "remove_vanished") + + @remove_vanished.setter + def remove_vanished(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "remove_vanished", value) + + @_builtins.property + @pulumi.getter + def scope(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Sync scope: users, groups, or both. + """ + return pulumi.get(self, "scope") + + @scope.setter + def scope(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "scope", value) + + +@pulumi.input_type +class _SyncState: + def __init__(__self__, *, + dry_run: Optional[pulumi.Input[_builtins.bool]] = None, + enable_new: Optional[pulumi.Input[_builtins.bool]] = None, + full: Optional[pulumi.Input[_builtins.bool]] = None, + purge: Optional[pulumi.Input[_builtins.bool]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + remove_vanished: Optional[pulumi.Input[_builtins.str]] = None, + scope: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Sync resources. + :param pulumi.Input[_builtins.bool] dry_run: Only simulate the sync without applying changes. + :param pulumi.Input[_builtins.bool] enable_new: Enable newly synced users. + :param pulumi.Input[_builtins.bool] full: Perform a full sync. + :param pulumi.Input[_builtins.bool] purge: Purge removed entries. + :param pulumi.Input[_builtins.str] realm: Name of the realm to synchronize. + :param pulumi.Input[_builtins.str] remove_vanished: How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + :param pulumi.Input[_builtins.str] scope: Sync scope: users, groups, or both. + """ + if dry_run is not None: + pulumi.set(__self__, "dry_run", dry_run) + if enable_new is not None: + pulumi.set(__self__, "enable_new", enable_new) + if full is not None: + warnings.warn("""Deprecated by Proxmox: use remove_vanished instead.""", DeprecationWarning) + pulumi.log.warn("""full is deprecated: Deprecated by Proxmox: use remove_vanished instead.""") + if full is not None: + pulumi.set(__self__, "full", full) + if purge is not None: + warnings.warn("""Deprecated by Proxmox: use remove_vanished instead.""", DeprecationWarning) + pulumi.log.warn("""purge is deprecated: Deprecated by Proxmox: use remove_vanished instead.""") + if purge is not None: + pulumi.set(__self__, "purge", purge) + if realm is not None: + pulumi.set(__self__, "realm", realm) + if remove_vanished is not None: + pulumi.set(__self__, "remove_vanished", remove_vanished) + if scope is not None: + pulumi.set(__self__, "scope", scope) + + @_builtins.property + @pulumi.getter(name="dryRun") + def dry_run(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Only simulate the sync without applying changes. + """ + return pulumi.get(self, "dry_run") + + @dry_run.setter + def dry_run(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "dry_run", value) + + @_builtins.property + @pulumi.getter(name="enableNew") + def enable_new(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable newly synced users. + """ + return pulumi.get(self, "enable_new") + + @enable_new.setter + def enable_new(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "enable_new", value) + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use remove_vanished instead.""") + def full(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Perform a full sync. + """ + return pulumi.get(self, "full") + + @full.setter + def full(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "full", value) + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use remove_vanished instead.""") + def purge(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Purge removed entries. + """ + return pulumi.get(self, "purge") + + @purge.setter + def purge(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "purge", value) + + @_builtins.property + @pulumi.getter + def realm(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Name of the realm to synchronize. + """ + return pulumi.get(self, "realm") + + @realm.setter + def realm(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "realm", value) + + @_builtins.property + @pulumi.getter(name="removeVanished") + def remove_vanished(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + """ + return pulumi.get(self, "remove_vanished") + + @remove_vanished.setter + def remove_vanished(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "remove_vanished", value) + + @_builtins.property + @pulumi.getter + def scope(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Sync scope: users, groups, or both. + """ + return pulumi.get(self, "scope") + + @scope.setter + def scope(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "scope", value) + + +@pulumi.type_token("proxmoxve:Realm/sync:Sync") +class Sync(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + dry_run: Optional[pulumi.Input[_builtins.bool]] = None, + enable_new: Optional[pulumi.Input[_builtins.bool]] = None, + full: Optional[pulumi.Input[_builtins.bool]] = None, + purge: Optional[pulumi.Input[_builtins.bool]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + remove_vanished: Optional[pulumi.Input[_builtins.str]] = None, + scope: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + ## Import + + #!/usr/bin/env sh + + Realm sync resources can be imported by realm name, e.g.: + + ```sh + $ pulumi import proxmoxve:Realm/sync:Sync example example.com + ``` + + Importing only populates the `realm` and `id` attributes; other fields must + + be set in configuration. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.bool] dry_run: Only simulate the sync without applying changes. + :param pulumi.Input[_builtins.bool] enable_new: Enable newly synced users. + :param pulumi.Input[_builtins.bool] full: Perform a full sync. + :param pulumi.Input[_builtins.bool] purge: Purge removed entries. + :param pulumi.Input[_builtins.str] realm: Name of the realm to synchronize. + :param pulumi.Input[_builtins.str] remove_vanished: How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + :param pulumi.Input[_builtins.str] scope: Sync scope: users, groups, or both. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: SyncArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Import + + #!/usr/bin/env sh + + Realm sync resources can be imported by realm name, e.g.: + + ```sh + $ pulumi import proxmoxve:Realm/sync:Sync example example.com + ``` + + Importing only populates the `realm` and `id` attributes; other fields must + + be set in configuration. + + :param str resource_name: The name of the resource. + :param SyncArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(SyncArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + dry_run: Optional[pulumi.Input[_builtins.bool]] = None, + enable_new: Optional[pulumi.Input[_builtins.bool]] = None, + full: Optional[pulumi.Input[_builtins.bool]] = None, + purge: Optional[pulumi.Input[_builtins.bool]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + remove_vanished: Optional[pulumi.Input[_builtins.str]] = None, + scope: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = SyncArgs.__new__(SyncArgs) + + __props__.__dict__["dry_run"] = dry_run + __props__.__dict__["enable_new"] = enable_new + __props__.__dict__["full"] = full + __props__.__dict__["purge"] = purge + if realm is None and not opts.urn: + raise TypeError("Missing required property 'realm'") + __props__.__dict__["realm"] = realm + __props__.__dict__["remove_vanished"] = remove_vanished + __props__.__dict__["scope"] = scope + super(Sync, __self__).__init__( + 'proxmoxve:Realm/sync:Sync', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + dry_run: Optional[pulumi.Input[_builtins.bool]] = None, + enable_new: Optional[pulumi.Input[_builtins.bool]] = None, + full: Optional[pulumi.Input[_builtins.bool]] = None, + purge: Optional[pulumi.Input[_builtins.bool]] = None, + realm: Optional[pulumi.Input[_builtins.str]] = None, + remove_vanished: Optional[pulumi.Input[_builtins.str]] = None, + scope: Optional[pulumi.Input[_builtins.str]] = None) -> 'Sync': + """ + Get an existing Sync resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.bool] dry_run: Only simulate the sync without applying changes. + :param pulumi.Input[_builtins.bool] enable_new: Enable newly synced users. + :param pulumi.Input[_builtins.bool] full: Perform a full sync. + :param pulumi.Input[_builtins.bool] purge: Purge removed entries. + :param pulumi.Input[_builtins.str] realm: Name of the realm to synchronize. + :param pulumi.Input[_builtins.str] remove_vanished: How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + :param pulumi.Input[_builtins.str] scope: Sync scope: users, groups, or both. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _SyncState.__new__(_SyncState) + + __props__.__dict__["dry_run"] = dry_run + __props__.__dict__["enable_new"] = enable_new + __props__.__dict__["full"] = full + __props__.__dict__["purge"] = purge + __props__.__dict__["realm"] = realm + __props__.__dict__["remove_vanished"] = remove_vanished + __props__.__dict__["scope"] = scope + return Sync(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="dryRun") + def dry_run(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Only simulate the sync without applying changes. + """ + return pulumi.get(self, "dry_run") + + @_builtins.property + @pulumi.getter(name="enableNew") + def enable_new(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Enable newly synced users. + """ + return pulumi.get(self, "enable_new") + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use remove_vanished instead.""") + def full(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Perform a full sync. + """ + return pulumi.get(self, "full") + + @_builtins.property + @pulumi.getter + @_utilities.deprecated("""Deprecated by Proxmox: use remove_vanished instead.""") + def purge(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Purge removed entries. + """ + return pulumi.get(self, "purge") + + @_builtins.property + @pulumi.getter + def realm(self) -> pulumi.Output[_builtins.str]: + """ + Name of the realm to synchronize. + """ + return pulumi.get(self, "realm") + + @_builtins.property + @pulumi.getter(name="removeVanished") + def remove_vanished(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + How to handle vanished entries (e.g. `acl;properties;entry` or `none`). + """ + return pulumi.get(self, "remove_vanished") + + @_builtins.property + @pulumi.getter + def scope(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Sync scope: users, groups, or both. + """ + return pulumi.get(self, "scope") + diff --git a/sdk/python/pulumi_proxmoxve/sdn/__init__.py b/sdk/python/pulumi_proxmoxve/sdn/__init__.py index ce59b04a..548caefe 100644 --- a/sdk/python/pulumi_proxmoxve/sdn/__init__.py +++ b/sdk/python/pulumi_proxmoxve/sdn/__init__.py @@ -15,3 +15,11 @@ from .vnet import * from ._inputs import * from . import outputs + +# Make subpackages available: +if typing.TYPE_CHECKING: + import pulumi_proxmoxve.sdn.fabric as __fabric + fabric = __fabric +else: + fabric = _utilities.lazy_import('pulumi_proxmoxve.sdn.fabric') + diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/__init__.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/__init__.py new file mode 100644 index 00000000..f6d7e5c7 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/__init__.py @@ -0,0 +1,18 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +from ... import _utilities +import typing +# Export this package's modules as members: +from .get_openfabric import * +from .get_ospf import * + +# Make subpackages available: +if typing.TYPE_CHECKING: + import pulumi_proxmoxve.sdn.fabric.node as __node + node = __node +else: + node = _utilities.lazy_import('pulumi_proxmoxve.sdn.fabric.node') + diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/get_openfabric.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/get_openfabric.py new file mode 100644 index 00000000..e10121c0 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/get_openfabric.py @@ -0,0 +1,154 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from ... import _utilities + +__all__ = [ + 'GetOpenfabricResult', + 'AwaitableGetOpenfabricResult', + 'get_openfabric', + 'get_openfabric_output', +] + +@pulumi.output_type +class GetOpenfabricResult: + """ + A collection of values returned by getOpenfabric. + """ + def __init__(__self__, csnp_interval=None, hello_interval=None, id=None, ip6_prefix=None, ip_prefix=None): + if csnp_interval and not isinstance(csnp_interval, int): + raise TypeError("Expected argument 'csnp_interval' to be a int") + pulumi.set(__self__, "csnp_interval", csnp_interval) + if hello_interval and not isinstance(hello_interval, int): + raise TypeError("Expected argument 'hello_interval' to be a int") + pulumi.set(__self__, "hello_interval", hello_interval) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if ip6_prefix and not isinstance(ip6_prefix, str): + raise TypeError("Expected argument 'ip6_prefix' to be a str") + pulumi.set(__self__, "ip6_prefix", ip6_prefix) + if ip_prefix and not isinstance(ip_prefix, str): + raise TypeError("Expected argument 'ip_prefix' to be a str") + pulumi.set(__self__, "ip_prefix", ip_prefix) + + @_builtins.property + @pulumi.getter(name="csnpInterval") + def csnp_interval(self) -> _builtins.int: + """ + The csnp_interval property for OpenFabric. + """ + return pulumi.get(self, "csnp_interval") + + @_builtins.property + @pulumi.getter(name="helloInterval") + def hello_interval(self) -> _builtins.int: + """ + The hello_interval property for OpenFabric. + """ + return pulumi.get(self, "hello_interval") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter(name="ip6Prefix") + def ip6_prefix(self) -> _builtins.str: + """ + IPv6 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip6_prefix") + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> _builtins.str: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + + +class AwaitableGetOpenfabricResult(GetOpenfabricResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetOpenfabricResult( + csnp_interval=self.csnp_interval, + hello_interval=self.hello_interval, + id=self.id, + ip6_prefix=self.ip6_prefix, + ip_prefix=self.ip_prefix) + + +def get_openfabric(id: Optional[_builtins.str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetOpenfabricResult: + """ + OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.get_openfabric(id="main-fabric") + ``` + + + :param _builtins.str id: The unique identifier of the SDN fabric. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric', __args__, opts=opts, typ=GetOpenfabricResult).value + + return AwaitableGetOpenfabricResult( + csnp_interval=pulumi.get(__ret__, 'csnp_interval'), + hello_interval=pulumi.get(__ret__, 'hello_interval'), + id=pulumi.get(__ret__, 'id'), + ip6_prefix=pulumi.get(__ret__, 'ip6_prefix'), + ip_prefix=pulumi.get(__ret__, 'ip_prefix')) +def get_openfabric_output(id: Optional[pulumi.Input[_builtins.str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetOpenfabricResult]: + """ + OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.get_openfabric(id="main-fabric") + ``` + + + :param _builtins.str id: The unique identifier of the SDN fabric. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('proxmoxve:Sdn/fabric/getOpenfabric:getOpenfabric', __args__, opts=opts, typ=GetOpenfabricResult) + return __ret__.apply(lambda __response__: GetOpenfabricResult( + csnp_interval=pulumi.get(__response__, 'csnp_interval'), + hello_interval=pulumi.get(__response__, 'hello_interval'), + id=pulumi.get(__response__, 'id'), + ip6_prefix=pulumi.get(__response__, 'ip6_prefix'), + ip_prefix=pulumi.get(__response__, 'ip_prefix'))) diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/get_ospf.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/get_ospf.py new file mode 100644 index 00000000..61187f09 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/get_ospf.py @@ -0,0 +1,126 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from ... import _utilities + +__all__ = [ + 'GetOspfResult', + 'AwaitableGetOspfResult', + 'get_ospf', + 'get_ospf_output', +] + +@pulumi.output_type +class GetOspfResult: + """ + A collection of values returned by getOspf. + """ + def __init__(__self__, area=None, id=None, ip_prefix=None): + if area and not isinstance(area, str): + raise TypeError("Expected argument 'area' to be a str") + pulumi.set(__self__, "area", area) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if ip_prefix and not isinstance(ip_prefix, str): + raise TypeError("Expected argument 'ip_prefix' to be a str") + pulumi.set(__self__, "ip_prefix", ip_prefix) + + @_builtins.property + @pulumi.getter + def area(self) -> _builtins.str: + """ + OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + """ + return pulumi.get(self, "area") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> _builtins.str: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + + +class AwaitableGetOspfResult(GetOspfResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetOspfResult( + area=self.area, + id=self.id, + ip_prefix=self.ip_prefix) + + +def get_ospf(id: Optional[_builtins.str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetOspfResult: + """ + OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.get_ospf(id="main-fabric") + ``` + + + :param _builtins.str id: The unique identifier of the SDN fabric. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('proxmoxve:Sdn/fabric/getOspf:getOspf', __args__, opts=opts, typ=GetOspfResult).value + + return AwaitableGetOspfResult( + area=pulumi.get(__ret__, 'area'), + id=pulumi.get(__ret__, 'id'), + ip_prefix=pulumi.get(__ret__, 'ip_prefix')) +def get_ospf_output(id: Optional[pulumi.Input[_builtins.str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetOspfResult]: + """ + OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.get_ospf(id="main-fabric") + ``` + + + :param _builtins.str id: The unique identifier of the SDN fabric. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('proxmoxve:Sdn/fabric/getOspf:getOspf', __args__, opts=opts, typ=GetOspfResult) + return __ret__.apply(lambda __response__: GetOspfResult( + area=pulumi.get(__response__, 'area'), + id=pulumi.get(__response__, 'id'), + ip_prefix=pulumi.get(__response__, 'ip_prefix'))) diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/node/__init__.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/__init__.py new file mode 100644 index 00000000..f8b49e4c --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/__init__.py @@ -0,0 +1,12 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +from .... import _utilities +import typing +# Export this package's modules as members: +from .get_openfabric import * +from .get_ospf import * +from .openfabric import * +from .ospf import * diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/node/get_openfabric.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/get_openfabric.py new file mode 100644 index 00000000..3495ad90 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/get_openfabric.py @@ -0,0 +1,173 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .... import _utilities + +__all__ = [ + 'GetOpenfabricResult', + 'AwaitableGetOpenfabricResult', + 'get_openfabric', + 'get_openfabric_output', +] + +@pulumi.output_type +class GetOpenfabricResult: + """ + A collection of values returned by getOpenfabric. + """ + def __init__(__self__, fabric_id=None, id=None, interface_names=None, ip=None, ip6=None, node_id=None): + if fabric_id and not isinstance(fabric_id, str): + raise TypeError("Expected argument 'fabric_id' to be a str") + pulumi.set(__self__, "fabric_id", fabric_id) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if interface_names and not isinstance(interface_names, list): + raise TypeError("Expected argument 'interface_names' to be a list") + pulumi.set(__self__, "interface_names", interface_names) + if ip and not isinstance(ip, str): + raise TypeError("Expected argument 'ip' to be a str") + pulumi.set(__self__, "ip", ip) + if ip6 and not isinstance(ip6, str): + raise TypeError("Expected argument 'ip6' to be a str") + pulumi.set(__self__, "ip6", ip6) + if node_id and not isinstance(node_id, str): + raise TypeError("Expected argument 'node_id' to be a str") + pulumi.set(__self__, "node_id", node_id) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> _builtins.str: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> Sequence[_builtins.str]: + """ + Set of interface names associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @_builtins.property + @pulumi.getter + def ip(self) -> _builtins.str: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @_builtins.property + @pulumi.getter + def ip6(self) -> _builtins.str: + """ + IPv6 address for the fabric node. + """ + return pulumi.get(self, "ip6") + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> _builtins.str: + """ + The unique identifier of the SDN fabric node. + """ + return pulumi.get(self, "node_id") + + +class AwaitableGetOpenfabricResult(GetOpenfabricResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetOpenfabricResult( + fabric_id=self.fabric_id, + id=self.id, + interface_names=self.interface_names, + ip=self.ip, + ip6=self.ip6, + node_id=self.node_id) + + +def get_openfabric(fabric_id: Optional[_builtins.str] = None, + node_id: Optional[_builtins.str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetOpenfabricResult: + """ + OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.node.get_openfabric(fabric_id="main-fabric", + node_id="pve") + ``` + + + :param _builtins.str fabric_id: The unique identifier of the SDN fabric. + :param _builtins.str node_id: The unique identifier of the SDN fabric node. + """ + __args__ = dict() + __args__['fabricId'] = fabric_id + __args__['nodeId'] = node_id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric', __args__, opts=opts, typ=GetOpenfabricResult).value + + return AwaitableGetOpenfabricResult( + fabric_id=pulumi.get(__ret__, 'fabric_id'), + id=pulumi.get(__ret__, 'id'), + interface_names=pulumi.get(__ret__, 'interface_names'), + ip=pulumi.get(__ret__, 'ip'), + ip6=pulumi.get(__ret__, 'ip6'), + node_id=pulumi.get(__ret__, 'node_id')) +def get_openfabric_output(fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetOpenfabricResult]: + """ + OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.node.get_openfabric(fabric_id="main-fabric", + node_id="pve") + ``` + + + :param _builtins.str fabric_id: The unique identifier of the SDN fabric. + :param _builtins.str node_id: The unique identifier of the SDN fabric node. + """ + __args__ = dict() + __args__['fabricId'] = fabric_id + __args__['nodeId'] = node_id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('proxmoxve:Sdn/fabric/node/getOpenfabric:getOpenfabric', __args__, opts=opts, typ=GetOpenfabricResult) + return __ret__.apply(lambda __response__: GetOpenfabricResult( + fabric_id=pulumi.get(__response__, 'fabric_id'), + id=pulumi.get(__response__, 'id'), + interface_names=pulumi.get(__response__, 'interface_names'), + ip=pulumi.get(__response__, 'ip'), + ip6=pulumi.get(__response__, 'ip6'), + node_id=pulumi.get(__response__, 'node_id'))) diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/node/get_ospf.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/get_ospf.py new file mode 100644 index 00000000..80a8afa4 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/get_ospf.py @@ -0,0 +1,159 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .... import _utilities + +__all__ = [ + 'GetOspfResult', + 'AwaitableGetOspfResult', + 'get_ospf', + 'get_ospf_output', +] + +@pulumi.output_type +class GetOspfResult: + """ + A collection of values returned by getOspf. + """ + def __init__(__self__, fabric_id=None, id=None, interface_names=None, ip=None, node_id=None): + if fabric_id and not isinstance(fabric_id, str): + raise TypeError("Expected argument 'fabric_id' to be a str") + pulumi.set(__self__, "fabric_id", fabric_id) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if interface_names and not isinstance(interface_names, list): + raise TypeError("Expected argument 'interface_names' to be a list") + pulumi.set(__self__, "interface_names", interface_names) + if ip and not isinstance(ip, str): + raise TypeError("Expected argument 'ip' to be a str") + pulumi.set(__self__, "ip", ip) + if node_id and not isinstance(node_id, str): + raise TypeError("Expected argument 'node_id' to be a str") + pulumi.set(__self__, "node_id", node_id) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> _builtins.str: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @_builtins.property + @pulumi.getter + def id(self) -> _builtins.str: + return pulumi.get(self, "id") + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> Sequence[_builtins.str]: + """ + Set of interface names associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @_builtins.property + @pulumi.getter + def ip(self) -> _builtins.str: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> _builtins.str: + """ + The unique identifier of the SDN fabric node. + """ + return pulumi.get(self, "node_id") + + +class AwaitableGetOspfResult(GetOspfResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetOspfResult( + fabric_id=self.fabric_id, + id=self.id, + interface_names=self.interface_names, + ip=self.ip, + node_id=self.node_id) + + +def get_ospf(fabric_id: Optional[_builtins.str] = None, + node_id: Optional[_builtins.str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetOspfResult: + """ + OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.node.get_ospf(fabric_id="main-fabric", + node_id="pve") + ``` + + + :param _builtins.str fabric_id: The unique identifier of the SDN fabric. + :param _builtins.str node_id: The unique identifier of the SDN fabric node. + """ + __args__ = dict() + __args__['fabricId'] = fabric_id + __args__['nodeId'] = node_id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('proxmoxve:Sdn/fabric/node/getOspf:getOspf', __args__, opts=opts, typ=GetOspfResult).value + + return AwaitableGetOspfResult( + fabric_id=pulumi.get(__ret__, 'fabric_id'), + id=pulumi.get(__ret__, 'id'), + interface_names=pulumi.get(__ret__, 'interface_names'), + ip=pulumi.get(__ret__, 'ip'), + node_id=pulumi.get(__ret__, 'node_id')) +def get_ospf_output(fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetOspfResult]: + """ + OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.Sdn.fabric.node.get_ospf(fabric_id="main-fabric", + node_id="pve") + ``` + + + :param _builtins.str fabric_id: The unique identifier of the SDN fabric. + :param _builtins.str node_id: The unique identifier of the SDN fabric node. + """ + __args__ = dict() + __args__['fabricId'] = fabric_id + __args__['nodeId'] = node_id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('proxmoxve:Sdn/fabric/node/getOspf:getOspf', __args__, opts=opts, typ=GetOspfResult) + return __ret__.apply(lambda __response__: GetOspfResult( + fabric_id=pulumi.get(__response__, 'fabric_id'), + id=pulumi.get(__response__, 'id'), + interface_names=pulumi.get(__response__, 'interface_names'), + ip=pulumi.get(__response__, 'ip'), + node_id=pulumi.get(__response__, 'node_id'))) diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/node/openfabric.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/openfabric.py new file mode 100644 index 00000000..61a1a8fe --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/openfabric.py @@ -0,0 +1,380 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .... import _utilities + +__all__ = ['OpenfabricArgs', 'Openfabric'] + +@pulumi.input_type +class OpenfabricArgs: + def __init__(__self__, *, + fabric_id: pulumi.Input[_builtins.str], + interface_names: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]], + node_id: pulumi.Input[_builtins.str], + ip: Optional[pulumi.Input[_builtins.str]] = None, + ip6: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a Openfabric resource. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] ip6: IPv6 address for the fabric node. + """ + pulumi.set(__self__, "fabric_id", fabric_id) + pulumi.set(__self__, "interface_names", interface_names) + pulumi.set(__self__, "node_id", node_id) + if ip is not None: + pulumi.set(__self__, "ip", ip) + if ip6 is not None: + pulumi.set(__self__, "ip6", ip6) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @fabric_id.setter + def fabric_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "fabric_id", value) + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]: + """ + Set of interfaces associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @interface_names.setter + def interface_names(self, value: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]): + pulumi.set(self, "interface_names", value) + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "node_id") + + @node_id.setter + def node_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "node_id", value) + + @_builtins.property + @pulumi.getter + def ip(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @ip.setter + def ip(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip", value) + + @_builtins.property + @pulumi.getter + def ip6(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv6 address for the fabric node. + """ + return pulumi.get(self, "ip6") + + @ip6.setter + def ip6(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip6", value) + + +@pulumi.input_type +class _OpenfabricState: + def __init__(__self__, *, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + ip6: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Openfabric resources. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] ip6: IPv6 address for the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric. + """ + if fabric_id is not None: + pulumi.set(__self__, "fabric_id", fabric_id) + if interface_names is not None: + pulumi.set(__self__, "interface_names", interface_names) + if ip is not None: + pulumi.set(__self__, "ip", ip) + if ip6 is not None: + pulumi.set(__self__, "ip6", ip6) + if node_id is not None: + pulumi.set(__self__, "node_id", node_id) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @fabric_id.setter + def fabric_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "fabric_id", value) + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Set of interfaces associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @interface_names.setter + def interface_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "interface_names", value) + + @_builtins.property + @pulumi.getter + def ip(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @ip.setter + def ip(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip", value) + + @_builtins.property + @pulumi.getter + def ip6(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv6 address for the fabric node. + """ + return pulumi.get(self, "ip6") + + @ip6.setter + def ip6(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip6", value) + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "node_id") + + @node_id.setter + def node_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "node_id", value) + + +@pulumi.type_token("proxmoxve:Sdn/fabric/node/openfabric:Openfabric") +class Openfabric(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + ip6: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OpenFabric("main", + fabric_id="main-fabric", + ip_prefix="10.0.0.0/16") + main_openfabric = proxmoxve.sdn.fabric.node.Openfabric("main", + fabric_id=main.fabric_id, + node_id="pve", + ip="10.0.0.1", + interface_names=[ + "nic0", + "nic1", + ]) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] ip6: IPv6 address for the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: OpenfabricArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + OpenFabric Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OpenFabric("main", + fabric_id="main-fabric", + ip_prefix="10.0.0.0/16") + main_openfabric = proxmoxve.sdn.fabric.node.Openfabric("main", + fabric_id=main.fabric_id, + node_id="pve", + ip="10.0.0.1", + interface_names=[ + "nic0", + "nic1", + ]) + ``` + + :param str resource_name: The name of the resource. + :param OpenfabricArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(OpenfabricArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + ip6: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = OpenfabricArgs.__new__(OpenfabricArgs) + + if fabric_id is None and not opts.urn: + raise TypeError("Missing required property 'fabric_id'") + __props__.__dict__["fabric_id"] = fabric_id + if interface_names is None and not opts.urn: + raise TypeError("Missing required property 'interface_names'") + __props__.__dict__["interface_names"] = interface_names + __props__.__dict__["ip"] = ip + __props__.__dict__["ip6"] = ip6 + if node_id is None and not opts.urn: + raise TypeError("Missing required property 'node_id'") + __props__.__dict__["node_id"] = node_id + super(Openfabric, __self__).__init__( + 'proxmoxve:Sdn/fabric/node/openfabric:Openfabric', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + ip6: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'Openfabric': + """ + Get an existing Openfabric resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] ip6: IPv6 address for the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _OpenfabricState.__new__(_OpenfabricState) + + __props__.__dict__["fabric_id"] = fabric_id + __props__.__dict__["interface_names"] = interface_names + __props__.__dict__["ip"] = ip + __props__.__dict__["ip6"] = ip6 + __props__.__dict__["node_id"] = node_id + return Openfabric(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Set of interfaces associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @_builtins.property + @pulumi.getter + def ip(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @_builtins.property + @pulumi.getter + def ip6(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + IPv6 address for the fabric node. + """ + return pulumi.get(self, "ip6") + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "node_id") + diff --git a/sdk/python/pulumi_proxmoxve/sdn/fabric/node/ospf.py b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/ospf.py new file mode 100644 index 00000000..e55f8798 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdn/fabric/node/ospf.py @@ -0,0 +1,336 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .... import _utilities + +__all__ = ['OspfArgs', 'Ospf'] + +@pulumi.input_type +class OspfArgs: + def __init__(__self__, *, + fabric_id: pulumi.Input[_builtins.str], + interface_names: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]], + ip: pulumi.Input[_builtins.str], + node_id: pulumi.Input[_builtins.str]): + """ + The set of arguments for constructing a Ospf resource. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric node. + """ + pulumi.set(__self__, "fabric_id", fabric_id) + pulumi.set(__self__, "interface_names", interface_names) + pulumi.set(__self__, "ip", ip) + pulumi.set(__self__, "node_id", node_id) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @fabric_id.setter + def fabric_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "fabric_id", value) + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]: + """ + Set of interfaces associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @interface_names.setter + def interface_names(self, value: pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]): + pulumi.set(self, "interface_names", value) + + @_builtins.property + @pulumi.getter + def ip(self) -> pulumi.Input[_builtins.str]: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @ip.setter + def ip(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "ip", value) + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the SDN fabric node. + """ + return pulumi.get(self, "node_id") + + @node_id.setter + def node_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "node_id", value) + + +@pulumi.input_type +class _OspfState: + def __init__(__self__, *, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering Ospf resources. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric node. + """ + if fabric_id is not None: + pulumi.set(__self__, "fabric_id", fabric_id) + if interface_names is not None: + pulumi.set(__self__, "interface_names", interface_names) + if ip is not None: + pulumi.set(__self__, "ip", ip) + if node_id is not None: + pulumi.set(__self__, "node_id", node_id) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @fabric_id.setter + def fabric_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "fabric_id", value) + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Set of interfaces associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @interface_names.setter + def interface_names(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "interface_names", value) + + @_builtins.property + @pulumi.getter + def ip(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @ip.setter + def ip(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip", value) + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the SDN fabric node. + """ + return pulumi.get(self, "node_id") + + @node_id.setter + def node_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "node_id", value) + + +@pulumi.type_token("proxmoxve:Sdn/fabric/node/ospf:Ospf") +class Ospf(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OSPF("main", + ospf_id="main-fabric", + ip_prefix="10.0.0.0/16", + area="0") + main_ospf = proxmoxve.sdn.fabric.node.Ospf("main", + fabric_id=main.ospf_id, + node_id="pve", + ip="10.0.0.1", + interface_names=[ + "nic0", + "nic1", + ]) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric node. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: OspfArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + OSPF Fabric Node in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OSPF("main", + ospf_id="main-fabric", + ip_prefix="10.0.0.0/16", + area="0") + main_ospf = proxmoxve.sdn.fabric.node.Ospf("main", + fabric_id=main.ospf_id, + node_id="pve", + ip="10.0.0.1", + interface_names=[ + "nic0", + "nic1", + ]) + ``` + + :param str resource_name: The name of the resource. + :param OspfArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(OspfArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = OspfArgs.__new__(OspfArgs) + + if fabric_id is None and not opts.urn: + raise TypeError("Missing required property 'fabric_id'") + __props__.__dict__["fabric_id"] = fabric_id + if interface_names is None and not opts.urn: + raise TypeError("Missing required property 'interface_names'") + __props__.__dict__["interface_names"] = interface_names + if ip is None and not opts.urn: + raise TypeError("Missing required property 'ip'") + __props__.__dict__["ip"] = ip + if node_id is None and not opts.urn: + raise TypeError("Missing required property 'node_id'") + __props__.__dict__["node_id"] = node_id + super(Ospf, __self__).__init__( + 'proxmoxve:Sdn/fabric/node/ospf:Ospf', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + interface_names: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + ip: Optional[pulumi.Input[_builtins.str]] = None, + node_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'Ospf': + """ + Get an existing Ospf resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] interface_names: Set of interfaces associated with the fabric node. + :param pulumi.Input[_builtins.str] ip: IPv4 address for the fabric node. + :param pulumi.Input[_builtins.str] node_id: The unique identifier of the SDN fabric node. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _OspfState.__new__(_OspfState) + + __props__.__dict__["fabric_id"] = fabric_id + __props__.__dict__["interface_names"] = interface_names + __props__.__dict__["ip"] = ip + __props__.__dict__["node_id"] = node_id + return Ospf(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @_builtins.property + @pulumi.getter(name="interfaceNames") + def interface_names(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + Set of interfaces associated with the fabric node. + """ + return pulumi.get(self, "interface_names") + + @_builtins.property + @pulumi.getter + def ip(self) -> pulumi.Output[_builtins.str]: + """ + IPv4 address for the fabric node. + """ + return pulumi.get(self, "ip") + + @_builtins.property + @pulumi.getter(name="nodeId") + def node_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the SDN fabric node. + """ + return pulumi.get(self, "node_id") + diff --git a/sdk/python/pulumi_proxmoxve/sdnfabric/__init__.py b/sdk/python/pulumi_proxmoxve/sdnfabric/__init__.py new file mode 100644 index 00000000..d689d788 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdnfabric/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +from .. import _utilities +import typing +# Export this package's modules as members: +from .open_fabric import * +from .ospf import * diff --git a/sdk/python/pulumi_proxmoxve/sdnfabric/open_fabric.py b/sdk/python/pulumi_proxmoxve/sdnfabric/open_fabric.py new file mode 100644 index 00000000..6f0cdca0 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdnfabric/open_fabric.py @@ -0,0 +1,362 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['OpenFabricArgs', 'OpenFabric'] + +@pulumi.input_type +class OpenFabricArgs: + def __init__(__self__, *, + fabric_id: pulumi.Input[_builtins.str], + csnp_interval: Optional[pulumi.Input[_builtins.int]] = None, + hello_interval: Optional[pulumi.Input[_builtins.int]] = None, + ip6_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a OpenFabric resource. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[_builtins.int] csnp_interval: The csnp_interval property for OpenFabric. + :param pulumi.Input[_builtins.int] hello_interval: The hello_interval property for OpenFabric. + :param pulumi.Input[_builtins.str] ip6_prefix: IPv6 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + """ + pulumi.set(__self__, "fabric_id", fabric_id) + if csnp_interval is not None: + pulumi.set(__self__, "csnp_interval", csnp_interval) + if hello_interval is not None: + pulumi.set(__self__, "hello_interval", hello_interval) + if ip6_prefix is not None: + pulumi.set(__self__, "ip6_prefix", ip6_prefix) + if ip_prefix is not None: + pulumi.set(__self__, "ip_prefix", ip_prefix) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @fabric_id.setter + def fabric_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "fabric_id", value) + + @_builtins.property + @pulumi.getter(name="csnpInterval") + def csnp_interval(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The csnp_interval property for OpenFabric. + """ + return pulumi.get(self, "csnp_interval") + + @csnp_interval.setter + def csnp_interval(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "csnp_interval", value) + + @_builtins.property + @pulumi.getter(name="helloInterval") + def hello_interval(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The hello_interval property for OpenFabric. + """ + return pulumi.get(self, "hello_interval") + + @hello_interval.setter + def hello_interval(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "hello_interval", value) + + @_builtins.property + @pulumi.getter(name="ip6Prefix") + def ip6_prefix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv6 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip6_prefix") + + @ip6_prefix.setter + def ip6_prefix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip6_prefix", value) + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + + @ip_prefix.setter + def ip_prefix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip_prefix", value) + + +@pulumi.input_type +class _OpenFabricState: + def __init__(__self__, *, + csnp_interval: Optional[pulumi.Input[_builtins.int]] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + hello_interval: Optional[pulumi.Input[_builtins.int]] = None, + ip6_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering OpenFabric resources. + :param pulumi.Input[_builtins.int] csnp_interval: The csnp_interval property for OpenFabric. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[_builtins.int] hello_interval: The hello_interval property for OpenFabric. + :param pulumi.Input[_builtins.str] ip6_prefix: IPv6 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + """ + if csnp_interval is not None: + pulumi.set(__self__, "csnp_interval", csnp_interval) + if fabric_id is not None: + pulumi.set(__self__, "fabric_id", fabric_id) + if hello_interval is not None: + pulumi.set(__self__, "hello_interval", hello_interval) + if ip6_prefix is not None: + pulumi.set(__self__, "ip6_prefix", ip6_prefix) + if ip_prefix is not None: + pulumi.set(__self__, "ip_prefix", ip_prefix) + + @_builtins.property + @pulumi.getter(name="csnpInterval") + def csnp_interval(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The csnp_interval property for OpenFabric. + """ + return pulumi.get(self, "csnp_interval") + + @csnp_interval.setter + def csnp_interval(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "csnp_interval", value) + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @fabric_id.setter + def fabric_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "fabric_id", value) + + @_builtins.property + @pulumi.getter(name="helloInterval") + def hello_interval(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The hello_interval property for OpenFabric. + """ + return pulumi.get(self, "hello_interval") + + @hello_interval.setter + def hello_interval(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "hello_interval", value) + + @_builtins.property + @pulumi.getter(name="ip6Prefix") + def ip6_prefix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv6 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip6_prefix") + + @ip6_prefix.setter + def ip6_prefix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip6_prefix", value) + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + + @ip_prefix.setter + def ip_prefix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip_prefix", value) + + +@pulumi.type_token("proxmoxve:SDNFabric/openFabric:OpenFabric") +class OpenFabric(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + csnp_interval: Optional[pulumi.Input[_builtins.int]] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + hello_interval: Optional[pulumi.Input[_builtins.int]] = None, + ip6_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OpenFabric("main", + fabric_id="main-fabric", + ip_prefix="10.0.0.0/16") + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.int] csnp_interval: The csnp_interval property for OpenFabric. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[_builtins.int] hello_interval: The hello_interval property for OpenFabric. + :param pulumi.Input[_builtins.str] ip6_prefix: IPv6 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: OpenFabricArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + OpenFabric Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OpenFabric("main", + fabric_id="main-fabric", + ip_prefix="10.0.0.0/16") + ``` + + :param str resource_name: The name of the resource. + :param OpenFabricArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(OpenFabricArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + csnp_interval: Optional[pulumi.Input[_builtins.int]] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + hello_interval: Optional[pulumi.Input[_builtins.int]] = None, + ip6_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = OpenFabricArgs.__new__(OpenFabricArgs) + + __props__.__dict__["csnp_interval"] = csnp_interval + if fabric_id is None and not opts.urn: + raise TypeError("Missing required property 'fabric_id'") + __props__.__dict__["fabric_id"] = fabric_id + __props__.__dict__["hello_interval"] = hello_interval + __props__.__dict__["ip6_prefix"] = ip6_prefix + __props__.__dict__["ip_prefix"] = ip_prefix + super(OpenFabric, __self__).__init__( + 'proxmoxve:SDNFabric/openFabric:OpenFabric', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + csnp_interval: Optional[pulumi.Input[_builtins.int]] = None, + fabric_id: Optional[pulumi.Input[_builtins.str]] = None, + hello_interval: Optional[pulumi.Input[_builtins.int]] = None, + ip6_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None) -> 'OpenFabric': + """ + Get an existing OpenFabric resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.int] csnp_interval: The csnp_interval property for OpenFabric. + :param pulumi.Input[_builtins.str] fabric_id: The unique identifier of the SDN fabric. + :param pulumi.Input[_builtins.int] hello_interval: The hello_interval property for OpenFabric. + :param pulumi.Input[_builtins.str] ip6_prefix: IPv6 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _OpenFabricState.__new__(_OpenFabricState) + + __props__.__dict__["csnp_interval"] = csnp_interval + __props__.__dict__["fabric_id"] = fabric_id + __props__.__dict__["hello_interval"] = hello_interval + __props__.__dict__["ip6_prefix"] = ip6_prefix + __props__.__dict__["ip_prefix"] = ip_prefix + return OpenFabric(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter(name="csnpInterval") + def csnp_interval(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + The csnp_interval property for OpenFabric. + """ + return pulumi.get(self, "csnp_interval") + + @_builtins.property + @pulumi.getter(name="fabricId") + def fabric_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "fabric_id") + + @_builtins.property + @pulumi.getter(name="helloInterval") + def hello_interval(self) -> pulumi.Output[Optional[_builtins.int]]: + """ + The hello_interval property for OpenFabric. + """ + return pulumi.get(self, "hello_interval") + + @_builtins.property + @pulumi.getter(name="ip6Prefix") + def ip6_prefix(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + IPv6 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip6_prefix") + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + diff --git a/sdk/python/pulumi_proxmoxve/sdnfabric/ospf.py b/sdk/python/pulumi_proxmoxve/sdnfabric/ospf.py new file mode 100644 index 00000000..12356976 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/sdnfabric/ospf.py @@ -0,0 +1,272 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['OSPFArgs', 'OSPF'] + +@pulumi.input_type +class OSPFArgs: + def __init__(__self__, *, + area: pulumi.Input[_builtins.str], + ip_prefix: pulumi.Input[_builtins.str], + ospf_id: pulumi.Input[_builtins.str]): + """ + The set of arguments for constructing a OSPF resource. + :param pulumi.Input[_builtins.str] area: OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ospf_id: The unique identifier of the SDN fabric. + """ + pulumi.set(__self__, "area", area) + pulumi.set(__self__, "ip_prefix", ip_prefix) + pulumi.set(__self__, "ospf_id", ospf_id) + + @_builtins.property + @pulumi.getter + def area(self) -> pulumi.Input[_builtins.str]: + """ + OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + """ + return pulumi.get(self, "area") + + @area.setter + def area(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "area", value) + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> pulumi.Input[_builtins.str]: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + + @ip_prefix.setter + def ip_prefix(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "ip_prefix", value) + + @_builtins.property + @pulumi.getter(name="ospfId") + def ospf_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "ospf_id") + + @ospf_id.setter + def ospf_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "ospf_id", value) + + +@pulumi.input_type +class _OSPFState: + def __init__(__self__, *, + area: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ospf_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering OSPF resources. + :param pulumi.Input[_builtins.str] area: OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ospf_id: The unique identifier of the SDN fabric. + """ + if area is not None: + pulumi.set(__self__, "area", area) + if ip_prefix is not None: + pulumi.set(__self__, "ip_prefix", ip_prefix) + if ospf_id is not None: + pulumi.set(__self__, "ospf_id", ospf_id) + + @_builtins.property + @pulumi.getter + def area(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + """ + return pulumi.get(self, "area") + + @area.setter + def area(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "area", value) + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + + @ip_prefix.setter + def ip_prefix(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ip_prefix", value) + + @_builtins.property + @pulumi.getter(name="ospfId") + def ospf_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "ospf_id") + + @ospf_id.setter + def ospf_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "ospf_id", value) + + +@pulumi.type_token("proxmoxve:SDNFabric/oSPF:OSPF") +class OSPF(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + area: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ospf_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OSPF("main", + ospf_id="main-fabric", + ip_prefix="10.0.0.0/16", + area="0") + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] area: OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ospf_id: The unique identifier of the SDN fabric. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: OSPFArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + OSPF Fabric in Proxmox SDN. Fabrics in Proxmox VE SDN provide automated routing between nodes in a cluster. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + main = proxmoxve.sdnfabric.OSPF("main", + ospf_id="main-fabric", + ip_prefix="10.0.0.0/16", + area="0") + ``` + + :param str resource_name: The name of the resource. + :param OSPFArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(OSPFArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + area: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ospf_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = OSPFArgs.__new__(OSPFArgs) + + if area is None and not opts.urn: + raise TypeError("Missing required property 'area'") + __props__.__dict__["area"] = area + if ip_prefix is None and not opts.urn: + raise TypeError("Missing required property 'ip_prefix'") + __props__.__dict__["ip_prefix"] = ip_prefix + if ospf_id is None and not opts.urn: + raise TypeError("Missing required property 'ospf_id'") + __props__.__dict__["ospf_id"] = ospf_id + super(OSPF, __self__).__init__( + 'proxmoxve:SDNFabric/oSPF:OSPF', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + area: Optional[pulumi.Input[_builtins.str]] = None, + ip_prefix: Optional[pulumi.Input[_builtins.str]] = None, + ospf_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'OSPF': + """ + Get an existing OSPF resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] area: OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + :param pulumi.Input[_builtins.str] ip_prefix: IPv4 prefix cidr for the fabric. + :param pulumi.Input[_builtins.str] ospf_id: The unique identifier of the SDN fabric. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _OSPFState.__new__(_OSPFState) + + __props__.__dict__["area"] = area + __props__.__dict__["ip_prefix"] = ip_prefix + __props__.__dict__["ospf_id"] = ospf_id + return OSPF(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def area(self) -> pulumi.Output[_builtins.str]: + """ + OSPF area. Either a IPv4 address or a 32-bit number. Gets validated in rust. + """ + return pulumi.get(self, "area") + + @_builtins.property + @pulumi.getter(name="ipPrefix") + def ip_prefix(self) -> pulumi.Output[_builtins.str]: + """ + IPv4 prefix cidr for the fabric. + """ + return pulumi.get(self, "ip_prefix") + + @_builtins.property + @pulumi.getter(name="ospfId") + def ospf_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the SDN fabric. + """ + return pulumi.get(self, "ospf_id") + diff --git a/sdk/python/pulumi_proxmoxve/sdnzone/evpn.py b/sdk/python/pulumi_proxmoxve/sdnzone/evpn.py index d1f2b334..a6efd183 100644 --- a/sdk/python/pulumi_proxmoxve/sdnzone/evpn.py +++ b/sdk/python/pulumi_proxmoxve/sdnzone/evpn.py @@ -46,7 +46,7 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] exit_nodes: List of exit nodes for EVPN. :param pulumi.Input[_builtins.bool] exit_nodes_local_routing: Enable local routing for EVPN exit nodes. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] primary_exit_node: Primary exit node for EVPN. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -204,7 +204,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -291,7 +291,7 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] exit_nodes: List of exit nodes for EVPN. :param pulumi.Input[_builtins.bool] exit_nodes_local_routing: Enable local routing for EVPN exit nodes. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] primary_exit_node: Primary exit node for EVPN. @@ -436,7 +436,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -613,7 +613,7 @@ def __init__(__self__, :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] exit_nodes: List of exit nodes for EVPN. :param pulumi.Input[_builtins.bool] exit_nodes_local_routing: Enable local routing for EVPN exit nodes. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] primary_exit_node: Primary exit node for EVPN. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -771,7 +771,7 @@ def get(resource_name: str, :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] exit_nodes: List of exit nodes for EVPN. :param pulumi.Input[_builtins.bool] exit_nodes_local_routing: Enable local routing for EVPN exit nodes. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] primary_exit_node: Primary exit node for EVPN. @@ -806,7 +806,7 @@ def get(resource_name: str, @_builtins.property @pulumi.getter(name="advertiseSubnets") - def advertise_subnets(self) -> pulumi.Output[Optional[_builtins.bool]]: + def advertise_subnets(self) -> pulumi.Output[_builtins.bool]: """ Enable subnet advertisement for EVPN. """ @@ -822,7 +822,7 @@ def controller(self) -> pulumi.Output[_builtins.str]: @_builtins.property @pulumi.getter(name="disableArpNdSuppression") - def disable_arp_nd_suppression(self) -> pulumi.Output[Optional[_builtins.bool]]: + def disable_arp_nd_suppression(self) -> pulumi.Output[_builtins.bool]: """ Disable ARP/ND suppression for EVPN. """ @@ -854,7 +854,7 @@ def exit_nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: @_builtins.property @pulumi.getter(name="exitNodesLocalRouting") - def exit_nodes_local_routing(self) -> pulumi.Output[Optional[_builtins.bool]]: + def exit_nodes_local_routing(self) -> pulumi.Output[_builtins.bool]: """ Enable local routing for EVPN exit nodes. """ @@ -870,9 +870,9 @@ def ipam(self) -> pulumi.Output[Optional[_builtins.str]]: @_builtins.property @pulumi.getter - def mtu(self) -> pulumi.Output[Optional[_builtins.int]]: + def mtu(self) -> pulumi.Output[_builtins.int]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") diff --git a/sdk/python/pulumi_proxmoxve/sdnzone/qinq.py b/sdk/python/pulumi_proxmoxve/sdnzone/qinq.py index 21c2c6bc..d2056bd6 100644 --- a/sdk/python/pulumi_proxmoxve/sdnzone/qinq.py +++ b/sdk/python/pulumi_proxmoxve/sdnzone/qinq.py @@ -37,7 +37,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. :param pulumi.Input[_builtins.str] service_vlan_protocol: Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`. @@ -136,7 +136,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -202,7 +202,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -288,7 +288,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -435,7 +435,7 @@ def __init__(__self__, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. :param pulumi.Input[_builtins.int] service_vlan: Service VLAN tag for QinQ. The tag must be between `1` and `4094`. @@ -564,7 +564,7 @@ def get(resource_name: str, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -625,9 +625,9 @@ def ipam(self) -> pulumi.Output[Optional[_builtins.str]]: @_builtins.property @pulumi.getter - def mtu(self) -> pulumi.Output[Optional[_builtins.int]]: + def mtu(self) -> pulumi.Output[_builtins.int]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -665,7 +665,7 @@ def service_vlan(self) -> pulumi.Output[_builtins.int]: @_builtins.property @pulumi.getter(name="serviceVlanProtocol") - def service_vlan_protocol(self) -> pulumi.Output[Optional[_builtins.str]]: + def service_vlan_protocol(self) -> pulumi.Output[_builtins.str]: """ Service VLAN protocol for QinQ. The protocol must be `802.1ad` or `802.1q`. """ diff --git a/sdk/python/pulumi_proxmoxve/sdnzone/simple.py b/sdk/python/pulumi_proxmoxve/sdnzone/simple.py index dfae9929..60f36640 100644 --- a/sdk/python/pulumi_proxmoxve/sdnzone/simple.py +++ b/sdk/python/pulumi_proxmoxve/sdnzone/simple.py @@ -34,7 +34,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. """ @@ -118,7 +118,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -170,7 +170,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -250,7 +250,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -369,7 +369,7 @@ def __init__(__self__, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. :param pulumi.Input[_builtins.str] zone_id: The unique identifier of the SDN zone. @@ -484,7 +484,7 @@ def get(resource_name: str, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -541,9 +541,9 @@ def ipam(self) -> pulumi.Output[Optional[_builtins.str]]: @_builtins.property @pulumi.getter - def mtu(self) -> pulumi.Output[Optional[_builtins.int]]: + def mtu(self) -> pulumi.Output[_builtins.int]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") diff --git a/sdk/python/pulumi_proxmoxve/sdnzone/vlan.py b/sdk/python/pulumi_proxmoxve/sdnzone/vlan.py index 4591cff7..f4cc7c0a 100644 --- a/sdk/python/pulumi_proxmoxve/sdnzone/vlan.py +++ b/sdk/python/pulumi_proxmoxve/sdnzone/vlan.py @@ -34,7 +34,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. """ @@ -117,7 +117,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -169,7 +169,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -249,7 +249,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -368,7 +368,7 @@ def __init__(__self__, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. :param pulumi.Input[_builtins.str] zone_id: The unique identifier of the SDN zone. @@ -485,7 +485,7 @@ def get(resource_name: str, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -542,9 +542,9 @@ def ipam(self) -> pulumi.Output[Optional[_builtins.str]]: @_builtins.property @pulumi.getter - def mtu(self) -> pulumi.Output[Optional[_builtins.int]]: + def mtu(self) -> pulumi.Output[_builtins.int]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") diff --git a/sdk/python/pulumi_proxmoxve/sdnzone/vxlan.py b/sdk/python/pulumi_proxmoxve/sdnzone/vxlan.py index fe3705cd..cd356249 100644 --- a/sdk/python/pulumi_proxmoxve/sdnzone/vxlan.py +++ b/sdk/python/pulumi_proxmoxve/sdnzone/vxlan.py @@ -34,7 +34,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. """ @@ -117,7 +117,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -168,7 +168,7 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] peers: A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. @@ -237,7 +237,7 @@ def ipam(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") @@ -371,7 +371,7 @@ def __init__(__self__, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] peers: A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here :param pulumi.Input[_builtins.str] reverse_dns: Reverse DNS API server address. @@ -492,7 +492,7 @@ def get(resource_name: str, :param pulumi.Input[_builtins.str] dns: DNS API server address. :param pulumi.Input[_builtins.str] dns_zone: DNS domain name. Used to register hostnames, such as `.`. The DNS zone must already exist on the DNS server. :param pulumi.Input[_builtins.str] ipam: IP Address Management system. - :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. + :param pulumi.Input[_builtins.int] mtu: MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: The Proxmox nodes which the zone and associated VNets should be deployed on :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] peers: A list of IP addresses of each node in the VXLAN zone. This can be external nodes reachable at this IP address. All nodes in the cluster need to be mentioned here :param pulumi.Input[_builtins.bool] pending: Indicates if the zone has pending configuration changes that need to be applied. @@ -542,9 +542,9 @@ def ipam(self) -> pulumi.Output[Optional[_builtins.str]]: @_builtins.property @pulumi.getter - def mtu(self) -> pulumi.Output[Optional[_builtins.int]]: + def mtu(self) -> pulumi.Output[_builtins.int]: """ - MTU value for the zone. + MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation. """ return pulumi.get(self, "mtu") diff --git a/sdk/python/pulumi_proxmoxve/storage/__init__.py b/sdk/python/pulumi_proxmoxve/storage/__init__.py index a2481bca..ff031aa1 100644 --- a/sdk/python/pulumi_proxmoxve/storage/__init__.py +++ b/sdk/python/pulumi_proxmoxve/storage/__init__.py @@ -6,7 +6,14 @@ from .. import _utilities import typing # Export this package's modules as members: +from .cifs import * +from .directory import * from .file import * from .get_datastores import * +from .lvm import * +from .lvm_thin import * +from .nfs import * +from .pbs import * +from .zfs_pool import * from ._inputs import * from . import outputs diff --git a/sdk/python/pulumi_proxmoxve/storage/_inputs.py b/sdk/python/pulumi_proxmoxve/storage/_inputs.py index 278cbd83..47c488d9 100644 --- a/sdk/python/pulumi_proxmoxve/storage/_inputs.py +++ b/sdk/python/pulumi_proxmoxve/storage/_inputs.py @@ -15,10 +15,18 @@ from .. import _utilities __all__ = [ + 'CIFSBackupsArgs', + 'CIFSBackupsArgsDict', + 'DirectoryBackupsArgs', + 'DirectoryBackupsArgsDict', 'FileSourceFileArgs', 'FileSourceFileArgsDict', 'FileSourceRawArgs', 'FileSourceRawArgsDict', + 'NFSBackupsArgs', + 'NFSBackupsArgsDict', + 'PBSBackupsArgs', + 'PBSBackupsArgsDict', 'GetDatastoresDatastoreArgs', 'GetDatastoresDatastoreArgsDict', 'GetDatastoresFiltersArgs', @@ -27,6 +35,350 @@ MYPY = False +if not MYPY: + class CIFSBackupsArgsDict(TypedDict): + keep_all: NotRequired[pulumi.Input[_builtins.bool]] + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + keep_daily: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of daily backups to keep. Older backups will be removed. + """ + keep_hourly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of hourly backups to keep. Older backups will be removed. + """ + keep_last: NotRequired[pulumi.Input[_builtins.int]] + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + keep_monthly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of monthly backups to keep. Older backups will be removed. + """ + keep_weekly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of weekly backups to keep. Older backups will be removed. + """ + keep_yearly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of yearly backups to keep. Older backups will be removed. + """ + max_protected_backups: NotRequired[pulumi.Input[_builtins.int]] + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ +elif False: + CIFSBackupsArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class CIFSBackupsArgs: + def __init__(__self__, *, + keep_all: Optional[pulumi.Input[_builtins.bool]] = None, + keep_daily: Optional[pulumi.Input[_builtins.int]] = None, + keep_hourly: Optional[pulumi.Input[_builtins.int]] = None, + keep_last: Optional[pulumi.Input[_builtins.int]] = None, + keep_monthly: Optional[pulumi.Input[_builtins.int]] = None, + keep_weekly: Optional[pulumi.Input[_builtins.int]] = None, + keep_yearly: Optional[pulumi.Input[_builtins.int]] = None, + max_protected_backups: Optional[pulumi.Input[_builtins.int]] = None): + """ + :param pulumi.Input[_builtins.bool] keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param pulumi.Input[_builtins.int] keep_daily: The number of daily backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param pulumi.Input[_builtins.int] keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @keep_all.setter + def keep_all(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "keep_all", value) + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @keep_daily.setter + def keep_daily(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_daily", value) + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @keep_hourly.setter + def keep_hourly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_hourly", value) + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @keep_last.setter + def keep_last(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_last", value) + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @keep_monthly.setter + def keep_monthly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_monthly", value) + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @keep_weekly.setter + def keep_weekly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_weekly", value) + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @keep_yearly.setter + def keep_yearly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_yearly", value) + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + @max_protected_backups.setter + def max_protected_backups(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "max_protected_backups", value) + + +if not MYPY: + class DirectoryBackupsArgsDict(TypedDict): + keep_all: NotRequired[pulumi.Input[_builtins.bool]] + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + keep_daily: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of daily backups to keep. Older backups will be removed. + """ + keep_hourly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of hourly backups to keep. Older backups will be removed. + """ + keep_last: NotRequired[pulumi.Input[_builtins.int]] + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + keep_monthly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of monthly backups to keep. Older backups will be removed. + """ + keep_weekly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of weekly backups to keep. Older backups will be removed. + """ + keep_yearly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of yearly backups to keep. Older backups will be removed. + """ + max_protected_backups: NotRequired[pulumi.Input[_builtins.int]] + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ +elif False: + DirectoryBackupsArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class DirectoryBackupsArgs: + def __init__(__self__, *, + keep_all: Optional[pulumi.Input[_builtins.bool]] = None, + keep_daily: Optional[pulumi.Input[_builtins.int]] = None, + keep_hourly: Optional[pulumi.Input[_builtins.int]] = None, + keep_last: Optional[pulumi.Input[_builtins.int]] = None, + keep_monthly: Optional[pulumi.Input[_builtins.int]] = None, + keep_weekly: Optional[pulumi.Input[_builtins.int]] = None, + keep_yearly: Optional[pulumi.Input[_builtins.int]] = None, + max_protected_backups: Optional[pulumi.Input[_builtins.int]] = None): + """ + :param pulumi.Input[_builtins.bool] keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param pulumi.Input[_builtins.int] keep_daily: The number of daily backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param pulumi.Input[_builtins.int] keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @keep_all.setter + def keep_all(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "keep_all", value) + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @keep_daily.setter + def keep_daily(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_daily", value) + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @keep_hourly.setter + def keep_hourly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_hourly", value) + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @keep_last.setter + def keep_last(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_last", value) + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @keep_monthly.setter + def keep_monthly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_monthly", value) + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @keep_weekly.setter + def keep_weekly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_weekly", value) + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @keep_yearly.setter + def keep_yearly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_yearly", value) + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + @max_protected_backups.setter + def max_protected_backups(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "max_protected_backups", value) + + if not MYPY: class FileSourceFileArgsDict(TypedDict): path: pulumi.Input[_builtins.str] @@ -240,6 +592,350 @@ def resize(self, value: Optional[pulumi.Input[_builtins.int]]): pulumi.set(self, "resize", value) +if not MYPY: + class NFSBackupsArgsDict(TypedDict): + keep_all: NotRequired[pulumi.Input[_builtins.bool]] + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + keep_daily: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of daily backups to keep. Older backups will be removed. + """ + keep_hourly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of hourly backups to keep. Older backups will be removed. + """ + keep_last: NotRequired[pulumi.Input[_builtins.int]] + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + keep_monthly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of monthly backups to keep. Older backups will be removed. + """ + keep_weekly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of weekly backups to keep. Older backups will be removed. + """ + keep_yearly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of yearly backups to keep. Older backups will be removed. + """ + max_protected_backups: NotRequired[pulumi.Input[_builtins.int]] + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ +elif False: + NFSBackupsArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class NFSBackupsArgs: + def __init__(__self__, *, + keep_all: Optional[pulumi.Input[_builtins.bool]] = None, + keep_daily: Optional[pulumi.Input[_builtins.int]] = None, + keep_hourly: Optional[pulumi.Input[_builtins.int]] = None, + keep_last: Optional[pulumi.Input[_builtins.int]] = None, + keep_monthly: Optional[pulumi.Input[_builtins.int]] = None, + keep_weekly: Optional[pulumi.Input[_builtins.int]] = None, + keep_yearly: Optional[pulumi.Input[_builtins.int]] = None, + max_protected_backups: Optional[pulumi.Input[_builtins.int]] = None): + """ + :param pulumi.Input[_builtins.bool] keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param pulumi.Input[_builtins.int] keep_daily: The number of daily backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param pulumi.Input[_builtins.int] keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @keep_all.setter + def keep_all(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "keep_all", value) + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @keep_daily.setter + def keep_daily(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_daily", value) + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @keep_hourly.setter + def keep_hourly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_hourly", value) + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @keep_last.setter + def keep_last(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_last", value) + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @keep_monthly.setter + def keep_monthly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_monthly", value) + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @keep_weekly.setter + def keep_weekly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_weekly", value) + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @keep_yearly.setter + def keep_yearly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_yearly", value) + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + @max_protected_backups.setter + def max_protected_backups(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "max_protected_backups", value) + + +if not MYPY: + class PBSBackupsArgsDict(TypedDict): + keep_all: NotRequired[pulumi.Input[_builtins.bool]] + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + keep_daily: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of daily backups to keep. Older backups will be removed. + """ + keep_hourly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of hourly backups to keep. Older backups will be removed. + """ + keep_last: NotRequired[pulumi.Input[_builtins.int]] + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + keep_monthly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of monthly backups to keep. Older backups will be removed. + """ + keep_weekly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of weekly backups to keep. Older backups will be removed. + """ + keep_yearly: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of yearly backups to keep. Older backups will be removed. + """ + max_protected_backups: NotRequired[pulumi.Input[_builtins.int]] + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ +elif False: + PBSBackupsArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class PBSBackupsArgs: + def __init__(__self__, *, + keep_all: Optional[pulumi.Input[_builtins.bool]] = None, + keep_daily: Optional[pulumi.Input[_builtins.int]] = None, + keep_hourly: Optional[pulumi.Input[_builtins.int]] = None, + keep_last: Optional[pulumi.Input[_builtins.int]] = None, + keep_monthly: Optional[pulumi.Input[_builtins.int]] = None, + keep_weekly: Optional[pulumi.Input[_builtins.int]] = None, + keep_yearly: Optional[pulumi.Input[_builtins.int]] = None, + max_protected_backups: Optional[pulumi.Input[_builtins.int]] = None): + """ + :param pulumi.Input[_builtins.bool] keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param pulumi.Input[_builtins.int] keep_daily: The number of daily backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param pulumi.Input[_builtins.int] keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param pulumi.Input[_builtins.int] max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @keep_all.setter + def keep_all(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "keep_all", value) + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @keep_daily.setter + def keep_daily(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_daily", value) + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @keep_hourly.setter + def keep_hourly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_hourly", value) + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @keep_last.setter + def keep_last(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_last", value) + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @keep_monthly.setter + def keep_monthly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_monthly", value) + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @keep_weekly.setter + def keep_weekly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_weekly", value) + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @keep_yearly.setter + def keep_yearly(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "keep_yearly", value) + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + @max_protected_backups.setter + def max_protected_backups(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "max_protected_backups", value) + + if not MYPY: class GetDatastoresDatastoreArgsDict(TypedDict): content_types: Sequence[_builtins.str] diff --git a/sdk/python/pulumi_proxmoxve/storage/cifs.py b/sdk/python/pulumi_proxmoxve/storage/cifs.py new file mode 100644 index 00000000..a6a16c70 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/storage/cifs.py @@ -0,0 +1,800 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['CIFSArgs', 'CIFS'] + +@pulumi.input_type +class CIFSArgs: + def __init__(__self__, *, + cifs_id: pulumi.Input[_builtins.str], + password: pulumi.Input[_builtins.str], + server: pulumi.Input[_builtins.str], + share: pulumi.Input[_builtins.str], + username: pulumi.Input[_builtins.str], + backups: Optional[pulumi.Input['CIFSBackupsArgs']] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + domain: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None, + subdirectory: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a CIFS resource. + :param pulumi.Input[_builtins.str] cifs_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the SMB/CIFS server. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the SMB/CIFS server. + :param pulumi.Input[_builtins.str] share: The name of the SMB/CIFS share. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the SMB/CIFS server. + :param pulumi.Input['CIFSBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] domain: The SMB/CIFS domain. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + :param pulumi.Input[_builtins.str] subdirectory: A subdirectory to mount within the share. + """ + pulumi.set(__self__, "cifs_id", cifs_id) + pulumi.set(__self__, "password", password) + pulumi.set(__self__, "server", server) + pulumi.set(__self__, "share", share) + pulumi.set(__self__, "username", username) + if backups is not None: + pulumi.set(__self__, "backups", backups) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if domain is not None: + pulumi.set(__self__, "domain", domain) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if preallocation is not None: + pulumi.set(__self__, "preallocation", preallocation) + if snapshot_as_volume_chain is not None: + pulumi.set(__self__, "snapshot_as_volume_chain", snapshot_as_volume_chain) + if subdirectory is not None: + pulumi.set(__self__, "subdirectory", subdirectory) + + @_builtins.property + @pulumi.getter(name="cifsId") + def cifs_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "cifs_id") + + @cifs_id.setter + def cifs_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "cifs_id", value) + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Input[_builtins.str]: + """ + The password for authenticating with the SMB/CIFS server. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "password", value) + + @_builtins.property + @pulumi.getter + def server(self) -> pulumi.Input[_builtins.str]: + """ + The IP address or DNS name of the SMB/CIFS server. + """ + return pulumi.get(self, "server") + + @server.setter + def server(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "server", value) + + @_builtins.property + @pulumi.getter + def share(self) -> pulumi.Input[_builtins.str]: + """ + The name of the SMB/CIFS share. + """ + return pulumi.get(self, "share") + + @share.setter + def share(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "share", value) + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Input[_builtins.str]: + """ + The username for authenticating with the SMB/CIFS server. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "username", value) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['CIFSBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['CIFSBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def domain(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The SMB/CIFS domain. + """ + return pulumi.get(self, "domain") + + @domain.setter + def domain(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "domain", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def preallocation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @preallocation.setter + def preallocation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preallocation", value) + + @_builtins.property + @pulumi.getter(name="snapshotAsVolumeChain") + def snapshot_as_volume_chain(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable support for creating snapshots through volume backing-chains. + """ + return pulumi.get(self, "snapshot_as_volume_chain") + + @snapshot_as_volume_chain.setter + def snapshot_as_volume_chain(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "snapshot_as_volume_chain", value) + + @_builtins.property + @pulumi.getter + def subdirectory(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + A subdirectory to mount within the share. + """ + return pulumi.get(self, "subdirectory") + + @subdirectory.setter + def subdirectory(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "subdirectory", value) + + +@pulumi.input_type +class _CIFSState: + def __init__(__self__, *, + backups: Optional[pulumi.Input['CIFSBackupsArgs']] = None, + cifs_id: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + domain: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + share: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None, + subdirectory: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering CIFS resources. + :param pulumi.Input['CIFSBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[_builtins.str] cifs_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] domain: The SMB/CIFS domain. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the SMB/CIFS server. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the SMB/CIFS server. + :param pulumi.Input[_builtins.str] share: The name of the SMB/CIFS share. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + :param pulumi.Input[_builtins.str] subdirectory: A subdirectory to mount within the share. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the SMB/CIFS server. + """ + if backups is not None: + pulumi.set(__self__, "backups", backups) + if cifs_id is not None: + pulumi.set(__self__, "cifs_id", cifs_id) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if domain is not None: + pulumi.set(__self__, "domain", domain) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if password is not None: + pulumi.set(__self__, "password", password) + if preallocation is not None: + pulumi.set(__self__, "preallocation", preallocation) + if server is not None: + pulumi.set(__self__, "server", server) + if share is not None: + pulumi.set(__self__, "share", share) + if shared is not None: + pulumi.set(__self__, "shared", shared) + if snapshot_as_volume_chain is not None: + pulumi.set(__self__, "snapshot_as_volume_chain", snapshot_as_volume_chain) + if subdirectory is not None: + pulumi.set(__self__, "subdirectory", subdirectory) + if username is not None: + pulumi.set(__self__, "username", username) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['CIFSBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['CIFSBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter(name="cifsId") + def cifs_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "cifs_id") + + @cifs_id.setter + def cifs_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cifs_id", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def domain(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The SMB/CIFS domain. + """ + return pulumi.get(self, "domain") + + @domain.setter + def domain(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "domain", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The password for authenticating with the SMB/CIFS server. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "password", value) + + @_builtins.property + @pulumi.getter + def preallocation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @preallocation.setter + def preallocation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preallocation", value) + + @_builtins.property + @pulumi.getter + def server(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The IP address or DNS name of the SMB/CIFS server. + """ + return pulumi.get(self, "server") + + @server.setter + def server(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server", value) + + @_builtins.property + @pulumi.getter + def share(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The name of the SMB/CIFS share. + """ + return pulumi.get(self, "share") + + @share.setter + def share(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "share", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + @_builtins.property + @pulumi.getter(name="snapshotAsVolumeChain") + def snapshot_as_volume_chain(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable support for creating snapshots through volume backing-chains. + """ + return pulumi.get(self, "snapshot_as_volume_chain") + + @snapshot_as_volume_chain.setter + def snapshot_as_volume_chain(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "snapshot_as_volume_chain", value) + + @_builtins.property + @pulumi.getter + def subdirectory(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + A subdirectory to mount within the share. + """ + return pulumi.get(self, "subdirectory") + + @subdirectory.setter + def subdirectory(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "subdirectory", value) + + @_builtins.property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The username for authenticating with the SMB/CIFS server. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "username", value) + + +@pulumi.type_token("proxmoxve:Storage/cIFS:CIFS") +class CIFS(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['CIFSBackupsArgs', 'CIFSBackupsArgsDict']]] = None, + cifs_id: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + domain: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + share: Optional[pulumi.Input[_builtins.str]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None, + subdirectory: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Manages an SMB/CIFS based storage server in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.CIFS("example", + cifs_id="example-cifs", + nodes=["pve"], + server="10.0.0.20", + share="proxmox", + username="cifs-user", + password="cifs-password", + contents=["images"], + domain="WORKGROUP", + subdirectory="terraform", + preallocation="metadata", + snapshot_as_volume_chain=True, + backups={ + "max_protected_backups": 5, + "keep_daily": 7, + }) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['CIFSBackupsArgs', 'CIFSBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[_builtins.str] cifs_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] domain: The SMB/CIFS domain. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the SMB/CIFS server. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the SMB/CIFS server. + :param pulumi.Input[_builtins.str] share: The name of the SMB/CIFS share. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + :param pulumi.Input[_builtins.str] subdirectory: A subdirectory to mount within the share. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the SMB/CIFS server. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: CIFSArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages an SMB/CIFS based storage server in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.CIFS("example", + cifs_id="example-cifs", + nodes=["pve"], + server="10.0.0.20", + share="proxmox", + username="cifs-user", + password="cifs-password", + contents=["images"], + domain="WORKGROUP", + subdirectory="terraform", + preallocation="metadata", + snapshot_as_volume_chain=True, + backups={ + "max_protected_backups": 5, + "keep_daily": 7, + }) + ``` + + :param str resource_name: The name of the resource. + :param CIFSArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(CIFSArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['CIFSBackupsArgs', 'CIFSBackupsArgsDict']]] = None, + cifs_id: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + domain: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + share: Optional[pulumi.Input[_builtins.str]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None, + subdirectory: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = CIFSArgs.__new__(CIFSArgs) + + __props__.__dict__["backups"] = backups + if cifs_id is None and not opts.urn: + raise TypeError("Missing required property 'cifs_id'") + __props__.__dict__["cifs_id"] = cifs_id + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + __props__.__dict__["domain"] = domain + __props__.__dict__["nodes"] = nodes + if password is None and not opts.urn: + raise TypeError("Missing required property 'password'") + __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password) + __props__.__dict__["preallocation"] = preallocation + if server is None and not opts.urn: + raise TypeError("Missing required property 'server'") + __props__.__dict__["server"] = server + if share is None and not opts.urn: + raise TypeError("Missing required property 'share'") + __props__.__dict__["share"] = share + __props__.__dict__["snapshot_as_volume_chain"] = snapshot_as_volume_chain + __props__.__dict__["subdirectory"] = subdirectory + if username is None and not opts.urn: + raise TypeError("Missing required property 'username'") + __props__.__dict__["username"] = username + __props__.__dict__["shared"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["password"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(CIFS, __self__).__init__( + 'proxmoxve:Storage/cIFS:CIFS', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['CIFSBackupsArgs', 'CIFSBackupsArgsDict']]] = None, + cifs_id: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + domain: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + share: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None, + subdirectory: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None) -> 'CIFS': + """ + Get an existing CIFS resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['CIFSBackupsArgs', 'CIFSBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[_builtins.str] cifs_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] domain: The SMB/CIFS domain. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the SMB/CIFS server. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the SMB/CIFS server. + :param pulumi.Input[_builtins.str] share: The name of the SMB/CIFS share. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + :param pulumi.Input[_builtins.str] subdirectory: A subdirectory to mount within the share. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the SMB/CIFS server. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _CIFSState.__new__(_CIFSState) + + __props__.__dict__["backups"] = backups + __props__.__dict__["cifs_id"] = cifs_id + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + __props__.__dict__["domain"] = domain + __props__.__dict__["nodes"] = nodes + __props__.__dict__["password"] = password + __props__.__dict__["preallocation"] = preallocation + __props__.__dict__["server"] = server + __props__.__dict__["share"] = share + __props__.__dict__["shared"] = shared + __props__.__dict__["snapshot_as_volume_chain"] = snapshot_as_volume_chain + __props__.__dict__["subdirectory"] = subdirectory + __props__.__dict__["username"] = username + return CIFS(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def backups(self) -> pulumi.Output[Optional['outputs.CIFSBackups']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @_builtins.property + @pulumi.getter(name="cifsId") + def cifs_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "cifs_id") + + @_builtins.property + @pulumi.getter + def contents(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @_builtins.property + @pulumi.getter + def disable(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @_builtins.property + @pulumi.getter + def domain(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + The SMB/CIFS domain. + """ + return pulumi.get(self, "domain") + + @_builtins.property + @pulumi.getter + def nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Output[_builtins.str]: + """ + The password for authenticating with the SMB/CIFS server. + """ + return pulumi.get(self, "password") + + @_builtins.property + @pulumi.getter + def preallocation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @_builtins.property + @pulumi.getter + def server(self) -> pulumi.Output[_builtins.str]: + """ + The IP address or DNS name of the SMB/CIFS server. + """ + return pulumi.get(self, "server") + + @_builtins.property + @pulumi.getter + def share(self) -> pulumi.Output[_builtins.str]: + """ + The name of the SMB/CIFS share. + """ + return pulumi.get(self, "share") + + @_builtins.property + @pulumi.getter + def shared(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @_builtins.property + @pulumi.getter(name="snapshotAsVolumeChain") + def snapshot_as_volume_chain(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Enable support for creating snapshots through volume backing-chains. + """ + return pulumi.get(self, "snapshot_as_volume_chain") + + @_builtins.property + @pulumi.getter + def subdirectory(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + A subdirectory to mount within the share. + """ + return pulumi.get(self, "subdirectory") + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Output[_builtins.str]: + """ + The username for authenticating with the SMB/CIFS server. + """ + return pulumi.get(self, "username") + diff --git a/sdk/python/pulumi_proxmoxve/storage/directory.py b/sdk/python/pulumi_proxmoxve/storage/directory.py new file mode 100644 index 00000000..c2f81603 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/storage/directory.py @@ -0,0 +1,522 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['DirectoryArgs', 'Directory'] + +@pulumi.input_type +class DirectoryArgs: + def __init__(__self__, *, + directory_id: pulumi.Input[_builtins.str], + path: pulumi.Input[_builtins.str], + backups: Optional[pulumi.Input['DirectoryBackupsArgs']] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a Directory resource. + :param pulumi.Input[_builtins.str] directory_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] path: The path to the directory on the Proxmox node. + :param pulumi.Input['DirectoryBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + """ + pulumi.set(__self__, "directory_id", directory_id) + pulumi.set(__self__, "path", path) + if backups is not None: + pulumi.set(__self__, "backups", backups) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if preallocation is not None: + pulumi.set(__self__, "preallocation", preallocation) + if shared is not None: + pulumi.set(__self__, "shared", shared) + + @_builtins.property + @pulumi.getter(name="directoryId") + def directory_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "directory_id") + + @directory_id.setter + def directory_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "directory_id", value) + + @_builtins.property + @pulumi.getter + def path(self) -> pulumi.Input[_builtins.str]: + """ + The path to the directory on the Proxmox node. + """ + return pulumi.get(self, "path") + + @path.setter + def path(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "path", value) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['DirectoryBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['DirectoryBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def preallocation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @preallocation.setter + def preallocation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preallocation", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + +@pulumi.input_type +class _DirectoryState: + def __init__(__self__, *, + backups: Optional[pulumi.Input['DirectoryBackupsArgs']] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + directory_id: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None): + """ + Input properties used for looking up and filtering Directory resources. + :param pulumi.Input['DirectoryBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.str] directory_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] path: The path to the directory on the Proxmox node. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + """ + if backups is not None: + pulumi.set(__self__, "backups", backups) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if directory_id is not None: + pulumi.set(__self__, "directory_id", directory_id) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if path is not None: + pulumi.set(__self__, "path", path) + if preallocation is not None: + pulumi.set(__self__, "preallocation", preallocation) + if shared is not None: + pulumi.set(__self__, "shared", shared) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['DirectoryBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['DirectoryBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter(name="directoryId") + def directory_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "directory_id") + + @directory_id.setter + def directory_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "directory_id", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def path(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The path to the directory on the Proxmox node. + """ + return pulumi.get(self, "path") + + @path.setter + def path(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "path", value) + + @_builtins.property + @pulumi.getter + def preallocation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @preallocation.setter + def preallocation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preallocation", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + +@pulumi.type_token("proxmoxve:Storage/directory:Directory") +class Directory(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['DirectoryBackupsArgs', 'DirectoryBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + directory_id: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + """ + Manages directory-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.Directory("example", + directory_id="example-dir", + path="/var/lib/vz", + nodes=["pve"], + contents=["images"], + shared=True, + disable=False, + backups={ + "max_protected_backups": 5, + "keep_daily": 7, + }) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['DirectoryBackupsArgs', 'DirectoryBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.str] directory_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] path: The path to the directory on the Proxmox node. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: DirectoryArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages directory-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.Directory("example", + directory_id="example-dir", + path="/var/lib/vz", + nodes=["pve"], + contents=["images"], + shared=True, + disable=False, + backups={ + "max_protected_backups": 5, + "keep_daily": 7, + }) + ``` + + :param str resource_name: The name of the resource. + :param DirectoryArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(DirectoryArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['DirectoryBackupsArgs', 'DirectoryBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + directory_id: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = DirectoryArgs.__new__(DirectoryArgs) + + __props__.__dict__["backups"] = backups + __props__.__dict__["contents"] = contents + if directory_id is None and not opts.urn: + raise TypeError("Missing required property 'directory_id'") + __props__.__dict__["directory_id"] = directory_id + __props__.__dict__["disable"] = disable + __props__.__dict__["nodes"] = nodes + if path is None and not opts.urn: + raise TypeError("Missing required property 'path'") + __props__.__dict__["path"] = path + __props__.__dict__["preallocation"] = preallocation + __props__.__dict__["shared"] = shared + super(Directory, __self__).__init__( + 'proxmoxve:Storage/directory:Directory', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['DirectoryBackupsArgs', 'DirectoryBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + directory_id: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + path: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None) -> 'Directory': + """ + Get an existing Directory resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['DirectoryBackupsArgs', 'DirectoryBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.str] directory_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] path: The path to the directory on the Proxmox node. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _DirectoryState.__new__(_DirectoryState) + + __props__.__dict__["backups"] = backups + __props__.__dict__["contents"] = contents + __props__.__dict__["directory_id"] = directory_id + __props__.__dict__["disable"] = disable + __props__.__dict__["nodes"] = nodes + __props__.__dict__["path"] = path + __props__.__dict__["preallocation"] = preallocation + __props__.__dict__["shared"] = shared + return Directory(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def backups(self) -> pulumi.Output[Optional['outputs.DirectoryBackups']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @_builtins.property + @pulumi.getter + def contents(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @_builtins.property + @pulumi.getter(name="directoryId") + def directory_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "directory_id") + + @_builtins.property + @pulumi.getter + def disable(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @_builtins.property + @pulumi.getter + def nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @_builtins.property + @pulumi.getter + def path(self) -> pulumi.Output[_builtins.str]: + """ + The path to the directory on the Proxmox node. + """ + return pulumi.get(self, "path") + + @_builtins.property + @pulumi.getter + def preallocation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @_builtins.property + @pulumi.getter + def shared(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + diff --git a/sdk/python/pulumi_proxmoxve/storage/lvm.py b/sdk/python/pulumi_proxmoxve/storage/lvm.py new file mode 100644 index 00000000..3a7ce719 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/storage/lvm.py @@ -0,0 +1,463 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['LVMArgs', 'LVM'] + +@pulumi.input_type +class LVMArgs: + def __init__(__self__, *, + lvm_id: pulumi.Input[_builtins.str], + volume_group: pulumi.Input[_builtins.str], + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + wipe_removed_volumes: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a LVM resource. + :param pulumi.Input[_builtins.str] lvm_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.bool] wipe_removed_volumes: Whether to zero-out data when removing LVMs. + """ + pulumi.set(__self__, "lvm_id", lvm_id) + pulumi.set(__self__, "volume_group", volume_group) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if shared is not None: + pulumi.set(__self__, "shared", shared) + if wipe_removed_volumes is not None: + pulumi.set(__self__, "wipe_removed_volumes", wipe_removed_volumes) + + @_builtins.property + @pulumi.getter(name="lvmId") + def lvm_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "lvm_id") + + @lvm_id.setter + def lvm_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "lvm_id", value) + + @_builtins.property + @pulumi.getter(name="volumeGroup") + def volume_group(self) -> pulumi.Input[_builtins.str]: + """ + The name of the volume group to use. + """ + return pulumi.get(self, "volume_group") + + @volume_group.setter + def volume_group(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "volume_group", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + @_builtins.property + @pulumi.getter(name="wipeRemovedVolumes") + def wipe_removed_volumes(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether to zero-out data when removing LVMs. + """ + return pulumi.get(self, "wipe_removed_volumes") + + @wipe_removed_volumes.setter + def wipe_removed_volumes(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "wipe_removed_volumes", value) + + +@pulumi.input_type +class _LVMState: + def __init__(__self__, *, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None, + wipe_removed_volumes: Optional[pulumi.Input[_builtins.bool]] = None): + """ + Input properties used for looking up and filtering LVM resources. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] lvm_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + :param pulumi.Input[_builtins.bool] wipe_removed_volumes: Whether to zero-out data when removing LVMs. + """ + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if lvm_id is not None: + pulumi.set(__self__, "lvm_id", lvm_id) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if shared is not None: + pulumi.set(__self__, "shared", shared) + if volume_group is not None: + pulumi.set(__self__, "volume_group", volume_group) + if wipe_removed_volumes is not None: + pulumi.set(__self__, "wipe_removed_volumes", wipe_removed_volumes) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter(name="lvmId") + def lvm_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "lvm_id") + + @lvm_id.setter + def lvm_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "lvm_id", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + @_builtins.property + @pulumi.getter(name="volumeGroup") + def volume_group(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The name of the volume group to use. + """ + return pulumi.get(self, "volume_group") + + @volume_group.setter + def volume_group(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "volume_group", value) + + @_builtins.property + @pulumi.getter(name="wipeRemovedVolumes") + def wipe_removed_volumes(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether to zero-out data when removing LVMs. + """ + return pulumi.get(self, "wipe_removed_volumes") + + @wipe_removed_volumes.setter + def wipe_removed_volumes(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "wipe_removed_volumes", value) + + +@pulumi.type_token("proxmoxve:Storage/lVM:LVM") +class LVM(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None, + wipe_removed_volumes: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + """ + Manages LVM-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.LVM("example", + lvm_id="example-lvm", + nodes=["pve"], + volume_group="vg0", + contents=["images"], + wipe_removed_volumes=False) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] lvm_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + :param pulumi.Input[_builtins.bool] wipe_removed_volumes: Whether to zero-out data when removing LVMs. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: LVMArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages LVM-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.LVM("example", + lvm_id="example-lvm", + nodes=["pve"], + volume_group="vg0", + contents=["images"], + wipe_removed_volumes=False) + ``` + + :param str resource_name: The name of the resource. + :param LVMArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(LVMArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None, + wipe_removed_volumes: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = LVMArgs.__new__(LVMArgs) + + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + if lvm_id is None and not opts.urn: + raise TypeError("Missing required property 'lvm_id'") + __props__.__dict__["lvm_id"] = lvm_id + __props__.__dict__["nodes"] = nodes + __props__.__dict__["shared"] = shared + if volume_group is None and not opts.urn: + raise TypeError("Missing required property 'volume_group'") + __props__.__dict__["volume_group"] = volume_group + __props__.__dict__["wipe_removed_volumes"] = wipe_removed_volumes + super(LVM, __self__).__init__( + 'proxmoxve:Storage/lVM:LVM', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None, + wipe_removed_volumes: Optional[pulumi.Input[_builtins.bool]] = None) -> 'LVM': + """ + Get an existing LVM resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] lvm_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + :param pulumi.Input[_builtins.bool] wipe_removed_volumes: Whether to zero-out data when removing LVMs. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _LVMState.__new__(_LVMState) + + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + __props__.__dict__["lvm_id"] = lvm_id + __props__.__dict__["nodes"] = nodes + __props__.__dict__["shared"] = shared + __props__.__dict__["volume_group"] = volume_group + __props__.__dict__["wipe_removed_volumes"] = wipe_removed_volumes + return LVM(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def contents(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @_builtins.property + @pulumi.getter + def disable(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @_builtins.property + @pulumi.getter(name="lvmId") + def lvm_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "lvm_id") + + @_builtins.property + @pulumi.getter + def nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @_builtins.property + @pulumi.getter + def shared(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @_builtins.property + @pulumi.getter(name="volumeGroup") + def volume_group(self) -> pulumi.Output[_builtins.str]: + """ + The name of the volume group to use. + """ + return pulumi.get(self, "volume_group") + + @_builtins.property + @pulumi.getter(name="wipeRemovedVolumes") + def wipe_removed_volumes(self) -> pulumi.Output[_builtins.bool]: + """ + Whether to zero-out data when removing LVMs. + """ + return pulumi.get(self, "wipe_removed_volumes") + diff --git a/sdk/python/pulumi_proxmoxve/storage/lvm_thin.py b/sdk/python/pulumi_proxmoxve/storage/lvm_thin.py new file mode 100644 index 00000000..d10a37bf --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/storage/lvm_thin.py @@ -0,0 +1,445 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['LVMThinArgs', 'LVMThin'] + +@pulumi.input_type +class LVMThinArgs: + def __init__(__self__, *, + lvm_thin_id: pulumi.Input[_builtins.str], + thin_pool: pulumi.Input[_builtins.str], + volume_group: pulumi.Input[_builtins.str], + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + The set of arguments for constructing a LVMThin resource. + :param pulumi.Input[_builtins.str] lvm_thin_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] thin_pool: The name of the LVM thin pool to use. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + """ + pulumi.set(__self__, "lvm_thin_id", lvm_thin_id) + pulumi.set(__self__, "thin_pool", thin_pool) + pulumi.set(__self__, "volume_group", volume_group) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + + @_builtins.property + @pulumi.getter(name="lvmThinId") + def lvm_thin_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "lvm_thin_id") + + @lvm_thin_id.setter + def lvm_thin_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "lvm_thin_id", value) + + @_builtins.property + @pulumi.getter(name="thinPool") + def thin_pool(self) -> pulumi.Input[_builtins.str]: + """ + The name of the LVM thin pool to use. + """ + return pulumi.get(self, "thin_pool") + + @thin_pool.setter + def thin_pool(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "thin_pool", value) + + @_builtins.property + @pulumi.getter(name="volumeGroup") + def volume_group(self) -> pulumi.Input[_builtins.str]: + """ + The name of the volume group to use. + """ + return pulumi.get(self, "volume_group") + + @volume_group.setter + def volume_group(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "volume_group", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + +@pulumi.input_type +class _LVMThinState: + def __init__(__self__, *, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_thin_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + thin_pool: Optional[pulumi.Input[_builtins.str]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering LVMThin resources. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] lvm_thin_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.str] thin_pool: The name of the LVM thin pool to use. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + """ + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if lvm_thin_id is not None: + pulumi.set(__self__, "lvm_thin_id", lvm_thin_id) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if shared is not None: + pulumi.set(__self__, "shared", shared) + if thin_pool is not None: + pulumi.set(__self__, "thin_pool", thin_pool) + if volume_group is not None: + pulumi.set(__self__, "volume_group", volume_group) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter(name="lvmThinId") + def lvm_thin_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "lvm_thin_id") + + @lvm_thin_id.setter + def lvm_thin_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "lvm_thin_id", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + @_builtins.property + @pulumi.getter(name="thinPool") + def thin_pool(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The name of the LVM thin pool to use. + """ + return pulumi.get(self, "thin_pool") + + @thin_pool.setter + def thin_pool(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "thin_pool", value) + + @_builtins.property + @pulumi.getter(name="volumeGroup") + def volume_group(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The name of the volume group to use. + """ + return pulumi.get(self, "volume_group") + + @volume_group.setter + def volume_group(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "volume_group", value) + + +@pulumi.type_token("proxmoxve:Storage/lVMThin:LVMThin") +class LVMThin(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_thin_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + thin_pool: Optional[pulumi.Input[_builtins.str]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Manages thin LVM-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.LVMThin("example", + lvm_thin_id="example-lvmthin", + nodes=["pve"], + volume_group="vg0", + thin_pool="data", + contents=["images"]) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] lvm_thin_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] thin_pool: The name of the LVM thin pool to use. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: LVMThinArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages thin LVM-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.LVMThin("example", + lvm_thin_id="example-lvmthin", + nodes=["pve"], + volume_group="vg0", + thin_pool="data", + contents=["images"]) + ``` + + :param str resource_name: The name of the resource. + :param LVMThinArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(LVMThinArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_thin_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + thin_pool: Optional[pulumi.Input[_builtins.str]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = LVMThinArgs.__new__(LVMThinArgs) + + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + if lvm_thin_id is None and not opts.urn: + raise TypeError("Missing required property 'lvm_thin_id'") + __props__.__dict__["lvm_thin_id"] = lvm_thin_id + __props__.__dict__["nodes"] = nodes + if thin_pool is None and not opts.urn: + raise TypeError("Missing required property 'thin_pool'") + __props__.__dict__["thin_pool"] = thin_pool + if volume_group is None and not opts.urn: + raise TypeError("Missing required property 'volume_group'") + __props__.__dict__["volume_group"] = volume_group + __props__.__dict__["shared"] = None + super(LVMThin, __self__).__init__( + 'proxmoxve:Storage/lVMThin:LVMThin', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + lvm_thin_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + thin_pool: Optional[pulumi.Input[_builtins.str]] = None, + volume_group: Optional[pulumi.Input[_builtins.str]] = None) -> 'LVMThin': + """ + Get an existing LVMThin resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] lvm_thin_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.str] thin_pool: The name of the LVM thin pool to use. + :param pulumi.Input[_builtins.str] volume_group: The name of the volume group to use. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _LVMThinState.__new__(_LVMThinState) + + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + __props__.__dict__["lvm_thin_id"] = lvm_thin_id + __props__.__dict__["nodes"] = nodes + __props__.__dict__["shared"] = shared + __props__.__dict__["thin_pool"] = thin_pool + __props__.__dict__["volume_group"] = volume_group + return LVMThin(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def contents(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @_builtins.property + @pulumi.getter + def disable(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @_builtins.property + @pulumi.getter(name="lvmThinId") + def lvm_thin_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "lvm_thin_id") + + @_builtins.property + @pulumi.getter + def nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @_builtins.property + @pulumi.getter + def shared(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @_builtins.property + @pulumi.getter(name="thinPool") + def thin_pool(self) -> pulumi.Output[_builtins.str]: + """ + The name of the LVM thin pool to use. + """ + return pulumi.get(self, "thin_pool") + + @_builtins.property + @pulumi.getter(name="volumeGroup") + def volume_group(self) -> pulumi.Output[_builtins.str]: + """ + The name of the volume group to use. + """ + return pulumi.get(self, "volume_group") + diff --git a/sdk/python/pulumi_proxmoxve/storage/nfs.py b/sdk/python/pulumi_proxmoxve/storage/nfs.py new file mode 100644 index 00000000..ad07f740 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/storage/nfs.py @@ -0,0 +1,657 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['NFSArgs', 'NFS'] + +@pulumi.input_type +class NFSArgs: + def __init__(__self__, *, + export: pulumi.Input[_builtins.str], + nfs_id: pulumi.Input[_builtins.str], + server: pulumi.Input[_builtins.str], + backups: Optional[pulumi.Input['NFSBackupsArgs']] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + options: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a NFS resource. + :param pulumi.Input[_builtins.str] export: The path of the NFS export. + :param pulumi.Input[_builtins.str] nfs_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the NFS server. + :param pulumi.Input['NFSBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] options: The options to pass to the NFS service. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + """ + pulumi.set(__self__, "export", export) + pulumi.set(__self__, "nfs_id", nfs_id) + pulumi.set(__self__, "server", server) + if backups is not None: + pulumi.set(__self__, "backups", backups) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if options is not None: + pulumi.set(__self__, "options", options) + if preallocation is not None: + pulumi.set(__self__, "preallocation", preallocation) + if snapshot_as_volume_chain is not None: + pulumi.set(__self__, "snapshot_as_volume_chain", snapshot_as_volume_chain) + + @_builtins.property + @pulumi.getter + def export(self) -> pulumi.Input[_builtins.str]: + """ + The path of the NFS export. + """ + return pulumi.get(self, "export") + + @export.setter + def export(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "export", value) + + @_builtins.property + @pulumi.getter(name="nfsId") + def nfs_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "nfs_id") + + @nfs_id.setter + def nfs_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "nfs_id", value) + + @_builtins.property + @pulumi.getter + def server(self) -> pulumi.Input[_builtins.str]: + """ + The IP address or DNS name of the NFS server. + """ + return pulumi.get(self, "server") + + @server.setter + def server(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "server", value) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['NFSBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['NFSBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def options(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The options to pass to the NFS service. + """ + return pulumi.get(self, "options") + + @options.setter + def options(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "options", value) + + @_builtins.property + @pulumi.getter + def preallocation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @preallocation.setter + def preallocation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preallocation", value) + + @_builtins.property + @pulumi.getter(name="snapshotAsVolumeChain") + def snapshot_as_volume_chain(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable support for creating snapshots through volume backing-chains. + """ + return pulumi.get(self, "snapshot_as_volume_chain") + + @snapshot_as_volume_chain.setter + def snapshot_as_volume_chain(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "snapshot_as_volume_chain", value) + + +@pulumi.input_type +class _NFSState: + def __init__(__self__, *, + backups: Optional[pulumi.Input['NFSBackupsArgs']] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + export: Optional[pulumi.Input[_builtins.str]] = None, + nfs_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + options: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None): + """ + Input properties used for looking up and filtering NFS resources. + :param pulumi.Input['NFSBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] export: The path of the NFS export. + :param pulumi.Input[_builtins.str] nfs_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] options: The options to pass to the NFS service. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the NFS server. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + """ + if backups is not None: + pulumi.set(__self__, "backups", backups) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if export is not None: + pulumi.set(__self__, "export", export) + if nfs_id is not None: + pulumi.set(__self__, "nfs_id", nfs_id) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if options is not None: + pulumi.set(__self__, "options", options) + if preallocation is not None: + pulumi.set(__self__, "preallocation", preallocation) + if server is not None: + pulumi.set(__self__, "server", server) + if shared is not None: + pulumi.set(__self__, "shared", shared) + if snapshot_as_volume_chain is not None: + pulumi.set(__self__, "snapshot_as_volume_chain", snapshot_as_volume_chain) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['NFSBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['NFSBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def export(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The path of the NFS export. + """ + return pulumi.get(self, "export") + + @export.setter + def export(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "export", value) + + @_builtins.property + @pulumi.getter(name="nfsId") + def nfs_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "nfs_id") + + @nfs_id.setter + def nfs_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "nfs_id", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def options(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The options to pass to the NFS service. + """ + return pulumi.get(self, "options") + + @options.setter + def options(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "options", value) + + @_builtins.property + @pulumi.getter + def preallocation(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @preallocation.setter + def preallocation(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "preallocation", value) + + @_builtins.property + @pulumi.getter + def server(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The IP address or DNS name of the NFS server. + """ + return pulumi.get(self, "server") + + @server.setter + def server(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + @_builtins.property + @pulumi.getter(name="snapshotAsVolumeChain") + def snapshot_as_volume_chain(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable support for creating snapshots through volume backing-chains. + """ + return pulumi.get(self, "snapshot_as_volume_chain") + + @snapshot_as_volume_chain.setter + def snapshot_as_volume_chain(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "snapshot_as_volume_chain", value) + + +@pulumi.type_token("proxmoxve:Storage/nFS:NFS") +class NFS(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['NFSBackupsArgs', 'NFSBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + export: Optional[pulumi.Input[_builtins.str]] = None, + nfs_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + options: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + """ + Manages an NFS-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.NFS("example", + nfs_id="example-nfs", + nodes=["pve"], + server="10.0.0.10", + export="/exports/proxmox", + contents=[ + "images", + "iso", + "backup", + ], + options="vers=4.2", + preallocation="metadata", + snapshot_as_volume_chain=True, + backups={ + "max_protected_backups": 5, + "keep_daily": 7, + }) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['NFSBackupsArgs', 'NFSBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] export: The path of the NFS export. + :param pulumi.Input[_builtins.str] nfs_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] options: The options to pass to the NFS service. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the NFS server. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: NFSArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages an NFS-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.NFS("example", + nfs_id="example-nfs", + nodes=["pve"], + server="10.0.0.10", + export="/exports/proxmox", + contents=[ + "images", + "iso", + "backup", + ], + options="vers=4.2", + preallocation="metadata", + snapshot_as_volume_chain=True, + backups={ + "max_protected_backups": 5, + "keep_daily": 7, + }) + ``` + + :param str resource_name: The name of the resource. + :param NFSArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(NFSArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['NFSBackupsArgs', 'NFSBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + export: Optional[pulumi.Input[_builtins.str]] = None, + nfs_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + options: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = NFSArgs.__new__(NFSArgs) + + __props__.__dict__["backups"] = backups + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + if export is None and not opts.urn: + raise TypeError("Missing required property 'export'") + __props__.__dict__["export"] = export + if nfs_id is None and not opts.urn: + raise TypeError("Missing required property 'nfs_id'") + __props__.__dict__["nfs_id"] = nfs_id + __props__.__dict__["nodes"] = nodes + __props__.__dict__["options"] = options + __props__.__dict__["preallocation"] = preallocation + if server is None and not opts.urn: + raise TypeError("Missing required property 'server'") + __props__.__dict__["server"] = server + __props__.__dict__["snapshot_as_volume_chain"] = snapshot_as_volume_chain + __props__.__dict__["shared"] = None + super(NFS, __self__).__init__( + 'proxmoxve:Storage/nFS:NFS', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['NFSBackupsArgs', 'NFSBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + export: Optional[pulumi.Input[_builtins.str]] = None, + nfs_id: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + options: Optional[pulumi.Input[_builtins.str]] = None, + preallocation: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + snapshot_as_volume_chain: Optional[pulumi.Input[_builtins.bool]] = None) -> 'NFS': + """ + Get an existing NFS resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['NFSBackupsArgs', 'NFSBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] export: The path of the NFS export. + :param pulumi.Input[_builtins.str] nfs_id: The unique identifier of the storage. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] options: The options to pass to the NFS service. + :param pulumi.Input[_builtins.str] preallocation: The preallocation mode for raw and qcow2 images. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the NFS server. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.bool] snapshot_as_volume_chain: Enable support for creating snapshots through volume backing-chains. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _NFSState.__new__(_NFSState) + + __props__.__dict__["backups"] = backups + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + __props__.__dict__["export"] = export + __props__.__dict__["nfs_id"] = nfs_id + __props__.__dict__["nodes"] = nodes + __props__.__dict__["options"] = options + __props__.__dict__["preallocation"] = preallocation + __props__.__dict__["server"] = server + __props__.__dict__["shared"] = shared + __props__.__dict__["snapshot_as_volume_chain"] = snapshot_as_volume_chain + return NFS(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def backups(self) -> pulumi.Output[Optional['outputs.NFSBackups']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @_builtins.property + @pulumi.getter + def contents(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @_builtins.property + @pulumi.getter + def disable(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @_builtins.property + @pulumi.getter + def export(self) -> pulumi.Output[_builtins.str]: + """ + The path of the NFS export. + """ + return pulumi.get(self, "export") + + @_builtins.property + @pulumi.getter(name="nfsId") + def nfs_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "nfs_id") + + @_builtins.property + @pulumi.getter + def nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @_builtins.property + @pulumi.getter + def options(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + The options to pass to the NFS service. + """ + return pulumi.get(self, "options") + + @_builtins.property + @pulumi.getter + def preallocation(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + The preallocation mode for raw and qcow2 images. + """ + return pulumi.get(self, "preallocation") + + @_builtins.property + @pulumi.getter + def server(self) -> pulumi.Output[_builtins.str]: + """ + The IP address or DNS name of the NFS server. + """ + return pulumi.get(self, "server") + + @_builtins.property + @pulumi.getter + def shared(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @_builtins.property + @pulumi.getter(name="snapshotAsVolumeChain") + def snapshot_as_volume_chain(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Enable support for creating snapshots through volume backing-chains. + """ + return pulumi.get(self, "snapshot_as_volume_chain") + diff --git a/sdk/python/pulumi_proxmoxve/storage/outputs.py b/sdk/python/pulumi_proxmoxve/storage/outputs.py index 0ac69c6f..529c0a2e 100644 --- a/sdk/python/pulumi_proxmoxve/storage/outputs.py +++ b/sdk/python/pulumi_proxmoxve/storage/outputs.py @@ -15,12 +15,284 @@ from .. import _utilities __all__ = [ + 'CIFSBackups', + 'DirectoryBackups', 'FileSourceFile', 'FileSourceRaw', + 'NFSBackups', + 'PBSBackups', 'GetDatastoresDatastoreResult', 'GetDatastoresFiltersResult', ] +@pulumi.output_type +class CIFSBackups(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "keepAll": + suggest = "keep_all" + elif key == "keepDaily": + suggest = "keep_daily" + elif key == "keepHourly": + suggest = "keep_hourly" + elif key == "keepLast": + suggest = "keep_last" + elif key == "keepMonthly": + suggest = "keep_monthly" + elif key == "keepWeekly": + suggest = "keep_weekly" + elif key == "keepYearly": + suggest = "keep_yearly" + elif key == "maxProtectedBackups": + suggest = "max_protected_backups" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in CIFSBackups. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + CIFSBackups.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + CIFSBackups.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + keep_all: Optional[_builtins.bool] = None, + keep_daily: Optional[_builtins.int] = None, + keep_hourly: Optional[_builtins.int] = None, + keep_last: Optional[_builtins.int] = None, + keep_monthly: Optional[_builtins.int] = None, + keep_weekly: Optional[_builtins.int] = None, + keep_yearly: Optional[_builtins.int] = None, + max_protected_backups: Optional[_builtins.int] = None): + """ + :param _builtins.bool keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param _builtins.int keep_daily: The number of daily backups to keep. Older backups will be removed. + :param _builtins.int keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param _builtins.int keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param _builtins.int keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param _builtins.int keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param _builtins.int keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param _builtins.int max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[_builtins.bool]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[_builtins.int]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[_builtins.int]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[_builtins.int]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[_builtins.int]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[_builtins.int]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[_builtins.int]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[_builtins.int]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + +@pulumi.output_type +class DirectoryBackups(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "keepAll": + suggest = "keep_all" + elif key == "keepDaily": + suggest = "keep_daily" + elif key == "keepHourly": + suggest = "keep_hourly" + elif key == "keepLast": + suggest = "keep_last" + elif key == "keepMonthly": + suggest = "keep_monthly" + elif key == "keepWeekly": + suggest = "keep_weekly" + elif key == "keepYearly": + suggest = "keep_yearly" + elif key == "maxProtectedBackups": + suggest = "max_protected_backups" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in DirectoryBackups. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + DirectoryBackups.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + DirectoryBackups.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + keep_all: Optional[_builtins.bool] = None, + keep_daily: Optional[_builtins.int] = None, + keep_hourly: Optional[_builtins.int] = None, + keep_last: Optional[_builtins.int] = None, + keep_monthly: Optional[_builtins.int] = None, + keep_weekly: Optional[_builtins.int] = None, + keep_yearly: Optional[_builtins.int] = None, + max_protected_backups: Optional[_builtins.int] = None): + """ + :param _builtins.bool keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param _builtins.int keep_daily: The number of daily backups to keep. Older backups will be removed. + :param _builtins.int keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param _builtins.int keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param _builtins.int keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param _builtins.int keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param _builtins.int keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param _builtins.int max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[_builtins.bool]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[_builtins.int]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[_builtins.int]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[_builtins.int]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[_builtins.int]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[_builtins.int]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[_builtins.int]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[_builtins.int]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + @pulumi.output_type class FileSourceFile(dict): @staticmethod @@ -184,6 +456,274 @@ def resize(self) -> Optional[_builtins.int]: return pulumi.get(self, "resize") +@pulumi.output_type +class NFSBackups(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "keepAll": + suggest = "keep_all" + elif key == "keepDaily": + suggest = "keep_daily" + elif key == "keepHourly": + suggest = "keep_hourly" + elif key == "keepLast": + suggest = "keep_last" + elif key == "keepMonthly": + suggest = "keep_monthly" + elif key == "keepWeekly": + suggest = "keep_weekly" + elif key == "keepYearly": + suggest = "keep_yearly" + elif key == "maxProtectedBackups": + suggest = "max_protected_backups" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in NFSBackups. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + NFSBackups.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + NFSBackups.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + keep_all: Optional[_builtins.bool] = None, + keep_daily: Optional[_builtins.int] = None, + keep_hourly: Optional[_builtins.int] = None, + keep_last: Optional[_builtins.int] = None, + keep_monthly: Optional[_builtins.int] = None, + keep_weekly: Optional[_builtins.int] = None, + keep_yearly: Optional[_builtins.int] = None, + max_protected_backups: Optional[_builtins.int] = None): + """ + :param _builtins.bool keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param _builtins.int keep_daily: The number of daily backups to keep. Older backups will be removed. + :param _builtins.int keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param _builtins.int keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param _builtins.int keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param _builtins.int keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param _builtins.int keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param _builtins.int max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[_builtins.bool]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[_builtins.int]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[_builtins.int]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[_builtins.int]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[_builtins.int]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[_builtins.int]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[_builtins.int]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[_builtins.int]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + +@pulumi.output_type +class PBSBackups(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "keepAll": + suggest = "keep_all" + elif key == "keepDaily": + suggest = "keep_daily" + elif key == "keepHourly": + suggest = "keep_hourly" + elif key == "keepLast": + suggest = "keep_last" + elif key == "keepMonthly": + suggest = "keep_monthly" + elif key == "keepWeekly": + suggest = "keep_weekly" + elif key == "keepYearly": + suggest = "keep_yearly" + elif key == "maxProtectedBackups": + suggest = "max_protected_backups" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in PBSBackups. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + PBSBackups.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + PBSBackups.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + keep_all: Optional[_builtins.bool] = None, + keep_daily: Optional[_builtins.int] = None, + keep_hourly: Optional[_builtins.int] = None, + keep_last: Optional[_builtins.int] = None, + keep_monthly: Optional[_builtins.int] = None, + keep_weekly: Optional[_builtins.int] = None, + keep_yearly: Optional[_builtins.int] = None, + max_protected_backups: Optional[_builtins.int] = None): + """ + :param _builtins.bool keep_all: Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + :param _builtins.int keep_daily: The number of daily backups to keep. Older backups will be removed. + :param _builtins.int keep_hourly: The number of hourly backups to keep. Older backups will be removed. + :param _builtins.int keep_last: Specifies the number of the most recent backups to keep, regardless of their age. + :param _builtins.int keep_monthly: The number of monthly backups to keep. Older backups will be removed. + :param _builtins.int keep_weekly: The number of weekly backups to keep. Older backups will be removed. + :param _builtins.int keep_yearly: The number of yearly backups to keep. Older backups will be removed. + :param _builtins.int max_protected_backups: The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + if keep_all is not None: + pulumi.set(__self__, "keep_all", keep_all) + if keep_daily is not None: + pulumi.set(__self__, "keep_daily", keep_daily) + if keep_hourly is not None: + pulumi.set(__self__, "keep_hourly", keep_hourly) + if keep_last is not None: + pulumi.set(__self__, "keep_last", keep_last) + if keep_monthly is not None: + pulumi.set(__self__, "keep_monthly", keep_monthly) + if keep_weekly is not None: + pulumi.set(__self__, "keep_weekly", keep_weekly) + if keep_yearly is not None: + pulumi.set(__self__, "keep_yearly", keep_yearly) + if max_protected_backups is not None: + pulumi.set(__self__, "max_protected_backups", max_protected_backups) + + @_builtins.property + @pulumi.getter(name="keepAll") + def keep_all(self) -> Optional[_builtins.bool]: + """ + Specifies if all backups should be kept, regardless of their age. When set to true, other keep_* attributes must not be set. + """ + return pulumi.get(self, "keep_all") + + @_builtins.property + @pulumi.getter(name="keepDaily") + def keep_daily(self) -> Optional[_builtins.int]: + """ + The number of daily backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_daily") + + @_builtins.property + @pulumi.getter(name="keepHourly") + def keep_hourly(self) -> Optional[_builtins.int]: + """ + The number of hourly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_hourly") + + @_builtins.property + @pulumi.getter(name="keepLast") + def keep_last(self) -> Optional[_builtins.int]: + """ + Specifies the number of the most recent backups to keep, regardless of their age. + """ + return pulumi.get(self, "keep_last") + + @_builtins.property + @pulumi.getter(name="keepMonthly") + def keep_monthly(self) -> Optional[_builtins.int]: + """ + The number of monthly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_monthly") + + @_builtins.property + @pulumi.getter(name="keepWeekly") + def keep_weekly(self) -> Optional[_builtins.int]: + """ + The number of weekly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_weekly") + + @_builtins.property + @pulumi.getter(name="keepYearly") + def keep_yearly(self) -> Optional[_builtins.int]: + """ + The number of yearly backups to keep. Older backups will be removed. + """ + return pulumi.get(self, "keep_yearly") + + @_builtins.property + @pulumi.getter(name="maxProtectedBackups") + def max_protected_backups(self) -> Optional[_builtins.int]: + """ + The maximum number of protected backups per guest. Use '-1' for unlimited. + """ + return pulumi.get(self, "max_protected_backups") + + @pulumi.output_type class GetDatastoresDatastoreResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_proxmoxve/storage/pbs.py b/sdk/python/pulumi_proxmoxve/storage/pbs.py new file mode 100644 index 00000000..2dfacf14 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/storage/pbs.py @@ -0,0 +1,844 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['PBSArgs', 'PBS'] + +@pulumi.input_type +class PBSArgs: + def __init__(__self__, *, + datastore: pulumi.Input[_builtins.str], + password: pulumi.Input[_builtins.str], + pbs_id: pulumi.Input[_builtins.str], + server: pulumi.Input[_builtins.str], + username: pulumi.Input[_builtins.str], + backups: Optional[pulumi.Input['PBSBackupsArgs']] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + encryption_key: Optional[pulumi.Input[_builtins.str]] = None, + fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + generate_encryption_key: Optional[pulumi.Input[_builtins.bool]] = None, + namespace: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + The set of arguments for constructing a PBS resource. + :param pulumi.Input[_builtins.str] datastore: The name of the datastore on the Proxmox Backup Server. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the Proxmox Backup Server. + :param pulumi.Input[_builtins.str] pbs_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the Proxmox Backup Server. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the Proxmox Backup Server. + :param pulumi.Input['PBSBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] encryption_key: An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generate_encryption_key`. + :param pulumi.Input[_builtins.str] fingerprint: The SHA256 fingerprint of the Proxmox Backup Server's certificate. + :param pulumi.Input[_builtins.bool] generate_encryption_key: If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generated_encryption_key` attribute. Conflicts with `encryption_key`. + :param pulumi.Input[_builtins.str] namespace: The namespace to use on the Proxmox Backup Server. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + """ + pulumi.set(__self__, "datastore", datastore) + pulumi.set(__self__, "password", password) + pulumi.set(__self__, "pbs_id", pbs_id) + pulumi.set(__self__, "server", server) + pulumi.set(__self__, "username", username) + if backups is not None: + pulumi.set(__self__, "backups", backups) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if encryption_key is not None: + pulumi.set(__self__, "encryption_key", encryption_key) + if fingerprint is not None: + pulumi.set(__self__, "fingerprint", fingerprint) + if generate_encryption_key is not None: + pulumi.set(__self__, "generate_encryption_key", generate_encryption_key) + if namespace is not None: + pulumi.set(__self__, "namespace", namespace) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + + @_builtins.property + @pulumi.getter + def datastore(self) -> pulumi.Input[_builtins.str]: + """ + The name of the datastore on the Proxmox Backup Server. + """ + return pulumi.get(self, "datastore") + + @datastore.setter + def datastore(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "datastore", value) + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Input[_builtins.str]: + """ + The password for authenticating with the Proxmox Backup Server. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "password", value) + + @_builtins.property + @pulumi.getter(name="pbsId") + def pbs_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "pbs_id") + + @pbs_id.setter + def pbs_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "pbs_id", value) + + @_builtins.property + @pulumi.getter + def server(self) -> pulumi.Input[_builtins.str]: + """ + The IP address or DNS name of the Proxmox Backup Server. + """ + return pulumi.get(self, "server") + + @server.setter + def server(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "server", value) + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Input[_builtins.str]: + """ + The username for authenticating with the Proxmox Backup Server. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "username", value) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['PBSBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['PBSBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter(name="encryptionKey") + def encryption_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generate_encryption_key`. + """ + return pulumi.get(self, "encryption_key") + + @encryption_key.setter + def encryption_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "encryption_key", value) + + @_builtins.property + @pulumi.getter + def fingerprint(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The SHA256 fingerprint of the Proxmox Backup Server's certificate. + """ + return pulumi.get(self, "fingerprint") + + @fingerprint.setter + def fingerprint(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "fingerprint", value) + + @_builtins.property + @pulumi.getter(name="generateEncryptionKey") + def generate_encryption_key(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generated_encryption_key` attribute. Conflicts with `encryption_key`. + """ + return pulumi.get(self, "generate_encryption_key") + + @generate_encryption_key.setter + def generate_encryption_key(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "generate_encryption_key", value) + + @_builtins.property + @pulumi.getter + def namespace(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The namespace to use on the Proxmox Backup Server. + """ + return pulumi.get(self, "namespace") + + @namespace.setter + def namespace(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "namespace", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + +@pulumi.input_type +class _PBSState: + def __init__(__self__, *, + backups: Optional[pulumi.Input['PBSBackupsArgs']] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + datastore: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + encryption_key: Optional[pulumi.Input[_builtins.str]] = None, + encryption_key_fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + generate_encryption_key: Optional[pulumi.Input[_builtins.bool]] = None, + generated_encryption_key: Optional[pulumi.Input[_builtins.str]] = None, + namespace: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + pbs_id: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering PBS resources. + :param pulumi.Input['PBSBackupsArgs'] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.str] datastore: The name of the datastore on the Proxmox Backup Server. + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] encryption_key: An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generate_encryption_key`. + :param pulumi.Input[_builtins.str] encryption_key_fingerprint: The SHA256 fingerprint of the encryption key currently in use. + :param pulumi.Input[_builtins.str] fingerprint: The SHA256 fingerprint of the Proxmox Backup Server's certificate. + :param pulumi.Input[_builtins.bool] generate_encryption_key: If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generated_encryption_key` attribute. Conflicts with `encryption_key`. + :param pulumi.Input[_builtins.str] generated_encryption_key: The encryption key returned by Proxmox when `generate_encryption_key` is true. + :param pulumi.Input[_builtins.str] namespace: The namespace to use on the Proxmox Backup Server. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the Proxmox Backup Server. + :param pulumi.Input[_builtins.str] pbs_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the Proxmox Backup Server. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the Proxmox Backup Server. + """ + if backups is not None: + pulumi.set(__self__, "backups", backups) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if datastore is not None: + pulumi.set(__self__, "datastore", datastore) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if encryption_key is not None: + pulumi.set(__self__, "encryption_key", encryption_key) + if encryption_key_fingerprint is not None: + pulumi.set(__self__, "encryption_key_fingerprint", encryption_key_fingerprint) + if fingerprint is not None: + pulumi.set(__self__, "fingerprint", fingerprint) + if generate_encryption_key is not None: + pulumi.set(__self__, "generate_encryption_key", generate_encryption_key) + if generated_encryption_key is not None: + pulumi.set(__self__, "generated_encryption_key", generated_encryption_key) + if namespace is not None: + pulumi.set(__self__, "namespace", namespace) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if password is not None: + pulumi.set(__self__, "password", password) + if pbs_id is not None: + pulumi.set(__self__, "pbs_id", pbs_id) + if server is not None: + pulumi.set(__self__, "server", server) + if shared is not None: + pulumi.set(__self__, "shared", shared) + if username is not None: + pulumi.set(__self__, "username", username) + + @_builtins.property + @pulumi.getter + def backups(self) -> Optional[pulumi.Input['PBSBackupsArgs']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @backups.setter + def backups(self, value: Optional[pulumi.Input['PBSBackupsArgs']]): + pulumi.set(self, "backups", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def datastore(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The name of the datastore on the Proxmox Backup Server. + """ + return pulumi.get(self, "datastore") + + @datastore.setter + def datastore(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "datastore", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter(name="encryptionKey") + def encryption_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generate_encryption_key`. + """ + return pulumi.get(self, "encryption_key") + + @encryption_key.setter + def encryption_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "encryption_key", value) + + @_builtins.property + @pulumi.getter(name="encryptionKeyFingerprint") + def encryption_key_fingerprint(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The SHA256 fingerprint of the encryption key currently in use. + """ + return pulumi.get(self, "encryption_key_fingerprint") + + @encryption_key_fingerprint.setter + def encryption_key_fingerprint(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "encryption_key_fingerprint", value) + + @_builtins.property + @pulumi.getter + def fingerprint(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The SHA256 fingerprint of the Proxmox Backup Server's certificate. + """ + return pulumi.get(self, "fingerprint") + + @fingerprint.setter + def fingerprint(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "fingerprint", value) + + @_builtins.property + @pulumi.getter(name="generateEncryptionKey") + def generate_encryption_key(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generated_encryption_key` attribute. Conflicts with `encryption_key`. + """ + return pulumi.get(self, "generate_encryption_key") + + @generate_encryption_key.setter + def generate_encryption_key(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "generate_encryption_key", value) + + @_builtins.property + @pulumi.getter(name="generatedEncryptionKey") + def generated_encryption_key(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The encryption key returned by Proxmox when `generate_encryption_key` is true. + """ + return pulumi.get(self, "generated_encryption_key") + + @generated_encryption_key.setter + def generated_encryption_key(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "generated_encryption_key", value) + + @_builtins.property + @pulumi.getter + def namespace(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The namespace to use on the Proxmox Backup Server. + """ + return pulumi.get(self, "namespace") + + @namespace.setter + def namespace(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "namespace", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The password for authenticating with the Proxmox Backup Server. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "password", value) + + @_builtins.property + @pulumi.getter(name="pbsId") + def pbs_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "pbs_id") + + @pbs_id.setter + def pbs_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "pbs_id", value) + + @_builtins.property + @pulumi.getter + def server(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The IP address or DNS name of the Proxmox Backup Server. + """ + return pulumi.get(self, "server") + + @server.setter + def server(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "server", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + @_builtins.property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The username for authenticating with the Proxmox Backup Server. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "username", value) + + +@pulumi.type_token("proxmoxve:Storage/pBS:PBS") +class PBS(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['PBSBackupsArgs', 'PBSBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + datastore: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + encryption_key: Optional[pulumi.Input[_builtins.str]] = None, + fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + generate_encryption_key: Optional[pulumi.Input[_builtins.bool]] = None, + namespace: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + pbs_id: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Manages a Proxmox Backup Server (PBS) storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.PBS("example", + pbs_id="example-pbs", + nodes=["pve"], + server="pbs.example.local", + datastore="backup", + username="pbs-user", + password="pbs-password", + fingerprint="AA:BB:CC:DD:EE:FF", + contents=["backup"], + generate_encryption_key=True) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['PBSBackupsArgs', 'PBSBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.str] datastore: The name of the datastore on the Proxmox Backup Server. + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] encryption_key: An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generate_encryption_key`. + :param pulumi.Input[_builtins.str] fingerprint: The SHA256 fingerprint of the Proxmox Backup Server's certificate. + :param pulumi.Input[_builtins.bool] generate_encryption_key: If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generated_encryption_key` attribute. Conflicts with `encryption_key`. + :param pulumi.Input[_builtins.str] namespace: The namespace to use on the Proxmox Backup Server. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the Proxmox Backup Server. + :param pulumi.Input[_builtins.str] pbs_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the Proxmox Backup Server. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the Proxmox Backup Server. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: PBSArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages a Proxmox Backup Server (PBS) storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.PBS("example", + pbs_id="example-pbs", + nodes=["pve"], + server="pbs.example.local", + datastore="backup", + username="pbs-user", + password="pbs-password", + fingerprint="AA:BB:CC:DD:EE:FF", + contents=["backup"], + generate_encryption_key=True) + ``` + + :param str resource_name: The name of the resource. + :param PBSArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(PBSArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['PBSBackupsArgs', 'PBSBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + datastore: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + encryption_key: Optional[pulumi.Input[_builtins.str]] = None, + fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + generate_encryption_key: Optional[pulumi.Input[_builtins.bool]] = None, + namespace: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + pbs_id: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = PBSArgs.__new__(PBSArgs) + + __props__.__dict__["backups"] = backups + __props__.__dict__["contents"] = contents + if datastore is None and not opts.urn: + raise TypeError("Missing required property 'datastore'") + __props__.__dict__["datastore"] = datastore + __props__.__dict__["disable"] = disable + __props__.__dict__["encryption_key"] = None if encryption_key is None else pulumi.Output.secret(encryption_key) + __props__.__dict__["fingerprint"] = fingerprint + __props__.__dict__["generate_encryption_key"] = generate_encryption_key + __props__.__dict__["namespace"] = namespace + __props__.__dict__["nodes"] = nodes + if password is None and not opts.urn: + raise TypeError("Missing required property 'password'") + __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password) + if pbs_id is None and not opts.urn: + raise TypeError("Missing required property 'pbs_id'") + __props__.__dict__["pbs_id"] = pbs_id + if server is None and not opts.urn: + raise TypeError("Missing required property 'server'") + __props__.__dict__["server"] = server + if username is None and not opts.urn: + raise TypeError("Missing required property 'username'") + __props__.__dict__["username"] = username + __props__.__dict__["encryption_key_fingerprint"] = None + __props__.__dict__["generated_encryption_key"] = None + __props__.__dict__["shared"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["encryptionKey", "generatedEncryptionKey", "password"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(PBS, __self__).__init__( + 'proxmoxve:Storage/pBS:PBS', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + backups: Optional[pulumi.Input[Union['PBSBackupsArgs', 'PBSBackupsArgsDict']]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + datastore: Optional[pulumi.Input[_builtins.str]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + encryption_key: Optional[pulumi.Input[_builtins.str]] = None, + encryption_key_fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + fingerprint: Optional[pulumi.Input[_builtins.str]] = None, + generate_encryption_key: Optional[pulumi.Input[_builtins.bool]] = None, + generated_encryption_key: Optional[pulumi.Input[_builtins.str]] = None, + namespace: Optional[pulumi.Input[_builtins.str]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + password: Optional[pulumi.Input[_builtins.str]] = None, + pbs_id: Optional[pulumi.Input[_builtins.str]] = None, + server: Optional[pulumi.Input[_builtins.str]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + username: Optional[pulumi.Input[_builtins.str]] = None) -> 'PBS': + """ + Get an existing PBS resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Union['PBSBackupsArgs', 'PBSBackupsArgsDict']] backups: Configure backup retention settings for the storage type. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.str] datastore: The name of the datastore on the Proxmox Backup Server. + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[_builtins.str] encryption_key: An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generate_encryption_key`. + :param pulumi.Input[_builtins.str] encryption_key_fingerprint: The SHA256 fingerprint of the encryption key currently in use. + :param pulumi.Input[_builtins.str] fingerprint: The SHA256 fingerprint of the Proxmox Backup Server's certificate. + :param pulumi.Input[_builtins.bool] generate_encryption_key: If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generated_encryption_key` attribute. Conflicts with `encryption_key`. + :param pulumi.Input[_builtins.str] generated_encryption_key: The encryption key returned by Proxmox when `generate_encryption_key` is true. + :param pulumi.Input[_builtins.str] namespace: The namespace to use on the Proxmox Backup Server. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.str] password: The password for authenticating with the Proxmox Backup Server. + :param pulumi.Input[_builtins.str] pbs_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] server: The IP address or DNS name of the Proxmox Backup Server. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.str] username: The username for authenticating with the Proxmox Backup Server. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _PBSState.__new__(_PBSState) + + __props__.__dict__["backups"] = backups + __props__.__dict__["contents"] = contents + __props__.__dict__["datastore"] = datastore + __props__.__dict__["disable"] = disable + __props__.__dict__["encryption_key"] = encryption_key + __props__.__dict__["encryption_key_fingerprint"] = encryption_key_fingerprint + __props__.__dict__["fingerprint"] = fingerprint + __props__.__dict__["generate_encryption_key"] = generate_encryption_key + __props__.__dict__["generated_encryption_key"] = generated_encryption_key + __props__.__dict__["namespace"] = namespace + __props__.__dict__["nodes"] = nodes + __props__.__dict__["password"] = password + __props__.__dict__["pbs_id"] = pbs_id + __props__.__dict__["server"] = server + __props__.__dict__["shared"] = shared + __props__.__dict__["username"] = username + return PBS(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def backups(self) -> pulumi.Output[Optional['outputs.PBSBackups']]: + """ + Configure backup retention settings for the storage type. + """ + return pulumi.get(self, "backups") + + @_builtins.property + @pulumi.getter + def contents(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @_builtins.property + @pulumi.getter + def datastore(self) -> pulumi.Output[_builtins.str]: + """ + The name of the datastore on the Proxmox Backup Server. + """ + return pulumi.get(self, "datastore") + + @_builtins.property + @pulumi.getter + def disable(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @_builtins.property + @pulumi.getter(name="encryptionKey") + def encryption_key(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + An existing encryption key for the datastore. This is a sensitive value. Conflicts with `generate_encryption_key`. + """ + return pulumi.get(self, "encryption_key") + + @_builtins.property + @pulumi.getter(name="encryptionKeyFingerprint") + def encryption_key_fingerprint(self) -> pulumi.Output[_builtins.str]: + """ + The SHA256 fingerprint of the encryption key currently in use. + """ + return pulumi.get(self, "encryption_key_fingerprint") + + @_builtins.property + @pulumi.getter + def fingerprint(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + The SHA256 fingerprint of the Proxmox Backup Server's certificate. + """ + return pulumi.get(self, "fingerprint") + + @_builtins.property + @pulumi.getter(name="generateEncryptionKey") + def generate_encryption_key(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + If set to true, Proxmox will generate a new encryption key. The key will be stored in the `generated_encryption_key` attribute. Conflicts with `encryption_key`. + """ + return pulumi.get(self, "generate_encryption_key") + + @_builtins.property + @pulumi.getter(name="generatedEncryptionKey") + def generated_encryption_key(self) -> pulumi.Output[_builtins.str]: + """ + The encryption key returned by Proxmox when `generate_encryption_key` is true. + """ + return pulumi.get(self, "generated_encryption_key") + + @_builtins.property + @pulumi.getter + def namespace(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + The namespace to use on the Proxmox Backup Server. + """ + return pulumi.get(self, "namespace") + + @_builtins.property + @pulumi.getter + def nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @_builtins.property + @pulumi.getter + def password(self) -> pulumi.Output[_builtins.str]: + """ + The password for authenticating with the Proxmox Backup Server. + """ + return pulumi.get(self, "password") + + @_builtins.property + @pulumi.getter(name="pbsId") + def pbs_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "pbs_id") + + @_builtins.property + @pulumi.getter + def server(self) -> pulumi.Output[_builtins.str]: + """ + The IP address or DNS name of the Proxmox Backup Server. + """ + return pulumi.get(self, "server") + + @_builtins.property + @pulumi.getter + def shared(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @_builtins.property + @pulumi.getter + def username(self) -> pulumi.Output[_builtins.str]: + """ + The username for authenticating with the Proxmox Backup Server. + """ + return pulumi.get(self, "username") + diff --git a/sdk/python/pulumi_proxmoxve/storage/zfs_pool.py b/sdk/python/pulumi_proxmoxve/storage/zfs_pool.py new file mode 100644 index 00000000..e7658ba2 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/storage/zfs_pool.py @@ -0,0 +1,493 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['ZFSPoolArgs', 'ZFSPool'] + +@pulumi.input_type +class ZFSPoolArgs: + def __init__(__self__, *, + zfs_pool: pulumi.Input[_builtins.str], + zfs_pool_id: pulumi.Input[_builtins.str], + blocksize: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + thin_provision: Optional[pulumi.Input[_builtins.bool]] = None): + """ + The set of arguments for constructing a ZFSPool resource. + :param pulumi.Input[_builtins.str] zfs_pool: The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + :param pulumi.Input[_builtins.str] zfs_pool_id: The unique identifier of the storage. + :param pulumi.Input[_builtins.str] blocksize: Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] thin_provision: Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + """ + pulumi.set(__self__, "zfs_pool", zfs_pool) + pulumi.set(__self__, "zfs_pool_id", zfs_pool_id) + if blocksize is not None: + pulumi.set(__self__, "blocksize", blocksize) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if thin_provision is not None: + pulumi.set(__self__, "thin_provision", thin_provision) + + @_builtins.property + @pulumi.getter(name="zfsPool") + def zfs_pool(self) -> pulumi.Input[_builtins.str]: + """ + The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + """ + return pulumi.get(self, "zfs_pool") + + @zfs_pool.setter + def zfs_pool(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "zfs_pool", value) + + @_builtins.property + @pulumi.getter(name="zfsPoolId") + def zfs_pool_id(self) -> pulumi.Input[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "zfs_pool_id") + + @zfs_pool_id.setter + def zfs_pool_id(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "zfs_pool_id", value) + + @_builtins.property + @pulumi.getter + def blocksize(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + """ + return pulumi.get(self, "blocksize") + + @blocksize.setter + def blocksize(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "blocksize", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter(name="thinProvision") + def thin_provision(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + """ + return pulumi.get(self, "thin_provision") + + @thin_provision.setter + def thin_provision(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "thin_provision", value) + + +@pulumi.input_type +class _ZFSPoolState: + def __init__(__self__, *, + blocksize: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + thin_provision: Optional[pulumi.Input[_builtins.bool]] = None, + zfs_pool: Optional[pulumi.Input[_builtins.str]] = None, + zfs_pool_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering ZFSPool resources. + :param pulumi.Input[_builtins.str] blocksize: Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.bool] thin_provision: Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + :param pulumi.Input[_builtins.str] zfs_pool: The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + :param pulumi.Input[_builtins.str] zfs_pool_id: The unique identifier of the storage. + """ + if blocksize is not None: + pulumi.set(__self__, "blocksize", blocksize) + if contents is not None: + pulumi.set(__self__, "contents", contents) + if disable is not None: + pulumi.set(__self__, "disable", disable) + if nodes is not None: + pulumi.set(__self__, "nodes", nodes) + if shared is not None: + pulumi.set(__self__, "shared", shared) + if thin_provision is not None: + pulumi.set(__self__, "thin_provision", thin_provision) + if zfs_pool is not None: + pulumi.set(__self__, "zfs_pool", zfs_pool) + if zfs_pool_id is not None: + pulumi.set(__self__, "zfs_pool_id", zfs_pool_id) + + @_builtins.property + @pulumi.getter + def blocksize(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + """ + return pulumi.get(self, "blocksize") + + @blocksize.setter + def blocksize(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "blocksize", value) + + @_builtins.property + @pulumi.getter + def contents(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @contents.setter + def contents(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "contents", value) + + @_builtins.property + @pulumi.getter + def disable(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @disable.setter + def disable(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "disable", value) + + @_builtins.property + @pulumi.getter + def nodes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @nodes.setter + def nodes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "nodes", value) + + @_builtins.property + @pulumi.getter + def shared(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @shared.setter + def shared(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "shared", value) + + @_builtins.property + @pulumi.getter(name="thinProvision") + def thin_provision(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + """ + return pulumi.get(self, "thin_provision") + + @thin_provision.setter + def thin_provision(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "thin_provision", value) + + @_builtins.property + @pulumi.getter(name="zfsPool") + def zfs_pool(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + """ + return pulumi.get(self, "zfs_pool") + + @zfs_pool.setter + def zfs_pool(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "zfs_pool", value) + + @_builtins.property + @pulumi.getter(name="zfsPoolId") + def zfs_pool_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "zfs_pool_id") + + @zfs_pool_id.setter + def zfs_pool_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "zfs_pool_id", value) + + +@pulumi.type_token("proxmoxve:Storage/zFSPool:ZFSPool") +class ZFSPool(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + blocksize: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + thin_provision: Optional[pulumi.Input[_builtins.bool]] = None, + zfs_pool: Optional[pulumi.Input[_builtins.str]] = None, + zfs_pool_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + Manages ZFS-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.ZFSPool("example", + zfs_pool_id="example-zfs", + nodes=["pve"], + zfs_pool="rpool/data", + contents=["images"], + thin_provision=True, + blocksize="64k") + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] blocksize: Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] thin_provision: Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + :param pulumi.Input[_builtins.str] zfs_pool: The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + :param pulumi.Input[_builtins.str] zfs_pool_id: The unique identifier of the storage. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ZFSPoolArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manages ZFS-based storage in Proxmox VE. + + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + example = proxmoxve.storage.ZFSPool("example", + zfs_pool_id="example-zfs", + nodes=["pve"], + zfs_pool="rpool/data", + contents=["images"], + thin_provision=True, + blocksize="64k") + ``` + + :param str resource_name: The name of the resource. + :param ZFSPoolArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ZFSPoolArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + blocksize: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + thin_provision: Optional[pulumi.Input[_builtins.bool]] = None, + zfs_pool: Optional[pulumi.Input[_builtins.str]] = None, + zfs_pool_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ZFSPoolArgs.__new__(ZFSPoolArgs) + + __props__.__dict__["blocksize"] = blocksize + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + __props__.__dict__["nodes"] = nodes + __props__.__dict__["thin_provision"] = thin_provision + if zfs_pool is None and not opts.urn: + raise TypeError("Missing required property 'zfs_pool'") + __props__.__dict__["zfs_pool"] = zfs_pool + if zfs_pool_id is None and not opts.urn: + raise TypeError("Missing required property 'zfs_pool_id'") + __props__.__dict__["zfs_pool_id"] = zfs_pool_id + __props__.__dict__["shared"] = None + super(ZFSPool, __self__).__init__( + 'proxmoxve:Storage/zFSPool:ZFSPool', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + blocksize: Optional[pulumi.Input[_builtins.str]] = None, + contents: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + disable: Optional[pulumi.Input[_builtins.bool]] = None, + nodes: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + shared: Optional[pulumi.Input[_builtins.bool]] = None, + thin_provision: Optional[pulumi.Input[_builtins.bool]] = None, + zfs_pool: Optional[pulumi.Input[_builtins.str]] = None, + zfs_pool_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'ZFSPool': + """ + Get an existing ZFSPool resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[_builtins.str] blocksize: Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] contents: The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + :param pulumi.Input[_builtins.bool] disable: Whether the storage is disabled. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] nodes: A list of nodes where this storage is available. + :param pulumi.Input[_builtins.bool] shared: Whether the storage is shared across all nodes. + :param pulumi.Input[_builtins.bool] thin_provision: Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + :param pulumi.Input[_builtins.str] zfs_pool: The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + :param pulumi.Input[_builtins.str] zfs_pool_id: The unique identifier of the storage. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ZFSPoolState.__new__(_ZFSPoolState) + + __props__.__dict__["blocksize"] = blocksize + __props__.__dict__["contents"] = contents + __props__.__dict__["disable"] = disable + __props__.__dict__["nodes"] = nodes + __props__.__dict__["shared"] = shared + __props__.__dict__["thin_provision"] = thin_provision + __props__.__dict__["zfs_pool"] = zfs_pool + __props__.__dict__["zfs_pool_id"] = zfs_pool_id + return ZFSPool(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def blocksize(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Block size for newly created volumes (e.g. `4k`, `8k`, `16k`). Larger values may improve throughput for large I/O, while smaller values optimize space efficiency. + """ + return pulumi.get(self, "blocksize") + + @_builtins.property + @pulumi.getter + def contents(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + The content types that can be stored on this storage. Valid values: `backup` (VM backups), `images` (VM disk images), `import` (VM disk images for import), `iso` (ISO images), `rootdir` (container root directories), `snippets` (cloud-init, hook scripts, etc.), `vztmpl` (container templates). + """ + return pulumi.get(self, "contents") + + @_builtins.property + @pulumi.getter + def disable(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is disabled. + """ + return pulumi.get(self, "disable") + + @_builtins.property + @pulumi.getter + def nodes(self) -> pulumi.Output[Sequence[_builtins.str]]: + """ + A list of nodes where this storage is available. + """ + return pulumi.get(self, "nodes") + + @_builtins.property + @pulumi.getter + def shared(self) -> pulumi.Output[_builtins.bool]: + """ + Whether the storage is shared across all nodes. + """ + return pulumi.get(self, "shared") + + @_builtins.property + @pulumi.getter(name="thinProvision") + def thin_provision(self) -> pulumi.Output[Optional[_builtins.bool]]: + """ + Whether to enable thin provisioning (`on` or `off`). Thin provisioning allows flexible disk allocation without pre-allocating full space. + """ + return pulumi.get(self, "thin_provision") + + @_builtins.property + @pulumi.getter(name="zfsPool") + def zfs_pool(self) -> pulumi.Output[_builtins.str]: + """ + The name of the ZFS storage pool to use (e.g. `tank`, `rpool/data`). + """ + return pulumi.get(self, "zfs_pool") + + @_builtins.property + @pulumi.getter(name="zfsPoolId") + def zfs_pool_id(self) -> pulumi.Output[_builtins.str]: + """ + The unique identifier of the storage. + """ + return pulumi.get(self, "zfs_pool_id") + diff --git a/sdk/python/pulumi_proxmoxve/vm/__init__.py b/sdk/python/pulumi_proxmoxve/vm/__init__.py index e808c86f..a9fb97ce 100644 --- a/sdk/python/pulumi_proxmoxve/vm/__init__.py +++ b/sdk/python/pulumi_proxmoxve/vm/__init__.py @@ -6,6 +6,7 @@ from .. import _utilities import typing # Export this package's modules as members: +from .cloned_virtual_machine import * from .get_virtual_machine import * from .get_virtual_machines import * from .virtual_machine import * diff --git a/sdk/python/pulumi_proxmoxve/vm/_inputs.py b/sdk/python/pulumi_proxmoxve/vm/_inputs.py index ac67bda6..0b9c187f 100644 --- a/sdk/python/pulumi_proxmoxve/vm/_inputs.py +++ b/sdk/python/pulumi_proxmoxve/vm/_inputs.py @@ -15,10 +15,28 @@ from .. import _utilities __all__ = [ + 'ClonedVirtualMachineCdromArgs', + 'ClonedVirtualMachineCdromArgsDict', + 'ClonedVirtualMachineCloneArgs', + 'ClonedVirtualMachineCloneArgsDict', + 'ClonedVirtualMachineCpuArgs', + 'ClonedVirtualMachineCpuArgsDict', + 'ClonedVirtualMachineDeleteArgs', + 'ClonedVirtualMachineDeleteArgsDict', + 'ClonedVirtualMachineDiskArgs', + 'ClonedVirtualMachineDiskArgsDict', + 'ClonedVirtualMachineMemoryArgs', + 'ClonedVirtualMachineMemoryArgsDict', + 'ClonedVirtualMachineNetworkArgs', + 'ClonedVirtualMachineNetworkArgsDict', + 'ClonedVirtualMachineRngArgs', + 'ClonedVirtualMachineRngArgsDict', + 'ClonedVirtualMachineTimeoutsArgs', + 'ClonedVirtualMachineTimeoutsArgsDict', + 'ClonedVirtualMachineVgaArgs', + 'ClonedVirtualMachineVgaArgsDict', 'VirtualMachine2CdromArgs', 'VirtualMachine2CdromArgsDict', - 'VirtualMachine2CloneArgs', - 'VirtualMachine2CloneArgsDict', 'VirtualMachine2CpuArgs', 'VirtualMachine2CpuArgsDict', 'VirtualMachine2RngArgs', @@ -94,16 +112,16 @@ MYPY = False if not MYPY: - class VirtualMachine2CdromArgsDict(TypedDict): + class ClonedVirtualMachineCdromArgsDict(TypedDict): file_id: NotRequired[pulumi.Input[_builtins.str]] """ The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. """ elif False: - VirtualMachine2CdromArgsDict: TypeAlias = Mapping[str, Any] + ClonedVirtualMachineCdromArgsDict: TypeAlias = Mapping[str, Any] @pulumi.input_type -class VirtualMachine2CdromArgs: +class ClonedVirtualMachineCdromArgs: def __init__(__self__, *, file_id: Optional[pulumi.Input[_builtins.str]] = None): """ @@ -126,48 +144,140 @@ def file_id(self, value: Optional[pulumi.Input[_builtins.str]]): if not MYPY: - class VirtualMachine2CloneArgsDict(TypedDict): - id: pulumi.Input[_builtins.int] + class ClonedVirtualMachineCloneArgsDict(TypedDict): + source_vm_id: pulumi.Input[_builtins.int] + """ + Source VM/template ID to clone from. + """ + bandwidth_limit: NotRequired[pulumi.Input[_builtins.int]] + """ + Clone bandwidth limit in MB/s. + """ + full: NotRequired[pulumi.Input[_builtins.bool]] """ - The ID of the VM to clone. + Perform a full clone (true) or linked clone (false). + """ + pool_id: NotRequired[pulumi.Input[_builtins.str]] + """ + Pool to assign the cloned VM to. """ retries: NotRequired[pulumi.Input[_builtins.int]] """ - The number of retries to perform when cloning the VM (default: 3). + Number of retries for clone operations. + """ + snapshot_name: NotRequired[pulumi.Input[_builtins.str]] + """ + Snapshot name to clone from. + """ + source_node_name: NotRequired[pulumi.Input[_builtins.str]] + """ + Source node of the VM/template. Defaults to target node if unset. + """ + target_datastore: NotRequired[pulumi.Input[_builtins.str]] + """ + Target datastore for cloned disks. + """ + target_format: NotRequired[pulumi.Input[_builtins.str]] + """ + Target disk format for clone (e.g., raw, qcow2). """ elif False: - VirtualMachine2CloneArgsDict: TypeAlias = Mapping[str, Any] + ClonedVirtualMachineCloneArgsDict: TypeAlias = Mapping[str, Any] @pulumi.input_type -class VirtualMachine2CloneArgs: +class ClonedVirtualMachineCloneArgs: def __init__(__self__, *, - id: pulumi.Input[_builtins.int], - retries: Optional[pulumi.Input[_builtins.int]] = None): - """ - :param pulumi.Input[_builtins.int] id: The ID of the VM to clone. - :param pulumi.Input[_builtins.int] retries: The number of retries to perform when cloning the VM (default: 3). - """ - pulumi.set(__self__, "id", id) + source_vm_id: pulumi.Input[_builtins.int], + bandwidth_limit: Optional[pulumi.Input[_builtins.int]] = None, + full: Optional[pulumi.Input[_builtins.bool]] = None, + pool_id: Optional[pulumi.Input[_builtins.str]] = None, + retries: Optional[pulumi.Input[_builtins.int]] = None, + snapshot_name: Optional[pulumi.Input[_builtins.str]] = None, + source_node_name: Optional[pulumi.Input[_builtins.str]] = None, + target_datastore: Optional[pulumi.Input[_builtins.str]] = None, + target_format: Optional[pulumi.Input[_builtins.str]] = None): + """ + :param pulumi.Input[_builtins.int] source_vm_id: Source VM/template ID to clone from. + :param pulumi.Input[_builtins.int] bandwidth_limit: Clone bandwidth limit in MB/s. + :param pulumi.Input[_builtins.bool] full: Perform a full clone (true) or linked clone (false). + :param pulumi.Input[_builtins.str] pool_id: Pool to assign the cloned VM to. + :param pulumi.Input[_builtins.int] retries: Number of retries for clone operations. + :param pulumi.Input[_builtins.str] snapshot_name: Snapshot name to clone from. + :param pulumi.Input[_builtins.str] source_node_name: Source node of the VM/template. Defaults to target node if unset. + :param pulumi.Input[_builtins.str] target_datastore: Target datastore for cloned disks. + :param pulumi.Input[_builtins.str] target_format: Target disk format for clone (e.g., raw, qcow2). + """ + pulumi.set(__self__, "source_vm_id", source_vm_id) + if bandwidth_limit is not None: + pulumi.set(__self__, "bandwidth_limit", bandwidth_limit) + if full is not None: + pulumi.set(__self__, "full", full) + if pool_id is not None: + pulumi.set(__self__, "pool_id", pool_id) if retries is not None: pulumi.set(__self__, "retries", retries) + if snapshot_name is not None: + pulumi.set(__self__, "snapshot_name", snapshot_name) + if source_node_name is not None: + pulumi.set(__self__, "source_node_name", source_node_name) + if target_datastore is not None: + pulumi.set(__self__, "target_datastore", target_datastore) + if target_format is not None: + pulumi.set(__self__, "target_format", target_format) + + @_builtins.property + @pulumi.getter(name="sourceVmId") + def source_vm_id(self) -> pulumi.Input[_builtins.int]: + """ + Source VM/template ID to clone from. + """ + return pulumi.get(self, "source_vm_id") + + @source_vm_id.setter + def source_vm_id(self, value: pulumi.Input[_builtins.int]): + pulumi.set(self, "source_vm_id", value) + + @_builtins.property + @pulumi.getter(name="bandwidthLimit") + def bandwidth_limit(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Clone bandwidth limit in MB/s. + """ + return pulumi.get(self, "bandwidth_limit") + + @bandwidth_limit.setter + def bandwidth_limit(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "bandwidth_limit", value) @_builtins.property @pulumi.getter - def id(self) -> pulumi.Input[_builtins.int]: + def full(self) -> Optional[pulumi.Input[_builtins.bool]]: """ - The ID of the VM to clone. + Perform a full clone (true) or linked clone (false). """ - return pulumi.get(self, "id") + return pulumi.get(self, "full") - @id.setter - def id(self, value: pulumi.Input[_builtins.int]): - pulumi.set(self, "id", value) + @full.setter + def full(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "full", value) + + @_builtins.property + @pulumi.getter(name="poolId") + def pool_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Pool to assign the cloned VM to. + """ + return pulumi.get(self, "pool_id") + + @pool_id.setter + def pool_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "pool_id", value) @_builtins.property @pulumi.getter def retries(self) -> Optional[pulumi.Input[_builtins.int]]: """ - The number of retries to perform when cloning the VM (default: 3). + Number of retries for clone operations. """ return pulumi.get(self, "retries") @@ -175,6 +285,1217 @@ def retries(self) -> Optional[pulumi.Input[_builtins.int]]: def retries(self, value: Optional[pulumi.Input[_builtins.int]]): pulumi.set(self, "retries", value) + @_builtins.property + @pulumi.getter(name="snapshotName") + def snapshot_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Snapshot name to clone from. + """ + return pulumi.get(self, "snapshot_name") + + @snapshot_name.setter + def snapshot_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "snapshot_name", value) + + @_builtins.property + @pulumi.getter(name="sourceNodeName") + def source_node_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Source node of the VM/template. Defaults to target node if unset. + """ + return pulumi.get(self, "source_node_name") + + @source_node_name.setter + def source_node_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "source_node_name", value) + + @_builtins.property + @pulumi.getter(name="targetDatastore") + def target_datastore(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Target datastore for cloned disks. + """ + return pulumi.get(self, "target_datastore") + + @target_datastore.setter + def target_datastore(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "target_datastore", value) + + @_builtins.property + @pulumi.getter(name="targetFormat") + def target_format(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Target disk format for clone (e.g., raw, qcow2). + """ + return pulumi.get(self, "target_format") + + @target_format.setter + def target_format(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "target_format", value) + + +if not MYPY: + class ClonedVirtualMachineCpuArgsDict(TypedDict): + affinity: NotRequired[pulumi.Input[_builtins.str]] + """ + The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + """ + architecture: NotRequired[pulumi.Input[_builtins.str]] + """ + The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + """ + cores: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of CPU cores per socket (defaults to `1`). + """ + flags: NotRequired[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] + """ + Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + """ + hotplugged: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of hotplugged vCPUs (defaults to `0`). + """ + limit: NotRequired[pulumi.Input[_builtins.int]] + """ + Limit of CPU usage (defaults to `0` which means no limit). + """ + numa: NotRequired[pulumi.Input[_builtins.bool]] + """ + Enable NUMA (defaults to `false`). + """ + sockets: NotRequired[pulumi.Input[_builtins.int]] + """ + The number of CPU sockets (defaults to `1`). + """ + type: NotRequired[pulumi.Input[_builtins.str]] + """ + Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + """ + units: NotRequired[pulumi.Input[_builtins.int]] + """ + CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + """ +elif False: + ClonedVirtualMachineCpuArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineCpuArgs: + def __init__(__self__, *, + affinity: Optional[pulumi.Input[_builtins.str]] = None, + architecture: Optional[pulumi.Input[_builtins.str]] = None, + cores: Optional[pulumi.Input[_builtins.int]] = None, + flags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + hotplugged: Optional[pulumi.Input[_builtins.int]] = None, + limit: Optional[pulumi.Input[_builtins.int]] = None, + numa: Optional[pulumi.Input[_builtins.bool]] = None, + sockets: Optional[pulumi.Input[_builtins.int]] = None, + type: Optional[pulumi.Input[_builtins.str]] = None, + units: Optional[pulumi.Input[_builtins.int]] = None): + """ + :param pulumi.Input[_builtins.str] affinity: The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + :param pulumi.Input[_builtins.str] architecture: The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + :param pulumi.Input[_builtins.int] cores: The number of CPU cores per socket (defaults to `1`). + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] flags: Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + :param pulumi.Input[_builtins.int] hotplugged: The number of hotplugged vCPUs (defaults to `0`). + :param pulumi.Input[_builtins.int] limit: Limit of CPU usage (defaults to `0` which means no limit). + :param pulumi.Input[_builtins.bool] numa: Enable NUMA (defaults to `false`). + :param pulumi.Input[_builtins.int] sockets: The number of CPU sockets (defaults to `1`). + :param pulumi.Input[_builtins.str] type: Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + :param pulumi.Input[_builtins.int] units: CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + """ + if affinity is not None: + pulumi.set(__self__, "affinity", affinity) + if architecture is not None: + pulumi.set(__self__, "architecture", architecture) + if cores is not None: + pulumi.set(__self__, "cores", cores) + if flags is not None: + pulumi.set(__self__, "flags", flags) + if hotplugged is not None: + pulumi.set(__self__, "hotplugged", hotplugged) + if limit is not None: + pulumi.set(__self__, "limit", limit) + if numa is not None: + pulumi.set(__self__, "numa", numa) + if sockets is not None: + pulumi.set(__self__, "sockets", sockets) + if type is not None: + pulumi.set(__self__, "type", type) + if units is not None: + pulumi.set(__self__, "units", units) + + @_builtins.property + @pulumi.getter + def affinity(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + """ + return pulumi.get(self, "affinity") + + @affinity.setter + def affinity(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "affinity", value) + + @_builtins.property + @pulumi.getter + def architecture(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + """ + return pulumi.get(self, "architecture") + + @architecture.setter + def architecture(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "architecture", value) + + @_builtins.property + @pulumi.getter + def cores(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of CPU cores per socket (defaults to `1`). + """ + return pulumi.get(self, "cores") + + @cores.setter + def cores(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "cores", value) + + @_builtins.property + @pulumi.getter + def flags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + """ + return pulumi.get(self, "flags") + + @flags.setter + def flags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "flags", value) + + @_builtins.property + @pulumi.getter + def hotplugged(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of hotplugged vCPUs (defaults to `0`). + """ + return pulumi.get(self, "hotplugged") + + @hotplugged.setter + def hotplugged(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "hotplugged", value) + + @_builtins.property + @pulumi.getter + def limit(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Limit of CPU usage (defaults to `0` which means no limit). + """ + return pulumi.get(self, "limit") + + @limit.setter + def limit(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "limit", value) + + @_builtins.property + @pulumi.getter + def numa(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable NUMA (defaults to `false`). + """ + return pulumi.get(self, "numa") + + @numa.setter + def numa(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "numa", value) + + @_builtins.property + @pulumi.getter + def sockets(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The number of CPU sockets (defaults to `1`). + """ + return pulumi.get(self, "sockets") + + @sockets.setter + def sockets(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "sockets", value) + + @_builtins.property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "type", value) + + @_builtins.property + @pulumi.getter + def units(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + """ + return pulumi.get(self, "units") + + @units.setter + def units(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "units", value) + + +if not MYPY: + class ClonedVirtualMachineDeleteArgsDict(TypedDict): + disks: NotRequired[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] + """ + Disk slots to delete (e.g., scsi2). + """ + networks: NotRequired[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] + """ + Network slots to delete (e.g., net1). + """ +elif False: + ClonedVirtualMachineDeleteArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineDeleteArgs: + def __init__(__self__, *, + disks: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + networks: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] disks: Disk slots to delete (e.g., scsi2). + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] networks: Network slots to delete (e.g., net1). + """ + if disks is not None: + pulumi.set(__self__, "disks", disks) + if networks is not None: + pulumi.set(__self__, "networks", networks) + + @_builtins.property + @pulumi.getter + def disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Disk slots to delete (e.g., scsi2). + """ + return pulumi.get(self, "disks") + + @disks.setter + def disks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "disks", value) + + @_builtins.property + @pulumi.getter + def networks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Network slots to delete (e.g., net1). + """ + return pulumi.get(self, "networks") + + @networks.setter + def networks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "networks", value) + + +if not MYPY: + class ClonedVirtualMachineDiskArgsDict(TypedDict): + aio: NotRequired[pulumi.Input[_builtins.str]] + """ + AIO mode (io_uring, native, threads). + """ + backup: NotRequired[pulumi.Input[_builtins.bool]] + """ + Include disk in backups. + """ + cache: NotRequired[pulumi.Input[_builtins.str]] + """ + Cache mode. + """ + datastore_id: NotRequired[pulumi.Input[_builtins.str]] + """ + Target datastore for new disks when file is not provided. + """ + discard: NotRequired[pulumi.Input[_builtins.str]] + """ + Discard/trim behavior. + """ + file: NotRequired[pulumi.Input[_builtins.str]] + """ + Existing volume reference (e.g., local-lvm:vm-100-disk-0). + """ + format: NotRequired[pulumi.Input[_builtins.str]] + """ + Disk format (raw, qcow2, vmdk). + """ + import_from: NotRequired[pulumi.Input[_builtins.str]] + """ + Import source volume/file id. + """ + iothread: NotRequired[pulumi.Input[_builtins.bool]] + """ + Use IO thread. + """ + media: NotRequired[pulumi.Input[_builtins.str]] + """ + Disk media (e.g., disk, cdrom). + """ + replicate: NotRequired[pulumi.Input[_builtins.bool]] + """ + Consider disk for replication. + """ + serial: NotRequired[pulumi.Input[_builtins.str]] + """ + Disk serial number. + """ + size_gb: NotRequired[pulumi.Input[_builtins.int]] + """ + Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `size_gb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + """ + ssd: NotRequired[pulumi.Input[_builtins.bool]] + """ + Mark disk as SSD. + """ +elif False: + ClonedVirtualMachineDiskArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineDiskArgs: + def __init__(__self__, *, + aio: Optional[pulumi.Input[_builtins.str]] = None, + backup: Optional[pulumi.Input[_builtins.bool]] = None, + cache: Optional[pulumi.Input[_builtins.str]] = None, + datastore_id: Optional[pulumi.Input[_builtins.str]] = None, + discard: Optional[pulumi.Input[_builtins.str]] = None, + file: Optional[pulumi.Input[_builtins.str]] = None, + format: Optional[pulumi.Input[_builtins.str]] = None, + import_from: Optional[pulumi.Input[_builtins.str]] = None, + iothread: Optional[pulumi.Input[_builtins.bool]] = None, + media: Optional[pulumi.Input[_builtins.str]] = None, + replicate: Optional[pulumi.Input[_builtins.bool]] = None, + serial: Optional[pulumi.Input[_builtins.str]] = None, + size_gb: Optional[pulumi.Input[_builtins.int]] = None, + ssd: Optional[pulumi.Input[_builtins.bool]] = None): + """ + :param pulumi.Input[_builtins.str] aio: AIO mode (io_uring, native, threads). + :param pulumi.Input[_builtins.bool] backup: Include disk in backups. + :param pulumi.Input[_builtins.str] cache: Cache mode. + :param pulumi.Input[_builtins.str] datastore_id: Target datastore for new disks when file is not provided. + :param pulumi.Input[_builtins.str] discard: Discard/trim behavior. + :param pulumi.Input[_builtins.str] file: Existing volume reference (e.g., local-lvm:vm-100-disk-0). + :param pulumi.Input[_builtins.str] format: Disk format (raw, qcow2, vmdk). + :param pulumi.Input[_builtins.str] import_from: Import source volume/file id. + :param pulumi.Input[_builtins.bool] iothread: Use IO thread. + :param pulumi.Input[_builtins.str] media: Disk media (e.g., disk, cdrom). + :param pulumi.Input[_builtins.bool] replicate: Consider disk for replication. + :param pulumi.Input[_builtins.str] serial: Disk serial number. + :param pulumi.Input[_builtins.int] size_gb: Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `size_gb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + :param pulumi.Input[_builtins.bool] ssd: Mark disk as SSD. + """ + if aio is not None: + pulumi.set(__self__, "aio", aio) + if backup is not None: + pulumi.set(__self__, "backup", backup) + if cache is not None: + pulumi.set(__self__, "cache", cache) + if datastore_id is not None: + pulumi.set(__self__, "datastore_id", datastore_id) + if discard is not None: + pulumi.set(__self__, "discard", discard) + if file is not None: + pulumi.set(__self__, "file", file) + if format is not None: + pulumi.set(__self__, "format", format) + if import_from is not None: + pulumi.set(__self__, "import_from", import_from) + if iothread is not None: + pulumi.set(__self__, "iothread", iothread) + if media is not None: + pulumi.set(__self__, "media", media) + if replicate is not None: + pulumi.set(__self__, "replicate", replicate) + if serial is not None: + pulumi.set(__self__, "serial", serial) + if size_gb is not None: + pulumi.set(__self__, "size_gb", size_gb) + if ssd is not None: + pulumi.set(__self__, "ssd", ssd) + + @_builtins.property + @pulumi.getter + def aio(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + AIO mode (io_uring, native, threads). + """ + return pulumi.get(self, "aio") + + @aio.setter + def aio(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "aio", value) + + @_builtins.property + @pulumi.getter + def backup(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Include disk in backups. + """ + return pulumi.get(self, "backup") + + @backup.setter + def backup(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "backup", value) + + @_builtins.property + @pulumi.getter + def cache(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Cache mode. + """ + return pulumi.get(self, "cache") + + @cache.setter + def cache(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "cache", value) + + @_builtins.property + @pulumi.getter(name="datastoreId") + def datastore_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Target datastore for new disks when file is not provided. + """ + return pulumi.get(self, "datastore_id") + + @datastore_id.setter + def datastore_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "datastore_id", value) + + @_builtins.property + @pulumi.getter + def discard(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Discard/trim behavior. + """ + return pulumi.get(self, "discard") + + @discard.setter + def discard(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "discard", value) + + @_builtins.property + @pulumi.getter + def file(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Existing volume reference (e.g., local-lvm:vm-100-disk-0). + """ + return pulumi.get(self, "file") + + @file.setter + def file(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "file", value) + + @_builtins.property + @pulumi.getter + def format(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Disk format (raw, qcow2, vmdk). + """ + return pulumi.get(self, "format") + + @format.setter + def format(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "format", value) + + @_builtins.property + @pulumi.getter(name="importFrom") + def import_from(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Import source volume/file id. + """ + return pulumi.get(self, "import_from") + + @import_from.setter + def import_from(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "import_from", value) + + @_builtins.property + @pulumi.getter + def iothread(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Use IO thread. + """ + return pulumi.get(self, "iothread") + + @iothread.setter + def iothread(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "iothread", value) + + @_builtins.property + @pulumi.getter + def media(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Disk media (e.g., disk, cdrom). + """ + return pulumi.get(self, "media") + + @media.setter + def media(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "media", value) + + @_builtins.property + @pulumi.getter + def replicate(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Consider disk for replication. + """ + return pulumi.get(self, "replicate") + + @replicate.setter + def replicate(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "replicate", value) + + @_builtins.property + @pulumi.getter + def serial(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Disk serial number. + """ + return pulumi.get(self, "serial") + + @serial.setter + def serial(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "serial", value) + + @_builtins.property + @pulumi.getter(name="sizeGb") + def size_gb(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `size_gb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + """ + return pulumi.get(self, "size_gb") + + @size_gb.setter + def size_gb(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "size_gb", value) + + @_builtins.property + @pulumi.getter + def ssd(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Mark disk as SSD. + """ + return pulumi.get(self, "ssd") + + @ssd.setter + def ssd(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "ssd", value) + + +if not MYPY: + class ClonedVirtualMachineMemoryArgsDict(TypedDict): + balloon: NotRequired[pulumi.Input[_builtins.int]] + """ + Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + """ + hugepages: NotRequired[pulumi.Input[_builtins.str]] + """ + Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + + **Options:** + - `2` - Use 2 MiB hugepages + - `1024` - Use 1 GiB hugepages + - `any` - Use any available hugepage size + """ + keep_hugepages: NotRequired[pulumi.Input[_builtins.bool]] + """ + Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + """ + shares: NotRequired[pulumi.Input[_builtins.int]] + """ + CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + """ + size: NotRequired[pulumi.Input[_builtins.int]] + """ + Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + """ +elif False: + ClonedVirtualMachineMemoryArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineMemoryArgs: + def __init__(__self__, *, + balloon: Optional[pulumi.Input[_builtins.int]] = None, + hugepages: Optional[pulumi.Input[_builtins.str]] = None, + keep_hugepages: Optional[pulumi.Input[_builtins.bool]] = None, + shares: Optional[pulumi.Input[_builtins.int]] = None, + size: Optional[pulumi.Input[_builtins.int]] = None): + """ + :param pulumi.Input[_builtins.int] balloon: Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + :param pulumi.Input[_builtins.str] hugepages: Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + + **Options:** + - `2` - Use 2 MiB hugepages + - `1024` - Use 1 GiB hugepages + - `any` - Use any available hugepage size + :param pulumi.Input[_builtins.bool] keep_hugepages: Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + :param pulumi.Input[_builtins.int] shares: CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + :param pulumi.Input[_builtins.int] size: Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + """ + if balloon is not None: + pulumi.set(__self__, "balloon", balloon) + if hugepages is not None: + pulumi.set(__self__, "hugepages", hugepages) + if keep_hugepages is not None: + pulumi.set(__self__, "keep_hugepages", keep_hugepages) + if shares is not None: + pulumi.set(__self__, "shares", shares) + if size is not None: + pulumi.set(__self__, "size", size) + + @_builtins.property + @pulumi.getter + def balloon(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + """ + return pulumi.get(self, "balloon") + + @balloon.setter + def balloon(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "balloon", value) + + @_builtins.property + @pulumi.getter + def hugepages(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + + **Options:** + - `2` - Use 2 MiB hugepages + - `1024` - Use 1 GiB hugepages + - `any` - Use any available hugepage size + """ + return pulumi.get(self, "hugepages") + + @hugepages.setter + def hugepages(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "hugepages", value) + + @_builtins.property + @pulumi.getter(name="keepHugepages") + def keep_hugepages(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + """ + return pulumi.get(self, "keep_hugepages") + + @keep_hugepages.setter + def keep_hugepages(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "keep_hugepages", value) + + @_builtins.property + @pulumi.getter + def shares(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + """ + return pulumi.get(self, "shares") + + @shares.setter + def shares(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "shares", value) + + @_builtins.property + @pulumi.getter + def size(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + """ + return pulumi.get(self, "size") + + @size.setter + def size(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "size", value) + + +if not MYPY: + class ClonedVirtualMachineNetworkArgsDict(TypedDict): + bridge: NotRequired[pulumi.Input[_builtins.str]] + """ + Bridge name. + """ + firewall: NotRequired[pulumi.Input[_builtins.bool]] + """ + Enable firewall on this interface. + """ + link_down: NotRequired[pulumi.Input[_builtins.bool]] + """ + Keep link down. + """ + mac_address: NotRequired[pulumi.Input[_builtins.str]] + """ + MAC address (computed if omitted). + """ + model: NotRequired[pulumi.Input[_builtins.str]] + """ + NIC model (e.g., virtio, e1000). + """ + mtu: NotRequired[pulumi.Input[_builtins.int]] + """ + Interface MTU. + """ + queues: NotRequired[pulumi.Input[_builtins.int]] + """ + Number of multiqueue NIC queues. + """ + rate_limit: NotRequired[pulumi.Input[_builtins.float]] + """ + Rate limit (MB/s). + """ + tag: NotRequired[pulumi.Input[_builtins.int]] + """ + VLAN tag. + """ + trunks: NotRequired[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]] + """ + Trunk VLAN IDs. + """ +elif False: + ClonedVirtualMachineNetworkArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineNetworkArgs: + def __init__(__self__, *, + bridge: Optional[pulumi.Input[_builtins.str]] = None, + firewall: Optional[pulumi.Input[_builtins.bool]] = None, + link_down: Optional[pulumi.Input[_builtins.bool]] = None, + mac_address: Optional[pulumi.Input[_builtins.str]] = None, + model: Optional[pulumi.Input[_builtins.str]] = None, + mtu: Optional[pulumi.Input[_builtins.int]] = None, + queues: Optional[pulumi.Input[_builtins.int]] = None, + rate_limit: Optional[pulumi.Input[_builtins.float]] = None, + tag: Optional[pulumi.Input[_builtins.int]] = None, + trunks: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]] = None): + """ + :param pulumi.Input[_builtins.str] bridge: Bridge name. + :param pulumi.Input[_builtins.bool] firewall: Enable firewall on this interface. + :param pulumi.Input[_builtins.bool] link_down: Keep link down. + :param pulumi.Input[_builtins.str] mac_address: MAC address (computed if omitted). + :param pulumi.Input[_builtins.str] model: NIC model (e.g., virtio, e1000). + :param pulumi.Input[_builtins.int] mtu: Interface MTU. + :param pulumi.Input[_builtins.int] queues: Number of multiqueue NIC queues. + :param pulumi.Input[_builtins.float] rate_limit: Rate limit (MB/s). + :param pulumi.Input[_builtins.int] tag: VLAN tag. + :param pulumi.Input[Sequence[pulumi.Input[_builtins.int]]] trunks: Trunk VLAN IDs. + """ + if bridge is not None: + pulumi.set(__self__, "bridge", bridge) + if firewall is not None: + pulumi.set(__self__, "firewall", firewall) + if link_down is not None: + pulumi.set(__self__, "link_down", link_down) + if mac_address is not None: + pulumi.set(__self__, "mac_address", mac_address) + if model is not None: + pulumi.set(__self__, "model", model) + if mtu is not None: + pulumi.set(__self__, "mtu", mtu) + if queues is not None: + pulumi.set(__self__, "queues", queues) + if rate_limit is not None: + pulumi.set(__self__, "rate_limit", rate_limit) + if tag is not None: + pulumi.set(__self__, "tag", tag) + if trunks is not None: + pulumi.set(__self__, "trunks", trunks) + + @_builtins.property + @pulumi.getter + def bridge(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Bridge name. + """ + return pulumi.get(self, "bridge") + + @bridge.setter + def bridge(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "bridge", value) + + @_builtins.property + @pulumi.getter + def firewall(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Enable firewall on this interface. + """ + return pulumi.get(self, "firewall") + + @firewall.setter + def firewall(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "firewall", value) + + @_builtins.property + @pulumi.getter(name="linkDown") + def link_down(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Keep link down. + """ + return pulumi.get(self, "link_down") + + @link_down.setter + def link_down(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "link_down", value) + + @_builtins.property + @pulumi.getter(name="macAddress") + def mac_address(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + MAC address (computed if omitted). + """ + return pulumi.get(self, "mac_address") + + @mac_address.setter + def mac_address(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "mac_address", value) + + @_builtins.property + @pulumi.getter + def model(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + NIC model (e.g., virtio, e1000). + """ + return pulumi.get(self, "model") + + @model.setter + def model(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "model", value) + + @_builtins.property + @pulumi.getter + def mtu(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Interface MTU. + """ + return pulumi.get(self, "mtu") + + @mtu.setter + def mtu(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "mtu", value) + + @_builtins.property + @pulumi.getter + def queues(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Number of multiqueue NIC queues. + """ + return pulumi.get(self, "queues") + + @queues.setter + def queues(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "queues", value) + + @_builtins.property + @pulumi.getter(name="rateLimit") + def rate_limit(self) -> Optional[pulumi.Input[_builtins.float]]: + """ + Rate limit (MB/s). + """ + return pulumi.get(self, "rate_limit") + + @rate_limit.setter + def rate_limit(self, value: Optional[pulumi.Input[_builtins.float]]): + pulumi.set(self, "rate_limit", value) + + @_builtins.property + @pulumi.getter + def tag(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + VLAN tag. + """ + return pulumi.get(self, "tag") + + @tag.setter + def tag(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "tag", value) + + @_builtins.property + @pulumi.getter + def trunks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]]: + """ + Trunk VLAN IDs. + """ + return pulumi.get(self, "trunks") + + @trunks.setter + def trunks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]]): + pulumi.set(self, "trunks", value) + + +if not MYPY: + class ClonedVirtualMachineRngArgsDict(TypedDict): + max_bytes: NotRequired[pulumi.Input[_builtins.int]] + """ + Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + """ + period: NotRequired[pulumi.Input[_builtins.int]] + """ + Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + """ + source: NotRequired[pulumi.Input[_builtins.str]] + """ + The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + """ +elif False: + ClonedVirtualMachineRngArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineRngArgs: + def __init__(__self__, *, + max_bytes: Optional[pulumi.Input[_builtins.int]] = None, + period: Optional[pulumi.Input[_builtins.int]] = None, + source: Optional[pulumi.Input[_builtins.str]] = None): + """ + :param pulumi.Input[_builtins.int] max_bytes: Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + :param pulumi.Input[_builtins.int] period: Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + :param pulumi.Input[_builtins.str] source: The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + """ + if max_bytes is not None: + pulumi.set(__self__, "max_bytes", max_bytes) + if period is not None: + pulumi.set(__self__, "period", period) + if source is not None: + pulumi.set(__self__, "source", source) + + @_builtins.property + @pulumi.getter(name="maxBytes") + def max_bytes(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + """ + return pulumi.get(self, "max_bytes") + + @max_bytes.setter + def max_bytes(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "max_bytes", value) + + @_builtins.property + @pulumi.getter + def period(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + """ + return pulumi.get(self, "period") + + @period.setter + def period(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "period", value) + + @_builtins.property + @pulumi.getter + def source(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + """ + return pulumi.get(self, "source") + + @source.setter + def source(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "source", value) + + +if not MYPY: + class ClonedVirtualMachineTimeoutsArgsDict(TypedDict): + create: NotRequired[pulumi.Input[_builtins.str]] + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ + delete: NotRequired[pulumi.Input[_builtins.str]] + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + """ + read: NotRequired[pulumi.Input[_builtins.str]] + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + """ + update: NotRequired[pulumi.Input[_builtins.str]] + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ +elif False: + ClonedVirtualMachineTimeoutsArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineTimeoutsArgs: + def __init__(__self__, *, + create: Optional[pulumi.Input[_builtins.str]] = None, + delete: Optional[pulumi.Input[_builtins.str]] = None, + read: Optional[pulumi.Input[_builtins.str]] = None, + update: Optional[pulumi.Input[_builtins.str]] = None): + """ + :param pulumi.Input[_builtins.str] create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + :param pulumi.Input[_builtins.str] delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + :param pulumi.Input[_builtins.str] read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + :param pulumi.Input[_builtins.str] update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ + if create is not None: + pulumi.set(__self__, "create", create) + if delete is not None: + pulumi.set(__self__, "delete", delete) + if read is not None: + pulumi.set(__self__, "read", read) + if update is not None: + pulumi.set(__self__, "update", update) + + @_builtins.property + @pulumi.getter + def create(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ + return pulumi.get(self, "create") + + @create.setter + def create(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "create", value) + + @_builtins.property + @pulumi.getter + def delete(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + """ + return pulumi.get(self, "delete") + + @delete.setter + def delete(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "delete", value) + + @_builtins.property + @pulumi.getter + def read(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + """ + return pulumi.get(self, "read") + + @read.setter + def read(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "read", value) + + @_builtins.property + @pulumi.getter + def update(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ + return pulumi.get(self, "update") + + @update.setter + def update(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "update", value) + + +if not MYPY: + class ClonedVirtualMachineVgaArgsDict(TypedDict): + clipboard: NotRequired[pulumi.Input[_builtins.str]] + """ + Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + """ + memory: NotRequired[pulumi.Input[_builtins.int]] + """ + The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + """ + type: NotRequired[pulumi.Input[_builtins.str]] + """ + The VGA type (defaults to `std`). + """ +elif False: + ClonedVirtualMachineVgaArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClonedVirtualMachineVgaArgs: + def __init__(__self__, *, + clipboard: Optional[pulumi.Input[_builtins.str]] = None, + memory: Optional[pulumi.Input[_builtins.int]] = None, + type: Optional[pulumi.Input[_builtins.str]] = None): + """ + :param pulumi.Input[_builtins.str] clipboard: Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + :param pulumi.Input[_builtins.int] memory: The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + :param pulumi.Input[_builtins.str] type: The VGA type (defaults to `std`). + """ + if clipboard is not None: + pulumi.set(__self__, "clipboard", clipboard) + if memory is not None: + pulumi.set(__self__, "memory", memory) + if type is not None: + pulumi.set(__self__, "type", type) + + @_builtins.property + @pulumi.getter + def clipboard(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + """ + return pulumi.get(self, "clipboard") + + @clipboard.setter + def clipboard(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "clipboard", value) + + @_builtins.property + @pulumi.getter + def memory(self) -> Optional[pulumi.Input[_builtins.int]]: + """ + The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + """ + return pulumi.get(self, "memory") + + @memory.setter + def memory(self, value: Optional[pulumi.Input[_builtins.int]]): + pulumi.set(self, "memory", value) + + @_builtins.property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The VGA type (defaults to `std`). + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "type", value) + + +if not MYPY: + class VirtualMachine2CdromArgsDict(TypedDict): + file_id: NotRequired[pulumi.Input[_builtins.str]] + """ + The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + """ +elif False: + VirtualMachine2CdromArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class VirtualMachine2CdromArgs: + def __init__(__self__, *, + file_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + :param pulumi.Input[_builtins.str] file_id: The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + """ + if file_id is not None: + pulumi.set(__self__, "file_id", file_id) + + @_builtins.property + @pulumi.getter(name="fileId") + def file_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + """ + return pulumi.get(self, "file_id") + + @file_id.setter + def file_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "file_id", value) + if not MYPY: class VirtualMachine2CpuArgsDict(TypedDict): @@ -184,7 +1505,7 @@ class VirtualMachine2CpuArgsDict(TypedDict): """ architecture: NotRequired[pulumi.Input[_builtins.str]] """ - The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. """ cores: NotRequired[pulumi.Input[_builtins.int]] """ @@ -236,7 +1557,7 @@ def __init__(__self__, *, units: Optional[pulumi.Input[_builtins.int]] = None): """ :param pulumi.Input[_builtins.str] affinity: The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. - :param pulumi.Input[_builtins.str] architecture: The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + :param pulumi.Input[_builtins.str] architecture: The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. :param pulumi.Input[_builtins.int] cores: The number of CPU cores per socket (defaults to `1`). :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] flags: Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. :param pulumi.Input[_builtins.int] hotplugged: The number of hotplugged vCPUs (defaults to `0`). @@ -283,7 +1604,7 @@ def affinity(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter def architecture(self) -> Optional[pulumi.Input[_builtins.str]]: """ - The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. """ return pulumi.get(self, "architecture") @@ -1555,13 +2876,17 @@ class VirtualMachineDiskArgsDict(TypedDict): """ The file ID for a disk image when importing a disk into VM. The ID format is `:/`, for example `local:iso/centos8.img`. Can be also taken from - `Download.File` resource. *Deprecated*, use `import_from` instead. + `Download.File` resource. Prefer `import_from` for uncompressed images. + Use `file_id` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + with `content_type = "iso"` and `decompression_algorithm` set. See the + Create a VM from a Cloud Image guide for examples. """ import_from: NotRequired[pulumi.Input[_builtins.str]] """ - The file ID for a disk image to import into VM. The image must be of `import` content type. - The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + The file ID for a disk image to import into VM. The image must be of `import` content type + (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + Can be also taken from `Download.File` resource. Note: compressed images downloaded with + `decompression_algorithm` cannot use `import_from`; use `file_id` instead. """ iothread: NotRequired[pulumi.Input[_builtins.bool]] """ @@ -1635,10 +2960,14 @@ def __init__(__self__, *, :param pulumi.Input[_builtins.str] file_format: The file format. :param pulumi.Input[_builtins.str] file_id: The file ID for a disk image when importing a disk into VM. The ID format is `:/`, for example `local:iso/centos8.img`. Can be also taken from - `Download.File` resource. *Deprecated*, use `import_from` instead. - :param pulumi.Input[_builtins.str] import_from: The file ID for a disk image to import into VM. The image must be of `import` content type. - The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + `Download.File` resource. Prefer `import_from` for uncompressed images. + Use `file_id` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + with `content_type = "iso"` and `decompression_algorithm` set. See the + Create a VM from a Cloud Image guide for examples. + :param pulumi.Input[_builtins.str] import_from: The file ID for a disk image to import into VM. The image must be of `import` content type + (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + Can be also taken from `Download.File` resource. Note: compressed images downloaded with + `decompression_algorithm` cannot use `import_from`; use `file_id` instead. :param pulumi.Input[_builtins.bool] iothread: Whether to use iothreads for this disk (defaults to `false`). :param pulumi.Input[_builtins.str] path_in_datastore: The in-datastore path to the disk image. @@ -1781,7 +3110,10 @@ def file_id(self) -> Optional[pulumi.Input[_builtins.str]]: """ The file ID for a disk image when importing a disk into VM. The ID format is `:/`, for example `local:iso/centos8.img`. Can be also taken from - `Download.File` resource. *Deprecated*, use `import_from` instead. + `Download.File` resource. Prefer `import_from` for uncompressed images. + Use `file_id` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + with `content_type = "iso"` and `decompression_algorithm` set. See the + Create a VM from a Cloud Image guide for examples. """ return pulumi.get(self, "file_id") @@ -1793,9 +3125,10 @@ def file_id(self, value: Optional[pulumi.Input[_builtins.str]]): @pulumi.getter(name="importFrom") def import_from(self) -> Optional[pulumi.Input[_builtins.str]]: """ - The file ID for a disk image to import into VM. The image must be of `import` content type. - The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + The file ID for a disk image to import into VM. The image must be of `import` content type + (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + Can be also taken from `Download.File` resource. Note: compressed images downloaded with + `decompression_algorithm` cannot use `import_from`; use `file_id` instead. """ return pulumi.get(self, "import_from") diff --git a/sdk/python/pulumi_proxmoxve/vm/cloned_virtual_machine.py b/sdk/python/pulumi_proxmoxve/vm/cloned_virtual_machine.py new file mode 100644 index 00000000..ca97e6a6 --- /dev/null +++ b/sdk/python/pulumi_proxmoxve/vm/cloned_virtual_machine.py @@ -0,0 +1,1286 @@ +# coding=utf-8 +# *** WARNING: this file was generated by pulumi-language-python. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import builtins as _builtins +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['ClonedVirtualMachineArgs', 'ClonedVirtualMachine'] + +@pulumi.input_type +class ClonedVirtualMachineArgs: + def __init__(__self__, *, + clone: pulumi.Input['ClonedVirtualMachineCloneArgs'], + node_name: pulumi.Input[_builtins.str], + cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]]] = None, + cpu: Optional[pulumi.Input['ClonedVirtualMachineCpuArgs']] = None, + delete: Optional[pulumi.Input['ClonedVirtualMachineDeleteArgs']] = None, + delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + disk: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]]] = None, + memory: Optional[pulumi.Input['ClonedVirtualMachineMemoryArgs']] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]]] = None, + purge_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + rng: Optional[pulumi.Input['ClonedVirtualMachineRngArgs']] = None, + stop_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + timeouts: Optional[pulumi.Input['ClonedVirtualMachineTimeoutsArgs']] = None, + vga: Optional[pulumi.Input['ClonedVirtualMachineVgaArgs']] = None, + vm_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + The set of arguments for constructing a ClonedVirtualMachine resource. + :param pulumi.Input['ClonedVirtualMachineCloneArgs'] clone: Clone settings. Changes require recreation. + :param pulumi.Input[_builtins.str] node_name: Target node for the cloned VM. + :param pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + :param pulumi.Input['ClonedVirtualMachineCpuArgs'] cpu: The CPU configuration. + :param pulumi.Input['ClonedVirtualMachineDeleteArgs'] delete: Explicit deletions to perform after cloning/updating. Entries persist across applies. + :param pulumi.Input[_builtins.str] description: Optional VM description applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]] disk: Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + :param pulumi.Input['ClonedVirtualMachineMemoryArgs'] memory: Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + :param pulumi.Input[_builtins.str] name: Optional VM name override applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]] network: Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + :param pulumi.Input[_builtins.bool] purge_on_destroy: Purge backup configuration on destroy. + :param pulumi.Input['ClonedVirtualMachineRngArgs'] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input[_builtins.bool] stop_on_destroy: Stop the VM on destroy (instead of shutdown). + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: Tags applied after cloning. + :param pulumi.Input['ClonedVirtualMachineVgaArgs'] vga: Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + :param pulumi.Input[_builtins.str] vm_id: The VM identifier in the Proxmox cluster. + """ + pulumi.set(__self__, "clone", clone) + pulumi.set(__self__, "node_name", node_name) + if cdrom is not None: + pulumi.set(__self__, "cdrom", cdrom) + if cpu is not None: + pulumi.set(__self__, "cpu", cpu) + if delete is not None: + pulumi.set(__self__, "delete", delete) + if delete_unreferenced_disks_on_destroy is not None: + pulumi.set(__self__, "delete_unreferenced_disks_on_destroy", delete_unreferenced_disks_on_destroy) + if description is not None: + pulumi.set(__self__, "description", description) + if disk is not None: + pulumi.set(__self__, "disk", disk) + if memory is not None: + pulumi.set(__self__, "memory", memory) + if name is not None: + pulumi.set(__self__, "name", name) + if network is not None: + pulumi.set(__self__, "network", network) + if purge_on_destroy is not None: + pulumi.set(__self__, "purge_on_destroy", purge_on_destroy) + if rng is not None: + pulumi.set(__self__, "rng", rng) + if stop_on_destroy is not None: + pulumi.set(__self__, "stop_on_destroy", stop_on_destroy) + if tags is not None: + pulumi.set(__self__, "tags", tags) + if timeouts is not None: + pulumi.set(__self__, "timeouts", timeouts) + if vga is not None: + pulumi.set(__self__, "vga", vga) + if vm_id is not None: + pulumi.set(__self__, "vm_id", vm_id) + + @_builtins.property + @pulumi.getter + def clone(self) -> pulumi.Input['ClonedVirtualMachineCloneArgs']: + """ + Clone settings. Changes require recreation. + """ + return pulumi.get(self, "clone") + + @clone.setter + def clone(self, value: pulumi.Input['ClonedVirtualMachineCloneArgs']): + pulumi.set(self, "clone", value) + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> pulumi.Input[_builtins.str]: + """ + Target node for the cloned VM. + """ + return pulumi.get(self, "node_name") + + @node_name.setter + def node_name(self, value: pulumi.Input[_builtins.str]): + pulumi.set(self, "node_name", value) + + @_builtins.property + @pulumi.getter + def cdrom(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]]]: + """ + The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + """ + return pulumi.get(self, "cdrom") + + @cdrom.setter + def cdrom(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]]]): + pulumi.set(self, "cdrom", value) + + @_builtins.property + @pulumi.getter + def cpu(self) -> Optional[pulumi.Input['ClonedVirtualMachineCpuArgs']]: + """ + The CPU configuration. + """ + return pulumi.get(self, "cpu") + + @cpu.setter + def cpu(self, value: Optional[pulumi.Input['ClonedVirtualMachineCpuArgs']]): + pulumi.set(self, "cpu", value) + + @_builtins.property + @pulumi.getter + def delete(self) -> Optional[pulumi.Input['ClonedVirtualMachineDeleteArgs']]: + """ + Explicit deletions to perform after cloning/updating. Entries persist across applies. + """ + return pulumi.get(self, "delete") + + @delete.setter + def delete(self, value: Optional[pulumi.Input['ClonedVirtualMachineDeleteArgs']]): + pulumi.set(self, "delete", value) + + @_builtins.property + @pulumi.getter(name="deleteUnreferencedDisksOnDestroy") + def delete_unreferenced_disks_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]: + return pulumi.get(self, "delete_unreferenced_disks_on_destroy") + + @delete_unreferenced_disks_on_destroy.setter + def delete_unreferenced_disks_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "delete_unreferenced_disks_on_destroy", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Optional VM description applied after cloning. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter + def disk(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]]]: + """ + Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + """ + return pulumi.get(self, "disk") + + @disk.setter + def disk(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]]]): + pulumi.set(self, "disk", value) + + @_builtins.property + @pulumi.getter + def memory(self) -> Optional[pulumi.Input['ClonedVirtualMachineMemoryArgs']]: + """ + Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + """ + return pulumi.get(self, "memory") + + @memory.setter + def memory(self, value: Optional[pulumi.Input['ClonedVirtualMachineMemoryArgs']]): + pulumi.set(self, "memory", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Optional VM name override applied after cloning. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "name", value) + + @_builtins.property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]]]: + """ + Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]]]): + pulumi.set(self, "network", value) + + @_builtins.property + @pulumi.getter(name="purgeOnDestroy") + def purge_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Purge backup configuration on destroy. + """ + return pulumi.get(self, "purge_on_destroy") + + @purge_on_destroy.setter + def purge_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "purge_on_destroy", value) + + @_builtins.property + @pulumi.getter + def rng(self) -> Optional[pulumi.Input['ClonedVirtualMachineRngArgs']]: + """ + Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + """ + return pulumi.get(self, "rng") + + @rng.setter + def rng(self, value: Optional[pulumi.Input['ClonedVirtualMachineRngArgs']]): + pulumi.set(self, "rng", value) + + @_builtins.property + @pulumi.getter(name="stopOnDestroy") + def stop_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Stop the VM on destroy (instead of shutdown). + """ + return pulumi.get(self, "stop_on_destroy") + + @stop_on_destroy.setter + def stop_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "stop_on_destroy", value) + + @_builtins.property + @pulumi.getter + def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Tags applied after cloning. + """ + return pulumi.get(self, "tags") + + @tags.setter + def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "tags", value) + + @_builtins.property + @pulumi.getter + def timeouts(self) -> Optional[pulumi.Input['ClonedVirtualMachineTimeoutsArgs']]: + return pulumi.get(self, "timeouts") + + @timeouts.setter + def timeouts(self, value: Optional[pulumi.Input['ClonedVirtualMachineTimeoutsArgs']]): + pulumi.set(self, "timeouts", value) + + @_builtins.property + @pulumi.getter + def vga(self) -> Optional[pulumi.Input['ClonedVirtualMachineVgaArgs']]: + """ + Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + """ + return pulumi.get(self, "vga") + + @vga.setter + def vga(self, value: Optional[pulumi.Input['ClonedVirtualMachineVgaArgs']]): + pulumi.set(self, "vga", value) + + @_builtins.property + @pulumi.getter(name="vmId") + def vm_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The VM identifier in the Proxmox cluster. + """ + return pulumi.get(self, "vm_id") + + @vm_id.setter + def vm_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "vm_id", value) + + +@pulumi.input_type +class _ClonedVirtualMachineState: + def __init__(__self__, *, + cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]]] = None, + clone: Optional[pulumi.Input['ClonedVirtualMachineCloneArgs']] = None, + cpu: Optional[pulumi.Input['ClonedVirtualMachineCpuArgs']] = None, + delete: Optional[pulumi.Input['ClonedVirtualMachineDeleteArgs']] = None, + delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + disk: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]]] = None, + memory: Optional[pulumi.Input['ClonedVirtualMachineMemoryArgs']] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + purge_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + rng: Optional[pulumi.Input['ClonedVirtualMachineRngArgs']] = None, + stop_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + timeouts: Optional[pulumi.Input['ClonedVirtualMachineTimeoutsArgs']] = None, + vga: Optional[pulumi.Input['ClonedVirtualMachineVgaArgs']] = None, + vm_id: Optional[pulumi.Input[_builtins.str]] = None): + """ + Input properties used for looking up and filtering ClonedVirtualMachine resources. + :param pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + :param pulumi.Input['ClonedVirtualMachineCloneArgs'] clone: Clone settings. Changes require recreation. + :param pulumi.Input['ClonedVirtualMachineCpuArgs'] cpu: The CPU configuration. + :param pulumi.Input['ClonedVirtualMachineDeleteArgs'] delete: Explicit deletions to perform after cloning/updating. Entries persist across applies. + :param pulumi.Input[_builtins.str] description: Optional VM description applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]] disk: Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + :param pulumi.Input['ClonedVirtualMachineMemoryArgs'] memory: Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + :param pulumi.Input[_builtins.str] name: Optional VM name override applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]] network: Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + :param pulumi.Input[_builtins.str] node_name: Target node for the cloned VM. + :param pulumi.Input[_builtins.bool] purge_on_destroy: Purge backup configuration on destroy. + :param pulumi.Input['ClonedVirtualMachineRngArgs'] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input[_builtins.bool] stop_on_destroy: Stop the VM on destroy (instead of shutdown). + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: Tags applied after cloning. + :param pulumi.Input['ClonedVirtualMachineVgaArgs'] vga: Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + :param pulumi.Input[_builtins.str] vm_id: The VM identifier in the Proxmox cluster. + """ + if cdrom is not None: + pulumi.set(__self__, "cdrom", cdrom) + if clone is not None: + pulumi.set(__self__, "clone", clone) + if cpu is not None: + pulumi.set(__self__, "cpu", cpu) + if delete is not None: + pulumi.set(__self__, "delete", delete) + if delete_unreferenced_disks_on_destroy is not None: + pulumi.set(__self__, "delete_unreferenced_disks_on_destroy", delete_unreferenced_disks_on_destroy) + if description is not None: + pulumi.set(__self__, "description", description) + if disk is not None: + pulumi.set(__self__, "disk", disk) + if memory is not None: + pulumi.set(__self__, "memory", memory) + if name is not None: + pulumi.set(__self__, "name", name) + if network is not None: + pulumi.set(__self__, "network", network) + if node_name is not None: + pulumi.set(__self__, "node_name", node_name) + if purge_on_destroy is not None: + pulumi.set(__self__, "purge_on_destroy", purge_on_destroy) + if rng is not None: + pulumi.set(__self__, "rng", rng) + if stop_on_destroy is not None: + pulumi.set(__self__, "stop_on_destroy", stop_on_destroy) + if tags is not None: + pulumi.set(__self__, "tags", tags) + if timeouts is not None: + pulumi.set(__self__, "timeouts", timeouts) + if vga is not None: + pulumi.set(__self__, "vga", vga) + if vm_id is not None: + pulumi.set(__self__, "vm_id", vm_id) + + @_builtins.property + @pulumi.getter + def cdrom(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]]]: + """ + The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + """ + return pulumi.get(self, "cdrom") + + @cdrom.setter + def cdrom(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineCdromArgs']]]]): + pulumi.set(self, "cdrom", value) + + @_builtins.property + @pulumi.getter + def clone(self) -> Optional[pulumi.Input['ClonedVirtualMachineCloneArgs']]: + """ + Clone settings. Changes require recreation. + """ + return pulumi.get(self, "clone") + + @clone.setter + def clone(self, value: Optional[pulumi.Input['ClonedVirtualMachineCloneArgs']]): + pulumi.set(self, "clone", value) + + @_builtins.property + @pulumi.getter + def cpu(self) -> Optional[pulumi.Input['ClonedVirtualMachineCpuArgs']]: + """ + The CPU configuration. + """ + return pulumi.get(self, "cpu") + + @cpu.setter + def cpu(self, value: Optional[pulumi.Input['ClonedVirtualMachineCpuArgs']]): + pulumi.set(self, "cpu", value) + + @_builtins.property + @pulumi.getter + def delete(self) -> Optional[pulumi.Input['ClonedVirtualMachineDeleteArgs']]: + """ + Explicit deletions to perform after cloning/updating. Entries persist across applies. + """ + return pulumi.get(self, "delete") + + @delete.setter + def delete(self, value: Optional[pulumi.Input['ClonedVirtualMachineDeleteArgs']]): + pulumi.set(self, "delete", value) + + @_builtins.property + @pulumi.getter(name="deleteUnreferencedDisksOnDestroy") + def delete_unreferenced_disks_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]: + return pulumi.get(self, "delete_unreferenced_disks_on_destroy") + + @delete_unreferenced_disks_on_destroy.setter + def delete_unreferenced_disks_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "delete_unreferenced_disks_on_destroy", value) + + @_builtins.property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Optional VM description applied after cloning. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "description", value) + + @_builtins.property + @pulumi.getter + def disk(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]]]: + """ + Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + """ + return pulumi.get(self, "disk") + + @disk.setter + def disk(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineDiskArgs']]]]): + pulumi.set(self, "disk", value) + + @_builtins.property + @pulumi.getter + def memory(self) -> Optional[pulumi.Input['ClonedVirtualMachineMemoryArgs']]: + """ + Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + """ + return pulumi.get(self, "memory") + + @memory.setter + def memory(self, value: Optional[pulumi.Input['ClonedVirtualMachineMemoryArgs']]): + pulumi.set(self, "memory", value) + + @_builtins.property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Optional VM name override applied after cloning. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "name", value) + + @_builtins.property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]]]: + """ + Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['ClonedVirtualMachineNetworkArgs']]]]): + pulumi.set(self, "network", value) + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Target node for the cloned VM. + """ + return pulumi.get(self, "node_name") + + @node_name.setter + def node_name(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "node_name", value) + + @_builtins.property + @pulumi.getter(name="purgeOnDestroy") + def purge_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Purge backup configuration on destroy. + """ + return pulumi.get(self, "purge_on_destroy") + + @purge_on_destroy.setter + def purge_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "purge_on_destroy", value) + + @_builtins.property + @pulumi.getter + def rng(self) -> Optional[pulumi.Input['ClonedVirtualMachineRngArgs']]: + """ + Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + """ + return pulumi.get(self, "rng") + + @rng.setter + def rng(self, value: Optional[pulumi.Input['ClonedVirtualMachineRngArgs']]): + pulumi.set(self, "rng", value) + + @_builtins.property + @pulumi.getter(name="stopOnDestroy") + def stop_on_destroy(self) -> Optional[pulumi.Input[_builtins.bool]]: + """ + Stop the VM on destroy (instead of shutdown). + """ + return pulumi.get(self, "stop_on_destroy") + + @stop_on_destroy.setter + def stop_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): + pulumi.set(self, "stop_on_destroy", value) + + @_builtins.property + @pulumi.getter + def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]: + """ + Tags applied after cloning. + """ + return pulumi.get(self, "tags") + + @tags.setter + def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]): + pulumi.set(self, "tags", value) + + @_builtins.property + @pulumi.getter + def timeouts(self) -> Optional[pulumi.Input['ClonedVirtualMachineTimeoutsArgs']]: + return pulumi.get(self, "timeouts") + + @timeouts.setter + def timeouts(self, value: Optional[pulumi.Input['ClonedVirtualMachineTimeoutsArgs']]): + pulumi.set(self, "timeouts", value) + + @_builtins.property + @pulumi.getter + def vga(self) -> Optional[pulumi.Input['ClonedVirtualMachineVgaArgs']]: + """ + Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + """ + return pulumi.get(self, "vga") + + @vga.setter + def vga(self, value: Optional[pulumi.Input['ClonedVirtualMachineVgaArgs']]): + pulumi.set(self, "vga", value) + + @_builtins.property + @pulumi.getter(name="vmId") + def vm_id(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + The VM identifier in the Proxmox cluster. + """ + return pulumi.get(self, "vm_id") + + @vm_id.setter + def vm_id(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "vm_id", value) + + +@pulumi.type_token("proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine") +class ClonedVirtualMachine(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineCdromArgs', 'ClonedVirtualMachineCdromArgsDict']]]]] = None, + clone: Optional[pulumi.Input[Union['ClonedVirtualMachineCloneArgs', 'ClonedVirtualMachineCloneArgsDict']]] = None, + cpu: Optional[pulumi.Input[Union['ClonedVirtualMachineCpuArgs', 'ClonedVirtualMachineCpuArgsDict']]] = None, + delete: Optional[pulumi.Input[Union['ClonedVirtualMachineDeleteArgs', 'ClonedVirtualMachineDeleteArgsDict']]] = None, + delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + disk: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineDiskArgs', 'ClonedVirtualMachineDiskArgsDict']]]]] = None, + memory: Optional[pulumi.Input[Union['ClonedVirtualMachineMemoryArgs', 'ClonedVirtualMachineMemoryArgsDict']]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineNetworkArgs', 'ClonedVirtualMachineNetworkArgsDict']]]]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + purge_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + rng: Optional[pulumi.Input[Union['ClonedVirtualMachineRngArgs', 'ClonedVirtualMachineRngArgsDict']]] = None, + stop_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + timeouts: Optional[pulumi.Input[Union['ClonedVirtualMachineTimeoutsArgs', 'ClonedVirtualMachineTimeoutsArgsDict']]] = None, + vga: Optional[pulumi.Input[Union['ClonedVirtualMachineVgaArgs', 'ClonedVirtualMachineVgaArgsDict']]] = None, + vm_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + """ + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + # Example 1: Basic clone with minimal management + basic_clone = proxmoxve.vm.ClonedVirtualMachine("basic_clone", + node_name="pve", + name="basic-clone", + clone={ + "source_vm_id": 100, + "full": True, + }, + cpu={ + "cores": 4, + }) + # Example 2: Clone with explicit network management + network_managed = proxmoxve.vm.ClonedVirtualMachine("network_managed", + node_name="pve", + name="network-clone", + clone={ + "source_vm_id": 100, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + "tag": 100, + }, + "net1": { + "bridge": "vmbr1", + "model": "virtio", + "firewall": True, + "mac_address": "BC:24:11:2E:C5:00", + }, + }, + cpu={ + "cores": 2, + }) + # Example 3: Clone with disk management + disk_managed = proxmoxve.vm.ClonedVirtualMachine("disk_managed", + node_name="pve", + name="disk-clone", + clone={ + "source_vm_id": 100, + "target_datastore": "local-lvm", + }, + disk={ + "scsi0": { + "datastore_id": "local-lvm", + "size_gb": 50, + "discard": "on", + "ssd": True, + }, + "scsi1": { + "datastore_id": "local-lvm", + "size_gb": 100, + "backup": False, + }, + }) + # Example 4: Clone with explicit device deletion + selective_delete = proxmoxve.vm.ClonedVirtualMachine("selective_delete", + node_name="pve", + name="minimal-clone", + clone={ + "source_vm_id": 100, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + }, + }, + delete={ + "networks": [ + "net1", + "net2", + ], + }) + # Example 5: Full-featured clone with multiple settings + full_featured = proxmoxve.vm.ClonedVirtualMachine("full_featured", + node_name="pve", + name="production-vm", + description="Production VM cloned from template", + tags=[ + "production", + "web", + ], + clone={ + "source_vm_id": 100, + "source_node_name": "pve", + "full": True, + "target_datastore": "local-lvm", + "retries": 3, + }, + cpu={ + "cores": 8, + "sockets": 1, + "architecture": "x86_64", + "type": "host", + }, + memory={ + "size": 8192, + "balloon": 2048, + "shares": 2000, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + "tag": 100, + "firewall": True, + "rate_limit": 100, + }, + }, + disk={ + "scsi0": { + "datastore_id": "local-lvm", + "size_gb": 100, + "discard": "on", + "iothread": True, + "ssd": True, + "cache": "writethrough", + }, + }, + vga={ + "type": "std", + "memory": 16, + }, + delete={ + "disks": ["ide2"], + }, + stop_on_destroy=False, + purge_on_destroy=True, + delete_unreferenced_disks_on_destroy=False, + timeouts={ + "create": "30m", + "update": "30m", + "delete": "10m", + }) + # Example 6: Linked clone for testing + test_clone = proxmoxve.vm.ClonedVirtualMachine("test_clone", + node_name="pve", + name="test-vm", + clone={ + "source_vm_id": 100, + "full": False, + }, + cpu={ + "cores": 2, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + }, + }) + # Example 7: Clone with pool assignment + pooled_clone = proxmoxve.vm.ClonedVirtualMachine("pooled_clone", + node_name="pve", + name="pooled-vm", + clone={ + "source_vm_id": 100, + "pool_id": "production", + }, + cpu={ + "cores": 4, + }) + # Example 8: Import existing cloned VM + imported = proxmoxve.vm.ClonedVirtualMachine("imported", + vm_id="123", + node_name="pve", + clone={ + "source_vm_id": 100, + }, + cpu={ + "cores": 4, + }) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineCdromArgs', 'ClonedVirtualMachineCdromArgsDict']]]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + :param pulumi.Input[Union['ClonedVirtualMachineCloneArgs', 'ClonedVirtualMachineCloneArgsDict']] clone: Clone settings. Changes require recreation. + :param pulumi.Input[Union['ClonedVirtualMachineCpuArgs', 'ClonedVirtualMachineCpuArgsDict']] cpu: The CPU configuration. + :param pulumi.Input[Union['ClonedVirtualMachineDeleteArgs', 'ClonedVirtualMachineDeleteArgsDict']] delete: Explicit deletions to perform after cloning/updating. Entries persist across applies. + :param pulumi.Input[_builtins.str] description: Optional VM description applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineDiskArgs', 'ClonedVirtualMachineDiskArgsDict']]]] disk: Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + :param pulumi.Input[Union['ClonedVirtualMachineMemoryArgs', 'ClonedVirtualMachineMemoryArgsDict']] memory: Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + :param pulumi.Input[_builtins.str] name: Optional VM name override applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineNetworkArgs', 'ClonedVirtualMachineNetworkArgsDict']]]] network: Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + :param pulumi.Input[_builtins.str] node_name: Target node for the cloned VM. + :param pulumi.Input[_builtins.bool] purge_on_destroy: Purge backup configuration on destroy. + :param pulumi.Input[Union['ClonedVirtualMachineRngArgs', 'ClonedVirtualMachineRngArgsDict']] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input[_builtins.bool] stop_on_destroy: Stop the VM on destroy (instead of shutdown). + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: Tags applied after cloning. + :param pulumi.Input[Union['ClonedVirtualMachineVgaArgs', 'ClonedVirtualMachineVgaArgsDict']] vga: Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + :param pulumi.Input[_builtins.str] vm_id: The VM identifier in the Proxmox cluster. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ClonedVirtualMachineArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ```python + import pulumi + import pulumi_proxmoxve as proxmoxve + + # Example 1: Basic clone with minimal management + basic_clone = proxmoxve.vm.ClonedVirtualMachine("basic_clone", + node_name="pve", + name="basic-clone", + clone={ + "source_vm_id": 100, + "full": True, + }, + cpu={ + "cores": 4, + }) + # Example 2: Clone with explicit network management + network_managed = proxmoxve.vm.ClonedVirtualMachine("network_managed", + node_name="pve", + name="network-clone", + clone={ + "source_vm_id": 100, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + "tag": 100, + }, + "net1": { + "bridge": "vmbr1", + "model": "virtio", + "firewall": True, + "mac_address": "BC:24:11:2E:C5:00", + }, + }, + cpu={ + "cores": 2, + }) + # Example 3: Clone with disk management + disk_managed = proxmoxve.vm.ClonedVirtualMachine("disk_managed", + node_name="pve", + name="disk-clone", + clone={ + "source_vm_id": 100, + "target_datastore": "local-lvm", + }, + disk={ + "scsi0": { + "datastore_id": "local-lvm", + "size_gb": 50, + "discard": "on", + "ssd": True, + }, + "scsi1": { + "datastore_id": "local-lvm", + "size_gb": 100, + "backup": False, + }, + }) + # Example 4: Clone with explicit device deletion + selective_delete = proxmoxve.vm.ClonedVirtualMachine("selective_delete", + node_name="pve", + name="minimal-clone", + clone={ + "source_vm_id": 100, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + }, + }, + delete={ + "networks": [ + "net1", + "net2", + ], + }) + # Example 5: Full-featured clone with multiple settings + full_featured = proxmoxve.vm.ClonedVirtualMachine("full_featured", + node_name="pve", + name="production-vm", + description="Production VM cloned from template", + tags=[ + "production", + "web", + ], + clone={ + "source_vm_id": 100, + "source_node_name": "pve", + "full": True, + "target_datastore": "local-lvm", + "retries": 3, + }, + cpu={ + "cores": 8, + "sockets": 1, + "architecture": "x86_64", + "type": "host", + }, + memory={ + "size": 8192, + "balloon": 2048, + "shares": 2000, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + "tag": 100, + "firewall": True, + "rate_limit": 100, + }, + }, + disk={ + "scsi0": { + "datastore_id": "local-lvm", + "size_gb": 100, + "discard": "on", + "iothread": True, + "ssd": True, + "cache": "writethrough", + }, + }, + vga={ + "type": "std", + "memory": 16, + }, + delete={ + "disks": ["ide2"], + }, + stop_on_destroy=False, + purge_on_destroy=True, + delete_unreferenced_disks_on_destroy=False, + timeouts={ + "create": "30m", + "update": "30m", + "delete": "10m", + }) + # Example 6: Linked clone for testing + test_clone = proxmoxve.vm.ClonedVirtualMachine("test_clone", + node_name="pve", + name="test-vm", + clone={ + "source_vm_id": 100, + "full": False, + }, + cpu={ + "cores": 2, + }, + network={ + "net0": { + "bridge": "vmbr0", + "model": "virtio", + }, + }) + # Example 7: Clone with pool assignment + pooled_clone = proxmoxve.vm.ClonedVirtualMachine("pooled_clone", + node_name="pve", + name="pooled-vm", + clone={ + "source_vm_id": 100, + "pool_id": "production", + }, + cpu={ + "cores": 4, + }) + # Example 8: Import existing cloned VM + imported = proxmoxve.vm.ClonedVirtualMachine("imported", + vm_id="123", + node_name="pve", + clone={ + "source_vm_id": 100, + }, + cpu={ + "cores": 4, + }) + ``` + + :param str resource_name: The name of the resource. + :param ClonedVirtualMachineArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ClonedVirtualMachineArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineCdromArgs', 'ClonedVirtualMachineCdromArgsDict']]]]] = None, + clone: Optional[pulumi.Input[Union['ClonedVirtualMachineCloneArgs', 'ClonedVirtualMachineCloneArgsDict']]] = None, + cpu: Optional[pulumi.Input[Union['ClonedVirtualMachineCpuArgs', 'ClonedVirtualMachineCpuArgsDict']]] = None, + delete: Optional[pulumi.Input[Union['ClonedVirtualMachineDeleteArgs', 'ClonedVirtualMachineDeleteArgsDict']]] = None, + delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + disk: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineDiskArgs', 'ClonedVirtualMachineDiskArgsDict']]]]] = None, + memory: Optional[pulumi.Input[Union['ClonedVirtualMachineMemoryArgs', 'ClonedVirtualMachineMemoryArgsDict']]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineNetworkArgs', 'ClonedVirtualMachineNetworkArgsDict']]]]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + purge_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + rng: Optional[pulumi.Input[Union['ClonedVirtualMachineRngArgs', 'ClonedVirtualMachineRngArgsDict']]] = None, + stop_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + timeouts: Optional[pulumi.Input[Union['ClonedVirtualMachineTimeoutsArgs', 'ClonedVirtualMachineTimeoutsArgsDict']]] = None, + vga: Optional[pulumi.Input[Union['ClonedVirtualMachineVgaArgs', 'ClonedVirtualMachineVgaArgsDict']]] = None, + vm_id: Optional[pulumi.Input[_builtins.str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ClonedVirtualMachineArgs.__new__(ClonedVirtualMachineArgs) + + __props__.__dict__["cdrom"] = cdrom + if clone is None and not opts.urn: + raise TypeError("Missing required property 'clone'") + __props__.__dict__["clone"] = clone + __props__.__dict__["cpu"] = cpu + __props__.__dict__["delete"] = delete + __props__.__dict__["delete_unreferenced_disks_on_destroy"] = delete_unreferenced_disks_on_destroy + __props__.__dict__["description"] = description + __props__.__dict__["disk"] = disk + __props__.__dict__["memory"] = memory + __props__.__dict__["name"] = name + __props__.__dict__["network"] = network + if node_name is None and not opts.urn: + raise TypeError("Missing required property 'node_name'") + __props__.__dict__["node_name"] = node_name + __props__.__dict__["purge_on_destroy"] = purge_on_destroy + __props__.__dict__["rng"] = rng + __props__.__dict__["stop_on_destroy"] = stop_on_destroy + __props__.__dict__["tags"] = tags + __props__.__dict__["timeouts"] = timeouts + __props__.__dict__["vga"] = vga + __props__.__dict__["vm_id"] = vm_id + super(ClonedVirtualMachine, __self__).__init__( + 'proxmoxve:VM/clonedVirtualMachine:ClonedVirtualMachine', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineCdromArgs', 'ClonedVirtualMachineCdromArgsDict']]]]] = None, + clone: Optional[pulumi.Input[Union['ClonedVirtualMachineCloneArgs', 'ClonedVirtualMachineCloneArgsDict']]] = None, + cpu: Optional[pulumi.Input[Union['ClonedVirtualMachineCpuArgs', 'ClonedVirtualMachineCpuArgsDict']]] = None, + delete: Optional[pulumi.Input[Union['ClonedVirtualMachineDeleteArgs', 'ClonedVirtualMachineDeleteArgsDict']]] = None, + delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + description: Optional[pulumi.Input[_builtins.str]] = None, + disk: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineDiskArgs', 'ClonedVirtualMachineDiskArgsDict']]]]] = None, + memory: Optional[pulumi.Input[Union['ClonedVirtualMachineMemoryArgs', 'ClonedVirtualMachineMemoryArgsDict']]] = None, + name: Optional[pulumi.Input[_builtins.str]] = None, + network: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineNetworkArgs', 'ClonedVirtualMachineNetworkArgsDict']]]]] = None, + node_name: Optional[pulumi.Input[_builtins.str]] = None, + purge_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + rng: Optional[pulumi.Input[Union['ClonedVirtualMachineRngArgs', 'ClonedVirtualMachineRngArgsDict']]] = None, + stop_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None, + timeouts: Optional[pulumi.Input[Union['ClonedVirtualMachineTimeoutsArgs', 'ClonedVirtualMachineTimeoutsArgsDict']]] = None, + vga: Optional[pulumi.Input[Union['ClonedVirtualMachineVgaArgs', 'ClonedVirtualMachineVgaArgsDict']]] = None, + vm_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'ClonedVirtualMachine': + """ + Get an existing ClonedVirtualMachine resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineCdromArgs', 'ClonedVirtualMachineCdromArgsDict']]]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + :param pulumi.Input[Union['ClonedVirtualMachineCloneArgs', 'ClonedVirtualMachineCloneArgsDict']] clone: Clone settings. Changes require recreation. + :param pulumi.Input[Union['ClonedVirtualMachineCpuArgs', 'ClonedVirtualMachineCpuArgsDict']] cpu: The CPU configuration. + :param pulumi.Input[Union['ClonedVirtualMachineDeleteArgs', 'ClonedVirtualMachineDeleteArgsDict']] delete: Explicit deletions to perform after cloning/updating. Entries persist across applies. + :param pulumi.Input[_builtins.str] description: Optional VM description applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineDiskArgs', 'ClonedVirtualMachineDiskArgsDict']]]] disk: Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + :param pulumi.Input[Union['ClonedVirtualMachineMemoryArgs', 'ClonedVirtualMachineMemoryArgsDict']] memory: Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + :param pulumi.Input[_builtins.str] name: Optional VM name override applied after cloning. + :param pulumi.Input[Mapping[str, pulumi.Input[Union['ClonedVirtualMachineNetworkArgs', 'ClonedVirtualMachineNetworkArgsDict']]]] network: Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + :param pulumi.Input[_builtins.str] node_name: Target node for the cloned VM. + :param pulumi.Input[_builtins.bool] purge_on_destroy: Purge backup configuration on destroy. + :param pulumi.Input[Union['ClonedVirtualMachineRngArgs', 'ClonedVirtualMachineRngArgsDict']] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input[_builtins.bool] stop_on_destroy: Stop the VM on destroy (instead of shutdown). + :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: Tags applied after cloning. + :param pulumi.Input[Union['ClonedVirtualMachineVgaArgs', 'ClonedVirtualMachineVgaArgsDict']] vga: Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + :param pulumi.Input[_builtins.str] vm_id: The VM identifier in the Proxmox cluster. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ClonedVirtualMachineState.__new__(_ClonedVirtualMachineState) + + __props__.__dict__["cdrom"] = cdrom + __props__.__dict__["clone"] = clone + __props__.__dict__["cpu"] = cpu + __props__.__dict__["delete"] = delete + __props__.__dict__["delete_unreferenced_disks_on_destroy"] = delete_unreferenced_disks_on_destroy + __props__.__dict__["description"] = description + __props__.__dict__["disk"] = disk + __props__.__dict__["memory"] = memory + __props__.__dict__["name"] = name + __props__.__dict__["network"] = network + __props__.__dict__["node_name"] = node_name + __props__.__dict__["purge_on_destroy"] = purge_on_destroy + __props__.__dict__["rng"] = rng + __props__.__dict__["stop_on_destroy"] = stop_on_destroy + __props__.__dict__["tags"] = tags + __props__.__dict__["timeouts"] = timeouts + __props__.__dict__["vga"] = vga + __props__.__dict__["vm_id"] = vm_id + return ClonedVirtualMachine(resource_name, opts=opts, __props__=__props__) + + @_builtins.property + @pulumi.getter + def cdrom(self) -> pulumi.Output[Optional[Mapping[str, 'outputs.ClonedVirtualMachineCdrom']]]: + """ + The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. + """ + return pulumi.get(self, "cdrom") + + @_builtins.property + @pulumi.getter + def clone(self) -> pulumi.Output['outputs.ClonedVirtualMachineClone']: + """ + Clone settings. Changes require recreation. + """ + return pulumi.get(self, "clone") + + @_builtins.property + @pulumi.getter + def cpu(self) -> pulumi.Output[Optional['outputs.ClonedVirtualMachineCpu']]: + """ + The CPU configuration. + """ + return pulumi.get(self, "cpu") + + @_builtins.property + @pulumi.getter + def delete(self) -> pulumi.Output[Optional['outputs.ClonedVirtualMachineDelete']]: + """ + Explicit deletions to perform after cloning/updating. Entries persist across applies. + """ + return pulumi.get(self, "delete") + + @_builtins.property + @pulumi.getter(name="deleteUnreferencedDisksOnDestroy") + def delete_unreferenced_disks_on_destroy(self) -> pulumi.Output[_builtins.bool]: + return pulumi.get(self, "delete_unreferenced_disks_on_destroy") + + @_builtins.property + @pulumi.getter + def description(self) -> pulumi.Output[Optional[_builtins.str]]: + """ + Optional VM description applied after cloning. + """ + return pulumi.get(self, "description") + + @_builtins.property + @pulumi.getter + def disk(self) -> pulumi.Output[Optional[Mapping[str, 'outputs.ClonedVirtualMachineDisk']]]: + """ + Disks keyed by slot (scsi0, virtio0, sata0, ide0, ...). Only listed keys are managed. + """ + return pulumi.get(self, "disk") + + @_builtins.property + @pulumi.getter + def memory(self) -> pulumi.Output[Optional['outputs.ClonedVirtualMachineMemory']]: + """ + Memory configuration for the VM. Uses Proxmox memory ballooning to allow dynamic memory allocation. The `size` sets the total available RAM, while `balloon` sets the guaranteed floor. The host can reclaim memory between these values when needed. + """ + return pulumi.get(self, "memory") + + @_builtins.property + @pulumi.getter + def name(self) -> pulumi.Output[_builtins.str]: + """ + Optional VM name override applied after cloning. + """ + return pulumi.get(self, "name") + + @_builtins.property + @pulumi.getter + def network(self) -> pulumi.Output[Optional[Mapping[str, 'outputs.ClonedVirtualMachineNetwork']]]: + """ + Network devices keyed by slot (net0, net1, ...). Only listed keys are managed. + """ + return pulumi.get(self, "network") + + @_builtins.property + @pulumi.getter(name="nodeName") + def node_name(self) -> pulumi.Output[_builtins.str]: + """ + Target node for the cloned VM. + """ + return pulumi.get(self, "node_name") + + @_builtins.property + @pulumi.getter(name="purgeOnDestroy") + def purge_on_destroy(self) -> pulumi.Output[_builtins.bool]: + """ + Purge backup configuration on destroy. + """ + return pulumi.get(self, "purge_on_destroy") + + @_builtins.property + @pulumi.getter + def rng(self) -> pulumi.Output[Optional['outputs.ClonedVirtualMachineRng']]: + """ + Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + """ + return pulumi.get(self, "rng") + + @_builtins.property + @pulumi.getter(name="stopOnDestroy") + def stop_on_destroy(self) -> pulumi.Output[_builtins.bool]: + """ + Stop the VM on destroy (instead of shutdown). + """ + return pulumi.get(self, "stop_on_destroy") + + @_builtins.property + @pulumi.getter + def tags(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]: + """ + Tags applied after cloning. + """ + return pulumi.get(self, "tags") + + @_builtins.property + @pulumi.getter + def timeouts(self) -> pulumi.Output[Optional['outputs.ClonedVirtualMachineTimeouts']]: + return pulumi.get(self, "timeouts") + + @_builtins.property + @pulumi.getter + def vga(self) -> pulumi.Output[Optional['outputs.ClonedVirtualMachineVga']]: + """ + Configure the VGA Hardware. If you want to use high resolution modes (>= 1280x1024x16) you may need to increase the vga memory option. Since QEMU 2.9 the default VGA display type is `std` for all OS types besides some Windows versions (XP and older) which use `cirrus`. The `qxl` option enables the SPICE display server. For win* OS you can select how many independent displays you want, Linux guests can add displays themself. You can also run without any graphic card, using a serial device as terminal. See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) section 10.2.8 for more information and available configuration parameters. + """ + return pulumi.get(self, "vga") + + @_builtins.property + @pulumi.getter(name="vmId") + def vm_id(self) -> pulumi.Output[_builtins.str]: + """ + The VM identifier in the Proxmox cluster. + """ + return pulumi.get(self, "vm_id") + diff --git a/sdk/python/pulumi_proxmoxve/vm/outputs.py b/sdk/python/pulumi_proxmoxve/vm/outputs.py index f6753b86..f709a0fa 100644 --- a/sdk/python/pulumi_proxmoxve/vm/outputs.py +++ b/sdk/python/pulumi_proxmoxve/vm/outputs.py @@ -16,8 +16,17 @@ from . import outputs __all__ = [ + 'ClonedVirtualMachineCdrom', + 'ClonedVirtualMachineClone', + 'ClonedVirtualMachineCpu', + 'ClonedVirtualMachineDelete', + 'ClonedVirtualMachineDisk', + 'ClonedVirtualMachineMemory', + 'ClonedVirtualMachineNetwork', + 'ClonedVirtualMachineRng', + 'ClonedVirtualMachineTimeouts', + 'ClonedVirtualMachineVga', 'VirtualMachine2Cdrom', - 'VirtualMachine2Clone', 'VirtualMachine2Cpu', 'VirtualMachine2Rng', 'VirtualMachine2Timeouts', @@ -57,7 +66,7 @@ ] @pulumi.output_type -class VirtualMachine2Cdrom(dict): +class ClonedVirtualMachineCdrom(dict): @staticmethod def __key_warning(key: str): suggest = None @@ -65,14 +74,14 @@ def __key_warning(key: str): suggest = "file_id" if suggest: - pulumi.log.warn(f"Key '{key}' not found in VirtualMachine2Cdrom. Access the value via the '{suggest}' property getter instead.") + pulumi.log.warn(f"Key '{key}' not found in ClonedVirtualMachineCdrom. Access the value via the '{suggest}' property getter instead.") def __getitem__(self, key: str) -> Any: - VirtualMachine2Cdrom.__key_warning(key) + ClonedVirtualMachineCdrom.__key_warning(key) return super().__getitem__(key) def get(self, key: str, default = None) -> Any: - VirtualMachine2Cdrom.__key_warning(key) + ClonedVirtualMachineCdrom.__key_warning(key) return super().get(key, default) def __init__(__self__, *, @@ -93,34 +102,937 @@ def file_id(self) -> Optional[_builtins.str]: @pulumi.output_type -class VirtualMachine2Clone(dict): +class ClonedVirtualMachineClone(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "sourceVmId": + suggest = "source_vm_id" + elif key == "bandwidthLimit": + suggest = "bandwidth_limit" + elif key == "poolId": + suggest = "pool_id" + elif key == "snapshotName": + suggest = "snapshot_name" + elif key == "sourceNodeName": + suggest = "source_node_name" + elif key == "targetDatastore": + suggest = "target_datastore" + elif key == "targetFormat": + suggest = "target_format" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClonedVirtualMachineClone. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClonedVirtualMachineClone.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClonedVirtualMachineClone.__key_warning(key) + return super().get(key, default) + def __init__(__self__, *, - id: _builtins.int, - retries: Optional[_builtins.int] = None): - """ - :param _builtins.int id: The ID of the VM to clone. - :param _builtins.int retries: The number of retries to perform when cloning the VM (default: 3). - """ - pulumi.set(__self__, "id", id) + source_vm_id: _builtins.int, + bandwidth_limit: Optional[_builtins.int] = None, + full: Optional[_builtins.bool] = None, + pool_id: Optional[_builtins.str] = None, + retries: Optional[_builtins.int] = None, + snapshot_name: Optional[_builtins.str] = None, + source_node_name: Optional[_builtins.str] = None, + target_datastore: Optional[_builtins.str] = None, + target_format: Optional[_builtins.str] = None): + """ + :param _builtins.int source_vm_id: Source VM/template ID to clone from. + :param _builtins.int bandwidth_limit: Clone bandwidth limit in MB/s. + :param _builtins.bool full: Perform a full clone (true) or linked clone (false). + :param _builtins.str pool_id: Pool to assign the cloned VM to. + :param _builtins.int retries: Number of retries for clone operations. + :param _builtins.str snapshot_name: Snapshot name to clone from. + :param _builtins.str source_node_name: Source node of the VM/template. Defaults to target node if unset. + :param _builtins.str target_datastore: Target datastore for cloned disks. + :param _builtins.str target_format: Target disk format for clone (e.g., raw, qcow2). + """ + pulumi.set(__self__, "source_vm_id", source_vm_id) + if bandwidth_limit is not None: + pulumi.set(__self__, "bandwidth_limit", bandwidth_limit) + if full is not None: + pulumi.set(__self__, "full", full) + if pool_id is not None: + pulumi.set(__self__, "pool_id", pool_id) if retries is not None: pulumi.set(__self__, "retries", retries) + if snapshot_name is not None: + pulumi.set(__self__, "snapshot_name", snapshot_name) + if source_node_name is not None: + pulumi.set(__self__, "source_node_name", source_node_name) + if target_datastore is not None: + pulumi.set(__self__, "target_datastore", target_datastore) + if target_format is not None: + pulumi.set(__self__, "target_format", target_format) + + @_builtins.property + @pulumi.getter(name="sourceVmId") + def source_vm_id(self) -> _builtins.int: + """ + Source VM/template ID to clone from. + """ + return pulumi.get(self, "source_vm_id") + + @_builtins.property + @pulumi.getter(name="bandwidthLimit") + def bandwidth_limit(self) -> Optional[_builtins.int]: + """ + Clone bandwidth limit in MB/s. + """ + return pulumi.get(self, "bandwidth_limit") @_builtins.property @pulumi.getter - def id(self) -> _builtins.int: + def full(self) -> Optional[_builtins.bool]: """ - The ID of the VM to clone. + Perform a full clone (true) or linked clone (false). """ - return pulumi.get(self, "id") + return pulumi.get(self, "full") + + @_builtins.property + @pulumi.getter(name="poolId") + def pool_id(self) -> Optional[_builtins.str]: + """ + Pool to assign the cloned VM to. + """ + return pulumi.get(self, "pool_id") @_builtins.property @pulumi.getter def retries(self) -> Optional[_builtins.int]: """ - The number of retries to perform when cloning the VM (default: 3). + Number of retries for clone operations. """ return pulumi.get(self, "retries") + @_builtins.property + @pulumi.getter(name="snapshotName") + def snapshot_name(self) -> Optional[_builtins.str]: + """ + Snapshot name to clone from. + """ + return pulumi.get(self, "snapshot_name") + + @_builtins.property + @pulumi.getter(name="sourceNodeName") + def source_node_name(self) -> Optional[_builtins.str]: + """ + Source node of the VM/template. Defaults to target node if unset. + """ + return pulumi.get(self, "source_node_name") + + @_builtins.property + @pulumi.getter(name="targetDatastore") + def target_datastore(self) -> Optional[_builtins.str]: + """ + Target datastore for cloned disks. + """ + return pulumi.get(self, "target_datastore") + + @_builtins.property + @pulumi.getter(name="targetFormat") + def target_format(self) -> Optional[_builtins.str]: + """ + Target disk format for clone (e.g., raw, qcow2). + """ + return pulumi.get(self, "target_format") + + +@pulumi.output_type +class ClonedVirtualMachineCpu(dict): + def __init__(__self__, *, + affinity: Optional[_builtins.str] = None, + architecture: Optional[_builtins.str] = None, + cores: Optional[_builtins.int] = None, + flags: Optional[Sequence[_builtins.str]] = None, + hotplugged: Optional[_builtins.int] = None, + limit: Optional[_builtins.int] = None, + numa: Optional[_builtins.bool] = None, + sockets: Optional[_builtins.int] = None, + type: Optional[_builtins.str] = None, + units: Optional[_builtins.int] = None): + """ + :param _builtins.str affinity: The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + :param _builtins.str architecture: The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + :param _builtins.int cores: The number of CPU cores per socket (defaults to `1`). + :param Sequence[_builtins.str] flags: Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + :param _builtins.int hotplugged: The number of hotplugged vCPUs (defaults to `0`). + :param _builtins.int limit: Limit of CPU usage (defaults to `0` which means no limit). + :param _builtins.bool numa: Enable NUMA (defaults to `false`). + :param _builtins.int sockets: The number of CPU sockets (defaults to `1`). + :param _builtins.str type: Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + :param _builtins.int units: CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + """ + if affinity is not None: + pulumi.set(__self__, "affinity", affinity) + if architecture is not None: + pulumi.set(__self__, "architecture", architecture) + if cores is not None: + pulumi.set(__self__, "cores", cores) + if flags is not None: + pulumi.set(__self__, "flags", flags) + if hotplugged is not None: + pulumi.set(__self__, "hotplugged", hotplugged) + if limit is not None: + pulumi.set(__self__, "limit", limit) + if numa is not None: + pulumi.set(__self__, "numa", numa) + if sockets is not None: + pulumi.set(__self__, "sockets", sockets) + if type is not None: + pulumi.set(__self__, "type", type) + if units is not None: + pulumi.set(__self__, "units", units) + + @_builtins.property + @pulumi.getter + def affinity(self) -> Optional[_builtins.str]: + """ + The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. + """ + return pulumi.get(self, "affinity") + + @_builtins.property + @pulumi.getter + def architecture(self) -> Optional[_builtins.str]: + """ + The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. + """ + return pulumi.get(self, "architecture") + + @_builtins.property + @pulumi.getter + def cores(self) -> Optional[_builtins.int]: + """ + The number of CPU cores per socket (defaults to `1`). + """ + return pulumi.get(self, "cores") + + @_builtins.property + @pulumi.getter + def flags(self) -> Optional[Sequence[_builtins.str]]: + """ + Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. + """ + return pulumi.get(self, "flags") + + @_builtins.property + @pulumi.getter + def hotplugged(self) -> Optional[_builtins.int]: + """ + The number of hotplugged vCPUs (defaults to `0`). + """ + return pulumi.get(self, "hotplugged") + + @_builtins.property + @pulumi.getter + def limit(self) -> Optional[_builtins.int]: + """ + Limit of CPU usage (defaults to `0` which means no limit). + """ + return pulumi.get(self, "limit") + + @_builtins.property + @pulumi.getter + def numa(self) -> Optional[_builtins.bool]: + """ + Enable NUMA (defaults to `false`). + """ + return pulumi.get(self, "numa") + + @_builtins.property + @pulumi.getter + def sockets(self) -> Optional[_builtins.int]: + """ + The number of CPU sockets (defaults to `1`). + """ + return pulumi.get(self, "sockets") + + @_builtins.property + @pulumi.getter + def type(self) -> Optional[_builtins.str]: + """ + Emulated CPU type, it's recommended to use `x86-64-v2-AES` or higher (defaults to `kvm64`). See https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm*virtual*machines_settings for more information. + """ + return pulumi.get(self, "type") + + @_builtins.property + @pulumi.getter + def units(self) -> Optional[_builtins.int]: + """ + CPU weight for a VM. Argument is used in the kernel fair scheduler. The larger the number is, the more CPU time this VM gets. Number is relative to weights of all the other running VMs. + """ + return pulumi.get(self, "units") + + +@pulumi.output_type +class ClonedVirtualMachineDelete(dict): + def __init__(__self__, *, + disks: Optional[Sequence[_builtins.str]] = None, + networks: Optional[Sequence[_builtins.str]] = None): + """ + :param Sequence[_builtins.str] disks: Disk slots to delete (e.g., scsi2). + :param Sequence[_builtins.str] networks: Network slots to delete (e.g., net1). + """ + if disks is not None: + pulumi.set(__self__, "disks", disks) + if networks is not None: + pulumi.set(__self__, "networks", networks) + + @_builtins.property + @pulumi.getter + def disks(self) -> Optional[Sequence[_builtins.str]]: + """ + Disk slots to delete (e.g., scsi2). + """ + return pulumi.get(self, "disks") + + @_builtins.property + @pulumi.getter + def networks(self) -> Optional[Sequence[_builtins.str]]: + """ + Network slots to delete (e.g., net1). + """ + return pulumi.get(self, "networks") + + +@pulumi.output_type +class ClonedVirtualMachineDisk(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "datastoreId": + suggest = "datastore_id" + elif key == "importFrom": + suggest = "import_from" + elif key == "sizeGb": + suggest = "size_gb" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClonedVirtualMachineDisk. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClonedVirtualMachineDisk.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClonedVirtualMachineDisk.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + aio: Optional[_builtins.str] = None, + backup: Optional[_builtins.bool] = None, + cache: Optional[_builtins.str] = None, + datastore_id: Optional[_builtins.str] = None, + discard: Optional[_builtins.str] = None, + file: Optional[_builtins.str] = None, + format: Optional[_builtins.str] = None, + import_from: Optional[_builtins.str] = None, + iothread: Optional[_builtins.bool] = None, + media: Optional[_builtins.str] = None, + replicate: Optional[_builtins.bool] = None, + serial: Optional[_builtins.str] = None, + size_gb: Optional[_builtins.int] = None, + ssd: Optional[_builtins.bool] = None): + """ + :param _builtins.str aio: AIO mode (io_uring, native, threads). + :param _builtins.bool backup: Include disk in backups. + :param _builtins.str cache: Cache mode. + :param _builtins.str datastore_id: Target datastore for new disks when file is not provided. + :param _builtins.str discard: Discard/trim behavior. + :param _builtins.str file: Existing volume reference (e.g., local-lvm:vm-100-disk-0). + :param _builtins.str format: Disk format (raw, qcow2, vmdk). + :param _builtins.str import_from: Import source volume/file id. + :param _builtins.bool iothread: Use IO thread. + :param _builtins.str media: Disk media (e.g., disk, cdrom). + :param _builtins.bool replicate: Consider disk for replication. + :param _builtins.str serial: Disk serial number. + :param _builtins.int size_gb: Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `size_gb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + :param _builtins.bool ssd: Mark disk as SSD. + """ + if aio is not None: + pulumi.set(__self__, "aio", aio) + if backup is not None: + pulumi.set(__self__, "backup", backup) + if cache is not None: + pulumi.set(__self__, "cache", cache) + if datastore_id is not None: + pulumi.set(__self__, "datastore_id", datastore_id) + if discard is not None: + pulumi.set(__self__, "discard", discard) + if file is not None: + pulumi.set(__self__, "file", file) + if format is not None: + pulumi.set(__self__, "format", format) + if import_from is not None: + pulumi.set(__self__, "import_from", import_from) + if iothread is not None: + pulumi.set(__self__, "iothread", iothread) + if media is not None: + pulumi.set(__self__, "media", media) + if replicate is not None: + pulumi.set(__self__, "replicate", replicate) + if serial is not None: + pulumi.set(__self__, "serial", serial) + if size_gb is not None: + pulumi.set(__self__, "size_gb", size_gb) + if ssd is not None: + pulumi.set(__self__, "ssd", ssd) + + @_builtins.property + @pulumi.getter + def aio(self) -> Optional[_builtins.str]: + """ + AIO mode (io_uring, native, threads). + """ + return pulumi.get(self, "aio") + + @_builtins.property + @pulumi.getter + def backup(self) -> Optional[_builtins.bool]: + """ + Include disk in backups. + """ + return pulumi.get(self, "backup") + + @_builtins.property + @pulumi.getter + def cache(self) -> Optional[_builtins.str]: + """ + Cache mode. + """ + return pulumi.get(self, "cache") + + @_builtins.property + @pulumi.getter(name="datastoreId") + def datastore_id(self) -> Optional[_builtins.str]: + """ + Target datastore for new disks when file is not provided. + """ + return pulumi.get(self, "datastore_id") + + @_builtins.property + @pulumi.getter + def discard(self) -> Optional[_builtins.str]: + """ + Discard/trim behavior. + """ + return pulumi.get(self, "discard") + + @_builtins.property + @pulumi.getter + def file(self) -> Optional[_builtins.str]: + """ + Existing volume reference (e.g., local-lvm:vm-100-disk-0). + """ + return pulumi.get(self, "file") + + @_builtins.property + @pulumi.getter + def format(self) -> Optional[_builtins.str]: + """ + Disk format (raw, qcow2, vmdk). + """ + return pulumi.get(self, "format") + + @_builtins.property + @pulumi.getter(name="importFrom") + def import_from(self) -> Optional[_builtins.str]: + """ + Import source volume/file id. + """ + return pulumi.get(self, "import_from") + + @_builtins.property + @pulumi.getter + def iothread(self) -> Optional[_builtins.bool]: + """ + Use IO thread. + """ + return pulumi.get(self, "iothread") + + @_builtins.property + @pulumi.getter + def media(self) -> Optional[_builtins.str]: + """ + Disk media (e.g., disk, cdrom). + """ + return pulumi.get(self, "media") + + @_builtins.property + @pulumi.getter + def replicate(self) -> Optional[_builtins.bool]: + """ + Consider disk for replication. + """ + return pulumi.get(self, "replicate") + + @_builtins.property + @pulumi.getter + def serial(self) -> Optional[_builtins.str]: + """ + Disk serial number. + """ + return pulumi.get(self, "serial") + + @_builtins.property + @pulumi.getter(name="sizeGb") + def size_gb(self) -> Optional[_builtins.int]: + """ + Disk size (GiB) when creating new disks. **Note:** Disk shrinking is not supported. Attempting to set `size_gb` to a value smaller than the current disk size will result in an error. Only disk expansion is allowed. + """ + return pulumi.get(self, "size_gb") + + @_builtins.property + @pulumi.getter + def ssd(self) -> Optional[_builtins.bool]: + """ + Mark disk as SSD. + """ + return pulumi.get(self, "ssd") + + +@pulumi.output_type +class ClonedVirtualMachineMemory(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "keepHugepages": + suggest = "keep_hugepages" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClonedVirtualMachineMemory. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClonedVirtualMachineMemory.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClonedVirtualMachineMemory.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + balloon: Optional[_builtins.int] = None, + hugepages: Optional[_builtins.str] = None, + keep_hugepages: Optional[_builtins.bool] = None, + shares: Optional[_builtins.int] = None, + size: Optional[_builtins.int] = None): + """ + :param _builtins.int balloon: Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + :param _builtins.str hugepages: Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + + **Options:** + - `2` - Use 2 MiB hugepages + - `1024` - Use 1 GiB hugepages + - `any` - Use any available hugepage size + :param _builtins.bool keep_hugepages: Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + :param _builtins.int shares: CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + :param _builtins.int size: Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + """ + if balloon is not None: + pulumi.set(__self__, "balloon", balloon) + if hugepages is not None: + pulumi.set(__self__, "hugepages", hugepages) + if keep_hugepages is not None: + pulumi.set(__self__, "keep_hugepages", keep_hugepages) + if shares is not None: + pulumi.set(__self__, "shares", shares) + if size is not None: + pulumi.set(__self__, "size", size) + + @_builtins.property + @pulumi.getter + def balloon(self) -> Optional[_builtins.int]: + """ + Minimum guaranteed memory in MiB via balloon device. This is the floor amount of RAM that is always guaranteed to the VM. Setting to `0` disables the balloon driver entirely (defaults to `0`). + """ + return pulumi.get(self, "balloon") + + @_builtins.property + @pulumi.getter + def hugepages(self) -> Optional[_builtins.str]: + """ + Enable hugepages for VM memory allocation. Hugepages can improve performance for memory-intensive workloads by reducing TLB misses. + + **Options:** + - `2` - Use 2 MiB hugepages + - `1024` - Use 1 GiB hugepages + - `any` - Use any available hugepage size + """ + return pulumi.get(self, "hugepages") + + @_builtins.property + @pulumi.getter(name="keepHugepages") + def keep_hugepages(self) -> Optional[_builtins.bool]: + """ + Don't release hugepages when the VM shuts down. By default, hugepages are released back to the host when the VM stops. Setting this to `true` keeps them allocated for faster VM startup (defaults to `false`). + """ + return pulumi.get(self, "keep_hugepages") + + @_builtins.property + @pulumi.getter + def shares(self) -> Optional[_builtins.int]: + """ + CPU scheduler priority for memory ballooning. This is used by the kernel fair scheduler. Higher values mean this VM gets more CPU time during memory ballooning operations. The value is relative to other running VMs (defaults to `1000`). + """ + return pulumi.get(self, "shares") + + @_builtins.property + @pulumi.getter + def size(self) -> Optional[_builtins.int]: + """ + Total memory available to the VM in MiB. This is the total RAM the VM can use. When ballooning is enabled (balloon > 0), memory between `balloon` and `size` can be reclaimed by the host. When ballooning is disabled (balloon = 0), this is the fixed amount of RAM allocated to the VM (defaults to `512` MiB). + """ + return pulumi.get(self, "size") + + +@pulumi.output_type +class ClonedVirtualMachineNetwork(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "linkDown": + suggest = "link_down" + elif key == "macAddress": + suggest = "mac_address" + elif key == "rateLimit": + suggest = "rate_limit" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClonedVirtualMachineNetwork. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClonedVirtualMachineNetwork.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClonedVirtualMachineNetwork.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + bridge: Optional[_builtins.str] = None, + firewall: Optional[_builtins.bool] = None, + link_down: Optional[_builtins.bool] = None, + mac_address: Optional[_builtins.str] = None, + model: Optional[_builtins.str] = None, + mtu: Optional[_builtins.int] = None, + queues: Optional[_builtins.int] = None, + rate_limit: Optional[_builtins.float] = None, + tag: Optional[_builtins.int] = None, + trunks: Optional[Sequence[_builtins.int]] = None): + """ + :param _builtins.str bridge: Bridge name. + :param _builtins.bool firewall: Enable firewall on this interface. + :param _builtins.bool link_down: Keep link down. + :param _builtins.str mac_address: MAC address (computed if omitted). + :param _builtins.str model: NIC model (e.g., virtio, e1000). + :param _builtins.int mtu: Interface MTU. + :param _builtins.int queues: Number of multiqueue NIC queues. + :param _builtins.float rate_limit: Rate limit (MB/s). + :param _builtins.int tag: VLAN tag. + :param Sequence[_builtins.int] trunks: Trunk VLAN IDs. + """ + if bridge is not None: + pulumi.set(__self__, "bridge", bridge) + if firewall is not None: + pulumi.set(__self__, "firewall", firewall) + if link_down is not None: + pulumi.set(__self__, "link_down", link_down) + if mac_address is not None: + pulumi.set(__self__, "mac_address", mac_address) + if model is not None: + pulumi.set(__self__, "model", model) + if mtu is not None: + pulumi.set(__self__, "mtu", mtu) + if queues is not None: + pulumi.set(__self__, "queues", queues) + if rate_limit is not None: + pulumi.set(__self__, "rate_limit", rate_limit) + if tag is not None: + pulumi.set(__self__, "tag", tag) + if trunks is not None: + pulumi.set(__self__, "trunks", trunks) + + @_builtins.property + @pulumi.getter + def bridge(self) -> Optional[_builtins.str]: + """ + Bridge name. + """ + return pulumi.get(self, "bridge") + + @_builtins.property + @pulumi.getter + def firewall(self) -> Optional[_builtins.bool]: + """ + Enable firewall on this interface. + """ + return pulumi.get(self, "firewall") + + @_builtins.property + @pulumi.getter(name="linkDown") + def link_down(self) -> Optional[_builtins.bool]: + """ + Keep link down. + """ + return pulumi.get(self, "link_down") + + @_builtins.property + @pulumi.getter(name="macAddress") + def mac_address(self) -> Optional[_builtins.str]: + """ + MAC address (computed if omitted). + """ + return pulumi.get(self, "mac_address") + + @_builtins.property + @pulumi.getter + def model(self) -> Optional[_builtins.str]: + """ + NIC model (e.g., virtio, e1000). + """ + return pulumi.get(self, "model") + + @_builtins.property + @pulumi.getter + def mtu(self) -> Optional[_builtins.int]: + """ + Interface MTU. + """ + return pulumi.get(self, "mtu") + + @_builtins.property + @pulumi.getter + def queues(self) -> Optional[_builtins.int]: + """ + Number of multiqueue NIC queues. + """ + return pulumi.get(self, "queues") + + @_builtins.property + @pulumi.getter(name="rateLimit") + def rate_limit(self) -> Optional[_builtins.float]: + """ + Rate limit (MB/s). + """ + return pulumi.get(self, "rate_limit") + + @_builtins.property + @pulumi.getter + def tag(self) -> Optional[_builtins.int]: + """ + VLAN tag. + """ + return pulumi.get(self, "tag") + + @_builtins.property + @pulumi.getter + def trunks(self) -> Optional[Sequence[_builtins.int]]: + """ + Trunk VLAN IDs. + """ + return pulumi.get(self, "trunks") + + +@pulumi.output_type +class ClonedVirtualMachineRng(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "maxBytes": + suggest = "max_bytes" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClonedVirtualMachineRng. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClonedVirtualMachineRng.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClonedVirtualMachineRng.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + max_bytes: Optional[_builtins.int] = None, + period: Optional[_builtins.int] = None, + source: Optional[_builtins.str] = None): + """ + :param _builtins.int max_bytes: Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + :param _builtins.int period: Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + :param _builtins.str source: The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + """ + if max_bytes is not None: + pulumi.set(__self__, "max_bytes", max_bytes) + if period is not None: + pulumi.set(__self__, "period", period) + if source is not None: + pulumi.set(__self__, "source", source) + + @_builtins.property + @pulumi.getter(name="maxBytes") + def max_bytes(self) -> Optional[_builtins.int]: + """ + Maximum bytes of entropy allowed to get injected into the guest every period. Use 0 to disable limiting (potentially dangerous). + """ + return pulumi.get(self, "max_bytes") + + @_builtins.property + @pulumi.getter + def period(self) -> Optional[_builtins.int]: + """ + Period in milliseconds to limit entropy injection to the guest. Use 0 to disable limiting (potentially dangerous). + """ + return pulumi.get(self, "period") + + @_builtins.property + @pulumi.getter + def source(self) -> Optional[_builtins.str]: + """ + The file on the host to gather entropy from. In most cases, `/dev/urandom` should be preferred over `/dev/random` to avoid entropy-starvation issues on the host. + """ + return pulumi.get(self, "source") + + +@pulumi.output_type +class ClonedVirtualMachineTimeouts(dict): + def __init__(__self__, *, + create: Optional[_builtins.str] = None, + delete: Optional[_builtins.str] = None, + read: Optional[_builtins.str] = None, + update: Optional[_builtins.str] = None): + """ + :param _builtins.str create: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + :param _builtins.str delete: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + :param _builtins.str read: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + :param _builtins.str update: A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ + if create is not None: + pulumi.set(__self__, "create", create) + if delete is not None: + pulumi.set(__self__, "delete", delete) + if read is not None: + pulumi.set(__self__, "read", read) + if update is not None: + pulumi.set(__self__, "update", update) + + @_builtins.property + @pulumi.getter + def create(self) -> Optional[_builtins.str]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ + return pulumi.get(self, "create") + + @_builtins.property + @pulumi.getter + def delete(self) -> Optional[_builtins.str]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs. + """ + return pulumi.get(self, "delete") + + @_builtins.property + @pulumi.getter + def read(self) -> Optional[_builtins.str]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). Read operations occur during any refresh or planning operation when refresh is enabled. + """ + return pulumi.get(self, "read") + + @_builtins.property + @pulumi.getter + def update(self) -> Optional[_builtins.str]: + """ + A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as "30s" or "2h45m". Valid time units are "s" (seconds), "m" (minutes), "h" (hours). + """ + return pulumi.get(self, "update") + + +@pulumi.output_type +class ClonedVirtualMachineVga(dict): + def __init__(__self__, *, + clipboard: Optional[_builtins.str] = None, + memory: Optional[_builtins.int] = None, + type: Optional[_builtins.str] = None): + """ + :param _builtins.str clipboard: Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + :param _builtins.int memory: The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + :param _builtins.str type: The VGA type (defaults to `std`). + """ + if clipboard is not None: + pulumi.set(__self__, "clipboard", clipboard) + if memory is not None: + pulumi.set(__self__, "memory", memory) + if type is not None: + pulumi.set(__self__, "type", type) + + @_builtins.property + @pulumi.getter + def clipboard(self) -> Optional[_builtins.str]: + """ + Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added. Currently only `vnc` is available. Migration with VNC clipboard is not supported by Proxmox. + """ + return pulumi.get(self, "clipboard") + + @_builtins.property + @pulumi.getter + def memory(self) -> Optional[_builtins.int]: + """ + The VGA memory in megabytes (4-512 MB). Has no effect with serial display. + """ + return pulumi.get(self, "memory") + + @_builtins.property + @pulumi.getter + def type(self) -> Optional[_builtins.str]: + """ + The VGA type (defaults to `std`). + """ + return pulumi.get(self, "type") + + +@pulumi.output_type +class VirtualMachine2Cdrom(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "fileId": + suggest = "file_id" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in VirtualMachine2Cdrom. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + VirtualMachine2Cdrom.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + VirtualMachine2Cdrom.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + file_id: Optional[_builtins.str] = None): + """ + :param _builtins.str file_id: The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + """ + if file_id is not None: + pulumi.set(__self__, "file_id", file_id) + + @_builtins.property + @pulumi.getter(name="fileId") + def file_id(self) -> Optional[_builtins.str]: + """ + The file ID of the CD-ROM, or `cdrom|none`. Defaults to `none` to leave the CD-ROM empty. Use `cdrom` to connect to the physical drive. + """ + return pulumi.get(self, "file_id") + @pulumi.output_type class VirtualMachine2Cpu(dict): @@ -137,7 +1049,7 @@ def __init__(__self__, *, units: Optional[_builtins.int] = None): """ :param _builtins.str affinity: The CPU cores that are used to run the VM’s vCPU. The value is a list of CPU IDs, separated by commas. The CPU IDs are zero-based. For example, `0,1,2,3` (which also can be shortened to `0-3`) means that the VM’s vCPUs are run on the first four CPU cores. Setting `affinity` is only allowed for `root@pam` authenticated user. - :param _builtins.str architecture: The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + :param _builtins.str architecture: The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. :param _builtins.int cores: The number of CPU cores per socket (defaults to `1`). :param Sequence[_builtins.str] flags: Set of additional CPU flags. Use `+FLAG` to enable, `-FLAG` to disable a flag. Custom CPU models can specify any flag supported by QEMU/KVM, VM-specific flags must be from the following set for security reasons: `pcid`, `spec-ctrl`, `ibpb`, `ssbd`, `virt-ssbd`, `amd-ssbd`, `amd-no-ssb`, `pdpe1gb`, `md-clear`, `hv-tlbflush`, `hv-evmcs`, `aes`. :param _builtins.int hotplugged: The number of hotplugged vCPUs (defaults to `0`). @@ -180,7 +1092,7 @@ def affinity(self) -> Optional[_builtins.str]: @pulumi.getter def architecture(self) -> Optional[_builtins.str]: """ - The CPU architecture `` (defaults to the host). Setting `affinity` is only allowed for `root@pam` authenticated user. + The CPU architecture `` (defaults to the host). Setting `architecture` is only allowed for `root@pam` authenticated user. """ return pulumi.get(self, "architecture") @@ -1086,10 +1998,14 @@ def __init__(__self__, *, :param _builtins.str file_format: The file format. :param _builtins.str file_id: The file ID for a disk image when importing a disk into VM. The ID format is `:/`, for example `local:iso/centos8.img`. Can be also taken from - `Download.File` resource. *Deprecated*, use `import_from` instead. - :param _builtins.str import_from: The file ID for a disk image to import into VM. The image must be of `import` content type. - The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + `Download.File` resource. Prefer `import_from` for uncompressed images. + Use `file_id` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + with `content_type = "iso"` and `decompression_algorithm` set. See the + Create a VM from a Cloud Image guide for examples. + :param _builtins.str import_from: The file ID for a disk image to import into VM. The image must be of `import` content type + (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + Can be also taken from `Download.File` resource. Note: compressed images downloaded with + `decompression_algorithm` cannot use `import_from`; use `file_id` instead. :param _builtins.bool iothread: Whether to use iothreads for this disk (defaults to `false`). :param _builtins.str path_in_datastore: The in-datastore path to the disk image. @@ -1204,7 +2120,10 @@ def file_id(self) -> Optional[_builtins.str]: """ The file ID for a disk image when importing a disk into VM. The ID format is `:/`, for example `local:iso/centos8.img`. Can be also taken from - `Download.File` resource. *Deprecated*, use `import_from` instead. + `Download.File` resource. Prefer `import_from` for uncompressed images. + Use `file_id` when working with compressed cloud images (e.g., `.qcow2.xz`) that were downloaded + with `content_type = "iso"` and `decompression_algorithm` set. See the + Create a VM from a Cloud Image guide for examples. """ return pulumi.get(self, "file_id") @@ -1212,9 +2131,10 @@ def file_id(self) -> Optional[_builtins.str]: @pulumi.getter(name="importFrom") def import_from(self) -> Optional[_builtins.str]: """ - The file ID for a disk image to import into VM. The image must be of `import` content type. - The ID format is `:import/`, for example `local:import/centos8.qcow2`. Can be also taken from - a disk replacement operation, which will require a VM reboot. Your original disks will remain as detached disks. + The file ID for a disk image to import into VM. The image must be of `import` content type + (uncompressed images only). The ID format is `:import/`, for example `local:import/centos8.qcow2`. + Can be also taken from `Download.File` resource. Note: compressed images downloaded with + `decompression_algorithm` cannot use `import_from`; use `file_id` instead. """ return pulumi.get(self, "import_from") diff --git a/sdk/python/pulumi_proxmoxve/vm/virtual_machine.py b/sdk/python/pulumi_proxmoxve/vm/virtual_machine.py index d3a62351..11463398 100644 --- a/sdk/python/pulumi_proxmoxve/vm/virtual_machine.py +++ b/sdk/python/pulumi_proxmoxve/vm/virtual_machine.py @@ -37,6 +37,7 @@ def __init__(__self__, *, efi_disk: Optional[pulumi.Input['VirtualMachineEfiDiskArgs']] = None, hook_script_file_id: Optional[pulumi.Input[_builtins.str]] = None, hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]] = None, + hotplug: Optional[pulumi.Input[_builtins.str]] = None, initialization: Optional[pulumi.Input['VirtualMachineInitializationArgs']] = None, keyboard_layout: Optional[pulumi.Input[_builtins.str]] = None, kvm_arguments: Optional[pulumi.Input[_builtins.str]] = None, @@ -98,6 +99,9 @@ def __init__(__self__, *, to `ovmf`) :param pulumi.Input[_builtins.str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute). :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]] hostpcis: A host PCI device mapping (multiple blocks supported). + :param pulumi.Input[_builtins.str] hotplug: Selectively enable hotplug features. Supported values + are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. :param pulumi.Input['VirtualMachineInitializationArgs'] initialization: The cloud-init configuration. :param pulumi.Input[_builtins.str] keyboard_layout: The keyboard layout (defaults to `en-us`). :param pulumi.Input[_builtins.str] kvm_arguments: Arbitrary arguments passed to kvm. @@ -150,7 +154,10 @@ def __init__(__self__, *, to 1800). :param pulumi.Input[_builtins.int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults to 300). - :param pulumi.Input['VirtualMachineTpmStateArgs'] tpm_state: The TPM state device. + :param pulumi.Input['VirtualMachineTpmStateArgs'] tpm_state: The TPM state device. The VM must be stopped before + adding, removing, or moving a TPM state device; the provider automatically + handles the shutdown/start cycle. Changing `version` requires recreating the + VM because Proxmox only supports setting the TPM version at creation time. :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]] usbs: A host USB device mapping (multiple blocks supported). :param pulumi.Input['VirtualMachineVgaArgs'] vga: The VGA configuration. :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineVirtiofArgs']]] virtiofs: Virtiofs share @@ -188,6 +195,8 @@ def __init__(__self__, *, pulumi.set(__self__, "hook_script_file_id", hook_script_file_id) if hostpcis is not None: pulumi.set(__self__, "hostpcis", hostpcis) + if hotplug is not None: + pulumi.set(__self__, "hotplug", hotplug) if initialization is not None: pulumi.set(__self__, "initialization", initialization) if keyboard_layout is not None: @@ -468,6 +477,20 @@ def hostpcis(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachin def hostpcis(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]]): pulumi.set(self, "hostpcis", value) + @_builtins.property + @pulumi.getter + def hotplug(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Selectively enable hotplug features. Supported values + are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + """ + return pulumi.get(self, "hotplug") + + @hotplug.setter + def hotplug(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "hotplug", value) + @_builtins.property @pulumi.getter def initialization(self) -> Optional[pulumi.Input['VirtualMachineInitializationArgs']]: @@ -910,7 +933,10 @@ def timeout_stop_vm(self, value: Optional[pulumi.Input[_builtins.int]]): @pulumi.getter(name="tpmState") def tpm_state(self) -> Optional[pulumi.Input['VirtualMachineTpmStateArgs']]: """ - The TPM state device. + The TPM state device. The VM must be stopped before + adding, removing, or moving a TPM state device; the provider automatically + handles the shutdown/start cycle. Changing `version` requires recreating the + VM because Proxmox only supports setting the TPM version at creation time. """ return pulumi.get(self, "tpm_state") @@ -997,6 +1023,7 @@ def __init__(__self__, *, efi_disk: Optional[pulumi.Input['VirtualMachineEfiDiskArgs']] = None, hook_script_file_id: Optional[pulumi.Input[_builtins.str]] = None, hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]] = None, + hotplug: Optional[pulumi.Input[_builtins.str]] = None, initialization: Optional[pulumi.Input['VirtualMachineInitializationArgs']] = None, ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]]] = None, ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]]] = None, @@ -1060,6 +1087,9 @@ def __init__(__self__, *, to `ovmf`) :param pulumi.Input[_builtins.str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute). :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]] hostpcis: A host PCI device mapping (multiple blocks supported). + :param pulumi.Input[_builtins.str] hotplug: Selectively enable hotplug features. Supported values + are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. :param pulumi.Input['VirtualMachineInitializationArgs'] initialization: The cloud-init configuration. :param pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]] ipv4_addresses: The IPv4 addresses per network interface published by the QEMU agent (empty list when `agent.enabled` is `false`) @@ -1120,7 +1150,10 @@ def __init__(__self__, *, to 1800). :param pulumi.Input[_builtins.int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults to 300). - :param pulumi.Input['VirtualMachineTpmStateArgs'] tpm_state: The TPM state device. + :param pulumi.Input['VirtualMachineTpmStateArgs'] tpm_state: The TPM state device. The VM must be stopped before + adding, removing, or moving a TPM state device; the provider automatically + handles the shutdown/start cycle. Changing `version` requires recreating the + VM because Proxmox only supports setting the TPM version at creation time. :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineUsbArgs']]] usbs: A host USB device mapping (multiple blocks supported). :param pulumi.Input['VirtualMachineVgaArgs'] vga: The VGA configuration. :param pulumi.Input[Sequence[pulumi.Input['VirtualMachineVirtiofArgs']]] virtiofs: Virtiofs share @@ -1157,6 +1190,8 @@ def __init__(__self__, *, pulumi.set(__self__, "hook_script_file_id", hook_script_file_id) if hostpcis is not None: pulumi.set(__self__, "hostpcis", hostpcis) + if hotplug is not None: + pulumi.set(__self__, "hotplug", hotplug) if initialization is not None: pulumi.set(__self__, "initialization", initialization) if ipv4_addresses is not None: @@ -1432,6 +1467,20 @@ def hostpcis(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachin def hostpcis(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['VirtualMachineHostpciArgs']]]]): pulumi.set(self, "hostpcis", value) + @_builtins.property + @pulumi.getter + def hotplug(self) -> Optional[pulumi.Input[_builtins.str]]: + """ + Selectively enable hotplug features. Supported values + are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + """ + return pulumi.get(self, "hotplug") + + @hotplug.setter + def hotplug(self, value: Optional[pulumi.Input[_builtins.str]]): + pulumi.set(self, "hotplug", value) + @_builtins.property @pulumi.getter def initialization(self) -> Optional[pulumi.Input['VirtualMachineInitializationArgs']]: @@ -1926,7 +1975,10 @@ def timeout_stop_vm(self, value: Optional[pulumi.Input[_builtins.int]]): @pulumi.getter(name="tpmState") def tpm_state(self) -> Optional[pulumi.Input['VirtualMachineTpmStateArgs']]: """ - The TPM state device. + The TPM state device. The VM must be stopped before + adding, removing, or moving a TPM state device; the provider automatically + handles the shutdown/start cycle. Changing `version` requires recreating the + VM because Proxmox only supports setting the TPM version at creation time. """ return pulumi.get(self, "tpm_state") @@ -2016,6 +2068,7 @@ def __init__(__self__, efi_disk: Optional[pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']]] = None, hook_script_file_id: Optional[pulumi.Input[_builtins.str]] = None, hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]]] = None, + hotplug: Optional[pulumi.Input[_builtins.str]] = None, initialization: Optional[pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']]] = None, keyboard_layout: Optional[pulumi.Input[_builtins.str]] = None, kvm_arguments: Optional[pulumi.Input[_builtins.str]] = None, @@ -2088,6 +2141,9 @@ def __init__(__self__, to `ovmf`) :param pulumi.Input[_builtins.str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute). :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]] hostpcis: A host PCI device mapping (multiple blocks supported). + :param pulumi.Input[_builtins.str] hotplug: Selectively enable hotplug features. Supported values + are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. :param pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']] initialization: The cloud-init configuration. :param pulumi.Input[_builtins.str] keyboard_layout: The keyboard layout (defaults to `en-us`). :param pulumi.Input[_builtins.str] kvm_arguments: Arbitrary arguments passed to kvm. @@ -2142,7 +2198,10 @@ def __init__(__self__, to 1800). :param pulumi.Input[_builtins.int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults to 300). - :param pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']] tpm_state: The TPM state device. + :param pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']] tpm_state: The TPM state device. The VM must be stopped before + adding, removing, or moving a TPM state device; the provider automatically + handles the shutdown/start cycle. Changing `version` requires recreating the + VM because Proxmox only supports setting the TPM version at creation time. :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineUsbArgs', 'VirtualMachineUsbArgsDict']]]] usbs: A host USB device mapping (multiple blocks supported). :param pulumi.Input[Union['VirtualMachineVgaArgs', 'VirtualMachineVgaArgsDict']] vga: The VGA configuration. :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineVirtiofArgs', 'VirtualMachineVirtiofArgsDict']]]] virtiofs: Virtiofs share @@ -2196,6 +2255,7 @@ def _internal_init(__self__, efi_disk: Optional[pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']]] = None, hook_script_file_id: Optional[pulumi.Input[_builtins.str]] = None, hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]]] = None, + hotplug: Optional[pulumi.Input[_builtins.str]] = None, initialization: Optional[pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']]] = None, keyboard_layout: Optional[pulumi.Input[_builtins.str]] = None, kvm_arguments: Optional[pulumi.Input[_builtins.str]] = None, @@ -2262,6 +2322,7 @@ def _internal_init(__self__, __props__.__dict__["efi_disk"] = efi_disk __props__.__dict__["hook_script_file_id"] = hook_script_file_id __props__.__dict__["hostpcis"] = hostpcis + __props__.__dict__["hotplug"] = hotplug __props__.__dict__["initialization"] = initialization __props__.__dict__["keyboard_layout"] = keyboard_layout __props__.__dict__["kvm_arguments"] = kvm_arguments @@ -2334,6 +2395,7 @@ def get(resource_name: str, efi_disk: Optional[pulumi.Input[Union['VirtualMachineEfiDiskArgs', 'VirtualMachineEfiDiskArgsDict']]] = None, hook_script_file_id: Optional[pulumi.Input[_builtins.str]] = None, hostpcis: Optional[pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]]] = None, + hotplug: Optional[pulumi.Input[_builtins.str]] = None, initialization: Optional[pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']]] = None, ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]]] = None, ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]]] = None, @@ -2402,6 +2464,9 @@ def get(resource_name: str, to `ovmf`) :param pulumi.Input[_builtins.str] hook_script_file_id: The identifier for a file containing a hook script (needs to be executable, e.g. by using the `proxmox_virtual_environment_file.file_mode` attribute). :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineHostpciArgs', 'VirtualMachineHostpciArgsDict']]]] hostpcis: A host PCI device mapping (multiple blocks supported). + :param pulumi.Input[_builtins.str] hotplug: Selectively enable hotplug features. Supported values + are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. :param pulumi.Input[Union['VirtualMachineInitializationArgs', 'VirtualMachineInitializationArgsDict']] initialization: The cloud-init configuration. :param pulumi.Input[Sequence[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]] ipv4_addresses: The IPv4 addresses per network interface published by the QEMU agent (empty list when `agent.enabled` is `false`) @@ -2462,7 +2527,10 @@ def get(resource_name: str, to 1800). :param pulumi.Input[_builtins.int] timeout_stop_vm: Timeout for stopping a VM in seconds (defaults to 300). - :param pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']] tpm_state: The TPM state device. + :param pulumi.Input[Union['VirtualMachineTpmStateArgs', 'VirtualMachineTpmStateArgsDict']] tpm_state: The TPM state device. The VM must be stopped before + adding, removing, or moving a TPM state device; the provider automatically + handles the shutdown/start cycle. Changing `version` requires recreating the + VM because Proxmox only supports setting the TPM version at creation time. :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineUsbArgs', 'VirtualMachineUsbArgsDict']]]] usbs: A host USB device mapping (multiple blocks supported). :param pulumi.Input[Union['VirtualMachineVgaArgs', 'VirtualMachineVgaArgsDict']] vga: The VGA configuration. :param pulumi.Input[Sequence[pulumi.Input[Union['VirtualMachineVirtiofArgs', 'VirtualMachineVirtiofArgsDict']]]] virtiofs: Virtiofs share @@ -2488,6 +2556,7 @@ def get(resource_name: str, __props__.__dict__["efi_disk"] = efi_disk __props__.__dict__["hook_script_file_id"] = hook_script_file_id __props__.__dict__["hostpcis"] = hostpcis + __props__.__dict__["hotplug"] = hotplug __props__.__dict__["initialization"] = initialization __props__.__dict__["ipv4_addresses"] = ipv4_addresses __props__.__dict__["ipv6_addresses"] = ipv6_addresses @@ -2656,6 +2725,16 @@ def hostpcis(self) -> pulumi.Output[Optional[Sequence['outputs.VirtualMachineHos """ return pulumi.get(self, "hostpcis") + @_builtins.property + @pulumi.getter + def hotplug(self) -> pulumi.Output[_builtins.str]: + """ + Selectively enable hotplug features. Supported values + are `cpu`, `disk`, `memory`, `network`, and `usb`. Use `0` to disable all, + or `1` to enable all. If not set, PVE defaults to `network,disk,usb`. + """ + return pulumi.get(self, "hotplug") + @_builtins.property @pulumi.getter def initialization(self) -> pulumi.Output[Optional['outputs.VirtualMachineInitialization']]: @@ -2994,7 +3073,10 @@ def timeout_stop_vm(self) -> pulumi.Output[Optional[_builtins.int]]: @pulumi.getter(name="tpmState") def tpm_state(self) -> pulumi.Output[Optional['outputs.VirtualMachineTpmState']]: """ - The TPM state device. + The TPM state device. The VM must be stopped before + adding, removing, or moving a TPM state device; the provider automatically + handles the shutdown/start cycle. Changing `version` requires recreating the + VM because Proxmox only supports setting the TPM version at creation time. """ return pulumi.get(self, "tpm_state") diff --git a/sdk/python/pulumi_proxmoxve/vm/virtual_machine2.py b/sdk/python/pulumi_proxmoxve/vm/virtual_machine2.py index b05a26f8..70011c5f 100644 --- a/sdk/python/pulumi_proxmoxve/vm/virtual_machine2.py +++ b/sdk/python/pulumi_proxmoxve/vm/virtual_machine2.py @@ -23,7 +23,6 @@ class VirtualMachine2Args: def __init__(__self__, *, node_name: pulumi.Input[_builtins.str], cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input['VirtualMachine2CdromArgs']]]] = None, - clone: Optional[pulumi.Input['VirtualMachine2CloneArgs']] = None, cpu: Optional[pulumi.Input['VirtualMachine2CpuArgs']] = None, delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, description: Optional[pulumi.Input[_builtins.str]] = None, @@ -39,13 +38,12 @@ def __init__(__self__, *, The set of arguments for constructing a VirtualMachine2 resource. :param pulumi.Input[_builtins.str] node_name: The name of the node where the VM is provisioned. :param pulumi.Input[Mapping[str, pulumi.Input['VirtualMachine2CdromArgs']]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. - :param pulumi.Input['VirtualMachine2CloneArgs'] clone: The cloning configuration. :param pulumi.Input['VirtualMachine2CpuArgs'] cpu: The CPU configuration. :param pulumi.Input[_builtins.bool] delete_unreferenced_disks_on_destroy: Set to true to delete unreferenced disks on destroy (defaults to `true`). :param pulumi.Input[_builtins.str] description: The description of the VM. :param pulumi.Input[_builtins.str] name: The name of the VM. Doesn't have to be unique. :param pulumi.Input[_builtins.bool] purge_on_destroy: Set to true to purge the VM from backup configurations on destroy (defaults to `true`). - :param pulumi.Input['VirtualMachine2RngArgs'] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input['VirtualMachine2RngArgs'] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. :param pulumi.Input[_builtins.bool] stop_on_destroy: Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The tags assigned to the VM. :param pulumi.Input[_builtins.bool] template: Set to true to create a VM template. @@ -54,8 +52,6 @@ def __init__(__self__, *, pulumi.set(__self__, "node_name", node_name) if cdrom is not None: pulumi.set(__self__, "cdrom", cdrom) - if clone is not None: - pulumi.set(__self__, "clone", clone) if cpu is not None: pulumi.set(__self__, "cpu", cpu) if delete_unreferenced_disks_on_destroy is not None: @@ -103,18 +99,6 @@ def cdrom(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['VirtualMachi def cdrom(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['VirtualMachine2CdromArgs']]]]): pulumi.set(self, "cdrom", value) - @_builtins.property - @pulumi.getter - def clone(self) -> Optional[pulumi.Input['VirtualMachine2CloneArgs']]: - """ - The cloning configuration. - """ - return pulumi.get(self, "clone") - - @clone.setter - def clone(self, value: Optional[pulumi.Input['VirtualMachine2CloneArgs']]): - pulumi.set(self, "clone", value) - @_builtins.property @pulumi.getter def cpu(self) -> Optional[pulumi.Input['VirtualMachine2CpuArgs']]: @@ -179,7 +163,7 @@ def purge_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): @pulumi.getter def rng(self) -> Optional[pulumi.Input['VirtualMachine2RngArgs']]: """ - Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. """ return pulumi.get(self, "rng") @@ -249,7 +233,6 @@ def vga(self, value: Optional[pulumi.Input['VirtualMachine2VgaArgs']]): class _VirtualMachine2State: def __init__(__self__, *, cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input['VirtualMachine2CdromArgs']]]] = None, - clone: Optional[pulumi.Input['VirtualMachine2CloneArgs']] = None, cpu: Optional[pulumi.Input['VirtualMachine2CpuArgs']] = None, delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, description: Optional[pulumi.Input[_builtins.str]] = None, @@ -265,14 +248,13 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering VirtualMachine2 resources. :param pulumi.Input[Mapping[str, pulumi.Input['VirtualMachine2CdromArgs']]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. - :param pulumi.Input['VirtualMachine2CloneArgs'] clone: The cloning configuration. :param pulumi.Input['VirtualMachine2CpuArgs'] cpu: The CPU configuration. :param pulumi.Input[_builtins.bool] delete_unreferenced_disks_on_destroy: Set to true to delete unreferenced disks on destroy (defaults to `true`). :param pulumi.Input[_builtins.str] description: The description of the VM. :param pulumi.Input[_builtins.str] name: The name of the VM. Doesn't have to be unique. :param pulumi.Input[_builtins.str] node_name: The name of the node where the VM is provisioned. :param pulumi.Input[_builtins.bool] purge_on_destroy: Set to true to purge the VM from backup configurations on destroy (defaults to `true`). - :param pulumi.Input['VirtualMachine2RngArgs'] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input['VirtualMachine2RngArgs'] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. :param pulumi.Input[_builtins.bool] stop_on_destroy: Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The tags assigned to the VM. :param pulumi.Input[_builtins.bool] template: Set to true to create a VM template. @@ -280,8 +262,6 @@ def __init__(__self__, *, """ if cdrom is not None: pulumi.set(__self__, "cdrom", cdrom) - if clone is not None: - pulumi.set(__self__, "clone", clone) if cpu is not None: pulumi.set(__self__, "cpu", cpu) if delete_unreferenced_disks_on_destroy is not None: @@ -319,18 +299,6 @@ def cdrom(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input['VirtualMachi def cdrom(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input['VirtualMachine2CdromArgs']]]]): pulumi.set(self, "cdrom", value) - @_builtins.property - @pulumi.getter - def clone(self) -> Optional[pulumi.Input['VirtualMachine2CloneArgs']]: - """ - The cloning configuration. - """ - return pulumi.get(self, "clone") - - @clone.setter - def clone(self, value: Optional[pulumi.Input['VirtualMachine2CloneArgs']]): - pulumi.set(self, "clone", value) - @_builtins.property @pulumi.getter def cpu(self) -> Optional[pulumi.Input['VirtualMachine2CpuArgs']]: @@ -407,7 +375,7 @@ def purge_on_destroy(self, value: Optional[pulumi.Input[_builtins.bool]]): @pulumi.getter def rng(self) -> Optional[pulumi.Input['VirtualMachine2RngArgs']]: """ - Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. """ return pulumi.get(self, "rng") @@ -480,7 +448,6 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['VirtualMachine2CdromArgs', 'VirtualMachine2CdromArgsDict']]]]] = None, - clone: Optional[pulumi.Input[Union['VirtualMachine2CloneArgs', 'VirtualMachine2CloneArgsDict']]] = None, cpu: Optional[pulumi.Input[Union['VirtualMachine2CpuArgs', 'VirtualMachine2CpuArgsDict']]] = None, delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, description: Optional[pulumi.Input[_builtins.str]] = None, @@ -508,14 +475,13 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[Mapping[str, pulumi.Input[Union['VirtualMachine2CdromArgs', 'VirtualMachine2CdromArgsDict']]]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. - :param pulumi.Input[Union['VirtualMachine2CloneArgs', 'VirtualMachine2CloneArgsDict']] clone: The cloning configuration. :param pulumi.Input[Union['VirtualMachine2CpuArgs', 'VirtualMachine2CpuArgsDict']] cpu: The CPU configuration. :param pulumi.Input[_builtins.bool] delete_unreferenced_disks_on_destroy: Set to true to delete unreferenced disks on destroy (defaults to `true`). :param pulumi.Input[_builtins.str] description: The description of the VM. :param pulumi.Input[_builtins.str] name: The name of the VM. Doesn't have to be unique. :param pulumi.Input[_builtins.str] node_name: The name of the node where the VM is provisioned. :param pulumi.Input[_builtins.bool] purge_on_destroy: Set to true to purge the VM from backup configurations on destroy (defaults to `true`). - :param pulumi.Input[Union['VirtualMachine2RngArgs', 'VirtualMachine2RngArgsDict']] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input[Union['VirtualMachine2RngArgs', 'VirtualMachine2RngArgsDict']] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. :param pulumi.Input[_builtins.bool] stop_on_destroy: Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The tags assigned to the VM. :param pulumi.Input[_builtins.bool] template: Set to true to create a VM template. @@ -554,7 +520,6 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['VirtualMachine2CdromArgs', 'VirtualMachine2CdromArgsDict']]]]] = None, - clone: Optional[pulumi.Input[Union['VirtualMachine2CloneArgs', 'VirtualMachine2CloneArgsDict']]] = None, cpu: Optional[pulumi.Input[Union['VirtualMachine2CpuArgs', 'VirtualMachine2CpuArgsDict']]] = None, delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, description: Optional[pulumi.Input[_builtins.str]] = None, @@ -577,7 +542,6 @@ def _internal_init(__self__, __props__ = VirtualMachine2Args.__new__(VirtualMachine2Args) __props__.__dict__["cdrom"] = cdrom - __props__.__dict__["clone"] = clone __props__.__dict__["cpu"] = cpu __props__.__dict__["delete_unreferenced_disks_on_destroy"] = delete_unreferenced_disks_on_destroy __props__.__dict__["description"] = description @@ -603,7 +567,6 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, cdrom: Optional[pulumi.Input[Mapping[str, pulumi.Input[Union['VirtualMachine2CdromArgs', 'VirtualMachine2CdromArgsDict']]]]] = None, - clone: Optional[pulumi.Input[Union['VirtualMachine2CloneArgs', 'VirtualMachine2CloneArgsDict']]] = None, cpu: Optional[pulumi.Input[Union['VirtualMachine2CpuArgs', 'VirtualMachine2CpuArgsDict']]] = None, delete_unreferenced_disks_on_destroy: Optional[pulumi.Input[_builtins.bool]] = None, description: Optional[pulumi.Input[_builtins.str]] = None, @@ -624,14 +587,13 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[Mapping[str, pulumi.Input[Union['VirtualMachine2CdromArgs', 'VirtualMachine2CdromArgsDict']]]] cdrom: The CD-ROM configuration. The key is the interface of the CD-ROM, could be one of `ideN`, `sataN`, `scsiN`, where N is the index of the interface. Note that `q35` machine type only supports `ide0` and `ide2` of IDE interfaces. - :param pulumi.Input[Union['VirtualMachine2CloneArgs', 'VirtualMachine2CloneArgsDict']] clone: The cloning configuration. :param pulumi.Input[Union['VirtualMachine2CpuArgs', 'VirtualMachine2CpuArgsDict']] cpu: The CPU configuration. :param pulumi.Input[_builtins.bool] delete_unreferenced_disks_on_destroy: Set to true to delete unreferenced disks on destroy (defaults to `true`). :param pulumi.Input[_builtins.str] description: The description of the VM. :param pulumi.Input[_builtins.str] name: The name of the VM. Doesn't have to be unique. :param pulumi.Input[_builtins.str] node_name: The name of the node where the VM is provisioned. :param pulumi.Input[_builtins.bool] purge_on_destroy: Set to true to purge the VM from backup configurations on destroy (defaults to `true`). - :param pulumi.Input[Union['VirtualMachine2RngArgs', 'VirtualMachine2RngArgsDict']] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + :param pulumi.Input[Union['VirtualMachine2RngArgs', 'VirtualMachine2RngArgsDict']] rng: Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. :param pulumi.Input[_builtins.bool] stop_on_destroy: Set to true to stop (rather than shutdown) the VM on destroy (defaults to `false`). :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The tags assigned to the VM. :param pulumi.Input[_builtins.bool] template: Set to true to create a VM template. @@ -642,7 +604,6 @@ def get(resource_name: str, __props__ = _VirtualMachine2State.__new__(_VirtualMachine2State) __props__.__dict__["cdrom"] = cdrom - __props__.__dict__["clone"] = clone __props__.__dict__["cpu"] = cpu __props__.__dict__["delete_unreferenced_disks_on_destroy"] = delete_unreferenced_disks_on_destroy __props__.__dict__["description"] = description @@ -665,14 +626,6 @@ def cdrom(self) -> pulumi.Output[Mapping[str, 'outputs.VirtualMachine2Cdrom']]: """ return pulumi.get(self, "cdrom") - @_builtins.property - @pulumi.getter - def clone(self) -> pulumi.Output[Optional['outputs.VirtualMachine2Clone']]: - """ - The cloning configuration. - """ - return pulumi.get(self, "clone") - @_builtins.property @pulumi.getter def cpu(self) -> pulumi.Output['outputs.VirtualMachine2Cpu']: @@ -725,7 +678,7 @@ def purge_on_destroy(self) -> pulumi.Output[_builtins.bool]: @pulumi.getter def rng(self) -> pulumi.Output['outputs.VirtualMachine2Rng']: """ - Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.`See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. + Configure the RNG (Random Number Generator) device. The RNG device provides entropy to guests to ensure good quality random numbers for guest applications that require them. Can only be set by `root@pam.` See the [Proxmox documentation](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#qm_virtual_machines_settings) for more information. """ return pulumi.get(self, "rng") diff --git a/sdk/python/pyproject.toml b/sdk/python/pyproject.toml index d65645dc..cc3449a9 100644 --- a/sdk/python/pyproject.toml +++ b/sdk/python/pyproject.toml @@ -5,7 +5,7 @@ keywords = ["pulumi", "proxmox", "proxmoxve"] readme = "README.md" requires-python = ">=3.9" - version = "7.10.0a1765610037+9fdadc09.dirty" + version = "7.12.0a1770476926+eb957559.dirty" [project.license] text = "Apache-2.0" [project.urls]