diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..45c15053 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,3 @@ +_site +.sass-cache +.jekyll-metadata diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 00000000..4ec5922f --- /dev/null +++ b/docs/404.html @@ -0,0 +1,26 @@ +--- +layout: default +title: 404 +nav_exclude: true +--- + + + +
+

404

+ +

Page not found :(

+

The requested page could not be found.

+
diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 00000000..149103e1 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,27 @@ +source "https://rubygems.org" + +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve +# +# This will help ensure the proper Jekyll version is running. +# Happy Jekylling! + +gem "just-the-docs", "~> 0.2" + +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +gem "github-pages", group: :jekyll_plugins + +# If you have any plugins, put them here! +group :jekyll_plugins do + gem "rouge", "~> 2.2" +end + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem "tzinfo-data", platforms: [:mingw, :mswin, :x64_mingw, :jruby] + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.0" if Gem.win_platform? diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock new file mode 100644 index 00000000..96aea42e --- /dev/null +++ b/docs/Gemfile.lock @@ -0,0 +1,261 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (4.2.11.1) + i18n (~> 0.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + addressable (2.6.0) + public_suffix (>= 2.0.2, < 4.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.17.13) + ruby-enum (~> 0.5) + concurrent-ruby (1.1.5) + dnsruby (1.61.2) + addressable (~> 2.5) + em-websocket (0.5.1) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + ethon (0.12.0) + ffi (>= 1.3.0) + eventmachine (1.2.7-x64-mingw32) + execjs (2.7.0) + faraday (0.15.4) + multipart-post (>= 1.2, < 3) + ffi (1.11.1-x64-mingw32) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (198) + activesupport (= 4.2.11.1) + github-pages-health-check (= 1.16.1) + jekyll (= 3.8.5) + jekyll-avatar (= 0.6.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.1.5) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.11.0) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.12.1) + jekyll-mentions (= 1.4.1) + jekyll-optional-front-matter (= 0.3.0) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.2.0) + jekyll-redirect-from (= 0.14.0) + jekyll-relative-links (= 0.6.0) + jekyll-remote-theme (= 0.3.1) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.5.0) + jekyll-sitemap (= 1.2.0) + jekyll-swiss (= 0.4.0) + jekyll-theme-architect (= 0.1.1) + jekyll-theme-cayman (= 0.1.1) + jekyll-theme-dinky (= 0.1.1) + jekyll-theme-hacker (= 0.1.1) + jekyll-theme-leap-day (= 0.1.1) + jekyll-theme-merlot (= 0.1.1) + jekyll-theme-midnight (= 0.1.1) + jekyll-theme-minimal (= 0.1.1) + jekyll-theme-modernist (= 0.1.1) + jekyll-theme-primer (= 0.5.3) + jekyll-theme-slate (= 0.1.1) + jekyll-theme-tactile (= 0.1.1) + jekyll-theme-time-machine (= 0.1.1) + jekyll-titles-from-headings (= 0.5.1) + jemoji (= 0.10.2) + kramdown (= 1.17.0) + liquid (= 4.0.0) + listen (= 3.1.5) + mercenary (~> 0.3) + minima (= 2.5.0) + nokogiri (>= 1.8.5, < 2.0) + rouge (= 2.2.1) + terminal-table (~> 1.4) + github-pages-health-check (1.16.1) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (~> 3.0) + typhoeus (~> 1.3) + html-pipeline (2.11.1) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + jekyll (3.8.5) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (~> 0.7) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (~> 1.14) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.6.0) + jekyll (~> 3.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.3.1) + commonmarker (~> 0.14) + jekyll (>= 3.7, < 5.0) + jekyll-commonmark-ghpages (0.1.5) + commonmarker (~> 0.17.6) + jekyll-commonmark (~> 1) + rouge (~> 2) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.11.0) + jekyll (~> 3.3) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.12.1) + jekyll (~> 3.4) + octokit (~> 4.0, != 4.4.0) + jekyll-mentions (1.4.1) + html-pipeline (~> 2.3) + jekyll (~> 3.0) + jekyll-optional-front-matter (0.3.0) + jekyll (~> 3.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.2.0) + jekyll (~> 3.0) + jekyll-redirect-from (0.14.0) + jekyll (~> 3.3) + jekyll-relative-links (0.6.0) + jekyll (~> 3.3) + jekyll-remote-theme (0.3.1) + jekyll (~> 3.5) + rubyzip (>= 1.2.1, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.5.0) + jekyll (~> 3.3) + jekyll-sitemap (1.2.0) + jekyll (~> 3.3) + jekyll-swiss (0.4.0) + jekyll-theme-architect (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.5.3) + jekyll (~> 3.5) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.1.1) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.1) + jekyll (~> 3.3) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.10.2) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (~> 3.0) + just-the-docs (0.2.7) + jekyll (~> 3.8.5) + jekyll-seo-tag (~> 2.0) + rake (~> 12.3.1) + kramdown (1.17.0) + liquid (4.0.0) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + mercenary (0.3.6) + mini_portile2 (2.4.0) + minima (2.5.0) + jekyll (~> 3.5) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.11.3) + multipart-post (2.1.1) + nokogiri (1.10.9-x64-mingw32) + mini_portile2 (~> 2.4.0) + octokit (4.14.0) + sawyer (~> 0.8.0, >= 0.5.3) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (3.1.1) + rake (12.3.3) + rb-fsevent (0.10.3) + rb-inotify (0.10.0) + ffi (~> 1.0) + rouge (2.2.1) + ruby-enum (0.7.2) + i18n + ruby_dep (1.5.0) + rubyzip (2.2.0) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.8.2) + addressable (>= 2.3.5) + faraday (> 0.8, < 2.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + thread_safe (0.3.6) + typhoeus (1.3.1) + ethon (>= 0.9.0) + tzinfo (1.2.5) + thread_safe (~> 0.1) + tzinfo-data (1.2019.2) + tzinfo (>= 1.0.0) + unicode-display_width (1.6.0) + wdm (0.1.1) + +PLATFORMS + x64-mingw32 + +DEPENDENCIES + github-pages + jekyll-feed (~> 0.6) + just-the-docs (~> 0.2) + rouge (~> 2.2) + tzinfo-data + wdm (~> 0.1.0) + +BUNDLED WITH + 2.1.4 diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 00000000..d9018cd7 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,18 @@ +email: info@danitso.com +title: Proxmox Provider +description: >- + Terraform Provider for Proxmox. +baseurl: "" +url: "" +github_username: "danitso" + +highlighter: rouge +markdown: kramdown +plugins: + - github-pages +theme: just-the-docs + +# Theme settings. +footer_content: 'Copyright © 2019-2020 Danitso - Distributed under the Mozilla Public License 2.0' +heading_anchors: true +search_enabled: false diff --git a/docs/assets/js/search-data.json b/docs/assets/js/search-data.json new file mode 100644 index 00000000..e69de29b diff --git a/docs/data_sources/index.md b/docs/data_sources/index.md new file mode 100644 index 00000000..d2695eb9 --- /dev/null +++ b/docs/data_sources/index.md @@ -0,0 +1,9 @@ +--- +layout: page +title: Data Sources +permalink: /data-sources +nav_order: 2 +has_children: true +--- + +# Data Sources diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_datastores.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_datastores.md new file mode 100644 index 00000000..9a6f9cde --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_datastores.md @@ -0,0 +1,36 @@ +--- +layout: page +title: Datastores +permalink: /data-sources/virtual-environment/datastores +nav_order: 1 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Datastores + +Retrieves information about all the datastores available to a specific node. + +## Example Usage + +``` +data "proxmox_virtual_environment_datastores" "first_node" { + node_name = "first-node" +} +``` + +## Arguments Reference + +* `node_name` - (Required) A node name. + +## Attributes 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. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_dns.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_dns.md new file mode 100644 index 00000000..d849502f --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_dns.md @@ -0,0 +1,29 @@ +--- +layout: page +title: DNS +permalink: /data-sources/virtual-environment/dns +nav_order: 2 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: DNS + +Retrieves the DNS configuration for a specific node. + +## Example Usage + +``` +data "proxmox_virtual_environment_dns" "first_node" { + node_name = "first-node" +} +``` + +## Arguments Reference + +* `node_name` - (Required) A node name. + +## Attributes Reference + +* `domain` - The DNS search domain. +* `servers` - The DNS servers. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_group.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_group.md new file mode 100644 index 00000000..d82bb62c --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_group.md @@ -0,0 +1,33 @@ +--- +layout: page +title: Group +permalink: /data-sources/virtual-environment/group +nav_order: 3 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Group + +Retrieves information about a specific user group. + +## Example Usage + +``` +data "proxmox_virtual_environment_group" "operations_team" { + group_id = "operations-team" +} +``` + +## Arguments Reference + +* `group_id` - (Required) The group identifier. + +## Attributes 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. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_groups.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_groups.md new file mode 100644 index 00000000..cf4e09e1 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_groups.md @@ -0,0 +1,27 @@ +--- +layout: page +title: Groups +permalink: /data-sources/virtual-environment/groups +nav_order: 4 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Groups + +Retrieves basic information about all available user groups. + +## Example Usage + +``` +data "proxmox_virtual_environment_groups" "available_groups" {} +``` + +## Arguments Reference + +There are no arguments available for this data source. + +## Attributes Reference + +* `comments` - The group comments. +* `group_ids` - The group identifiers. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_hosts.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_hosts.md new file mode 100644 index 00000000..044fe2f8 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_hosts.md @@ -0,0 +1,31 @@ +--- +layout: page +title: Hosts +permalink: /data-sources/virtual-environment/hosts +nav_order: 5 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Hosts + +Retrieves all the host entries from a specific node. + +## Example Usage + +``` +data "proxmox_virtual_environment_hosts" "first_node_host_entries" { + node_name = "first-node" +} +``` + +## Arguments Reference + +* `node_name` - (Required) A node name. + +## Attributes 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. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_nodes.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_nodes.md new file mode 100644 index 00000000..4631056c --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_nodes.md @@ -0,0 +1,34 @@ +--- +layout: page +title: Nodes +permalink: /data-sources/virtual-environment/nodes +nav_order: 6 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Nodes + +Retrieves information about all available nodes. + +## Example Usage + +``` +data "proxmox_virtual_environment_nodes" "available_nodes" {} +``` + +## Arguments Reference + +There are no arguments available for this data source. + +## Attributes 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. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_pool.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_pool.md new file mode 100644 index 00000000..d919b3d7 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_pool.md @@ -0,0 +1,34 @@ +--- +layout: page +title: Pool +permalink: /data-sources/virtual-environment/pool +nav_order: 7 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Pool + +Retrieves information about a specific resource pool. + +## Example Usage + +``` +data "proxmox_virtual_environment_pool" "operations_pool" { + pool_id = "operations" +} +``` + +## Arguments Reference + +* `pool_id` - (Required) The pool identifier. + +## Attributes 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. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_pools.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_pools.md new file mode 100644 index 00000000..28074d94 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_pools.md @@ -0,0 +1,26 @@ +--- +layout: page +title: Pools +permalink: /data-sources/virtual-environment/pools +nav_order: 8 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Pools + +Retrieves the identifiers for all the available resource pools. + +## Example Usage + +``` +data "proxmox_virtual_environment_pools" "available_pools" {} +``` + +## Arguments Reference + +There are no arguments available for this data source. + +## Attributes Reference + +* `pool_ids` - The pool identifiers. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_role.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_role.md new file mode 100644 index 00000000..26d15f4d --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_role.md @@ -0,0 +1,28 @@ +--- +layout: page +title: Role +permalink: /data-sources/virtual-environment/role +nav_order: 9 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Role + +Retrieves information about a specific role. + +## Example Usage + +``` +data "proxmox_virtual_environment_role" "operations_role" { + role_id = "operations" +} +``` + +## Arguments Reference + +* `role_id` - (Required) The role identifier. + +## Attributes Reference + +* `privileges` - The role privileges diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_roles.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_roles.md new file mode 100644 index 00000000..af7c9b28 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_roles.md @@ -0,0 +1,28 @@ +--- +layout: page +title: Roles +permalink: /data-sources/virtual-environment/roles +nav_order: 10 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Roles + +Retrieves information about all the available roles. + +## Example Usage + +``` +data "proxmox_virtual_environment_roles" "available_roles" {} +``` + +## Arguments Reference + +There are no arguments available for this data source. + +## Attributes Reference + +* `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/data_source_virtual_environment_user.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_user.md new file mode 100644 index 00000000..4c97f8f4 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_user.md @@ -0,0 +1,39 @@ +--- +layout: page +title: User +permalink: /data-sources/virtual-environment/user +nav_order: 11 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: User + +Retrieves information about a specific user. + +## Example Usage + +``` +data "proxmox_virtual_environment_user" "operations_user" { + user_id = "operation@pam" +} +``` + +## Arguments Reference + +* `user_id` - (Required) The user identifier. + +## Attributes 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. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_users.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_users.md new file mode 100644 index 00000000..2a66ce3d --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_users.md @@ -0,0 +1,34 @@ +--- +layout: page +title: Users +permalink: /data-sources/virtual-environment/users +nav_order: 12 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Users + +Retrieves information about all the available users. + +## Example Usage + +``` +data "proxmox_virtual_environment_users" "available_users" {} +``` + +## Arguments Reference + +There are no arguments available for this data source. + +## Attributes 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. diff --git a/docs/data_sources/virtual_environment/data_source_virtual_environment_version.md b/docs/data_sources/virtual_environment/data_source_virtual_environment_version.md new file mode 100644 index 00000000..45df9263 --- /dev/null +++ b/docs/data_sources/virtual_environment/data_source_virtual_environment_version.md @@ -0,0 +1,29 @@ +--- +layout: page +title: Version +permalink: /data-sources/virtual-environment/version +nav_order: 13 +parent: Virtual Environment Data Sources +grand_parent: Data Sources +--- + +# Data Source: Version + +Retrieves the version information from the API endpoint. + +## Example Usage + +``` +data "proxmox_virtual_environment_version" "current_version" {} +``` + +## Arguments Reference + +There are no arguments available for this data source. + +## Attributes Reference + +* `keyboard_layout` - The keyboard layout. +* `release` - The release number. +* `repository_id` - The repository identifier. +* `version` - The version string. diff --git a/docs/data_sources/virtual_environment/index.md b/docs/data_sources/virtual_environment/index.md new file mode 100644 index 00000000..9e0eea09 --- /dev/null +++ b/docs/data_sources/virtual_environment/index.md @@ -0,0 +1,10 @@ +--- +layout: page +title: Virtual Environment Data Sources +permalink: /data-sources/virtual-environment +nav_order: 1 +parent: Data Sources +has_children: true +--- + +# Virtual Environment Data Sources diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..6a46cdd5 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,78 @@ +--- +layout: home +title: Proxmox Provider +nav_order: 1 +--- + +# Proxmox Provider + +This provider for [Terraform](https://www.terraform.io/) is used to interact 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. + +## Example Usage + +``` +provider "proxmox" { + virtual_environment { + endpoint = "https://10.0.0.2" + username = "root@pam" + password = "the-password-set-during-installation-of-proxmox-ve" + insecure = true + } +} +``` + +## Authentication + +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 + +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. +{: .label .label-red } + +Static credentials can be provided by adding a `username` and `password` in-line in the Proxmox provider block: + +``` +provider "proxmox" { + virtual_environment { + username = "username@realm" + password = "a-strong-password" + } +} +``` + +### 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: + +``` +provider "proxmox" { + virtual_environment {} +} +``` + +Usage: + +```sh +$ export PROXMOX_VE_USERNAME="username@realm" +$ export PROXMOX_VE_PASSWORD="a-strong-password" +$ terraform plan +``` + +## Arguments 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: + +* `virtual_environment` - (Optional) A `virtual_environment` block (documented below). Only one `virtual_environment` block may be in the configuration. + +The nested `virtual_environment` block supports the following: + +* `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`. +* `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/index.md b/docs/resources/index.md new file mode 100644 index 00000000..bc999921 --- /dev/null +++ b/docs/resources/index.md @@ -0,0 +1,9 @@ +--- +layout: page +title: Resources +permalink: /resources +nav_order: 3 +has_children: true +--- + +# Resources diff --git a/docs/resources/virtual_environment/index.md b/docs/resources/virtual_environment/index.md new file mode 100644 index 00000000..e1e34954 --- /dev/null +++ b/docs/resources/virtual_environment/index.md @@ -0,0 +1,10 @@ +--- +layout: page +title: Virtual Environment Resources +permalink: /resources/virtual-environment +nav_order: 1 +parent: Resources +has_children: true +--- + +# Virtual Environment Resources diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_certificate.md b/docs/resources/virtual_environment/proxmox_virtual_environment_certificate.md new file mode 100644 index 00000000..f8c0bc7e --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_certificate.md @@ -0,0 +1,64 @@ +--- +layout: page +title: Certificate +permalink: /ressources/virtual-environment/certificate +nav_order: 1 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: Certificate + +Manages the custom SSL/TLS certificate for a specific node. + +## Example Usage + +``` +resource "proxmox_virtual_environment_certificate" "example" { + certificate = "${tls_self_signed_cert.proxmox_virtual_environment_certificate.cert_pem}" + node_name = "first-node" + private_key = "${tls_private_key.proxmox_virtual_environment_certificate.private_key_pem}" +} + +resource "tls_private_key" "proxmox_virtual_environment_certificate" { + algorithm = "RSA" + rsa_bits = 2048 +} + +resource "tls_self_signed_cert" "proxmox_virtual_environment_certificate" { + key_algorithm = "${tls_private_key.proxmox_virtual_environment_certificate.algorithm}" + private_key_pem = "${tls_private_key.proxmox_virtual_environment_certificate.private_key_pem}" + + subject { + common_name = "example.com" + organization = "Terraform Provider for Proxmox" + } + + validity_period_hours = 8760 + + allowed_uses = [ + "key_encipherment", + "digital_signature", + "server_auth", + ] +} +``` + +## Arguments 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. + +## Attributes 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. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_container.md b/docs/resources/virtual_environment/proxmox_virtual_environment_container.md new file mode 100644 index 00000000..d6272fcb --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_container.md @@ -0,0 +1,153 @@ +--- +layout: page +title: Container +permalink: /ressources/virtual-environment/container +nav_order: 2 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: Container + +Manages a container. + +## Example Usage + +``` +resource "proxmox_virtual_environment_container" "ubuntu_container" { + description = "Managed by Terraform" + + node_name = "first-node" + vm_id = 1234 + + initialization { + hostname = "terraform-provider-proxmox-ubuntu-container" + + ip_config { + ipv4 { + address = "dhcp" + } + } + + user_account { + keys = ["${trimspace(tls_private_key.ubuntu_container_key.public_key_openssh)}"] + password = "${random_password.ubuntu_container_password.result}" + } + } + + network_interface { + name = "veth0" + } + + operating_system { + template_file_id = "${proxmox_virtual_environment_file.ubuntu_container_template.id}" + type = "ubuntu" + } +} + +resource "proxmox_virtual_environment_file" "ubuntu_container_template" { + content_type = "vztmpl" + datastore_id = "local" + node_name = "first-node" + + source_file { + path = "http://download.proxmox.com/images/system/ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz" + } +} + +resource "random_password" "ubuntu_container_password" { + length = 16 + override_special = "_%@" + special = true +} + +resource "tls_private_key" "ubuntu_container_key" { + algorithm = "RSA" + rsa_bits = 2048 +} + +output "ubuntu_container_password" { + value = "${random_password.ubuntu_container_password.result}" + sensitive = true +} + +output "ubuntu_container_private_key" { + value = "${tls_private_key.ubuntu_container_key.private_key_pem}" + sensitive = true +} + +output "ubuntu_container_public_key" { + value = "${tls_private_key.ubuntu_container_key.public_key_openssh}" +} +``` + +## Arguments 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) A disk. + * `datastore_id` - (Optional) The identifier for the datastore to create the disk in (defaults to `local-lvm`). +* `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. + * `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 + +## Attributes Reference + +There are no additional attributes available for this resource. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_dns.md b/docs/resources/virtual_environment/proxmox_virtual_environment_dns.md new file mode 100644 index 00000000..ec66adc7 --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_dns.md @@ -0,0 +1,44 @@ +--- +layout: page +title: DNS +permalink: /ressources/virtual-environment/dns +nav_order: 3 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: DNS + +Manages the DNS configuration for a specific node. + +## Example Usage + +``` +resource "proxmox_virtual_environment_dns" "first_node_dns_configuration" { + domain = "${data.proxmox_virtual_environment_dns.first_node_dns_configuration.domain}" + node_name = "${data.proxmox_virtual_environment_dns.first_node_dns_configuration.node_name}" + + servers = [ + "1.1.1.1", + "1.0.0.1", + ] +} + +data "proxmox_virtual_environment_dns" "first_node_dns_configuration" { + node_name = "first-node" +} +``` + +## Arguments Reference + +* `domain` - (Required) The DNS search domain. +* `node_name` - (Required) A node name. +* `servers` - (Optional) The DNS servers. + +## Attributes Reference + +There are no additional attributes available for this resource. + +## Important Notes + +Be careful not to use this resource multiple times for the same node. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_file.md b/docs/resources/virtual_environment/proxmox_virtual_environment_file.md new file mode 100644 index 00000000..df11f129 --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_file.md @@ -0,0 +1,58 @@ +--- +layout: page +title: File +permalink: /ressources/virtual-environment/file +nav_order: 4 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: File + +Manages a file. + +## Example Usage + +``` +resource "proxmox_virtual_environment_file" "ubuntu_container_template" { + content_type = "vztmpl" + datastore_id = "local" + node_name = "first-node" + + source_file { + path = "http://download.proxmox.com/images/system/ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz" + } +} +``` + +## Arguments 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. + +## Attributes 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. + +## 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. + +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/proxmox_virtual_environment_group.md b/docs/resources/virtual_environment/proxmox_virtual_environment_group.md new file mode 100644 index 00000000..e5ddfa7e --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_group.md @@ -0,0 +1,34 @@ +--- +layout: page +title: Group +permalink: /ressources/virtual-environment/group +nav_order: 5 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: Group + +Manages a user group. + +## Example Usage + +``` +resource "proxmox_virtual_environment_group" "operations_team" { + comment = "Managed by Terraform" + group_id = "operations-team" +} +``` + +## Arguments 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. + +## Attributes Reference + +* `members` - The group members as a list of `username@realm` entries diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_hosts.md b/docs/resources/virtual_environment/proxmox_virtual_environment_hosts.md new file mode 100644 index 00000000..81b0c1b3 --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_hosts.md @@ -0,0 +1,43 @@ +--- +layout: page +title: Hosts +permalink: /ressources/virtual-environment/hosts +nav_order: 6 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: Hosts + +Manages the host entries on a specific node. + +## Example Usage + +``` +resource "proxmox_virtual_environment_hosts" "first_node_host_entries" { + node_name = "first-node" + + entry { + address = "127.0.0.1" + + hostnames = [ + "localhost", + "localhost.localdomain", + ] + } +} +``` + +## Arguments Reference + +* `node_name` - (Required) A node name. +* `entry` - (Required) A host entry (multiple blocks supported). + * `address` - (Required) The IP address. + * `hostnames` - (Required) The hostnames. + +## Attributes 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. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_pool.md b/docs/resources/virtual_environment/proxmox_virtual_environment_pool.md new file mode 100644 index 00000000..5af936f4 --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_pool.md @@ -0,0 +1,35 @@ +--- +layout: page +title: Pool +permalink: /ressources/virtual-environment/pool +nav_order: 7 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: Pool + +Manages a resource pool. + +## Example Usage + +``` +resource "proxmox_virtual_environment_pool" "operations_pool" { + comment = "Managed by Terraform" + pool_id = "operations-pool" +} +``` + +## Arguments Reference + +* `comment` - (Optional) The pool comment. +* `pool_id` - (Required) The pool identifier. + +## Attributes 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. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_role.md b/docs/resources/virtual_environment/proxmox_virtual_environment_role.md new file mode 100644 index 00000000..108f9565 --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_role.md @@ -0,0 +1,33 @@ +--- +layout: page +title: Role +permalink: /ressources/virtual-environment/role +nav_order: 8 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: Role + +Manages a role. + +## Example Usage + +``` +resource "proxmox_virtual_environment_role" "operations_monitoring" { + role_id = "operations-monitoring" + + privileges = [ + "VM.Monitor", + ] +} +``` + +## Arguments Reference + +* `privileges` - (Required) The role privileges. +* `role_id` - (Required) The role identifier. + +## Attributes Reference + +There are no additional attributes available for this resource. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_user.md b/docs/resources/virtual_environment/proxmox_virtual_environment_user.md new file mode 100644 index 00000000..8490f60e --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_user.md @@ -0,0 +1,57 @@ +--- +layout: page +title: User +permalink: /ressources/virtual-environment/user +nav_order: 9 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: User + +Manages a user. + +## Example Usage + +``` +resource "proxmox_virtual_environment_user" "operations_automation" { + acl { + path = "/vms/1234" + propagate = true + role_id = "${proxmox_virtual_environment_role.operations_monitoring.role_id}" + } + + comment = "Managed by Terraform" + password = "a-strong-password" + user_id = "operations-automation@pve" +} + +resource "proxmox_virtual_environment_role" "operations_monitoring" { + role_id = "operations-monitoring" + + privileges = [ + "VM.Monitor", + ] +} +``` + +## Arguments 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. + +## Attributes Reference + +There are no additional attributes available for this resource. diff --git a/docs/resources/virtual_environment/proxmox_virtual_environment_vm.md b/docs/resources/virtual_environment/proxmox_virtual_environment_vm.md new file mode 100644 index 00000000..3a7bbaf5 --- /dev/null +++ b/docs/resources/virtual_environment/proxmox_virtual_environment_vm.md @@ -0,0 +1,295 @@ +--- +layout: page +title: VM +permalink: /ressources/virtual-environment/vm +nav_order: 10 +parent: Virtual Environment Resources +grand_parent: Resources +--- + +# Resource: VM + +Manages a virtual machine. + +## Example Usage + +``` +resource "proxmox_virtual_environment_vm" "ubuntu_vm" { + name = "terraform-provider-proxmox-ubuntu-vm" + description = "Managed by Terraform" + + node_name = "first-node" + vm_id = 4321 + + agent { + enabled = true + } + + disk { + datastore_id = "local-lvm" + file_id = "${proxmox_virtual_environment_file.ubuntu_cloud_image.id}" + } + + initialization { + ip_config { + ipv4 { + address = "dhcp" + } + } + + user_account { + keys = ["${trimspace(tls_private_key.ubuntu_vm_key.public_key_openssh)}"] + password = "${random_password.ubuntu_vm_password.result}" + username = "ubuntu" + } + + user_data_file_id = "${proxmox_virtual_environment_file.cloud_config.id}" + } + + network_device {} + + operating_system { + type = "l26" + } + + serial_device {} +} + +resource "proxmox_virtual_environment_file" "ubuntu_cloud_image" { + content_type = "iso" + datastore_id = "local" + node_name = "first-node" + + source_file { + path = "https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img" + } +} + +resource "random_password" "ubuntu_vm_password" { + length = 16 + override_special = "_%@" + special = true +} + +resource "tls_private_key" "ubuntu_vm_key" { + algorithm = "RSA" + rsa_bits = 2048 +} + +output "ubuntu_vm_password" { + value = "${random_password.ubuntu_vm_password.result}" + sensitive = true +} + +output "ubuntu_vm_private_key" { + value = "${tls_private_key.ubuntu_vm_key.private_key_pem}" + sensitive = true +} + +output "ubuntu_vm_public_key" { + value = "${tls_private_key.ubuntu_vm_key.public_key_openssh}" +} +``` + +## Arguments 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`). + * `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). + * `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 passthrough. + * `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`). + * `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). + * `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. +* `initialization` - (Optional) The cloud-init configuration (conflicts with `cdrom`). + * `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. + * `user_data_file_id` - (Optional) The identifier for a file containing custom user data (conflicts with `user_account`). +* `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. +* `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. + * `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. +* `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. +* `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`). +* `template` - (Optional) Whether to create a template (defaults to `false`). +* `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. + +## Attributes 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`) + +## 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.