From bf9e31ecfc755de153eccd3311bd45ca19c5ddfa Mon Sep 17 00:00:00 2001 From: Pavel Boldyrev <627562+bpg@users.noreply.github.com> Date: Mon, 16 Jan 2023 18:07:30 -0500 Subject: [PATCH] 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 --- .github/workflows/golangci-lint.yml | 3 +- .golangci.yml | 90 +++ README.md | 62 +- commitlint.config.js | 6 + .../virtual_environment_cluster_alias.md | 2 +- .../virtual_environment_cluster_aliases.md | 2 +- .../virtual_environment_datastores.md | 20 +- docs/data-sources/virtual_environment_dns.md | 6 +- .../data-sources/virtual_environment_group.md | 14 +- .../virtual_environment_groups.md | 4 +- .../data-sources/virtual_environment_hosts.md | 11 +- .../data-sources/virtual_environment_nodes.md | 18 +- docs/data-sources/virtual_environment_pool.md | 16 +- .../data-sources/virtual_environment_pools.md | 2 +- docs/data-sources/virtual_environment_role.md | 4 +- .../data-sources/virtual_environment_roles.md | 6 +- docs/data-sources/virtual_environment_time.md | 8 +- docs/data-sources/virtual_environment_user.md | 26 +- .../data-sources/virtual_environment_users.md | 18 +- .../virtual_environment_version.md | 8 +- docs/index.md | 56 +- .../virtual_environment_certificate.md | 26 +- .../virtual_environment_cluster_alias.md | 18 +- .../virtual_environment_cluster_ipset.md | 49 +- .../virtual_environment_container.md | 151 +++-- docs/resources/virtual_environment_dns.md | 6 +- docs/resources/virtual_environment_file.md | 52 +- docs/resources/virtual_environment_group.md | 14 +- docs/resources/virtual_environment_hosts.md | 17 +- docs/resources/virtual_environment_pool.md | 16 +- docs/resources/virtual_environment_role.md | 4 +- docs/resources/virtual_environment_time.md | 8 +- docs/resources/virtual_environment_user.md | 28 +- docs/resources/virtual_environment_vm.md | 560 +++++++++------- proxmox/common_types.go | 5 - proxmox/virtual_environment_acl.go | 10 +- proxmox/virtual_environment_acl_types.go | 10 +- proxmox/virtual_environment_authentication.go | 21 +- proxmox/virtual_environment_certificate.go | 42 +- .../virtual_environment_certificate_types.go | 6 +- proxmox/virtual_environment_client.go | 61 +- proxmox/virtual_environment_cluster.go | 1 - proxmox/virtual_environment_cluster_alias.go | 46 +- ...virtual_environment_cluster_alias_types.go | 16 +- proxmox/virtual_environment_cluster_ipset.go | 65 +- ...virtual_environment_cluster_ipset_types.go | 10 +- proxmox/virtual_environment_container.go | 167 ++++- .../virtual_environment_container_types.go | 195 +++--- proxmox/virtual_environment_datastores.go | 101 ++- .../virtual_environment_datastores_types.go | 4 +- proxmox/virtual_environment_dns.go | 20 +- proxmox/virtual_environment_dns_types.go | 12 +- proxmox/virtual_environment_groups.go | 30 +- proxmox/virtual_environment_groups_types.go | 2 +- proxmox/virtual_environment_hosts.go | 20 +- proxmox/virtual_environment_hosts_types.go | 2 +- proxmox/virtual_environment_nodes.go | 98 ++- proxmox/virtual_environment_nodes_types.go | 1 - proxmox/virtual_environment_pools.go | 22 +- proxmox/virtual_environment_pools_types.go | 2 +- proxmox/virtual_environment_roles.go | 22 +- proxmox/virtual_environment_roles_types.go | 2 +- proxmox/virtual_environment_users.go | 27 +- proxmox/virtual_environment_users_types.go | 36 +- proxmox/virtual_environment_version.go | 5 +- proxmox/virtual_environment_vm.go | 331 +++++++-- proxmox/virtual_environment_vm_types.go | 612 +++++++++-------- proxmox/virtual_environment_vm_types_test.go | 1 + ...ource_virtual_environment_cluster_alias.go | 6 +- ...rce_virtual_environment_cluster_aliases.go | 6 +- ...a_source_virtual_environment_datastores.go | 7 +- .../data_source_virtual_environment_dns.go | 7 +- .../data_source_virtual_environment_group.go | 6 +- .../data_source_virtual_environment_groups.go | 6 +- .../data_source_virtual_environment_hosts.go | 7 +- .../data_source_virtual_environment_nodes.go | 7 +- .../data_source_virtual_environment_pool.go | 6 +- .../data_source_virtual_environment_pools.go | 6 +- .../data_source_virtual_environment_role.go | 6 +- .../data_source_virtual_environment_roles.go | 6 +- .../data_source_virtual_environment_time.go | 13 +- .../data_source_virtual_environment_user.go | 12 +- .../data_source_virtual_environment_users.go | 7 +- ...data_source_virtual_environment_version.go | 6 +- proxmoxtf/provider.go | 23 +- ...esource_virtual_environment_certificate.go | 62 +- ...ource_virtual_environment_cluster_alias.go | 27 +- ...ource_virtual_environment_cluster_ipset.go | 27 +- ..._virtual_environment_cluster_ipset_test.go | 1 - .../resource_virtual_environment_container.go | 341 +++++++--- ...urce_virtual_environment_container_test.go | 48 +- proxmoxtf/resource_virtual_environment_dns.go | 37 +- .../resource_virtual_environment_file.go | 60 +- .../resource_virtual_environment_group.go | 43 +- .../resource_virtual_environment_hosts.go | 26 +- .../resource_virtual_environment_pool.go | 27 +- .../resource_virtual_environment_role.go | 27 +- .../resource_virtual_environment_time.go | 46 +- .../resource_virtual_environment_user.go | 61 +- proxmoxtf/resource_virtual_environment_vm.go | 626 ++++++++++++------ .../resource_virtual_environment_vm_test.go | 60 +- 101 files changed, 3330 insertions(+), 1662 deletions(-) create mode 100644 .golangci.yml create mode 100644 commitlint.config.js diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index aed09511..117d2219 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -21,4 +21,5 @@ jobs: - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: - version: v1.50 + version: v1.50.1 + only-new-issues: true diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..a0e60b85 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,90 @@ +# v1.50.1 +run: + deadline: 5m +issues: + new-from-rev: 9101977dc81f64db077b9a1eda2fe401359854c9 + # Maximum issues count per one linter. Set to 0 to disable. + # Default is 50. + max-issues-per-linter: 0 + # Maximum count of issues with the same text. Set to 0 to disable. + # Default is 3. + max-same-issues: 0 + exclude-rules: + # Exclude duplicate code and function length and complexity checking in test + # files (due to common repeats and long functions in test code) + - path: _(test|gen)\.go + linters: + - cyclop + - dupl + - gocognit + - funlen + - lll + - path: _types\.go + linters: + - lll +linters-settings: + nolintlint: + # Disable to ensure that nolint directives don't have a leading space. + # Default is true. + allow-leading-space: false + exhaustive: + default-signifies-exhaustive: true + govet: + check-shadowing: true + cyclop: + max-complexity: 25 + maligned: + suggest-new: true + dupl: + threshold: 150 + goconst: + min-len: 10 + min-occurrences: 4 + funlen: + lines: 80 + statements: 60 +linters: + enable-all: true + disable: + # deprecated + - gocyclo + - interfacer + - scopelint + - maligned + - golint + - deadcode + - ifshort + - varcheck + - structcheck + # require massive refactoring + - forcetypeassert + - govet + - funlen + - gocognit + - cyclop + # + - containedctx + - decorder + - execinquery + - exhaustivestruct + - exhaustruct + - gci + - gochecknoinits + - godot + - godox + - goerr113 + - goheader + - gomnd + - gomodguard + - grouper + - ireturn + - maintidx + - nlreturn + - nonamedreturns + - nosnakecase + - tagliatelle + - testpackage + - thelper + - varnamelen + - wsl + fast: false diff --git a/README.md b/README.md index aed821dd..8329cf8b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# Terraform Provider for Proxmox + [![Go Report Card](https://goreportcard.com/badge/github.com/bpg/terraform-provider-proxmox)](https://goreportcard.com/report/github.com/bpg/terraform-provider-proxmox) [![GoDoc](https://godoc.org/github.com/bpg/terraform-provider-proxmox?status.svg)](http://godoc.org/github.com/bpg/terraform-provider-proxmox) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/bpg/terraform-provider-proxmox)](https://github.com/bpg/terraform-provider-proxmox/releases/latest) @@ -6,62 +8,69 @@ [![Conventional Commits](https://img.shields.io/badge/conv%20commits-v1.0.0-ff69b4)](https://www.conventionalcommits.org/en/v1.0.0/#specification) [![Buy Me A Coffee](https://img.shields.io/badge/-buy%20me%20a%20coffee-5F7FFF?logo=buymeacoffee&labelColor=gray&logoColor=FFDD00)](https://www.buymeacoffee.com/bpgca) -# Terraform Provider for Proxmox A Terraform Provider which adds support for Proxmox solutions. -This repository is a fork of https://github.com/danitso/terraform-provider-proxmox with several critical fixes to unblock -VM deployment in Proxmox v7.0, and a few other enhancements. +This repository is a fork of +with several critical fixes to unblock VM deployment in Proxmox v7.0, and several +other enhancements. ## Compatibility Matrix -| Proxmox version | Provider version | -|-----------------|--------------------------| -| 6.x | \<= 0.4.4 | -| 7.x | 0.4.x \> 0.4.4
0.5.x | +| Proxmox version | Provider version | +| --------------- | ---------------- | +| 6.x | \<= 0.4.4 | +| 7.x | \>= 0.4.5 | ## Requirements + - [Terraform](https://www.terraform.io/downloads.html) 1.1+ - [Go](https://golang.org/doc/install) 1.18+ (to build the provider plugin) - [GoReleaser](https://goreleaser.com/install/) v1.10+ (to build the provider plugin) ## Table of Contents + - [Building the provider](#building-the-provider) - [Using the provider](#using-the-provider) - [Testing the provider](#testing-the-provider) - [Known issues](#known-issues) ## Building the provider + - Clone the repository to `$GOPATH/src/github.com/bpg/terraform-provider-proxmox`: - ```sh - $ mkdir -p "${GOPATH}/src/github.com/bpg" - $ cd "${GOPATH}/src/github.com/bpg" - $ git clone git@github.com:bpg/terraform-provider-proxmox - ``` + ```sh + mkdir -p "${GOPATH}/src/github.com/bpg" + cd "${GOPATH}/src/github.com/bpg" + git clone git@github.com:bpg/terraform-provider-proxmox + ``` - Enter the provider directory and build it: - ```sh - $ cd "${GOPATH}/src/github.com/bpg/terraform-provider-proxmox" - $ make build - ``` + ```sh + cd "${GOPATH}/src/github.com/bpg/terraform-provider-proxmox" + make build + ``` ## Using the provider + You can find the latest release and its documentation in the [Terraform Registry](https://registry.terraform.io/providers/bpg/proxmox/latest). ## Testing the provider + In order to test the provider, you can simply run `make test`. ```sh -$ make test +make test ``` Tests are limited to regression tests, ensuring backwards compatibility. ## Deploying the example resources -There are number of TF examples in the `examples` directory, which can be used to deploy a Container, VM, or other Proxmox resources on your test Proxmox cluster. +There are number of TF examples in the `examples` directory, which can be used +to deploy a Container, VM, or other Proxmox resources on your test Proxmox cluster. The following assumptions are made about the test Proxmox cluster: + - It has one node named `pve` - The node has local storages named `local` and `local-lvm` @@ -75,15 +84,17 @@ virtual_environment_endpoint = "https://:8006/" Then run `make example` to deploy the example resources. - - ## Known issues ### Disk images cannot be imported by non-PAM accounts -Due to limitations in the Proxmox VE API, certain actions need to be performed using SSH. This requires the use of a PAM account (standard Linux account). + +Due to limitations in the Proxmox VE API, certain actions need to be performed +using SSH. This requires the use of a PAM account (standard Linux account). ### Disk images from VMware cannot be uploaded or imported -Proxmox VE is not currently supporting VMware disk images directly. However, you can still use them as disk images by using this workaround: + +Proxmox VE is not currently supporting VMware disk images directly. However, you +can still use them as disk images by using this workaround: ```hcl resource "proxmox_virtual_environment_file" "vmdk_disk_image" { @@ -92,7 +103,8 @@ resource "proxmox_virtual_environment_file" "vmdk_disk_image" { node_name = "node-name" source_file { - # We must override the file extension to bypass the validation code in the Proxmox VE API. + # We must override the file extension to bypass the validation code + # in the Proxmox VE API. file_name = "vmdk-file-name.img" path = "path-to-vmdk-file" } @@ -113,4 +125,6 @@ resource "proxmox_virtual_environment_vm" "example" { ``` ### Snippets cannot be uploaded by non-PAM accounts -Due to limitations in the Proxmox VE API, certain files need to be uploaded using SFTP. This requires the use of a PAM account (standard Linux account). + +Due to limitations in the Proxmox VE API, certain files need to be uploaded +using SFTP. This requires the use of a PAM account (standard Linux account). diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 00000000..53f5ce57 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,6 @@ +module.exports = { + extends: [ + "@commitlint/config-conventional" + ], +} + diff --git a/docs/data-sources/virtual_environment_cluster_alias.md b/docs/data-sources/virtual_environment_cluster_alias.md index 77039317..08d55cc0 100644 --- a/docs/data-sources/virtual_environment_cluster_alias.md +++ b/docs/data-sources/virtual_environment_cluster_alias.md @@ -15,7 +15,7 @@ Retrieves information about a specific alias. ```terraform data "proxmox_virtual_environment_cluster_alias" "local_network" { - name = "local_network" + name = "local_network" } ``` diff --git a/docs/data-sources/virtual_environment_cluster_aliases.md b/docs/data-sources/virtual_environment_cluster_aliases.md index 53bec875..61047d71 100644 --- a/docs/data-sources/virtual_environment_cluster_aliases.md +++ b/docs/data-sources/virtual_environment_cluster_aliases.md @@ -23,4 +23,4 @@ There are no arguments available for this data source. ## Attribute Reference -* `alias_ids` - The pool identifiers. +- `alias_ids` - The pool identifiers. diff --git a/docs/data-sources/virtual_environment_datastores.md b/docs/data-sources/virtual_environment_datastores.md index 21e15b68..1cc51cf2 100644 --- a/docs/data-sources/virtual_environment_datastores.md +++ b/docs/data-sources/virtual_environment_datastores.md @@ -21,16 +21,16 @@ data "proxmox_virtual_environment_datastores" "first_node" { ## Argument Reference -* `node_name` - (Required) A node name. +- `node_name` - (Required) A node name. ## Attribute Reference -* `active` - Whether the datastore is active. -* `content_types` - The allowed content types. -* `datastore_ids` - The datastore identifiers. -* `enabled` - Whether the datastore is enabled. -* `shared` - Whether the datastore is shared. -* `space_available` - The available space in bytes. -* `space_total` - The total space in bytes. -* `space_used` - The used space in bytes. -* `types` - The storage types. +- `active` - Whether the datastore is active. +- `content_types` - The allowed content types. +- `datastore_ids` - The datastore identifiers. +- `enabled` - Whether the datastore is enabled. +- `shared` - Whether the datastore is shared. +- `space_available` - The available space in bytes. +- `space_total` - The total space in bytes. +- `space_used` - The used space in bytes. +- `types` - The storage types. diff --git a/docs/data-sources/virtual_environment_dns.md b/docs/data-sources/virtual_environment_dns.md index d6210bf7..3d061f48 100644 --- a/docs/data-sources/virtual_environment_dns.md +++ b/docs/data-sources/virtual_environment_dns.md @@ -21,9 +21,9 @@ data "proxmox_virtual_environment_dns" "first_node" { ## Argument Reference -* `node_name` - (Required) A node name. +- `node_name` - (Required) A node name. ## Attribute Reference -* `domain` - The DNS search domain. -* `servers` - The DNS servers. +- `domain` - The DNS search domain. +- `servers` - The DNS servers. diff --git a/docs/data-sources/virtual_environment_group.md b/docs/data-sources/virtual_environment_group.md index 138df4fa..ff8f559b 100644 --- a/docs/data-sources/virtual_environment_group.md +++ b/docs/data-sources/virtual_environment_group.md @@ -21,13 +21,13 @@ data "proxmox_virtual_environment_group" "operations_team" { ## Argument Reference -* `group_id` - (Required) The group identifier. +- `group_id` - (Required) The group identifier. ## Attribute Reference -* `acl` - The access control list. - * `path` - The path. - * `propagate` - Whether to propagate to child paths. - * `role_id` - The role identifier. -* `comment` - The group comment. -* `members` - The group members as a list with `username@realm` entries. +- `acl` - The access control list. + - `path` - The path. + - `propagate` - Whether to propagate to child paths. + - `role_id` - The role identifier. +- `comment` - The group comment. +- `members` - The group members as a list with `username@realm` entries. diff --git a/docs/data-sources/virtual_environment_groups.md b/docs/data-sources/virtual_environment_groups.md index 2cba57bf..a3386277 100644 --- a/docs/data-sources/virtual_environment_groups.md +++ b/docs/data-sources/virtual_environment_groups.md @@ -23,5 +23,5 @@ There are no arguments available for this data source. ## Attribute Reference -* `comments` - The group comments. -* `group_ids` - The group identifiers. +- `comments` - The group comments. +- `group_ids` - The group identifiers. diff --git a/docs/data-sources/virtual_environment_hosts.md b/docs/data-sources/virtual_environment_hosts.md index 2128cde7..368ad463 100644 --- a/docs/data-sources/virtual_environment_hosts.md +++ b/docs/data-sources/virtual_environment_hosts.md @@ -21,11 +21,12 @@ data "proxmox_virtual_environment_hosts" "first_node_host_entries" { ## Argument Reference -* `node_name` - (Required) A node name. +- `node_name` - (Required) A node name. ## Attribute Reference -* `addresses` - The IP addresses. -* `digest` - The SHA1 digest. -* `entries` - The host entries (conversion of `addresses` and `hostnames` into objects). -* `hostnames` - The hostnames associated with each of the IP addresses. +- `addresses` - The IP addresses. +- `digest` - The SHA1 digest. +- `entries` - The host entries (conversion of `addresses` and `hostnames` into + objects). +- `hostnames` - The hostnames associated with each of the IP addresses. diff --git a/docs/data-sources/virtual_environment_nodes.md b/docs/data-sources/virtual_environment_nodes.md index ceb84133..75c0ec4a 100644 --- a/docs/data-sources/virtual_environment_nodes.md +++ b/docs/data-sources/virtual_environment_nodes.md @@ -23,12 +23,12 @@ There are no arguments available for this data source. ## Attribute Reference -* `cpu_count` - The CPU count for each node. -* `cpu_utilization` - The CPU utilization on each node. -* `memory_available` - The memory available on each node. -* `memory_used` - The memory used on each node. -* `names` - The node names. -* `online` - Whether a node is online. -* `ssl_fingerprints` - The SSL fingerprint for each node. -* `support_levels` - The support level for each node. -* `uptime` - The uptime in seconds for each node. +- `cpu_count` - The CPU count for each node. +- `cpu_utilization` - The CPU utilization on each node. +- `memory_available` - The memory available on each node. +- `memory_used` - The memory used on each node. +- `names` - The node names. +- `online` - Whether a node is online. +- `ssl_fingerprints` - The SSL fingerprint for each node. +- `support_levels` - The support level for each node. +- `uptime` - The uptime in seconds for each node. diff --git a/docs/data-sources/virtual_environment_pool.md b/docs/data-sources/virtual_environment_pool.md index 272c2ddd..97297336 100644 --- a/docs/data-sources/virtual_environment_pool.md +++ b/docs/data-sources/virtual_environment_pool.md @@ -21,14 +21,14 @@ data "proxmox_virtual_environment_pool" "operations_pool" { ## Argument Reference -* `pool_id` - (Required) The pool identifier. +- `pool_id` - (Required) The pool identifier. ## Attribute Reference -* `comment` - The pool comment. -* `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. +- `comment` - The pool comment. +- `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. diff --git a/docs/data-sources/virtual_environment_pools.md b/docs/data-sources/virtual_environment_pools.md index 325c505f..05064055 100644 --- a/docs/data-sources/virtual_environment_pools.md +++ b/docs/data-sources/virtual_environment_pools.md @@ -23,4 +23,4 @@ There are no arguments available for this data source. ## Attribute Reference -* `pool_ids` - The pool identifiers. +- `pool_ids` - The pool identifiers. diff --git a/docs/data-sources/virtual_environment_role.md b/docs/data-sources/virtual_environment_role.md index 43e65aa0..4bb0a14b 100644 --- a/docs/data-sources/virtual_environment_role.md +++ b/docs/data-sources/virtual_environment_role.md @@ -21,8 +21,8 @@ data "proxmox_virtual_environment_role" "operations_role" { ## Argument Reference -* `role_id` - (Required) The role identifier. +- `role_id` - (Required) The role identifier. ## Attribute Reference -* `privileges` - The role privileges +- `privileges` - The role privileges diff --git a/docs/data-sources/virtual_environment_roles.md b/docs/data-sources/virtual_environment_roles.md index 88be9d0e..af172258 100644 --- a/docs/data-sources/virtual_environment_roles.md +++ b/docs/data-sources/virtual_environment_roles.md @@ -23,6 +23,6 @@ There are no arguments available for this data source. ## Attribute Reference -* `privileges` - The role privileges. -* `role_ids` - The role identifiers. -* `special` - Whether the role is special (built-in). +- `privileges` - The role privileges. +- `role_ids` - The role identifiers. +- `special` - Whether the role is special (built-in). diff --git a/docs/data-sources/virtual_environment_time.md b/docs/data-sources/virtual_environment_time.md index 92b445ee..f70d936f 100644 --- a/docs/data-sources/virtual_environment_time.md +++ b/docs/data-sources/virtual_environment_time.md @@ -21,10 +21,10 @@ data "proxmox_virtual_environment_time" "first_node_time" { ## Argument Reference -* `node_name` - (Required) A node name. +- `node_name` - (Required) A node name. ## Attribute Reference -* `local_time` - The node's local time. -* `time_zone` - The node's time zone. -* `utc_time` - The node's local time formatted as UTC. +- `local_time` - The node's local time. +- `time_zone` - The node's time zone. +- `utc_time` - The node's local time formatted as UTC. diff --git a/docs/data-sources/virtual_environment_user.md b/docs/data-sources/virtual_environment_user.md index 53e506c3..d2d8952b 100644 --- a/docs/data-sources/virtual_environment_user.md +++ b/docs/data-sources/virtual_environment_user.md @@ -21,19 +21,19 @@ data "proxmox_virtual_environment_user" "operations_user" { ## Argument Reference -* `user_id` - (Required) The user identifier. +- `user_id` - (Required) The user identifier. ## Attribute Reference -* `acl` - The access control list. - * `path` - The path. - * `propagate` - Whether to propagate to child paths. - * `role_id` - The role identifier. -* `comment` - The user comment. -* `email` - The user's email address. -* `enabled` - Whether the user account is enabled. -* `expiration_date` - The user account's expiration date (RFC 3339). -* `first_name` - The user's first name. -* `groups` - The user's groups. -* `keys` - The user's keys. -* `last_name` - The user's last name. +- `acl` - The access control list. + - `path` - The path. + - `propagate` - Whether to propagate to child paths. + - `role_id` - The role identifier. +- `comment` - The user comment. +- `email` - The user's email address. +- `enabled` - Whether the user account is enabled. +- `expiration_date` - The user account's expiration date (RFC 3339). +- `first_name` - The user's first name. +- `groups` - The user's groups. +- `keys` - The user's keys. +- `last_name` - The user's last name. diff --git a/docs/data-sources/virtual_environment_users.md b/docs/data-sources/virtual_environment_users.md index e43fb286..cda04793 100644 --- a/docs/data-sources/virtual_environment_users.md +++ b/docs/data-sources/virtual_environment_users.md @@ -23,12 +23,12 @@ There are no arguments available for this data source. ## Attribute Reference -* `comments` - The user comments. -* `emails` - The users' email addresses. -* `enabled` - Whether a user account is enabled. -* `expiration_dates` - The user accounts' expiration dates (RFC 3339). -* `first_names` - The users' first names. -* `groups` - The users' groups. -* `keys` - The users' keys. -* `last_names` - The users' last names. -* `user_ids` - The user identifiers. +- `comments` - The user comments. +- `emails` - The users' email addresses. +- `enabled` - Whether a user account is enabled. +- `expiration_dates` - The user accounts' expiration dates (RFC 3339). +- `first_names` - The users' first names. +- `groups` - The users' groups. +- `keys` - The users' keys. +- `last_names` - The users' last names. +- `user_ids` - The user identifiers. diff --git a/docs/data-sources/virtual_environment_version.md b/docs/data-sources/virtual_environment_version.md index 45b52589..43d5d380 100644 --- a/docs/data-sources/virtual_environment_version.md +++ b/docs/data-sources/virtual_environment_version.md @@ -23,7 +23,7 @@ There are no arguments available for this data source. ## Attribute Reference -* `keyboard_layout` - The keyboard layout. -* `release` - The release number. -* `repository_id` - The repository identifier. -* `version` - The version string. +- `keyboard_layout` - The keyboard layout. +- `release` - The release number. +- `repository_id` - The repository identifier. +- `version` - The version string. diff --git a/docs/index.md b/docs/index.md index 3003b306..2fd46219 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,7 +6,10 @@ nav_order: 1 # Proxmox Provider -This provider for [Terraform](https://www.terraform.io/) is used for interacting with resources supported by [Proxmox](https://www.proxmox.com/en/). The provider needs to be configured with the proper endpoints and credentials before it can be used. +This provider for [Terraform](https://www.terraform.io/) is used for interacting +with resources supported by [Proxmox](https://www.proxmox.com/en/). The provider +needs to be configured with the proper endpoints and credentials before it can +be used. Use the navigation to the left to read about the available resources. @@ -25,16 +28,21 @@ provider "proxmox" { ## Authentication -The Proxmox provider offers a flexible means of providing credentials for authentication. The following methods are supported, in this order, and explained below: +The Proxmox provider offers a flexible means of providing credentials for +authentication. The following methods are supported, in this order, and +explained below: -* Static credentials -* Environment variables +- Static credentials +- Environment variables ### Static credentials -> Warning: Hard-coding credentials into any Terraform configuration is not recommended, and risks secret leakage should this file ever be committed to a public version control system. +> Warning: Hard-coding credentials into any Terraform configuration is not +> recommended, and risks secret leakage should this file ever be committed to a +> public version control system. -Static credentials can be provided by adding a `username` and `password` in-line in the Proxmox provider block: +Static credentials can be provided by adding a `username` and `password` in-line +in the Proxmox provider block: ```terraform provider "proxmox" { @@ -47,9 +55,11 @@ provider "proxmox" { ### Environment variables -You can provide your credentials via the `PROXMOX_VE_USERNAME` and `PROXMOX_VE_PASSWORD`, environment variables, representing your Proxmox username, realm and password, respectively: +You can provide your credentials via the `PROXMOX_VE_USERNAME` +and `PROXMOX_VE_PASSWORD`, environment variables, representing your Proxmox +username, realm and password, respectively: -``` +```terraform provider "proxmox" { virtual_environment {} } @@ -58,18 +68,28 @@ provider "proxmox" { Usage: ```sh -$ export PROXMOX_VE_USERNAME="username@realm" -$ export PROXMOX_VE_PASSWORD="a-strong-password" -$ terraform plan +export PROXMOX_VE_USERNAME="username@realm" +export PROXMOX_VE_PASSWORD="a-strong-password" +terraform plan ``` ## Argument Reference -In addition to [generic provider arguments](https://www.terraform.io/docs/configuration/providers.html) (e.g. `alias` and `version`), the following arguments are supported in the Proxmox `provider` block: +In addition +to [generic provider arguments](https://www.terraform.io/docs/configuration/providers.html) ( +e.g. `alias` and `version`), the following arguments are supported in the +Proxmox `provider` block: -* `virtual_environment` - (Optional) The Proxmox Virtual Environment configuration. - * `endpoint` - (Required) The endpoint for the Proxmox Virtual Environment API (can also be sourced from `PROXMOX_VE_ENDPOINT`). - * `insecure` - (Optional) Whether to skip the TLS verification step (can also be sourced from `PROXMOX_VE_INSECURE`). If omitted, defaults to `false`. - * `otp` - (Optional) The one-time password for the Proxmox Virtual Environment API (can also be sourced from `PROXMOX_VE_OTP`). - * `password` - (Required) The password for the Proxmox Virtual Environment API (can also be sourced from `PROXMOX_VE_PASSWORD`). - * `username` - (Required) The username and realm for the Proxmox Virtual Environment API (can also be sourced from `PROXMOX_VE_USERNAME`). +- `virtual_environment` - (Optional) The Proxmox Virtual Environment + configuration. + - `endpoint` - (Required) The endpoint for the Proxmox Virtual Environment + API (can also be sourced from `PROXMOX_VE_ENDPOINT`). + - `insecure` - (Optional) Whether to skip the TLS verification step (can + also be sourced from `PROXMOX_VE_INSECURE`). If omitted, defaults + to `false`. + - `otp` - (Optional) The one-time password for the Proxmox Virtual + Environment API (can also be sourced from `PROXMOX_VE_OTP`). + - `password` - (Required) The password for the Proxmox Virtual Environment + API (can also be sourced from `PROXMOX_VE_PASSWORD`). + - `username` - (Required) The username and realm for the Proxmox Virtual + Environment API (can also be sourced from `PROXMOX_VE_USERNAME`). diff --git a/docs/resources/virtual_environment_certificate.md b/docs/resources/virtual_environment_certificate.md index 8e0dbd1e..e9a9131f 100644 --- a/docs/resources/virtual_environment_certificate.md +++ b/docs/resources/virtual_environment_certificate.md @@ -46,19 +46,19 @@ resource "tls_self_signed_cert" "proxmox_virtual_environment_certificate" { ## Argument Reference -* `certificate` - (Required) The PEM encoded certificate. -* `certificate_chain` - (Optional) The PEM encoded certificate chain. -* `node_name` - (Required) A node name. -* `private_key` - (Required) The PEM encoded private key. +- `certificate` - (Required) The PEM encoded certificate. +- `certificate_chain` - (Optional) The PEM encoded certificate chain. +- `node_name` - (Required) A node name. +- `private_key` - (Required) The PEM encoded private key. ## Attribute Reference -* `expiration_date` - The expiration date (RFC 3339). -* `file_name` - The file name. -* `issuer` - The issuer. -* `public_key_size` - The public key size. -* `public_key_type` - The public key type. -* `ssl_fingerprint` - The SSL fingerprint. -* `start_date` - The start date (RFC 3339). -* `subject` - The subject. -* `subject_alternative_names` - The subject alternative names. +- `expiration_date` - The expiration date (RFC 3339). +- `file_name` - The file name. +- `issuer` - The issuer. +- `public_key_size` - The public key size. +- `public_key_type` - The public key type. +- `ssl_fingerprint` - The SSL fingerprint. +- `start_date` - The start date (RFC 3339). +- `subject` - The subject. +- `subject_alternative_names` - The subject alternative names. diff --git a/docs/resources/virtual_environment_cluster_alias.md b/docs/resources/virtual_environment_cluster_alias.md index 424d8e94..49ef6328 100644 --- a/docs/resources/virtual_environment_cluster_alias.md +++ b/docs/resources/virtual_environment_cluster_alias.md @@ -16,23 +16,23 @@ We can create aliases to identify an IP address or a network. ```terraform resource "proxmox_virtual_environment_cluster_alias" "local_network" { - name = "local_network" - cidr = "192.168.0.0/23" - comment = "Managed by Terraform" + name = "local_network" + cidr = "192.168.0.0/23" + comment = "Managed by Terraform" } resource "proxmox_virtual_environment_cluster_alias" "ubuntu_vm" { - name = "ubuntu" - cidr = "192.168.0.1" - comment = "Managed by Terraform" + name = "ubuntu" + cidr = "192.168.0.1" + comment = "Managed by Terraform" } ``` ## Argument Reference -* `name` - (Required) Alias name. -* `cidr` - (Required) Network/IP specification in CIDR format. -* `comment` - (Optional) Alias comment. +- `name` - (Required) Alias name. +- `cidr` - (Required) Network/IP specification in CIDR format. +- `comment` - (Optional) Alias comment. ## Attribute Reference diff --git a/docs/resources/virtual_environment_cluster_ipset.md b/docs/resources/virtual_environment_cluster_ipset.md index 834ac75d..85126831 100644 --- a/docs/resources/virtual_environment_cluster_ipset.md +++ b/docs/resources/virtual_environment_cluster_ipset.md @@ -15,35 +15,36 @@ An IPSet allows us to group multiple IP addresses, IP subnets and aliases. ```terraform resource "proxmox_virtual_environment_cluster_ipset" "ipset" { - name = "local_network" - comment = "Managed by Terraform" - - cidr { - name = "192.168.0.0/23" - comment = "Local network 1" - } - - cidr { - name = "192.168.0.1" - comment = "Server 1" - nomatch = true - } - - cidr { - name = "192.168.2.1" - comment = "Server 1" - } + name = "local_network" + comment = "Managed by Terraform" + + cidr { + name = "192.168.0.0/23" + comment = "Local network 1" + } + + cidr { + name = "192.168.0.1" + comment = "Server 1" + nomatch = true + } + + cidr { + name = "192.168.2.1" + comment = "Server 1" + } } ``` ## Argument Reference -* `name` - (Required) Alias name. -* `comment` - (Optional) Alias 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 were not added to the set. +- `name` - (Required) Alias name. +- `comment` - (Optional) Alias 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 + were not added to the set. ## Attribute Reference diff --git a/docs/resources/virtual_environment_container.md b/docs/resources/virtual_environment_container.md index daa2879d..2b9e25fe 100644 --- a/docs/resources/virtual_environment_container.md +++ b/docs/resources/virtual_environment_container.md @@ -30,7 +30,9 @@ resource "proxmox_virtual_environment_container" "ubuntu_container" { } user_account { - keys = [trimspace(tls_private_key.ubuntu_container_key.public_key_openssh)] + keys = [ + trimspace(tls_private_key.ubuntu_container_key.public_key_openssh) + ] password = random_password.ubuntu_container_password.result } } @@ -83,72 +85,89 @@ 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 equal to the `node_name` argument). - * `vm_id` - (Required) The identifier for the source container. -* `console` - (Optional) The console configuration. - * `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`). -* `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`). -* `description` - (Optional) The description. -* `disk` - (Optional) The disk configuration. - * `datastore_id` - (Optional) The identifier for the datastore to create the disk in (defaults to `local`). +- `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 + equal + to the `node_name` argument). + - `vm_id` - (Required) The identifier for the source container. +- `console` - (Optional) The console configuration. + - `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`). +- `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`). +- `description` - (Optional) The description. +- `disk` - (Optional) The disk configuration. + - `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 device). - * `ipv4` - (Optional) The IPv4 configuration. - * `address` - (Optional) The IPv4 address (use `dhcp` for autodiscovery). - * `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 autodiscovery). - * `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. -* `memory` - (Optional) The memory configuration. - * `dedicated` - (Optional) The dedicated memory in megabytes (defaults to `512`). - * `swap` - (Optional) The swap size in megabytes (defaults to `0`). -* `network_interface` - (Optional) A network interface (multiple blocks supported). - * `bridge` - (Optional) The name of the network bridge (defaults to `vmbr0`). - * `enabled` - (Optional) Whether to enable the network device (defaults to `true`). - * `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. -* `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. -* `pool_id` - (Optional) The identifier for a pool to assign the container to. -* `started` - (Optional) Whether to start the container (defaults to `true`). -* `template` - (Optional) Whether to create a template (defaults to `false`). -* `vm_id` - (Optional) The virtual machine identifier +- `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 + device). + - `ipv4` - (Optional) The IPv4 configuration. + - `address` - (Optional) The IPv4 address (use `dhcp` for + autodiscovery). + - `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 + autodiscovery). + - `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. +- `memory` - (Optional) The memory configuration. + - `dedicated` - (Optional) The dedicated memory in megabytes (defaults + to `512`). + - `swap` - (Optional) The swap size in megabytes (defaults to `0`). +- `network_interface` - (Optional) A network interface (multiple blocks + supported). + - `bridge` - (Optional) The name of the network bridge (defaults + to `vmbr0`). + - `enabled` - (Optional) Whether to enable the network device (defaults + to `true`). + - `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. +- `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. +- `pool_id` - (Optional) The identifier for a pool to assign the container to. +- `started` - (Optional) Whether to start the container (defaults to `true`). +- `template` - (Optional) Whether to create a template (defaults to `false`). +- `vm_id` - (Optional) The virtual machine identifier ## Attribute Reference diff --git a/docs/resources/virtual_environment_dns.md b/docs/resources/virtual_environment_dns.md index aa508ea9..0fa4c4c8 100644 --- a/docs/resources/virtual_environment_dns.md +++ b/docs/resources/virtual_environment_dns.md @@ -31,9 +31,9 @@ data "proxmox_virtual_environment_dns" "first_node_dns_configuration" { ## Argument Reference -* `domain` - (Required) The DNS search domain. -* `node_name` - (Required) A node name. -* `servers` - (Optional) The DNS servers. +- `domain` - (Required) The DNS search domain. +- `node_name` - (Required) A node name. +- `servers` - (Optional) The DNS servers. ## Attribute Reference diff --git a/docs/resources/virtual_environment_file.md b/docs/resources/virtual_environment_file.md index 9c2462c5..3f809208 100644 --- a/docs/resources/virtual_environment_file.md +++ b/docs/resources/virtual_environment_file.md @@ -58,34 +58,38 @@ EOF ## Argument Reference -* `content_type` - (Optional) The content type. - * `backup` - * `iso` - * `snippets` - * `vztmpl` -* `datastore_id` - (Required) The datastore id. -* `node_name` - (Required) The node name. -* `source_file` - (Optional) The source file (conflicts with `source_raw`). - * `checksum` - (Optional) The SHA256 checksum of the source file. - * `file_name` - (Optional) The file name to use instead of the source file name. - * `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. -* `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. +- `content_type` - (Optional) The content type. + - `backup` + - `iso` + - `snippets` + - `vztmpl` +- `datastore_id` - (Required) The datastore id. +- `node_name` - (Required) The node name. +- `source_file` - (Optional) The source file (conflicts with `source_raw`). + - `checksum` - (Optional) The SHA256 checksum of the source file. + - `file_name` - (Optional) The file name to use instead of the source file + name. + - `insecure` - (Optional) Whether to skip the TLS verification step for + HTTPSsources (defaults to `false`). + - `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. ## Attribute Reference -* `file_modification_date` - The file modification date (RFC 3339). -* `file_name` - The file name. -* `file_size` - The file size in bytes. -* `file_tag` - The file tag. +- `file_modification_date` - The file modification date (RFC 3339). +- `file_name` - The file name. +- `file_size` - The file size in bytes. +- `file_tag` - The file tag. ## Important Notes -The Proxmox VE API endpoint for file uploads does not support chunked transfer encoding, which means that we must first -store the source file as a temporary file locally before uploading it. +The Proxmox VE API endpoint for file uploads does not support chunked transfer +encoding, which means that we must first store the source file as a temporary +file locally before uploading it. -You must ensure that you have at least `Size-in-MB * 2 + 1` MB of storage space available (twice the size plus overhead -because a multipart payload needs to be created as another temporary file). +You must ensure that you have at least `Size-in-MB * 2 + 1` MB of storage space +available (twice the size plus overhead because a multipart payload needs to be +created as another temporary file). diff --git a/docs/resources/virtual_environment_group.md b/docs/resources/virtual_environment_group.md index c5927bec..8e7406b9 100644 --- a/docs/resources/virtual_environment_group.md +++ b/docs/resources/virtual_environment_group.md @@ -22,13 +22,13 @@ 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. -* `comment` - (Optional) The group comment. -* `group_id` - (Required) The group identifier. +- `acl` - (Optional) The access control list (multiple blocks supported). + - `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. ## Attribute Reference -* `members` - The group members as a list of `username@realm` entries +- `members` - The group members as a list of `username@realm` entries diff --git a/docs/resources/virtual_environment_hosts.md b/docs/resources/virtual_environment_hosts.md index ff71578f..2af9ee59 100644 --- a/docs/resources/virtual_environment_hosts.md +++ b/docs/resources/virtual_environment_hosts.md @@ -30,14 +30,15 @@ resource "proxmox_virtual_environment_hosts" "first_node_host_entries" { ## Argument Reference -* `node_name` - (Required) A node name. -* `entry` - (Required) A host entry (multiple blocks supported). - * `address` - (Required) The IP address. - * `hostnames` - (Required) The hostnames. +- `node_name` - (Required) A node name. +- `entry` - (Required) A host entry (multiple blocks supported). + - `address` - (Required) The IP address. + - `hostnames` - (Required) The hostnames. ## Attribute Reference -* `addresses` - The IP addresses. -* `digest` - The SHA1 digest. -* `entries` - The host entries (conversion of `addresses` and `hostnames` into objects). -* `hostnames` - The hostnames associated with each of the IP addresses. +- `addresses` - The IP addresses. +- `digest` - The SHA1 digest. +- `entries` - The host entries (conversion of `addresses` and `hostnames` into + objects). +- `hostnames` - The hostnames associated with each of the IP addresses. diff --git a/docs/resources/virtual_environment_pool.md b/docs/resources/virtual_environment_pool.md index 6fbc8a04..e79a275a 100644 --- a/docs/resources/virtual_environment_pool.md +++ b/docs/resources/virtual_environment_pool.md @@ -22,14 +22,14 @@ resource "proxmox_virtual_environment_pool" "operations_pool" { ## Argument Reference -* `comment` - (Optional) The pool comment. -* `pool_id` - (Required) The pool identifier. +- `comment` - (Optional) The pool comment. +- `pool_id` - (Required) The pool identifier. ## 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. +- `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. diff --git a/docs/resources/virtual_environment_role.md b/docs/resources/virtual_environment_role.md index 2e292c34..70fe90cc 100644 --- a/docs/resources/virtual_environment_role.md +++ b/docs/resources/virtual_environment_role.md @@ -25,8 +25,8 @@ resource "proxmox_virtual_environment_role" "operations_monitoring" { ## Argument Reference -* `privileges` - (Required) The role privileges. -* `role_id` - (Required) The role identifier. +- `privileges` - (Required) The role privileges. +- `role_id` - (Required) The role identifier. ## Attribute Reference diff --git a/docs/resources/virtual_environment_time.md b/docs/resources/virtual_environment_time.md index a8bcb576..dbfb0660 100644 --- a/docs/resources/virtual_environment_time.md +++ b/docs/resources/virtual_environment_time.md @@ -22,10 +22,10 @@ resource "proxmox_virtual_environment_time" "first_node_time" { ## Argument Reference -* `node_name` - (Required) A node name. -* `time_zone` - (Required) The node's time zone. +- `node_name` - (Required) A node name. +- `time_zone` - (Required) The node's time zone. ## Attribute Reference -* `local_time` - The node's local time. -* `utc_time` - The node's local time formatted as UTC. +- `local_time` - The node's local time. +- `utc_time` - The node's local time formatted as UTC. diff --git a/docs/resources/virtual_environment_user.md b/docs/resources/virtual_environment_user.md index d024899d..7616ef1c 100644 --- a/docs/resources/virtual_environment_user.md +++ b/docs/resources/virtual_environment_user.md @@ -37,20 +37,20 @@ 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. -* `comment` - (Optional) The user comment. -* `email` - (Optional) The user's email address. -* `enabled` - (Optional) Whether the user account is enabled. -* `expiration_date` - (Optional) The user account's expiration date (RFC 3339). -* `first_name` - (Optional) The user's first name. -* `groups` - (Optional) The user's groups. -* `keys` - (Optional) The user's keys. -* `last_name` - (Optional) The user's last name. -* `password` - (Required) The user's password. -* `user_id` - (Required) The user identifier. +- `acl` - (Optional) The access control list (multiple blocks supported). + - `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. +- `expiration_date` - (Optional) The user account's expiration date (RFC 3339). +- `first_name` - (Optional) The user's first name. +- `groups` - (Optional) The user's groups. +- `keys` - (Optional) The user's keys. +- `last_name` - (Optional) The user's last name. +- `password` - (Required) The user's password. +- `user_id` - (Required) The user identifier. ## Attribute Reference diff --git a/docs/resources/virtual_environment_vm.md b/docs/resources/virtual_environment_vm.md index 45bae47c..cf5c5885 100644 --- a/docs/resources/virtual_environment_vm.md +++ b/docs/resources/virtual_environment_vm.md @@ -97,251 +97,339 @@ output "ubuntu_vm_public_key" { ## Argument Reference -* `acpi` - (Optional) Whether to enable ACPI (defaults to `true`). -* `agent` - (Optional) The QEMU agent configuration. - * `enabled` - (Optional) Whether to enable the QEMU agent (defaults to `false`). - * `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 (defaults to `false`). - * `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 to `true`). -* `bios` - (Optional) The BIOS implementation (defaults to `seabios`). - * `ovmf` - OVMF (UEFI). - * `seabios` - SeaBIOS. -* `cdrom` - (Optional) The CDROM configuration. - * `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 in the physical drive). -* `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 equal to the `node_name` argument). - * `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. -* `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 vulnerable for Spectre on AMD CPUs. - * `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with AMD CPUs, best used with "virt-ssbd". - * `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested virtualization (only supported on Intel CPUs). - * `+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 mitigated correctly. - * `+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 host HW supports it. - * `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with Intel CPUs. - * `+ssbd`/`-ssbd` - Protection for "Speculative Store Bypass" for Intel models. - * `+virt-ssbd`/`-virt-ssbd` - Basis for "Speculative Store Bypass" protection for AMD models. - * `hotplugged` - (Optional) The number of hotplugged vCPUs (defaults to `0`). - * `sockets` - (Optional) The number of CPU sockets (defaults to `1`). - * `type` - (Optional) The emulated CPU type (defaults to `qemu64`). - * `486` - Intel 486. - * `Broadwell`/`Broadwell-IBRS`/`Broadwell-noTSX`/`Broadwell-noTSX-IBRS` - Intel Core Processor (Broadwell, 2014) - . - * `Cascadelake-Server` - Intel Xeon 32xx/42xx/52xx/62xx/82xx/92xx (2019). - * `Conroe` - Intel Celeron_4x0 (Conroe/Merom Class Core 2, 2006). - * `EPYC`/`EPYC-IBPB` - AMD EPYC Processor (2017). - * `Haswell`/`Haswell-IBRS`/`Haswell-noTSX`/`Haswell-noTSX-IBRS` - Intel Core Processor (Haswell, 2013). - * `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, 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, 2011). - * `Skylake-Client`/`Skylake-Client-IBRS` - Intel Core Processor (Skylake, 2015). - * `Skylake-Server`/`Skylake-Server-IBRS` - Intel Xeon Processor (Skylake, 2016). - * `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 variants). - * `units` - (Optional) The CPU units (defaults to `1024`). -* `description` - (Optional) The description. -* `disk` - (Optional) A disk (multiple blocks supported). - * `datastore_id` - (Optional) The identifier for the datastore to create the disk in (defaults to `local-lvm`). - * `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 - might cause high CPU utilization during - import, especially with large disk images). - * `interface` - (Required) The disk interface for Proxmox, currently scsi, sata and virtio are supported. - * `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 megabytes per second. - * `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 (defaults to `false`). Note that SSD emulation is not supported on VirtIO Block drives. -* `hostpci` - (Optional) A host PCI device mapping (multiple blocks supported). - * `device` - (Required) The PCI device name for Proxmox, in form of `hostpciX` where `X` is a sequential number from 0 to 3. - * `id` - (Required) The PCI device ID. - * `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 to `true`). - * `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. With this enabled the `vga` configuration argument will be ignored. -* `initialization` - (Optional) The cloud-init configuration. - * `datastore_id` - (Optional) The identifier for the datastore to create the cloud-init disk in (defaults +- `acpi` - (Optional) Whether to enable ACPI (defaults to `true`). +- `agent` - (Optional) The QEMU agent configuration. + - `enabled` - (Optional) Whether to enable the QEMU agent (defaults + to `false`). + - `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 + (defaults to `false`). + - `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 + to `true`). +- `bios` - (Optional) The BIOS implementation (defaults to `seabios`). + - `ovmf` - OVMF (UEFI). + - `seabios` - SeaBIOS. +- `cdrom` - (Optional) The CDROM configuration. + - `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 + in + the physical drive). +- `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 + equal to the `node_name` argument). + - `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. +- `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 + vulnerable for Spectre on AMD CPUs. + - `+amd-ssbd`/`-amd-ssbd` - Improves Spectre mitigation performance with + AMD CPUs, best used with "virt-ssbd". + - `+hv-evmcs`/`-hv-evmcs` - Improve performance for nested + virtualization (only supported on Intel CPUs). + - `+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 + mitigated correctly. + - `+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 + host HW supports it. + - `+spec-ctrl`/`-spec-ctrl` - Allows improved Spectre mitigation with + Intel CPUs. + - `+ssbd`/`-ssbd` - Protection for "Speculative Store Bypass" for Intel + models. + - `+virt-ssbd`/`-virt-ssbd` - Basis for "Speculative Store Bypass" + protection for AMD models. + - `hotplugged` - (Optional) The number of hotplugged vCPUs (defaults + to `0`). + - `sockets` - (Optional) The number of CPU sockets (defaults to `1`). + - `type` - (Optional) The emulated CPU type (defaults to `qemu64`). + - `486` - Intel 486. + - `Broadwell`/`Broadwell-IBRS`/`Broadwell-noTSX`/`Broadwell-noTSX-IBRS` + - Intel Core Processor (Broadwell, 2014). + - `Cascadelake-Server` - Intel Xeon 32xx/42xx/52xx/62xx/82xx/92xx ( + 2019). + - `Conroe` - Intel Celeron_4x0 (Conroe/Merom Class Core 2, 2006). + - `EPYC`/`EPYC-IBPB` - AMD EPYC Processor (2017). + - `Haswell`/`Haswell-IBRS`/`Haswell-noTSX`/`Haswell-noTSX-IBRS` - Intel + Core Processor (Haswell, 2013). + - `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, + 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, + 2011). + - `Skylake-Client`/`Skylake-Client-IBRS` - Intel Core Processor ( + Skylake, 2015). + - `Skylake-Server`/`Skylake-Server-IBRS` - Intel Xeon Processor ( + Skylake, 2016). + - `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 + variants). + - `units` - (Optional) The CPU units (defaults to `1024`). +- `description` - (Optional) The description. +- `disk` - (Optional) A disk (multiple blocks supported). + - `datastore_id` - (Optional) The identifier for the datastore to create + the disk in (defaults to `local-lvm`). + - `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 - + might cause high CPU utilization during import, especially with large + disk images). + - `interface` - (Required) The disk interface for Proxmox, currently scsi, + sata and virtio are supported. + - `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 + megabytes per second. + - `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 ( + defaults to `false`). Note that SSD emulation is not supported on VirtIO + Block drives. +- `hostpci` - (Optional) A host PCI device mapping (multiple blocks supported). + - `device` - (Required) The PCI device name for Proxmox, in form + of `hostpciX` where `X` is a sequential number from 0 to 3. + - `id` - (Required) The PCI device ID. + - `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 + to `true`). + - `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. + With this enabled the `vga` configuration argument will be ignored. +- `initialization` - (Optional) The cloud-init configuration. + - `datastore_id` - (Optional) The identifier for the datastore to create the + cloud-init disk in (defaults to `local-lvm`). - * `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 (use `dhcp` for autodiscovery). - * `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 autodiscovery). - * `gateway` - (Optional) The IPv6 gateway (must be omitted when `dhcp` is used as the address). - * `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 network configuration data passed to the + - `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 (use `dhcp` for + autodiscovery). + - `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 + autodiscovery). + - `gateway` - (Optional) The IPv6 gateway (must be omitted + when `dhcp` is used as the address). + - `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 + 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 custom user data (conflicts + - `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 all vendor 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. -* `kvm_arguments` - (Optional) Arbitrary arguments passed to kvm. + - `vendor_data_file_id` - (Optional) The identifier for a file containing + all vendor 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. +- `kvm_arguments` - (Optional) Arbitrary arguments passed to kvm. * `machine` - (Optional) The VM machine type (defaults to `i440fx`). - * `i440fx` - Standard PC (i440FX + PIIX, 1996). - * `q35` - Standard PC (Q35 + ICH9, 2009). -* `memory` - (Optional) The memory configuration. - * `dedicated` - (Optional) The dedicated memory in megabytes (defaults to `512`). - * `floating` - (Optional) The floating memory in megabytes (defaults to `0`). - * `shared` - (Optional) The shared memory in megabytes (defaults to `0`). -* `name` - (Optional) The virtual machine name. -* `network_device` - (Optional) A network device (multiple blocks supported). - * `bridge` - (Optional) The name of the network bridge (defaults to `vmbr0`). - * `enabled` - (Optional) Whether to enable the network device (defaults to `true`). - * `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. - * `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. - * `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. -* `started` - (Optional) Whether to start the virtual machine (defaults to `true`). -* `tablet_device` - (Optional) Whether to enable the USB tablet device (defaults to `true`). -* `tags` - (Optional) A list of tags of the VM. This is only meta information (defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in template is not sorted, then Proxmox will always report a difference on the resource. You may use the `ignore_changes` lifecycle meta-argument to ignore changes to this attribute. -* `template` - (Optional) Whether to create a template (defaults to `false`). -* `timeout_clone` - (Optional) Timeout for cloning a VM in seconds (defaults to 1800). -* `timeout_move_disk` - (Optional) Timeout for moving the disk of a VM in seconds (defaults to 1800). -* `timeout_reboot` - (Optional) Timeout for rebooting a VM in seconds (defaults to 1800). -* `timeout_shutdown_vm` - (Optional) Timeout for shutting down a VM in seconds (defaults to 1800). -* `timeout_start_vm` - (Optional) Timeout for starting a VM in seconds (defaults to 1800). -* `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 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. -* `vm_id` - (Optional) The VM identifier. + - `i440fx` - Standard PC (i440FX + PIIX, 1996). + - `q35` - Standard PC (Q35 + ICH9, 2009). +- `memory` - (Optional) The memory configuration. + - `dedicated` - (Optional) The dedicated memory in megabytes (defaults + to `512`). + - `floating` - (Optional) The floating memory in megabytes (defaults + to `0`). + - `shared` - (Optional) The shared memory in megabytes (defaults to `0`). +- `name` - (Optional) The virtual machine name. +- `network_device` - (Optional) A network device (multiple blocks supported). + - `bridge` - (Optional) The name of the network bridge (defaults + to `vmbr0`). + - `enabled` - (Optional) Whether to enable the network device (defaults + to `true`). + - `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. + - `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. + - `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. +- `started` - (Optional) Whether to start the virtual machine (defaults + to `true`). +- `tablet_device` - (Optional) Whether to enable the USB tablet device (defaults + to `true`). +- `tags` - (Optional) A list of tags of the VM. This is only meta information ( + defaults to `[]`). Note: Proxmox always sorts the VM tags. If the list in + template is not sorted, then Proxmox will always report a difference on the + resource. You may use the `ignore_changes` lifecycle meta-argument to ignore + changes to this attribute. +- `template` - (Optional) Whether to create a template (defaults to `false`). +- `timeout_clone` - (Optional) Timeout for cloning a VM in seconds (defaults to + 1800). +- `timeout_move_disk` - (Optional) Timeout for moving the disk of a VM in + seconds (defaults to 1800). +- `timeout_reboot` - (Optional) Timeout for rebooting a VM in seconds (defaults + to 1800). +- `timeout_shutdown_vm` - (Optional) Timeout for shutting down a VM in seconds ( + defaults to 1800). +- `timeout_start_vm` - (Optional) Timeout for starting a VM in seconds (defaults + to 1800). +- `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 + 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. +- `vm_id` - (Optional) The VM identifier. ## Attribute Reference -* `ipv4_addresses` - The IPv4 addresses per network interface published by the QEMU agent (empty list - when `agent.enabled` is `false`) -* `ipv6_addresses` - The IPv6 addresses per network interface published by the QEMU agent (empty list - when `agent.enabled` is `false`) -* `mac_addresses` - The MAC addresses published by the QEMU agent with fallback to the network device configuration, if - the agent is disabled -* `network_interface_names` - The network interface names published by the QEMU agent (empty list when `agent.enabled` - is `false`) +- `ipv4_addresses` - The IPv4 addresses per network interface published by the + QEMU agent (empty list when `agent.enabled` is `false`) +- `ipv6_addresses` - The IPv6 addresses per network interface published by the + QEMU agent (empty list when `agent.enabled` is `false`) +- `mac_addresses` - The MAC addresses published by the QEMU agent with fallback + to the network device configuration, if the agent is disabled +- `network_interface_names` - The network interface names published by the QEMU + agent (empty list when `agent.enabled` is `false`) ## Important Notes -When cloning an existing virtual machine, whether it's a template or not, the resource will only detect changes to the -arguments which are not set to their default values. +When cloning an existing virtual machine, whether it's a template or not, the +resource will only detect changes to the arguments which are not set to their +default values. -Furthermore, when cloning from one node to a different one, the behavior changes depening on the datastores of the source VM. If at least one non-shared datastore is used, the VM is first cloned to the source node before being migrated to the target node. This circumvents a limitation in the Proxmox clone API. +Furthermore, when cloning from one node to a different one, the behavior changes +depening on the datastores of the source VM. If at least one non-shared +datastore is used, the VM is first cloned to the source node before being +migrated to the target node. This circumvents a limitation in the Proxmox clone +API. -**Note:** Because the migration step after the clone tries to preserve the used datastores by their name, it may fail if a datastore used in the source VM is not available on the target node (e.g. `local-lvm` is used on the source node in the VM but no `local-lvm` datastore is availabel on the target node). In this case, it is recommended to set the `datastore_id` argument in the `clone` block to force the migration step to migrate all disks to a specific datastore on the target node. If you need certain disks to be on specific datastores, set the `datastore_id` argument of the disks in the `disks` block to move the disks to the correct datastore after the cloning and migrating succeeded. +**Note:** Because the migration step after the clone tries to preserve the used +datastores by their name, it may fail if a datastore used in the source VM is +not available on the target node (e.g. `local-lvm` is used on the source node in +the VM but no `local-lvm` datastore is availabel on the target node). In this +case, it is recommended to set the `datastore_id` argument in the `clone` block +to force the migration step to migrate all disks to a specific datastore on the +target node. If you need certain disks to be on specific datastores, set +the `datastore_id` argument of the disks in the `disks` block to move the disks +to the correct datastore after the cloning and migrating succeeded. diff --git a/proxmox/common_types.go b/proxmox/common_types.go index da2d8646..7fb17968 100644 --- a/proxmox/common_types.go +++ b/proxmox/common_types.go @@ -63,7 +63,6 @@ func (r *CustomCommaSeparatedList) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -82,7 +81,6 @@ func (r *CustomInt) UnmarshalJSON(b []byte) error { } i, err := strconv.ParseInt(s, 10, 32) - if err != nil { return err } @@ -104,7 +102,6 @@ func (r *CustomLineBreakSeparatedList) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -130,7 +127,6 @@ func (r *CustomPrivileges) UnmarshalJSON(b []byte) error { var privileges interface{} err := json.Unmarshal(b, &privileges) - if err != nil { return err } @@ -167,7 +163,6 @@ func (r CustomTimestamp) MarshalJSON() ([]byte, error) { func (r *CustomTimestamp) UnmarshalJSON(b []byte) error { s := string(b) i, err := strconv.ParseInt(s, 10, 64) - if err != nil { return err } diff --git a/proxmox/virtual_environment_acl.go b/proxmox/virtual_environment_acl.go index f76858e5..1d59b027 100644 --- a/proxmox/virtual_environment_acl.go +++ b/proxmox/virtual_environment_acl.go @@ -11,10 +11,11 @@ import ( ) // GetACL retrieves the access control list. -func (c *VirtualEnvironmentClient) GetACL(ctx context.Context) ([]*VirtualEnvironmentACLGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetACL( + ctx context.Context, +) ([]*VirtualEnvironmentACLGetResponseData, error) { resBody := &VirtualEnvironmentACLGetResponseBody{} err := c.DoRequest(ctx, hmGET, "access/acl", nil, resBody) - if err != nil { return nil, err } @@ -31,6 +32,9 @@ func (c *VirtualEnvironmentClient) GetACL(ctx context.Context) ([]*VirtualEnviro } // UpdateACL updates the access control list. -func (c *VirtualEnvironmentClient) UpdateACL(ctx context.Context, d *VirtualEnvironmentACLUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateACL( + ctx context.Context, + d *VirtualEnvironmentACLUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPUT, "access/acl", d, nil) } diff --git a/proxmox/virtual_environment_acl_types.go b/proxmox/virtual_environment_acl_types.go index 7b3e453c..419cfb39 100644 --- a/proxmox/virtual_environment_acl_types.go +++ b/proxmox/virtual_environment_acl_types.go @@ -20,10 +20,10 @@ type VirtualEnvironmentACLGetResponseData struct { // VirtualEnvironmentACLUpdateRequestBody contains the data for an access control list update request. type VirtualEnvironmentACLUpdateRequestBody struct { - Delete *CustomBool `json:"delete,omitempty" url:"delete,omitempty,int"` - Groups []string `json:"groups,omitempty" url:"groups,omitempty,comma"` - Path string `json:"path" url:"path"` + Delete *CustomBool `json:"delete,omitempty" url:"delete,omitempty,int"` + Groups []string `json:"groups,omitempty" url:"groups,omitempty,comma"` + Path string `json:"path" url:"path"` Propagate *CustomBool `json:"propagate,omitempty" url:"propagate,omitempty,int"` - Roles []string `json:"roles" url:"roles,comma"` - Users []string `json:"users,omitempty" url:"users,omitempty,comma"` + Roles []string `json:"roles" url:"roles,comma"` + Users []string `json:"users,omitempty" url:"users,omitempty,comma"` } diff --git a/proxmox/virtual_environment_authentication.go b/proxmox/virtual_environment_authentication.go index 099d28cf..c31f5cd0 100644 --- a/proxmox/virtual_environment_authentication.go +++ b/proxmox/virtual_environment_authentication.go @@ -6,6 +6,7 @@ package proxmox import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -19,7 +20,7 @@ const ( ) // Authenticate authenticates against the specified endpoint. -func (c *VirtualEnvironmentClient) Authenticate(reset bool) error { +func (c *VirtualEnvironmentClient) Authenticate(ctx context.Context, reset bool) error { if c.authenticationData != nil && !reset { return nil } @@ -41,8 +42,12 @@ func (c *VirtualEnvironmentClient) Authenticate(reset bool) error { )) } - req, err := http.NewRequest(hmPOST, fmt.Sprintf("%s/%s/access/ticket", c.Endpoint, basePathJSONAPI), reqBody) - + req, err := http.NewRequestWithContext( + ctx, + hmPOST, + fmt.Sprintf("%s/%s/access/ticket", c.Endpoint, basePathJSONAPI), + reqBody, + ) if err != nil { return errors.New("failed to create authentication request") } @@ -50,7 +55,6 @@ func (c *VirtualEnvironmentClient) Authenticate(reset bool) error { req.Header.Add("Content-Type", "application/x-www-form-urlencoded") res, err := c.httpClient.Do(req) - if err != nil { return errors.New("failed to retrieve authentication response") } @@ -73,7 +77,9 @@ func (c *VirtualEnvironmentClient) Authenticate(reset bool) error { } if resBody.Data.CSRFPreventionToken == nil { - return errors.New("the server did not include a CSRF prevention token in the authentication response") + return errors.New( + "the server did not include a CSRF prevention token in the authentication response", + ) } if resBody.Data.Ticket == nil { @@ -90,9 +96,8 @@ func (c *VirtualEnvironmentClient) Authenticate(reset bool) error { } // AuthenticateRequest adds authentication data to a new request. -func (c *VirtualEnvironmentClient) AuthenticateRequest(req *http.Request) error { - err := c.Authenticate(false) - +func (c *VirtualEnvironmentClient) AuthenticateRequest(ctx context.Context, req *http.Request) error { + err := c.Authenticate(ctx, false) if err != nil { return err } diff --git a/proxmox/virtual_environment_certificate.go b/proxmox/virtual_environment_certificate.go index e5dcbb02..91c3ebfe 100644 --- a/proxmox/virtual_environment_certificate.go +++ b/proxmox/virtual_environment_certificate.go @@ -12,15 +12,33 @@ import ( ) // DeleteCertificate deletes the custom certificate for a node. -func (c *VirtualEnvironmentClient) DeleteCertificate(ctx context.Context, nodeName string, d *VirtualEnvironmentCertificateDeleteRequestBody) error { - return c.DoRequest(ctx, hmDELETE, fmt.Sprintf("nodes/%s/certificates/custom", url.PathEscape(nodeName)), d, nil) +func (c *VirtualEnvironmentClient) DeleteCertificate( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentCertificateDeleteRequestBody, +) error { + return c.DoRequest( + ctx, + hmDELETE, + fmt.Sprintf("nodes/%s/certificates/custom", url.PathEscape(nodeName)), + d, + nil, + ) } // ListCertificates retrieves the list of certificates for a node. -func (c *VirtualEnvironmentClient) ListCertificates(ctx context.Context, nodeName string) (*[]VirtualEnvironmentCertificateListResponseData, error) { +func (c *VirtualEnvironmentClient) ListCertificates( + ctx context.Context, + nodeName string, +) (*[]VirtualEnvironmentCertificateListResponseData, error) { resBody := &VirtualEnvironmentCertificateListResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/certificates/info", url.PathEscape(nodeName)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/certificates/info", url.PathEscape(nodeName)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -33,6 +51,16 @@ func (c *VirtualEnvironmentClient) ListCertificates(ctx context.Context, nodeNam } // UpdateCertificate updates the custom certificate for a node. -func (c *VirtualEnvironmentClient) UpdateCertificate(ctx context.Context, nodeName string, d *VirtualEnvironmentCertificateUpdateRequestBody) error { - return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/certificates/custom", url.PathEscape(nodeName)), d, nil) +func (c *VirtualEnvironmentClient) UpdateCertificate( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentCertificateUpdateRequestBody, +) error { + return c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/certificates/custom", url.PathEscape(nodeName)), + d, + nil, + ) } diff --git a/proxmox/virtual_environment_certificate_types.go b/proxmox/virtual_environment_certificate_types.go index 38441d00..77148196 100644 --- a/proxmox/virtual_environment_certificate_types.go +++ b/proxmox/virtual_environment_certificate_types.go @@ -30,8 +30,8 @@ type VirtualEnvironmentCertificateListResponseData struct { // VirtualEnvironmentCertificateUpdateRequestBody contains the body for a custom certificate update request. type VirtualEnvironmentCertificateUpdateRequestBody struct { - Certificates string `json:"certificates" url:"certificates"` - Force *CustomBool `json:"force,omitempty" url:"force,omitempty,int"` - PrivateKey *string `json:"key,omitempty" url:"key,omitempty"` + Certificates string `json:"certificates" url:"certificates"` + Force *CustomBool `json:"force,omitempty" url:"force,omitempty,int"` + PrivateKey *string `json:"key,omitempty" url:"key,omitempty"` Restart *CustomBool `json:"restart,omitempty" url:"restart,omitempty,int"` } diff --git a/proxmox/virtual_environment_client.go b/proxmox/virtual_environment_client.go index c9fb5591..0bce7ac1 100644 --- a/proxmox/virtual_environment_client.go +++ b/proxmox/virtual_environment_client.go @@ -22,23 +22,33 @@ import ( ) // NewVirtualEnvironmentClient creates and initializes a VirtualEnvironmentClient instance. -func NewVirtualEnvironmentClient(endpoint, username, password, otp string, insecure bool) (*VirtualEnvironmentClient, error) { +func NewVirtualEnvironmentClient( + endpoint, username, password, otp string, + insecure bool, +) (*VirtualEnvironmentClient, error) { u, err := url.ParseRequestURI(endpoint) - if err != nil { - return nil, errors.New("you must specify a valid endpoint for the Proxmox Virtual Environment API (valid: https://host:port/)") + return nil, errors.New( + "you must specify a valid endpoint for the Proxmox Virtual Environment API (valid: https://host:port/)", + ) } if u.Scheme != "https" { - return nil, errors.New("you must specify a secure endpoint for the Proxmox Virtual Environment API (valid: https://host:port/)") + return nil, errors.New( + "you must specify a secure endpoint for the Proxmox Virtual Environment API (valid: https://host:port/)", + ) } if password == "" { - return nil, errors.New("you must specify a password for the Proxmox Virtual Environment API") + return nil, errors.New( + "you must specify a password for the Proxmox Virtual Environment API", + ) } if username == "" { - return nil, errors.New("you must specify a username for the Proxmox Virtual Environment API") + return nil, errors.New( + "you must specify a username for the Proxmox Virtual Environment API", + ) } var pOTP *string @@ -66,7 +76,11 @@ func NewVirtualEnvironmentClient(endpoint, username, password, otp string, insec } // DoRequest performs a HTTP request against a JSON API endpoint. -func (c *VirtualEnvironmentClient) DoRequest(ctx context.Context, method, path string, requestBody, responseBody interface{}) error { +func (c *VirtualEnvironmentClient) DoRequest( + ctx context.Context, + method, path string, + requestBody, responseBody interface{}, +) error { var reqBodyReader io.Reader var reqContentLength *int64 @@ -101,7 +115,6 @@ func (c *VirtualEnvironmentClient) DoRequest(ctx context.Context, method, path s }) } else { v, err := query.Values(requestBody) - if err != nil { fErr := fmt.Errorf("failed to encode HTTP %s request (path: %s) - Reason: %s", method, modifiedPath, err.Error()) tflog.Warn(ctx, fErr.Error()) @@ -133,10 +146,19 @@ func (c *VirtualEnvironmentClient) DoRequest(ctx context.Context, method, path s reqBodyReader = new(bytes.Buffer) } - req, err := http.NewRequest(method, fmt.Sprintf("%s/%s/%s", c.Endpoint, basePathJSONAPI, modifiedPath), reqBodyReader) - + req, err := http.NewRequestWithContext( + ctx, + method, + fmt.Sprintf("%s/%s/%s", c.Endpoint, basePathJSONAPI, modifiedPath), + reqBodyReader, + ) if err != nil { - fErr := fmt.Errorf("failed to create HTTP %s request (path: %s) - Reason: %s", method, modifiedPath, err.Error()) + fErr := fmt.Errorf( + "failed to create HTTP %s request (path: %s) - Reason: %w", + method, + modifiedPath, + err, + ) tflog.Warn(ctx, fErr.Error()) return fErr } @@ -151,7 +173,7 @@ func (c *VirtualEnvironmentClient) DoRequest(ctx context.Context, method, path s req.Header.Add("Content-Type", reqBodyType) } - err = c.AuthenticateRequest(req) + err = c.AuthenticateRequest(ctx, req) if err != nil { tflog.Warn(ctx, err.Error()) @@ -159,9 +181,13 @@ func (c *VirtualEnvironmentClient) DoRequest(ctx context.Context, method, path s } res, err := c.httpClient.Do(req) - if err != nil { - fErr := fmt.Errorf("failed to perform HTTP %s request (path: %s) - Reason: %s", method, modifiedPath, err.Error()) + fErr := fmt.Errorf( + "failed to perform HTTP %s request (path: %s) - Reason: %w", + method, + modifiedPath, + err, + ) tflog.Warn(ctx, fErr.Error()) return fErr } @@ -185,7 +211,12 @@ func (c *VirtualEnvironmentClient) DoRequest(ctx context.Context, method, path s err = json.NewDecoder(res.Body).Decode(responseBody) if err != nil { - fErr := fmt.Errorf("failed to decode HTTP %s response (path: %s) - Reason: %s", method, modifiedPath, err.Error()) + fErr := fmt.Errorf( + "failed to decode HTTP %s response (path: %s) - Reason: %w", + method, + modifiedPath, + err, + ) tflog.Warn(ctx, fErr.Error()) return fErr } diff --git a/proxmox/virtual_environment_cluster.go b/proxmox/virtual_environment_cluster.go index 939cbc27..62151f6a 100644 --- a/proxmox/virtual_environment_cluster.go +++ b/proxmox/virtual_environment_cluster.go @@ -17,7 +17,6 @@ func (c *VirtualEnvironmentClient) GetClusterNextID(ctx context.Context, vmID *i resBody := &VirtualEnvironmentClusterNextIDResponseBody{} err := c.DoRequest(ctx, hmGET, "cluster/nextid", reqBody, resBody) - if err != nil { return nil, err } diff --git a/proxmox/virtual_environment_cluster_alias.go b/proxmox/virtual_environment_cluster_alias.go index 4272b96b..9d42767c 100644 --- a/proxmox/virtual_environment_cluster_alias.go +++ b/proxmox/virtual_environment_cluster_alias.go @@ -13,20 +13,37 @@ import ( ) // CreateAlias create an alias -func (c *VirtualEnvironmentClient) CreateAlias(ctx context.Context, d *VirtualEnvironmentClusterAliasCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreateAlias( + ctx context.Context, + d *VirtualEnvironmentClusterAliasCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, "cluster/firewall/aliases", d, nil) } // DeleteAlias delete an alias func (c *VirtualEnvironmentClient) DeleteAlias(ctx context.Context, id string) error { - return c.DoRequest(ctx, hmDELETE, fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), nil, nil) + return c.DoRequest( + ctx, + hmDELETE, + fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), + nil, + nil, + ) } // GetAlias retrieves an alias -func (c *VirtualEnvironmentClient) GetAlias(ctx context.Context, id string) (*VirtualEnvironmentClusterAliasGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetAlias( + ctx context.Context, + id string, +) (*VirtualEnvironmentClusterAliasGetResponseData, error) { resBody := &VirtualEnvironmentClusterAliasGetResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -39,10 +56,11 @@ func (c *VirtualEnvironmentClient) GetAlias(ctx context.Context, id string) (*Vi } // ListAliases retrieves a list of aliases. -func (c *VirtualEnvironmentClient) ListAliases(ctx context.Context) ([]*VirtualEnvironmentClusterAliasGetResponseData, error) { +func (c *VirtualEnvironmentClient) ListAliases( + ctx context.Context, +) ([]*VirtualEnvironmentClusterAliasGetResponseData, error) { resBody := &VirtualEnvironmentClusterAliasListResponseBody{} err := c.DoRequest(ctx, hmGET, "cluster/firewall/aliases", nil, resBody) - if err != nil { return nil, err } @@ -59,6 +77,16 @@ func (c *VirtualEnvironmentClient) ListAliases(ctx context.Context) ([]*VirtualE } // UpdateAlias updates an alias. -func (c *VirtualEnvironmentClient) UpdateAlias(ctx context.Context, id string, d *VirtualEnvironmentClusterAliasUpdateRequestBody) error { - return c.DoRequest(ctx, hmPUT, fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), d, nil) +func (c *VirtualEnvironmentClient) UpdateAlias( + ctx context.Context, + id string, + d *VirtualEnvironmentClusterAliasUpdateRequestBody, +) error { + return c.DoRequest( + ctx, + hmPUT, + fmt.Sprintf("cluster/firewall/aliases/%s", url.PathEscape(id)), + d, + nil, + ) } diff --git a/proxmox/virtual_environment_cluster_alias_types.go b/proxmox/virtual_environment_cluster_alias_types.go index 20d41fab..5bc7b0dc 100644 --- a/proxmox/virtual_environment_cluster_alias_types.go +++ b/proxmox/virtual_environment_cluster_alias_types.go @@ -7,8 +7,8 @@ package proxmox // VirtualEnvironmentClusterAliasCreateRequestBody contains the data for an alias create request. type VirtualEnvironmentClusterAliasCreateRequestBody struct { Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - Name string `json:"name" url:"name"` - CIDR string `json:"cidr" url:"cidr"` + Name string `json:"name" url:"name"` + CIDR string `json:"cidr" url:"cidr"` } // VirtualEnvironmentClusterAliasGetResponseBody contains the body from an alias get response. @@ -19,10 +19,10 @@ type VirtualEnvironmentClusterAliasGetResponseBody struct { // VirtualEnvironmentClusterAliasGetResponseData contains the data from an alias get response. type VirtualEnvironmentClusterAliasGetResponseData struct { Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - Name string `json:"name" url:"name"` - CIDR string `json:"cidr" url:"cidr"` - Digest *string `json:"digest" url:"digest"` - IPVersion int `json:"ipversion" url:"ipversion"` + Name string `json:"name" url:"name"` + CIDR string `json:"cidr" url:"cidr"` + Digest *string `json:"digest" url:"digest"` + IPVersion int `json:"ipversion" url:"ipversion"` } // VirtualEnvironmentClusterAliasListResponseBody contains the data from an alias get response. @@ -33,6 +33,6 @@ type VirtualEnvironmentClusterAliasListResponseBody struct { // VirtualEnvironmentClusterAliasUpdateRequestBody contains the data for an alias update request. type VirtualEnvironmentClusterAliasUpdateRequestBody struct { Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - ReName string `json:"rename" url:"rename"` - CIDR string `json:"cidr" url:"cidr"` + ReName string `json:"rename" url:"rename"` + CIDR string `json:"cidr" url:"cidr"` } diff --git a/proxmox/virtual_environment_cluster_ipset.go b/proxmox/virtual_environment_cluster_ipset.go index 81d588b4..72ec4c68 100644 --- a/proxmox/virtual_environment_cluster_ipset.go +++ b/proxmox/virtual_environment_cluster_ipset.go @@ -13,35 +13,75 @@ import ( ) // CreateIPSet create an IPSet -func (c *VirtualEnvironmentClient) CreateIPSet(ctx context.Context, d *VirtualEnvironmentClusterIPSetCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreateIPSet( + ctx context.Context, + d *VirtualEnvironmentClusterIPSetCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, "cluster/firewall/ipset", d, nil) } // AddCIDRToIPSet adds IP or Network to IPSet -func (c *VirtualEnvironmentClient) AddCIDRToIPSet(ctx context.Context, id string, d *VirtualEnvironmentClusterIPSetGetResponseData) error { - return c.DoRequest(ctx, hmPOST, fmt.Sprintf("cluster/firewall/ipset/%s/", url.PathEscape(id)), d, nil) +func (c *VirtualEnvironmentClient) AddCIDRToIPSet( + ctx context.Context, + id string, + d *VirtualEnvironmentClusterIPSetGetResponseData, +) error { + return c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("cluster/firewall/ipset/%s/", url.PathEscape(id)), + d, + nil, + ) } // UpdateIPSet updates an IPSet. -func (c *VirtualEnvironmentClient) UpdateIPSet(ctx context.Context, d *VirtualEnvironmentClusterIPSetUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateIPSet( + ctx context.Context, + d *VirtualEnvironmentClusterIPSetUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, "cluster/firewall/ipset/", d, nil) } // DeleteIPSet delete an IPSet func (c *VirtualEnvironmentClient) DeleteIPSet(ctx context.Context, id string) error { - return c.DoRequest(ctx, hmDELETE, fmt.Sprintf("cluster/firewall/ipset/%s", url.PathEscape(id)), nil, nil) + return c.DoRequest( + ctx, + hmDELETE, + fmt.Sprintf("cluster/firewall/ipset/%s", url.PathEscape(id)), + nil, + nil, + ) } // DeleteIPSetContent remove IP or Network from IPSet. -func (c *VirtualEnvironmentClient) DeleteIPSetContent(ctx context.Context, id string, cidr string) error { - return c.DoRequest(ctx, hmDELETE, fmt.Sprintf("cluster/firewall/ipset/%s/%s", url.PathEscape(id), url.PathEscape(cidr)), nil, nil) +func (c *VirtualEnvironmentClient) DeleteIPSetContent( + ctx context.Context, + id string, + cidr string, +) error { + return c.DoRequest( + ctx, + hmDELETE, + fmt.Sprintf("cluster/firewall/ipset/%s/%s", url.PathEscape(id), url.PathEscape(cidr)), + nil, + nil, + ) } // GetListIPSetContent retrieve a list of IPSet content -func (c *VirtualEnvironmentClient) GetListIPSetContent(ctx context.Context, id string) ([]*VirtualEnvironmentClusterIPSetGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetListIPSetContent( + ctx context.Context, + id string, +) ([]*VirtualEnvironmentClusterIPSetGetResponseData, error) { resBody := &VirtualEnvironmentClusterIPSetGetResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("cluster/firewall/ipset/%s", url.PathEscape(id)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("cluster/firewall/ipset/%s", url.PathEscape(id)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -54,10 +94,11 @@ func (c *VirtualEnvironmentClient) GetListIPSetContent(ctx context.Context, id s } // GetListIPSets retrieves list of IPSets. -func (c *VirtualEnvironmentClient) GetListIPSets(ctx context.Context) (*VirtualEnvironmentClusterIPSetListResponseBody, error) { +func (c *VirtualEnvironmentClient) GetListIPSets( + ctx context.Context, +) (*VirtualEnvironmentClusterIPSetListResponseBody, error) { resBody := &VirtualEnvironmentClusterIPSetListResponseBody{} err := c.DoRequest(ctx, hmGET, "cluster/firewall/ipset", nil, resBody) - if err != nil { return nil, err } diff --git a/proxmox/virtual_environment_cluster_ipset_types.go b/proxmox/virtual_environment_cluster_ipset_types.go index 3dba5ae6..32e93a43 100644 --- a/proxmox/virtual_environment_cluster_ipset_types.go +++ b/proxmox/virtual_environment_cluster_ipset_types.go @@ -16,7 +16,7 @@ type VirtualEnvironmentClusterIPSetListResponseBody struct { // VirtualEnvironmentClusterIPSetCreateRequestBody contains the data for an IPSet create request type VirtualEnvironmentClusterIPSetCreateRequestBody struct { Comment string `json:"comment,omitempty" url:"comment,omitempty"` - Name string `json:"name" url:"name"` + Name string `json:"name" url:"name"` } // VirtualEnvironmentClusterIPSetGetResponseBody contains the body from an IPSet get response. @@ -26,22 +26,22 @@ type VirtualEnvironmentClusterIPSetGetResponseBody struct { // VirtualEnvironmentClusterIPSetGetResponseData contains the data from an IPSet get response. type VirtualEnvironmentClusterIPSetGetResponseData struct { - CIDR string `json:"cidr" url:"cidr"` + CIDR string `json:"cidr" url:"cidr"` NoMatch *CustomBool `json:"nomatch,omitempty" url:"nomatch,omitempty,int"` Comment string `json:"comment,omitempty" url:"comment,omitempty"` } // VirtualEnvironmentClusterIPSetUpdateRequestBody contains the data for an IPSet update request. type VirtualEnvironmentClusterIPSetUpdateRequestBody struct { - ReName string `json:"rename,omitempty" url:"rename,omitempty"` + ReName string `json:"rename,omitempty" url:"rename,omitempty"` Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - Name string `json:"name" url:"name"` + Name string `json:"name" url:"name"` } // VirtualEnvironmentClusterIPSetListResponseData contains list of IPSets from type VirtualEnvironmentClusterIPSetListResponseData struct { Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - Name string `json:"name" url:"name"` + Name string `json:"name" url:"name"` } // VirtualEnvironmentClusterIPSetContent is an array of VirtualEnvironmentClusterIPSetGetResponseData. diff --git a/proxmox/virtual_environment_container.go b/proxmox/virtual_environment_container.go index a99ea263..998b16e2 100644 --- a/proxmox/virtual_environment_container.go +++ b/proxmox/virtual_environment_container.go @@ -14,25 +14,59 @@ import ( ) // CloneContainer clones a container. -func (c *VirtualEnvironmentClient) CloneContainer(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentContainerCloneRequestBody) error { - return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/lxc/%d/clone", url.PathEscape(nodeName), vmID), d, nil) +func (c *VirtualEnvironmentClient) CloneContainer( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentContainerCloneRequestBody, +) error { + return c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/lxc/%d/clone", url.PathEscape(nodeName), vmID), + d, + nil, + ) } // CreateContainer creates a container. -func (c *VirtualEnvironmentClient) CreateContainer(ctx context.Context, nodeName string, d *VirtualEnvironmentContainerCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreateContainer( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentContainerCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/lxc", url.PathEscape(nodeName)), d, nil) } // DeleteContainer deletes a container. -func (c *VirtualEnvironmentClient) DeleteContainer(ctx context.Context, nodeName string, vmID int) error { - return c.DoRequest(ctx, hmDELETE, fmt.Sprintf("nodes/%s/lxc/%d", url.PathEscape(nodeName), vmID), nil, nil) +func (c *VirtualEnvironmentClient) DeleteContainer( + ctx context.Context, + nodeName string, + vmID int, +) error { + return c.DoRequest( + ctx, + hmDELETE, + fmt.Sprintf("nodes/%s/lxc/%d", url.PathEscape(nodeName), vmID), + nil, + nil, + ) } // GetContainer retrieves a container. -func (c *VirtualEnvironmentClient) GetContainer(ctx context.Context, nodeName string, vmID int) (*VirtualEnvironmentContainerGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetContainer( + ctx context.Context, + nodeName string, + vmID int, +) (*VirtualEnvironmentContainerGetResponseData, error) { resBody := &VirtualEnvironmentContainerGetResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/lxc/%d/config", url.PathEscape(nodeName), vmID), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/lxc/%d/config", url.PathEscape(nodeName), vmID), + nil, + resBody, + ) if err != nil { return nil, err } @@ -45,10 +79,19 @@ func (c *VirtualEnvironmentClient) GetContainer(ctx context.Context, nodeName st } // GetContainerStatus retrieves the status for a container. -func (c *VirtualEnvironmentClient) GetContainerStatus(ctx context.Context, nodeName string, vmID int) (*VirtualEnvironmentContainerGetStatusResponseData, error) { +func (c *VirtualEnvironmentClient) GetContainerStatus( + ctx context.Context, + nodeName string, + vmID int, +) (*VirtualEnvironmentContainerGetStatusResponseData, error) { resBody := &VirtualEnvironmentContainerGetStatusResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/lxc/%d/status/current", url.PathEscape(nodeName), vmID), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/lxc/%d/status/current", url.PathEscape(nodeName), vmID), + nil, + resBody, + ) if err != nil { return nil, err } @@ -61,32 +104,94 @@ func (c *VirtualEnvironmentClient) GetContainerStatus(ctx context.Context, nodeN } // RebootContainer reboots a container. -func (c *VirtualEnvironmentClient) RebootContainer(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentContainerRebootRequestBody) error { - return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/lxc/%d/status/reboot", url.PathEscape(nodeName), vmID), d, nil) +func (c *VirtualEnvironmentClient) RebootContainer( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentContainerRebootRequestBody, +) error { + return c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/lxc/%d/status/reboot", url.PathEscape(nodeName), vmID), + d, + nil, + ) } // ShutdownContainer shuts down a container. -func (c *VirtualEnvironmentClient) ShutdownContainer(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentContainerShutdownRequestBody) error { - return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/lxc/%d/status/shutdown", url.PathEscape(nodeName), vmID), d, nil) +func (c *VirtualEnvironmentClient) ShutdownContainer( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentContainerShutdownRequestBody, +) error { + return c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/lxc/%d/status/shutdown", url.PathEscape(nodeName), vmID), + d, + nil, + ) } // StartContainer starts a container. -func (c *VirtualEnvironmentClient) StartContainer(ctx context.Context, nodeName string, vmID int) error { - return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/lxc/%d/status/start", url.PathEscape(nodeName), vmID), nil, nil) +func (c *VirtualEnvironmentClient) StartContainer( + ctx context.Context, + nodeName string, + vmID int, +) error { + return c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/lxc/%d/status/start", url.PathEscape(nodeName), vmID), + nil, + nil, + ) } // StopContainer stops a container immediately. -func (c *VirtualEnvironmentClient) StopContainer(ctx context.Context, nodeName string, vmID int) error { - return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/lxc/%d/status/stop", url.PathEscape(nodeName), vmID), nil, nil) +func (c *VirtualEnvironmentClient) StopContainer( + ctx context.Context, + nodeName string, + vmID int, +) error { + return c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/lxc/%d/status/stop", url.PathEscape(nodeName), vmID), + nil, + nil, + ) } // UpdateContainer updates a container. -func (c *VirtualEnvironmentClient) UpdateContainer(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentContainerUpdateRequestBody) error { - return c.DoRequest(ctx, hmPUT, fmt.Sprintf("nodes/%s/lxc/%d/config", url.PathEscape(nodeName), vmID), d, nil) +func (c *VirtualEnvironmentClient) UpdateContainer( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentContainerUpdateRequestBody, +) error { + return c.DoRequest( + ctx, + hmPUT, + fmt.Sprintf("nodes/%s/lxc/%d/config", url.PathEscape(nodeName), vmID), + d, + nil, + ) } // WaitForContainerState waits for a container to reach a specific state. -func (c *VirtualEnvironmentClient) WaitForContainerState(ctx context.Context, nodeName string, vmID int, state string, timeout int, delay int) error { +// +//nolint:dupl +func (c *VirtualEnvironmentClient) WaitForContainerState( + ctx context.Context, + nodeName string, + vmID int, + state string, + timeout int, + delay int, +) error { state = strings.ToLower(state) timeDelay := int64(delay) @@ -97,7 +202,6 @@ func (c *VirtualEnvironmentClient) WaitForContainerState(ctx context.Context, no for timeElapsed.Seconds() < timeMax { if int64(timeElapsed.Seconds())%timeDelay == 0 { data, err := c.GetContainerStatus(ctx, nodeName, vmID) - if err != nil { return err } @@ -118,11 +222,24 @@ func (c *VirtualEnvironmentClient) WaitForContainerState(ctx context.Context, no } } - return fmt.Errorf("timeout while waiting for container \"%d\" to enter the state \"%s\"", vmID, state) + return fmt.Errorf( + "timeout while waiting for container \"%d\" to enter the state \"%s\"", + vmID, + state, + ) } // WaitForContainerLock waits for a container lock to be released. -func (c *VirtualEnvironmentClient) WaitForContainerLock(ctx context.Context, nodeName string, vmID int, timeout int, delay int, ignoreErrorResponse bool) error { +// +//nolint:dupl +func (c *VirtualEnvironmentClient) WaitForContainerLock( + ctx context.Context, + nodeName string, + vmID int, + timeout int, + delay int, + ignoreErrorResponse bool, +) error { timeDelay := int64(delay) timeMax := float64(timeout) timeStart := time.Now() diff --git a/proxmox/virtual_environment_container_types.go b/proxmox/virtual_environment_container_types.go index bd0b2982..ef43550c 100644 --- a/proxmox/virtual_environment_container_types.go +++ b/proxmox/virtual_environment_container_types.go @@ -14,81 +14,81 @@ import ( // VirtualEnvironmentContainerCloneRequestBody contains the data for an container clone request. type VirtualEnvironmentContainerCloneRequestBody struct { - BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` + BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` Description *string `json:"description,omitempty" url:"description,omitempty"` - FullCopy *CustomBool `json:"full,omitempty" url:"full,omitempty,int"` - Hostname *string `json:"hostname,omitempty" url:"hostname,omitempty"` - PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` - SnapshotName *string `json:"snapname,omitempty" url:"snapname,omitempty"` - TargetNodeName *string `json:"target,omitempty" url:"target,omitempty"` - TargetStorage *string `json:"storage,omitempty" url:"storage,omitempty"` - VMIDNew int `json:"newid" url:"newid"` + FullCopy *CustomBool `json:"full,omitempty" url:"full,omitempty,int"` + Hostname *string `json:"hostname,omitempty" url:"hostname,omitempty"` + PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` + SnapshotName *string `json:"snapname,omitempty" url:"snapname,omitempty"` + TargetNodeName *string `json:"target,omitempty" url:"target,omitempty"` + TargetStorage *string `json:"storage,omitempty" url:"storage,omitempty"` + VMIDNew int `json:"newid" url:"newid"` } // VirtualEnvironmentContainerCreateRequestBody contains the data for an user create request. type VirtualEnvironmentContainerCreateRequestBody struct { - BandwidthLimit *float64 `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` - ConsoleEnabled *CustomBool `json:"console,omitempty" url:"console,omitempty,int"` - ConsoleMode *string `json:"cmode,omitempty" url:"cmode,omitempty"` - CPUArchitecture *string `json:"arch,omitempty" url:"arch,omitempty"` - CPUCores *int `json:"cores,omitempty" url:"cores,omitempty"` - CPULimit *int `json:"cpulimit,omitempty" url:"cpulimit,omitempty"` - CPUUnits *int `json:"cpuunits,omitempty" url:"cpuunits,omitempty"` - DatastoreID *string `json:"storage,omitempty" url:"storage,omitempty"` - DedicatedMemory *int `json:"memory,omitempty" url:"memory,omitempty"` - Delete []string `json:"delete,omitempty" url:"delete,omitempty"` - Description *string `json:"description,omitempty" url:"description,omitempty"` - DNSDomain *string `json:"searchdomain,omitempty" url:"searchdomain,omitempty"` - DNSServer *string `json:"nameserver,omitempty" url:"nameserver,omitempty"` - Features *VirtualEnvironmentContainerCustomFeatures `json:"features,omitempty" url:"features,omitempty"` - Force *CustomBool `json:"force,omitempty" url:"force,omitempty,int"` - HookScript *string `json:"hookscript,omitempty" url:"hookscript,omitempty"` - Hostname *string `json:"hostname,omitempty" url:"hostname,omitempty"` + BandwidthLimit *float64 `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` + ConsoleEnabled *CustomBool `json:"console,omitempty" url:"console,omitempty,int"` + ConsoleMode *string `json:"cmode,omitempty" url:"cmode,omitempty"` + CPUArchitecture *string `json:"arch,omitempty" url:"arch,omitempty"` + CPUCores *int `json:"cores,omitempty" url:"cores,omitempty"` + CPULimit *int `json:"cpulimit,omitempty" url:"cpulimit,omitempty"` + CPUUnits *int `json:"cpuunits,omitempty" url:"cpuunits,omitempty"` + DatastoreID *string `json:"storage,omitempty" url:"storage,omitempty"` + DedicatedMemory *int `json:"memory,omitempty" url:"memory,omitempty"` + Delete []string `json:"delete,omitempty" url:"delete,omitempty"` + Description *string `json:"description,omitempty" url:"description,omitempty"` + DNSDomain *string `json:"searchdomain,omitempty" url:"searchdomain,omitempty"` + DNSServer *string `json:"nameserver,omitempty" url:"nameserver,omitempty"` + Features *VirtualEnvironmentContainerCustomFeatures `json:"features,omitempty" url:"features,omitempty"` + Force *CustomBool `json:"force,omitempty" url:"force,omitempty,int"` + HookScript *string `json:"hookscript,omitempty" url:"hookscript,omitempty"` + Hostname *string `json:"hostname,omitempty" url:"hostname,omitempty"` IgnoreUnpackErrors *CustomBool `json:"ignore-unpack-errors,omitempty" url:"force,omitempty,int"` - Lock *string `json:"lock,omitempty" url:"lock,omitempty,int"` - MountPoints VirtualEnvironmentContainerCustomMountPointArray `json:"mp,omitempty" url:"mp,omitempty,numbered"` - NetworkInterfaces VirtualEnvironmentContainerCustomNetworkInterfaceArray `json:"net,omitempty" url:"net,omitempty,numbered"` - OSTemplateFileVolume *string `json:"ostemplate,omitempty" url:"ostemplate,omitempty"` - OSType *string `json:"ostype,omitempty" url:"ostype,omitempty"` - Password *string `json:"password,omitempty" url:"password,omitempty"` - PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` - Protection *CustomBool `json:"protection,omitempty" url:"protection,omitempty,int"` - Restore *CustomBool `json:"restore,omitempty" url:"restore,omitempty,int"` - RootFS *VirtualEnvironmentContainerCustomRootFS `json:"rootfs,omitempty" url:"rootfs,omitempty"` - SSHKeys *VirtualEnvironmentContainerCustomSSHKeys `json:"ssh-public-keys,omitempty" url:"ssh-public-keys,omitempty"` - Start *CustomBool `json:"start,omitempty" url:"start,omitempty,int"` - StartOnBoot *CustomBool `json:"onboot,omitempty" url:"onboot,omitempty,int"` - StartupBehavior *VirtualEnvironmentContainerCustomStartupBehavior `json:"startup,omitempty" url:"startup,omitempty"` - Swap *int `json:"swap,omitempty" url:"swap,omitempty"` - Tags *string `json:"tags,omitempty" url:"tags,omitempty"` - Template *CustomBool `json:"template,omitempty" url:"template,omitempty,int"` - TTY *int `json:"tty,omitempty" url:"tty,omitempty"` - Unique *CustomBool `json:"unique,omitempty" url:"unique,omitempty,int"` - Unprivileged *CustomBool `json:"unprivileged,omitempty" url:"unprivileged,omitempty,int"` - VMID *int `json:"vmid,omitempty" url:"vmid,omitempty"` + Lock *string `json:"lock,omitempty" url:"lock,omitempty,int"` + MountPoints VirtualEnvironmentContainerCustomMountPointArray `json:"mp,omitempty" url:"mp,omitempty,numbered"` + NetworkInterfaces VirtualEnvironmentContainerCustomNetworkInterfaceArray `json:"net,omitempty" url:"net,omitempty,numbered"` + OSTemplateFileVolume *string `json:"ostemplate,omitempty" url:"ostemplate,omitempty"` + OSType *string `json:"ostype,omitempty" url:"ostype,omitempty"` + Password *string `json:"password,omitempty" url:"password,omitempty"` + PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` + Protection *CustomBool `json:"protection,omitempty" url:"protection,omitempty,int"` + Restore *CustomBool `json:"restore,omitempty" url:"restore,omitempty,int"` + RootFS *VirtualEnvironmentContainerCustomRootFS `json:"rootfs,omitempty" url:"rootfs,omitempty"` + SSHKeys *VirtualEnvironmentContainerCustomSSHKeys `json:"ssh-public-keys,omitempty" url:"ssh-public-keys,omitempty"` + Start *CustomBool `json:"start,omitempty" url:"start,omitempty,int"` + StartOnBoot *CustomBool `json:"onboot,omitempty" url:"onboot,omitempty,int"` + StartupBehavior *VirtualEnvironmentContainerCustomStartupBehavior `json:"startup,omitempty" url:"startup,omitempty"` + Swap *int `json:"swap,omitempty" url:"swap,omitempty"` + Tags *string `json:"tags,omitempty" url:"tags,omitempty"` + Template *CustomBool `json:"template,omitempty" url:"template,omitempty,int"` + TTY *int `json:"tty,omitempty" url:"tty,omitempty"` + Unique *CustomBool `json:"unique,omitempty" url:"unique,omitempty,int"` + Unprivileged *CustomBool `json:"unprivileged,omitempty" url:"unprivileged,omitempty,int"` + VMID *int `json:"vmid,omitempty" url:"vmid,omitempty"` } // VirtualEnvironmentContainerCustomFeatures contains the values for the "features" property. type VirtualEnvironmentContainerCustomFeatures struct { - FUSE *CustomBool `json:"fuse,omitempty" url:"fuse,omitempty,int"` - KeyControl *CustomBool `json:"keyctl,omitempty" url:"keyctl,omitempty,int"` - MountTypes *[]string `json:"mount,omitempty" url:"mount,omitempty"` + FUSE *CustomBool `json:"fuse,omitempty" url:"fuse,omitempty,int"` + KeyControl *CustomBool `json:"keyctl,omitempty" url:"keyctl,omitempty,int"` + MountTypes *[]string `json:"mount,omitempty" url:"mount,omitempty"` Nesting *CustomBool `json:"nesting,omitempty" url:"nesting,omitempty,int"` } // VirtualEnvironmentContainerCustomMountPoint contains the values for the "mp[n]" properties. type VirtualEnvironmentContainerCustomMountPoint struct { - ACL *CustomBool `json:"acl,omitempty" url:"acl,omitempty,int"` - Backup *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"` - DiskSize *string `json:"size,omitempty" url:"size,omitempty"` - Enabled bool `json:"-" url:"-"` + ACL *CustomBool `json:"acl,omitempty" url:"acl,omitempty,int"` + Backup *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"` + DiskSize *string `json:"size,omitempty" url:"size,omitempty"` + Enabled bool `json:"-" url:"-"` MountOptions *[]string `json:"mountoptions,omitempty" url:"mountoptions,omitempty"` - MountPoint string `json:"mp" url:"mp"` - Quota *CustomBool `json:"quota,omitempty" url:"quota,omitempty,int"` - ReadOnly *CustomBool `json:"ro,omitempty" url:"ro,omitempty,int"` - Replicate *CustomBool `json:"replicate,omitempty" url:"replicate,omitempty,int"` - Shared *CustomBool `json:"shared,omitempty" url:"shared,omitempty,int"` - Volume string `json:"volume" url:"volume"` + MountPoint string `json:"mp" url:"mp"` + Quota *CustomBool `json:"quota,omitempty" url:"quota,omitempty,int"` + ReadOnly *CustomBool `json:"ro,omitempty" url:"ro,omitempty,int"` + Replicate *CustomBool `json:"replicate,omitempty" url:"replicate,omitempty,int"` + Shared *CustomBool `json:"shared,omitempty" url:"shared,omitempty,int"` + Volume string `json:"volume" url:"volume"` } // VirtualEnvironmentContainerCustomMountPointArray is an array of VirtualEnvironmentContainerCustomMountPoint. @@ -96,20 +96,20 @@ type VirtualEnvironmentContainerCustomMountPointArray []VirtualEnvironmentContai // VirtualEnvironmentContainerCustomNetworkInterface contains the values for the "net[n]" properties. type VirtualEnvironmentContainerCustomNetworkInterface struct { - Bridge *string `json:"bridge,omitempty" url:"bridge,omitempty"` - Enabled bool `json:"-" url:"-"` + Bridge *string `json:"bridge,omitempty" url:"bridge,omitempty"` + Enabled bool `json:"-" url:"-"` Firewall *CustomBool `json:"firewall,omitempty" url:"firewall,omitempty,int"` - IPv4Address *string `json:"ip,omitempty" url:"ip,omitempty"` - IPv4Gateway *string `json:"gw,omitempty" url:"gw,omitempty"` - IPv6Address *string `json:"ip6,omitempty" url:"ip6,omitempty"` - IPv6Gateway *string `json:"gw6,omitempty" url:"gw6,omitempty"` - MACAddress *string `json:"hwaddr,omitempty" url:"hwaddr,omitempty"` - MTU *int `json:"mtu,omitempty" url:"mtu,omitempty"` - Name string `json:"name" url:"name"` - RateLimit *float64 `json:"rate,omitempty" url:"rate,omitempty"` - Tag *int `json:"tag,omitempty" url:"tag,omitempty"` - Trunks *[]int `json:"trunks,omitempty" url:"trunks,omitempty"` - Type *string `json:"type,omitempty" url:"type,omitempty"` + IPv4Address *string `json:"ip,omitempty" url:"ip,omitempty"` + IPv4Gateway *string `json:"gw,omitempty" url:"gw,omitempty"` + IPv6Address *string `json:"ip6,omitempty" url:"ip6,omitempty"` + IPv6Gateway *string `json:"gw6,omitempty" url:"gw6,omitempty"` + MACAddress *string `json:"hwaddr,omitempty" url:"hwaddr,omitempty"` + MTU *int `json:"mtu,omitempty" url:"mtu,omitempty"` + Name string `json:"name" url:"name"` + RateLimit *float64 `json:"rate,omitempty" url:"rate,omitempty"` + Tag *int `json:"tag,omitempty" url:"tag,omitempty"` + Trunks *[]int `json:"trunks,omitempty" url:"trunks,omitempty"` + Type *string `json:"type,omitempty" url:"type,omitempty"` } // VirtualEnvironmentContainerCustomNetworkInterfaceArray is an array of VirtualEnvironmentContainerCustomNetworkInterface. @@ -117,14 +117,14 @@ type VirtualEnvironmentContainerCustomNetworkInterfaceArray []VirtualEnvironment // VirtualEnvironmentContainerCustomRootFS contains the values for the "rootfs" property. type VirtualEnvironmentContainerCustomRootFS struct { - ACL *CustomBool `json:"acl,omitempty" url:"acl,omitempty,int"` - DiskSize *string `json:"size,omitempty" url:"size,omitempty"` + ACL *CustomBool `json:"acl,omitempty" url:"acl,omitempty,int"` + DiskSize *string `json:"size,omitempty" url:"size,omitempty"` MountOptions *[]string `json:"mountoptions,omitempty" url:"mountoptions,omitempty"` - Quota *CustomBool `json:"quota,omitempty" url:"quota,omitempty,int"` - ReadOnly *CustomBool `json:"ro,omitempty" url:"ro,omitempty,int"` - Replicate *CustomBool `json:"replicate,omitempty" url:"replicate,omitempty,int"` - Shared *CustomBool `json:"shared,omitempty" url:"shared,omitempty,int"` - Volume string `json:"volume" url:"volume"` + Quota *CustomBool `json:"quota,omitempty" url:"quota,omitempty,int"` + ReadOnly *CustomBool `json:"ro,omitempty" url:"ro,omitempty,int"` + Replicate *CustomBool `json:"replicate,omitempty" url:"replicate,omitempty,int"` + Shared *CustomBool `json:"shared,omitempty" url:"shared,omitempty,int"` + Volume string `json:"volume" url:"volume"` } // VirtualEnvironmentContainerCustomSSHKeys contains the values for the "ssh-public-keys" property. @@ -132,9 +132,9 @@ type VirtualEnvironmentContainerCustomSSHKeys []string // VirtualEnvironmentContainerCustomStartupBehavior contains the values for the "startup" property. type VirtualEnvironmentContainerCustomStartupBehavior struct { - Down *int `json:"down,omitempty" url:"down,omitempty"` + Down *int `json:"down,omitempty" url:"down,omitempty"` Order *int `json:"order,omitempty" url:"order,omitempty"` - Up *int `json:"up,omitempty" url:"up,omitempty"` + Up *int `json:"up,omitempty" url:"up,omitempty"` } // VirtualEnvironmentContainerGetResponseBody contains the body from an user get response. @@ -211,7 +211,7 @@ type VirtualEnvironmentContainerRebootRequestBody struct { // VirtualEnvironmentContainerShutdownRequestBody contains the body for a container shutdown request. type VirtualEnvironmentContainerShutdownRequestBody struct { ForceStop *CustomBool `json:"forceStop,omitempty" url:"forceStop,omitempty,int"` - Timeout *int `json:"timeout,omitempty" url:"timeout,omitempty"` + Timeout *int `json:"timeout,omitempty" url:"timeout,omitempty"` } // VirtualEnvironmentContainerUpdateRequestBody contains the data for an user update request. @@ -332,7 +332,10 @@ func (r VirtualEnvironmentContainerCustomMountPoint) EncodeValues(key string, v } // EncodeValues converts a VirtualEnvironmentContainerCustomMountPointArray array to multiple URL values. -func (r VirtualEnvironmentContainerCustomMountPointArray) EncodeValues(key string, v *url.Values) error { +func (r VirtualEnvironmentContainerCustomMountPointArray) EncodeValues( + key string, + v *url.Values, +) error { for i, d := range r { err := d.EncodeValues(fmt.Sprintf("%s%d", key, i), v) if err != nil { @@ -344,7 +347,10 @@ func (r VirtualEnvironmentContainerCustomMountPointArray) EncodeValues(key strin } // EncodeValues converts a VirtualEnvironmentContainerCustomNetworkInterface struct to a URL vlaue. -func (r VirtualEnvironmentContainerCustomNetworkInterface) EncodeValues(key string, v *url.Values) error { +func (r VirtualEnvironmentContainerCustomNetworkInterface) EncodeValues( + key string, + v *url.Values, +) error { var values []string if r.Bridge != nil { @@ -415,7 +421,10 @@ func (r VirtualEnvironmentContainerCustomNetworkInterface) EncodeValues(key stri } // EncodeValues converts a VirtualEnvironmentContainerCustomNetworkInterfaceArray array to multiple URL values. -func (r VirtualEnvironmentContainerCustomNetworkInterfaceArray) EncodeValues(key string, v *url.Values) error { +func (r VirtualEnvironmentContainerCustomNetworkInterfaceArray) EncodeValues( + key string, + v *url.Values, +) error { for i, d := range r { err := d.EncodeValues(fmt.Sprintf("%s%d", key, i), v) if err != nil { @@ -497,7 +506,10 @@ func (r VirtualEnvironmentContainerCustomSSHKeys) EncodeValues(key string, v *ur } // EncodeValues converts a VirtualEnvironmentContainerCustomStartupBehavior struct to a URL vlaue. -func (r VirtualEnvironmentContainerCustomStartupBehavior) EncodeValues(key string, v *url.Values) error { +func (r VirtualEnvironmentContainerCustomStartupBehavior) EncodeValues( + key string, + v *url.Values, +) error { var values []string if r.Down != nil { @@ -524,7 +536,6 @@ func (r *VirtualEnvironmentContainerCustomFeatures) UnmarshalJSON(b []byte) erro var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -565,7 +576,6 @@ func (r *VirtualEnvironmentContainerCustomMountPoint) UnmarshalJSON(b []byte) er var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -621,7 +631,6 @@ func (r *VirtualEnvironmentContainerCustomNetworkInterface) UnmarshalJSON(b []by var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -652,7 +661,6 @@ func (r *VirtualEnvironmentContainerCustomNetworkInterface) UnmarshalJSON(b []by r.MACAddress = &v[1] case "mtu": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -662,7 +670,6 @@ func (r *VirtualEnvironmentContainerCustomNetworkInterface) UnmarshalJSON(b []by r.Name = v[1] case "rate": fv, err := strconv.ParseFloat(v[1], 64) - if err != nil { return err } @@ -670,7 +677,6 @@ func (r *VirtualEnvironmentContainerCustomNetworkInterface) UnmarshalJSON(b []by r.RateLimit = &fv case "tag": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -708,7 +714,6 @@ func (r *VirtualEnvironmentContainerCustomRootFS) UnmarshalJSON(b []byte) error var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -759,7 +764,6 @@ func (r *VirtualEnvironmentContainerCustomStartupBehavior) UnmarshalJSON(b []byt var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -773,7 +777,6 @@ func (r *VirtualEnvironmentContainerCustomStartupBehavior) UnmarshalJSON(b []byt switch v[0] { case "down": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -781,7 +784,6 @@ func (r *VirtualEnvironmentContainerCustomStartupBehavior) UnmarshalJSON(b []byt r.Down = &iv case "order": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -789,7 +791,6 @@ func (r *VirtualEnvironmentContainerCustomStartupBehavior) UnmarshalJSON(b []byt r.Order = &iv case "up": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } diff --git a/proxmox/virtual_environment_datastores.go b/proxmox/virtual_environment_datastores.go index 991244bd..aa94ed84 100644 --- a/proxmox/virtual_environment_datastores.go +++ b/proxmox/virtual_environment_datastores.go @@ -21,9 +21,22 @@ import ( ) // DeleteDatastoreFile deletes a file in a datastore. -func (c *VirtualEnvironmentClient) DeleteDatastoreFile(ctx context.Context, nodeName, datastoreID, volumeID string) error { - err := c.DoRequest(ctx, hmDELETE, fmt.Sprintf("nodes/%s/storage/%s/content/%s", url.PathEscape(nodeName), url.PathEscape(datastoreID), url.PathEscape(volumeID)), nil, nil) - +func (c *VirtualEnvironmentClient) DeleteDatastoreFile( + ctx context.Context, + nodeName, datastoreID, volumeID string, +) error { + err := c.DoRequest( + ctx, + hmDELETE, + fmt.Sprintf( + "nodes/%s/storage/%s/content/%s", + url.PathEscape(nodeName), + url.PathEscape(datastoreID), + url.PathEscape(volumeID), + ), + nil, + nil, + ) if err != nil { return err } @@ -32,10 +45,22 @@ func (c *VirtualEnvironmentClient) DeleteDatastoreFile(ctx context.Context, node } // GetDatastoreStatus gets status information for a given datastore. -func (c *VirtualEnvironmentClient) GetDatastoreStatus(ctx context.Context, nodeName, datastoreID string) (*VirtualEnvironmentDatastoreGetStatusResponseData, error) { +func (c *VirtualEnvironmentClient) GetDatastoreStatus( + ctx context.Context, + nodeName, datastoreID string, +) (*VirtualEnvironmentDatastoreGetStatusResponseData, error) { resBody := &VirtualEnvironmentDatastoreGetStatusResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/storage/%s/status", url.PathEscape(nodeName), url.PathEscape(datastoreID)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf( + "nodes/%s/storage/%s/status", + url.PathEscape(nodeName), + url.PathEscape(datastoreID), + ), + nil, + resBody, + ) if err != nil { return nil, err } @@ -48,10 +73,22 @@ func (c *VirtualEnvironmentClient) GetDatastoreStatus(ctx context.Context, nodeN } // ListDatastoreFiles retrieves a list of the files in a datastore. -func (c *VirtualEnvironmentClient) ListDatastoreFiles(ctx context.Context, nodeName, datastoreID string) ([]*VirtualEnvironmentDatastoreFileListResponseData, error) { +func (c *VirtualEnvironmentClient) ListDatastoreFiles( + ctx context.Context, + nodeName, datastoreID string, +) ([]*VirtualEnvironmentDatastoreFileListResponseData, error) { resBody := &VirtualEnvironmentDatastoreFileListResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/storage/%s/content", url.PathEscape(nodeName), url.PathEscape(datastoreID)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf( + "nodes/%s/storage/%s/content", + url.PathEscape(nodeName), + url.PathEscape(datastoreID), + ), + nil, + resBody, + ) if err != nil { return nil, err } @@ -68,10 +105,19 @@ func (c *VirtualEnvironmentClient) ListDatastoreFiles(ctx context.Context, nodeN } // ListDatastores retrieves a list of nodes. -func (c *VirtualEnvironmentClient) ListDatastores(ctx context.Context, nodeName string, d *VirtualEnvironmentDatastoreListRequestBody) ([]*VirtualEnvironmentDatastoreListResponseData, error) { +func (c *VirtualEnvironmentClient) ListDatastores( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentDatastoreListRequestBody, +) ([]*VirtualEnvironmentDatastoreListResponseData, error) { resBody := &VirtualEnvironmentDatastoreListResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/storage", url.PathEscape(nodeName)), d, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/storage", url.PathEscape(nodeName)), + d, + resBody, + ) if err != nil { return nil, err } @@ -88,7 +134,10 @@ func (c *VirtualEnvironmentClient) ListDatastores(ctx context.Context, nodeName } // UploadFileToDatastore uploads a file to a datastore. -func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d *VirtualEnvironmentDatastoreUploadRequestBody) (*VirtualEnvironmentDatastoreUploadResponseBody, error) { +func (c *VirtualEnvironmentClient) UploadFileToDatastore( + ctx context.Context, + d *VirtualEnvironmentDatastoreUploadRequestBody, +) (*VirtualEnvironmentDatastoreUploadResponseBody, error) { switch d.ContentType { case "iso", "vztmpl": r, w := io.Pipe() @@ -110,7 +159,6 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d } part, err := m.CreateFormFile("filename", d.FileName) - if err != nil { return } @@ -125,7 +173,6 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d // We need to store the multipart content in a temporary file to avoid using high amounts of memory. // This is necessary due to Proxmox VE not supporting chunked transfers in v6.1 and earlier versions. tempMultipartFile, err := os.CreateTemp("", "multipart") - if err != nil { return nil, err } @@ -147,7 +194,6 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d // Now that the multipart data is stored in a file, we can go ahead and do a HTTP POST request. fileReader, err := os.Open(tempMultipartFileName) - if err != nil { return nil, err } @@ -155,7 +201,6 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d defer fileReader.Close() fileInfo, err := fileReader.Stat() - if err != nil { return nil, err } @@ -169,7 +214,17 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d } resBody := &VirtualEnvironmentDatastoreUploadResponseBody{} - err = c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/storage/%s/upload", url.PathEscape(d.NodeName), url.PathEscape(d.DatastoreID)), reqBody, resBody) + err = c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf( + "nodes/%s/storage/%s/upload", + url.PathEscape(d.NodeName), + url.PathEscape(d.DatastoreID), + ), + reqBody, + resBody, + ) if err != nil { return nil, err @@ -180,7 +235,6 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d // We need to upload all other files using SFTP due to API limitations. // Hopefully, this will not be required in future releases of Proxmox VE. sshClient, err := c.OpenNodeShell(ctx, d.NodeName) - if err != nil { return nil, err } @@ -188,15 +242,16 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d defer sshClient.Close() sshSession, err := sshClient.NewSession() - if err != nil { return nil, err } buf, err := sshSession.CombinedOutput( - fmt.Sprintf(`awk "/.+: %s$/,/^$/" /etc/pve/storage.cfg | grep -oP '(?<=path[ ])[^\s]+' | head -c -1`, d.DatastoreID), + fmt.Sprintf( + `awk "/.+: %s$/,/^$/" /etc/pve/storage.cfg | grep -oP '(?<=path[ ])[^\s]+' | head -c -1`, + d.DatastoreID, + ), ) - if err != nil { sshSession.Close() @@ -220,7 +275,6 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d remoteFilePath := fmt.Sprintf("%s/%s", remoteFileDir, d.FileName) sftpClient, err := sftp.NewClient(sshClient) - if err != nil { return nil, err } @@ -234,7 +288,6 @@ func (c *VirtualEnvironmentClient) UploadFileToDatastore(ctx context.Context, d } remoteFile, err := sftpClient.Create(remoteFilePath) - if err != nil { return nil, err } diff --git a/proxmox/virtual_environment_datastores_types.go b/proxmox/virtual_environment_datastores_types.go index 49a5cc27..724e7109 100644 --- a/proxmox/virtual_environment_datastores_types.go +++ b/proxmox/virtual_environment_datastores_types.go @@ -45,9 +45,9 @@ type VirtualEnvironmentDatastoreGetStatusResponseData struct { type VirtualEnvironmentDatastoreListRequestBody struct { ContentTypes CustomCommaSeparatedList `json:"content,omitempty" url:"content,omitempty,comma"` Enabled *CustomBool `json:"enabled,omitempty" url:"enabled,omitempty,int"` - Format *CustomBool `json:"format,omitempty" url:"format,omitempty,int"` + Format *CustomBool `json:"format,omitempty" url:"format,omitempty,int"` ID *string `json:"storage,omitempty" url:"storage,omitempty"` - Target *string `json:"target,omitempty" url:"target,omitempty"` + Target *string `json:"target,omitempty" url:"target,omitempty"` } // VirtualEnvironmentDatastoreListResponseBody contains the body from a datastore list response. diff --git a/proxmox/virtual_environment_dns.go b/proxmox/virtual_environment_dns.go index 5a2ebd58..9a802aaa 100644 --- a/proxmox/virtual_environment_dns.go +++ b/proxmox/virtual_environment_dns.go @@ -12,10 +12,18 @@ import ( ) // GetDNS retrieves the DNS configuration for a node. -func (c *VirtualEnvironmentClient) GetDNS(ctx context.Context, nodeName string) (*VirtualEnvironmentDNSGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetDNS( + ctx context.Context, + nodeName string, +) (*VirtualEnvironmentDNSGetResponseData, error) { resBody := &VirtualEnvironmentDNSGetResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/dns", url.PathEscape(nodeName)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/dns", url.PathEscape(nodeName)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -28,6 +36,10 @@ func (c *VirtualEnvironmentClient) GetDNS(ctx context.Context, nodeName string) } // UpdateDNS updates the DNS configuration for a node. -func (c *VirtualEnvironmentClient) UpdateDNS(ctx context.Context, nodeName string, d *VirtualEnvironmentDNSUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateDNS( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentDNSUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPUT, fmt.Sprintf("nodes/%s/dns", url.PathEscape(nodeName)), d, nil) } diff --git a/proxmox/virtual_environment_dns_types.go b/proxmox/virtual_environment_dns_types.go index 231d7ea2..5c9627d0 100644 --- a/proxmox/virtual_environment_dns_types.go +++ b/proxmox/virtual_environment_dns_types.go @@ -11,16 +11,16 @@ type VirtualEnvironmentDNSGetResponseBody struct { // VirtualEnvironmentDNSGetResponseData contains the data from a DNS get response. type VirtualEnvironmentDNSGetResponseData struct { - Server1 *string `json:"dns1,omitempty" url:"dns1,omitempty"` - Server2 *string `json:"dns2,omitempty" url:"dns2,omitempty"` - Server3 *string `json:"dns3,omitempty" url:"dns3,omitempty"` + Server1 *string `json:"dns1,omitempty" url:"dns1,omitempty"` + Server2 *string `json:"dns2,omitempty" url:"dns2,omitempty"` + Server3 *string `json:"dns3,omitempty" url:"dns3,omitempty"` SearchDomain *string `json:"search,omitempty" url:"search,omitempty"` } // VirtualEnvironmentDNSUpdateRequestBody contains the body for a DNS update request. type VirtualEnvironmentDNSUpdateRequestBody struct { - Server1 *string `json:"dns1,omitempty" url:"dns1,omitempty"` - Server2 *string `json:"dns2,omitempty" url:"dns2,omitempty"` - Server3 *string `json:"dns3,omitempty" url:"dns3,omitempty"` + Server1 *string `json:"dns1,omitempty" url:"dns1,omitempty"` + Server2 *string `json:"dns2,omitempty" url:"dns2,omitempty"` + Server3 *string `json:"dns3,omitempty" url:"dns3,omitempty"` SearchDomain *string `json:"search,omitempty" url:"search,omitempty"` } diff --git a/proxmox/virtual_environment_groups.go b/proxmox/virtual_environment_groups.go index b7d278f8..22ebd6de 100644 --- a/proxmox/virtual_environment_groups.go +++ b/proxmox/virtual_environment_groups.go @@ -13,7 +13,10 @@ import ( ) // CreateGroup creates an access group. -func (c *VirtualEnvironmentClient) CreateGroup(ctx context.Context, d *VirtualEnvironmentGroupCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreateGroup( + ctx context.Context, + d *VirtualEnvironmentGroupCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, "access/groups", d, nil) } @@ -23,10 +26,18 @@ func (c *VirtualEnvironmentClient) DeleteGroup(ctx context.Context, id string) e } // GetGroup retrieves an access group. -func (c *VirtualEnvironmentClient) GetGroup(ctx context.Context, id string) (*VirtualEnvironmentGroupGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetGroup( + ctx context.Context, + id string, +) (*VirtualEnvironmentGroupGetResponseData, error) { resBody := &VirtualEnvironmentGroupGetResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("access/groups/%s", url.PathEscape(id)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("access/groups/%s", url.PathEscape(id)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -41,10 +52,11 @@ func (c *VirtualEnvironmentClient) GetGroup(ctx context.Context, id string) (*Vi } // ListGroups retrieves a list of access groups. -func (c *VirtualEnvironmentClient) ListGroups(ctx context.Context) ([]*VirtualEnvironmentGroupListResponseData, error) { +func (c *VirtualEnvironmentClient) ListGroups( + ctx context.Context, +) ([]*VirtualEnvironmentGroupListResponseData, error) { resBody := &VirtualEnvironmentGroupListResponseBody{} err := c.DoRequest(ctx, hmGET, "access/groups", nil, resBody) - if err != nil { return nil, err } @@ -61,6 +73,10 @@ func (c *VirtualEnvironmentClient) ListGroups(ctx context.Context) ([]*VirtualEn } // UpdateGroup updates an access group. -func (c *VirtualEnvironmentClient) UpdateGroup(ctx context.Context, id string, d *VirtualEnvironmentGroupUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateGroup( + ctx context.Context, + id string, + d *VirtualEnvironmentGroupUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPUT, fmt.Sprintf("access/groups/%s", url.PathEscape(id)), d, nil) } diff --git a/proxmox/virtual_environment_groups_types.go b/proxmox/virtual_environment_groups_types.go index c6792fbb..daea3e24 100644 --- a/proxmox/virtual_environment_groups_types.go +++ b/proxmox/virtual_environment_groups_types.go @@ -7,7 +7,7 @@ package proxmox // VirtualEnvironmentGroupCreateRequestBody contains the data for an access group create request. type VirtualEnvironmentGroupCreateRequestBody struct { Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - ID string `json:"groupid" url:"groupid"` + ID string `json:"groupid" url:"groupid"` } // VirtualEnvironmentGroupGetResponseBody contains the body from an access group get response. diff --git a/proxmox/virtual_environment_hosts.go b/proxmox/virtual_environment_hosts.go index a026a285..c956e1e1 100644 --- a/proxmox/virtual_environment_hosts.go +++ b/proxmox/virtual_environment_hosts.go @@ -12,10 +12,18 @@ import ( ) // GetHosts retrieves the Hosts configuration for a node. -func (c *VirtualEnvironmentClient) GetHosts(ctx context.Context, nodeName string) (*VirtualEnvironmentHostsGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetHosts( + ctx context.Context, + nodeName string, +) (*VirtualEnvironmentHostsGetResponseData, error) { resBody := &VirtualEnvironmentHostsGetResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/hosts", url.PathEscape(nodeName)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/hosts", url.PathEscape(nodeName)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -28,6 +36,10 @@ func (c *VirtualEnvironmentClient) GetHosts(ctx context.Context, nodeName string } // UpdateHosts updates the Hosts configuration for a node. -func (c *VirtualEnvironmentClient) UpdateHosts(ctx context.Context, nodeName string, d *VirtualEnvironmentHostsUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateHosts( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentHostsUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/hosts", url.PathEscape(nodeName)), d, nil) } diff --git a/proxmox/virtual_environment_hosts_types.go b/proxmox/virtual_environment_hosts_types.go index 739ce7c6..6cc2a8ae 100644 --- a/proxmox/virtual_environment_hosts_types.go +++ b/proxmox/virtual_environment_hosts_types.go @@ -17,6 +17,6 @@ type VirtualEnvironmentHostsGetResponseData struct { // VirtualEnvironmentHostsUpdateRequestBody contains the body for a hosts update request. type VirtualEnvironmentHostsUpdateRequestBody struct { - Data string `json:"data" url:"data"` + Data string `json:"data" url:"data"` Digest *string `json:"digest,omitempty" url:"digest,omitempty"` } diff --git a/proxmox/virtual_environment_nodes.go b/proxmox/virtual_environment_nodes.go index af67f722..9710a610 100644 --- a/proxmox/virtual_environment_nodes.go +++ b/proxmox/virtual_environment_nodes.go @@ -19,9 +19,12 @@ import ( ) // ExecuteNodeCommands executes commands on a given node. -func (c *VirtualEnvironmentClient) ExecuteNodeCommands(ctx context.Context, nodeName string, commands []string) error { +func (c *VirtualEnvironmentClient) ExecuteNodeCommands( + ctx context.Context, + nodeName string, + commands []string, +) error { sshClient, err := c.OpenNodeShell(ctx, nodeName) - if err != nil { return err } @@ -36,7 +39,6 @@ func (c *VirtualEnvironmentClient) ExecuteNodeCommands(ctx context.Context, node }(sshClient) sshSession, err := sshClient.NewSession() - if err != nil { return err } @@ -56,7 +58,6 @@ func (c *VirtualEnvironmentClient) ExecuteNodeCommands(ctx context.Context, node strings.ReplaceAll(strings.Join(commands, " && \\\n"), "'", "'\"'\"'"), ), ) - if err != nil { return errors.New(string(output)) } @@ -65,9 +66,11 @@ func (c *VirtualEnvironmentClient) ExecuteNodeCommands(ctx context.Context, node } // GetNodeIP retrieves the IP address of a node. -func (c *VirtualEnvironmentClient) GetNodeIP(ctx context.Context, nodeName string) (*string, error) { +func (c *VirtualEnvironmentClient) GetNodeIP( + ctx context.Context, + nodeName string, +) (*string, error) { networkDevices, err := c.ListNodeNetworkDevices(ctx, nodeName) - if err != nil { return nil, err } @@ -91,10 +94,18 @@ func (c *VirtualEnvironmentClient) GetNodeIP(ctx context.Context, nodeName strin } // GetNodeTime retrieves the time information for a node. -func (c *VirtualEnvironmentClient) GetNodeTime(ctx context.Context, nodeName string) (*VirtualEnvironmentNodeGetTimeResponseData, error) { +func (c *VirtualEnvironmentClient) GetNodeTime( + ctx context.Context, + nodeName string, +) (*VirtualEnvironmentNodeGetTimeResponseData, error) { resBody := &VirtualEnvironmentNodeGetTimeResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/time", url.PathEscape(nodeName)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/time", url.PathEscape(nodeName)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -107,10 +118,19 @@ func (c *VirtualEnvironmentClient) GetNodeTime(ctx context.Context, nodeName str } // GetNodeTaskStatus retrieves the status of a node task. -func (c *VirtualEnvironmentClient) GetNodeTaskStatus(ctx context.Context, nodeName string, upid string) (*VirtualEnvironmentNodeGetTaskStatusResponseData, error) { +func (c *VirtualEnvironmentClient) GetNodeTaskStatus( + ctx context.Context, + nodeName string, + upid string, +) (*VirtualEnvironmentNodeGetTaskStatusResponseData, error) { resBody := &VirtualEnvironmentNodeGetTaskStatusResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/tasks/%s/status", url.PathEscape(nodeName), url.PathEscape(upid)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/tasks/%s/status", url.PathEscape(nodeName), url.PathEscape(upid)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -123,10 +143,18 @@ func (c *VirtualEnvironmentClient) GetNodeTaskStatus(ctx context.Context, nodeNa } // ListNodeNetworkDevices retrieves a list of network devices for a specific nodes. -func (c *VirtualEnvironmentClient) ListNodeNetworkDevices(ctx context.Context, nodeName string) ([]*VirtualEnvironmentNodeNetworkDeviceListResponseData, error) { +func (c *VirtualEnvironmentClient) ListNodeNetworkDevices( + ctx context.Context, + nodeName string, +) ([]*VirtualEnvironmentNodeNetworkDeviceListResponseData, error) { resBody := &VirtualEnvironmentNodeNetworkDeviceListResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/network", url.PathEscape(nodeName)), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/network", url.PathEscape(nodeName)), + nil, + resBody, + ) if err != nil { return nil, err } @@ -143,10 +171,11 @@ func (c *VirtualEnvironmentClient) ListNodeNetworkDevices(ctx context.Context, n } // ListNodes retrieves a list of nodes. -func (c *VirtualEnvironmentClient) ListNodes(ctx context.Context) ([]*VirtualEnvironmentNodeListResponseData, error) { +func (c *VirtualEnvironmentClient) ListNodes( + ctx context.Context, +) ([]*VirtualEnvironmentNodeListResponseData, error) { resBody := &VirtualEnvironmentNodeListResponseBody{} err := c.DoRequest(ctx, hmGET, "nodes", nil, resBody) - if err != nil { return nil, err } @@ -163,9 +192,11 @@ func (c *VirtualEnvironmentClient) ListNodes(ctx context.Context) ([]*VirtualEnv } // OpenNodeShell establishes a new SSH connection to a node. -func (c *VirtualEnvironmentClient) OpenNodeShell(ctx context.Context, nodeName string) (*ssh.Client, error) { +func (c *VirtualEnvironmentClient) OpenNodeShell( + ctx context.Context, + nodeName string, +) (*ssh.Client, error) { nodeAddress, err := c.GetNodeIP(ctx, nodeName) - if err != nil { return nil, err } @@ -179,7 +210,6 @@ func (c *VirtualEnvironmentClient) OpenNodeShell(ctx context.Context, nodeName s } sshClient, err := ssh.Dial("tcp", *nodeAddress+":22", sshConfig) - if err != nil { return nil, err } @@ -188,12 +218,22 @@ func (c *VirtualEnvironmentClient) OpenNodeShell(ctx context.Context, nodeName s } // UpdateNodeTime updates the time on a node. -func (c *VirtualEnvironmentClient) UpdateNodeTime(ctx context.Context, nodeName string, d *VirtualEnvironmentNodeUpdateTimeRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateNodeTime( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentNodeUpdateTimeRequestBody, +) error { return c.DoRequest(ctx, hmPUT, fmt.Sprintf("nodes/%s/time", url.PathEscape(nodeName)), d, nil) } // WaitForNodeTask waits for a specific node task to complete. -func (c *VirtualEnvironmentClient) WaitForNodeTask(ctx context.Context, nodeName string, upid string, timeout int, delay int) error { +func (c *VirtualEnvironmentClient) WaitForNodeTask( + ctx context.Context, + nodeName string, + upid string, + timeout int, + delay int, +) error { timeDelay := int64(delay) timeMax := float64(timeout) timeStart := time.Now() @@ -202,14 +242,18 @@ func (c *VirtualEnvironmentClient) WaitForNodeTask(ctx context.Context, nodeName for timeElapsed.Seconds() < timeMax { if int64(timeElapsed.Seconds())%timeDelay == 0 { status, err := c.GetNodeTaskStatus(ctx, nodeName, upid) - if err != nil { return err } if status.Status != "running" { if status.ExitCode != "OK" { - return fmt.Errorf("task \"%s\" on node \"%s\" failed to complete with error: %s", upid, nodeName, status.ExitCode) + return fmt.Errorf( + "task \"%s\" on node \"%s\" failed to complete with error: %s", + upid, + nodeName, + status.ExitCode, + ) } return nil } @@ -226,5 +270,9 @@ func (c *VirtualEnvironmentClient) WaitForNodeTask(ctx context.Context, nodeName } } - return fmt.Errorf("timeout while waiting for task \"%s\" on node \"%s\" to complete", upid, nodeName) + return fmt.Errorf( + "timeout while waiting for task \"%s\" on node \"%s\" to complete", + upid, + nodeName, + ) } diff --git a/proxmox/virtual_environment_nodes_types.go b/proxmox/virtual_environment_nodes_types.go index f8b7d08e..56279c96 100644 --- a/proxmox/virtual_environment_nodes_types.go +++ b/proxmox/virtual_environment_nodes_types.go @@ -92,7 +92,6 @@ type VirtualEnvironmentNodeUpdateTimeRequestBody struct { // EncodeValues converts a CustomNodeCommands array to a JSON encoded URL vlaue. func (r CustomNodeCommands) EncodeValues(key string, v *url.Values) error { jsonArrayBytes, err := json.Marshal(r) - if err != nil { return err } diff --git a/proxmox/virtual_environment_pools.go b/proxmox/virtual_environment_pools.go index bc42560b..c3e41fd3 100644 --- a/proxmox/virtual_environment_pools.go +++ b/proxmox/virtual_environment_pools.go @@ -13,7 +13,10 @@ import ( ) // CreatePool creates a pool. -func (c *VirtualEnvironmentClient) CreatePool(ctx context.Context, d *VirtualEnvironmentPoolCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreatePool( + ctx context.Context, + d *VirtualEnvironmentPoolCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, "pools", d, nil) } @@ -23,10 +26,12 @@ func (c *VirtualEnvironmentClient) DeletePool(ctx context.Context, id string) er } // GetPool retrieves a pool. -func (c *VirtualEnvironmentClient) GetPool(ctx context.Context, id string) (*VirtualEnvironmentPoolGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetPool( + ctx context.Context, + id string, +) (*VirtualEnvironmentPoolGetResponseData, error) { resBody := &VirtualEnvironmentPoolGetResponseBody{} err := c.DoRequest(ctx, hmGET, fmt.Sprintf("pools/%s", url.PathEscape(id)), nil, resBody) - if err != nil { return nil, err } @@ -43,10 +48,11 @@ func (c *VirtualEnvironmentClient) GetPool(ctx context.Context, id string) (*Vir } // ListPools retrieves a list of pools. -func (c *VirtualEnvironmentClient) ListPools(ctx context.Context) ([]*VirtualEnvironmentPoolListResponseData, error) { +func (c *VirtualEnvironmentClient) ListPools( + ctx context.Context, +) ([]*VirtualEnvironmentPoolListResponseData, error) { resBody := &VirtualEnvironmentPoolListResponseBody{} err := c.DoRequest(ctx, hmGET, "pools", nil, resBody) - if err != nil { return nil, err } @@ -63,6 +69,10 @@ func (c *VirtualEnvironmentClient) ListPools(ctx context.Context) ([]*VirtualEnv } // UpdatePool updates a pool. -func (c *VirtualEnvironmentClient) UpdatePool(ctx context.Context, id string, d *VirtualEnvironmentPoolUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdatePool( + ctx context.Context, + id string, + d *VirtualEnvironmentPoolUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPUT, fmt.Sprintf("pools/%s", url.PathEscape(id)), d, nil) } diff --git a/proxmox/virtual_environment_pools_types.go b/proxmox/virtual_environment_pools_types.go index d7fa9b57..11919030 100644 --- a/proxmox/virtual_environment_pools_types.go +++ b/proxmox/virtual_environment_pools_types.go @@ -7,7 +7,7 @@ package proxmox // VirtualEnvironmentPoolCreateRequestBody contains the data for an pool create request. type VirtualEnvironmentPoolCreateRequestBody struct { Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - ID string `json:"groupid" url:"poolid"` + ID string `json:"groupid" url:"poolid"` } // VirtualEnvironmentPoolGetResponseBody contains the body from an pool get response. diff --git a/proxmox/virtual_environment_roles.go b/proxmox/virtual_environment_roles.go index f004a92b..4af6694f 100644 --- a/proxmox/virtual_environment_roles.go +++ b/proxmox/virtual_environment_roles.go @@ -13,7 +13,10 @@ import ( ) // CreateRole creates an access role. -func (c *VirtualEnvironmentClient) CreateRole(ctx context.Context, d *VirtualEnvironmentRoleCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreateRole( + ctx context.Context, + d *VirtualEnvironmentRoleCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, "access/roles", d, nil) } @@ -23,10 +26,12 @@ func (c *VirtualEnvironmentClient) DeleteRole(ctx context.Context, id string) er } // GetRole retrieves an access role. -func (c *VirtualEnvironmentClient) GetRole(ctx context.Context, id string) (*CustomPrivileges, error) { +func (c *VirtualEnvironmentClient) GetRole( + ctx context.Context, + id string, +) (*CustomPrivileges, error) { resBody := &VirtualEnvironmentRoleGetResponseBody{} err := c.DoRequest(ctx, hmGET, fmt.Sprintf("access/roles/%s", url.PathEscape(id)), nil, resBody) - if err != nil { return nil, err } @@ -41,10 +46,11 @@ func (c *VirtualEnvironmentClient) GetRole(ctx context.Context, id string) (*Cus } // ListRoles retrieves a list of access roles. -func (c *VirtualEnvironmentClient) ListRoles(ctx context.Context) ([]*VirtualEnvironmentRoleListResponseData, error) { +func (c *VirtualEnvironmentClient) ListRoles( + ctx context.Context, +) ([]*VirtualEnvironmentRoleListResponseData, error) { resBody := &VirtualEnvironmentRoleListResponseBody{} err := c.DoRequest(ctx, hmGET, "access/roles", nil, resBody) - if err != nil { return nil, err } @@ -67,6 +73,10 @@ func (c *VirtualEnvironmentClient) ListRoles(ctx context.Context) ([]*VirtualEnv } // UpdateRole updates an access role. -func (c *VirtualEnvironmentClient) UpdateRole(ctx context.Context, id string, d *VirtualEnvironmentRoleUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateRole( + ctx context.Context, + id string, + d *VirtualEnvironmentRoleUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPUT, fmt.Sprintf("access/roles/%s", url.PathEscape(id)), d, nil) } diff --git a/proxmox/virtual_environment_roles_types.go b/proxmox/virtual_environment_roles_types.go index de6f3e04..bc511286 100644 --- a/proxmox/virtual_environment_roles_types.go +++ b/proxmox/virtual_environment_roles_types.go @@ -7,7 +7,7 @@ package proxmox // VirtualEnvironmentRoleCreateRequestBody contains the data for an access group create request. type VirtualEnvironmentRoleCreateRequestBody struct { ID string `json:"roleid" url:"roleid"` - Privileges CustomPrivileges `json:"privs" url:"privs,comma"` + Privileges CustomPrivileges `json:"privs" url:"privs,comma"` } // VirtualEnvironmentRoleGetResponseBody contains the body from an access group get response. diff --git a/proxmox/virtual_environment_users.go b/proxmox/virtual_environment_users.go index 31f09673..26c3cd1f 100644 --- a/proxmox/virtual_environment_users.go +++ b/proxmox/virtual_environment_users.go @@ -14,7 +14,10 @@ import ( ) // ChangeUserPassword changes a user's password. -func (c *VirtualEnvironmentClient) ChangeUserPassword(ctx context.Context, id, password string) error { +func (c *VirtualEnvironmentClient) ChangeUserPassword( + ctx context.Context, + id, password string, +) error { d := VirtualEnvironmentUserChangePasswordRequestBody{ ID: id, Password: password, @@ -24,7 +27,10 @@ func (c *VirtualEnvironmentClient) ChangeUserPassword(ctx context.Context, id, p } // CreateUser creates a user. -func (c *VirtualEnvironmentClient) CreateUser(ctx context.Context, d *VirtualEnvironmentUserCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreateUser( + ctx context.Context, + d *VirtualEnvironmentUserCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, "access/users", d, nil) } @@ -34,10 +40,12 @@ func (c *VirtualEnvironmentClient) DeleteUser(ctx context.Context, id string) er } // GetUser retrieves a user. -func (c *VirtualEnvironmentClient) GetUser(ctx context.Context, id string) (*VirtualEnvironmentUserGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetUser( + ctx context.Context, + id string, +) (*VirtualEnvironmentUserGetResponseData, error) { resBody := &VirtualEnvironmentUserGetResponseBody{} err := c.DoRequest(ctx, hmGET, fmt.Sprintf("access/users/%s", url.PathEscape(id)), nil, resBody) - if err != nil { return nil, err } @@ -59,10 +67,11 @@ func (c *VirtualEnvironmentClient) GetUser(ctx context.Context, id string) (*Vir } // ListUsers retrieves a list of users. -func (c *VirtualEnvironmentClient) ListUsers(ctx context.Context) ([]*VirtualEnvironmentUserListResponseData, error) { +func (c *VirtualEnvironmentClient) ListUsers( + ctx context.Context, +) ([]*VirtualEnvironmentUserListResponseData, error) { resBody := &VirtualEnvironmentUserListResponseBody{} err := c.DoRequest(ctx, hmGET, "access/users", nil, resBody) - if err != nil { return nil, err } @@ -90,6 +99,10 @@ func (c *VirtualEnvironmentClient) ListUsers(ctx context.Context) ([]*VirtualEnv } // UpdateUser updates a user. -func (c *VirtualEnvironmentClient) UpdateUser(ctx context.Context, id string, d *VirtualEnvironmentUserUpdateRequestBody) error { +func (c *VirtualEnvironmentClient) UpdateUser( + ctx context.Context, + id string, + d *VirtualEnvironmentUserUpdateRequestBody, +) error { return c.DoRequest(ctx, hmPUT, fmt.Sprintf("access/users/%s", url.PathEscape(id)), d, nil) } diff --git a/proxmox/virtual_environment_users_types.go b/proxmox/virtual_environment_users_types.go index 982034b9..b3d08f7a 100644 --- a/proxmox/virtual_environment_users_types.go +++ b/proxmox/virtual_environment_users_types.go @@ -6,22 +6,22 @@ package proxmox // VirtualEnvironmentUserChangePasswordRequestBody contains the data for a user password change request. type VirtualEnvironmentUserChangePasswordRequestBody struct { - ID string `json:"userid" url:"userid"` + ID string `json:"userid" url:"userid"` Password string `json:"password" url:"password"` } // VirtualEnvironmentUserCreateRequestBody contains the data for an user create request. type VirtualEnvironmentUserCreateRequestBody struct { - Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - Email *string `json:"email,omitempty" url:"email,omitempty"` - Enabled *CustomBool `json:"enable,omitempty" url:"enable,omitempty,int"` - ExpirationDate *CustomTimestamp `json:"expire,omitempty" url:"expire,omitempty,unix"` + Comment *string `json:"comment,omitempty" url:"comment,omitempty"` + Email *string `json:"email,omitempty" url:"email,omitempty"` + Enabled *CustomBool `json:"enable,omitempty" url:"enable,omitempty,int"` + ExpirationDate *CustomTimestamp `json:"expire,omitempty" url:"expire,omitempty,unix"` FirstName *string `json:"firstname,omitempty" url:"firstname,omitempty"` - Groups []string `json:"groups,omitempty" url:"groups,omitempty,comma"` - ID string `json:"userid" url:"userid"` - Keys *string `json:"keys,omitempty" url:"keys,omitempty"` - LastName *string `json:"lastname,omitempty" url:"lastname,omitempty"` - Password string `json:"password" url:"password"` + Groups []string `json:"groups,omitempty" url:"groups,omitempty,comma"` + ID string `json:"userid" url:"userid"` + Keys *string `json:"keys,omitempty" url:"keys,omitempty"` + LastName *string `json:"lastname,omitempty" url:"lastname,omitempty"` + Password string `json:"password" url:"password"` } // VirtualEnvironmentUserGetResponseBody contains the body from an user get response. @@ -61,13 +61,13 @@ type VirtualEnvironmentUserListResponseData struct { // VirtualEnvironmentUserUpdateRequestBody contains the data for an user update request. type VirtualEnvironmentUserUpdateRequestBody struct { - Append *CustomBool `json:"append,omitempty" url:"append,omitempty"` - Comment *string `json:"comment,omitempty" url:"comment,omitempty"` - Email *string `json:"email,omitempty" url:"email,omitempty"` - Enabled *CustomBool `json:"enable,omitempty" url:"enable,omitempty,int"` - ExpirationDate *CustomTimestamp `json:"expire,omitempty" url:"expire,omitempty,unix"` + Append *CustomBool `json:"append,omitempty" url:"append,omitempty"` + Comment *string `json:"comment,omitempty" url:"comment,omitempty"` + Email *string `json:"email,omitempty" url:"email,omitempty"` + Enabled *CustomBool `json:"enable,omitempty" url:"enable,omitempty,int"` + ExpirationDate *CustomTimestamp `json:"expire,omitempty" url:"expire,omitempty,unix"` FirstName *string `json:"firstname,omitempty" url:"firstname,omitempty"` - Groups []string `json:"groups,omitempty" url:"groups,omitempty,comma"` - Keys *string `json:"keys,omitempty" url:"keys,omitempty"` - LastName *string `json:"lastname,omitempty" url:"lastname,omitempty"` + Groups []string `json:"groups,omitempty" url:"groups,omitempty,comma"` + Keys *string `json:"keys,omitempty" url:"keys,omitempty"` + LastName *string `json:"lastname,omitempty" url:"lastname,omitempty"` } diff --git a/proxmox/virtual_environment_version.go b/proxmox/virtual_environment_version.go index 60330626..252914ab 100644 --- a/proxmox/virtual_environment_version.go +++ b/proxmox/virtual_environment_version.go @@ -10,10 +10,11 @@ import ( ) // Version retrieves the version information. -func (c *VirtualEnvironmentClient) Version(ctx context.Context) (*VirtualEnvironmentVersionResponseData, error) { +func (c *VirtualEnvironmentClient) Version( + ctx context.Context, +) (*VirtualEnvironmentVersionResponseData, error) { resBody := &VirtualEnvironmentVersionResponseBody{} err := c.DoRequest(ctx, hmGET, "version", nil, resBody) - if err != nil { return nil, err } diff --git a/proxmox/virtual_environment_vm.go b/proxmox/virtual_environment_vm.go index f8e4e6d8..39068a7f 100644 --- a/proxmox/virtual_environment_vm.go +++ b/proxmox/virtual_environment_vm.go @@ -27,7 +27,14 @@ var ( ) // CloneVM clones a virtual machine. -func (c *VirtualEnvironmentClient) CloneVM(ctx context.Context, nodeName string, vmID int, retries int, d *VirtualEnvironmentVMCloneRequestBody, timeout int) error { +func (c *VirtualEnvironmentClient) CloneVM( + ctx context.Context, + nodeName string, + vmID int, + retries int, + d *VirtualEnvironmentVMCloneRequestBody, + timeout int, +) error { resBody := &VirtualEnvironmentVMMoveDiskResponseBody{} var err error @@ -37,7 +44,13 @@ func (c *VirtualEnvironmentClient) CloneVM(ctx context.Context, nodeName string, } for i := 0; i < retries; i++ { - err = c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/clone", url.PathEscape(nodeName), vmID), d, resBody) + err = c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/clone", url.PathEscape(nodeName), vmID), + d, + resBody, + ) if err != nil { return err @@ -59,20 +72,43 @@ func (c *VirtualEnvironmentClient) CloneVM(ctx context.Context, nodeName string, } // CreateVM creates a virtual machine. -func (c *VirtualEnvironmentClient) CreateVM(ctx context.Context, nodeName string, d *VirtualEnvironmentVMCreateRequestBody) error { +func (c *VirtualEnvironmentClient) CreateVM( + ctx context.Context, + nodeName string, + d *VirtualEnvironmentVMCreateRequestBody, +) error { return c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu", url.PathEscape(nodeName)), d, nil) } // DeleteVM deletes a virtual machine. func (c *VirtualEnvironmentClient) DeleteVM(ctx context.Context, nodeName string, vmID int) error { - return c.DoRequest(ctx, hmDELETE, fmt.Sprintf("nodes/%s/qemu/%d?destroy-unreferenced-disks=1&purge=1", url.PathEscape(nodeName), vmID), nil, nil) + return c.DoRequest( + ctx, + hmDELETE, + fmt.Sprintf( + "nodes/%s/qemu/%d?destroy-unreferenced-disks=1&purge=1", + url.PathEscape(nodeName), + vmID, + ), + nil, + nil, + ) } // GetVM retrieves a virtual machine. -func (c *VirtualEnvironmentClient) GetVM(ctx context.Context, nodeName string, vmID int) (*VirtualEnvironmentVMGetResponseData, error) { +func (c *VirtualEnvironmentClient) GetVM( + ctx context.Context, + nodeName string, + vmID int, +) (*VirtualEnvironmentVMGetResponseData, error) { resBody := &VirtualEnvironmentVMGetResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/qemu/%d/config", url.PathEscape(nodeName), vmID), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/qemu/%d/config", url.PathEscape(nodeName), vmID), + nil, + resBody, + ) if err != nil { return nil, err } @@ -91,7 +127,6 @@ func (c *VirtualEnvironmentClient) GetVMID(ctx context.Context) (*int, error) { if getVMIDCounter < 0 { nextVMID, err := c.GetClusterNextID(ctx, nil) - if err != nil { return nil, err } @@ -113,7 +148,6 @@ func (c *VirtualEnvironmentClient) GetVMID(ctx context.Context) (*int, error) { for vmID <= 2147483637 { _, err := c.GetClusterNextID(ctx, &vmID) - if err != nil { vmID += getVMIDStep @@ -133,10 +167,23 @@ func (c *VirtualEnvironmentClient) GetVMID(ctx context.Context) (*int, error) { } // GetVMNetworkInterfacesFromAgent retrieves the network interfaces reported by the QEMU agent. -func (c *VirtualEnvironmentClient) GetVMNetworkInterfacesFromAgent(ctx context.Context, nodeName string, vmID int) (*VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseData, error) { +func (c *VirtualEnvironmentClient) GetVMNetworkInterfacesFromAgent( + ctx context.Context, + nodeName string, + vmID int, +) (*VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseData, error) { resBody := &VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/qemu/%d/agent/network-get-interfaces", url.PathEscape(nodeName), vmID), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf( + "nodes/%s/qemu/%d/agent/network-get-interfaces", + url.PathEscape(nodeName), + vmID, + ), + nil, + resBody, + ) if err != nil { return nil, err } @@ -149,10 +196,19 @@ func (c *VirtualEnvironmentClient) GetVMNetworkInterfacesFromAgent(ctx context.C } // GetVMStatus retrieves the status for a virtual machine. -func (c *VirtualEnvironmentClient) GetVMStatus(ctx context.Context, nodeName string, vmID int) (*VirtualEnvironmentVMGetStatusResponseData, error) { +func (c *VirtualEnvironmentClient) GetVMStatus( + ctx context.Context, + nodeName string, + vmID int, +) (*VirtualEnvironmentVMGetStatusResponseData, error) { resBody := &VirtualEnvironmentVMGetStatusResponseBody{} - err := c.DoRequest(ctx, hmGET, fmt.Sprintf("nodes/%s/qemu/%d/status/current", url.PathEscape(nodeName), vmID), nil, resBody) - + err := c.DoRequest( + ctx, + hmGET, + fmt.Sprintf("nodes/%s/qemu/%d/status/current", url.PathEscape(nodeName), vmID), + nil, + resBody, + ) if err != nil { return nil, err } @@ -165,9 +221,14 @@ func (c *VirtualEnvironmentClient) GetVMStatus(ctx context.Context, nodeName str } // MigrateVM migrates a virtual machine. -func (c *VirtualEnvironmentClient) MigrateVM(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMMigrateRequestBody, timeout int) error { +func (c *VirtualEnvironmentClient) MigrateVM( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMMigrateRequestBody, + timeout int, +) error { taskID, err := c.MigrateVMAsync(ctx, nodeName, vmID, d) - if err != nil { return err } @@ -182,10 +243,20 @@ func (c *VirtualEnvironmentClient) MigrateVM(ctx context.Context, nodeName strin } // MigrateVMAsync migrates a virtual machine asynchronously. -func (c *VirtualEnvironmentClient) MigrateVMAsync(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMMigrateRequestBody) (*string, error) { +func (c *VirtualEnvironmentClient) MigrateVMAsync( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMMigrateRequestBody, +) (*string, error) { resBody := &VirtualEnvironmentVMMigrateResponseBody{} - err := c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/migrate", url.PathEscape(nodeName), vmID), d, resBody) - + err := c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/migrate", url.PathEscape(nodeName), vmID), + d, + resBody, + ) if err != nil { return nil, err } @@ -198,9 +269,14 @@ func (c *VirtualEnvironmentClient) MigrateVMAsync(ctx context.Context, nodeName } // MoveVMDisk moves a virtual machine disk. -func (c *VirtualEnvironmentClient) MoveVMDisk(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMMoveDiskRequestBody, timeout int) error { +func (c *VirtualEnvironmentClient) MoveVMDisk( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMMoveDiskRequestBody, + timeout int, +) error { taskID, err := c.MoveVMDiskAsync(ctx, nodeName, vmID, d) - if err != nil { if strings.Contains(err.Error(), "you can't move to the same storage with same format") { // if someone tries to move to the same storage, the move is considered to be successful @@ -220,10 +296,20 @@ func (c *VirtualEnvironmentClient) MoveVMDisk(ctx context.Context, nodeName stri } // MoveVMDiskAsync moves a virtual machine disk asynchronously. -func (c *VirtualEnvironmentClient) MoveVMDiskAsync(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMMoveDiskRequestBody) (*string, error) { +func (c *VirtualEnvironmentClient) MoveVMDiskAsync( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMMoveDiskRequestBody, +) (*string, error) { resBody := &VirtualEnvironmentVMMoveDiskResponseBody{} - err := c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/move_disk", url.PathEscape(nodeName), vmID), d, resBody) - + err := c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/move_disk", url.PathEscape(nodeName), vmID), + d, + resBody, + ) if err != nil { return nil, err } @@ -241,9 +327,14 @@ func (c *VirtualEnvironmentClient) ListVMs() ([]*VirtualEnvironmentVMListRespons } // RebootVM reboots a virtual machine. -func (c *VirtualEnvironmentClient) RebootVM(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMRebootRequestBody, timeout int) error { +func (c *VirtualEnvironmentClient) RebootVM( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMRebootRequestBody, + timeout int, +) error { taskID, err := c.RebootVMAsync(ctx, nodeName, vmID, d) - if err != nil { return err } @@ -258,10 +349,20 @@ func (c *VirtualEnvironmentClient) RebootVM(ctx context.Context, nodeName string } // RebootVMAsync reboots a virtual machine asynchronously. -func (c *VirtualEnvironmentClient) RebootVMAsync(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMRebootRequestBody) (*string, error) { +func (c *VirtualEnvironmentClient) RebootVMAsync( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMRebootRequestBody, +) (*string, error) { resBody := &VirtualEnvironmentVMRebootResponseBody{} - err := c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/status/reboot", url.PathEscape(nodeName), vmID), d, resBody) - + err := c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/status/reboot", url.PathEscape(nodeName), vmID), + d, + resBody, + ) if err != nil { return nil, err } @@ -274,14 +375,25 @@ func (c *VirtualEnvironmentClient) RebootVMAsync(ctx context.Context, nodeName s } // ResizeVMDisk resizes a virtual machine disk. -func (c *VirtualEnvironmentClient) ResizeVMDisk(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMResizeDiskRequestBody) error { +func (c *VirtualEnvironmentClient) ResizeVMDisk( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMResizeDiskRequestBody, +) error { var err error tflog.Debug(ctx, "resize disk", map[string]interface{}{ "disk": d.Disk, "size": d.Size, }) for i := 0; i < 5; i++ { - err = c.DoRequest(ctx, hmPUT, fmt.Sprintf("nodes/%s/qemu/%d/resize", url.PathEscape(nodeName), vmID), d, nil) + err = c.DoRequest( + ctx, + hmPUT, + fmt.Sprintf("nodes/%s/qemu/%d/resize", url.PathEscape(nodeName), vmID), + d, + nil, + ) if err == nil { return nil } @@ -298,9 +410,14 @@ func (c *VirtualEnvironmentClient) ResizeVMDisk(ctx context.Context, nodeName st } // ShutdownVM shuts down a virtual machine. -func (c *VirtualEnvironmentClient) ShutdownVM(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMShutdownRequestBody, timeout int) error { +func (c *VirtualEnvironmentClient) ShutdownVM( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMShutdownRequestBody, + timeout int, +) error { taskID, err := c.ShutdownVMAsync(ctx, nodeName, vmID, d) - if err != nil { return err } @@ -315,10 +432,20 @@ func (c *VirtualEnvironmentClient) ShutdownVM(ctx context.Context, nodeName stri } // ShutdownVMAsync shuts down a virtual machine asynchronously. -func (c *VirtualEnvironmentClient) ShutdownVMAsync(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMShutdownRequestBody) (*string, error) { +func (c *VirtualEnvironmentClient) ShutdownVMAsync( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMShutdownRequestBody, +) (*string, error) { resBody := &VirtualEnvironmentVMShutdownResponseBody{} - err := c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/status/shutdown", url.PathEscape(nodeName), vmID), d, resBody) - + err := c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/status/shutdown", url.PathEscape(nodeName), vmID), + d, + resBody, + ) if err != nil { return nil, err } @@ -331,9 +458,13 @@ func (c *VirtualEnvironmentClient) ShutdownVMAsync(ctx context.Context, nodeName } // StartVM starts a virtual machine. -func (c *VirtualEnvironmentClient) StartVM(ctx context.Context, nodeName string, vmID int, timeout int) error { +func (c *VirtualEnvironmentClient) StartVM( + ctx context.Context, + nodeName string, + vmID int, + timeout int, +) error { taskID, err := c.StartVMAsync(ctx, nodeName, vmID) - if err != nil { return err } @@ -348,10 +479,19 @@ func (c *VirtualEnvironmentClient) StartVM(ctx context.Context, nodeName string, } // StartVMAsync starts a virtual machine asynchronously. -func (c *VirtualEnvironmentClient) StartVMAsync(ctx context.Context, nodeName string, vmID int) (*string, error) { +func (c *VirtualEnvironmentClient) StartVMAsync( + ctx context.Context, + nodeName string, + vmID int, +) (*string, error) { resBody := &VirtualEnvironmentVMStartResponseBody{} - err := c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/status/start", url.PathEscape(nodeName), vmID), nil, resBody) - + err := c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/status/start", url.PathEscape(nodeName), vmID), + nil, + resBody, + ) if err != nil { return nil, err } @@ -364,9 +504,13 @@ func (c *VirtualEnvironmentClient) StartVMAsync(ctx context.Context, nodeName st } // StopVM stops a virtual machine. -func (c *VirtualEnvironmentClient) StopVM(ctx context.Context, nodeName string, vmID int, timeout int) error { +func (c *VirtualEnvironmentClient) StopVM( + ctx context.Context, + nodeName string, + vmID int, + timeout int, +) error { taskID, err := c.StopVMAsync(ctx, nodeName, vmID) - if err != nil { return err } @@ -381,10 +525,19 @@ func (c *VirtualEnvironmentClient) StopVM(ctx context.Context, nodeName string, } // StopVMAsync stops a virtual machine asynchronously. -func (c *VirtualEnvironmentClient) StopVMAsync(ctx context.Context, nodeName string, vmID int) (*string, error) { +func (c *VirtualEnvironmentClient) StopVMAsync( + ctx context.Context, + nodeName string, + vmID int, +) (*string, error) { resBody := &VirtualEnvironmentVMStopResponseBody{} - err := c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/status/stop", url.PathEscape(nodeName), vmID), nil, resBody) - + err := c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/status/stop", url.PathEscape(nodeName), vmID), + nil, + resBody, + ) if err != nil { return nil, err } @@ -397,15 +550,36 @@ func (c *VirtualEnvironmentClient) StopVMAsync(ctx context.Context, nodeName str } // UpdateVM updates a virtual machine. -func (c *VirtualEnvironmentClient) UpdateVM(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMUpdateRequestBody) error { - return c.DoRequest(ctx, hmPUT, fmt.Sprintf("nodes/%s/qemu/%d/config", url.PathEscape(nodeName), vmID), d, nil) +func (c *VirtualEnvironmentClient) UpdateVM( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMUpdateRequestBody, +) error { + return c.DoRequest( + ctx, + hmPUT, + fmt.Sprintf("nodes/%s/qemu/%d/config", url.PathEscape(nodeName), vmID), + d, + nil, + ) } // UpdateVMAsync updates a virtual machine asynchronously. -func (c *VirtualEnvironmentClient) UpdateVMAsync(ctx context.Context, nodeName string, vmID int, d *VirtualEnvironmentVMUpdateRequestBody) (*string, error) { +func (c *VirtualEnvironmentClient) UpdateVMAsync( + ctx context.Context, + nodeName string, + vmID int, + d *VirtualEnvironmentVMUpdateRequestBody, +) (*string, error) { resBody := &VirtualEnvironmentVMUpdateAsyncResponseBody{} - err := c.DoRequest(ctx, hmPOST, fmt.Sprintf("nodes/%s/qemu/%d/config", url.PathEscape(nodeName), vmID), d, resBody) - + err := c.DoRequest( + ctx, + hmPOST, + fmt.Sprintf("nodes/%s/qemu/%d/config", url.PathEscape(nodeName), vmID), + d, + resBody, + ) if err != nil { return nil, err } @@ -418,7 +592,14 @@ func (c *VirtualEnvironmentClient) UpdateVMAsync(ctx context.Context, nodeName s } // WaitForNetworkInterfacesFromVMAgent waits for a virtual machine's QEMU agent to publish the network interfaces. -func (c *VirtualEnvironmentClient) WaitForNetworkInterfacesFromVMAgent(ctx context.Context, nodeName string, vmID int, timeout int, delay int, waitForIP bool) (*VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseData, error) { +func (c *VirtualEnvironmentClient) WaitForNetworkInterfacesFromVMAgent( + ctx context.Context, + nodeName string, + vmID int, + timeout int, + delay int, + waitForIP bool, +) (*VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseData, error) { timeDelay := int64(delay) timeMax := float64(timeout) timeStart := time.Now() @@ -438,7 +619,8 @@ func (c *VirtualEnvironmentClient) WaitForNetworkInterfacesFromVMAgent(ctx conte continue } - if nic.IPAddresses == nil || (nic.IPAddresses != nil && len(*nic.IPAddresses) == 0) { + if nic.IPAddresses == nil || + (nic.IPAddresses != nil && len(*nic.IPAddresses) == 0) { missingIP = true break } @@ -468,11 +650,20 @@ func (c *VirtualEnvironmentClient) WaitForNetworkInterfacesFromVMAgent(ctx conte } } - return nil, fmt.Errorf("timeout while waiting for the QEMU agent on VM \"%d\" to publish the network interfaces", vmID) + return nil, fmt.Errorf( + "timeout while waiting for the QEMU agent on VM \"%d\" to publish the network interfaces", + vmID, + ) } // WaitForNoNetworkInterfacesFromVMAgent waits for a virtual machine's QEMU agent to unpublish the network interfaces. -func (c *VirtualEnvironmentClient) WaitForNoNetworkInterfacesFromVMAgent(ctx context.Context, nodeName string, vmID int, timeout int, delay int) error { +func (c *VirtualEnvironmentClient) WaitForNoNetworkInterfacesFromVMAgent( + ctx context.Context, + nodeName string, + vmID int, + timeout int, + delay int, +) error { timeDelay := int64(delay) timeMax := float64(timeout) timeStart := time.Now() @@ -481,7 +672,6 @@ func (c *VirtualEnvironmentClient) WaitForNoNetworkInterfacesFromVMAgent(ctx con for timeElapsed.Seconds() < timeMax { if int64(timeElapsed.Seconds())%timeDelay == 0 { _, err := c.GetVMNetworkInterfacesFromAgent(ctx, nodeName, vmID) - if err != nil { return nil } @@ -498,11 +688,23 @@ func (c *VirtualEnvironmentClient) WaitForNoNetworkInterfacesFromVMAgent(ctx con } } - return fmt.Errorf("timeout while waiting for the QEMU agent on VM \"%d\" to unpublish the network interfaces", vmID) + return fmt.Errorf( + "timeout while waiting for the QEMU agent on VM \"%d\" to unpublish the network interfaces", + vmID, + ) } // WaitForVMConfigUnlock waits for a virtual machine configuration to become unlocked. -func (c *VirtualEnvironmentClient) WaitForVMConfigUnlock(ctx context.Context, nodeName string, vmID int, timeout int, delay int, ignoreErrorResponse bool) error { +// +//nolint:dupl +func (c *VirtualEnvironmentClient) WaitForVMConfigUnlock( + ctx context.Context, + nodeName string, + vmID int, + timeout int, + delay int, + ignoreErrorResponse bool, +) error { timeDelay := int64(delay) timeMax := float64(timeout) timeStart := time.Now() @@ -536,7 +738,16 @@ func (c *VirtualEnvironmentClient) WaitForVMConfigUnlock(ctx context.Context, no } // WaitForVMState waits for a virtual machine to reach a specific state. -func (c *VirtualEnvironmentClient) WaitForVMState(ctx context.Context, nodeName string, vmID int, state string, timeout int, delay int) error { +// +//nolint:dupl +func (c *VirtualEnvironmentClient) WaitForVMState( + ctx context.Context, + nodeName string, + vmID int, + state string, + timeout int, + delay int, +) error { state = strings.ToLower(state) timeDelay := int64(delay) diff --git a/proxmox/virtual_environment_vm_types.go b/proxmox/virtual_environment_vm_types.go index 633abf4d..0a63529d 100644 --- a/proxmox/virtual_environment_vm_types.go +++ b/proxmox/virtual_environment_vm_types.go @@ -16,16 +16,16 @@ import ( // CustomAgent handles QEMU agent parameters. type CustomAgent struct { - Enabled *CustomBool `json:"enabled,omitempty" url:"enabled,int"` + Enabled *CustomBool `json:"enabled,omitempty" url:"enabled,int"` TrimClonedDisks *CustomBool `json:"fstrim_cloned_disks" url:"fstrim_cloned_disks,int"` - Type *string `json:"type" url:"type"` + Type *string `json:"type" url:"type"` } // CustomAudioDevice handles QEMU audio parameters. type CustomAudioDevice struct { Device string `json:"device" url:"device"` Driver *string `json:"driver" url:"driver"` - Enabled bool `json:"-" url:"-"` + Enabled bool `json:"-" url:"-"` } // CustomAudioDevices handles QEMU audio device parameters. @@ -33,29 +33,29 @@ type CustomAudioDevices []CustomAudioDevice // CustomCloudInitConfig handles QEMU cloud-init parameters. type CustomCloudInitConfig struct { - Files *CustomCloudInitFiles `json:"cicustom,omitempty" url:"cicustom,omitempty"` - IPConfig []CustomCloudInitIPConfig `json:"ipconfig,omitempty" url:"ipconfig,omitempty,numbered"` - Nameserver *string `json:"nameserver,omitempty" url:"nameserver,omitempty"` - Password *string `json:"cipassword,omitempty" url:"cipassword,omitempty"` + Files *CustomCloudInitFiles `json:"cicustom,omitempty" url:"cicustom,omitempty"` + IPConfig []CustomCloudInitIPConfig `json:"ipconfig,omitempty" url:"ipconfig,omitempty,numbered"` + Nameserver *string `json:"nameserver,omitempty" url:"nameserver,omitempty"` + Password *string `json:"cipassword,omitempty" url:"cipassword,omitempty"` SearchDomain *string `json:"searchdomain,omitempty" url:"searchdomain,omitempty"` - SSHKeys *CustomCloudInitSSHKeys `json:"sshkeys,omitempty" url:"sshkeys,omitempty"` - Type *string `json:"citype,omitempty" url:"citype,omitempty"` - Username *string `json:"ciuser,omitempty" url:"ciuser,omitempty"` + SSHKeys *CustomCloudInitSSHKeys `json:"sshkeys,omitempty" url:"sshkeys,omitempty"` + Type *string `json:"citype,omitempty" url:"citype,omitempty"` + Username *string `json:"ciuser,omitempty" url:"ciuser,omitempty"` } // CustomCloudInitFiles handles QEMU cloud-init custom files parameters. type CustomCloudInitFiles struct { - MetaVolume *string `json:"meta,omitempty" url:"meta,omitempty"` + MetaVolume *string `json:"meta,omitempty" url:"meta,omitempty"` NetworkVolume *string `json:"network,omitempty" url:"network,omitempty"` - UserVolume *string `json:"user,omitempty" url:"user,omitempty"` - VendorVolume *string `json:"vendor,omitempty" url:"vendor,omitempty"` + UserVolume *string `json:"user,omitempty" url:"user,omitempty"` + VendorVolume *string `json:"vendor,omitempty" url:"vendor,omitempty"` } // CustomCloudInitIPConfig handles QEMU cloud-init IP configuration parameters. type CustomCloudInitIPConfig struct { - GatewayIPv4 *string `json:"gw,omitempty" url:"gw,omitempty"` + GatewayIPv4 *string `json:"gw,omitempty" url:"gw,omitempty"` GatewayIPv6 *string `json:"gw6,omitempty" url:"gw6,omitempty"` - IPv4 *string `json:"ip,omitempty" url:"ip,omitempty"` + IPv4 *string `json:"ip,omitempty" url:"ip,omitempty"` IPv6 *string `json:"ip6,omitempty" url:"ip6,omitempty"` } @@ -64,32 +64,32 @@ type CustomCloudInitSSHKeys []string // CustomCPUEmulation handles QEMU CPU emulation parameters. type CustomCPUEmulation struct { - Flags *[]string `json:"flags,omitempty" url:"flags,omitempty,semicolon"` - Hidden *CustomBool `json:"hidden,omitempty" url:"hidden,omitempty,int"` + Flags *[]string `json:"flags,omitempty" url:"flags,omitempty,semicolon"` + Hidden *CustomBool `json:"hidden,omitempty" url:"hidden,omitempty,int"` HVVendorID *string `json:"hv-vendor-id,omitempty" url:"hv-vendor-id,omitempty"` - Type string `json:"cputype,omitempty" url:"cputype,omitempty"` + Type string `json:"cputype,omitempty" url:"cputype,omitempty"` } // CustomEFIDisk handles QEMU EFI disk parameters. type CustomEFIDisk struct { - DiskSize *int `json:"size,omitempty" url:"size,omitempty"` - FileVolume string `json:"file" url:"file"` + DiskSize *int `json:"size,omitempty" url:"size,omitempty"` + FileVolume string `json:"file" url:"file"` Format *string `json:"format,omitempty" url:"format,omitempty"` } // CustomNetworkDevice handles QEMU network device parameters. type CustomNetworkDevice struct { - Model string `json:"model" url:"model"` - Bridge *string `json:"bridge,omitempty" url:"bridge,omitempty"` - Enabled bool `json:"-" url:"-"` - Firewall *CustomBool `json:"firewall,omitempty" url:"firewall,omitempty,int"` + Model string `json:"model" url:"model"` + Bridge *string `json:"bridge,omitempty" url:"bridge,omitempty"` + Enabled bool `json:"-" url:"-"` + Firewall *CustomBool `json:"firewall,omitempty" url:"firewall,omitempty,int"` LinkDown *CustomBool `json:"link_down,omitempty" url:"link_down,omitempty,int"` - MACAddress *string `json:"macaddr,omitempty" url:"macaddr,omitempty"` - Queues *int `json:"queues,omitempty" url:"queues,omitempty"` - RateLimit *float64 `json:"rate,omitempty" url:"rate,omitempty"` - Tag *int `json:"tag,omitempty" url:"tag,omitempty"` - MTU *int `json:"mtu,omitempty" url:"mtu,omitempty"` - Trunks []int `json:"trunks,omitempty" url:"trunks,omitempty"` + MACAddress *string `json:"macaddr,omitempty" url:"macaddr,omitempty"` + Queues *int `json:"queues,omitempty" url:"queues,omitempty"` + RateLimit *float64 `json:"rate,omitempty" url:"rate,omitempty"` + Tag *int `json:"tag,omitempty" url:"tag,omitempty"` + MTU *int `json:"mtu,omitempty" url:"mtu,omitempty"` + Trunks []int `json:"trunks,omitempty" url:"trunks,omitempty"` } // CustomNetworkDevices handles QEMU network device parameters. @@ -97,10 +97,10 @@ type CustomNetworkDevices []CustomNetworkDevice // CustomNUMADevice handles QEMU NUMA device parameters. type CustomNUMADevice struct { - CPUIDs []string `json:"cpus" url:"cpus,semicolon"` + CPUIDs []string `json:"cpus" url:"cpus,semicolon"` HostNodeNames *[]string `json:"hostnodes,omitempty" url:"hostnodes,omitempty,semicolon"` - Memory *float64 `json:"memory,omitempty" url:"memory,omitempty"` - Policy *string `json:"policy,omitempty" url:"policy,omitempty"` + Memory *float64 `json:"memory,omitempty" url:"memory,omitempty"` + Policy *string `json:"policy,omitempty" url:"policy,omitempty"` } // CustomNUMADevices handles QEMU NUMA device parameters. @@ -108,12 +108,12 @@ type CustomNUMADevices []CustomNUMADevice // CustomPCIDevice handles QEMU host PCI device mapping parameters. type CustomPCIDevice struct { - DeviceIDs []string `json:"host" url:"host,semicolon"` - MDev *string `json:"mdev,omitempty" url:"mdev,omitempty"` - PCIExpress *CustomBool `json:"pcie,omitempty" url:"pcie,omitempty,int"` - ROMBAR *CustomBool `json:"rombar,omitempty" url:"rombar,omitempty,int"` + DeviceIDs []string `json:"host" url:"host,semicolon"` + MDev *string `json:"mdev,omitempty" url:"mdev,omitempty"` + PCIExpress *CustomBool `json:"pcie,omitempty" url:"pcie,omitempty,int"` + ROMBAR *CustomBool `json:"rombar,omitempty" url:"rombar,omitempty,int"` ROMFile *string `json:"romfile,omitempty" url:"romfile,omitempty"` - XVGA *CustomBool `json:"x-vga,omitempty" url:"x-vga,omitempty,int"` + XVGA *CustomBool `json:"x-vga,omitempty" url:"x-vga,omitempty,int"` } // CustomPCIDevices handles QEMU host PCI device mapping parameters. @@ -125,50 +125,50 @@ type CustomSerialDevices []string // CustomSharedMemory handles QEMU Inter-VM shared memory parameters. type CustomSharedMemory struct { Name *string `json:"name,omitempty" url:"name,omitempty"` - Size int `json:"size" url:"size"` + Size int `json:"size" url:"size"` } // CustomSMBIOS handles QEMU SMBIOS parameters. type CustomSMBIOS struct { - Base64 *CustomBool `json:"base64,omitempty" url:"base64,omitempty"` - Family *string `json:"family,omitempty" url:"family,omitempty"` + Base64 *CustomBool `json:"base64,omitempty" url:"base64,omitempty"` + Family *string `json:"family,omitempty" url:"family,omitempty"` Manufacturer *string `json:"manufacturer,omitempty" url:"manufacturer,omitempty"` - Product *string `json:"product,omitempty" url:"product,omitempty"` - Serial *string `json:"serial,omitempty" url:"serial,omitempty"` - SKU *string `json:"sku,omitempty" url:"sku,omitempty"` - UUID *string `json:"uuid,omitempty" url:"uuid,omitempty"` - Version *string `json:"version,omitempty" url:"version,omitempty"` + Product *string `json:"product,omitempty" url:"product,omitempty"` + Serial *string `json:"serial,omitempty" url:"serial,omitempty"` + SKU *string `json:"sku,omitempty" url:"sku,omitempty"` + UUID *string `json:"uuid,omitempty" url:"uuid,omitempty"` + Version *string `json:"version,omitempty" url:"version,omitempty"` } // CustomSpiceEnhancements handles QEMU spice enhancement parameters. type CustomSpiceEnhancements struct { - FolderSharing *CustomBool `json:"foldersharing,omitempty" url:"foldersharing,omitempty"` + FolderSharing *CustomBool `json:"foldersharing,omitempty" url:"foldersharing,omitempty"` VideoStreaming *string `json:"videostreaming,omitempty" url:"videostreaming,omitempty"` } // CustomStartupOrder handles QEMU startup order parameters. type CustomStartupOrder struct { - Down *int `json:"down,omitempty" url:"down,omitempty"` + Down *int `json:"down,omitempty" url:"down,omitempty"` Order *int `json:"order,omitempty" url:"order,omitempty"` - Up *int `json:"up,omitempty" url:"up,omitempty"` + Up *int `json:"up,omitempty" url:"up,omitempty"` } // CustomStorageDevice handles QEMU SATA device parameters. type CustomStorageDevice struct { - AIO *string `json:"aio,omitempty" url:"aio,omitempty"` - BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"` + AIO *string `json:"aio,omitempty" url:"aio,omitempty"` + BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"` BurstableReadSpeedMbps *int `json:"mbps_rd_max,omitempty" url:"mbps_rd_max,omitempty"` BurstableWriteSpeedMbps *int `json:"mbps_wr_max,omitempty" url:"mbps_wr_max,omitempty"` - Discard *string `json:"discard,omitempty" url:"discard,omitempty"` - Enabled bool `json:"-" url:"-"` - FileVolume string `json:"file" url:"file"` - Format *string `json:"format,omitempty" url:"format,omitempty"` - IOThread *CustomBool `json:"iothread,omitempty" url:"iothread,omitempty,int"` - SSD *CustomBool `json:"ssd,omitempty" url:"ssd,omitempty,int"` - MaxReadSpeedMbps *int `json:"mbps_rd,omitempty" url:"mbps_rd,omitempty"` - MaxWriteSpeedMbps *int `json:"mbps_wr,omitempty" url:"mbps_wr,omitempty"` - Media *string `json:"media,omitempty" url:"media,omitempty"` - Size *string `json:"size,omitempty" url:"size,omitempty"` + Discard *string `json:"discard,omitempty" url:"discard,omitempty"` + Enabled bool `json:"-" url:"-"` + FileVolume string `json:"file" url:"file"` + Format *string `json:"format,omitempty" url:"format,omitempty"` + IOThread *CustomBool `json:"iothread,omitempty" url:"iothread,omitempty,int"` + SSD *CustomBool `json:"ssd,omitempty" url:"ssd,omitempty,int"` + MaxReadSpeedMbps *int `json:"mbps_rd,omitempty" url:"mbps_rd,omitempty"` + MaxWriteSpeedMbps *int `json:"mbps_wr,omitempty" url:"mbps_wr,omitempty"` + Media *string `json:"media,omitempty" url:"media,omitempty"` + Size *string `json:"size,omitempty" url:"size,omitempty"` Interface *string ID *string FileID *string @@ -180,7 +180,7 @@ type CustomStorageDevices map[string]CustomStorageDevice // CustomUSBDevice handles QEMU USB device parameters. type CustomUSBDevice struct { - HostDevice string `json:"host" url:"host"` + HostDevice string `json:"host" url:"host"` USB3 *CustomBool `json:"usb3,omitempty" url:"usb3,omitempty,int"` } @@ -190,15 +190,15 @@ type CustomUSBDevices []CustomUSBDevice // CustomVGADevice handles QEMU VGA device parameters. type CustomVGADevice struct { Memory *int `json:"memory,omitempty" url:"memory,omitempty"` - Type *string `json:"type,omitempty" url:"type,omitempty"` + Type *string `json:"type,omitempty" url:"type,omitempty"` } // CustomVirtualIODevice handles QEMU VirtIO device parameters. type CustomVirtualIODevice struct { - AIO *string `json:"aio,omitempty" url:"aio,omitempty"` + AIO *string `json:"aio,omitempty" url:"aio,omitempty"` BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"` - Enabled bool `json:"-" url:"-"` - FileVolume string `json:"file" url:"file"` + Enabled bool `json:"-" url:"-"` + FileVolume string `json:"file" url:"file"` } // CustomVirtualIODevices handles QEMU VirtIO device parameters. @@ -207,95 +207,95 @@ type CustomVirtualIODevices []CustomVirtualIODevice // CustomWatchdogDevice handles QEMU watchdog device parameters. type CustomWatchdogDevice struct { Action *string `json:"action,omitempty" url:"action,omitempty"` - Model *string `json:"model" url:"model"` + Model *string `json:"model" url:"model"` } // VirtualEnvironmentVMCloneRequestBody contains the data for an virtual machine clone request. type VirtualEnvironmentVMCloneRequestBody struct { - BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` + BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` Description *string `json:"description,omitempty" url:"description,omitempty"` - FullCopy *CustomBool `json:"full,omitempty" url:"full,omitempty,int"` - Name *string `json:"name,omitempty" url:"name,omitempty"` - PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` - SnapshotName *string `json:"snapname,omitempty" url:"snapname,omitempty"` - TargetNodeName *string `json:"target,omitempty" url:"target,omitempty"` - TargetStorage *string `json:"storage,omitempty" url:"storage,omitempty"` - TargetStorageFormat *string `json:"format,omitempty" url:"format,omitempty"` - VMIDNew int `json:"newid" url:"newid"` + FullCopy *CustomBool `json:"full,omitempty" url:"full,omitempty,int"` + Name *string `json:"name,omitempty" url:"name,omitempty"` + PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` + SnapshotName *string `json:"snapname,omitempty" url:"snapname,omitempty"` + TargetNodeName *string `json:"target,omitempty" url:"target,omitempty"` + TargetStorage *string `json:"storage,omitempty" url:"storage,omitempty"` + TargetStorageFormat *string `json:"format,omitempty" url:"format,omitempty"` + VMIDNew int `json:"newid" url:"newid"` } // VirtualEnvironmentVMCreateRequestBody contains the data for a virtual machine create request. type VirtualEnvironmentVMCreateRequestBody struct { - ACPI *CustomBool `json:"acpi,omitempty" url:"acpi,omitempty,int"` - Agent *CustomAgent `json:"agent,omitempty" url:"agent,omitempty"` - AllowReboot *CustomBool `json:"reboot,omitempty" url:"reboot,omitempty,int"` - AudioDevices CustomAudioDevices `json:"audio,omitempty" url:"audio,omitempty"` - Autostart *CustomBool `json:"autostart,omitempty" url:"autostart,omitempty,int"` - BackupFile *string `json:"archive,omitempty" url:"archive,omitempty"` - BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` - BIOS *string `json:"bios,omitempty" url:"bios,omitempty"` - BootDisk *string `json:"bootdisk,omitempty" url:"bootdisk,omitempty"` - BootOrder *string `json:"boot,omitempty" url:"boot,omitempty"` - CDROM *string `json:"cdrom,omitempty" url:"cdrom,omitempty"` - CloudInitConfig *CustomCloudInitConfig `json:"cloudinit,omitempty" url:"cloudinit,omitempty"` - CPUArchitecture *string `json:"arch,omitempty" url:"arch,omitempty"` - CPUCores *int `json:"cores,omitempty" url:"cores,omitempty"` - CPUEmulation *CustomCPUEmulation `json:"cpu,omitempty" url:"cpu,omitempty"` - CPULimit *int `json:"cpulimit,omitempty" url:"cpulimit,omitempty"` - CPUSockets *int `json:"sockets,omitempty" url:"sockets,omitempty"` - CPUUnits *int `json:"cpuunits,omitempty" url:"cpuunits,omitempty"` - DedicatedMemory *int `json:"memory,omitempty" url:"memory,omitempty"` - Delete []string `json:"delete,omitempty" url:"delete,omitempty,comma"` - DeletionProtection *CustomBool `json:"protection,omitempty" url:"force,omitempty,int"` - Description *string `json:"description,omitempty" url:"description,omitempty"` - EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty" url:"efidisk0,omitempty"` - FloatingMemory *int `json:"balloon,omitempty" url:"balloon,omitempty"` - FloatingMemoryShares *int `json:"shares,omitempty" url:"shares,omitempty"` - Freeze *CustomBool `json:"freeze,omitempty" url:"freeze,omitempty,int"` - HookScript *string `json:"hookscript,omitempty" url:"hookscript,omitempty"` - Hotplug CustomCommaSeparatedList `json:"hotplug,omitempty" url:"hotplug,omitempty,comma"` - Hugepages *string `json:"hugepages,omitempty" url:"hugepages,omitempty"` - IDEDevices CustomStorageDevices `json:"ide,omitempty" url:",omitempty"` - KeyboardLayout *string `json:"keyboard,omitempty" url:"keyboard,omitempty"` - KVMArguments *string `json:"args,omitempty" url:"args,omitempty,space"` - KVMEnabled *CustomBool `json:"kvm,omitempty" url:"kvm,omitempty,int"` - LocalTime *CustomBool `json:"localtime,omitempty" url:"localtime,omitempty,int"` - Lock *string `json:"lock,omitempty" url:"lock,omitempty"` - Machine *string `json:"machine,omitempty" url:"machine,omitempty"` - MigrateDowntime *float64 `json:"migrate_downtime,omitempty" url:"migrate_downtime,omitempty"` - MigrateSpeed *int `json:"migrate_speed,omitempty" url:"migrate_speed,omitempty"` - Name *string `json:"name,omitempty" url:"name,omitempty"` - NetworkDevices CustomNetworkDevices `json:"net,omitempty" url:"net,omitempty"` - NUMADevices CustomNUMADevices `json:"numa_devices,omitempty" url:"numa,omitempty"` - NUMAEnabled *CustomBool `json:"numa,omitempty" url:"numa,omitempty,int"` - OSType *string `json:"ostype,omitempty" url:"ostype,omitempty"` - Overwrite *CustomBool `json:"force,omitempty" url:"force,omitempty,int"` - PCIDevices CustomPCIDevices `json:"hostpci,omitempty" url:"hostpci,omitempty"` - PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` - Revert *string `json:"revert,omitempty" url:"revert,omitempty"` - SATADevices CustomStorageDevices `json:"sata,omitempty" url:"sata,omitempty"` - SCSIDevices CustomStorageDevices `json:"scsi,omitempty" url:"scsi,omitempty"` - SCSIHardware *string `json:"scsihw,omitempty" url:"scsihw,omitempty"` - SerialDevices CustomSerialDevices `json:"serial,omitempty" url:"serial,omitempty"` - SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty" url:"ivshmem,omitempty"` - SkipLock *CustomBool `json:"skiplock,omitempty" url:"skiplock,omitempty,int"` - SMBIOS *CustomSMBIOS `json:"smbios1,omitempty" url:"smbios1,omitempty"` - SpiceEnhancements *CustomSpiceEnhancements `json:"spice_enhancements,omitempty" url:"spice_enhancements,omitempty"` - StartDate *string `json:"startdate,omitempty" url:"startdate,omitempty"` - StartOnBoot *CustomBool `json:"onboot,omitempty" url:"onboot,omitempty,int"` - StartupOrder *CustomStartupOrder `json:"startup,omitempty" url:"startup,omitempty"` - TabletDeviceEnabled *CustomBool `json:"tablet,omitempty" url:"tablet,omitempty,int"` - Tags *string `json:"tags,omitempty" url:"tags,omitempty"` - Template *CustomBool `json:"template,omitempty" url:"template,omitempty,int"` - TimeDriftFixEnabled *CustomBool `json:"tdf,omitempty" url:"tdf,omitempty,int"` - USBDevices CustomUSBDevices `json:"usb,omitempty" url:"usb,omitempty"` - VGADevice *CustomVGADevice `json:"vga,omitempty" url:"vga,omitempty"` - VirtualCPUCount *int `json:"vcpus,omitempty" url:"vcpus,omitempty"` - VirtualIODevices CustomStorageDevices `json:"virtio,omitempty" url:"virtio,omitempty"` - VMGenerationID *string `json:"vmgenid,omitempty" url:"vmgenid,omitempty"` - VMID *int `json:"vmid,omitempty" url:"vmid,omitempty"` - VMStateDatastoreID *string `json:"vmstatestorage,omitempty" url:"vmstatestorage,omitempty"` - WatchdogDevice *CustomWatchdogDevice `json:"watchdog,omitempty" url:"watchdog,omitempty"` + ACPI *CustomBool `json:"acpi,omitempty" url:"acpi,omitempty,int"` + Agent *CustomAgent `json:"agent,omitempty" url:"agent,omitempty"` + AllowReboot *CustomBool `json:"reboot,omitempty" url:"reboot,omitempty,int"` + AudioDevices CustomAudioDevices `json:"audio,omitempty" url:"audio,omitempty"` + Autostart *CustomBool `json:"autostart,omitempty" url:"autostart,omitempty,int"` + BackupFile *string `json:"archive,omitempty" url:"archive,omitempty"` + BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` + BIOS *string `json:"bios,omitempty" url:"bios,omitempty"` + BootDisk *string `json:"bootdisk,omitempty" url:"bootdisk,omitempty"` + BootOrder *string `json:"boot,omitempty" url:"boot,omitempty"` + CDROM *string `json:"cdrom,omitempty" url:"cdrom,omitempty"` + CloudInitConfig *CustomCloudInitConfig `json:"cloudinit,omitempty" url:"cloudinit,omitempty"` + CPUArchitecture *string `json:"arch,omitempty" url:"arch,omitempty"` + CPUCores *int `json:"cores,omitempty" url:"cores,omitempty"` + CPUEmulation *CustomCPUEmulation `json:"cpu,omitempty" url:"cpu,omitempty"` + CPULimit *int `json:"cpulimit,omitempty" url:"cpulimit,omitempty"` + CPUSockets *int `json:"sockets,omitempty" url:"sockets,omitempty"` + CPUUnits *int `json:"cpuunits,omitempty" url:"cpuunits,omitempty"` + DedicatedMemory *int `json:"memory,omitempty" url:"memory,omitempty"` + Delete []string `json:"delete,omitempty" url:"delete,omitempty,comma"` + DeletionProtection *CustomBool `json:"protection,omitempty" url:"force,omitempty,int"` + Description *string `json:"description,omitempty" url:"description,omitempty"` + EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty" url:"efidisk0,omitempty"` + FloatingMemory *int `json:"balloon,omitempty" url:"balloon,omitempty"` + FloatingMemoryShares *int `json:"shares,omitempty" url:"shares,omitempty"` + Freeze *CustomBool `json:"freeze,omitempty" url:"freeze,omitempty,int"` + HookScript *string `json:"hookscript,omitempty" url:"hookscript,omitempty"` + Hotplug CustomCommaSeparatedList `json:"hotplug,omitempty" url:"hotplug,omitempty,comma"` + Hugepages *string `json:"hugepages,omitempty" url:"hugepages,omitempty"` + IDEDevices CustomStorageDevices `json:"ide,omitempty" url:",omitempty"` + KeyboardLayout *string `json:"keyboard,omitempty" url:"keyboard,omitempty"` + KVMArguments *string `json:"args,omitempty" url:"args,omitempty,space"` + KVMEnabled *CustomBool `json:"kvm,omitempty" url:"kvm,omitempty,int"` + LocalTime *CustomBool `json:"localtime,omitempty" url:"localtime,omitempty,int"` + Lock *string `json:"lock,omitempty" url:"lock,omitempty"` + Machine *string `json:"machine,omitempty" url:"machine,omitempty"` + MigrateDowntime *float64 `json:"migrate_downtime,omitempty" url:"migrate_downtime,omitempty"` + MigrateSpeed *int `json:"migrate_speed,omitempty" url:"migrate_speed,omitempty"` + Name *string `json:"name,omitempty" url:"name,omitempty"` + NetworkDevices CustomNetworkDevices `json:"net,omitempty" url:"net,omitempty"` + NUMADevices CustomNUMADevices `json:"numa_devices,omitempty" url:"numa,omitempty"` + NUMAEnabled *CustomBool `json:"numa,omitempty" url:"numa,omitempty,int"` + OSType *string `json:"ostype,omitempty" url:"ostype,omitempty"` + Overwrite *CustomBool `json:"force,omitempty" url:"force,omitempty,int"` + PCIDevices CustomPCIDevices `json:"hostpci,omitempty" url:"hostpci,omitempty"` + PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` + Revert *string `json:"revert,omitempty" url:"revert,omitempty"` + SATADevices CustomStorageDevices `json:"sata,omitempty" url:"sata,omitempty"` + SCSIDevices CustomStorageDevices `json:"scsi,omitempty" url:"scsi,omitempty"` + SCSIHardware *string `json:"scsihw,omitempty" url:"scsihw,omitempty"` + SerialDevices CustomSerialDevices `json:"serial,omitempty" url:"serial,omitempty"` + SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty" url:"ivshmem,omitempty"` + SkipLock *CustomBool `json:"skiplock,omitempty" url:"skiplock,omitempty,int"` + SMBIOS *CustomSMBIOS `json:"smbios1,omitempty" url:"smbios1,omitempty"` + SpiceEnhancements *CustomSpiceEnhancements `json:"spice_enhancements,omitempty" url:"spice_enhancements,omitempty"` + StartDate *string `json:"startdate,omitempty" url:"startdate,omitempty"` + StartOnBoot *CustomBool `json:"onboot,omitempty" url:"onboot,omitempty,int"` + StartupOrder *CustomStartupOrder `json:"startup,omitempty" url:"startup,omitempty"` + TabletDeviceEnabled *CustomBool `json:"tablet,omitempty" url:"tablet,omitempty,int"` + Tags *string `json:"tags,omitempty" url:"tags,omitempty"` + Template *CustomBool `json:"template,omitempty" url:"template,omitempty,int"` + TimeDriftFixEnabled *CustomBool `json:"tdf,omitempty" url:"tdf,omitempty,int"` + USBDevices CustomUSBDevices `json:"usb,omitempty" url:"usb,omitempty"` + VGADevice *CustomVGADevice `json:"vga,omitempty" url:"vga,omitempty"` + VirtualCPUCount *int `json:"vcpus,omitempty" url:"vcpus,omitempty"` + VirtualIODevices CustomStorageDevices `json:"virtio,omitempty" url:"virtio,omitempty"` + VMGenerationID *string `json:"vmgenid,omitempty" url:"vmgenid,omitempty"` + VMID *int `json:"vmid,omitempty" url:"vmid,omitempty"` + VMStateDatastoreID *string `json:"vmstatestorage,omitempty" url:"vmstatestorage,omitempty"` + WatchdogDevice *CustomWatchdogDevice `json:"watchdog,omitempty" url:"watchdog,omitempty"` } // VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseBody contains the body from a QEMU get network interfaces response. @@ -335,144 +335,144 @@ type VirtualEnvironmentVMGetQEMUNetworkInterfacesResponseResultStatistics struct TXPackets int `json:"tx-packets"` } -// VirtualEnvironmentVMGetResponseBody contains the body from an virtual machine get response. +// VirtualEnvironmentVMGetResponseBody contains the body from a virtual machine get response. type VirtualEnvironmentVMGetResponseBody struct { Data *VirtualEnvironmentVMGetResponseData `json:"data,omitempty"` } // VirtualEnvironmentVMGetResponseData contains the data from an virtual machine get response. type VirtualEnvironmentVMGetResponseData struct { - ACPI *CustomBool `json:"acpi,omitempty"` - Agent *CustomAgent `json:"agent,omitempty"` - AllowReboot *CustomBool `json:"reboot,omitempty"` - AudioDevice *CustomAudioDevice `json:"audio0,omitempty"` - Autostart *CustomBool `json:"autostart,omitempty"` - BackupFile *string `json:"archive,omitempty"` - BandwidthLimit *int `json:"bwlimit,omitempty"` - BIOS *string `json:"bios,omitempty"` - BootDisk *string `json:"bootdisk,omitempty"` - BootOrder *string `json:"boot,omitempty"` - CDROM *string `json:"cdrom,omitempty"` - CloudInitDNSDomain *string `json:"searchdomain,omitempty"` - CloudInitDNSServer *string `json:"nameserver,omitempty"` - CloudInitFiles *CustomCloudInitFiles `json:"cicustom,omitempty"` - CloudInitPassword *string `json:"cipassword,omitempty"` - CloudInitSSHKeys *CustomCloudInitSSHKeys `json:"sshkeys,omitempty"` - CloudInitType *string `json:"citype,omitempty"` - CloudInitUsername *string `json:"ciuser,omitempty"` - CPUArchitecture *string `json:"arch,omitempty"` - CPUCores *int `json:"cores,omitempty"` - CPUEmulation *CustomCPUEmulation `json:"cpu,omitempty"` - CPULimit *int `json:"cpulimit,omitempty"` - CPUSockets *int `json:"sockets,omitempty"` - CPUUnits *int `json:"cpuunits,omitempty"` - DedicatedMemory *int `json:"memory,omitempty"` - DeletionProtection *CustomBool `json:"protection,omitempty"` - Description *string `json:"description,omitempty"` - EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty"` - FloatingMemory *int `json:"balloon,omitempty"` - FloatingMemoryShares *int `json:"shares,omitempty"` - Freeze *CustomBool `json:"freeze,omitempty"` - HookScript *string `json:"hookscript,omitempty"` - Hotplug *CustomCommaSeparatedList `json:"hotplug,omitempty"` - Hugepages *string `json:"hugepages,omitempty"` - IDEDevice0 *CustomStorageDevice `json:"ide0,omitempty"` - IDEDevice1 *CustomStorageDevice `json:"ide1,omitempty"` - IDEDevice2 *CustomStorageDevice `json:"ide2,omitempty"` - IDEDevice3 *CustomStorageDevice `json:"ide3,omitempty"` - IPConfig0 *CustomCloudInitIPConfig `json:"ipconfig0,omitempty"` - IPConfig1 *CustomCloudInitIPConfig `json:"ipconfig1,omitempty"` - IPConfig2 *CustomCloudInitIPConfig `json:"ipconfig2,omitempty"` - IPConfig3 *CustomCloudInitIPConfig `json:"ipconfig3,omitempty"` - IPConfig4 *CustomCloudInitIPConfig `json:"ipconfig4,omitempty"` - IPConfig5 *CustomCloudInitIPConfig `json:"ipconfig5,omitempty"` - IPConfig6 *CustomCloudInitIPConfig `json:"ipconfig6,omitempty"` - IPConfig7 *CustomCloudInitIPConfig `json:"ipconfig7,omitempty"` - KeyboardLayout *string `json:"keyboard,omitempty"` - KVMArguments *string `json:"args,omitempty"` - KVMEnabled *CustomBool `json:"kvm,omitempty"` - LocalTime *CustomBool `json:"localtime,omitempty"` - Lock *string `json:"lock,omitempty"` - Machine *string `json:"machine,omitempty"` - MigrateDowntime *float64 `json:"migrate_downtime,omitempty"` - MigrateSpeed *int `json:"migrate_speed,omitempty"` - Name *string `json:"name,omitempty"` - NetworkDevice0 *CustomNetworkDevice `json:"net0,omitempty"` - NetworkDevice1 *CustomNetworkDevice `json:"net1,omitempty"` - NetworkDevice2 *CustomNetworkDevice `json:"net2,omitempty"` - NetworkDevice3 *CustomNetworkDevice `json:"net3,omitempty"` - NetworkDevice4 *CustomNetworkDevice `json:"net4,omitempty"` - NetworkDevice5 *CustomNetworkDevice `json:"net5,omitempty"` - NetworkDevice6 *CustomNetworkDevice `json:"net6,omitempty"` - NetworkDevice7 *CustomNetworkDevice `json:"net7,omitempty"` - NUMADevices *CustomNUMADevices `json:"numa_devices,omitempty"` - NUMAEnabled *CustomBool `json:"numa,omitempty"` - OSType *string `json:"ostype,omitempty"` - Overwrite *CustomBool `json:"force,omitempty"` - PCIDevice0 *CustomPCIDevice `json:"hostpci0,omitempty"` - PCIDevice1 *CustomPCIDevice `json:"hostpci1,omitempty"` - PCIDevice2 *CustomPCIDevice `json:"hostpci2,omitempty"` - PCIDevice3 *CustomPCIDevice `json:"hostpci3,omitempty"` - PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` - Revert *string `json:"revert,omitempty"` - SATADevice0 *CustomStorageDevice `json:"sata0,omitempty"` - SATADevice1 *CustomStorageDevice `json:"sata1,omitempty"` - SATADevice2 *CustomStorageDevice `json:"sata2,omitempty"` - SATADevice3 *CustomStorageDevice `json:"sata3,omitempty"` - SATADevice4 *CustomStorageDevice `json:"sata4,omitempty"` - SATADevice5 *CustomStorageDevice `json:"sata5,omitempty"` - SCSIDevice0 *CustomStorageDevice `json:"scsi0,omitempty"` - SCSIDevice1 *CustomStorageDevice `json:"scsi1,omitempty"` - SCSIDevice2 *CustomStorageDevice `json:"scsi2,omitempty"` - SCSIDevice3 *CustomStorageDevice `json:"scsi3,omitempty"` - SCSIDevice4 *CustomStorageDevice `json:"scsi4,omitempty"` - SCSIDevice5 *CustomStorageDevice `json:"scsi5,omitempty"` - SCSIDevice6 *CustomStorageDevice `json:"scsi6,omitempty"` - SCSIDevice7 *CustomStorageDevice `json:"scsi7,omitempty"` - SCSIDevice8 *CustomStorageDevice `json:"scsi8,omitempty"` - SCSIDevice9 *CustomStorageDevice `json:"scsi9,omitempty"` - SCSIDevice10 *CustomStorageDevice `json:"scsi10,omitempty"` - SCSIDevice11 *CustomStorageDevice `json:"scsi11,omitempty"` - SCSIDevice12 *CustomStorageDevice `json:"scsi12,omitempty"` - SCSIDevice13 *CustomStorageDevice `json:"scsi13,omitempty"` - SCSIHardware *string `json:"scsihw,omitempty"` - SerialDevice0 *string `json:"serial0,omitempty"` - SerialDevice1 *string `json:"serial1,omitempty"` - SerialDevice2 *string `json:"serial2,omitempty"` - SerialDevice3 *string `json:"serial3,omitempty"` - SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty"` - SkipLock *CustomBool `json:"skiplock,omitempty"` - SMBIOS *CustomSMBIOS `json:"smbios1,omitempty"` - SpiceEnhancements *CustomSpiceEnhancements `json:"spice_enhancements,omitempty"` - StartDate *string `json:"startdate,omitempty"` - StartOnBoot *CustomBool `json:"onboot,omitempty"` - StartupOrder *CustomStartupOrder `json:"startup,omitempty"` - TabletDeviceEnabled *CustomBool `json:"tablet,omitempty"` - Tags *string `json:"tags,omitempty"` - Template *CustomBool `json:"template,omitempty"` - TimeDriftFixEnabled *CustomBool `json:"tdf,omitempty"` - USBDevices *CustomUSBDevices `json:"usb,omitempty"` - VGADevice *CustomVGADevice `json:"vga,omitempty"` - VirtualCPUCount *int `json:"vcpus,omitempty"` - VirtualIODevice0 *CustomStorageDevice `json:"virtio0,omitempty"` - VirtualIODevice1 *CustomStorageDevice `json:"virtio1,omitempty"` - VirtualIODevice2 *CustomStorageDevice `json:"virtio2,omitempty"` - VirtualIODevice3 *CustomStorageDevice `json:"virtio3,omitempty"` - VirtualIODevice4 *CustomStorageDevice `json:"virtio4,omitempty"` - VirtualIODevice5 *CustomStorageDevice `json:"virtio5,omitempty"` - VirtualIODevice6 *CustomStorageDevice `json:"virtio6,omitempty"` - VirtualIODevice7 *CustomStorageDevice `json:"virtio7,omitempty"` - VirtualIODevice8 *CustomStorageDevice `json:"virtio8,omitempty"` - VirtualIODevice9 *CustomStorageDevice `json:"virtio9,omitempty"` - VirtualIODevice10 *CustomStorageDevice `json:"virtio10,omitempty"` - VirtualIODevice11 *CustomStorageDevice `json:"virtio11,omitempty"` - VirtualIODevice12 *CustomStorageDevice `json:"virtio12,omitempty"` - VirtualIODevice13 *CustomStorageDevice `json:"virtio13,omitempty"` - VirtualIODevice14 *CustomStorageDevice `json:"virtio14,omitempty"` - VirtualIODevice15 *CustomStorageDevice `json:"virtio15,omitempty"` - VMGenerationID *string `json:"vmgenid,omitempty"` - VMStateDatastoreID *string `json:"vmstatestorage,omitempty"` - WatchdogDevice *CustomWatchdogDevice `json:"watchdog,omitempty"` + ACPI *CustomBool `json:"acpi,omitempty"` + Agent *CustomAgent `json:"agent,omitempty"` + AllowReboot *CustomBool `json:"reboot,omitempty"` + AudioDevice *CustomAudioDevice `json:"audio0,omitempty"` + Autostart *CustomBool `json:"autostart,omitempty"` + BackupFile *string `json:"archive,omitempty"` + BandwidthLimit *int `json:"bwlimit,omitempty"` + BIOS *string `json:"bios,omitempty"` + BootDisk *string `json:"bootdisk,omitempty"` + BootOrder *string `json:"boot,omitempty"` + CDROM *string `json:"cdrom,omitempty"` + CloudInitDNSDomain *string `json:"searchdomain,omitempty"` + CloudInitDNSServer *string `json:"nameserver,omitempty"` + CloudInitFiles *CustomCloudInitFiles `json:"cicustom,omitempty"` + CloudInitPassword *string `json:"cipassword,omitempty"` + CloudInitSSHKeys *CustomCloudInitSSHKeys `json:"sshkeys,omitempty"` + CloudInitType *string `json:"citype,omitempty"` + CloudInitUsername *string `json:"ciuser,omitempty"` + CPUArchitecture *string `json:"arch,omitempty"` + CPUCores *int `json:"cores,omitempty"` + CPUEmulation *CustomCPUEmulation `json:"cpu,omitempty"` + CPULimit *int `json:"cpulimit,omitempty"` + CPUSockets *int `json:"sockets,omitempty"` + CPUUnits *int `json:"cpuunits,omitempty"` + DedicatedMemory *int `json:"memory,omitempty"` + DeletionProtection *CustomBool `json:"protection,omitempty"` + Description *string `json:"description,omitempty"` + EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty"` + FloatingMemory *int `json:"balloon,omitempty"` + FloatingMemoryShares *int `json:"shares,omitempty"` + Freeze *CustomBool `json:"freeze,omitempty"` + HookScript *string `json:"hookscript,omitempty"` + Hotplug *CustomCommaSeparatedList `json:"hotplug,omitempty"` + Hugepages *string `json:"hugepages,omitempty"` + IDEDevice0 *CustomStorageDevice `json:"ide0,omitempty"` + IDEDevice1 *CustomStorageDevice `json:"ide1,omitempty"` + IDEDevice2 *CustomStorageDevice `json:"ide2,omitempty"` + IDEDevice3 *CustomStorageDevice `json:"ide3,omitempty"` + IPConfig0 *CustomCloudInitIPConfig `json:"ipconfig0,omitempty"` + IPConfig1 *CustomCloudInitIPConfig `json:"ipconfig1,omitempty"` + IPConfig2 *CustomCloudInitIPConfig `json:"ipconfig2,omitempty"` + IPConfig3 *CustomCloudInitIPConfig `json:"ipconfig3,omitempty"` + IPConfig4 *CustomCloudInitIPConfig `json:"ipconfig4,omitempty"` + IPConfig5 *CustomCloudInitIPConfig `json:"ipconfig5,omitempty"` + IPConfig6 *CustomCloudInitIPConfig `json:"ipconfig6,omitempty"` + IPConfig7 *CustomCloudInitIPConfig `json:"ipconfig7,omitempty"` + KeyboardLayout *string `json:"keyboard,omitempty"` + KVMArguments *string `json:"args,omitempty"` + KVMEnabled *CustomBool `json:"kvm,omitempty"` + LocalTime *CustomBool `json:"localtime,omitempty"` + Lock *string `json:"lock,omitempty"` + Machine *string `json:"machine,omitempty"` + MigrateDowntime *float64 `json:"migrate_downtime,omitempty"` + MigrateSpeed *int `json:"migrate_speed,omitempty"` + Name *string `json:"name,omitempty"` + NetworkDevice0 *CustomNetworkDevice `json:"net0,omitempty"` + NetworkDevice1 *CustomNetworkDevice `json:"net1,omitempty"` + NetworkDevice2 *CustomNetworkDevice `json:"net2,omitempty"` + NetworkDevice3 *CustomNetworkDevice `json:"net3,omitempty"` + NetworkDevice4 *CustomNetworkDevice `json:"net4,omitempty"` + NetworkDevice5 *CustomNetworkDevice `json:"net5,omitempty"` + NetworkDevice6 *CustomNetworkDevice `json:"net6,omitempty"` + NetworkDevice7 *CustomNetworkDevice `json:"net7,omitempty"` + NUMADevices *CustomNUMADevices `json:"numa_devices,omitempty"` + NUMAEnabled *CustomBool `json:"numa,omitempty"` + OSType *string `json:"ostype,omitempty"` + Overwrite *CustomBool `json:"force,omitempty"` + PCIDevice0 *CustomPCIDevice `json:"hostpci0,omitempty"` + PCIDevice1 *CustomPCIDevice `json:"hostpci1,omitempty"` + PCIDevice2 *CustomPCIDevice `json:"hostpci2,omitempty"` + PCIDevice3 *CustomPCIDevice `json:"hostpci3,omitempty"` + PoolID *string `json:"pool,omitempty" url:"pool,omitempty"` + Revert *string `json:"revert,omitempty"` + SATADevice0 *CustomStorageDevice `json:"sata0,omitempty"` + SATADevice1 *CustomStorageDevice `json:"sata1,omitempty"` + SATADevice2 *CustomStorageDevice `json:"sata2,omitempty"` + SATADevice3 *CustomStorageDevice `json:"sata3,omitempty"` + SATADevice4 *CustomStorageDevice `json:"sata4,omitempty"` + SATADevice5 *CustomStorageDevice `json:"sata5,omitempty"` + SCSIDevice0 *CustomStorageDevice `json:"scsi0,omitempty"` + SCSIDevice1 *CustomStorageDevice `json:"scsi1,omitempty"` + SCSIDevice2 *CustomStorageDevice `json:"scsi2,omitempty"` + SCSIDevice3 *CustomStorageDevice `json:"scsi3,omitempty"` + SCSIDevice4 *CustomStorageDevice `json:"scsi4,omitempty"` + SCSIDevice5 *CustomStorageDevice `json:"scsi5,omitempty"` + SCSIDevice6 *CustomStorageDevice `json:"scsi6,omitempty"` + SCSIDevice7 *CustomStorageDevice `json:"scsi7,omitempty"` + SCSIDevice8 *CustomStorageDevice `json:"scsi8,omitempty"` + SCSIDevice9 *CustomStorageDevice `json:"scsi9,omitempty"` + SCSIDevice10 *CustomStorageDevice `json:"scsi10,omitempty"` + SCSIDevice11 *CustomStorageDevice `json:"scsi11,omitempty"` + SCSIDevice12 *CustomStorageDevice `json:"scsi12,omitempty"` + SCSIDevice13 *CustomStorageDevice `json:"scsi13,omitempty"` + SCSIHardware *string `json:"scsihw,omitempty"` + SerialDevice0 *string `json:"serial0,omitempty"` + SerialDevice1 *string `json:"serial1,omitempty"` + SerialDevice2 *string `json:"serial2,omitempty"` + SerialDevice3 *string `json:"serial3,omitempty"` + SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty"` + SkipLock *CustomBool `json:"skiplock,omitempty"` + SMBIOS *CustomSMBIOS `json:"smbios1,omitempty"` + SpiceEnhancements *CustomSpiceEnhancements `json:"spice_enhancements,omitempty"` + StartDate *string `json:"startdate,omitempty"` + StartOnBoot *CustomBool `json:"onboot,omitempty"` + StartupOrder *CustomStartupOrder `json:"startup,omitempty"` + TabletDeviceEnabled *CustomBool `json:"tablet,omitempty"` + Tags *string `json:"tags,omitempty"` + Template *CustomBool `json:"template,omitempty"` + TimeDriftFixEnabled *CustomBool `json:"tdf,omitempty"` + USBDevices *CustomUSBDevices `json:"usb,omitempty"` + VGADevice *CustomVGADevice `json:"vga,omitempty"` + VirtualCPUCount *int `json:"vcpus,omitempty"` + VirtualIODevice0 *CustomStorageDevice `json:"virtio0,omitempty"` + VirtualIODevice1 *CustomStorageDevice `json:"virtio1,omitempty"` + VirtualIODevice2 *CustomStorageDevice `json:"virtio2,omitempty"` + VirtualIODevice3 *CustomStorageDevice `json:"virtio3,omitempty"` + VirtualIODevice4 *CustomStorageDevice `json:"virtio4,omitempty"` + VirtualIODevice5 *CustomStorageDevice `json:"virtio5,omitempty"` + VirtualIODevice6 *CustomStorageDevice `json:"virtio6,omitempty"` + VirtualIODevice7 *CustomStorageDevice `json:"virtio7,omitempty"` + VirtualIODevice8 *CustomStorageDevice `json:"virtio8,omitempty"` + VirtualIODevice9 *CustomStorageDevice `json:"virtio9,omitempty"` + VirtualIODevice10 *CustomStorageDevice `json:"virtio10,omitempty"` + VirtualIODevice11 *CustomStorageDevice `json:"virtio11,omitempty"` + VirtualIODevice12 *CustomStorageDevice `json:"virtio12,omitempty"` + VirtualIODevice13 *CustomStorageDevice `json:"virtio13,omitempty"` + VirtualIODevice14 *CustomStorageDevice `json:"virtio14,omitempty"` + VirtualIODevice15 *CustomStorageDevice `json:"virtio15,omitempty"` + VMGenerationID *string `json:"vmgenid,omitempty"` + VMStateDatastoreID *string `json:"vmstatestorage,omitempty"` + WatchdogDevice *CustomWatchdogDevice `json:"watchdog,omitempty"` } // VirtualEnvironmentVMGetStatusResponseBody contains the body from a VM get status response. @@ -509,9 +509,9 @@ type VirtualEnvironmentVMListResponseData struct { // VirtualEnvironmentVMMigrateRequestBody contains the body for a VM migration request. type VirtualEnvironmentVMMigrateRequestBody struct { - OnlineMigration *CustomBool `json:"online,omitempty" url:"online,omitempty"` - TargetNode string `json:"target" url:"target"` - TargetStorage *string `json:"targetstorage,omitempty" url:"targetstorage,omitempty"` + OnlineMigration *CustomBool `json:"online,omitempty" url:"online,omitempty"` + TargetNode string `json:"target" url:"target"` + TargetStorage *string `json:"targetstorage,omitempty" url:"targetstorage,omitempty"` WithLocalDisks *CustomBool `json:"with-local-disks,omitempty" url:"with-local-disks,omitempty,int"` } @@ -523,11 +523,11 @@ type VirtualEnvironmentVMMigrateResponseBody struct { // VirtualEnvironmentVMMoveDiskRequestBody contains the body for a VM move disk request. type VirtualEnvironmentVMMoveDiskRequestBody struct { BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"` - DeleteOriginalDisk *CustomBool `json:"delete,omitempty" url:"delete,omitempty,int"` - Digest *string `json:"digest,omitempty" url:"digest,omitempty"` - Disk string `json:"disk" url:"disk"` - TargetStorage string `json:"storage" url:"storage"` - TargetStorageFormat *string `json:"format,omitempty" url:"format,omitempty"` + DeleteOriginalDisk *CustomBool `json:"delete,omitempty" url:"delete,omitempty,int"` + Digest *string `json:"digest,omitempty" url:"digest,omitempty"` + Disk string `json:"disk" url:"disk"` + TargetStorage string `json:"storage" url:"storage"` + TargetStorageFormat *string `json:"format,omitempty" url:"format,omitempty"` } // VirtualEnvironmentVMMoveDiskResponseBody contains the body from a VM move disk response. @@ -547,18 +547,18 @@ type VirtualEnvironmentVMRebootResponseBody struct { // VirtualEnvironmentVMResizeDiskRequestBody contains the body for a VM resize disk request. type VirtualEnvironmentVMResizeDiskRequestBody struct { - Digest *string `json:"digest,omitempty" url:"digest,omitempty"` - Disk string `json:"disk" url:"disk"` - Size string `json:"size" url:"size"` + Digest *string `json:"digest,omitempty" url:"digest,omitempty"` + Disk string `json:"disk" url:"disk"` + Size string `json:"size" url:"size"` SkipLock *CustomBool `json:"skiplock,omitempty" url:"skiplock,omitempty,int"` } // VirtualEnvironmentVMShutdownRequestBody contains the body for a VM shutdown request. type VirtualEnvironmentVMShutdownRequestBody struct { - ForceStop *CustomBool `json:"forceStop,omitempty" url:"forceStop,omitempty,int"` + ForceStop *CustomBool `json:"forceStop,omitempty" url:"forceStop,omitempty,int"` KeepActive *CustomBool `json:"keepActive,omitempty" url:"keepActive,omitempty,int"` - SkipLock *CustomBool `json:"skipLock,omitempty" url:"skipLock,omitempty,int"` - Timeout *int `json:"timeout,omitempty" url:"timeout,omitempty"` + SkipLock *CustomBool `json:"skipLock,omitempty" url:"skipLock,omitempty,int"` + Timeout *int `json:"timeout,omitempty" url:"timeout,omitempty"` } // VirtualEnvironmentVMShutdownResponseBody contains the body from a VM shutdown response. @@ -705,7 +705,10 @@ func (r CustomCloudInitConfig) EncodeValues(_ string, v *url.Values) error { } if r.SSHKeys != nil { - v.Add("sshkeys", strings.ReplaceAll(url.QueryEscape(strings.Join(*r.SSHKeys, "\n")), "+", "%20")) + v.Add( + "sshkeys", + strings.ReplaceAll(url.QueryEscape(strings.Join(*r.SSHKeys, "\n")), "+", "%20"), + ) } if r.Type != nil { @@ -1232,7 +1235,6 @@ func (r *CustomAgent) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1267,7 +1269,6 @@ func (r *CustomAudioDevice) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1295,7 +1296,6 @@ func (r *CustomCloudInitFiles) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1327,7 +1327,6 @@ func (r *CustomCloudInitIPConfig) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1359,7 +1358,6 @@ func (r *CustomCloudInitSSHKeys) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1384,7 +1382,6 @@ func (r *CustomCPUEmulation) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1429,7 +1426,6 @@ func (r *CustomNetworkDevice) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1455,7 +1451,6 @@ func (r *CustomNetworkDevice) UnmarshalJSON(b []byte) error { r.Model = v[1] case "queues": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1463,7 +1458,6 @@ func (r *CustomNetworkDevice) UnmarshalJSON(b []byte) error { r.Queues = &iv case "rate": fv, err := strconv.ParseFloat(v[1], 64) - if err != nil { return err } @@ -1471,7 +1465,6 @@ func (r *CustomNetworkDevice) UnmarshalJSON(b []byte) error { case "mtu": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1479,7 +1472,6 @@ func (r *CustomNetworkDevice) UnmarshalJSON(b []byte) error { case "tag": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1491,7 +1483,6 @@ func (r *CustomNetworkDevice) UnmarshalJSON(b []byte) error { for i, trunk := range trunks { iv, err := strconv.Atoi(trunk) - if err != nil { return err } @@ -1515,7 +1506,6 @@ func (r *CustomPCIDevice) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1555,7 +1545,6 @@ func (r *CustomSharedMemory) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1587,7 +1576,6 @@ func (r *CustomSMBIOS) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1628,7 +1616,6 @@ func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1656,7 +1643,6 @@ func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error { r.FileVolume = v[1] case "mbps_rd": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1664,7 +1650,6 @@ func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error { r.MaxReadSpeedMbps = &iv case "mbps_rd_max": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1672,7 +1657,6 @@ func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error { r.BurstableReadSpeedMbps = &iv case "mbps_wr": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1680,7 +1664,6 @@ func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error { r.MaxWriteSpeedMbps = &iv case "mbps_wr_max": iv, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1714,7 +1697,6 @@ func (r *CustomVGADevice) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } @@ -1734,7 +1716,6 @@ func (r *CustomVGADevice) UnmarshalJSON(b []byte) error { switch v[0] { case "memory": m, err := strconv.Atoi(v[1]) - if err != nil { return err } @@ -1754,7 +1735,6 @@ func (r *CustomWatchdogDevice) UnmarshalJSON(b []byte) error { var s string err := json.Unmarshal(b, &s) - if err != nil { return err } diff --git a/proxmox/virtual_environment_vm_types_test.go b/proxmox/virtual_environment_vm_types_test.go index fb3ffbca..195ce4e7 100644 --- a/proxmox/virtual_environment_vm_types_test.go +++ b/proxmox/virtual_environment_vm_types_test.go @@ -53,6 +53,7 @@ func TestCustomStorageDevice_UnmarshalJSON(t *testing.T) { func strPtr(s string) *string { return &s } + func boolPtr(s bool) *CustomBool { customBool := CustomBool(s) return &customBool diff --git a/proxmoxtf/data_source_virtual_environment_cluster_alias.go b/proxmoxtf/data_source_virtual_environment_cluster_alias.go index 77eee763..c4c6accd 100644 --- a/proxmoxtf/data_source_virtual_environment_cluster_alias.go +++ b/proxmoxtf/data_source_virtual_environment_cluster_alias.go @@ -42,7 +42,11 @@ func dataSourceVirtualEnvironmentClusterAlias() *schema.Resource { } } -func dataSourceVirtualEnvironmentAliasRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentAliasRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_cluster_aliases.go b/proxmoxtf/data_source_virtual_environment_cluster_aliases.go index d5055b0d..d0dfde49 100644 --- a/proxmoxtf/data_source_virtual_environment_cluster_aliases.go +++ b/proxmoxtf/data_source_virtual_environment_cluster_aliases.go @@ -29,7 +29,11 @@ func dataSourceVirtualEnvironmentClusterAliases() *schema.Resource { } } -func dataSourceVirtualEnvironmentClusterAliasesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentClusterAliasesRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { diff --git a/proxmoxtf/data_source_virtual_environment_datastores.go b/proxmoxtf/data_source_virtual_environment_datastores.go index daf5d042..e6d3f744 100644 --- a/proxmoxtf/data_source_virtual_environment_datastores.go +++ b/proxmoxtf/data_source_virtual_environment_datastores.go @@ -10,7 +10,6 @@ import ( "sort" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -97,7 +96,11 @@ func dataSourceVirtualEnvironmentDatastores() *schema.Resource { } } -func dataSourceVirtualEnvironmentDatastoresRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentDatastoresRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_dns.go b/proxmoxtf/data_source_virtual_environment_dns.go index d54ad6e6..8a0f617e 100644 --- a/proxmoxtf/data_source_virtual_environment_dns.go +++ b/proxmoxtf/data_source_virtual_environment_dns.go @@ -9,7 +9,6 @@ import ( "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -43,7 +42,11 @@ func dataSourceVirtualEnvironmentDNS() *schema.Resource { } } -func dataSourceVirtualEnvironmentDNSRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentDNSRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_group.go b/proxmoxtf/data_source_virtual_environment_group.go index 6657be6c..bc85130c 100644 --- a/proxmoxtf/data_source_virtual_environment_group.go +++ b/proxmoxtf/data_source_virtual_environment_group.go @@ -69,7 +69,11 @@ func dataSourceVirtualEnvironmentGroup() *schema.Resource { } } -func dataSourceVirtualEnvironmentGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentGroupRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_groups.go b/proxmoxtf/data_source_virtual_environment_groups.go index 7ee56546..eaf12309 100644 --- a/proxmoxtf/data_source_virtual_environment_groups.go +++ b/proxmoxtf/data_source_virtual_environment_groups.go @@ -36,7 +36,11 @@ func dataSourceVirtualEnvironmentGroups() *schema.Resource { } } -func dataSourceVirtualEnvironmentGroupsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentGroupsRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_hosts.go b/proxmoxtf/data_source_virtual_environment_hosts.go index f90266d9..3174517f 100644 --- a/proxmoxtf/data_source_virtual_environment_hosts.go +++ b/proxmoxtf/data_source_virtual_environment_hosts.go @@ -10,7 +10,6 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -77,7 +76,11 @@ func dataSourceVirtualEnvironmentHosts() *schema.Resource { } } -func dataSourceVirtualEnvironmentHostsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentHostsRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_nodes.go b/proxmoxtf/data_source_virtual_environment_nodes.go index 00762a45..ce1fe552 100644 --- a/proxmoxtf/data_source_virtual_environment_nodes.go +++ b/proxmoxtf/data_source_virtual_environment_nodes.go @@ -9,7 +9,6 @@ import ( "math" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -87,7 +86,11 @@ func dataSourceVirtualEnvironmentNodes() *schema.Resource { } } -func dataSourceVirtualEnvironmentNodesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentNodesRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_pool.go b/proxmoxtf/data_source_virtual_environment_pool.go index 54f215ce..1129da69 100644 --- a/proxmoxtf/data_source_virtual_environment_pool.go +++ b/proxmoxtf/data_source_virtual_environment_pool.go @@ -74,7 +74,11 @@ func dataSourceVirtualEnvironmentPool() *schema.Resource { } } -func dataSourceVirtualEnvironmentPoolRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentPoolRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_pools.go b/proxmoxtf/data_source_virtual_environment_pools.go index fff71a27..cdc41e9f 100644 --- a/proxmoxtf/data_source_virtual_environment_pools.go +++ b/proxmoxtf/data_source_virtual_environment_pools.go @@ -29,7 +29,11 @@ func dataSourceVirtualEnvironmentPools() *schema.Resource { } } -func dataSourceVirtualEnvironmentPoolsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentPoolsRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { diff --git a/proxmoxtf/data_source_virtual_environment_role.go b/proxmoxtf/data_source_virtual_environment_role.go index b8e5299d..5fb5a8f3 100644 --- a/proxmoxtf/data_source_virtual_environment_role.go +++ b/proxmoxtf/data_source_virtual_environment_role.go @@ -35,7 +35,11 @@ func dataSourceVirtualEnvironmentRole() *schema.Resource { } } -func dataSourceVirtualEnvironmentRoleRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentRoleRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { diff --git a/proxmoxtf/data_source_virtual_environment_roles.go b/proxmoxtf/data_source_virtual_environment_roles.go index ccd866bc..70785117 100644 --- a/proxmoxtf/data_source_virtual_environment_roles.go +++ b/proxmoxtf/data_source_virtual_environment_roles.go @@ -46,7 +46,11 @@ func dataSourceVirtualEnvironmentRoles() *schema.Resource { } } -func dataSourceVirtualEnvironmentRolesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentRolesRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_time.go b/proxmoxtf/data_source_virtual_environment_time.go index d90283dc..d4fffdb3 100644 --- a/proxmoxtf/data_source_virtual_environment_time.go +++ b/proxmoxtf/data_source_virtual_environment_time.go @@ -10,7 +10,6 @@ import ( "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -49,7 +48,12 @@ func dataSourceVirtualEnvironmentTime() *schema.Resource { } } -func dataSourceVirtualEnvironmentTimeRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +//nolint:dupl +func dataSourceVirtualEnvironmentTimeRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -78,7 +82,10 @@ func dataSourceVirtualEnvironmentTimeRead(ctx context.Context, d *schema.Resourc diags = append(diags, diag.FromErr(err)...) err = d.Set(mkDataSourceVirtualEnvironmentTimeTimeZone, nodeTime.TimeZone) diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkDataSourceVirtualEnvironmentTimeUTCTime, time.Time(nodeTime.UTCTime).Format(time.RFC3339)) + err = d.Set( + mkDataSourceVirtualEnvironmentTimeUTCTime, + time.Time(nodeTime.UTCTime).Format(time.RFC3339), + ) diags = append(diags, diag.FromErr(err)...) return diags diff --git a/proxmoxtf/data_source_virtual_environment_user.go b/proxmoxtf/data_source_virtual_environment_user.go index ada27b92..171221af 100644 --- a/proxmoxtf/data_source_virtual_environment_user.go +++ b/proxmoxtf/data_source_virtual_environment_user.go @@ -9,7 +9,6 @@ import ( "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -107,7 +106,11 @@ func dataSourceVirtualEnvironmentUser() *schema.Resource { } } -func dataSourceVirtualEnvironmentUserRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentUserRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -176,7 +179,10 @@ func dataSourceVirtualEnvironmentUserRead(ctx context.Context, d *schema.Resourc if v.ExpirationDate != nil { t := time.Time(*v.ExpirationDate) if t.Unix() > 0 { - err = d.Set(mkDataSourceVirtualEnvironmentUserExpirationDate, t.UTC().Format(time.RFC3339)) + err = d.Set( + mkDataSourceVirtualEnvironmentUserExpirationDate, + t.UTC().Format(time.RFC3339), + ) } else { err = d.Set(mkDataSourceVirtualEnvironmentUserExpirationDate, time.Unix(0, 0).UTC().Format(time.RFC3339)) } diff --git a/proxmoxtf/data_source_virtual_environment_users.go b/proxmoxtf/data_source_virtual_environment_users.go index 00dd8b24..87d1a563 100644 --- a/proxmoxtf/data_source_virtual_environment_users.go +++ b/proxmoxtf/data_source_virtual_environment_users.go @@ -9,7 +9,6 @@ import ( "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -90,7 +89,11 @@ func dataSourceVirtualEnvironmentUsers() *schema.Resource { } } -func dataSourceVirtualEnvironmentUsersRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentUsersRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/data_source_virtual_environment_version.go b/proxmoxtf/data_source_virtual_environment_version.go index d15f8536..feb41306 100644 --- a/proxmoxtf/data_source_virtual_environment_version.go +++ b/proxmoxtf/data_source_virtual_environment_version.go @@ -50,7 +50,11 @@ func dataSourceVirtualEnvironmentVersion() *schema.Resource { } } -func dataSourceVirtualEnvironmentVersionRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func dataSourceVirtualEnvironmentVersionRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) diff --git a/proxmoxtf/provider.go b/proxmoxtf/provider.go index 5fba4ec8..3ca6538d 100644 --- a/proxmoxtf/provider.go +++ b/proxmoxtf/provider.go @@ -11,9 +11,9 @@ import ( "os" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -90,15 +90,18 @@ func Provider() *schema.Provider { if value == "" { return []string{}, []error{ - errors.New("you must specify an endpoint for the Proxmox Virtual Environment API (valid: https://host:port)"), + errors.New( + "you must specify an endpoint for the Proxmox Virtual Environment API (valid: https://host:port)", + ), } } _, err := url.ParseRequestURI(value) - if err != nil { return []string{}, []error{ - errors.New("you must specify a valid endpoint for the Proxmox Virtual Environment API (valid: https://host:port)"), + errors.New( + "you must specify a valid endpoint for the Proxmox Virtual Environment API (valid: https://host:port)", + ), } } @@ -143,7 +146,9 @@ func Provider() *schema.Provider { if value == "" { return []string{}, []error{ - errors.New("you must specify a password for the Proxmox Virtual Environment API"), + errors.New( + "you must specify a password for the Proxmox Virtual Environment API", + ), } } @@ -163,7 +168,9 @@ func Provider() *schema.Provider { if value == "" { return []string{}, []error{ - errors.New("you must specify a username for the Proxmox Virtual Environment API (valid: username@realm)"), + errors.New( + "you must specify a username for the Proxmox Virtual Environment API (valid: username@realm)", + ), } } @@ -209,7 +216,9 @@ func providerConfigure(_ context.Context, d *schema.ResourceData) (interface{}, func (c *providerConfiguration) GetVEClient() (*proxmox.VirtualEnvironmentClient, error) { if c.veClient == nil { - return nil, errors.New("you must specify the virtual environment details in the provider configuration") + return nil, errors.New( + "you must specify the virtual environment details in the provider configuration", + ) } return c.veClient, nil diff --git a/proxmoxtf/resource_virtual_environment_certificate.go b/proxmoxtf/resource_virtual_environment_certificate.go index ed675bb0..9db9976e 100644 --- a/proxmoxtf/resource_virtual_environment_certificate.go +++ b/proxmoxtf/resource_virtual_environment_certificate.go @@ -11,9 +11,9 @@ import ( "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -122,7 +122,11 @@ func resourceVirtualEnvironmentCertificate() *schema.Resource { } } -func resourceVirtualEnvironmentCertificateCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentCertificateCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { diags := resourceVirtualEnvironmentCertificateUpdate(ctx, d, m) if diags.HasError() { return diags @@ -135,7 +139,9 @@ func resourceVirtualEnvironmentCertificateCreate(ctx context.Context, d *schema. return nil } -func resourceVirtualEnvironmentCertificateGetUpdateBody(d *schema.ResourceData) (*proxmox.VirtualEnvironmentCertificateUpdateRequestBody, error) { +func resourceVirtualEnvironmentCertificateGetUpdateBody( + d *schema.ResourceData, +) *proxmox.VirtualEnvironmentCertificateUpdateRequestBody { certificate := d.Get(mkResourceVirtualEnvironmentCertificateCertificate).(string) certificateChain := d.Get(mkResourceVirtualEnvironmentCertificateCertificateChain).(string) overwrite := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentCertificateOverwrite).(bool)) @@ -162,10 +168,14 @@ func resourceVirtualEnvironmentCertificateGetUpdateBody(d *schema.ResourceData) Restart: &restart, } - return body, nil + return body } -func resourceVirtualEnvironmentCertificateRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentCertificateRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -206,7 +216,10 @@ func resourceVirtualEnvironmentCertificateRead(ctx context.Context, d *schema.Re err = d.Set(mkResourceVirtualEnvironmentCertificateCertificate, newCertificate) diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkResourceVirtualEnvironmentCertificateCertificateChain, newCertificateChain) + err = d.Set( + mkResourceVirtualEnvironmentCertificateCertificateChain, + newCertificateChain, + ) diags = append(diags, diag.FromErr(err)...) } @@ -215,7 +228,10 @@ func resourceVirtualEnvironmentCertificateRead(ctx context.Context, d *schema.Re if c.NotAfter != nil { t := time.Time(*c.NotAfter) - err = d.Set(mkResourceVirtualEnvironmentCertificateExpirationDate, t.UTC().Format(time.RFC3339)) + err = d.Set( + mkResourceVirtualEnvironmentCertificateExpirationDate, + t.UTC().Format(time.RFC3339), + ) } else { err = d.Set(mkResourceVirtualEnvironmentCertificateExpirationDate, "") } @@ -257,7 +273,10 @@ func resourceVirtualEnvironmentCertificateRead(ctx context.Context, d *schema.Re if c.NotBefore != nil { t := time.Time(*c.NotBefore) - err = d.Set(mkResourceVirtualEnvironmentCertificateStartDate, t.UTC().Format(time.RFC3339)) + err = d.Set( + mkResourceVirtualEnvironmentCertificateStartDate, + t.UTC().Format(time.RFC3339), + ) } else { err = d.Set(mkResourceVirtualEnvironmentCertificateStartDate, "") } @@ -286,7 +305,11 @@ func resourceVirtualEnvironmentCertificateRead(ctx context.Context, d *schema.Re return diags } -func resourceVirtualEnvironmentCertificateUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentCertificateUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -295,10 +318,7 @@ func resourceVirtualEnvironmentCertificateUpdate(ctx context.Context, d *schema. nodeName := d.Get(mkResourceVirtualEnvironmentCertificateNodeName).(string) - body, err := resourceVirtualEnvironmentCertificateGetUpdateBody(d) - if err != nil { - return diag.FromErr(err) - } + body := resourceVirtualEnvironmentCertificateGetUpdateBody(d) err = veClient.UpdateCertificate(ctx, nodeName, body) if err != nil { @@ -308,7 +328,11 @@ func resourceVirtualEnvironmentCertificateUpdate(ctx context.Context, d *schema. return resourceVirtualEnvironmentCertificateRead(ctx, d, m) } -func resourceVirtualEnvironmentCertificateDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentCertificateDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -318,9 +342,13 @@ func resourceVirtualEnvironmentCertificateDelete(ctx context.Context, d *schema. nodeName := d.Get(mkResourceVirtualEnvironmentCertificateNodeName).(string) restart := proxmox.CustomBool(true) - err = veClient.DeleteCertificate(ctx, nodeName, &proxmox.VirtualEnvironmentCertificateDeleteRequestBody{ - Restart: &restart, - }) + err = veClient.DeleteCertificate( + ctx, + nodeName, + &proxmox.VirtualEnvironmentCertificateDeleteRequestBody{ + Restart: &restart, + }, + ) if err != nil { return diag.FromErr(err) } diff --git a/proxmoxtf/resource_virtual_environment_cluster_alias.go b/proxmoxtf/resource_virtual_environment_cluster_alias.go index 34c47967..e521656b 100644 --- a/proxmoxtf/resource_virtual_environment_cluster_alias.go +++ b/proxmoxtf/resource_virtual_environment_cluster_alias.go @@ -9,9 +9,9 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -51,7 +51,11 @@ func resourceVirtualEnvironmentClusterAlias() *schema.Resource { } } -func resourceVirtualEnvironmentClusterAliasCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterAliasCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -78,7 +82,11 @@ func resourceVirtualEnvironmentClusterAliasCreate(ctx context.Context, d *schema return resourceVirtualEnvironmentClusterAliasRead(ctx, d, m) } -func resourceVirtualEnvironmentClusterAliasRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterAliasRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -87,7 +95,6 @@ func resourceVirtualEnvironmentClusterAliasRead(ctx context.Context, d *schema.R name := d.Id() alias, err := veClient.GetAlias(ctx, name) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") { d.SetId("") @@ -112,7 +119,11 @@ func resourceVirtualEnvironmentClusterAliasRead(ctx context.Context, d *schema.R return nil } -func resourceVirtualEnvironmentClusterAliasUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterAliasUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -140,7 +151,11 @@ func resourceVirtualEnvironmentClusterAliasUpdate(ctx context.Context, d *schema return resourceVirtualEnvironmentClusterAliasRead(ctx, d, m) } -func resourceVirtualEnvironmentClusterAliasDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterAliasDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { diff --git a/proxmoxtf/resource_virtual_environment_cluster_ipset.go b/proxmoxtf/resource_virtual_environment_cluster_ipset.go index 2410aaba..a296bb6a 100644 --- a/proxmoxtf/resource_virtual_environment_cluster_ipset.go +++ b/proxmoxtf/resource_virtual_environment_cluster_ipset.go @@ -9,9 +9,9 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -83,7 +83,11 @@ func resourceVirtualEnvironmentClusterIPSet() *schema.Resource { } } -func resourceVirtualEnvironmentClusterIPSetCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterIPSetCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -136,7 +140,11 @@ func resourceVirtualEnvironmentClusterIPSetCreate(ctx context.Context, d *schema return resourceVirtualEnvironmentClusterIPSetRead(ctx, d, m) } -func resourceVirtualEnvironmentClusterIPSetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterIPSetRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -162,7 +170,6 @@ func resourceVirtualEnvironmentClusterIPSetRead(ctx context.Context, d *schema.R } IPSet, err := veClient.GetListIPSetContent(ctx, name) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") { d.SetId("") @@ -189,7 +196,11 @@ func resourceVirtualEnvironmentClusterIPSetRead(ctx context.Context, d *schema.R return diags } -func resourceVirtualEnvironmentClusterIPSetUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterIPSetUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -216,7 +227,11 @@ func resourceVirtualEnvironmentClusterIPSetUpdate(ctx context.Context, d *schema return resourceVirtualEnvironmentClusterIPSetRead(ctx, d, m) } -func resourceVirtualEnvironmentClusterIPSetDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentClusterIPSetDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) veClient, err := config.GetVEClient() diff --git a/proxmoxtf/resource_virtual_environment_cluster_ipset_test.go b/proxmoxtf/resource_virtual_environment_cluster_ipset_test.go index 0a5497cd..775a618d 100644 --- a/proxmoxtf/resource_virtual_environment_cluster_ipset_test.go +++ b/proxmoxtf/resource_virtual_environment_cluster_ipset_test.go @@ -55,5 +55,4 @@ func TestResourceVirtualEnvironmentIPSetSchema(t *testing.T) { mkResourceVirtualEnvironmentClusterIPSetCIDRComment: schema.TypeString, mkResourceVirtualEnvironmentClusterIPSetCIDRNoMatch: schema.TypeBool, }) - } diff --git a/proxmoxtf/resource_virtual_environment_container.go b/proxmoxtf/resource_virtual_environment_container.go index bb011af8..c2482057 100644 --- a/proxmoxtf/resource_virtual_environment_container.go +++ b/proxmoxtf/resource_virtual_environment_container.go @@ -11,7 +11,6 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" @@ -215,11 +214,13 @@ func resourceVirtualEnvironmentContainer() *schema.Resource { ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(1, 128)), }, mkResourceVirtualEnvironmentContainerCPUUnits: { - Type: schema.TypeInt, - Description: "The CPU units", - Optional: true, - Default: dvResourceVirtualEnvironmentContainerCPUUnits, - ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(0, 500000)), + Type: schema.TypeInt, + Description: "The CPU units", + Optional: true, + Default: dvResourceVirtualEnvironmentContainerCPUUnits, + ValidateDiagFunc: validation.ToDiagFunc( + validation.IntBetween(0, 500000), + ), }, }, }, @@ -402,7 +403,8 @@ func resourceVirtualEnvironmentContainer() *schema.Resource { Sensitive: true, Default: dvResourceVirtualEnvironmentContainerInitializationUserAccountPassword, DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { - return len(old) > 0 && strings.ReplaceAll(old, "*", "") == "" + return len(old) > 0 && + strings.ReplaceAll(old, "*", "") == "" }, }, }, @@ -430,18 +432,22 @@ func resourceVirtualEnvironmentContainer() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ mkResourceVirtualEnvironmentContainerMemoryDedicated: { - Type: schema.TypeInt, - Description: "The dedicated memory in megabytes", - Optional: true, - Default: dvResourceVirtualEnvironmentContainerMemoryDedicated, - ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(16, 268435456)), + Type: schema.TypeInt, + Description: "The dedicated memory in megabytes", + Optional: true, + Default: dvResourceVirtualEnvironmentContainerMemoryDedicated, + ValidateDiagFunc: validation.ToDiagFunc( + validation.IntBetween(16, 268435456), + ), }, mkResourceVirtualEnvironmentContainerMemorySwap: { - Type: schema.TypeInt, - Description: "The swap size in megabytes", - Optional: true, - Default: dvResourceVirtualEnvironmentContainerMemorySwap, - ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(0, 268435456)), + Type: schema.TypeInt, + Description: "The swap size in megabytes", + Optional: true, + Default: dvResourceVirtualEnvironmentContainerMemorySwap, + ValidateDiagFunc: validation.ToDiagFunc( + validation.IntBetween(0, 268435456), + ), }, }, }, @@ -578,7 +584,11 @@ func resourceVirtualEnvironmentContainer() *schema.Resource { } } -func resourceVirtualEnvironmentContainerCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentContainerCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { clone := d.Get(mkResourceVirtualEnvironmentContainerClone).([]interface{}) if len(clone) > 0 { @@ -588,7 +598,11 @@ func resourceVirtualEnvironmentContainerCreate(ctx context.Context, d *schema.Re return resourceVirtualEnvironmentContainerCreateCustom(ctx, d, m) } -func resourceVirtualEnvironmentContainerCreateClone(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentContainerCreateClone( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -675,7 +689,9 @@ func resourceVirtualEnvironmentContainerCreateClone(ctx context.Context, d *sche if len(console) > 0 { consoleBlock := console[0].(map[string]interface{}) - consoleEnabled := proxmox.CustomBool(consoleBlock[mkResourceVirtualEnvironmentContainerConsoleEnabled].(bool)) + consoleEnabled := proxmox.CustomBool( + consoleBlock[mkResourceVirtualEnvironmentContainerConsoleEnabled].(bool), + ) consoleMode := consoleBlock[mkResourceVirtualEnvironmentContainerConsoleMode].(string) consoleTTYCount := consoleBlock[mkResourceVirtualEnvironmentContainerConsoleTTYCount].(int) @@ -731,8 +747,14 @@ func resourceVirtualEnvironmentContainerCreateClone(ctx context.Context, d *sche if len(ipv4) > 0 { ipv4Block := ipv4[0].(map[string]interface{}) - initializationIPConfigIPv4Address = append(initializationIPConfigIPv4Address, ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Address].(string)) - initializationIPConfigIPv4Gateway = append(initializationIPConfigIPv4Gateway, ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway].(string)) + initializationIPConfigIPv4Address = append( + initializationIPConfigIPv4Address, + ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Address].(string), + ) + initializationIPConfigIPv4Gateway = append( + initializationIPConfigIPv4Gateway, + ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway].(string), + ) } else { initializationIPConfigIPv4Address = append(initializationIPConfigIPv4Address, "") initializationIPConfigIPv4Gateway = append(initializationIPConfigIPv4Gateway, "") @@ -743,8 +765,14 @@ func resourceVirtualEnvironmentContainerCreateClone(ctx context.Context, d *sche if len(ipv6) > 0 { ipv6Block := ipv6[0].(map[string]interface{}) - initializationIPConfigIPv6Address = append(initializationIPConfigIPv6Address, ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Address].(string)) - initializationIPConfigIPv6Gateway = append(initializationIPConfigIPv6Gateway, ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway].(string)) + initializationIPConfigIPv6Address = append( + initializationIPConfigIPv6Address, + ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Address].(string), + ) + initializationIPConfigIPv6Gateway = append( + initializationIPConfigIPv6Gateway, + ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway].(string), + ) } else { initializationIPConfigIPv6Address = append(initializationIPConfigIPv6Address, "") initializationIPConfigIPv6Gateway = append(initializationIPConfigIPv6Gateway, "") @@ -758,7 +786,10 @@ func resourceVirtualEnvironmentContainerCreateClone(ctx context.Context, d *sche keys := initializationUserAccountBlock[mkResourceVirtualEnvironmentContainerInitializationUserAccountKeys].([]interface{}) if len(keys) > 0 { - initializationUserAccountKeys := make(proxmox.VirtualEnvironmentContainerCustomSSHKeys, len(keys)) + initializationUserAccountKeys := make( + proxmox.VirtualEnvironmentContainerCustomSSHKeys, + len(keys), + ) for ki, kv := range keys { initializationUserAccountKeys[ki] = kv.(string) @@ -794,13 +825,21 @@ func resourceVirtualEnvironmentContainerCreateClone(ctx context.Context, d *sche networkInterface := d.Get(mkResourceVirtualEnvironmentContainerNetworkInterface).([]interface{}) if len(networkInterface) == 0 { - networkInterface, err = resourceVirtualEnvironmentContainerGetExistingNetworkInterface(ctx, veClient, nodeName, vmID) + networkInterface, err = resourceVirtualEnvironmentContainerGetExistingNetworkInterface( + ctx, + veClient, + nodeName, + vmID, + ) if err != nil { return diag.FromErr(err) } } - networkInterfaceArray := make(proxmox.VirtualEnvironmentContainerCustomNetworkInterfaceArray, len(networkInterface)) + networkInterfaceArray := make( + proxmox.VirtualEnvironmentContainerCustomNetworkInterfaceArray, + len(networkInterface), + ) for ni, nv := range networkInterface { networkInterfaceMap := nv.(map[string]interface{}) @@ -904,7 +943,11 @@ func resourceVirtualEnvironmentContainerCreateClone(ctx context.Context, d *sche return resourceVirtualEnvironmentContainerCreateStart(ctx, d, m) } -func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentContainerCreateCustom( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -914,16 +957,30 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch nodeName := d.Get(mkResourceVirtualEnvironmentContainerNodeName).(string) resource := resourceVirtualEnvironmentContainer() - consoleBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerConsole}, 0, true) + consoleBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerConsole}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } - consoleEnabled := proxmox.CustomBool(consoleBlock[mkResourceVirtualEnvironmentContainerConsoleEnabled].(bool)) + consoleEnabled := proxmox.CustomBool( + consoleBlock[mkResourceVirtualEnvironmentContainerConsoleEnabled].(bool), + ) consoleMode := consoleBlock[mkResourceVirtualEnvironmentContainerConsoleMode].(string) consoleTTYCount := consoleBlock[mkResourceVirtualEnvironmentContainerConsoleTTYCount].(int) - cpuBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerCPU}, 0, true) + cpuBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerCPU}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -934,7 +991,13 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch description := d.Get(mkResourceVirtualEnvironmentContainerDescription).(string) - diskBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerDisk}, 0, true) + diskBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerDisk}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -982,8 +1045,14 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch if len(ipv4) > 0 { ipv4Block := ipv4[0].(map[string]interface{}) - initializationIPConfigIPv4Address = append(initializationIPConfigIPv4Address, ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Address].(string)) - initializationIPConfigIPv4Gateway = append(initializationIPConfigIPv4Gateway, ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway].(string)) + initializationIPConfigIPv4Address = append( + initializationIPConfigIPv4Address, + ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Address].(string), + ) + initializationIPConfigIPv4Gateway = append( + initializationIPConfigIPv4Gateway, + ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway].(string), + ) } else { initializationIPConfigIPv4Address = append(initializationIPConfigIPv4Address, "") initializationIPConfigIPv4Gateway = append(initializationIPConfigIPv4Gateway, "") @@ -994,8 +1063,14 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch if len(ipv6) > 0 { ipv6Block := ipv6[0].(map[string]interface{}) - initializationIPConfigIPv6Address = append(initializationIPConfigIPv6Address, ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Address].(string)) - initializationIPConfigIPv6Gateway = append(initializationIPConfigIPv6Gateway, ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway].(string)) + initializationIPConfigIPv6Address = append( + initializationIPConfigIPv6Address, + ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Address].(string), + ) + initializationIPConfigIPv6Gateway = append( + initializationIPConfigIPv6Gateway, + ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway].(string), + ) } else { initializationIPConfigIPv6Address = append(initializationIPConfigIPv6Address, "") initializationIPConfigIPv6Gateway = append(initializationIPConfigIPv6Gateway, "") @@ -1008,7 +1083,10 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch initializationUserAccountBlock := initializationUserAccount[0].(map[string]interface{}) keys := initializationUserAccountBlock[mkResourceVirtualEnvironmentContainerInitializationUserAccountKeys].([]interface{}) - initializationUserAccountKeys = make(proxmox.VirtualEnvironmentContainerCustomSSHKeys, len(keys)) + initializationUserAccountKeys = make( + proxmox.VirtualEnvironmentContainerCustomSSHKeys, + len(keys), + ) for ki, kv := range keys { initializationUserAccountKeys[ki] = kv.(string) @@ -1018,7 +1096,13 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch } } - memoryBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerMemory}, 0, true) + memoryBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerMemory}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -1027,7 +1111,10 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch memorySwap := memoryBlock[mkResourceVirtualEnvironmentContainerMemorySwap].(int) networkInterface := d.Get(mkResourceVirtualEnvironmentContainerNetworkInterface).([]interface{}) - networkInterfaceArray := make(proxmox.VirtualEnvironmentContainerCustomNetworkInterfaceArray, len(networkInterface)) + networkInterfaceArray := make( + proxmox.VirtualEnvironmentContainerCustomNetworkInterfaceArray, + len(networkInterface), + ) for ni, nv := range networkInterface { networkInterfaceMap := nv.(map[string]interface{}) @@ -1088,7 +1175,10 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch operatingSystem := d.Get(mkResourceVirtualEnvironmentContainerOperatingSystem).([]interface{}) if len(operatingSystem) == 0 { - return diag.Errorf("\"%s\": required field is not set", mkResourceVirtualEnvironmentContainerOperatingSystem) + return diag.Errorf( + "\"%s\": required field is not set", + mkResourceVirtualEnvironmentContainerOperatingSystem, + ) } operatingSystemBlock := operatingSystem[0].(map[string]interface{}) @@ -1173,7 +1263,11 @@ func resourceVirtualEnvironmentContainerCreateCustom(ctx context.Context, d *sch return resourceVirtualEnvironmentContainerCreateStart(ctx, d, m) } -func resourceVirtualEnvironmentContainerCreateStart(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentContainerCreateStart( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { started := d.Get(mkResourceVirtualEnvironmentContainerStarted).(bool) template := d.Get(mkResourceVirtualEnvironmentContainerTemplate).(bool) @@ -1224,9 +1318,13 @@ func resourceVirtualEnvironmentContainerGetCPUArchitectureValidator() schema.Sch }, false)) } -func resourceVirtualEnvironmentContainerGetExistingNetworkInterface(ctx context.Context, client *proxmox.VirtualEnvironmentClient, nodeName string, vmID int) ([]interface{}, error) { +func resourceVirtualEnvironmentContainerGetExistingNetworkInterface( + ctx context.Context, + client *proxmox.VirtualEnvironmentClient, + nodeName string, + vmID int, +) ([]interface{}, error) { containerInfo, err := client.GetContainer(ctx, nodeName, vmID) - if err != nil { return []interface{}{}, err } @@ -1304,7 +1402,11 @@ func resourceVirtualEnvironmentContainerGetOperatingSystemTypeValidator() schema }, false)) } -func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentContainerRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -1321,7 +1423,6 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso // Retrieve the entire configuration in order to compare it to the state. containerConfig, err := veClient.GetContainer(ctx, nodeName, vmID) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") || (strings.Contains(err.Error(), "HTTP 500") && strings.Contains(err.Error(), "does not exist")) { @@ -1339,7 +1440,10 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso if len(clone) == 0 || currentDescription != dvResourceVirtualEnvironmentContainerDescription { if containerConfig.Description != nil { - err = d.Set(mkResourceVirtualEnvironmentContainerDescription, strings.TrimSpace(*containerConfig.Description)) + err = d.Set( + mkResourceVirtualEnvironmentContainerDescription, + strings.TrimSpace(*containerConfig.Description), + ) } else { err = d.Set(mkResourceVirtualEnvironmentContainerDescription, "") } @@ -1447,6 +1551,7 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso if len(clone) > 0 { if len(currentDisk) > 0 { // do not override the rootfs size if it was not changed during the clone operation + //nolint:lll if currentDisk[0].(map[string]interface{})[mkResourceVirtualEnvironmentContainerDiskSize] == dvResourceVirtualEnvironmentContainerDiskSize { disk[mkResourceVirtualEnvironmentContainerDiskSize] = dvResourceVirtualEnvironmentContainerDiskSize } @@ -1507,7 +1612,9 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServer] = "" } - initialization[mkResourceVirtualEnvironmentContainerInitializationDNS] = []interface{}{initializationDNS} + initialization[mkResourceVirtualEnvironmentContainerInitializationDNS] = []interface{}{ + initializationDNS, + } } if containerConfig.Hostname != nil { @@ -1534,7 +1641,9 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso continue } - if nv.IPv4Address != nil || nv.IPv4Gateway != nil || nv.IPv6Address != nil || nv.IPv6Gateway != nil { + //nolint:nestif + if nv.IPv4Address != nil || nv.IPv4Gateway != nil || nv.IPv6Address != nil || + nv.IPv6Gateway != nil { ipConfig := map[string]interface{}{} if nv.IPv4Address != nil || nv.IPv4Gateway != nil { @@ -1552,7 +1661,9 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso ip[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway] = "" } - ipConfig[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4] = []interface{}{ip} + ipConfig[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4] = []interface{}{ + ip, + } } else { ipConfig[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4] = []interface{}{} } @@ -1572,7 +1683,9 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso ip[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway] = "" } - ipConfig[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6] = []interface{}{ip} + ipConfig[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6] = []interface{}{ + ip, + } } else { ipConfig[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6] = []interface{}{} } @@ -1651,7 +1764,10 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso } if len(initialization) > 0 { - err = d.Set(mkResourceVirtualEnvironmentContainerInitialization, []interface{}{initialization}) + err = d.Set( + mkResourceVirtualEnvironmentContainerInitialization, + []interface{}{initialization}, + ) } else { err = d.Set(mkResourceVirtualEnvironmentContainerInitialization, []interface{}{}) } @@ -1661,7 +1777,10 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso currentNetworkInterface := d.Get(mkResourceVirtualEnvironmentContainerNetworkInterface).([]interface{}) if len(currentNetworkInterface) > 0 { - err := d.Set(mkResourceVirtualEnvironmentContainerNetworkInterface, networkInterfaceList) + err := d.Set( + mkResourceVirtualEnvironmentContainerNetworkInterface, + networkInterfaceList, + ) diags = append(diags, diag.FromErr(err)...) } } else { @@ -1696,7 +1815,10 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso if len(clone) > 0 { if len(currentMemory) > 0 { - err := d.Set(mkResourceVirtualEnvironmentContainerOperatingSystem, []interface{}{operatingSystem}) + err := d.Set( + mkResourceVirtualEnvironmentContainerOperatingSystem, + []interface{}{operatingSystem}, + ) diags = append(diags, diag.FromErr(err)...) } } else if len(currentOperatingSystem) > 0 || @@ -1710,7 +1832,10 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso //nolint:gosimple if len(clone) == 0 || currentTemplate != dvResourceVirtualEnvironmentContainerTemplate { if containerConfig.Template != nil { - err = d.Set(mkResourceVirtualEnvironmentContainerTemplate, bool(*containerConfig.Template)) + err = d.Set( + mkResourceVirtualEnvironmentContainerTemplate, + bool(*containerConfig.Template), + ) } else { err = d.Set(mkResourceVirtualEnvironmentContainerTemplate, false) } @@ -1729,7 +1854,11 @@ func resourceVirtualEnvironmentContainerRead(ctx context.Context, d *schema.Reso return diags } -func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentContainerUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -1765,12 +1894,20 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re // Prepare the new console configuration. if d.HasChange(mkResourceVirtualEnvironmentContainerConsole) { - consoleBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerConsole}, 0, true) + consoleBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerConsole}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } - consoleEnabled := proxmox.CustomBool(consoleBlock[mkResourceVirtualEnvironmentContainerConsoleEnabled].(bool)) + consoleEnabled := proxmox.CustomBool( + consoleBlock[mkResourceVirtualEnvironmentContainerConsoleEnabled].(bool), + ) consoleMode := consoleBlock[mkResourceVirtualEnvironmentContainerConsoleMode].(string) consoleTTYCount := consoleBlock[mkResourceVirtualEnvironmentContainerConsoleTTYCount].(int) @@ -1783,7 +1920,13 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re // Prepare the new CPU configuration. if d.HasChange(mkResourceVirtualEnvironmentContainerCPU) { - cpuBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerCPU}, 0, true) + cpuBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerCPU}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -1829,8 +1972,14 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re if len(ipv4) > 0 { ipv4Block := ipv4[0].(map[string]interface{}) - initializationIPConfigIPv4Address = append(initializationIPConfigIPv4Address, ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Address].(string)) - initializationIPConfigIPv4Gateway = append(initializationIPConfigIPv4Gateway, ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway].(string)) + initializationIPConfigIPv4Address = append( + initializationIPConfigIPv4Address, + ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Address].(string), + ) + initializationIPConfigIPv4Gateway = append( + initializationIPConfigIPv4Gateway, + ipv4Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway].(string), + ) } else { initializationIPConfigIPv4Address = append(initializationIPConfigIPv4Address, "") initializationIPConfigIPv4Gateway = append(initializationIPConfigIPv4Gateway, "") @@ -1841,8 +1990,14 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re if len(ipv6) > 0 { ipv6Block := ipv6[0].(map[string]interface{}) - initializationIPConfigIPv6Address = append(initializationIPConfigIPv6Address, ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Address].(string)) - initializationIPConfigIPv6Gateway = append(initializationIPConfigIPv6Gateway, ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway].(string)) + initializationIPConfigIPv6Address = append( + initializationIPConfigIPv6Address, + ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Address].(string), + ) + initializationIPConfigIPv6Gateway = append( + initializationIPConfigIPv6Gateway, + ipv6Block[mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway].(string), + ) } else { initializationIPConfigIPv6Address = append(initializationIPConfigIPv6Address, "") initializationIPConfigIPv6Gateway = append(initializationIPConfigIPv6Gateway, "") @@ -1860,7 +2015,13 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re // Prepare the new memory configuration. if d.HasChange(mkResourceVirtualEnvironmentContainerMemory) { - memoryBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerMemory}, 0, true) + memoryBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerMemory}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -1878,14 +2039,24 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re networkInterface := d.Get(mkResourceVirtualEnvironmentContainerNetworkInterface).([]interface{}) if len(networkInterface) == 0 && len(clone) > 0 { - networkInterface, err = resourceVirtualEnvironmentContainerGetExistingNetworkInterface(ctx, veClient, nodeName, vmID) + networkInterface, err = resourceVirtualEnvironmentContainerGetExistingNetworkInterface( + ctx, + veClient, + nodeName, + vmID, + ) if err != nil { return diag.FromErr(err) } } - if d.HasChange(mkResourceVirtualEnvironmentContainerInitialization) || d.HasChange(mkResourceVirtualEnvironmentContainerNetworkInterface) { - networkInterfaceArray := make(proxmox.VirtualEnvironmentContainerCustomNetworkInterfaceArray, len(networkInterface)) + //nolint:nestif + if d.HasChange(mkResourceVirtualEnvironmentContainerInitialization) || + d.HasChange(mkResourceVirtualEnvironmentContainerNetworkInterface) { + networkInterfaceArray := make( + proxmox.VirtualEnvironmentContainerCustomNetworkInterfaceArray, + len(networkInterface), + ) for ni, nv := range networkInterface { networkInterfaceMap := nv.(map[string]interface{}) @@ -1961,7 +2132,13 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re // Prepare the new operating system configuration. if d.HasChange(mkResourceVirtualEnvironmentContainerOperatingSystem) { - operatingSystem, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentContainerOperatingSystem}, 0, true) + operatingSystem, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerOperatingSystem}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -2018,9 +2195,14 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re if !bool(template) && rebootRequired { rebootTimeout := 300 - err = veClient.RebootContainer(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentContainerRebootRequestBody{ - Timeout: &rebootTimeout, - }) + err = veClient.RebootContainer( + ctx, + nodeName, + vmID, + &proxmox.VirtualEnvironmentContainerRebootRequestBody{ + Timeout: &rebootTimeout, + }, + ) if err != nil { return diag.FromErr(err) } @@ -2029,7 +2211,11 @@ func resourceVirtualEnvironmentContainerUpdate(ctx context.Context, d *schema.Re return resourceVirtualEnvironmentContainerRead(ctx, d, m) } -func resourceVirtualEnvironmentContainerDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentContainerDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -2052,10 +2238,15 @@ func resourceVirtualEnvironmentContainerDelete(ctx context.Context, d *schema.Re forceStop := proxmox.CustomBool(true) shutdownTimeout := 300 - err = veClient.ShutdownContainer(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentContainerShutdownRequestBody{ - ForceStop: &forceStop, - Timeout: &shutdownTimeout, - }) + err = veClient.ShutdownContainer( + ctx, + nodeName, + vmID, + &proxmox.VirtualEnvironmentContainerShutdownRequestBody{ + ForceStop: &forceStop, + Timeout: &shutdownTimeout, + }, + ) if err != nil { return diag.FromErr(err) } diff --git a/proxmoxtf/resource_virtual_environment_container_test.go b/proxmoxtf/resource_virtual_environment_container_test.go index 1f9c21b8..195d660f 100644 --- a/proxmoxtf/resource_virtual_environment_container_test.go +++ b/proxmoxtf/resource_virtual_environment_container_test.go @@ -94,7 +94,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerDiskDatastoreID: schema.TypeString, }) - initializationSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentContainerInitialization) + initializationSchema := testNestedSchemaExistence( + t, + s, + mkResourceVirtualEnvironmentContainerInitialization, + ) testOptionalArguments(t, initializationSchema, []string{ mkResourceVirtualEnvironmentContainerInitializationDNS, @@ -110,7 +114,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerInitializationUserAccount: schema.TypeList, }) - initializationDNSSchema := testNestedSchemaExistence(t, initializationSchema, mkResourceVirtualEnvironmentContainerInitializationDNS) + initializationDNSSchema := testNestedSchemaExistence( + t, + initializationSchema, + mkResourceVirtualEnvironmentContainerInitializationDNS, + ) testOptionalArguments(t, initializationDNSSchema, []string{ mkResourceVirtualEnvironmentContainerInitializationDNSDomain, @@ -122,7 +130,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerInitializationDNSServer: schema.TypeString, }) - initializationIPConfigSchema := testNestedSchemaExistence(t, initializationSchema, mkResourceVirtualEnvironmentContainerInitializationIPConfig) + initializationIPConfigSchema := testNestedSchemaExistence( + t, + initializationSchema, + mkResourceVirtualEnvironmentContainerInitializationIPConfig, + ) testOptionalArguments(t, initializationIPConfigSchema, []string{ mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4, @@ -134,7 +146,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6: schema.TypeList, }) - initializationIPConfigIPv4Schema := testNestedSchemaExistence(t, initializationIPConfigSchema, mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4) + initializationIPConfigIPv4Schema := testNestedSchemaExistence( + t, + initializationIPConfigSchema, + mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4, + ) testOptionalArguments(t, initializationIPConfigIPv4Schema, []string{ mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Address, @@ -146,7 +162,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4Gateway: schema.TypeString, }) - initializationIPConfigIPv6Schema := testNestedSchemaExistence(t, initializationIPConfigSchema, mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6) + initializationIPConfigIPv6Schema := testNestedSchemaExistence( + t, + initializationIPConfigSchema, + mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6, + ) testOptionalArguments(t, initializationIPConfigIPv6Schema, []string{ mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Address, @@ -158,7 +178,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv6Gateway: schema.TypeString, }) - initializationUserAccountSchema := testNestedSchemaExistence(t, initializationSchema, mkResourceVirtualEnvironmentContainerInitializationUserAccount) + initializationUserAccountSchema := testNestedSchemaExistence( + t, + initializationSchema, + mkResourceVirtualEnvironmentContainerInitializationUserAccount, + ) testOptionalArguments(t, initializationUserAccountSchema, []string{ mkResourceVirtualEnvironmentContainerInitializationUserAccountKeys, @@ -182,7 +206,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerMemorySwap: schema.TypeInt, }) - networkInterfaceSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentContainerNetworkInterface) + networkInterfaceSchema := testNestedSchemaExistence( + t, + s, + mkResourceVirtualEnvironmentContainerNetworkInterface, + ) testRequiredArguments(t, networkInterfaceSchema, []string{ mkResourceVirtualEnvironmentContainerNetworkInterfaceName, @@ -207,7 +235,11 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerNetworkInterfaceMTU: schema.TypeInt, }) - operatingSystemSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentContainerOperatingSystem) + operatingSystemSchema := testNestedSchemaExistence( + t, + s, + mkResourceVirtualEnvironmentContainerOperatingSystem, + ) testRequiredArguments(t, operatingSystemSchema, []string{ mkResourceVirtualEnvironmentContainerOperatingSystemTemplateFileID, diff --git a/proxmoxtf/resource_virtual_environment_dns.go b/proxmoxtf/resource_virtual_environment_dns.go index db07a3ae..b515e1a6 100644 --- a/proxmoxtf/resource_virtual_environment_dns.go +++ b/proxmoxtf/resource_virtual_environment_dns.go @@ -9,9 +9,9 @@ import ( "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -53,7 +53,11 @@ func resourceVirtualEnvironmentDNS() *schema.Resource { } } -func resourceVirtualEnvironmentDNSCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentDNSCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { diags := resourceVirtualEnvironmentDNSUpdate(ctx, d, m) if diags.HasError() { return diags @@ -66,7 +70,9 @@ func resourceVirtualEnvironmentDNSCreate(ctx context.Context, d *schema.Resource return nil } -func resourceVirtualEnvironmentDNSGetUpdateBody(d *schema.ResourceData) (*proxmox.VirtualEnvironmentDNSUpdateRequestBody, error) { +func resourceVirtualEnvironmentDNSGetUpdateBody( + d *schema.ResourceData, +) *proxmox.VirtualEnvironmentDNSUpdateRequestBody { domain := d.Get(mkResourceVirtualEnvironmentDNSDomain).(string) servers := d.Get(mkResourceVirtualEnvironmentDNSServers).([]interface{}) @@ -87,10 +93,14 @@ func resourceVirtualEnvironmentDNSGetUpdateBody(d *schema.ResourceData) (*proxmo } } - return body, nil + return body } -func resourceVirtualEnvironmentDNSRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentDNSRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -132,7 +142,11 @@ func resourceVirtualEnvironmentDNSRead(ctx context.Context, d *schema.ResourceDa return diags } -func resourceVirtualEnvironmentDNSUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentDNSUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -141,10 +155,7 @@ func resourceVirtualEnvironmentDNSUpdate(ctx context.Context, d *schema.Resource nodeName := d.Get(mkResourceVirtualEnvironmentDNSNodeName).(string) - body, err := resourceVirtualEnvironmentDNSGetUpdateBody(d) - if err != nil { - return diag.FromErr(err) - } + body := resourceVirtualEnvironmentDNSGetUpdateBody(d) err = veClient.UpdateDNS(ctx, nodeName, body) if err != nil { @@ -154,7 +165,11 @@ func resourceVirtualEnvironmentDNSUpdate(ctx context.Context, d *schema.Resource return resourceVirtualEnvironmentDNSRead(ctx, d, m) } -func resourceVirtualEnvironmentDNSDelete(_ context.Context, d *schema.ResourceData, _ interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentDNSDelete( + _ context.Context, + d *schema.ResourceData, + _ interface{}, +) diag.Diagnostics { d.SetId("") return nil diff --git a/proxmoxtf/resource_virtual_environment_file.go b/proxmoxtf/resource_virtual_environment_file.go index 70341032..51158f69 100644 --- a/proxmoxtf/resource_virtual_environment_file.go +++ b/proxmoxtf/resource_virtual_environment_file.go @@ -21,9 +21,9 @@ import ( "github.com/hashicorp/go-cty/cty" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -190,7 +190,11 @@ func resourceVirtualEnvironmentFile() *schema.Resource { } } -func resourceVirtualEnvironmentFileCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentFileCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -314,7 +318,11 @@ func resourceVirtualEnvironmentFileCreate(ctx context.Context, d *schema.Resourc }) if sourceFileChecksum != calculatedChecksum { - return diag.Errorf("the calculated SHA256 checksum \"%s\" does not match source checksum \"%s\"", calculatedChecksum, sourceFileChecksum) + return diag.Errorf( + "the calculated SHA256 checksum \"%s\" does not match source checksum \"%s\"", + calculatedChecksum, + sourceFileChecksum, + ) } } } else if len(sourceRaw) > 0 { @@ -402,7 +410,9 @@ func resourceVirtualEnvironmentFileCreate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentFileRead(ctx, d, m) } -func resourceVirtualEnvironmentFileGetContentType(d *schema.ResourceData) (*string, diag.Diagnostics) { +func resourceVirtualEnvironmentFileGetContentType( + d *schema.ResourceData, +) (*string, diag.Diagnostics) { contentType := d.Get(mkResourceVirtualEnvironmentFileContentType).(string) sourceFile := d.Get(mkResourceVirtualEnvironmentFileSourceFile).([]interface{}) sourceRaw := d.Get(mkResourceVirtualEnvironmentFileSourceRaw).([]interface{}) @@ -479,7 +489,6 @@ func resourceVirtualEnvironmentFileGetFileName(d *schema.ResourceData) (*string, if sourceFileFileName == "" { if resourceVirtualEnvironmentFileIsURL(d) { downloadURL, err := url.ParseRequestURI(sourceFilePath) - if err != nil { return nil, err } @@ -488,7 +497,10 @@ func resourceVirtualEnvironmentFileGetFileName(d *schema.ResourceData) (*string, sourceFileFileName = path[len(path)-1] if sourceFileFileName == "" { - return nil, fmt.Errorf("failed to determine file name from the URL \"%s\"", sourceFilePath) + return nil, fmt.Errorf( + "failed to determine file name from the URL \"%s\"", + sourceFilePath, + ) } } else { sourceFileFileName = filepath.Base(sourceFilePath) @@ -523,10 +535,15 @@ func resourceVirtualEnvironmentFileIsURL(d *schema.ResourceData) bool { return false } - return strings.HasPrefix(sourceFilePath, "http://") || strings.HasPrefix(sourceFilePath, "https://") + return strings.HasPrefix(sourceFilePath, "http://") || + strings.HasPrefix(sourceFilePath, "https://") } -func resourceVirtualEnvironmentFileRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentFileRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -571,7 +588,7 @@ func resourceVirtualEnvironmentFileRead(ctx context.Context, d *schema.ResourceD } diags = append(diags, diag.FromErr(err)...) - lastFileModificationDate := d.Get(mkResourceVirtualEnvironmentFileFileModificationDate).(string) + lastFileMD := d.Get(mkResourceVirtualEnvironmentFileFileModificationDate).(string) lastFileSize := int64(d.Get(mkResourceVirtualEnvironmentFileFileSize).(int)) lastFileTag := d.Get(mkResourceVirtualEnvironmentFileFileTag).(string) @@ -584,7 +601,9 @@ func resourceVirtualEnvironmentFileRead(ctx context.Context, d *schema.ResourceD err = d.Set(mkResourceVirtualEnvironmentFileFileTag, fileTag) diags = append(diags, diag.FromErr(err)...) - sourceFileBlock[mkResourceVirtualEnvironmentFileSourceFileChanged] = lastFileModificationDate != fileModificationDate || lastFileSize != fileSize || lastFileTag != fileTag + sourceFileBlock[mkResourceVirtualEnvironmentFileSourceFileChanged] = lastFileMD != fileModificationDate || + lastFileSize != fileSize || + lastFileTag != fileTag err = d.Set(mkResourceVirtualEnvironmentFileSourceFile, sourceFile) diags = append(diags, diag.FromErr(err)...) @@ -600,14 +619,17 @@ func resourceVirtualEnvironmentFileRead(ctx context.Context, d *schema.ResourceD return nil } -func readFile(ctx context.Context, sourceFilePath string) (fileModificationDate string, fileSize int64, fileTag string, err error) { +func readFile( + ctx context.Context, + sourceFilePath string, +) (fileModificationDate string, fileSize int64, fileTag string, err error) { f, err := os.Open(sourceFilePath) if err != nil { return } defer func(f *os.File) { - var err = f.Close() + err := f.Close() if err != nil { tflog.Error(ctx, "failed to close the file", map[string]interface{}{ "error": err.Error(), @@ -627,14 +649,18 @@ func readFile(ctx context.Context, sourceFilePath string) (fileModificationDate return fileModificationDate, fileSize, fileTag, nil } -func readURL(ctx context.Context, d *schema.ResourceData, sourceFilePath string) (fileSize int64, fileModificationDate string, fileTag string, err error) { +func readURL( + ctx context.Context, + d *schema.ResourceData, + sourceFilePath string, +) (fileSize int64, fileModificationDate string, fileTag string, err error) { res, err := http.Head(sourceFilePath) if err != nil { return } defer func(Body io.ReadCloser) { - var err = Body.Close() + err := Body.Close() if err != nil { tflog.Error(ctx, "failed to close the response body", map[string]interface{}{ "error": err.Error(), @@ -681,7 +707,11 @@ func readURL(ctx context.Context, d *schema.ResourceData, sourceFilePath string) return } -func resourceVirtualEnvironmentFileDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentFileDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { diff --git a/proxmoxtf/resource_virtual_environment_group.go b/proxmoxtf/resource_virtual_environment_group.go index fce336a2..17044653 100644 --- a/proxmoxtf/resource_virtual_environment_group.go +++ b/proxmoxtf/resource_virtual_environment_group.go @@ -9,9 +9,9 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -83,7 +83,11 @@ func resourceVirtualEnvironmentGroup() *schema.Resource { } } -func resourceVirtualEnvironmentGroupCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentGroupCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -110,7 +114,9 @@ func resourceVirtualEnvironmentGroupCreate(ctx context.Context, d *schema.Resour for _, v := range aclParsed { aclDelete := proxmox.CustomBool(false) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, @@ -129,7 +135,11 @@ func resourceVirtualEnvironmentGroupCreate(ctx context.Context, d *schema.Resour return resourceVirtualEnvironmentGroupRead(ctx, d, m) } -func resourceVirtualEnvironmentGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentGroupRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -140,7 +150,6 @@ func resourceVirtualEnvironmentGroupRead(ctx context.Context, d *schema.Resource groupID := d.Id() group, err := veClient.GetGroup(ctx, groupID) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") { d.SetId("") @@ -191,7 +200,11 @@ func resourceVirtualEnvironmentGroupRead(ctx context.Context, d *schema.Resource return diags } -func resourceVirtualEnvironmentGroupUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentGroupUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -216,7 +229,9 @@ func resourceVirtualEnvironmentGroupUpdate(ctx context.Context, d *schema.Resour for _, v := range aclParsedOld { aclDelete := proxmox.CustomBool(true) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, @@ -237,7 +252,9 @@ func resourceVirtualEnvironmentGroupUpdate(ctx context.Context, d *schema.Resour for _, v := range aclParsed { aclDelete := proxmox.CustomBool(false) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, @@ -256,7 +273,11 @@ func resourceVirtualEnvironmentGroupUpdate(ctx context.Context, d *schema.Resour return resourceVirtualEnvironmentGroupRead(ctx, d, m) } -func resourceVirtualEnvironmentGroupDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentGroupDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -269,7 +290,9 @@ func resourceVirtualEnvironmentGroupDelete(ctx context.Context, d *schema.Resour for _, v := range aclParsed { aclDelete := proxmox.CustomBool(true) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentGroupACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, diff --git a/proxmoxtf/resource_virtual_environment_hosts.go b/proxmoxtf/resource_virtual_environment_hosts.go index 9df81091..efb558df 100644 --- a/proxmoxtf/resource_virtual_environment_hosts.go +++ b/proxmoxtf/resource_virtual_environment_hosts.go @@ -10,9 +10,9 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -106,7 +106,11 @@ func resourceVirtualEnvironmentHosts() *schema.Resource { } } -func resourceVirtualEnvironmentHostsCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentHostsCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { diags := resourceVirtualEnvironmentHostsUpdate(ctx, d, m) if diags.HasError() { return diags @@ -119,7 +123,11 @@ func resourceVirtualEnvironmentHostsCreate(ctx context.Context, d *schema.Resour return diags } -func resourceVirtualEnvironmentHostsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentHostsRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -189,7 +197,11 @@ func resourceVirtualEnvironmentHostsRead(ctx context.Context, d *schema.Resource return diags } -func resourceVirtualEnvironmentHostsUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentHostsUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -228,7 +240,11 @@ func resourceVirtualEnvironmentHostsUpdate(ctx context.Context, d *schema.Resour return resourceVirtualEnvironmentHostsRead(ctx, d, m) } -func resourceVirtualEnvironmentHostsDelete(_ context.Context, d *schema.ResourceData, _ interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentHostsDelete( + _ context.Context, + d *schema.ResourceData, + _ interface{}, +) diag.Diagnostics { d.SetId("") return nil diff --git a/proxmoxtf/resource_virtual_environment_pool.go b/proxmoxtf/resource_virtual_environment_pool.go index 50c36be5..eab9377b 100644 --- a/proxmoxtf/resource_virtual_environment_pool.go +++ b/proxmoxtf/resource_virtual_environment_pool.go @@ -9,9 +9,9 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -84,7 +84,11 @@ func resourceVirtualEnvironmentPool() *schema.Resource { } } -func resourceVirtualEnvironmentPoolCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentPoolCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -109,7 +113,11 @@ func resourceVirtualEnvironmentPoolCreate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentPoolRead(ctx, d, m) } -func resourceVirtualEnvironmentPoolRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentPoolRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -120,7 +128,6 @@ func resourceVirtualEnvironmentPoolRead(ctx context.Context, d *schema.ResourceD poolID := d.Id() pool, err := veClient.GetPool(ctx, poolID) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") { d.SetId("") @@ -167,7 +174,11 @@ func resourceVirtualEnvironmentPoolRead(ctx context.Context, d *schema.ResourceD return diags } -func resourceVirtualEnvironmentPoolUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentPoolUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -189,7 +200,11 @@ func resourceVirtualEnvironmentPoolUpdate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentPoolRead(ctx, d, m) } -func resourceVirtualEnvironmentPoolDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentPoolDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { diff --git a/proxmoxtf/resource_virtual_environment_role.go b/proxmoxtf/resource_virtual_environment_role.go index 106e4c31..47d018f7 100644 --- a/proxmoxtf/resource_virtual_environment_role.go +++ b/proxmoxtf/resource_virtual_environment_role.go @@ -9,9 +9,9 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -42,7 +42,11 @@ func resourceVirtualEnvironmentRole() *schema.Resource { } } -func resourceVirtualEnvironmentRoleCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentRoleCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -72,7 +76,11 @@ func resourceVirtualEnvironmentRoleCreate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentRoleRead(ctx, d, m) } -func resourceVirtualEnvironmentRoleRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentRoleRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -81,7 +89,6 @@ func resourceVirtualEnvironmentRoleRead(ctx context.Context, d *schema.ResourceD roleID := d.Id() role, err := veClient.GetRole(ctx, roleID) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") { d.SetId("") @@ -103,7 +110,11 @@ func resourceVirtualEnvironmentRoleRead(ctx context.Context, d *schema.ResourceD return diag.FromErr(err) } -func resourceVirtualEnvironmentRoleUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentRoleUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -130,7 +141,11 @@ func resourceVirtualEnvironmentRoleUpdate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentRoleRead(ctx, d, m) } -func resourceVirtualEnvironmentRoleDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentRoleDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { diff --git a/proxmoxtf/resource_virtual_environment_time.go b/proxmoxtf/resource_virtual_environment_time.go index b1058ed2..253b2654 100644 --- a/proxmoxtf/resource_virtual_environment_time.go +++ b/proxmoxtf/resource_virtual_environment_time.go @@ -10,9 +10,9 @@ import ( "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/bpg/terraform-provider-proxmox/proxmox" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) const ( @@ -53,7 +53,11 @@ func resourceVirtualEnvironmentTime() *schema.Resource { } } -func resourceVirtualEnvironmentTimeCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentTimeCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { diags := resourceVirtualEnvironmentTimeUpdate(ctx, d, m) if diags.HasError() { return diags @@ -66,7 +70,12 @@ func resourceVirtualEnvironmentTimeCreate(ctx context.Context, d *schema.Resourc return nil } -func resourceVirtualEnvironmentTimeRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +//nolint:dupl +func resourceVirtualEnvironmentTimeRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -91,17 +100,24 @@ func resourceVirtualEnvironmentTimeRead(ctx context.Context, d *schema.ResourceD localTimeOffset := time.Time(nodeTime.LocalTime).Sub(time.Now().UTC()) localTime := time.Time(nodeTime.LocalTime).Add(-localTimeOffset).In(localLocation) - err = d.Set(mkDataSourceVirtualEnvironmentTimeLocalTime, localTime.Format(time.RFC3339)) + err = d.Set(mkResourceVirtualEnvironmentTimeLocalTime, localTime.Format(time.RFC3339)) diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkDataSourceVirtualEnvironmentTimeTimeZone, nodeTime.TimeZone) + err = d.Set(mkResourceVirtualEnvironmentTimeTimeZone, nodeTime.TimeZone) diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkDataSourceVirtualEnvironmentTimeUTCTime, time.Time(nodeTime.UTCTime).Format(time.RFC3339)) + err = d.Set( + mkResourceVirtualEnvironmentTimeUTCTime, + time.Time(nodeTime.UTCTime).Format(time.RFC3339), + ) diags = append(diags, diag.FromErr(err)...) return diags } -func resourceVirtualEnvironmentTimeUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentTimeUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -111,9 +127,13 @@ func resourceVirtualEnvironmentTimeUpdate(ctx context.Context, d *schema.Resourc nodeName := d.Get(mkResourceVirtualEnvironmentTimeNodeName).(string) timeZone := d.Get(mkResourceVirtualEnvironmentTimeTimeZone).(string) - err = veClient.UpdateNodeTime(ctx, nodeName, &proxmox.VirtualEnvironmentNodeUpdateTimeRequestBody{ - TimeZone: timeZone, - }) + err = veClient.UpdateNodeTime( + ctx, + nodeName, + &proxmox.VirtualEnvironmentNodeUpdateTimeRequestBody{ + TimeZone: timeZone, + }, + ) if err != nil { return diag.FromErr(err) } @@ -121,7 +141,11 @@ func resourceVirtualEnvironmentTimeUpdate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentTimeRead(ctx, d, m) } -func resourceVirtualEnvironmentTimeDelete(_ context.Context, d *schema.ResourceData, _ interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentTimeDelete( + _ context.Context, + d *schema.ResourceData, + _ interface{}, +) diag.Diagnostics { d.SetId("") return nil diff --git a/proxmoxtf/resource_virtual_environment_user.go b/proxmoxtf/resource_virtual_environment_user.go index 1bc61631..0938731e 100644 --- a/proxmoxtf/resource_virtual_environment_user.go +++ b/proxmoxtf/resource_virtual_environment_user.go @@ -10,10 +10,10 @@ import ( "time" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - - "github.com/bpg/terraform-provider-proxmox/proxmox" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + + "github.com/bpg/terraform-provider-proxmox/proxmox" ) const ( @@ -142,7 +142,11 @@ func resourceVirtualEnvironmentUser() *schema.Resource { } } -func resourceVirtualEnvironmentUserCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentUserCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -152,7 +156,10 @@ func resourceVirtualEnvironmentUserCreate(ctx context.Context, d *schema.Resourc comment := d.Get(mkResourceVirtualEnvironmentUserComment).(string) email := d.Get(mkResourceVirtualEnvironmentUserEmail).(string) enabled := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentUserEnabled).(bool)) - expirationDate, err := time.Parse(time.RFC3339, d.Get(mkResourceVirtualEnvironmentUserExpirationDate).(string)) + expirationDate, err := time.Parse( + time.RFC3339, + d.Get(mkResourceVirtualEnvironmentUserExpirationDate).(string), + ) if err != nil { return diag.FromErr(err) } @@ -196,7 +203,9 @@ func resourceVirtualEnvironmentUserCreate(ctx context.Context, d *schema.Resourc for _, v := range aclParsed { aclDelete := proxmox.CustomBool(false) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, @@ -215,7 +224,11 @@ func resourceVirtualEnvironmentUserCreate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentUserRead(ctx, d, m) } -func resourceVirtualEnvironmentUserRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentUserRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -224,7 +237,6 @@ func resourceVirtualEnvironmentUserRead(ctx context.Context, d *schema.ResourceD userID := d.Id() user, err := veClient.GetUser(ctx, userID) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") { d.SetId("") @@ -286,7 +298,10 @@ func resourceVirtualEnvironmentUserRead(ctx context.Context, d *schema.ResourceD diags = append(diags, diag.FromErr(err)...) if user.ExpirationDate != nil { - err = d.Set(mkResourceVirtualEnvironmentUserExpirationDate, time.Time(*user.ExpirationDate).Format(time.RFC3339)) + err = d.Set( + mkResourceVirtualEnvironmentUserExpirationDate, + time.Time(*user.ExpirationDate).Format(time.RFC3339), + ) } else { err = d.Set(mkResourceVirtualEnvironmentUserExpirationDate, time.Unix(0, 0).UTC().Format(time.RFC3339)) } @@ -327,7 +342,11 @@ func resourceVirtualEnvironmentUserRead(ctx context.Context, d *schema.ResourceD return diags } -func resourceVirtualEnvironmentUserUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentUserUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -337,7 +356,10 @@ func resourceVirtualEnvironmentUserUpdate(ctx context.Context, d *schema.Resourc comment := d.Get(mkResourceVirtualEnvironmentUserComment).(string) email := d.Get(mkResourceVirtualEnvironmentUserEmail).(string) enabled := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentUserEnabled).(bool)) - expirationDate, err := time.Parse(time.RFC3339, d.Get(mkResourceVirtualEnvironmentUserExpirationDate).(string)) + expirationDate, err := time.Parse( + time.RFC3339, + d.Get(mkResourceVirtualEnvironmentUserExpirationDate).(string), + ) if err != nil { return diag.FromErr(err) } @@ -385,7 +407,9 @@ func resourceVirtualEnvironmentUserUpdate(ctx context.Context, d *schema.Resourc for _, v := range aclParsedOld { aclDelete := proxmox.CustomBool(true) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, @@ -406,7 +430,9 @@ func resourceVirtualEnvironmentUserUpdate(ctx context.Context, d *schema.Resourc for _, v := range aclParsed { aclDelete := proxmox.CustomBool(false) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, @@ -417,7 +443,6 @@ func resourceVirtualEnvironmentUserUpdate(ctx context.Context, d *schema.Resourc } err := veClient.UpdateACL(ctx, aclBody) - if err != nil { return diag.FromErr(err) } @@ -426,7 +451,11 @@ func resourceVirtualEnvironmentUserUpdate(ctx context.Context, d *schema.Resourc return resourceVirtualEnvironmentUserRead(ctx, d, m) } -func resourceVirtualEnvironmentUserDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentUserDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -439,7 +468,9 @@ func resourceVirtualEnvironmentUserDelete(ctx context.Context, d *schema.Resourc for _, v := range aclParsed { aclDelete := proxmox.CustomBool(true) aclEntry := v.(map[string]interface{}) - aclPropagate := proxmox.CustomBool(aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool)) + aclPropagate := proxmox.CustomBool( + aclEntry[mkResourceVirtualEnvironmentUserACLPropagate].(bool), + ) aclBody := &proxmox.VirtualEnvironmentACLUpdateRequestBody{ Delete: &aclDelete, diff --git a/proxmoxtf/resource_virtual_environment_vm.go b/proxmoxtf/resource_virtual_environment_vm.go index 87d0e574..e2747108 100644 --- a/proxmoxtf/resource_virtual_environment_vm.go +++ b/proxmoxtf/resource_virtual_environment_vm.go @@ -15,7 +15,6 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" @@ -489,11 +488,13 @@ func resourceVirtualEnvironmentVM() *schema.Resource { ValidateDiagFunc: getCPUTypeValidator(), }, mkResourceVirtualEnvironmentVMCPUUnits: { - Type: schema.TypeInt, - Description: "The CPU units", - Optional: true, - Default: dvResourceVirtualEnvironmentVMCPUUnits, - ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(2, 262144)), + Type: schema.TypeInt, + Description: "The CPU units", + Optional: true, + Default: dvResourceVirtualEnvironmentVMCPUUnits, + ValidateDiagFunc: validation.ToDiagFunc( + validation.IntBetween(2, 262144), + ), }, }, }, @@ -762,7 +763,8 @@ func resourceVirtualEnvironmentVM() *schema.Resource { Sensitive: true, Default: dvResourceVirtualEnvironmentVMInitializationUserAccountPassword, DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { - return len(old) > 0 && strings.ReplaceAll(old, "*", "") == "" + return len(old) > 0 && + strings.ReplaceAll(old, "*", "") == "" }, }, mkResourceVirtualEnvironmentVMInitializationUserAccountUsername: { @@ -924,25 +926,31 @@ func resourceVirtualEnvironmentVM() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ mkResourceVirtualEnvironmentVMMemoryDedicated: { - Type: schema.TypeInt, - Description: "The dedicated memory in megabytes", - Optional: true, - Default: dvResourceVirtualEnvironmentVMMemoryDedicated, - ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(64, 268435456)), + Type: schema.TypeInt, + Description: "The dedicated memory in megabytes", + Optional: true, + Default: dvResourceVirtualEnvironmentVMMemoryDedicated, + ValidateDiagFunc: validation.ToDiagFunc( + validation.IntBetween(64, 268435456), + ), }, mkResourceVirtualEnvironmentVMMemoryFloating: { - Type: schema.TypeInt, - Description: "The floating memory in megabytes (balloon)", - Optional: true, - Default: dvResourceVirtualEnvironmentVMMemoryFloating, - ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(0, 268435456)), + Type: schema.TypeInt, + Description: "The floating memory in megabytes (balloon)", + Optional: true, + Default: dvResourceVirtualEnvironmentVMMemoryFloating, + ValidateDiagFunc: validation.ToDiagFunc( + validation.IntBetween(0, 268435456), + ), }, mkResourceVirtualEnvironmentVMMemoryShared: { - Type: schema.TypeInt, - Description: "The shared memory in megabytes", - Optional: true, - Default: dvResourceVirtualEnvironmentVMMemoryShared, - ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(0, 268435456)), + Type: schema.TypeInt, + Description: "The shared memory in megabytes", + Optional: true, + Default: dvResourceVirtualEnvironmentVMMemoryShared, + ValidateDiagFunc: validation.ToDiagFunc( + validation.IntBetween(0, 268435456), + ), }, }, }, @@ -1203,20 +1211,36 @@ func resourceVirtualEnvironmentVM() *schema.Resource { UpdateContext: resourceVirtualEnvironmentVMUpdate, DeleteContext: resourceVirtualEnvironmentVMDelete, CustomizeDiff: customdiff.All( - customdiff.ComputedIf(mkResourceVirtualEnvironmentVMIPv4Addresses, func(ctx context.Context, d *schema.ResourceDiff, meta interface{}) bool { - return d.HasChange(mkResourceVirtualEnvironmentVMStarted) || d.HasChange(mkResourceVirtualEnvironmentVMNetworkDevice) - }), - customdiff.ComputedIf(mkResourceVirtualEnvironmentVMIPv6Addresses, func(ctx context.Context, d *schema.ResourceDiff, meta interface{}) bool { - return d.HasChange(mkResourceVirtualEnvironmentVMStarted) || d.HasChange(mkResourceVirtualEnvironmentVMNetworkDevice) - }), - customdiff.ComputedIf(mkResourceVirtualEnvironmentVMNetworkInterfaceNames, func(ctx context.Context, d *schema.ResourceDiff, meta interface{}) bool { - return d.HasChange(mkResourceVirtualEnvironmentVMStarted) || d.HasChange(mkResourceVirtualEnvironmentVMNetworkDevice) - }), + customdiff.ComputedIf( + mkResourceVirtualEnvironmentVMIPv4Addresses, + func(ctx context.Context, d *schema.ResourceDiff, meta interface{}) bool { + return d.HasChange(mkResourceVirtualEnvironmentVMStarted) || + d.HasChange(mkResourceVirtualEnvironmentVMNetworkDevice) + }, + ), + customdiff.ComputedIf( + mkResourceVirtualEnvironmentVMIPv6Addresses, + func(ctx context.Context, d *schema.ResourceDiff, meta interface{}) bool { + return d.HasChange(mkResourceVirtualEnvironmentVMStarted) || + d.HasChange(mkResourceVirtualEnvironmentVMNetworkDevice) + }, + ), + customdiff.ComputedIf( + mkResourceVirtualEnvironmentVMNetworkInterfaceNames, + func(ctx context.Context, d *schema.ResourceDiff, meta interface{}) bool { + return d.HasChange(mkResourceVirtualEnvironmentVMStarted) || + d.HasChange(mkResourceVirtualEnvironmentVMNetworkDevice) + }, + ), ), } } -func resourceVirtualEnvironmentVMCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMCreate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { clone := d.Get(mkResourceVirtualEnvironmentVMClone).([]interface{}) if len(clone) > 0 { @@ -1226,7 +1250,11 @@ func resourceVirtualEnvironmentVMCreate(ctx context.Context, d *schema.ResourceD return resourceVirtualEnvironmentVMCreateCustom(ctx, d, m) } -func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMCreateClone( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -1297,7 +1325,8 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso return diag.FromErr(err) } - if datastoreStatus.Shared != nil && *datastoreStatus.Shared == proxmox.CustomBool(false) { + if datastoreStatus.Shared != nil && + *datastoreStatus.Shared == proxmox.CustomBool(false) { onlySharedDatastores = false break } @@ -1308,7 +1337,14 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso // all used datastores in the source VM are shared. Directly cloning to non-shared storage // on a different node is currently not supported by proxmox. cloneBody.TargetNodeName = &nodeName - err = veClient.CloneVM(ctx, cloneNodeName, cloneVMID, cloneRetries, cloneBody, cloneTimeout) + err = veClient.CloneVM( + ctx, + cloneNodeName, + cloneVMID, + cloneRetries, + cloneBody, + cloneTimeout, + ) if err != nil { return diag.FromErr(err) } @@ -1364,10 +1400,7 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso // Now that the virtual machine has been cloned, we need to perform some modifications. acpi := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMACPI).(bool)) agent := d.Get(mkResourceVirtualEnvironmentVMAgent).([]interface{}) - audioDevices, err := resourceVirtualEnvironmentVMGetAudioDeviceList(d) - if err != nil { - return diag.FromErr(err) - } + audioDevices := resourceVirtualEnvironmentVMGetAudioDeviceList(d) bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string) kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string) @@ -1401,7 +1434,9 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso if len(agent) > 0 { agentBlock := agent[0].(map[string]interface{}) - agentEnabled := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentEnabled].(bool)) + agentEnabled := proxmox.CustomBool( + agentBlock[mkResourceVirtualEnvironmentVMAgentEnabled].(bool), + ) agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool)) agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string) @@ -1476,7 +1511,8 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso } // Only the root account is allowed to change the CPU architecture, which makes this check necessary. - if veClient.Username == proxmox.DefaultRootAccount || cpuArchitecture != dvResourceVirtualEnvironmentVMCPUArchitecture { + if veClient.Username == proxmox.DefaultRootAccount || + cpuArchitecture != dvResourceVirtualEnvironmentVMCPUArchitecture { updateBody.CPUArchitecture = &cpuArchitecture } @@ -1514,19 +1550,13 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso if err != nil { return diag.FromErr(err) } - initializationConfig, err := resourceVirtualEnvironmentVMGetCloudInitConfig(d) - if err != nil { - return diag.FromErr(err) - } + initializationConfig := resourceVirtualEnvironmentVMGetCloudInitConfig(d) updateBody.CloudInitConfig = initializationConfig } if len(hostPCI) > 0 { - updateBody.PCIDevices, err = resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d) - if err != nil { - return diag.FromErr(err) - } + updateBody.PCIDevices = resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d) } if len(cdrom) > 0 || len(initialization) > 0 { @@ -1558,10 +1588,7 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso } if len(networkDevice) > 0 { - updateBody.NetworkDevices, err = resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d) - if err != nil { - return diag.FromErr(err) - } + updateBody.NetworkDevices = resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d) for i := 0; i < len(updateBody.NetworkDevices); i++ { if !updateBody.NetworkDevices[i].Enabled { @@ -1582,10 +1609,7 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso } if len(serialDevice) > 0 { - updateBody.SerialDevices, err = resourceVirtualEnvironmentVMGetSerialDeviceList(d) - if err != nil { - return diag.FromErr(err) - } + updateBody.SerialDevices = resourceVirtualEnvironmentVMGetSerialDeviceList(d) for i := len(updateBody.SerialDevices); i < maxResourceVirtualEnvironmentVMSerialDevices; i++ { del = append(del, fmt.Sprintf("serial%d", i)) @@ -1628,7 +1652,6 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso disk := d.Get(mkResourceVirtualEnvironmentVMDisk).([]interface{}) vmConfig, err := veClient.GetVM(ctx, nodeName, vmID) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") || (strings.Contains(err.Error(), "HTTP 500") && strings.Contains(err.Error(), "does not exist")) { @@ -1689,7 +1712,11 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso } if diskSize < compareNumber { - return diag.Errorf("disk resize fails requests size (%dG) is lower than current size (%s)", diskSize, *currentDiskInfo.Size) + return diag.Errorf( + "disk resize fails requests size (%dG) is lower than current size (%s)", + diskSize, + *currentDiskInfo.Size, + ) } deleteOriginalDisk := proxmox.CustomBool(true) @@ -1735,7 +1762,11 @@ func resourceVirtualEnvironmentVMCreateClone(ctx context.Context, d *schema.Reso return resourceVirtualEnvironmentVMCreateStart(ctx, d, m) } -func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMCreateCustom( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -1746,25 +1777,36 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res acpi := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMACPI).(bool)) - agentBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMAgent}, 0, true) + agentBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMAgent}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } - agentEnabled := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentEnabled].(bool)) + agentEnabled := proxmox.CustomBool( + agentBlock[mkResourceVirtualEnvironmentVMAgentEnabled].(bool), + ) agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool)) agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string) kvmArguments := d.Get(mkResourceVirtualEnvironmentVMKVMArguments).(string) - audioDevices, err := resourceVirtualEnvironmentVMGetAudioDeviceList(d) - if err != nil { - return diag.FromErr(err) - } + audioDevices := resourceVirtualEnvironmentVMGetAudioDeviceList(d) bios := d.Get(mkResourceVirtualEnvironmentVMBIOS).(string) - cdromBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMCDROM}, 0, true) + cdromBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMCDROM}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -1779,7 +1821,13 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res cdromFileID = "cdrom" } - cpuBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMCPU}, 0, true) + cpuBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMCPU}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -1800,13 +1848,10 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res virtioDeviceObjects := diskDeviceObjects["virtio"] scsiDeviceObjects := diskDeviceObjects["scsi"] - //ideDeviceObjects := getOrderedDiskDeviceList(diskDeviceObjects, "ide") + // ideDeviceObjects := getOrderedDiskDeviceList(diskDeviceObjects, "ide") sataDeviceObjects := diskDeviceObjects["sata"] - initializationConfig, err := resourceVirtualEnvironmentVMGetCloudInitConfig(d) - if err != nil { - return diag.FromErr(err) - } + initializationConfig := resourceVirtualEnvironmentVMGetCloudInitConfig(d) if initializationConfig != nil { initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{}) @@ -1817,13 +1862,16 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res cdromCloudInitFileID = fmt.Sprintf("%s:cloudinit", initializationDatastoreID) } - pciDeviceObjects, err := resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d) - if err != nil { - return diag.FromErr(err) - } + pciDeviceObjects := resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d) keyboardLayout := d.Get(mkResourceVirtualEnvironmentVMKeyboardLayout).(string) - memoryBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMMemory}, 0, true) + memoryBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMMemory}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -1836,14 +1884,17 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res name := d.Get(mkResourceVirtualEnvironmentVMName).(string) tags := d.Get(mkResourceVirtualEnvironmentVMTags).([]interface{}) - networkDeviceObjects, err := resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d) - if err != nil { - return diag.FromErr(err) - } + networkDeviceObjects := resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d) nodeName := d.Get(mkResourceVirtualEnvironmentVMNodeName).(string) - operatingSystem, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMOperatingSystem}, 0, true) + operatingSystem, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMOperatingSystem}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -1852,10 +1903,7 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res poolID := d.Get(mkResourceVirtualEnvironmentVMPoolID).(string) - serialDevices, err := resourceVirtualEnvironmentVMGetSerialDeviceList(d) - if err != nil { - return diag.FromErr(err) - } + serialDevices := resourceVirtualEnvironmentVMGetSerialDeviceList(d) onBoot := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMOnBoot).(bool)) tabletDevice := proxmox.CustomBool(d.Get(mkResourceVirtualEnvironmentVMTabletDevice).(bool)) @@ -1966,7 +2014,8 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res } // Only the root account is allowed to change the CPU architecture, which makes this check necessary. - if veClient.Username == proxmox.DefaultRootAccount || cpuArchitecture != dvResourceVirtualEnvironmentVMCPUArchitecture { + if veClient.Username == proxmox.DefaultRootAccount || + cpuArchitecture != dvResourceVirtualEnvironmentVMCPUArchitecture { createBody.CPUArchitecture = &cpuArchitecture } @@ -2005,7 +2054,11 @@ func resourceVirtualEnvironmentVMCreateCustom(ctx context.Context, d *schema.Res return resourceVirtualEnvironmentVMCreateCustomDisks(ctx, d, m) } -func resourceVirtualEnvironmentVMCreateCustomDisks(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMCreateCustomDisks( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -2113,7 +2166,12 @@ func resourceVirtualEnvironmentVMCreateCustomDisks(ctx context.Context, d *schem filePath = fmt.Sprintf("/%s", fileIDParts[1]) } - filePathTmp := fmt.Sprintf("/tmp/vm-%d-disk-%d.%s", vmID, diskCount+importedDiskCount, fileFormat) + filePathTmp := fmt.Sprintf( + "/tmp/vm-%d-disk-%d.%s", + vmID, + diskCount+importedDiskCount, + fileFormat, + ) commands = append( commands, @@ -2157,7 +2215,11 @@ func resourceVirtualEnvironmentVMCreateCustomDisks(ctx context.Context, d *schem return resourceVirtualEnvironmentVMCreateStart(ctx, d, m) } -func resourceVirtualEnvironmentVMCreateStart(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMCreateStart( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { started := d.Get(mkResourceVirtualEnvironmentVMStarted).(bool) template := d.Get(mkResourceVirtualEnvironmentVMTemplate).(bool) reboot := d.Get(mkResourceVirtualEnvironmentVMRebootAfterCreation).(bool) @@ -2188,9 +2250,15 @@ func resourceVirtualEnvironmentVMCreateStart(ctx context.Context, d *schema.Reso if reboot { rebootTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutReboot).(int) - err := veClient.RebootVM(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{ - Timeout: &rebootTimeout, - }, rebootTimeout+30) + err := veClient.RebootVM( + ctx, + nodeName, + vmID, + &proxmox.VirtualEnvironmentVMRebootRequestBody{ + Timeout: &rebootTimeout, + }, + rebootTimeout+30, + ) if err != nil { return diag.FromErr(err) } @@ -2199,7 +2267,9 @@ func resourceVirtualEnvironmentVMCreateStart(ctx context.Context, d *schema.Reso return resourceVirtualEnvironmentVMRead(ctx, d, m) } -func resourceVirtualEnvironmentVMGetAudioDeviceList(d *schema.ResourceData) (proxmox.CustomAudioDevices, error) { +func resourceVirtualEnvironmentVMGetAudioDeviceList( + d *schema.ResourceData, +) proxmox.CustomAudioDevices { devices := d.Get(mkResourceVirtualEnvironmentVMAudioDevice).([]interface{}) list := make(proxmox.CustomAudioDevices, len(devices)) @@ -2215,7 +2285,7 @@ func resourceVirtualEnvironmentVMGetAudioDeviceList(d *schema.ResourceData) (pro list[i].Enabled = enabled } - return list, nil + return list } func resourceVirtualEnvironmentVMGetAudioDeviceValidator() schema.SchemaValidateDiagFunc { @@ -2232,7 +2302,9 @@ func resourceVirtualEnvironmentVMGetAudioDriverValidator() schema.SchemaValidate }, false)) } -func resourceVirtualEnvironmentVMGetCloudInitConfig(d *schema.ResourceData) (*proxmox.CustomCloudInitConfig, error) { +func resourceVirtualEnvironmentVMGetCloudInitConfig( + d *schema.ResourceData, +) *proxmox.CustomCloudInitConfig { var initializationConfig *proxmox.CustomCloudInitConfig initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{}) @@ -2258,7 +2330,10 @@ func resourceVirtualEnvironmentVMGetCloudInitConfig(d *schema.ResourceData) (*pr } initializationIPConfig := initializationBlock[mkResourceVirtualEnvironmentVMInitializationIPConfig].([]interface{}) - initializationConfig.IPConfig = make([]proxmox.CustomCloudInitIPConfig, len(initializationIPConfig)) + initializationConfig.IPConfig = make( + []proxmox.CustomCloudInitIPConfig, + len(initializationIPConfig), + ) for i, c := range initializationIPConfig { configBlock := c.(map[string]interface{}) @@ -2357,7 +2432,7 @@ func resourceVirtualEnvironmentVMGetCloudInitConfig(d *schema.ResourceData) (*pr } } - return initializationConfig, nil + return initializationConfig } func resourceVirtualEnvironmentVMGetCPUArchitectureValidator() schema.SchemaValidateDiagFunc { @@ -2367,7 +2442,10 @@ func resourceVirtualEnvironmentVMGetCPUArchitectureValidator() schema.SchemaVali }, false)) } -func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, disks []interface{}) (map[string]map[string]proxmox.CustomStorageDevice, error) { +func resourceVirtualEnvironmentVMGetDiskDeviceObjects( + d *schema.ResourceData, + disks []interface{}, +) (map[string]map[string]proxmox.CustomStorageDevice, error) { var diskDevice []interface{} if disks != nil { @@ -2393,8 +2471,13 @@ func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, di ssd := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMDiskSSD].(bool)) discard := block[mkResourceVirtualEnvironmentVMDiskDiscard].(string) - speedBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMDisk, mkResourceVirtualEnvironmentVMDiskSpeed}, 0, false) - + speedBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMDisk, mkResourceVirtualEnvironmentVMDiskSpeed}, + 0, + false, + ) if err != nil { return diskDeviceObjects, err } @@ -2440,8 +2523,12 @@ func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, di baseDiskInterface := diskDigitPrefix(diskInterface) - if baseDiskInterface != "virtio" && baseDiskInterface != "scsi" && baseDiskInterface != "sata" { - errorMsg := fmt.Sprintf("Defined disk interface not supported. Interface was %s, but only virtio, sata and scsi are supported", diskInterface) + if baseDiskInterface != "virtio" && baseDiskInterface != "scsi" && + baseDiskInterface != "sata" { + errorMsg := fmt.Sprintf( + "Defined disk interface not supported. Interface was %s, but only virtio, sata and scsi are supported", + diskInterface, + ) return diskDeviceObjects, errors.New(errorMsg) } @@ -2455,7 +2542,9 @@ func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, di return diskDeviceObjects, nil } -func resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d *schema.ResourceData) (proxmox.CustomPCIDevices, error) { +func resourceVirtualEnvironmentVMGetHostPCIDeviceObjects( + d *schema.ResourceData, +) proxmox.CustomPCIDevices { pciDevice := d.Get(mkResourceVirtualEnvironmentVMHostPCI).([]interface{}) pciDeviceObjects := make(proxmox.CustomPCIDevices, len(pciDevice)) @@ -2465,7 +2554,9 @@ func resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d *schema.ResourceData) ids, _ := block[mkResourceVirtualEnvironmentVMHostPCIDeviceID].(string) mdev, _ := block[mkResourceVirtualEnvironmentVMHostPCIDeviceMDev].(string) pcie := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMHostPCIDevicePCIE].(bool)) - rombar := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMHostPCIDeviceROMBAR].(bool)) + rombar := proxmox.CustomBool( + block[mkResourceVirtualEnvironmentVMHostPCIDeviceROMBAR].(bool), + ) romfile, _ := block[mkResourceVirtualEnvironmentVMHostPCIDeviceROMFile].(string) xvga := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMHostPCIDeviceXVGA].(bool)) @@ -2490,10 +2581,12 @@ func resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d *schema.ResourceData) pciDeviceObjects[i] = device } - return pciDeviceObjects, nil + return pciDeviceObjects } -func resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d *schema.ResourceData) (proxmox.CustomNetworkDevices, error) { +func resourceVirtualEnvironmentVMGetNetworkDeviceObjects( + d *schema.ResourceData, +) proxmox.CustomNetworkDevices { networkDevice := d.Get(mkResourceVirtualEnvironmentVMNetworkDevice).([]interface{}) networkDeviceObjects := make(proxmox.CustomNetworkDevices, len(networkDevice)) @@ -2536,7 +2629,7 @@ func resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d *schema.ResourceData) networkDeviceObjects[i] = device } - return networkDeviceObjects, nil + return networkDeviceObjects } func resourceVirtualEnvironmentVMGetOperatingSystemTypeValidator() schema.SchemaValidateDiagFunc { @@ -2556,7 +2649,9 @@ func resourceVirtualEnvironmentVMGetOperatingSystemTypeValidator() schema.Schema }, false)) } -func resourceVirtualEnvironmentVMGetSerialDeviceList(d *schema.ResourceData) (proxmox.CustomSerialDevices, error) { +func resourceVirtualEnvironmentVMGetSerialDeviceList( + d *schema.ResourceData, +) proxmox.CustomSerialDevices { device := d.Get(mkResourceVirtualEnvironmentVMSerialDevice).([]interface{}) list := make(proxmox.CustomSerialDevices, len(device)) @@ -2568,7 +2663,7 @@ func resourceVirtualEnvironmentVMGetSerialDeviceList(d *schema.ResourceData) (pr list[i] = device } - return list, nil + return list } func resourceVirtualEnvironmentVMGetTagsString(d *schema.ResourceData) string { @@ -2602,11 +2697,18 @@ func resourceVirtualEnvironmentVMGetSerialDeviceValidator() schema.SchemaValidat }) } -func resourceVirtualEnvironmentVMGetVGADeviceObject(d *schema.ResourceData) (*proxmox.CustomVGADevice, error) { +func resourceVirtualEnvironmentVMGetVGADeviceObject( + d *schema.ResourceData, +) (*proxmox.CustomVGADevice, error) { resource := resourceVirtualEnvironmentVM() - vgaBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMVGA}, 0, true) - + vgaBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMVGA}, + 0, + true, + ) if err != nil { return nil, err } @@ -2634,7 +2736,11 @@ func resourceVirtualEnvironmentVMGetVGADeviceObject(d *schema.ResourceData) (*pr return vgaDevice, nil } -func resourceVirtualEnvironmentVMRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMRead( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -2649,7 +2755,6 @@ func resourceVirtualEnvironmentVMRead(ctx context.Context, d *schema.ResourceDat // Retrieve the entire configuration in order to compare it to the state. vmConfig, err := veClient.GetVM(ctx, nodeName, vmID) - if err != nil { if strings.Contains(err.Error(), "HTTP 404") || (strings.Contains(err.Error(), "HTTP 500") && strings.Contains(err.Error(), "does not exist")) { @@ -2669,7 +2774,14 @@ func resourceVirtualEnvironmentVMRead(ctx context.Context, d *schema.ResourceDat return resourceVirtualEnvironmentVMReadCustom(ctx, d, m, vmID, vmConfig, vmStatus) } -func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.ResourceData, m interface{}, vmID int, vmConfig *proxmox.VirtualEnvironmentVMGetResponseData, vmStatus *proxmox.VirtualEnvironmentVMGetStatusResponseData) diag.Diagnostics { +func resourceVirtualEnvironmentVMReadCustom( + ctx context.Context, + d *schema.ResourceData, + m interface{}, + vmID int, + vmConfig *proxmox.VirtualEnvironmentVMGetResponseData, + vmStatus *proxmox.VirtualEnvironmentVMGetStatusResponseData, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -2697,7 +2809,9 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou } if vmConfig.Agent.TrimClonedDisks != nil { - agent[mkResourceVirtualEnvironmentVMAgentTrim] = bool(*vmConfig.Agent.TrimClonedDisks) + agent[mkResourceVirtualEnvironmentVMAgentTrim] = bool( + *vmConfig.Agent.TrimClonedDisks, + ) } else { agent[mkResourceVirtualEnvironmentVMAgentTrim] = false } @@ -3088,7 +3202,10 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou if vmConfig.IDEDevice2 != nil { if *vmConfig.IDEDevice2.Media == "cdrom" { - if strings.Contains(vmConfig.IDEDevice2.FileVolume, fmt.Sprintf("vm-%d-cloudinit", vmID)) { + if strings.Contains( + vmConfig.IDEDevice2.FileVolume, + fmt.Sprintf("vm-%d-cloudinit", vmID), + ) { fileVolumeParts := strings.Split(vmConfig.IDEDevice2.FileVolume, ":") initialization[mkResourceVirtualEnvironmentVMInitializationDatastoreID] = fileVolumeParts[0] } @@ -3110,7 +3227,9 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServer] = "" } - initialization[mkResourceVirtualEnvironmentVMInitializationDNS] = []interface{}{initializationDNS} + initialization[mkResourceVirtualEnvironmentVMInitializationDNS] = []interface{}{ + initializationDNS, + } } ipConfigLast := -1 @@ -3147,7 +3266,9 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou ipv4[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Gateway] = "" } - ipConfigItem[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4] = []interface{}{ipv4} + ipConfigItem[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4] = []interface{}{ + ipv4, + } } else { ipConfigItem[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4] = []interface{}{} } @@ -3167,7 +3288,9 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou ipv6[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Gateway] = "" } - ipConfigItem[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6] = []interface{}{ipv6} + ipConfigItem[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6] = []interface{}{ + ipv6, + } } else { ipConfigItem[mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6] = []interface{}{} } @@ -3183,11 +3306,15 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou initialization[mkResourceVirtualEnvironmentVMInitializationIPConfig] = ipConfigList[:ipConfigLast+1] } - if vmConfig.CloudInitPassword != nil || vmConfig.CloudInitSSHKeys != nil || vmConfig.CloudInitUsername != nil { + //nolint:nestif + if vmConfig.CloudInitPassword != nil || vmConfig.CloudInitSSHKeys != nil || + vmConfig.CloudInitUsername != nil { initializationUserAccount := map[string]interface{}{} if vmConfig.CloudInitSSHKeys != nil { - initializationUserAccount[mkResourceVirtualEnvironmentVMInitializationUserAccountKeys] = []string(*vmConfig.CloudInitSSHKeys) + initializationUserAccount[mkResourceVirtualEnvironmentVMInitializationUserAccountKeys] = []string( + *vmConfig.CloudInitSSHKeys, + ) } else { initializationUserAccount[mkResourceVirtualEnvironmentVMInitializationUserAccountKeys] = []string{} } @@ -3204,7 +3331,9 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou initializationUserAccount[mkResourceVirtualEnvironmentVMInitializationUserAccountUsername] = "" } - initialization[mkResourceVirtualEnvironmentVMInitializationUserAccount] = []interface{}{initializationUserAccount} + initialization[mkResourceVirtualEnvironmentVMInitializationUserAccount] = []interface{}{ + initializationUserAccount, + } } if vmConfig.CloudInitFiles != nil { @@ -3240,7 +3369,10 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou if len(clone) > 0 { if len(currentInitialization) > 0 { if len(initialization) > 0 { - err := d.Set(mkResourceVirtualEnvironmentVMInitialization, []interface{}{initialization}) + err := d.Set( + mkResourceVirtualEnvironmentVMInitialization, + []interface{}{initialization}, + ) diags = append(diags, diag.FromErr(err)...) } else { err := d.Set(mkResourceVirtualEnvironmentVMInitialization, []interface{}{}) @@ -3366,9 +3498,15 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou if len(clone) > 0 { if len(currentNetworkDeviceList) > 0 { - err := d.Set(mkResourceVirtualEnvironmentVMMACAddresses, macAddresses[0:len(currentNetworkDeviceList)]) + err := d.Set( + mkResourceVirtualEnvironmentVMMACAddresses, + macAddresses[0:len(currentNetworkDeviceList)], + ) diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkResourceVirtualEnvironmentVMNetworkDevice, networkDeviceList[:networkDeviceLast+1]) + err = d.Set( + mkResourceVirtualEnvironmentVMNetworkDevice, + networkDeviceList[:networkDeviceLast+1], + ) diags = append(diags, diag.FromErr(err)...) } } else { @@ -3394,7 +3532,10 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou if len(clone) > 0 { if len(currentOperatingSystem) > 0 { - err := d.Set(mkResourceVirtualEnvironmentVMOperatingSystem, []interface{}{operatingSystem}) + err := d.Set( + mkResourceVirtualEnvironmentVMOperatingSystem, + []interface{}{operatingSystem}, + ) diags = append(diags, diag.FromErr(err)...) } } else if len(currentOperatingSystem) > 0 || @@ -3495,12 +3636,20 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou diags = append(diags, diag.FromErr(err)...) } - diags = append(diags, resourceVirtualEnvironmentVMReadNetworkValues(ctx, d, m, vmID, vmConfig)...) + diags = append( + diags, + resourceVirtualEnvironmentVMReadNetworkValues(ctx, d, m, vmID, vmConfig)...) return diags } -func resourceVirtualEnvironmentVMReadNetworkValues(ctx context.Context, d *schema.ResourceData, m interface{}, vmID int, vmConfig *proxmox.VirtualEnvironmentVMGetResponseData) diag.Diagnostics { +func resourceVirtualEnvironmentVMReadNetworkValues( + ctx context.Context, + d *schema.ResourceData, + m interface{}, + vmID int, + vmConfig *proxmox.VirtualEnvironmentVMGetResponseData, +) diag.Diagnostics { var diags diag.Diagnostics config := m.(providerConfiguration) @@ -3519,18 +3668,33 @@ func resourceVirtualEnvironmentVMReadNetworkValues(ctx context.Context, d *schem if started { if vmConfig.Agent != nil && vmConfig.Agent.Enabled != nil && *vmConfig.Agent.Enabled { resource := resourceVirtualEnvironmentVM() - agentBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMAgent}, 0, true) + agentBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMAgent}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } - agentTimeout, err := time.ParseDuration(agentBlock[mkResourceVirtualEnvironmentVMAgentTimeout].(string)) + agentTimeout, err := time.ParseDuration( + agentBlock[mkResourceVirtualEnvironmentVMAgentTimeout].(string), + ) if err != nil { return diag.FromErr(err) } var macAddresses []interface{} - networkInterfaces, err := veClient.WaitForNetworkInterfacesFromVMAgent(ctx, nodeName, vmID, int(agentTimeout.Seconds()), 5, true) + networkInterfaces, err := veClient.WaitForNetworkInterfacesFromVMAgent( + ctx, + nodeName, + vmID, + int(agentTimeout.Seconds()), + 5, + true, + ) if err == nil && networkInterfaces.Result != nil { ipv4Addresses = make([]interface{}, len(*networkInterfaces.Result)) @@ -3575,7 +3739,11 @@ func resourceVirtualEnvironmentVMReadNetworkValues(ctx context.Context, d *schem return diags } -func resourceVirtualEnvironmentVMReadPrimitiveValues(d *schema.ResourceData, vmConfig *proxmox.VirtualEnvironmentVMGetResponseData, vmStatus *proxmox.VirtualEnvironmentVMGetStatusResponseData) diag.Diagnostics { +func resourceVirtualEnvironmentVMReadPrimitiveValues( + d *schema.ResourceData, + vmConfig *proxmox.VirtualEnvironmentVMGetResponseData, + vmStatus *proxmox.VirtualEnvironmentVMGetStatusResponseData, +) diag.Diagnostics { var diags diag.Diagnostics var err error @@ -3691,7 +3859,10 @@ func resourceVirtualEnvironmentVMReadPrimitiveValues(d *schema.ResourceData, vmC //nolint:gosimple if len(clone) == 0 || currentTabletDevice != dvResourceVirtualEnvironmentVMTabletDevice { if vmConfig.TabletDeviceEnabled != nil { - err = d.Set(mkResourceVirtualEnvironmentVMTabletDevice, bool(*vmConfig.TabletDeviceEnabled)) + err = d.Set( + mkResourceVirtualEnvironmentVMTabletDevice, + bool(*vmConfig.TabletDeviceEnabled), + ) } else { // Default value of "tablet" is "1" according to the API documentation. err = d.Set(mkResourceVirtualEnvironmentVMTabletDevice, true) @@ -3715,7 +3886,11 @@ func resourceVirtualEnvironmentVMReadPrimitiveValues(d *schema.ResourceData, vmC return diags } -func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMUpdate( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -3825,12 +4000,20 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new agent configuration. if d.HasChange(mkResourceVirtualEnvironmentVMAgent) { - agentBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMAgent}, 0, true) + agentBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMAgent}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } - agentEnabled := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentEnabled].(bool)) + agentEnabled := proxmox.CustomBool( + agentBlock[mkResourceVirtualEnvironmentVMAgentEnabled].(bool), + ) agentTrim := proxmox.CustomBool(agentBlock[mkResourceVirtualEnvironmentVMAgentTrim].(bool)) agentType := agentBlock[mkResourceVirtualEnvironmentVMAgentType].(string) @@ -3845,10 +4028,7 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new audio devices. if d.HasChange(mkResourceVirtualEnvironmentVMAudioDevice) { - updateBody.AudioDevices, err = resourceVirtualEnvironmentVMGetAudioDeviceList(d) - if err != nil { - return diag.FromErr(err) - } + updateBody.AudioDevices = resourceVirtualEnvironmentVMGetAudioDeviceList(d) for i := 0; i < len(updateBody.AudioDevices); i++ { if !updateBody.AudioDevices[i].Enabled { @@ -3865,7 +4045,13 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new CDROM configuration. if d.HasChange(mkResourceVirtualEnvironmentVMCDROM) { - cdromBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMCDROM}, 0, true) + cdromBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMCDROM}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -3892,7 +4078,13 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new CPU configuration. if d.HasChange(mkResourceVirtualEnvironmentVMCPU) { - cpuBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMCPU}, 0, true) + cpuBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMCPU}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -3906,7 +4098,8 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD cpuUnits := cpuBlock[mkResourceVirtualEnvironmentVMCPUUnits].(int) // Only the root account is allowed to change the CPU architecture, which makes this check necessary. - if veClient.Username == proxmox.DefaultRootAccount || cpuArchitecture != dvResourceVirtualEnvironmentVMCPUArchitecture { + if veClient.Username == proxmox.DefaultRootAccount || + cpuArchitecture != dvResourceVirtualEnvironmentVMCPUArchitecture { updateBody.CPUArchitecture = &cpuArchitecture } @@ -3997,10 +4190,7 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new cloud-init configuration. if d.HasChange(mkResourceVirtualEnvironmentVMInitialization) { - initializationConfig, err := resourceVirtualEnvironmentVMGetCloudInitConfig(d) - if err != nil { - return diag.FromErr(err) - } + initializationConfig := resourceVirtualEnvironmentVMGetCloudInitConfig(d) updateBody.CloudInitConfig = initializationConfig @@ -4018,8 +4208,11 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD } if vmConfig.IDEDevice2 != nil { - if strings.Contains(vmConfig.IDEDevice2.FileVolume, fmt.Sprintf("vm-%d-cloudinit", vmID)) { - var tmp = updateBody.IDEDevices["ide2"] + if strings.Contains( + vmConfig.IDEDevice2.FileVolume, + fmt.Sprintf("vm-%d-cloudinit", vmID), + ) { + tmp := updateBody.IDEDevices["ide2"] tmp.Enabled = true updateBody.IDEDevices["ide2"] = tmp } @@ -4031,7 +4224,7 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new hostpci devices configuration. if d.HasChange(mkResourceVirtualEnvironmentVMHostPCI) { - updateBody.PCIDevices, err = resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d) + updateBody.PCIDevices = resourceVirtualEnvironmentVMGetHostPCIDeviceObjects(d) if err != nil { return diag.FromErr(err) } @@ -4041,7 +4234,13 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new memory configuration. if d.HasChange(mkResourceVirtualEnvironmentVMMemory) { - memoryBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMMemory}, 0, true) + memoryBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMMemory}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -4067,10 +4266,7 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new network device configuration. if d.HasChange(mkResourceVirtualEnvironmentVMNetworkDevice) { - updateBody.NetworkDevices, err = resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d) - if err != nil { - return diag.FromErr(err) - } + updateBody.NetworkDevices = resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d) for i := 0; i < len(updateBody.NetworkDevices); i++ { if !updateBody.NetworkDevices[i].Enabled { @@ -4087,7 +4283,13 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new operating system configuration. if d.HasChange(mkResourceVirtualEnvironmentVMOperatingSystem) { - operatingSystem, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMOperatingSystem}, 0, true) + operatingSystem, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentVMOperatingSystem}, + 0, + true, + ) if err != nil { return diag.FromErr(err) } @@ -4101,10 +4303,7 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD // Prepare the new serial devices. if d.HasChange(mkResourceVirtualEnvironmentVMSerialDevice) { - updateBody.SerialDevices, err = resourceVirtualEnvironmentVMGetSerialDeviceList(d) - if err != nil { - return diag.FromErr(err) - } + updateBody.SerialDevices = resourceVirtualEnvironmentVMGetSerialDeviceList(d) for i := len(updateBody.SerialDevices); i < maxResourceVirtualEnvironmentVMSerialDevices; i++ { del = append(del, fmt.Sprintf("serial%d", i)) @@ -4158,10 +4357,20 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD } // Change the disk locations and/or sizes, if necessary. - return resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx, d, m, !bool(template) && rebootRequired) + return resourceVirtualEnvironmentVMUpdateDiskLocationAndSize( + ctx, + d, + m, + !bool(template) && rebootRequired, + ) } -func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context, d *schema.ResourceData, m interface{}, reboot bool) diag.Diagnostics { +func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize( + ctx context.Context, + d *schema.ResourceData, + m interface{}, + reboot bool, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -4180,12 +4389,18 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context, if d.HasChange(mkResourceVirtualEnvironmentVMDisk) { diskOld, diskNew := d.GetChange(mkResourceVirtualEnvironmentVMDisk) - diskOldEntries, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects(d, diskOld.([]interface{})) + diskOldEntries, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects( + d, + diskOld.([]interface{}), + ) if err != nil { return diag.FromErr(err) } - diskNewEntries, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects(d, diskNew.([]interface{})) + diskNewEntries, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects( + d, + diskNew.([]interface{}), + ) if err != nil { return diag.FromErr(err) } @@ -4193,32 +4408,41 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context, var diskMoveBodies []*proxmox.VirtualEnvironmentVMMoveDiskRequestBody var diskResizeBodies []*proxmox.VirtualEnvironmentVMResizeDiskRequestBody - var shutdownForDisksRequired bool = false + shutdownForDisksRequired := false for prefix, diskMap := range diskOldEntries { for oldKey, oldDisk := range diskMap { if _, present := diskNewEntries[prefix][oldKey]; !present { - return diag.Errorf("deletion of disks not supported. Please delete disk by hand. Old Interface was %s", *oldDisk.Interface) + return diag.Errorf( + "deletion of disks not supported. Please delete disk by hand. Old Interface was %s", + *oldDisk.Interface, + ) } if *oldDisk.ID != *diskNewEntries[prefix][oldKey].ID { deleteOriginalDisk := proxmox.CustomBool(true) - diskMoveBodies = append(diskMoveBodies, &proxmox.VirtualEnvironmentVMMoveDiskRequestBody{ - DeleteOriginalDisk: &deleteOriginalDisk, - Disk: *oldDisk.Interface, - TargetStorage: *diskNewEntries[prefix][oldKey].ID, - }) + diskMoveBodies = append( + diskMoveBodies, + &proxmox.VirtualEnvironmentVMMoveDiskRequestBody{ + DeleteOriginalDisk: &deleteOriginalDisk, + Disk: *oldDisk.Interface, + TargetStorage: *diskNewEntries[prefix][oldKey].ID, + }, + ) // Cannot be done while VM is running. shutdownForDisksRequired = true } if *oldDisk.SizeInt <= *diskNewEntries[prefix][oldKey].SizeInt { - diskResizeBodies = append(diskResizeBodies, &proxmox.VirtualEnvironmentVMResizeDiskRequestBody{ - Disk: *oldDisk.Interface, - Size: *diskNewEntries[prefix][oldKey].Size, - }) + diskResizeBodies = append( + diskResizeBodies, + &proxmox.VirtualEnvironmentVMResizeDiskRequestBody{ + Disk: *oldDisk.Interface, + Size: *diskNewEntries[prefix][oldKey].Size, + }, + ) } } } @@ -4227,10 +4451,16 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context, forceStop := proxmox.CustomBool(true) shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int) - err = veClient.ShutdownVM(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{ - ForceStop: &forceStop, - Timeout: &shutdownTimeout, - }, shutdownTimeout+30) + err = veClient.ShutdownVM( + ctx, + nodeName, + vmID, + &proxmox.VirtualEnvironmentVMShutdownRequestBody{ + ForceStop: &forceStop, + Timeout: &shutdownTimeout, + }, + shutdownTimeout+30, + ) if err != nil { return diag.FromErr(err) } @@ -4267,9 +4497,15 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context, if reboot { rebootTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutReboot).(int) - err := veClient.RebootVM(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{ - Timeout: &rebootTimeout, - }, rebootTimeout+30) + err := veClient.RebootVM( + ctx, + nodeName, + vmID, + &proxmox.VirtualEnvironmentVMRebootRequestBody{ + Timeout: &rebootTimeout, + }, + rebootTimeout+30, + ) if err != nil { return diag.FromErr(err) } @@ -4278,7 +4514,11 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context, return resourceVirtualEnvironmentVMRead(ctx, d, m) } -func resourceVirtualEnvironmentVMDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { +func resourceVirtualEnvironmentVMDelete( + ctx context.Context, + d *schema.ResourceData, + m interface{}, +) diag.Diagnostics { config := m.(providerConfiguration) veClient, err := config.GetVEClient() if err != nil { @@ -4301,10 +4541,16 @@ func resourceVirtualEnvironmentVMDelete(ctx context.Context, d *schema.ResourceD forceStop := proxmox.CustomBool(true) shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int) - err = veClient.ShutdownVM(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{ - ForceStop: &forceStop, - Timeout: &shutdownTimeout, - }, shutdownTimeout+30) + err = veClient.ShutdownVM( + ctx, + nodeName, + vmID, + &proxmox.VirtualEnvironmentVMShutdownRequestBody{ + ForceStop: &forceStop, + Timeout: &shutdownTimeout, + }, + shutdownTimeout+30, + ) if err != nil { return diag.FromErr(err) } diff --git a/proxmoxtf/resource_virtual_environment_vm_test.go b/proxmoxtf/resource_virtual_environment_vm_test.go index d1624597..871f739e 100644 --- a/proxmoxtf/resource_virtual_environment_vm_test.go +++ b/proxmoxtf/resource_virtual_environment_vm_test.go @@ -185,7 +185,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMDiskSize: schema.TypeInt, }) - diskSpeedSchema := testNestedSchemaExistence(t, diskSchema, mkResourceVirtualEnvironmentVMDiskSpeed) + diskSpeedSchema := testNestedSchemaExistence( + t, + diskSchema, + mkResourceVirtualEnvironmentVMDiskSpeed, + ) testOptionalArguments(t, diskSpeedSchema, []string{ mkResourceVirtualEnvironmentVMDiskSpeedRead, @@ -201,7 +205,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMDiskSpeedWriteBurstable: schema.TypeInt, }) - initializationSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMInitialization) + initializationSchema := testNestedSchemaExistence( + t, + s, + mkResourceVirtualEnvironmentVMInitialization, + ) testOptionalArguments(t, initializationSchema, []string{ mkResourceVirtualEnvironmentVMInitializationDatastoreID, @@ -236,7 +244,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMHostPCIDeviceXVGA: schema.TypeBool, }) - initializationDNSSchema := testNestedSchemaExistence(t, initializationSchema, mkResourceVirtualEnvironmentVMInitializationDNS) + initializationDNSSchema := testNestedSchemaExistence( + t, + initializationSchema, + mkResourceVirtualEnvironmentVMInitializationDNS, + ) testOptionalArguments(t, initializationDNSSchema, []string{ mkResourceVirtualEnvironmentVMInitializationDNSDomain, @@ -248,7 +260,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMInitializationDNSServer: schema.TypeString, }) - initializationIPConfigSchema := testNestedSchemaExistence(t, initializationSchema, mkResourceVirtualEnvironmentVMInitializationIPConfig) + initializationIPConfigSchema := testNestedSchemaExistence( + t, + initializationSchema, + mkResourceVirtualEnvironmentVMInitializationIPConfig, + ) testOptionalArguments(t, initializationIPConfigSchema, []string{ mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4, @@ -260,7 +276,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6: schema.TypeList, }) - initializationIPConfigIPv4Schema := testNestedSchemaExistence(t, initializationIPConfigSchema, mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4) + initializationIPConfigIPv4Schema := testNestedSchemaExistence( + t, + initializationIPConfigSchema, + mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4, + ) testOptionalArguments(t, initializationIPConfigIPv4Schema, []string{ mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Address, @@ -272,7 +292,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Gateway: schema.TypeString, }) - initializationIPConfigIPv6Schema := testNestedSchemaExistence(t, initializationIPConfigSchema, mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6) + initializationIPConfigIPv6Schema := testNestedSchemaExistence( + t, + initializationIPConfigSchema, + mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6, + ) testOptionalArguments(t, initializationIPConfigIPv6Schema, []string{ mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Address, @@ -284,7 +308,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Gateway: schema.TypeString, }) - initializationUserAccountSchema := testNestedSchemaExistence(t, initializationSchema, mkResourceVirtualEnvironmentVMInitializationUserAccount) + initializationUserAccountSchema := testNestedSchemaExistence( + t, + initializationSchema, + mkResourceVirtualEnvironmentVMInitializationUserAccount, + ) testOptionalArguments(t, initializationUserAccountSchema, []string{ mkResourceVirtualEnvironmentVMInitializationUserAccountKeys, @@ -312,7 +340,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMMemoryShared: schema.TypeInt, }) - networkDeviceSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMNetworkDevice) + networkDeviceSchema := testNestedSchemaExistence( + t, + s, + mkResourceVirtualEnvironmentVMNetworkDevice, + ) testOptionalArguments(t, networkDeviceSchema, []string{ mkResourceVirtualEnvironmentVMNetworkDeviceBridge, @@ -334,7 +366,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMNetworkDeviceMTU: schema.TypeInt, }) - operatingSystemSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMOperatingSystem) + operatingSystemSchema := testNestedSchemaExistence( + t, + s, + mkResourceVirtualEnvironmentVMOperatingSystem, + ) testOptionalArguments(t, operatingSystemSchema, []string{ mkResourceVirtualEnvironmentVMOperatingSystemType, @@ -344,7 +380,11 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMOperatingSystemType: schema.TypeString, }) - serialDeviceSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMSerialDevice) + serialDeviceSchema := testNestedSchemaExistence( + t, + s, + mkResourceVirtualEnvironmentVMSerialDevice, + ) testOptionalArguments(t, serialDeviceSchema, []string{ mkResourceVirtualEnvironmentVMSerialDeviceDevice,