0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-04 21:14:05 +00:00
Commit Graph

230 Commits

Author SHA1 Message Date
Pavel Boldyrev
01a8f9779c
fix(vm): regression: sudo: command not found when creating a VM (#966)
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-01-26 20:27:25 -05:00
Pavel Boldyrev
9d764e5889
feat(provider): use sudo to execute commands over SSH (#950)
* feat(provider): use `sudo` to execute commands over SSH

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

* fix: simplify everything, use sudo per command

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

* feat: add documentation

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

* minor doc fix

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

* chore: cleanup docs

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

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-01-21 21:44:12 -05:00
Robert Kaussow
01ff2cb7db
feat: add min-tls option to provider config (#931)
* feat: add min-tls option to provider config

Signed-off-by: Robert Kaussow <mail@thegeeklab.de>

* fix: clenup code and add min-tls to file resource

Signed-off-by: Robert Kaussow <mail@thegeeklab.de>

* fix: linter errors, wrong schema type in file resource

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

* chore: update docs

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

---------

Signed-off-by: Robert Kaussow <mail@thegeeklab.de>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-01-19 20:26:14 -05:00
CppBunny
613be842be
fix(vm): optimize retrieval of VM volume attributes from a datastore (#862)
* Use GetDatastoreFile instead of ListDatastoreFiles

Signed-off-by: CppBunny <noah@vantiggel.be>

* make linter happy

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

---------

Signed-off-by: CppBunny <noah@vantiggel.be>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-01-07 08:31:30 -05:00
Rafał Safin
58347c09fe
feat(storage): add new resource proxmox_virtual_environment_download_file (#837)
* feat(core): add query url metadata endpoint to nodes client api

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(core): move storage api code to nodestorage folder

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(core): add download url api

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): add  resource_download_file

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): finish new resource_download_file

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): generate docs for new download file resource, update other docs and examples

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): add basic acc tests for resource download_file

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(test): lint new test file

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): warning instead of error when file already exists on resource download file

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): better validation in resource download file, delete upload task on error

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): better err message in resource download file

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(core): removed unnecessary toint in custom type bool

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(storage): typo in resource download file error

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): download file resource review - 1

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* feat(storage): finish resource download file after review

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(storage): error instead of warnings in parse int errors in sizeRequiresReplaceModifier

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(docs): remove unwanted changes in virtual_environment_file.md

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(test): fix download file base acceptance tests

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(test): fix resource download file acc tests

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix(test): last fix resource download file acc test

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>

* fix: use PVE-compatible jammy LXC image, fix few typos

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

---------

Signed-off-by: Rafał Safin <rafal.safin@rafsaf.pl>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Rafał Safin <rafal.safin@rafsaf.pl>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-01-02 21:29:13 -05:00
Pavel Boldyrev
d8f82d47b3
chore(tests): Update acceptance tests to PVE 8.1, add docs (#834)
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-12-24 07:26:06 -05:00
bitchecker
4113bec1b5
feat(vm): add support up to 32 network interfaces (#822)
* Added NetworkDevices and IPs

Removed previous limitation to 8 network interfaces/ips and moved to
new proxmox limit (up to 32)

Modifiche di cui verrà eseguito il commit:
modificato:             proxmox/nodes/vms/vms_types.go

Signed-off-by: bitchecker <ciro.deluca@autistici.org>

* Code alignment for vm resource

After updates to vm_types structure definition, updated the resource
code in order to reflect changes

Modifiche di cui verrà eseguito il commit:
modificato:             proxmoxtf/resource/vm.go

Signed-off-by: bitchecker <ciro.deluca@autistici.org>

* fix few typos, fix struct to state mapping

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

---------

Signed-off-by: bitchecker <ciro.deluca@autistici.org>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-12-19 21:33:40 -05:00
Michael Iseli
aa939c731f
fix(vm): hostpci devices not showing up in refresh plan (#578)
* bug(vm): fix hostpci devices not showing up in refresh plan

Signed-off-by: Michael Iseli <michael.iseli@bsi-software.com>

* fix pci & usb devices set on read, fix test

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

---------

Signed-off-by: Michael Iseli <michael.iseli@bsi-software.com>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-12-17 22:28:33 -05:00
Pavel Boldyrev
3e0ef1d08b
fix(vm): panic at read when cloud-init drive is on directory storage (#811)
* fix(vm): panic at read when cloud-init drive is on directory storage

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

* fix linter, add tests

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

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-12-17 18:22:48 -05:00
Rui Lopes
66bba2a027
feat(vm): Add support for setting the VM TPM State device (#743)
* feat(vm): add support for setting the vm tpm state

Signed-off-by: Rui Lopes <rgl@ruilopes.com>

* feat(vm): add encoding / unmarshalling for CustomTPMState

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

* feat(vm): fix typos

Signed-off-by: Rui Lopes <rgl@ruilopes.com>

* feat(vm): fix vmGetTPMState

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

* feat(docs): add the vm tpm_state documentation

Signed-off-by: Rui Lopes <rgl@ruilopes.com>

* feat(docs): add the vm tpm_state example

Signed-off-by: Rui Lopes <rgl@ruilopes.com>

---------

Signed-off-by: Rui Lopes <rgl@ruilopes.com>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-12-04 21:53:33 -05:00
Rui Lopes
13e911cf59
feat(provider): modify the proxmox api client to support connecting through an https proxy (#748)
feat: modify the proxmox api client to support connecting through an https proxy

to use, set the https_proxy environment variable before running terraform

for example:

export https_proxy=http://localhost:8080

Signed-off-by: Rui Lopes <rgl@ruilopes.com>
2023-11-28 15:51:38 -05:00
Pavel Boldyrev
b429f95ca5
fix(vm): type error when unmarshalling GetResponseData.data.memory (#728)
* fix(vm): type error when unmarshalling `GetResponseData.data.memory`

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

* linter

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

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-11-17 18:39:13 -05:00
DanielHabenicht
5fe6892724
fix(provider): maxint for storage and vms (#694)
* fix(provider): use int64 for vm and disk storage

Signed-off-by: DanielHabenicht <daniel-habenicht@outlook.de>

* revert changes for memory

Signed-off-by: DanielHabenicht <daniel-habenicht@outlook.de>

* revert changes for memory

Signed-off-by: DanielHabenicht <daniel-habenicht@outlook.de>

* fix test

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

* fix int -> int64 conversion for disk size

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

---------

Signed-off-by: DanielHabenicht <daniel-habenicht@outlook.de>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-11-12 12:17:35 -05:00
Pavel Boldyrev
64c67d9473
fix(storage): unmarshal error when list storage containing large files (#688)
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-11-06 00:52:37 +00:00
Pavel Boldyrev
3f582d8163
fix(provider): sanitize PVE endpoint value (#686)
Ignore `/api2/json` path in case it is present in the endpoint.

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-11-06 00:30:43 +00:00
Daniel Mühlbachler-Pietrzykowski
cec4e65868
feat(vm): add support for USB devices passthrough (#666)
* feat: support usb devices for vm; fixes #665

Signed-off-by: Daniel Muehlbachler-Pietrzykowski <daniel@muehlbachler.io>

* chore: fix linter errors

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

---------

Signed-off-by: Daniel Muehlbachler-Pietrzykowski <daniel@muehlbachler.io>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-30 21:41:44 -04:00
TheNotary
aec09e4ecd
fix(vm): better handle of ctrl+c when qemu is not responding (#627)
* fix(vm): resolves issue where ctrl+c was not being responded when qemu agent lookups would fail

Signed-off-by: TheNotary <799247+TheNotary@users.noreply.github.com>

* add os.Interrupt signal handling

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

---------

Signed-off-by: TheNotary <799247+TheNotary@users.noreply.github.com>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-24 23:01:20 -04:00
Oto Petřík
6753582e4b
fix(vm): better check for disk ownership (#633)
Storage using .raw or .qcow2 files uses additional element in path,
which is not present in ZFS storage.
Support both patterns when determining disk ownership.

This fixes #632

Signed-off-by: Oto Petřík <oto.petrik@gmail.com>
2023-10-22 11:11:19 -04:00
zamrih
b90445a12c
fix(lxc): unmarshal string/int vmid as int when read container status (#622)
fix(lxc): unmarshal string/int vmid as int

Signed-off-by: zamrih <ramzi.hb@gmail.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-16 20:14:26 -04:00
TheNotary
388ce7ce8d
fix(provider): add informative error around ssh-agent (#620)
* fix(provider): add informative error around ssh-agent
Signed-off-by: TheNotary <799247+TheNotary@users.noreply.github.com>

* fix linter errors

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

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-16 20:00:09 -04:00
Oto Petřík
aeb5e88bc9
feat(vm): add 'path_in_datastore' disk argument (#606)
* feat(vm): add 'path_in_datastore' disk argument

Provide access to actual in-datastore path to disk image,
and experimental support for attaching other VM's disks or host devices.

Signed-off-by: Oto Petřík <oto.petrik@gmail.com>

* chore: added to `/example` for acceptance testing

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

---------

Signed-off-by: Oto Petřík <oto.petrik@gmail.com>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-11 22:13:09 -04:00
Pavel Boldyrev
d5994a2bd5
fix(lxc): cloned container does not start by default (#615)
* fix(lxc): cloned container does not start by default

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-10 01:20:01 +00:00
Oto Petřík
06ad00463c
feat(provider): configure temp directory (#607)
* feat(provider): configure temp directory

Resource 'proxmox_virtual_environment_file' often requires lot of disk
space in /tmp, which can be space-limited.

Instead of requiring to set TMPDIR environment variable before running
terraform, make it a provider configuration option.

Signed-off-by: Oto Petřík <oto.petrik@gmail.com>

* fix: lint error, align names in the `client` struct

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

---------

Signed-off-by: Oto Petřík <oto.petrik@gmail.com>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-07 21:00:34 -04:00
Pavel Boldyrev
0b8f2e2c6f
fet(vm): allow scsi and sata interfaces for CloudInit Drive (#598)
* fet(vm): allow `scsi` and `sata` interfaces for CloudInit Drive

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-01 22:23:11 -04:00
Pavel Boldyrev
16ebf30a79
fix(api): set min TLS version 1.3, secure HTTP-only cookie (#596)
* fix(api): set min TLS version 1.3, secure HTTP-only cookie
* remove `all-tests-passed` job

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-10-01 14:19:51 -04:00
Pavel Boldyrev
294a9daa87
fix(tasks): fix UPID (task id) parsing error (#591)
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-09-28 01:46:45 +00:00
Pavel Boldyrev
03f3ed7871
fix(cluster): inconsistencies in applying cluster options (#573)
* fix(cluster): inconsistencies in applying cluster options

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

* address review comments

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

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-09-23 08:04:52 -04:00
Pavel Boldyrev
7d064a8b27
chore(code): re-organize and cleanup "fwk provider"'s code (#568)
* chore(code): code cleanup / renaming

* chore(code): flatten and rename fw provider package

* chore(code): refactor & update network tests
2023-09-17 22:50:24 +00:00
Pavel Boldyrev
2dee65bd0b
chore(code): remove redundant types2 import aliases (#564) 2023-09-13 03:03:43 +00:00
Pavel Boldyrev
11a8ec0c95
fix(lxc,vm): error unmarshalling string cpulimit (#563)
fix(lxc,vm): error: cannot unmarshal string `cpulimit`
2023-09-13 02:53:28 +00:00
Rafał Safin
de8b4ec41a
feat(cluster): add cluster options resource (#548) 2023-09-12 07:49:03 -04:00
Pavel Boldyrev
5ecf135398
chore(code): fix proxmox package dependencies (#536)
move `types` back from `internal` to `proxmox` and adjust a few other types, to make sure `proxmox` package is not dependent on anything else, and therefore can be extracted to a separate repo (#423)
2023-09-03 00:40:47 +00:00
Rafał Safin
124cac247c
feat(provider): add optional SSH port param to node in provider ssh block (#520)
* feat: Add optional SSH port param to node in provider ssh block

* fix: minor cleanups

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-09-02 19:43:08 -04:00
Pavel Boldyrev
ef2f2c1159
fix(node): file upload in multi-node PVE cluster (#533)
* fix(node): fix file upload in multi-node PVE cluster

* fix: timezone 🤦
2023-09-01 01:45:20 +00:00
Pavel Boldyrev
6f02df4440
fix(core): improve error handling while waiting for PVE tasks to complete (#526) 2023-08-29 19:06:34 -04:00
Oto Petřík
5599c7afe4
fix(provider): User-settable VLAN ID and name (#518)
* fix(provider): User-settable VLAN ID and name

By default resource `proxmox_virtual_environment_network_linux_vlan`
uses `name` to determine both the actual raw device for VLAN and
VLAN ID.

Since ifupdown2 (manually installed on PVE6, installed by default
since PVE7), it is possible to have VLAN name not tied to VLAN ID.

Make `interface` and `vlan` configurable by user.

* fix: update schema to ensure the correct docs generation.

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-28 20:19:10 -04:00
Michael Iseli
a038fd3142
feat(vm): fix adding/removing hostpci devices forcing vm recreation (#504)
* feat(vm): fix adding/removing hostpci devices forcing vm recreation

* fix: hostpci device removal

* fix: hostpci jason unmarshalling but introduced in #500

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-20 19:01:19 -04:00
Risto Oikarinen
26970541c4
feat(vm): support PCI device resource mapping (#500)
* feat(vm): support PCI device resource mapping

* fix: linter error

* fix: minor cleanup

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-20 18:00:11 -04:00
Emmanuel Benoît
03c9b36b86
feat(ha): add support for Proxmox High Availability objects (#498)
* chore: fix a pair of typos in comments

* feat(api): list High Availability groups

  * New clients created for HA and HA groups (via
    `Cluster().HA().Groups()`)
  * `List(ctx)` method that lists the cluster's High Availability groups

* feat(ha): added the `proxmox_virtual_environment_hagroups` data source

  * This data source returns the list of HA groups in its value's
    `group_ids` field

* fix(api): changed incorrect copy-pasted error message

* feat(api): get a HA group's full information

  * Added a `Get()` method to the HA group client, which fetches a
    single group's information based on its identifier.

* feat(ha): added the `proxmox_virtual_environment_hagroup` data source

  * This data source can read information about a single Proxmox High
    Availabillity group from the cluster.

* chore(ha): fixed linter error

* test(ha): added schema tests for the HA groups data sources

* fix(ha): use -1 as a node's priority when no priority is defined

  * It used to default to 0, which is a valid value for priorities.

* chore(ha): converted the `hagroups` datasource to the Terraform plugin SDK

* chore(refactoring): common definition for `id` attributes

* chore(ha): ported the HA group datasource to the Terraform plugin framework

* feat(ha): return HA group identifiers as a set rather than a list

* docs(ha): added examples for the hagroups/hagroup datasources

* docs(ha): added documentation for the hagroup{,s} datasources

* chore(ha): fixed linter errors

* chore(ha): workaround for the linter's split personality disorder

* fix(ha): fixed reading the restricted flag

* chore(refactoring): use `ExpandPath` for paths to the HA groups API

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

* feat: CustomBool to Terraform attribute value conversion method

* chore(refactoring): use `CustomBool` for boolean fields in the API data

* chore(refactoring): renamed "members" to "nodes" in the HA group datasource

* fix: typo in comment

* chore(refactoring): split HA group API data and added the update request body

* fix(api): fixed copy-pasted error message

* feat(api): method to create/update a HA group

* feat(api): HA group deletion method

* fix(api): made the digest optional for HA groups

* feat(ha): added unimplemented hagroup resource

* fix(ha): fixed copy-pasted comment

* feat(ha): schema definition for the HA group resource

* feat: helper function that converts string attr values to string pointers

* fix(ha): ensure node priorities are <= 1000 in HA groups

* fix(ha): add the digest attribute to the schema

* feat(ha): model definition for the HA group resource

* fix(api): fixed incorrect error message

* fix(api): fixed HA group creation / update

  * I had somehow misunderstood the Proxmox API doc and thought creation
    and update went through the same endpoint. This has been fixed by
    adding separate data structures and separate methods for both
    actions.

* feat: Terraform/Proxmox API conversion utilities

* chore(refactoring): HA group model and reading code moved to separate file

* feat(ha): HA group creation

* fix(api): renamed method (missed during previous refactor)

* feat(ha): `Read()` method implemented for the `hagroup` resource

* chore(refactoring): more consistent variable naming

* fix(ha): fixed the behaviour of `Read()` when the resource is deleted externally

* feat(ha): implement HA group deletion

* feat(ha): HA group update implemented

* fix(ha): prevent empty or untrimmed HA group comments

* feat(ha): HA group import

* docs(ha): HA group resource examples

* docs(ha): generated documentation for the `hagroup` resource

* chore(ha): fixed linter errors

* chore(refactoring): updated the code based on changes to the datasource PR

* fix(api): fixed boolean fields in the HA group create/update structures

* fix(ha): removed digest from the HA group resource and datasource

  * The digest is generated by Proxmox from the *whole* HA groups
    configuration, so any update to one group causes changes in all
    other groups.
  * Because of that, using it causes failures when updating two or more
    HA groups.
  * It is also a pretty useless value to have in the datasource, as it
    is global and not actually related to the individual data items

* chore(refactoring): removed obsolete type conversion code

* chore(refactoring): use `ExpandPath` in the HA groups API client

* feat(ha): custom type for HA resource states

* feat(ha): custom type for HA resource types

* fix(api): fixed JSON decoding for HA resource states and types

  * Values were being decoded directly from the raw bytes.
  * Added tests for JSON marshaling/unmarshaling

* feat(api): custom type for HA resource identifiers

  * Structure with a type and name
  * Conversion to/from strings
  * Marshaling to/Unmarshaling from JSON
  * URL encoding

* feat(api): list and get HA resources

* feat(ha): HA resources list datasource

* feat(ha): added method that converts HA resource data to Terraform values

* fix(api): HA resource max relocation/restarts are optional

* feat(ha): Terraform validator for HA resource IDs

* feat(ha): HA resource datasource

* chore(refactoring): moved HA resource model to separate file

* feat(api): data structures for HA resource creation and update

* feat(api): HA resource creation, update and deletion

* fix(api): incorrect mapping in common HA resource data

* feat: utility function to create attribute validators based on parse functions

* feat: validators for HA resource identifiers, states and types

* fix(api): incorrect comment for the update request body

* feat(ha): Terraform resource for Proxmox HA resources

* chore(reafactoring): removed old HA resource ID validator

* docs: examples related to HA resources added

* docs: added documentation related to HA resources management

* fix: update doc generation, fix minor typos

* fix: rename & split utils package, replace `iota`

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-20 21:42:12 +00:00
Emmanuel Benoît
a2853606ad
feat(vm): support for migration when the node name is modified (#501)
* feat(vm): support for migration when the node name is modified

  * Added a `migrate` VM flag which changes the provider's behaviour
    when the VM's `node_name` is updated. If `true`, the VM will be
    migrated to the specified node instead of being re-created.

  * Added a `timeout_migrate` setting to control the timeout for VM
    migration.

  * Fixed a bug in the API's migration data structure that prevented
    the online migration flag to be set.

* fix: update description

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-18 22:02:50 -04:00
Emmanuel Benoît
e6c15eccc6
feat(vm): pool update support (#505)
* feat(vm): pool update support

This commit removed the ForceNew flag from the VM resource's `pool_id`
argument and implements pool update:

  * if the VM was part of a pool, it is removed from it,
  * if the new `pool_id` value is non-empty, the VM is added to that new
    pool.

* fix: use `types.CustomCommaSeparatedList` in `PoolUpdateRequestBody` datatype, minor error fix

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-18 21:48:37 -04:00
Michael Iseli
78d668377f
fix(vm): fix index out of range when unmarshalling custompcidevice (#496)
* fix(vm): fix index out of range when unmarshalling custompcidevice

* fix: linter errors

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-15 19:44:57 -04:00
mandrav
9fd9d211d7
fix(vm): no IP address detection when VM contains bridges (#493)
When the VM contains at least one bridge, the main interface (e.g.
`eth0`) is left without an IP address because that's how networks
usually work.

The code that queries the VM's IP addresses (through the guest agent),
loops all available interfaces to find one. The existing code though
would prematurely exit the loop if the interface it was checking had no IP
address assigned. Like the aforementioned `eth0`, when it is controlled
by a bridge.

This patch fixes this problem by not exiting the loop, instead just continuing
to the next interface.
2023-08-14 21:22:50 -04:00
dependabot[bot]
390f03c159
chore(deps): bump github.com/golangci/golangci-lint from 1.53.3 to 1.54.0 in /tools (#482)
* chore(deps): bump github.com/golangci/golangci-lint in /tools

Bumps [github.com/golangci/golangci-lint](https://github.com/golangci/golangci-lint) from 1.53.3 to 1.54.0.
- [Release notes](https://github.com/golangci/golangci-lint/releases)
- [Changelog](https://github.com/golangci/golangci-lint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/golangci/golangci-lint/compare/v1.53.3...v1.54.0)

---
updated-dependencies:
- dependency-name: github.com/golangci/golangci-lint
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix linter errors

* fix go.sum

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-10 16:47:02 -04:00
Moustafa Baiou
244e061779
fix(user): make password attribute optional (#474)
* fix(user): make password attribute optional

The password is already optional in the terraform schema, but still serialized and sent as an empty string via the client. This addresses the request body serialization.

Addresses #462

* add example template

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-10 15:07:49 +00:00
dandaolrian
f901e711dd
feat(file): ensure upload of ISO/VSTMPL is completed upon resource creation (#471)
* feat(provider): ensure upload of ISO/VSTMPL completes before starting VM and add timeout to config for this

* remove `ForceNew: true` for the timeout attribute

* minor docs update

---------

Co-authored-by: dandaolrian <dandaolrian@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-08-10 11:01:14 -04:00
Pavel Boldyrev
85ff60d4bd
feat(vm): add support for SMBIOS settings (#454)
* feat(vm): add support for SMBIOS settings

* fix linter errors

* fix smbios error at clone
2023-08-06 00:31:17 +00:00
Pavel Boldyrev
824e51c650
fix(API): remove HTTP client timeout (#464)
The HTTP client makes requests using the operational context passed from Terraform. The client will no longer enforce its own fixed timeout but will rely on context cancellation instead.
2023-08-05 22:59:14 +00:00
Pavel Boldyrev
cfe3d96576
feat(vm): add support for disk cache option (#443) 2023-07-29 13:29:14 -04:00
Pavel Boldyrev
a9a7329d9f
feat(core): migrate version datasource to TF plugin framework (#440)
* feat: migrate `version` datasource to tf framework

* set up documentation generator

* add generated docs for network resources

* fix test mux server, add import examples to network resources

* fix network tests

* fix shell examples
2023-07-29 02:10:02 +00:00
Leah
beef9b1219
feat(lxc): add support for lxc mount points (#394)
* feat(lxc): add support for lxc mount points

* update docs and examples

* improve error handling for container creation / start operations, fix size propagation for storage mounts

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-07-16 20:41:07 -04:00
ikiris
e59b06e519
fix(vm): add missing unmarshal for vm custom startup order (#428)
* fix b421 - add missing unmarshal for custom startup order

* fix linter errors

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-07-16 10:25:52 -04:00
Pavel Boldyrev
01a845636a
fix(node): ignore field bridge_fd when listing network interfaces of a node (#414) 2023-07-08 21:47:13 -04:00
Pavel Boldyrev
16ee6a9f95
fix(node): fix error when listing network interfaces of a node (#412) 2023-07-05 01:56:11 +00:00
Pavel Boldyrev
feac6b0128
chore(refactoring): remove accidentally added types2 import alias (#409) 2023-07-03 22:10:20 +00:00
Pavel Boldyrev
253a59ece6
fix(vm): do not error on read at state refresh if VM is missing (#398) 2023-07-03 00:48:38 +00:00
michalg91
99fda9cbcd
fix: search for vm in cluster resources before calling node api (#393)
* (fix) search for vm in cluster resources before calling node api

* (lint) search for vm in cluster resources before calling node api

* cleanup redundant error checks

---------

Co-authored-by: michalg91 <michal.gawrys@g2a.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-07-01 10:45:40 -04:00
Oto Petřík
03eaf72767
fix(provider): Better handling of root@pam token (#386)
Token logins using root@pam!sometoken=uuid are not considered
by PVE as 'root' logins, and fail to change VM's arch.
Make sure the provider does not try to set/change VM's arch.

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-07-01 13:31:02 +00:00
Leah
e9a74e9037
feat(vm): efi disk, cpu numa (#384)
* efi disks support

* make size a string

* add cpu numa support

* add docs

* fix description

* string size fixes

(cherry picked from commit 254724d1d10c5191d294f0377adac49ad41dc880)

* fix lints

* fix(vm): replace `size` with `type` for efi disk

also
- add support for `pre-enrolled-keys`
- add example
- fix handling of `numa` flag when it's not in the template
- cleanup linter errors

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-07-01 08:50:21 -04:00
Pavel Boldyrev
7aa25b8d05
feat(vm): add support for meta-data in cloud-init (#378) 2023-06-24 00:06:05 -04:00
Pavel Boldyrev
343e8045c1
feat(vm): add network device resources (#376)
* wip

* experimenting with terraform plugin framework

* cleaning up poc and adding tests

* adding read / update / delete

* update bridge_vlan_aware and MTU

* add ipv6 and simplify IP support

* fix provider's schema

* add docs

* run linter from cmdline

* disable TF acceptance tests

* add VLAN

* update docs

* add examole

* cleanup
2023-06-23 22:47:25 +00:00
Pavel Boldyrev
80c94a5126
feat(v): Add ability to override node IP used for SSH connection (#355)
* feat(v): Add ability to override node IP used for SSH connection

* add documentation
2023-05-31 21:15:48 -04:00
Pavel Boldyrev
ab54aa1092
feat(core): Add API Token authentication (#350)
* feat(core): Add API Token authentication

* fix linter errrors

* update docs
2023-05-29 21:56:21 -04:00
Pavel Boldyrev
1f006aa82b
feat: API client cleanup and refactoring (#323)
* cleanup 1

* continue refactoring

* more refactoring

* move VMs under nodes

* move container and other apis under nodes

* cleanups

* enabled revive.exported linter & add comments to exported stuff

* enable godot linter

* enable wsl linter

* enable thelper linter

* enable govet linter

* cleanup after rebase

* cleanup after rebase

* extract SSH ops into a separate interface

* fix linter error

* move ssh code to its own package

* cleaning up VirtualEnvironmentClient receivers

* on the finish line

* not sure what else I forgot... 🤔

* fix ssh connection and upload

* renaming client interfaces

* final cleanups
2023-05-26 01:32:51 +00:00
Oto Petřík
20131b0ffc
fix(vm): Regression: wait for 'net.IsGlobalUnicast' IP address (#100) (#345)
fix: Wait for 'net.IsGlobalUnicast' IP address, again (#100)

VM can get IPv6 link-local address faster than a DHCP server response,
that results in 'ipv4_addresses' output being an empty list.
It is then impossible to provision the VM using 'connection.host' field
derived from 'self.ipv4_addresses'.

Once again change waiting for IP address to wait for better address than
IPv4 link-local addresses and IPv6 link-local addresses.

Should not break #182, because it requires only one GlobalUnicast address per VM.
2023-05-22 22:12:06 -04:00
zoop
9fa92423b5
feat: SSH-Agent Support (#306)
* chore: add agent configuration bool

* feat: add ssh-agent authentication mechanism for linux

* chore: make sure ssh-agent auth is only executed on linux

* chore: add ssh user override

* chore: add ssh configuration block, check ssh config during VirtualEnvironmentClient creation

* fix: handle case of empty ssh config block

* chore: add ssh password auth fallback logic

* fix: remove not needed runtime

* fix linter errors & re-format

* allow ssh agent on all POSIX systems

* add `agent_socket` parameter

* update docs and examples

---------

Co-authored-by: zoop <zoop@zoop.li>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-05-22 13:34:24 -04:00
Pavel Boldyrev
79e5a8ebb0
fix(vm): Regression: cannot create disks larger than 99G (#335) 2023-05-13 22:13:57 -04:00
Jordan Keith
4be9914757
feat(vm,lxc): Improved support for different disk size units (#326) 2023-05-10 07:46:16 -04:00
Pavel Boldyrev
7c9505d11f
fix(file): SSH file upload on Windows (#308)
* fix(file): SSH file upload on Windows

* update bug report template
2023-04-20 02:14:48 +00:00
Pavel Boldyrev
8addb1d1d5
feat(vm): Wait for the VM creation task to complete (#305)
feat(vm): Add sync wait in VM create operation
2023-04-17 21:30:08 -04:00
Pavel Boldyrev
be3995e969
fix(core): Error when open SSH session on Windows (#293)
* fix(core): Error when open SSH session on Windows

* update PR template
2023-04-07 22:38:07 -04:00
Pavel Boldyrev
401b39782f
fix(file): "Permission denied" error when creating a file by a non-root user (#291)
* fix(file): "Permission denied" error when creating a file by a non-root user

* fix linter errors
2023-04-07 21:58:37 -04:00
Henri Williams
f9e263ad5e
feat(vm): add support for boot_order argument for VM (#219)
* feat(vm): add support for 'boot_order and boot_disk flags for VM

* refactoring (1)

* refactor to use only boot_order argument

---------

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-04-07 15:35:38 -04:00
Pavel Boldyrev
98e1cff7fe
feat: Add firewall resources (#246)
* refactoring existing cluster / firewall API for better composition

* add basic security groups API
fix linter errors

* add rules API

* fix after renaming resourceVirtualEnvironmentClusterIPSet

* fix linter errors

* make linter happy

* even more refactoring

* tidy up datasources

* in refactoring spree

* update examples

* fix firewall resource/datasource & client error handling

* add ipset(s) datasource

* update docs

* add security group resource with rules

* docs

* fix security group update, TODO: rule update

* fix after rebase

* add rule update, extract common rule schema, refactor group

* fix linter  errors

* bump linter for ci

* make alias and ipset reusable

* make security group reusable

* refactor datasources

* add security group datasources

* fix linter errors

* update docs

TODO: documentation for group datasources

* add sg docs, update doc index

* minor cleanup

* fix examples & tests

* stub for firewall-level options and rules

* extract firewall interface

* add firewall options and rules on the cluster level

TODO: issues with rule list management

* refactor all resources format AGAIN, now more flat, without complex subresources

* sort out hierarchy of APIs and remove duplication in API wrappers

* bring back security group

* finally, working rules

* restore cluster firewall option

* add containers support

* add options

* move rules back under security group, update docs

* fix vm_id / container_id attrs

* add examples

* cleanup

* more cleanup


Release-As: 0.17.0-rc1
2023-04-02 18:01:10 -04:00
Pavel Boldyrev
c2d3f46474
feat(vm): Add bare minimum VM datasource (#268)
* feat(vm): Add a bare minimum VM datasource

* fix linter errors

* fix doc

* add lookup across all nodes in the cluster, add filter by tags

* stable vm list

* fix linter errors

* pr feedback: switch to dynamic id for vms

* add datasource examples

* add unit tests

* Update virtual_environment_vms.md
2023-03-22 01:52:58 +00:00
Pavel Boldyrev
763527e535
fix: additional logging in API client (#267) 2023-03-19 01:15:19 +00:00
Pavel Boldyrev
d29fd97bab
fix(vm): Fix file_format setting for new empty disks (#259) 2023-03-13 23:45:08 -04:00
Pavel Boldyrev
fcf9810252
feat(vm): update VM disc import logic (#241)
* feat(vm): updated VM disc import logic

fixes: #187, #203

* ignore linter error
2023-02-17 16:53:06 -05:00
Pavel Boldyrev
598c62864d
feat(core): Add known hosts callback check for ssh connections (#217)
* feat(core): Add known hosts callback check for ssh connections

* fix code & add tests
2023-01-24 01:05:31 -05:00
kaje783
b539aab228
fix(vm): Add parser for CustomEFIDisk (#208)
* feat: add support for "args" flag for VM

* switch from args to kvmarguments, update type

* cosmetics: `kvmarguments` -> `kvm_arguments`

also update doc to match description from the official PVE documentation.

* fix(vm): Add parser for CustomEFIDisk

* use parseDiskSize(&string) from utils.go for CustomEFIDisk

* readd the remove space by github space

* address linter errors, remove duplicated code, add unit test

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-01-17 22:57:28 -05:00
Pavel Boldyrev
bf9e31ecfc
chore: lint and reformat the code (#204)
* chore: reformat code

* chore: add commitlint config

* reformat README.md

* add linter config

* lint & reformat docs

* go linter: only new issues

* fix some linting errors

* more reformatting

* disable linter warning for some duplicated code
2023-01-16 18:07:30 -05:00
kaje783
8bd3fd7b1d
feat(vm): add support for "args" flag for VM (#205)
* feat: add support for "args" flag for VM

* switch from args to kvmarguments, update type

* cosmetics: `kvmarguments` -> `kvm_arguments`

also update doc to match description from the official PVE documentation.

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-01-14 21:42:10 -05:00
Fabian Heib
496ab322be
fix(vm): Make so that on_boot can be changed with update (#199)
Make so that on_boot can be changed with update
2023-01-02 15:40:52 -05:00
Gertjan Roggemans
79a2101933
feat(vm): Add cloud-init network-config support (#197)
* feat: Add cloud-init network-config support

* add documentation entry

* fix re-apply use case

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2023-01-01 18:17:08 -05:00
Pavel Boldyrev
13080b44dc
feat: Deletion of VM also purges all storages and configs (#196) 2022-12-28 23:13:29 -05:00
Pavel Boldyrev
01d20504a1
feat: Add hostpci support (#194)
* feat: Add `hostpci` support

* document `machine` argument

* fix `rombar` argument name
2022-12-28 22:14:48 -05:00
Abdelfadeel Farag
3c02cb1389
feat: add support for network_device MTU (#176)
* add support for network_device MTU

* add mtu to the example templates

* change default mtu 1500 -> 0, update docs

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2022-12-12 23:07:02 -05:00
Abdelfadeel Farag
290734655c
feat: add support for "ssd" disk flag for VM (#181)
* feat: add support for ssd flag

* update docs, add `ssd` to examples

* restore original .md formatting

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2022-12-12 22:31:33 -05:00
Pascal Wiedenbeck
0df14f9d6a
feat: add the ability to clone to non-shared storage on different nodes (#178)
* feat: add workaround for cloning to non-shared storage

* fix: fix wrong API params used

* test: add new var to tests

* fix: lint issues

* docs: add new argument to docs

* docs: fix function documentation

* fix: better work with heterogeneous datastores

* docs: clarify clone behavior

* fix: go lint issues

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2022-12-12 16:28:53 -05:00
Szczepan Wiśniowski
722e01053b
fix: Check if any interface has global unicast address instead of all interfaces (#182)
* fix: Check if any interface has global unicast address instead of all interfaces

This allows us to have multiple interfaces and only one (instead of all) has to have assigned ip

* add multiple network devices to the example VM

Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2022-12-11 16:29:25 -05:00
Pavel Boldyrev
9e34dfb362
feat: Add support for custom cloud-init vendor data file (#162)
* feat: Add support for custom cloud-init vendor data file

Add new argument `initialization`.`vendor_data_file_id` to specify a file ID form snippets.

* add vendor cloud-init to examples

* add missing `vendor` to unmarshal

* remove debug lines
2022-11-17 20:33:41 -05:00
Pavel Boldyrev
0fad160ed6
fix: linter issues (#158)
* fix: remove io/ioutil

* fix: lost diagnostic context

* fix: various linter errors

* fix: json manifests
2022-10-24 19:40:57 -04:00
Pavel Boldyrev
b09389f0a9
fix: Non-default VM disk format is not preserved in TF state (#134)
Fix disk format parsing from the volume string.
Add basic unit tests for disk volume string parsing.
2022-10-14 18:27:30 -04:00
Pavel Boldyrev
42e0e725a5
Add support for "discard" disk option for VM (#128) 2022-09-28 19:13:41 -04:00
Oto Petřík
029dc1fb0a
Wait for 'net.IsGlobalUnicast' IP address (#115)
VM can get IPv6 link-local address faster than a DHCP server response,
that results in 'ipv4_addresses' output being an empty list.
It is then impossible to provision the VM using 'connection.host' field
derived from 'self.ipv4_addresses'.

Change the waiting for IP address to ignore IPv4 link-local addresses
and IPv6 link-local addresses.
2022-08-14 21:23:41 -04:00
Pavel Boldyrev
e9d2d607c1
Add support for "iothread" disk option for VM (#97) 2022-07-24 16:53:57 -04:00
Pavel Boldyrev
192cbd5e3d
Upgrade the provider codebase to use Terraform SDK v2 (#91)
* Update TF SDK using `tf-sdk-migrator v2upgrade`
Address some linter issues
Clean up `resource_virtual_environment_file.go` (still, error handling is not ideal)

* few minor cleanups

* Clean up, add context and diagnostics to `resource_virtual_environment_vm.go`

* Clean up, add context and diagnostics to `resource_virtual_environment_container.go`

* Clean up, add context and diagnostics to `resource_virtual_environment_container.go`

* Update remaining resources and data sources

* fix `make example`... now it actually uses the built provider 🤦

* propagate Context everywhere
use tflog.* for logging

* add support for debug flag

* fix old issues with:
- setting `resource_virtual_environment_file.changed` attribute
- setting `resource_virtual_environment_cluster_ipset.cidr` attributes
- setting `data_source_virtual_environment_user.groups` and `.keys` attributes

* bump dependencies

* minor cleanups

* Bump Go to v1.18
Dropped support for TF v0.x

* more cleanups

* update README.md

* update PR template

* update release.yml
2022-07-14 12:20:30 -04:00
Matt Burchett
065e859227
virtual_environment_datastores.go: Update remote command to get datasource path (#49)
This commit fixes the shell command that is being executed to get the datasource
path which appears to be no longer functional.

The previous command assumed that "path" is going to be the next line after the
datasource name, leaving NFS mounts and other types of mount points non-functional.
2022-03-21 20:26:39 -04:00
Pavel Boldyrev
81355e0e9e
Fix JSON unmarshal error when deploying LCX container
This closes #15
2021-09-09 14:29:56 -04:00
Pavel Boldyrev
f744b2391b
Merge pull request #3 from bpg/fix-vm-clone
Fix SIGSEGV if cloned VM is in a different storage.
2021-09-08 18:36:11 -04:00