0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-06-30 02:31:10 +00:00

feat(docs): add initial mini-howtos for VM (#730)

* chore(docs): minor fixes and linting

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>

* chore(docs): add VM mini-howtos with examples

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>

* address peer-review feedback

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>

* vscode settings

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
Pavel Boldyrev 2023-11-28 12:38:47 -05:00 committed by GitHub
parent 9016641c34
commit e2717a9a9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
40 changed files with 751 additions and 409 deletions

4
.markdownlint.json Normal file
View File

@ -0,0 +1,4 @@
{
"MD013": false,
"MD025": false
}

13
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,13 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug provider",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "./",
"args": ["-debug"]
}
]
}

View File

@ -1,3 +1,8 @@
{
"git.alwaysSignOff": true
}
"git.alwaysSignOff": true,
"cSpell.words": [
"iothread",
"qcow",
"virtio"
]
}

View File

@ -50,7 +50,7 @@ Please use lowercase for the description and do not end it with a period.
For example:
```
```commit
feat(vm): add support for the `clone` operation
```
@ -61,7 +61,7 @@ it [here](https://developercertificate.org).
Accepting is accomplished by signing off on your commits, you can do this by
adding a `Signed-off-by` line to your commit message, like here:
```
```commit
feat(vm): add support for the `clone` operation
Signed-off-by: Random Developer <random@developer.example.org>
@ -69,7 +69,7 @@ Signed-off-by: Random Developer <random@developer.example.org>
Git has a built-in flag to append this line automatically:
```
```shell
> git commit -s -m 'feat(vm): add a cool new feature'
```
@ -89,7 +89,7 @@ well.
## Releasing
We use automated release management orchestrated
by https://github.com/googleapis/release-please GitHub Action. The action
by [release-please](https://github.com/googleapis/release-please) GitHub Action. The action
creates a new release PR with the changelog and bumps the version based on the
commit messages. The release PR is merged by the maintainers.

View File

@ -21,14 +21,14 @@ data "proxmox_virtual_environment_vms" "ubuntu_vms" {
## Argument Reference
- `node_name` - (Optional) The node name.
- `node_name` - (Optional) The node name.
- `tags` - (Optional) A list of tags to filter the VMs. The VM must have all
the tags to be included in the result.
## Attribute Reference
- `vms` - The VMs list.
- `name` - The virtual machine name.
- `node_name` - The node name.
- `tags` - A list of tags of the VM.
- `vm_id` - The VM identifier.
- `name` - The virtual machine name.
- `node_name` - The node name.
- `tags` - A list of tags of the VM.
- `vm_id` - The VM identifier.

View File

@ -155,18 +155,9 @@ provider "proxmox" {
}
```
> Note1: The `username` field in the `ssh` block is required when using API
> Token authentication. This is because the provider needs to know which user to
> use for the SSH connection.
-> **Note:** The `username` field in the `ssh` block is required when using API Token authentication. This is because the provider needs to know which user to use for the SSH connection.
> Note2: Not all Proxmox API operations are supported via API Token. You may see
> errors like
`error creating container: received an HTTP 403 response - Reason: Permission check
failed (changing feature flags for privileged container is only allowed for root@pam)`
> or
`error creating VM: received an HTTP 500 response - Reason: only root can set 'arch' config`
> when using API Token authentication, even when `Administrator` role or
> the `root@pam` user is used with the token.
-> **Note:** Not all Proxmox API operations are supported via API Token. You may see errors like `error creating container: received an HTTP 403 response - Reason: Permission check failed (changing feature flags for privileged container is only allowed for root@pam)` or `error creating VM: received an HTTP 500 response - Reason: only root can set 'arch' config` when using API Token authentication, even when `Administrator` role or the `root@pam` user is used with the token.
### Temporary directory
@ -203,21 +194,21 @@ Proxmox `provider` block:
example, `root@pam!for-terraform-provider=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`.
- `ssh` - (Optional) The SSH connection configuration to a Proxmox node. This is
a block, whose fields are documented below.
- `username` - (Optional) The username to use for the SSH connection.
- `username` - (Optional) The username to use for the SSH connection.
Defaults to the username used for the Proxmox API connection. Can also be
sourced from `PROXMOX_VE_SSH_USERNAME`. Required when using API Token.
- `password` - (Optional) The password to use for the SSH connection.
- `password` - (Optional) The password to use for the SSH connection.
Defaults to the password used for the Proxmox API connection. Can also be
sourced from `PROXMOX_VE_SSH_PASSWORD`.
- `agent` - (Optional) Whether to use the SSH agent for the SSH
- `agent` - (Optional) Whether to use the SSH agent for the SSH
authentication. Defaults to `false`. Can also be sourced
from `PROXMOX_VE_SSH_AGENT`.
- `agent_socket` - (Optional) The path to the SSH agent socket.
- `agent_socket` - (Optional) The path to the SSH agent socket.
Defaults to the value of the `SSH_AUTH_SOCK` environment variable. Can
also be sourced from `PROXMOX_VE_SSH_AUTH_SOCK`.
- `node` - (Optional) The node configuration for the SSH connection. Can be
- `node` - (Optional) The node configuration for the SSH connection. Can be
specified multiple times to provide configuration fo multiple nodes.
- `name` - (Required) The name of the node.
- `address` - (Required) The IP address of the node.
- `port` - (Optional) SSH port of the node. Defaults to 22.
- `tmp_dir` - (Optional) Use custom temporary directory. (can also be sourced from `PROXMOX_VE_TMPDIR`)
- `name` - (Required) The name of the node.
- `address` - (Required) The IP address of the node.
- `port` - (Optional) SSH port of the node. Defaults to 22.
- `tmp_dir` - (Optional) Use custom temporary directory. (can also be sourced from `PROXMOX_VE_TMPDIR`)

View File

@ -35,10 +35,10 @@ resource "proxmox_virtual_environment_cluster_firewall" "example" {
- `input_policy` - (Optional) The default input policy (`ACCEPT`, `DROP`, `REJECT`).
- `output_policy` - (Optional) The default output policy (`ACCEPT`, `DROP`, `REJECT`).
- `log_ratelimit` - (Optional) The log rate limit.
- `enabled` - (Optional) Enable or disable the log rate limit.
- `burst` - (Optional) Initial burst of packages which will always get
- `enabled` - (Optional) Enable or disable the log rate limit.
- `burst` - (Optional) Initial burst of packages which will always get
logged before the rate is applied (defaults to `5`).
- `rate` - (Optional) Frequency with which the burst bucket gets refilled (defaults to `1/second`).
- `rate` - (Optional) Frequency with which the burst bucket gets refilled (defaults to `1/second`).
## Attribute Reference
@ -53,5 +53,5 @@ Be careful not to use this resource multiple times for the same node.
Instances can be imported without an ID, but you still need to pass one, e.g.,
```bash
$ terraform import proxmox_virtual_environment_cluster_firewall.example example
terraform import proxmox_virtual_environment_cluster_firewall.example example
```

View File

@ -47,35 +47,35 @@ resource "proxmox_virtual_environment_cluster_firewall_security_group" "webserve
- `name` - (Required) Security group name.
- `comment` - (Optional) Security group comment.
- `rule` - (Optional) Firewall rule block (multiple blocks supported).
- `action` - (Required) Rule action (`ACCEPT`, `DROP`, `REJECT`).
- `type` - (Required) Rule type (`in`, `out`).
- `comment` - (Optional) Rule comment.
- `dest` - (Optional) Restrict packet destination address. This can refer to
- `action` - (Required) Rule action (`ACCEPT`, `DROP`, `REJECT`).
- `type` - (Required) Rule type (`in`, `out`).
- `comment` - (Optional) Rule comment.
- `dest` - (Optional) Restrict packet destination address. This can refer to
a single IP address, an IP set ('+ipsetname') or an IP alias definition.
You can also specify an address range like `20.34.101.207-201.3.9.99`, or
a list of IP addresses and networks (entries are separated by comma).
Please do not mix IPv4 and IPv6 addresses inside such lists.
- `dport` - (Optional) Restrict TCP/UDP destination port. You can use
- `dport` - (Optional) Restrict TCP/UDP destination port. You can use
service names or simple numbers (0-65535), as defined in '/etc/services'.
Port ranges can be specified with '\d+:\d+', for example `80:85`, and
you can use comma separated list to match several ports or ranges.
- `enable` - (Optional) Enable this rule. Defaults to `true`.
- `iface` - (Optional) Network interface name. You have to use network
- `enable` - (Optional) Enable this rule. Defaults to `true`.
- `iface` - (Optional) Network interface name. You have to use network
configuration key names for VMs and containers ('net\d+'). Host related
rules can use arbitrary strings.
- `log` - (Optional) Log level for this rule (`emerg`, `alert`, `crit`,
- `log` - (Optional) Log level for this rule (`emerg`, `alert`, `crit`,
`err`, `warning`, `notice`, `info`, `debug`, `nolog`).
- `macro`- (Optional) Macro name. Use predefined standard macro
from https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions
- `proto` - (Optional) Restrict packet protocol. You can use protocol names
- `macro`- (Optional) Macro name. Use predefined standard macro
from <https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions>
- `proto` - (Optional) Restrict packet protocol. You can use protocol names
as defined in '/etc/protocols'.
- `source` - (Optional) Restrict packet source address. This can refer
- `source` - (Optional) Restrict packet source address. This can refer
to a single IP address, an IP set ('+ipsetname') or an IP alias
definition. You can also specify an address range like
`20.34.101.207-201.3.9.99`, or a list of IP addresses and networks (
entries are separated by comma). Please do not mix IPv4 and IPv6 addresses
inside such lists.
- `sport` - (Optional) Restrict TCP/UDP source port. You can use
- `sport` - (Optional) Restrict TCP/UDP source port. You can use
service names or simple numbers (0-65535), as defined in '/etc/services'.
Port ranges can be specified with '\d+:\d+', for example `80:85`, and
you can use comma separated list to match several ports or ranges.
@ -83,7 +83,7 @@ resource "proxmox_virtual_environment_cluster_firewall_security_group" "webserve
## Attribute Reference
- `rule`
- `pos` - Position of the rule in the list.
- `pos` - Position of the rule in the list.
There are no attribute references available for this resource.
@ -92,5 +92,5 @@ There are no attribute references available for this resource.
Instances can be imported using the `name`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_cluster_firewall_security_group.webserver webserver
terraform import proxmox_virtual_environment_cluster_firewall_security_group.webserver webserver
```

View File

@ -92,100 +92,100 @@ output "ubuntu_container_public_key" {
## Argument Reference
- `clone` - (Optional) The cloning configuration.
- `datastore_id` - (Optional) The identifier for the target datastore.
- `node_name` - (Optional) The name of the source node (leave blank, if
- `datastore_id` - (Optional) The identifier for the target datastore.
- `node_name` - (Optional) The name of the source node (leave blank, if
equal to the `node_name` argument).
- `vm_id` - (Required) The identifier for the source container.
- `vm_id` - (Required) The identifier for the source container.
- `console` - (Optional) The console configuration.
- `enabled` - (Optional) Whether to enable the console device (defaults
- `enabled` - (Optional) Whether to enable the console device (defaults
to `true`).
- `mode` - (Optional) The console mode (defaults to `tty`).
- `console` - Console.
- `shell` - Shell.
- `tty` - TTY.
- `tty_count` - (Optional) The number of available TTY (defaults to `2`).
- `mode` - (Optional) The console mode (defaults to `tty`).
- `console` - Console.
- `shell` - Shell.
- `tty` - TTY.
- `tty_count` - (Optional) The number of available TTY (defaults to `2`).
- `cpu` - (Optional) The CPU configuration.
- `architecture` - (Optional) The CPU architecture (defaults to `amd64`).
- `amd64` - x86 (64 bit).
- `arm64` - ARM (64-bit).
- `armhf` - ARM (32 bit).
- `i386` - x86 (32 bit).
- `cores` - (Optional) The number of CPU cores (defaults to `1`).
- `units` - (Optional) The CPU units (defaults to `1024`).
- `architecture` - (Optional) The CPU architecture (defaults to `amd64`).
- `amd64` - x86 (64 bit).
- `arm64` - ARM (64-bit).
- `armhf` - ARM (32 bit).
- `i386` - x86 (32 bit).
- `cores` - (Optional) The number of CPU cores (defaults to `1`).
- `units` - (Optional) The CPU units (defaults to `1024`).
- `description` - (Optional) The description.
- `disk` - (Optional) The disk configuration.
- `datastore_id` - (Optional) The identifier for the datastore to create the
- `datastore_id` - (Optional) The identifier for the datastore to create the
disk in (defaults to `local`).
-`size` - (Optional) The size of the root filesystem in gigabytes (
defaults to `4`). Requires `datastore_id` to be set.
- `initialization` - (Optional) The initialization configuration.
- `dns` - (Optional) The DNS configuration.
- `domain` - (Optional) The DNS search domain.
- `server` - (Optional) The DNS server.
- `hostname` - (Optional) The hostname.
- `ip_config` - (Optional) The IP configuration (one block per network
- `dns` - (Optional) The DNS configuration.
- `domain` - (Optional) The DNS search domain.
- `server` - (Optional) The DNS server.
- `hostname` - (Optional) The hostname.
- `ip_config` - (Optional) The IP configuration (one block per network
device).
- `ipv4` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv4 address (use `dhcp` for
- `ipv4` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv4 address (use `dhcp` for
autodiscovery).
- `gateway` - (Optional) The IPv4 gateway (must be omitted
- `gateway` - (Optional) The IPv4 gateway (must be omitted
when `dhcp` is used as the address).
- `ipv6` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv6 address (use `dhcp` for
- `ipv6` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv6 address (use `dhcp` for
autodiscovery).
- `gateway` - (Optional) The IPv6 gateway (must be omitted
- `gateway` - (Optional) The IPv6 gateway (must be omitted
when `dhcp` is used as the address).
- `user_account` - (Optional) The user account configuration.
- `keys` - (Optional) The SSH keys for the root account.
- `password` - (Optional) The password for the root account.
- `user_account` - (Optional) The user account configuration.
- `keys` - (Optional) The SSH keys for the root account.
- `password` - (Optional) The password for the root account.
- `memory` - (Optional) The memory configuration.
- `dedicated` - (Optional) The dedicated memory in megabytes (defaults
- `dedicated` - (Optional) The dedicated memory in megabytes (defaults
to `512`).
- `swap` - (Optional) The swap size in megabytes (defaults to `0`).
- `swap` - (Optional) The swap size in megabytes (defaults to `0`).
- `mount_point`
- `acl` (Optional) Explicitly enable or disable ACL support.
- `backup` (Optional) Whether to include the mount point in backups (only
- `acl` (Optional) Explicitly enable or disable ACL support.
- `backup` (Optional) Whether to include the mount point in backups (only
used for volume mount points).
- `mount_options` (Optional) List of extra mount options.
- `path` (Required) Path to the mount point as seen from inside the
- `mount_options` (Optional) List of extra mount options.
- `path` (Required) Path to the mount point as seen from inside the
container.
- `quota` (Optional) Enable user quotas inside the container (not supported
- `quota` (Optional) Enable user quotas inside the container (not supported
with ZFS subvolumes).
- `read_only` (Optional) Read-only mount point.
- `replicate` (Optional) Will include this volume to a storage replica job.
- `shared` (Optional) Mark this non-volume mount point as available on all
- `read_only` (Optional) Read-only mount point.
- `replicate` (Optional) Will include this volume to a storage replica job.
- `shared` (Optional) Mark this non-volume mount point as available on all
nodes.
- `size` (Optional) Volume size (only for ZFS storage backed mount points).
- `size` (Optional) Volume size (only for ZFS storage backed mount points).
Can be specified with a unit suffix (e.g. `10G`).
- `volume` (Required) Volume, device or directory to mount into the
- `volume` (Required) Volume, device or directory to mount into the
container.
- `network_interface` - (Optional) A network interface (multiple blocks
supported).
- `bridge` - (Optional) The name of the network bridge (defaults
- `bridge` - (Optional) The name of the network bridge (defaults
to `vmbr0`).
- `enabled` - (Optional) Whether to enable the network device (defaults
- `enabled` - (Optional) Whether to enable the network device (defaults
to `true`).
- `firewall` - (Optional) Whether this interface's firewall rules should be
- `firewall` - (Optional) Whether this interface's firewall rules should be
used (defaults to `false`).
- `mac_address` - (Optional) The MAC address.
- `mtu` - (Optional) Maximum transfer unit of the interface. Cannot be
- `mac_address` - (Optional) The MAC address.
- `mtu` - (Optional) Maximum transfer unit of the interface. Cannot be
larger than the bridge's MTU.
- `name` - (Required) The network interface name.
- `rate_limit` - (Optional) The rate limit in megabytes per second.
- `vlan_id` - (Optional) The VLAN identifier.
- `name` - (Required) The network interface name.
- `rate_limit` - (Optional) The rate limit in megabytes per second.
- `vlan_id` - (Optional) The VLAN identifier.
- `node_name` - (Required) The name of the node to assign the container to.
- `operating_system` - (Required) The Operating System configuration.
- `template_file_id` - (Required) The identifier for an OS template file.
- `type` - (Optional) The type (defaults to `unmanaged`).
- `alpine` - Alpine.
- `archlinux` - Arch Linux.
- `centos` - CentOS.
- `debian` - Debian.
- `fedora` - Fedora.
- `gentoo` - Gentoo.
- `opensuse` - openSUSE.
- `ubuntu` - Ubuntu.
- `unmanaged` - Unmanaged.
- `template_file_id` - (Required) The identifier for an OS template file.
- `type` - (Optional) The type (defaults to `unmanaged`).
- `alpine` - Alpine.
- `archlinux` - Arch Linux.
- `centos` - CentOS.
- `debian` - Debian.
- `fedora` - Fedora.
- `gentoo` - Gentoo.
- `opensuse` - openSUSE.
- `ubuntu` - Ubuntu.
- `unmanaged` - Unmanaged.
- `pool_id` - (Optional) The identifier for a pool to assign the container to.
- `started` - (Optional) Whether to start the container (defaults to `true`).
- `start_on_boot` - (Optional) Automatically start container when the host system boots (defaults to `true`).
@ -199,11 +199,11 @@ output "ubuntu_container_public_key" {
the host (defaults to `false`).
- `vm_id` - (Optional) The container identifier
- `features` - (Optional) The container features
- `nesting` - (Optional) Whether the container is nested (defaults
- `nesting` - (Optional) Whether the container is nested (defaults
to `false`)
- `fuse` - (Optional) Whether the container supports FUSE mounts (defaults
- `fuse` - (Optional) Whether the container supports FUSE mounts (defaults
to `false`)
- `keyctl` - (Optional) Whether the container supports `keyctl()` system
- `keyctl` - (Optional) Whether the container supports `keyctl()` system
call (defaults to `false`)
## Attribute Reference
@ -215,5 +215,5 @@ There are no additional attributes available for this resource.
Instances can be imported using the `node_name` and the `vm_id`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_container.ubuntu_container first-node/1234
terraform import proxmox_virtual_environment_container.ubuntu_container first-node/1234
```

View File

@ -48,5 +48,5 @@ Be careful not to use this resource multiple times for the same node.
Instances can be imported using the `node_name`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_dns.first_node first-node
terraform import proxmox_virtual_environment_dns.first_node first-node
```

View File

@ -94,15 +94,14 @@ resource "proxmox_virtual_environment_file" "ubuntu_container_template" {
}
```
## Argument Reference
- `content_type` - (Optional) The content type. If not specified, the content type will be inferred from the file
extension. Valid values are:
- `dump` (allowed extensions: `.vzdump`)
- `iso` (allowed extensions: `.iso`, `.img`)
- `snippets` (allowed extensions: any)
- `vztmpl` (allowed extensions: `.tar.gz`, `.tar.xz`, `tar.zst`)
- `dump` (allowed extensions: `.vzdump`)
- `iso` (allowed extensions: `.iso`, `.img`)
- `snippets` (allowed extensions: any)
- `vztmpl` (allowed extensions: `.tar.gz`, `.tar.xz`, `tar.zst`)
- `datastore_id` - (Required) The datastore id.
- `node_name` - (Required) The node name.
- `overwrite` - (Optional) Whether to overwrite an existing file (defaults to
@ -110,17 +109,17 @@ resource "proxmox_virtual_environment_file" "ubuntu_container_template" {
- `source_file` - (Optional) The source file (conflicts with `source_raw`), could be a
local file or a URL. If the source file is a URL, the file will be downloaded
and stored locally before uploading it to Proxmox VE.
- `checksum` - (Optional) The SHA256 checksum of the source file.
- `file_name` - (Optional) The file name to use instead of the source file
name. Useful when the source file does not have a valid file extension, for example
- `checksum` - (Optional) The SHA256 checksum of the source file.
- `file_name` - (Optional) The file name to use instead of the source file
name. Useful when the source file does not have a valid file extension, for example
when the source file is a URL referencing a `.qcow2` image.
- `insecure` - (Optional) Whether to skip the TLS verification step for
- `insecure` - (Optional) Whether to skip the TLS verification step for
HTTPS sources (defaults to `false`).
- `path` - (Required) A path to a local file or a URL.
- `path` - (Required) A path to a local file or a URL.
- `source_raw` - (Optional) The raw source (conflicts with `source_file`).
- `data` - (Required) The raw data.
- `file_name` - (Required) The file name.
- `resize` - (Optional) The number of bytes to resize the file to.
- `data` - (Required) The raw data.
- `file_name` - (Required) The file name.
- `resize` - (Optional) The number of bytes to resize the file to.
- `timeout_upload` - (Optional) Timeout for uploading ISO/VSTMPL files in
seconds (defaults to 1800).
@ -158,5 +157,5 @@ node_name:datastore_id/content_type/file_name
Example:
```bash
$ terraform import proxmox_virtual_environment_file.cloud_config pve/local:snippets/example.cloud-config.yaml
terraform import proxmox_virtual_environment_file.cloud_config pve/local:snippets/example.cloud-config.yaml
```

View File

@ -50,9 +50,9 @@ resource "proxmox_virtual_environment_firewall_ipset" "ipset" {
- `name` - (Required) IPSet name.
- `comment` - (Optional) IPSet comment.
- `cidr` - (Optional) IP/CIDR block (multiple blocks supported).
- `name` - Network/IP specification in CIDR format.
- `comment` - (Optional) Arbitrary string annotation.
- `nomatch` - (Optional) Entries marked as `nomatch` are skipped as if those
- `name` - Network/IP specification in CIDR format.
- `comment` - (Optional) Arbitrary string annotation.
- `nomatch` - (Optional) Entries marked as `nomatch` are skipped as if those
were not added to the set.
## Attribute Reference

View File

@ -41,7 +41,7 @@ resource "proxmox_virtual_environment_firewall_options" "example" {
- `dhcp` - (Optional)Enable DHCP.
- `enabled` - (Optional) Enable or disable the firewall.
- `ipfilter` - (Optional) Enable default IP filters. This is equivalent to
adding an empty ipfilter-net<id> ipset for every interface. Such ipsets
adding an empty `ipfilter-net<id>` ipset for every interface. Such ipsets
implicitly contain sane default restrictions such as restricting IPv6 link
local addresses to the one derived from the interface's MAC address. For
containers the configured IP addresses will be implicitly added.

View File

@ -62,51 +62,51 @@ resource "proxmox_virtual_environment_firewall_rules" "inbound" {
rules.
- `rule` - (Optional) Firewall rule block (multiple blocks supported).
The provider supports two types of the `rule` blocks:
- a rule definition block, which includes the following arguments:
- `action` - (Required) Rule action (`ACCEPT`, `DROP`, `REJECT`).
- `type` - (Required) Rule type (`in`, `out`).
- `comment` - (Optional) Rule comment.
- `dest` - (Optional) Restrict packet destination address. This can
- a rule definition block, which includes the following arguments:
- `action` - (Required) Rule action (`ACCEPT`, `DROP`, `REJECT`).
- `type` - (Required) Rule type (`in`, `out`).
- `comment` - (Optional) Rule comment.
- `dest` - (Optional) Restrict packet destination address. This can
refer to a single IP address, an IP set ('+ipsetname') or an IP alias
definition. You can also specify an address range
like `20.34.101.207-201.3.9.99`, or a list of IP addresses and
networks (entries are separated by comma). Please do not mix IPv4 and
IPv6 addresses inside such lists.
- `dport` - (Optional) Restrict TCP/UDP destination port. You can use
- `dport` - (Optional) Restrict TCP/UDP destination port. You can use
service names or simple numbers (0-65535), as defined
in `/etc/services`. Port ranges can be specified with '\d+:\d+', for
example `80:85`, and you can use comma separated list to match several
ports or ranges.
- `enabled` - (Optional) Enable this rule. Defaults to `true`.
- `iface` - (Optional) Network interface name. You have to use network
- `enabled` - (Optional) Enable this rule. Defaults to `true`.
- `iface` - (Optional) Network interface name. You have to use network
configuration key names for VMs and containers ('net\d+'). Host
related rules can use arbitrary strings.
- `log` - (Optional) Log level for this rule (`emerg`, `alert`, `crit`,
- `log` - (Optional) Log level for this rule (`emerg`, `alert`, `crit`,
`err`, `warning`, `notice`, `info`, `debug`, `nolog`).
- `macro`- (Optional) Macro name. Use predefined standard macro
from https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions
- `proto` - (Optional) Restrict packet protocol. You can use protocol
- `macro`- (Optional) Macro name. Use predefined standard macro
from <https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_firewall_macro_definitions>
- `proto` - (Optional) Restrict packet protocol. You can use protocol
names as defined in '/etc/protocols'.
- `source` - (Optional) Restrict packet source address. This can refer
- `source` - (Optional) Restrict packet source address. This can refer
to a single IP address, an IP set ('+ipsetname') or an IP alias
definition. You can also specify an address range
like `20.34.101.207-201.3.9.99`, or a list of IP addresses and
networks (entries are separated by comma). Please do not mix IPv4 and
IPv6 addresses inside such lists.
- `sport` - (Optional) Restrict TCP/UDP source port. You can use
- `sport` - (Optional) Restrict TCP/UDP source port. You can use
service names or simple numbers (0-65535), as defined
in `/etc/services`. Port ranges can be specified with '\d+:\d+', for
example `80:85`, and you can use comma separated list to match several
ports or ranges.
- a security group insertion block, which includes the following arguments:
- `comment` - (Optional) Rule comment.
- `enabled` - (Optional) Enable this rule. Defaults to `true`.
- `iface` - (Optional) Network interface name. You have to use network
- a security group insertion block, which includes the following arguments:
- `comment` - (Optional) Rule comment.
- `enabled` - (Optional) Enable this rule. Defaults to `true`.
- `iface` - (Optional) Network interface name. You have to use network
configuration key names for VMs and containers ('net\d+'). Host
related rules can use arbitrary strings.
- `security_group` - (Required) Security group name.
- `security_group` - (Required) Security group name.
## Attribute Reference
- `rule`
- `pos` - Position of the rule in the list.
- `pos` - Position of the rule in the list.

View File

@ -23,9 +23,9 @@ resource "proxmox_virtual_environment_group" "operations_team" {
## Argument Reference
- `acl` - (Optional) The access control list (multiple blocks supported).
- `path` - The path.
- `propagate` - Whether to propagate to child paths.
- `role_id` - The role identifier.
- `path` - The path.
- `propagate` - Whether to propagate to child paths.
- `role_id` - The role identifier.
- `comment` - (Optional) The group comment.
- `group_id` - (Required) The group identifier.
@ -38,5 +38,5 @@ resource "proxmox_virtual_environment_group" "operations_team" {
Instances can be imported using the `group_id`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_group.operations_team operations-team
terraform import proxmox_virtual_environment_group.operations_team operations-team
```

View File

@ -32,8 +32,8 @@ resource "proxmox_virtual_environment_hosts" "first_node_host_entries" {
- `node_name` - (Required) A node name.
- `entry` - (Required) A host entry (multiple blocks supported).
- `address` - (Required) The IP address.
- `hostnames` - (Required) The hostnames.
- `address` - (Required) The IP address.
- `hostnames` - (Required) The hostnames.
## Attribute Reference
@ -52,5 +52,5 @@ Be careful not to use this resource multiple times for the same node.
Instances can be imported using the `node_name`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_hosts.first_node_host_entries first-node
terraform import proxmox_virtual_environment_hosts.first_node_host_entries first-node
```

View File

@ -54,7 +54,7 @@ resource "proxmox_virtual_environment_network_linux_bridge" "vmbr99" {
### Read-Only
- `id` (String) A unique identifier with format '<node name>:<iface>'
- `id` (String) A unique identifier with format `<node name>:<iface>`
## Import

View File

@ -55,7 +55,7 @@ resource "proxmox_virtual_environment_network_linux_vlan" "vlan98" {
### Read-Only
- `id` (String) A unique identifier with format '<node name>:<iface>'.
- `id` (String) A unique identifier with format `<node name>:<iface>`.
## Import

View File

@ -28,16 +28,16 @@ resource "proxmox_virtual_environment_pool" "operations_pool" {
## Attribute Reference
- `members` - The pool members.
- `datastore_id` - The datastore identifier.
- `id` - The member identifier.
- `node_name` - The node name.
- `type` - The member type.
- `vm_id` - The virtual machine identifier.
- `datastore_id` - The datastore identifier.
- `id` - The member identifier.
- `node_name` - The node name.
- `type` - The member type.
- `vm_id` - The virtual machine identifier.
## Import
Instances can be imported using the `pool_id`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_pool.operations_pool operations-pool
terraform import proxmox_virtual_environment_pool.operations_pool operations-pool
```

View File

@ -37,5 +37,5 @@ There are no additional attributes available for this resource.
Instances can be imported using the `role_id`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_role.operations_monitoring operations-monitoring
terraform import proxmox_virtual_environment_role.operations_monitoring operations-monitoring
```

View File

@ -35,5 +35,5 @@ resource "proxmox_virtual_environment_time" "first_node_time" {
Instances can be imported using the `node_name`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_dns.first_node first-node
terraform import proxmox_virtual_environment_dns.first_node first-node
```

View File

@ -38,9 +38,9 @@ resource "proxmox_virtual_environment_role" "operations_monitoring" {
## Argument Reference
- `acl` - (Optional) The access control list (multiple blocks supported).
- `path` - The path.
- `propagate` - Whether to propagate to child paths.
- `role_id` - The role identifier.
- `path` - The path.
- `propagate` - Whether to propagate to child paths.
- `role_id` - The role identifier.
- `comment` - (Optional) The user comment.
- `email` - (Optional) The user's email address.
- `enabled` - (Optional) Whether the user account is enabled.
@ -61,5 +61,5 @@ There are no additional attributes available for this resource.
Instances can be imported using the `user_id`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_user.operations_automation operations-automation@pve
terraform import proxmox_virtual_environment_user.operations_automation operations-automation@pve
```

View File

@ -108,355 +108,355 @@ output "ubuntu_vm_public_key" {
- `acpi` - (Optional) Whether to enable ACPI (defaults to `true`).
- `agent` - (Optional) The QEMU agent configuration.
- `enabled` - (Optional) Whether to enable the QEMU agent (defaults
- `enabled` - (Optional) Whether to enable the QEMU agent (defaults
to `false`).
- `timeout` - (Optional) The maximum amount of time to wait for data from
- `timeout` - (Optional) The maximum amount of time to wait for data from
the QEMU agent to become available ( defaults to `15m`).
- `trim` - (Optional) Whether to enable the FSTRIM feature in the QEMU agent
- `trim` - (Optional) Whether to enable the FSTRIM feature in the QEMU agent
(defaults to `false`).
- `type` - (Optional) The QEMU agent interface type (defaults to `virtio`).
- `isa` - ISA Serial Port.
- `virtio` - VirtIO (paravirtualized).
- `type` - (Optional) The QEMU agent interface type (defaults to `virtio`).
- `isa` - ISA Serial Port.
- `virtio` - VirtIO (paravirtualized).
- `audio_device` - (Optional) An audio device.
- `device` - (Optional) The device (defaults to `intel-hda`).
- `AC97` - Intel 82801AA AC97 Audio.
- `ich9-intel-hda` - Intel HD Audio Controller (ich9).
- `intel-hda` - Intel HD Audio.
- `driver` - (Optional) The driver (defaults to `spice`).
- `spice` - Spice.
- `enabled` - (Optional) Whether to enable the audio device (defaults
- `device` - (Optional) The device (defaults to `intel-hda`).
- `AC97` - Intel 82801AA AC97 Audio.
- `ich9-intel-hda` - Intel HD Audio Controller (ich9).
- `intel-hda` - Intel HD Audio.
- `driver` - (Optional) The driver (defaults to `spice`).
- `spice` - Spice.
- `enabled` - (Optional) Whether to enable the audio device (defaults
to `true`).
- `bios` - (Optional) The BIOS implementation (defaults to `seabios`).
- `ovmf` - OVMF (UEFI).
- `seabios` - SeaBIOS.
- `ovmf` - OVMF (UEFI).
- `seabios` - SeaBIOS.
- `boot_order` - (Optional) Specify a list of devices to boot from in the order
they appear in the list (defaults to `[]`).
- `cdrom` - (Optional) The CDROM configuration.
- `enabled` - (Optional) Whether to enable the CDROM drive (defaults
- `enabled` - (Optional) Whether to enable the CDROM drive (defaults
to `false`).
- `file_id` - (Optional) A file ID for an ISO file (defaults to `cdrom` as
- `file_id` - (Optional) A file ID for an ISO file (defaults to `cdrom` as
in the physical drive).
- `interface` - (Optional) A hardware interface to connect CDROM drive to,
- `interface` - (Optional) A hardware interface to connect CDROM drive to,
must be `ideN` (defaults to `ide3`). Note that `q35` machine type only
supports `ide0` and `ide2`.
- `clone` - (Optional) The cloning configuration.
- `datastore_id` - (Optional) The identifier for the target datastore.
- `node_name` - (Optional) The name of the source node (leave blank, if
- `datastore_id` - (Optional) The identifier for the target datastore.
- `node_name` - (Optional) The name of the source node (leave blank, if
equal to the `node_name` argument).
- `retries` - (Optional) Number of retries in Proxmox for clone vm.
- `retries` - (Optional) Number of retries in Proxmox for clone vm.
Sometimes Proxmox errors with timeout when creating multiple clones at
once.
- `vm_id` - (Required) The identifier for the source VM.
- `vm_id` - (Required) The identifier for the source VM.
- `cpu` - (Optional) The CPU configuration.
- `architecture` - (Optional) The CPU architecture (defaults to `x86_64`).
- `aarch64` - ARM (64 bit).
- `x86_64` - x86 (64-bit).
- `cores` - (Optional) The number of CPU cores (defaults to `1`).
- `flags` - (Optional) The CPU flags.
- `+aes`/`-aes` - Activate AES instruction set for HW acceleration.
- `+amd-no-ssb`/`-amd-no-ssb` - Notifies guest OS that host is not
- `architecture` - (Optional) The CPU architecture (defaults to `x86_64`).
- `aarch64` - ARM (64 bit).
- `x86_64` - x86 (64-bit).
- `cores` - (Optional) The number of CPU cores (defaults to `1`).
- `flags` - (Optional) The CPU flags.
- `+aes`/`-aes` - Activate AES instruction set for HW acceleration.
- `+amd-no-ssb`/`-amd-no-ssb` - Notifies guest OS that host is not
vulnerable for Spectre on AMD CPUs.
- `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with
- `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with
AMD CPUs, best used with "virt-ssbd".
- `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested
- `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested
virtualization (only supported on Intel CPUs).
- `+hv-tlbflush`/`-hv-tlbflush` - Improve performance in overcommitted
- `+hv-tlbflush`/`-hv-tlbflush` - Improve performance in overcommitted
Windows guests (may lead to guest BSOD on old CPUs).
- `+ibpb`/`-ibpb` - Allows improved Spectre mitigation on AMD CPUs.
- `+md-clear`/`-md-clear` - Required to let the guest OS know if MDS is
- `+ibpb`/`-ibpb` - Allows improved Spectre mitigation on AMD CPUs.
- `+md-clear`/`-md-clear` - Required to let the guest OS know if MDS is
mitigated correctly.
- `+pcid`/`-pcid` - Meltdown fix cost reduction on Westmere, Sandy- and
- `+pcid`/`-pcid` - Meltdown fix cost reduction on Westmere, Sandy- and
Ivy Bridge Intel CPUs.
- `+pdpe1gb`/`-pdpe1gb` - Allows guest OS to use 1 GB size pages, if
- `+pdpe1gb`/`-pdpe1gb` - Allows guest OS to use 1 GB size pages, if
host HW supports it.
- `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with
- `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with
Intel CPUs.
- `+ssbd`/`-ssbd` - Protection for "Speculative Store Bypass" for Intel
- `+ssbd`/`-ssbd` - Protection for "Speculative Store Bypass" for Intel
models.
- `+virt-ssbd`/`-virt-ssbd` - Basis for "Speculative Store Bypass"
- `+virt-ssbd`/`-virt-ssbd` - Basis for "Speculative Store Bypass"
protection for AMD models.
- `hotplugged` - (Optional) The number of hotplugged vCPUs (defaults
- `hotplugged` - (Optional) The number of hotplugged vCPUs (defaults
to `0`).
- `numa` - (Boolean) Enable/disable NUMA. (default to `false`)
- `sockets` - (Optional) The number of CPU sockets (defaults to `1`).
- `type` - (Optional) The emulated CPU type, it's recommended to
- `numa` - (Boolean) Enable/disable NUMA. (default to `false`)
- `sockets` - (Optional) The number of CPU sockets (defaults to `1`).
- `type` - (Optional) The emulated CPU type, it's recommended to
use `x86-64-v2-AES` (defaults to `qemu64`).
- `486` - Intel 486.
- `Broadwell`/`Broadwell-IBRS`/`Broadwell-noTSX`/`Broadwell-noTSX-IBRS` -
- `486` - Intel 486.
- `Broadwell`/`Broadwell-IBRS`/`Broadwell-noTSX`/`Broadwell-noTSX-IBRS` -
Intel Core Processor (Broadwell, 2014).
- `Cascadelake-Server`/`Cascadelake-Server-noTSX`/`Cascadelake-Server-v2`/`Cascadelake-Server-v4`/`Cascadelake-Server-v5` -
- `Cascadelake-Server`/`Cascadelake-Server-noTSX`/`Cascadelake-Server-v2`/`Cascadelake-Server-v4`/`Cascadelake-Server-v5` -
Intel Xeon 32xx/42xx/52xx/62xx/82xx/92xx (2019).
- `Conroe` - Intel Celeron_4x0 (Conroe/Merom Class Core 2, 2006).
- `Cooperlake`/`Cooperlake-v2`
- `EPYC`/`EPYC-IBPB`/`EPYC-Milan`/`EPYC-Rome`/`EPYC-Rome-v2`/`EPYC-v3` -
- `Conroe` - Intel Celeron_4x0 (Conroe/Merom Class Core 2, 2006).
- `Cooperlake`/`Cooperlake-v2`
- `EPYC`/`EPYC-IBPB`/`EPYC-Milan`/`EPYC-Rome`/`EPYC-Rome-v2`/`EPYC-v3` -
AMD EPYC Processor (2017).
- `Haswell`/`Haswell-IBRS`/`Haswell-noTSX`/`Haswell-noTSX-IBRS` - Intel
- `Haswell`/`Haswell-IBRS`/`Haswell-noTSX`/`Haswell-noTSX-IBRS` - Intel
Core Processor (Haswell, 2013).
- `Icelake-Client`/`Icelake-Client-noTSX`
- `Icelake-Server`/`Icelake-Server-noTSX`/`Icelake-Server-v3`/`Icelake-Server-v4`/`Icelake-Server-v5`/`Icelake-Server-v6`
- `IvyBridge`/`IvyBridge-IBRS` - Intel Xeon E3-12xx v2 (Ivy Bridge,
- `Icelake-Client`/`Icelake-Client-noTSX`
- `Icelake-Server`/`Icelake-Server-noTSX`/`Icelake-Server-v3`/`Icelake-Server-v4`/`Icelake-Server-v5`/`Icelake-Server-v6`
- `IvyBridge`/`IvyBridge-IBRS` - Intel Xeon E3-12xx v2 (Ivy Bridge,
2012).
- `KnightsMill` - Intel Xeon Phi 72xx (2017).
- `Nehalem`/`Nehalem-IBRS` - Intel Core i7 9xx (Nehalem Class Core i7,
- `KnightsMill` - Intel Xeon Phi 72xx (2017).
- `Nehalem`/`Nehalem-IBRS` - Intel Core i7 9xx (Nehalem Class Core i7,
2008).
- `Opteron_G1` - AMD Opteron 240 (Gen 1 Class Opteron, 2004).
- `Opteron_G2` - AMD Opteron 22xx (Gen 2 Class Opteron, 2006).
- `Opteron_G3` - AMD Opteron 23xx (Gen 3 Class Opteron, 2009).
- `Opteron_G4` - AMD Opteron 62xx class CPU (2011).
- `Opteron_G5` - AMD Opteron 63xx class CPU (2012).
- `Penryn` - Intel Core 2 Duo P9xxx (Penryn Class Core 2, 2007).
- `SandyBridge`/`SandyBridge-IBRS` - Intel Xeon E312xx (Sandy Bridge,
- `Opteron_G1` - AMD Opteron 240 (Gen 1 Class Opteron, 2004).
- `Opteron_G2` - AMD Opteron 22xx (Gen 2 Class Opteron, 2006).
- `Opteron_G3` - AMD Opteron 23xx (Gen 3 Class Opteron, 2009).
- `Opteron_G4` - AMD Opteron 62xx class CPU (2011).
- `Opteron_G5` - AMD Opteron 63xx class CPU (2012).
- `Penryn` - Intel Core 2 Duo P9xxx (Penryn Class Core 2, 2007).
- `SandyBridge`/`SandyBridge-IBRS` - Intel Xeon E312xx (Sandy Bridge,
2011).
- `SapphireRapids`
- `Skylake-Client`/`Skylake-Client-IBRS`/`Skylake-Client-noTSX-IBRS`/`Skylake-Client-v4` -
- `SapphireRapids`
- `Skylake-Client`/`Skylake-Client-IBRS`/`Skylake-Client-noTSX-IBRS`/`Skylake-Client-v4` -
Intel Core Processor (Skylake, 2015).
- `Skylake-Server`/`Skylake-Server-IBRS`/`Skylake-Server-noTSX-IBRS`/`Skylake-Server-v4`/`Skylake-Server-v5` -
- `Skylake-Server`/`Skylake-Server-IBRS`/`Skylake-Server-noTSX-IBRS`/`Skylake-Server-v4`/`Skylake-Server-v5` -
Intel Xeon Processor (Skylake, 2016).
- `Westmere`/`Westmere-IBRS` - Intel Westmere E56xx/L56xx/X56xx (
- `Westmere`/`Westmere-IBRS` - Intel Westmere E56xx/L56xx/X56xx (
Nehalem-C, 2010).
- `athlon` - AMD Athlon.
- `core2duo` - Intel Core 2 Duo.
- `coreduo` - Intel Core Duo.
- `host` - Host pass-through.
- `kvm32`/`kvm64` - Common KVM processor (32 & 64 bit variants).
- `max` - Maximum amount of features from host CPU.
- `pentium` - Intel Pentium (1993).
- `pentium2` - Intel Pentium 2 (1997-1999).
- `pentium3` - Intel Pentium 3 (1999-2001).
- `phenom` - AMD Phenom (2010).
- `qemu32`/`qemu64` - QEMU Virtual CPU version 2.5+ (32 & 64 bit
- `athlon` - AMD Athlon.
- `core2duo` - Intel Core 2 Duo.
- `coreduo` - Intel Core Duo.
- `host` - Host pass-through.
- `kvm32`/`kvm64` - Common KVM processor (32 & 64 bit variants).
- `max` - Maximum amount of features from host CPU.
- `pentium` - Intel Pentium (1993).
- `pentium2` - Intel Pentium 2 (1997-1999).
- `pentium3` - Intel Pentium 3 (1999-2001).
- `phenom` - AMD Phenom (2010).
- `qemu32`/`qemu64` - QEMU Virtual CPU version 2.5+ (32 & 64 bit
variants).
- `x86-64-v2`/`x86-64-v2-AES`/`x86-64-v3`/`x86-64-v4`
See https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels
- `custom-<model>` - Custom CPU model. All `custom-<model>` values
- `x86-64-v2`/`x86-64-v2-AES`/`x86-64-v3`/`x86-64-v4`
See <https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels>
- `custom-<model>` - Custom CPU model. All `custom-<model>` values
should be defined in `/etc/pve/virtual-guest/cpu-models.conf` file.
- `units` - (Optional) The CPU units (defaults to `1024`).
- `units` - (Optional) The CPU units (defaults to `1024`).
- `description` - (Optional) The description.
- `disk` - (Optional) A disk (multiple blocks supported).
- `cache` - (Optional) The cache type (defaults to `none`).
- `none` - No cache.
- `directsync` - Write to the host cache and wait for completion.
- `writethrough` - Write to the host cache, but write through to
- `cache` - (Optional) The cache type (defaults to `none`).
- `none` - No cache.
- `directsync` - Write to the host cache and wait for completion.
- `writethrough` - Write to the host cache, but write through to
the guest.
- `writeback` - Write to the host cache, but write back to the
- `writeback` - Write to the host cache, but write back to the
guest when possible.
- `unsafe` - Write directly to the disk bypassing the host cache.
- `datastore_id` - (Optional) The identifier for the datastore to create
- `unsafe` - Write directly to the disk bypassing the host cache.
- `datastore_id` - (Optional) The identifier for the datastore to create
the disk in (defaults to `local-lvm`).
- `path_in_datastore` - (Optional) The in-datastore path to the disk image.
- `path_in_datastore` - (Optional) The in-datastore path to the disk image.
***Experimental.***Use to attach another VM's disks,
or (as root only) host's filesystem paths (`datastore_id` empty string).
See "*Example: Attached disks*".
- `discard` - (Optional) Whether to pass discard/trim requests to the
- `discard` - (Optional) Whether to pass discard/trim requests to the
underlying storage. Supported values are `on`/`ignore` (defaults
to `ignore`).
- `file_format` - (Optional) The file format (defaults to `qcow2`).
- `qcow2` - QEMU Disk Image v2.
- `raw` - Raw Disk Image.
- `vmdk` - VMware Disk Image.
- `file_id` - (Optional) The file ID for a disk image (experimental -
- `file_format` - (Optional) The file format (defaults to `qcow2`).
- `qcow2` - QEMU Disk Image v2.
- `raw` - Raw Disk Image.
- `vmdk` - VMware Disk Image.
- `file_id` - (Optional) The file ID for a disk image (experimental -
might cause high CPU utilization during import, especially with large
disk images).
- `interface` - (Required) The disk interface for Proxmox, currently `scsi`,
- `interface` - (Required) The disk interface for Proxmox, currently `scsi`,
`sata` and `virtio` interfaces are supported. Append the disk index at
the end, for example, `virtio0` for the first virtio disk, `virtio1` for
the second, etc.
- `iothread` - (Optional) Whether to use iothreads for this disk (defaults
- `iothread` - (Optional) Whether to use iothreads for this disk (defaults
to `false`).
- `size` - (Optional) The disk size in gigabytes (defaults to `8`).
- `speed` - (Optional) The speed limits.
- `read` - (Optional) The maximum read speed in megabytes per second.
- `read_burstable` - (Optional) The maximum burstable read speed in
- `size` - (Optional) The disk size in gigabytes (defaults to `8`).
- `speed` - (Optional) The speed limits.
- `read` - (Optional) The maximum read speed in megabytes per second.
- `read_burstable` - (Optional) The maximum burstable read speed in
megabytes per second.
- `write` - (Optional) The maximum write speed in megabytes per second.
- `write_burstable` - (Optional) The maximum burstable write speed in
- `write` - (Optional) The maximum write speed in megabytes per second.
- `write_burstable` - (Optional) The maximum burstable write speed in
megabytes per second.
- `ssd` - (Optional) Whether to use an SSD emulation option for this disk (
- `ssd` - (Optional) Whether to use an SSD emulation option for this disk (
defaults to `false`). Note that SSD emulation is not supported on VirtIO
Block drives.
- `efi_disk` - (Optional) The efi disk device (required if `bios` is set
to `ovmf`)
- `datastore_id` (Optional) The identifier for the datastore to create
- `datastore_id` (Optional) The identifier for the datastore to create
the disk in (defaults to `local-lvm`).
- `file_format` (Optional) The file format.
- `type` (Optional) Size and type of the OVMF EFI disk. `4m` is newer and
- `file_format` (Optional) The file format.
- `type` (Optional) Size and type of the OVMF EFI disk. `4m` is newer and
recommended, and required for Secure Boot. For backwards compatibility
use `2m`. Ignored for VMs with cpu.architecture=`aarch64` (defaults
to `2m`).
- `pre_enrolled_keys` (Optional) Use am EFI vars template with
- `pre_enrolled_keys` (Optional) Use am EFI vars template with
distribution-specific and Microsoft Standard keys enrolled, if used with
EFI type=`4m`. Ignored for VMs with cpu.architecture=`aarch64` (defaults
to `false`).
- `hostpci` - (Optional) A host PCI device mapping (multiple blocks supported).
- `device` - (Required) The PCI device name for Proxmox, in form
- `device` - (Required) The PCI device name for Proxmox, in form
of `hostpciX` where `X` is a sequential number from 0 to 3.
- `id` - (Optional) The PCI device ID. This parameter is not compatible
- `id` - (Optional) The PCI device ID. This parameter is not compatible
with `api_token` and requires the root `username` and `password`
configured in the proxmox provider. Use either this or `mapping`.
- `mapping` - (Optional) The resource mapping name of the device, for
- `mapping` - (Optional) The resource mapping name of the device, for
example gpu. Use either this or `id`.
- `mdev` - (Optional) The mediated device ID to use.
- `pcie` - (Optional) Tells Proxmox to use a PCIe or PCI port. Some
- `mdev` - (Optional) The mediated device ID to use.
- `pcie` - (Optional) Tells Proxmox to use a PCIe or PCI port. Some
guests/device combination require PCIe rather than PCI. PCIe is only
available for q35 machine types.
- `rombar` - (Optional) Makes the firmware ROM visible for the VM (defaults
- `rombar` - (Optional) Makes the firmware ROM visible for the VM (defaults
to `true`).
- `rom_file` - (Optional) A path to a ROM file for the device to use. This
- `rom_file` - (Optional) A path to a ROM file for the device to use. This
is a relative path under `/usr/share/kvm/`.
- `xvga` - (Optional) Marks the PCI(e) device as the primary GPU of the VM.
- `xvga` - (Optional) Marks the PCI(e) device as the primary GPU of the VM.
With this enabled the `vga` configuration argument will be ignored.
- `usb` - (Optional) A host USB device mapping (multiple blocks supported).
- `host` - (Optional) The USB device ID. Use either this or `mapping`.
- `mapping` - (Optional) The resource mapping name of the device, for
- `host` - (Optional) The USB device ID. Use either this or `mapping`.
- `mapping` - (Optional) The resource mapping name of the device, for
example usbdevice. Use either this or `id`.
- `usb3` - (Optional) Makes the USB device a USB3 device for the VM (defaults
- `usb3` - (Optional) Makes the USB device a USB3 device for the VM (defaults
to `false`).
- `initialization` - (Optional) The cloud-init configuration.
- `datastore_id` - (Optional) The identifier for the datastore to create the
- `datastore_id` - (Optional) The identifier for the datastore to create the
cloud-init disk in (defaults to `local-lvm`).
- `interface` - (Optional) The hardware interface to connect the cloud-init
- `interface` - (Optional) The hardware interface to connect the cloud-init
image to. Must be one of `ide0..3`, `sata0..5`, `scsi0..30`. Will be
detected if the setting is missing but a cloud-init image is present,
otherwise defaults to `ide2`.
- `dns` - (Optional) The DNS configuration.
- `domain` - (Optional) The DNS search domain.
- `server` - (Optional) The DNS server.
- `ip_config` - (Optional) The IP configuration (one block per network
- `dns` - (Optional) The DNS configuration.
- `domain` - (Optional) The DNS search domain.
- `server` - (Optional) The DNS server.
- `ip_config` - (Optional) The IP configuration (one block per network
device).
- `ipv4` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv4 address in CIDR notation
- `ipv4` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv4 address in CIDR notation
(e.g. 192.168.2.2/24). Alternatively, set this to `dhcp` for
autodiscovery.
- `gateway` - (Optional) The IPv4 gateway (must be omitted
- `gateway` - (Optional) The IPv4 gateway (must be omitted
when `dhcp` is used as the address).
- `ipv6` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv6 address in CIDR notation
- `ipv6` - (Optional) The IPv4 configuration.
- `address` - (Optional) The IPv6 address in CIDR notation
(e.g. fd1c:000:0000::0000:000:7334/64). Alternatively, set this
to `dhcp` for autodiscovery.
- `gateway` - (Optional) The IPv6 gateway (must be omitted
- `gateway` - (Optional) The IPv6 gateway (must be omitted
when `dhcp` is used as the address).
- `user_account` - (Optional) The user account configuration (conflicts
- `user_account` - (Optional) The user account configuration (conflicts
with `user_data_file_id`).
- `keys` - (Optional) The SSH keys.
- `password` - (Optional) The SSH password.
- `username` - (Optional) The SSH username.
- `network_data_file_id` - (Optional) The identifier for a file containing
- `keys` - (Optional) The SSH keys.
- `password` - (Optional) The SSH password.
- `username` - (Optional) The SSH username.
- `network_data_file_id` - (Optional) The identifier for a file containing
network configuration data passed to the VM via cloud-init (conflicts
with `ip_config`).
- `user_data_file_id` - (Optional) The identifier for a file containing
- `user_data_file_id` - (Optional) The identifier for a file containing
custom user data (conflicts with `user_account`).
- `vendor_data_file_id` - (Optional) The identifier for a file containing
- `vendor_data_file_id` - (Optional) The identifier for a file containing
all vendor data passed to the VM via cloud-init.
- `meta_data_file_id` - (Optional) The identifier for a file containing
- `meta_data_file_id` - (Optional) The identifier for a file containing
all meta data passed to the VM via cloud-init.
- `keyboard_layout` - (Optional) The keyboard layout (defaults to `en-us`).
- `da` - Danish.
- `de` - German.
- `de-ch` - Swiss German.
- `en-gb` - British English.
- `en-us` - American English.
- `es` - Spanish.
- `fi` - Finnish.
- `fr` - French.
- `fr-be` - Belgian French.
- `fr-ca` - French Canadian.
- `fr-ch` - Swish French.
- `hu` - Hungarian.
- `is` - Icelandic.
- `it` - Italian.
- `ja` - Japanese.
- `lt` - Lithuanian.
- `mk` - Macedonian.
- `nl` - Dutch.
- `no` - Norwegian.
- `pl` - Polish.
- `pt` - Portuguese.
- `pt-br` - Brazilian Portuguese.
- `sl` - Slovenian.
- `sv` - Swedish.
- `tr` - Turkish.
- `da` - Danish.
- `de` - German.
- `de-ch` - Swiss German.
- `en-gb` - British English.
- `en-us` - American English.
- `es` - Spanish.
- `fi` - Finnish.
- `fr` - French.
- `fr-be` - Belgian French.
- `fr-ca` - French Canadian.
- `fr-ch` - Swish French.
- `hu` - Hungarian.
- `is` - Icelandic.
- `it` - Italian.
- `ja` - Japanese.
- `lt` - Lithuanian.
- `mk` - Macedonian.
- `nl` - Dutch.
- `no` - Norwegian.
- `pl` - Polish.
- `pt` - Portuguese.
- `pt-br` - Brazilian Portuguese.
- `sl` - Slovenian.
- `sv` - Swedish.
- `tr` - Turkish.
- `kvm_arguments` - (Optional) Arbitrary arguments passed to kvm.
- `machine` - (Optional) The VM machine type (defaults to `pc`).
- `pc` - Standard PC (i440FX + PIIX, 1996).
- `q35` - Standard PC (Q35 + ICH9, 2009).
- `pc` - Standard PC (i440FX + PIIX, 1996).
- `q35` - Standard PC (Q35 + ICH9, 2009).
- `memory` - (Optional) The memory configuration.
- `dedicated` - (Optional) The dedicated memory in megabytes (defaults
- `dedicated` - (Optional) The dedicated memory in megabytes (defaults
to `512`).
- `floating` - (Optional) The floating memory in megabytes (defaults
- `floating` - (Optional) The floating memory in megabytes (defaults
to `0`).
- `shared` - (Optional) The shared memory in megabytes (defaults to `0`).
- `shared` - (Optional) The shared memory in megabytes (defaults to `0`).
- `migrate` - (Optional) Migrate the VM on node change instead of re-creating
it (defaults to `false`).
- `name` - (Optional) The virtual machine name.
- `network_device` - (Optional) A network device (multiple blocks supported).
- `bridge` - (Optional) The name of the network bridge (defaults
- `bridge` - (Optional) The name of the network bridge (defaults
to `vmbr0`).
- `enabled` - (Optional) Whether to enable the network device (defaults
- `enabled` - (Optional) Whether to enable the network device (defaults
to `true`).
- `firewall` - (Optional) Whether this interface's firewall rules should be
- `firewall` - (Optional) Whether this interface's firewall rules should be
used (defaults to `false`).
- `mac_address` - (Optional) The MAC address.
- `model` - (Optional) The network device model (defaults to `virtio`).
- `e1000` - Intel E1000.
- `rtl8139` - Realtek RTL8139.
- `virtio` - VirtIO (paravirtualized).
- `vmxnet3` - VMware vmxnet3.
- `mtu` - (Optional) Force MTU, for VirtIO only. Set to 1 to use the bridge
- `mac_address` - (Optional) The MAC address.
- `model` - (Optional) The network device model (defaults to `virtio`).
- `e1000` - Intel E1000.
- `rtl8139` - Realtek RTL8139.
- `virtio` - VirtIO (paravirtualized).
- `vmxnet3` - VMware vmxnet3.
- `mtu` - (Optional) Force MTU, for VirtIO only. Set to 1 to use the bridge
MTU. Cannot be larger than the bridge MTU.
- `queues` - (Optional) The number of queues for VirtIO (1..64).
- `rate_limit` - (Optional) The rate limit in megabytes per second.
- `vlan_id` - (Optional) The VLAN identifier.
- `queues` - (Optional) The number of queues for VirtIO (1..64).
- `rate_limit` - (Optional) The rate limit in megabytes per second.
- `vlan_id` - (Optional) The VLAN identifier.
- `node_name` - (Required) The name of the node to assign the virtual machine
to.
- `on_boot` - (Optional) Specifies whether a VM will be started during system
boot. (defaults to `true`)
- `operating_system` - (Optional) The Operating System configuration.
- `type` - (Optional) The type (defaults to `other`).
- `l24` - Linux Kernel 2.4.
- `l26` - Linux Kernel 2.6 - 5.X.
- `other` - Unspecified OS.
- `solaris` - OpenIndiania, OpenSolaris og Solaris Kernel.
- `w2k` - Windows 2000.
- `w2k3` - Windows 2003.
- `w2k8` - Windows 2008.
- `win7` - Windows 7.
- `win8` - Windows 8, 2012 or 2012 R2.
- `win10` - Windows 10 or 2016.
- `win11` - Windows 11
- `wvista` - Windows Vista.
- `wxp` - Windows XP.
- `type` - (Optional) The type (defaults to `other`).
- `l24` - Linux Kernel 2.4.
- `l26` - Linux Kernel 2.6 - 5.X.
- `other` - Unspecified OS.
- `solaris` - OpenIndiania, OpenSolaris og Solaris Kernel.
- `w2k` - Windows 2000.
- `w2k3` - Windows 2003.
- `w2k8` - Windows 2008.
- `win7` - Windows 7.
- `win8` - Windows 8, 2012 or 2012 R2.
- `win10` - Windows 10 or 2016.
- `win11` - Windows 11
- `wvista` - Windows Vista.
- `wxp` - Windows XP.
- `pool_id` - (Optional) The identifier for a pool to assign the virtual machine
to.
- `reboot` - (Optional) Reboot the VM after initial creation. (defaults
to `false`)
- `serial_device` - (Optional) A serial device (multiple blocks supported).
- `device` - (Optional) The device (defaults to `socket`).
- `/dev/*` - A host serial device.
- `socket` - A unix socket.
- `device` - (Optional) The device (defaults to `socket`).
- `/dev/*` - A host serial device.
- `socket` - A unix socket.
- `scsi_hardware` - (Optional) The SCSI hardware type (defaults
to `virtio-scsi-pci`).
- `lsi` - LSI Logic SAS1068E.
- `lsi53c810` - LSI Logic 53C810.
- `virtio-scsi-pci` - VirtIO SCSI.
- `virtio-scsi-single` - VirtIO SCSI (single queue).
- `megasas` - LSI Logic MegaRAID SAS.
- `pvscsi` - VMware Paravirtual SCSI.
- `lsi` - LSI Logic SAS1068E.
- `lsi53c810` - LSI Logic 53C810.
- `virtio-scsi-pci` - VirtIO SCSI.
- `virtio-scsi-single` - VirtIO SCSI (single queue).
- `megasas` - LSI Logic MegaRAID SAS.
- `pvscsi` - VMware Paravirtual SCSI.
- `smbios` - (Optional) The SMBIOS (type1) settings for the VM.
- `family`- (Optional) The family string.
- `manufacturer` - (Optional) The manufacturer.
- `product` - (Optional) The product ID.
- `serial` - (Optional) The serial number.
- `sku` - (Optional) The SKU number.
- `uuid` - (Optional) The UUID (defaults to randomly generated UUID).
- `version` - (Optional) The version.
- `family`- (Optional) The family string.
- `manufacturer` - (Optional) The manufacturer.
- `product` - (Optional) The product ID.
- `serial` - (Optional) The serial number.
- `sku` - (Optional) The SKU number.
- `uuid` - (Optional) The UUID (defaults to randomly generated UUID).
- `version` - (Optional) The version.
- `started` - (Optional) Whether to start the virtual machine (defaults
to `true`).
- `startup` - (Optional) Defines startup and shutdown behavior of the VM.
- `order` - (Required) A non-negative number defining the general startup
- `order` - (Required) A non-negative number defining the general startup
order.
- `up` - (Optional) A non-negative number defining the delay in seconds
- `up` - (Optional) A non-negative number defining the delay in seconds
before the next VM is started.
- `down` - (Optional) A non-negative number defining the delay in seconds
- `down` - (Optional) A non-negative number defining the delay in seconds
before the next VM is shut down.
- `tablet_device` - (Optional) Whether to enable the USB tablet device (defaults
to `true`).
@ -483,22 +483,22 @@ output "ubuntu_vm_public_key" {
- `timeout_stop_vm` - (Optional) Timeout for stopping a VM in seconds (defaults
to 300).
- `vga` - (Optional) The VGA configuration.
- `enabled` - (Optional) Whether to enable the VGA device (defaults
- `enabled` - (Optional) Whether to enable the VGA device (defaults
to `true`).
- `memory` - (Optional) The VGA memory in megabytes (defaults to `16`).
- `type` - (Optional) The VGA type (defaults to `std`).
- `cirrus` - Cirrus (deprecated since QEMU 2.2).
- `qxl` - SPICE.
- `qxl2` - SPICE Dual Monitor.
- `qxl3` - SPICE Triple Monitor.
- `qxl4` - SPICE Quad Monitor.
- `serial0` - Serial Terminal 0.
- `serial1` - Serial Terminal 1.
- `serial2` - Serial Terminal 2.
- `serial3` - Serial Terminal 3.
- `std` - Standard VGA.
- `virtio` - VirtIO-GPU.
- `vmware` - VMware Compatible.
- `memory` - (Optional) The VGA memory in megabytes (defaults to `16`).
- `type` - (Optional) The VGA type (defaults to `std`).
- `cirrus` - Cirrus (deprecated since QEMU 2.2).
- `qxl` - SPICE.
- `qxl2` - SPICE Dual Monitor.
- `qxl3` - SPICE Triple Monitor.
- `qxl4` - SPICE Quad Monitor.
- `serial0` - Serial Terminal 0.
- `serial1` - Serial Terminal 1.
- `serial2` - Serial Terminal 2.
- `serial3` - Serial Terminal 3.
- `std` - Standard VGA.
- `virtio` - VirtIO-GPU.
- `vmware` - VMware Compatible.
- `vm_id` - (Optional) The VM identifier.
- `hook_script_file_id` - (Optional) The identifier for a file containing a hook script (needs to be executable).
@ -645,5 +645,5 @@ resource "proxmox_virtual_environment_vm" "data_user_vm" {
Instances can be imported using the `node_name` and the `vm_id`, e.g.,
```bash
$ terraform import proxmox_virtual_environment_vm.ubuntu_vm first-node/4321
terraform import proxmox_virtual_environment_vm.ubuntu_vm first-node/4321
```

View File

@ -172,7 +172,7 @@ func (r *linuxBridgeResource) Schema(
Description: "Manages a Linux Bridge network interface in a Proxmox VE node.",
Attributes: map[string]schema.Attribute{
// Base attributes
"id": structure.IDAttribute("A unique identifier with format '<node name>:<iface>'"),
"id": structure.IDAttribute("A unique identifier with format `<node name>:<iface>`"),
"node_name": schema.StringAttribute{
Description: "The name of the node.",
Required: true,

View File

@ -146,7 +146,7 @@ func (r *linuxVLANResource) Schema(
Description: "Manages a Linux VLAN network interface in a Proxmox VE node.",
Attributes: map[string]schema.Attribute{
// Base attributes
"id": structure.IDAttribute("A unique identifier with format '<node name>:<iface>'."),
"id": structure.IDAttribute("A unique identifier with format `<node name>:<iface>`."),
"node_name": schema.StringAttribute{
Description: "The name of the node.",
Required: true,

8
howtos/README.md Normal file
View File

@ -0,0 +1,8 @@
# HOW-TOs
A collection of HOW-TOs for common tasks.
## Virtual Machines
- [Create a VM from a Cloud Image](howtos/cloud-image/README.md)
- [Configure a VM with Cloud-Init](howtos/cloud-init/README.md)

View File

@ -0,0 +1,93 @@
# HOW-TO Create a VM from a Cloud Image
> [!NOTE]
> Examples below use the following defaults:
>
> - a single Proxmox node named `pve`
> - local storages named `local` and `local-lvm`
## Download a public cloud image from URL
Proxmox does not natively support QCOW2 images, but provider can do the conversion for you.
Example of how to create a CentOS 8 VM from a "generic cloud" `qcow2` image. CentOS 8 images are available at [cloud.centos.org](https://cloud.centos.org/centos/8-stream/x86_64/images/):
```terraform
resource "proxmox_virtual_environment_vm" "centos_vm" {
name = "test-centos"
node_name = "pve"
initialization {
user_account {
# do not use this in production, configure your own ssh key instead!
username = "user"
password = "password"
}
}
disk {
datastore_id = "local-lvm"
file_id = proxmox_virtual_environment_file.centos_cloud_image.id
interface = "virtio0"
iothread = true
discard = "on"
size = 20
}
}
resource "proxmox_virtual_environment_file" "centos_cloud_image" {
content_type = "iso"
datastore_id = "local"
node_name = "pve"
source_file {
# you may download this image locally on your workstation and then use the local path instead of the remote URL
path = "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20231113.0.x86_64.qcow2"
file_name = "centos8.img"
# you may also use the SHA256 checksum of the image to verify its integrity
checksum = "b9ba602de681e493b020825db0ee30602a46ef92"
}
}
```
Ubuntu cloud images are available at [cloud-images.ubuntu.com](https://cloud-images.ubuntu.com/). Ubuntu cloud images are in `qcow2` format as well, but stored with `.img` extension, so they can be directly uploaded to Proxmox without renaming.
Just update the `source_file` block in the example above to use the Ubuntu image URL:
```terraform
source_file {
path = "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
...
}
```
For [large images](https://registry.terraform.io/providers/bpg/proxmox/latest/docs/resources/virtual_environment_file#important-notes), you may want to use a dedicated temporary directory [configured](https://registry.terraform.io/providers/bpg/proxmox/latest/docs#tmp_dir) for provider via `tmp_dir` attribute, instead of system's default temporary directory. This is especially useful if you are deploying from a container with limited disk space.
## Create a VM from an exiting image on Proxmox
If you already have a cloud image on Proxmox, you can use it to create a VM:
```terraform
resource "proxmox_virtual_environment_vm" "debian_vm" {
name = "test-debian"
node_name = "pve"
initialization {
user_account {
# do not use this in production, configure your own ssh key instead!
username = "user"
password = "password"
}
}
disk {
datastore_id = "local-lvm"
file_id = "local:iso/debian-12-genericcloud-amd64.img"
interface = "virtio0"
iothread = true
discard = "on"
size = 20
}
}
```

View File

@ -0,0 +1,33 @@
resource "proxmox_virtual_environment_vm" "centos_vm" {
name = "test-centos"
node_name = "pve"
initialization {
user_account {
# do not use this in production, configure your own ssh key instead!
username = "user"
password = "password"
}
}
disk {
datastore_id = "local-lvm"
file_id = proxmox_virtual_environment_file.centos_cloud_image.id
interface = "virtio0"
iothread = true
discard = "on"
size = 20
}
}
resource "proxmox_virtual_environment_file" "centos_cloud_image" {
content_type = "iso"
datastore_id = "local"
node_name = "pve"
source_file {
# you may download this image locally on your workstation and then use the local path instead of the remote URL
path = "https://cloud.centos.org/centos/8-stream/x86_64/images/CentOS-Stream-GenericCloud-8-20231113.0.x86_64.qcow2"
file_name = "centos8.img"
}
}

View File

@ -0,0 +1,17 @@
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "0.38.1"
}
}
}
provider "proxmox" {
endpoint = var.virtual_environment_endpoint
api_token = var.virtual_environment_token
ssh {
agent = true
username = "root"
}
}

View File

@ -0,0 +1,9 @@
variable "virtual_environment_endpoint" {
type = string
description = "The endpoint for the Proxmox Virtual Environment API (example: https://host:port)"
}
variable "virtual_environment_token" {
type = string
description = "The token for the Proxmox Virtual Environment API"
}

View File

@ -0,0 +1,22 @@
resource "proxmox_virtual_environment_vm" "debian_vm" {
name = "test-debian"
node_name = "pve"
initialization {
user_account {
# do not use this in production, configure your own ssh key instead!
username = "user"
password = "password"
}
}
disk {
datastore_id = "local-lvm"
file_id = "local:iso/debian-12-genericcloud-amd64.img"
interface = "virtio0"
iothread = true
discard = "on"
size = 20
}
}

View File

@ -0,0 +1,17 @@
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "0.38.1"
}
}
}
provider "proxmox" {
endpoint = var.virtual_environment_endpoint
api_token = var.virtual_environment_token
ssh {
agent = true
username = "root"
}
}

View File

@ -0,0 +1,9 @@
variable "virtual_environment_endpoint" {
type = string
description = "The endpoint for the Proxmox Virtual Environment API (example: https://host:port)"
}
variable "virtual_environment_token" {
type = string
description = "The token for the Proxmox Virtual Environment API"
}

View File

@ -0,0 +1,32 @@
resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
name = "test-ubuntu"
node_name = "pve"
initialization {
user_account {
# do not use this in production, configure your own ssh key instead!
username = "user"
password = "password"
}
}
disk {
datastore_id = "local-lvm"
file_id = proxmox_virtual_environment_file.ubuntu_cloud_image.id
interface = "virtio0"
iothread = true
discard = "on"
size = 20
}
}
resource "proxmox_virtual_environment_file" "ubuntu_cloud_image" {
content_type = "iso"
datastore_id = "local"
node_name = "pve"
source_file {
# you may download this image locally on your workstation and then use the local path instead of the remote URL
path = "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
}
}

View File

@ -0,0 +1,17 @@
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "0.38.1"
}
}
}
provider "proxmox" {
endpoint = var.virtual_environment_endpoint
api_token = var.virtual_environment_token
ssh {
agent = true
username = "root"
}
}

View File

@ -0,0 +1,9 @@
variable "virtual_environment_endpoint" {
type = string
description = "The endpoint for the Proxmox Virtual Environment API (example: https://host:port)"
}
variable "virtual_environment_token" {
type = string
description = "The token for the Proxmox Virtual Environment API"
}

View File

@ -0,0 +1,6 @@
# HOW-TO Configure a VM with Cloud-Init
## Native Proxmox Cloud-Init support
TODO

View File

@ -0,0 +1,32 @@
resource "proxmox_virtual_environment_vm" "centos_vm" {
name = "test-ubuntu"
node_name = "pve"
initialization {
user_account {
keys = [trimspace(tls_private_key.ubuntu_vm_key.public_key_openssh)]
# do not use this in production, cofigure your own ssh key instead!
username = "ubuntu"
}
}
disk {
datastore_id = "local-lvm"
file_id = proxmox_virtual_environment_file.ubuntu_cloud_image.id
interface = "virtio0"
iothread = true
discard = "on"
size = 20
}
}
resource "proxmox_virtual_environment_file" "ubuntu_cloud_image" {
content_type = "iso"
datastore_id = "local"
node_name = "pve"
source_file {
path = "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
}
}

View File

@ -0,0 +1,17 @@
terraform {
required_providers {
proxmox = {
source = "bpg/proxmox"
version = "0.38.1"
}
}
}
provider "proxmox" {
endpoint = var.virtual_environment_endpoint
api_token = var.virtual_environment_token
ssh {
agent = true
username = "root"
}
}

View File

@ -0,0 +1,9 @@
variable "virtual_environment_endpoint" {
type = string
description = "The endpoint for the Proxmox Virtual Environment API (example: https://host:port)"
}
variable "virtual_environment_token" {
type = string
description = "The token for the Proxmox Virtual Environment API"
}