example | ||
proxmox | ||
proxmoxtf | ||
.gitignore | ||
.travis.yml | ||
CHANGELOG.md | ||
go.mod | ||
go.sum | ||
LICENSE | ||
main.go | ||
Makefile | ||
README.md |
Terraform Provider for Proxmox
A Terraform Provider which adds support for Proxmox solutions.
Requirements
Table of contents
Building the Provider
Clone repository to: $GOPATH/src/github.com/danitso/terraform-provider-proxmox
$ mkdir -p $GOPATH/src/github.com/danitso; cd $GOPATH/src/github.com/danitso
$ git clone git@github.com:danitso/terraform-provider-proxmox
Enter the provider directory, initialize and build the provider
$ cd $GOPATH/src/github.com/danitso/terraform-provider-proxmox
$ make init
$ make build
Using the Provider
If you're building the provider, follow the instructions to install it as a plugin. After placing it into your plugins directory, run terraform init
to initialize it.
Configuration
Arguments
virtual_environment
- (Optional) This is the configuration block for the Proxmox Virtual Environmentendpoint
- (Required) The endpoint for the Proxmox Virtual Environment APIinsecure
- (Optional) Whether to skip the TLS verification step (defaults tofalse
)password
- (Required) The password for the Proxmox Virtual Environment APIusername
- (Required) The username for the Proxmox Virtual Environment API
Environment variables
You can set up the provider by passing environment variables instead of specifying arguments.
PROXMOX_VE_ENDPOINT
orPM_VE_ENDPOINT
- The endpoint for the Proxmox Virtual Environment APIPROXMOX_VE_INSECURE
orPM_VE_INSECURE
- Whether to skip the TLS verification stepPROXMOX_VE_PASSWORD
orPM_VE_PASSWORD
- The password for the Proxmox Virtual Environment APIPROXMOX_VE_USERNAME
orPM_VE_USERNAME
- The username for the Proxmox Virtual Environment API
provider "proxmox" {
virtual_environment {}
}
Usage
$ export PROXMOX_VE_ENDPOINT="https://hostname:8006"
$ export PROXMOX_VE_INSECURE="true"
$ export PROXMOX_VE_PASSWORD="a-strong-password"
$ export PROXMOX_VE_USERNAME="username@realm"
$ terraform plan
You can omit PROXMOX_VE_INSECURE
, if the Proxmox Virtual Environment API is exposing a certificate trusted by your operating system.
Data Sources
Virtual Environment
Datastores (proxmox_virtual_environment_datastores)
Arguments
node_name
- (Required) A node name
Attributes
active
- Whether the datastore is activecontent_types
- The allowed content typesdatastore_ids
- The datastore idsenabled
- Whether the datastore is enabledshared
- Whether the datastore is sharedspace_available
- The available space in bytesspace_total
- The total space in bytesspace_used
- The used space in bytestypes
- The storage types
Group (proxmox_virtual_environment_group)
Arguments
group_id
- (Required) The group id
Attributes
acl
- The access control listpath
- The pathpropagate
- Whether to propagate to child pathsrole_id
- The role id
comment
- The group commentmembers
- The group members as a list withusername@realm
entries
Groups (proxmox_virtual_environment_groups)
Arguments
This data source doesn't accept arguments.
Attributes
comments
- The group commentsgroup_ids
- The group ids
Nodes (proxmox_virtual_environment_nodes)
Arguments
This data source doesn't accept arguments.
Attributes
cpu_count
- The CPU count for each nodecpu_utilization
- The CPU utilization on each nodememory_available
- The memory available on each nodememory_used
- The memory used on each nodenames
- The node namesonline
- Whether a node is onlinessl_fingerprints
- The SSL fingerprint for each nodesupport_levels
- The support level for each nodeuptime
- The uptime in seconds for each node
Pool (proxmox_virtual_environment_pool)
Arguments
pool_id
- (Required) The pool id
Attributes
comment
- The pool commentmembers
- The pool membersdatastore_id
- The datastore idid
- The member idnode_name
- The node nametype
- The member typevm_id
- The virtual machine id
Pools (proxmox_virtual_environment_pools)
Arguments
This data source doesn't accept arguments.
Attributes
pool_ids
- The pool ids
Role (proxmox_virtual_environment_role)
Arguments
role_id
- (Required) The role id
Attributes
privileges
- The role privileges
Roles (proxmox_virtual_environment_roles)
Arguments
This data source doesn't accept arguments.
Attributes
privileges
- The role privilegesrole_ids
- The role idsspecial
- Whether the role is special (built-in)
User (proxmox_virtual_environment_user)
Arguments
user_id
- (Required) The user id.
Attributes
acl
- The access control listpath
- The pathpropagate
- Whether to propagate to child pathsrole_id
- The role id
comment
- The user commentemail
- The user's email addressenabled
- Whether the user account is enabledexpiration_date
- The user account's expiration date (RFC 3339)first_name
- The user's first namegroups
- The user's groupskeys
- The user's keyslast_name
- The user's last name
Users (proxmox_virtual_environment_users)
Arguments
This data source doesn't accept arguments.
Attributes
comments
- The user commentsemails
- The users' email addressesenabled
- Whether a user account is enabledexpiration_dates
- The user accounts' expiration dates (RFC 3339)first_names
- The users' first namesgroups
- The users' groupskeys
- The users' keyslast_names
- The users' last namesuser_ids
- The user ids
Version (proxmox_virtual_environment_version)
Arguments
This data source doesn't accept arguments.
Attributes
keyboard_layout
- The keyboard layoutrelease
- The release numberrepository_id
- The repository idversion
- The version string
Resources
Virtual Environment
File (proxmox_virtual_environment_file)
Arguments
content_type
- (Optional) The content typebackup
iso
snippets
vztmpl
datastore_id
- (Required) The datastore idnode_name
- (Required) The node namesource_file
- (Optional) The source file (conflicts withsource_raw
)checksum
- (Optional) The SHA256 checksum of the source filefile_name
- (Optional) The file name to use instead of the source file nameinsecure
- (Optional) Whether to skip the TLS verification step for HTTPS sources (defaults tofalse
)path
- (Required) A path to a local file or a URL
source_raw
- (Optional) The raw source (conflicts withsource_file
)data
- (Required) The raw datafile_name
- (Required) The file nameresize
- (Optional) The number of bytes to resize the file to
Attributes
file_modification_date
- The file modification date (RFC 3339)file_name
- The file namefile_size
- The file size in bytesfile_tag
- The file tag
Group (proxmox_virtual_environment_group)
Arguments
acl
- (Optional) The access control list (multiple blocks supported)path
- The pathpropagate
- Whether to propagate to child pathsrole_id
- The role id
comment
- (Optional) The group commentgroup_id
- (Required) The group id
Attributes
members
- The group members as a list withusername@realm
entries
Pool (proxmox_virtual_environment_pool)
Arguments
comment
- (Optional) The pool commentpool_id
- (Required) The pool id
Attributes
members
- The pool membersdatastore_id
- The datastore idid
- The member idnode_name
- The node nametype
- The member typevm_id
- The virtual machine id
Role (proxmox_virtual_environment_role)
Arguments
privileges
- (Required) The role privilegesrole_id
- (Required) The role id
Attributes
This resource doesn't expose any additional attributes.
User (proxmox_virtual_environment_user)
Arguments
acl
- (Optional) The access control list (multiple blocks supported)path
- The pathpropagate
- Whether to propagate to child pathsrole_id
- The role id
comment
- (Optional) The user commentemail
- (Optional) The user's email addressenabled
- (Optional) Whether the user account is enabledexpiration_date
- (Optional) The user account's expiration date (RFC 3339)first_name
- (Optional) The user's first namegroups
- (Optional) The user's groupskeys
- (Optional) The user's keyslast_name
- (Optional) The user's last namepassword
- (Required) The user's passworduser_id
- (Required) The user id
Attributes
This resource doesn't expose any additional attributes.
VM (proxmox_virtual_environment_vm)
Arguments
agent
- (Optional) The QEMU agent configurationenabled
- (Optional) Whether to enable the QEMU agent (defaults tofalse
)trim
- (Optional) Whether to enable the FSTRIM feature in the QEMU agent (defaults tofalse
)type
- (Optional) The QEMU agent interface type (defaults tovirtio
)isa
- ISA Serial Portvirtio
- VirtIO (paravirtualized)
cdrom
- (Optional) The CDROM configurationenabled
- (Optional) Whether to enable the CDROM drive (defaults tofalse
)file_id
- (Optional) A file ID for an ISO file (defaults tocdrom
as in the physical drive)
cloud_init
- (Optional) The cloud-init configuration (conflicts withcdrom
)dns
- (Optional) The DNS configurationdomain
- (Optional) The DNS search domainserver
- (Optional) The DNS server
ip_config
- (Optional) The IP configuration (one block per network device)ipv4
- (Optional) The IPv4 configurationaddress
- (Optional) The IPv4 address (usedhcp
for autodiscovery)gateway
- (Optional) The IPv4 gateway (must be omitted whendhcp
is used as the address)
ipv6
- (Optional) The IPv4 configurationaddress
- (Optional) The IPv6 address (usedhcp
for autodiscovery)gateway
- (Optional) The IPv6 gateway (must be omitted whendhcp
is used as the address)
user_account
- (Required) The user account configuration (conflicts withuser_data_file_id
)keys
- (Required) The SSH keyspassword
- (Optional) The SSH passwordusername
- (Required) The SSH username
user_data_file_id
- (Optional) The ID of a file containing custom user data (conflicts withuser_account
)
cpu
- (Optional) The CPU configurationcores
- (Optional) The number of CPU cores (defaults to1
)hotplugged
- (Optional) The number of hotplugged vCPUs (defaults to0
)sockets
- (Optional) The number of CPU sockets (defaults to1
)
description
- (Optional) The descriptiondisk
- (Optional) The disk configuration (multiple blocks supported)datastore_id
- (Optional) The ID of the datastore to create the disk in (defaults tolocal-lvm
)file_format
- (Optional) The file format (defaults toqcow2
)qcow2
- QEMU Disk Image v2raw
- Raw Disk Imagevmdk
- VMware Disk Image
file_id
- (Optional) The file ID for a disk image (experimental)size
- (Optional) The disk size in gigabytes (defaults to8
)speed
- (Optional) The speed limitsread
- (Optional) The maximum read speed in megabytes per secondread_burstable
- (Optional) The maximum burstable read speed in megabytes per secondwrite
- (Optional) The maximum write speed in megabytes per secondwrite_burstable
- (Optional) The maximum burstable write speed in megabytes per second
keyboard_layout
- (Optional) The keyboard layout (defaults toen-us
)da
- Danishde
- Germande-ch
- Swiss Germanen-gb
- British Englishen-us
- American Englishes
- Spanishfi
- Finnishfr
- Frenchfr-be
- Belgian Frenchfr-ca
- French Canadianfr-ch
- Swish Frenchhu
- Hungarianis
- Icelandicit
- Italianja
- Japaneselt
- Lithuanianmk
- Macedoniannl
- Dutchno
- Norwegianpl
- Polishpt
- Portuguesept-br
- Brazilian Portuguesesl
- Sloveniansv
- Swedishtr
- Turkish
memory
- (Optional) The memory configurationdedicated
- (Optional) The dedicated memory in megabytes (defaults to512
)floating
- (Optional) The floating memory in megabytes (defaults to0
)shared
- (Optional) The shared memory in megabytes (defaults to0
)
name
- (Optional) The namenetwork_device
- (Optional) The network device configuration (multiple blocks supported)bridge
- (Optional) The name of the network bridge (defaults tovmbr0
)enabled
- (Optional) Whether to enable the network device (defaults totrue
)mac_address
- (Optional) The MAC addressmodel
- (Optional) The network device model (defaults tovirtio
)e1000
- Intel E1000rtl8139
- Realtek RTL8139virtio
- VirtIO (paravirtualized)vmxnet3
- VMware vmxnet3
vlan_ids
- (Optional) The VLAN identifiers
node_name
- (Required) The name of the node to assign the virtual machine toos_type
- (Optional) The OS type (defaults toother
)l24
- Linux Kernel 2.4l26
- Linux Kernel 2.6 - 5.Xother
- Unspecified OSsolaris
- OpenIndiania, OpenSolaris og Solaris Kernelw2k
- Windows 2000w2k3
- Windows 2003w2k8
- Windows 2008win7
- Windows 7win8
- Windows 8, 2012 or 2012 R2win10
- Windows 10 or 2016wvista
- Windows Vistawxp
- Windows XP
pool_id
- (Optional) The ID of a pool to assign the virtual machine tostarted
- (Optional) Whether to start the virtual machine (defaults totrue
)vm_id
- (Optional) The ID
Attributes
ipv4_addresses
- The IPv4 addresses per network interface published by the QEMU agent (empty list whenagent.enabled
isfalse
)ipv6_addresses
- The IPv6 addresses per network interface published by the QEMU agent (empty list whenagent.enabled
isfalse
)mac_addresses
- The MAC addresses assigned to the network devicesnetwork_interface_names
- The network interface names published by the QEMU agent (empty list whenagent.enabled
isfalse
)
Developing the Provider
If you wish to work on the provider, you'll first need Go installed on your machine (version 1.13+ is required). You'll also need to correctly setup a GOPATH, as well as adding $GOPATH/bin
to your $PATH
.
To compile the provider, run make build
. This will build the provider and put the provider binary in the $GOPATH/bin
directory.
$ make build
...
$ $GOPATH/bin/terraform-provider-proxmox
...
If you wish to contribute to the provider, the following requirements must be met,
- All tests must pass using
make test
- The Go code must be formatted using Gofmt
- Dependencies are installed by
make init
Testing the Provider
In order to test the provider, you can simply run make test
.
$ make test
Tests are limited to regression tests, ensuring backwards compability.