mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-06-30 10:33:46 +00:00
chore(docs): add examples with VM hostname configuration to cloud-init guide (#1670)
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
parent
4490fe8b28
commit
dc73e0ba04
@ -8,9 +8,9 @@ description: |-
|
|||||||
|
|
||||||
# Configure a VM with Cloud-Init
|
# Configure a VM with Cloud-Init
|
||||||
|
|
||||||
## Native Proxmox Cloud-Init support
|
## Native Proxmox Cloud-Init Support
|
||||||
|
|
||||||
Proxmox supports Cloud-Init natively, so you can use the `initialization` block to configure your VM:
|
Proxmox supports cloud-init natively, so you can use the `initialization` block to configure your VM:
|
||||||
|
|
||||||
```terraform
|
```terraform
|
||||||
data "local_file" "ssh_public_key" {
|
data "local_file" "ssh_public_key" {
|
||||||
@ -22,7 +22,6 @@ resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
|
|||||||
node_name = "pve"
|
node_name = "pve"
|
||||||
|
|
||||||
initialization {
|
initialization {
|
||||||
|
|
||||||
ip_config {
|
ip_config {
|
||||||
ipv4 {
|
ipv4 {
|
||||||
address = "192.168.3.233/24"
|
address = "192.168.3.233/24"
|
||||||
@ -61,18 +60,20 @@ resource "proxmox_virtual_environment_download_file" "ubuntu_cloud_image" {
|
|||||||
|
|
||||||
Note that many cloud images do not have `qemu-guest-agent` installed by default, so you won't be able to retrieve the dynamic IP address of the VM from Proxmox, as this is agent's responsibility. You can use the `ip_config` block to configure a static IP address instead.
|
Note that many cloud images do not have `qemu-guest-agent` installed by default, so you won't be able to retrieve the dynamic IP address of the VM from Proxmox, as this is agent's responsibility. You can use the `ip_config` block to configure a static IP address instead.
|
||||||
|
|
||||||
## Custom Cloud-Init configuration
|
## Custom Cloud-Init Configuration
|
||||||
|
|
||||||
Because of several limitations of the native Proxmox cloud-init support, you may want to use a custom Cloud-Init configuration instead. This would allow you to adjust the VM configuration to your needs, and also install the `qemu-guest-agent` and additional packages.
|
Due to several limitations of the native Proxmox cloud-init support, you may want to use a custom Cloud-Init configuration instead. This allows you to adjust the VM configuration to your needs and install the `qemu-guest-agent` and additional packages.
|
||||||
|
|
||||||
In order to use a custom cloud-init configuration, you need to create a `cloud-config` snippet file and pass it to the VM as a `user_data_file_id` parameter. You can use the `proxmox_virtual_environment_file` resource to create the file. Make sure the "Snippets" content type is enabled on the target datastore in Proxmox before applying the configuration below.
|
To use a custom cloud-init configuration, create a cloud-config snippet file and pass it to the VM as a `user_data_file_id` parameter. Use the `proxmox_virtual_environment_file` resource to create the file. Ensure the "Snippets" content type is enabled on the target datastore in Proxmox before applying the configuration below.
|
||||||
|
|
||||||
|
Note that you need to explicitly set the `hostname` in the provided cloud-init configuration, as the custom user data cloud-init config overwrites the config set by Proxmox, as shown in the example below.
|
||||||
|
|
||||||
```terraform
|
```terraform
|
||||||
data "local_file" "ssh_public_key" {
|
data "local_file" "ssh_public_key" {
|
||||||
filename = "./id_rsa.pub"
|
filename = "./id_rsa.pub"
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "proxmox_virtual_environment_file" "cloud_config" {
|
resource "proxmox_virtual_environment_file" "user_data_cloud_config" {
|
||||||
content_type = "snippets"
|
content_type = "snippets"
|
||||||
datastore_id = "local"
|
datastore_id = "local"
|
||||||
node_name = "pve"
|
node_name = "pve"
|
||||||
@ -80,6 +81,7 @@ resource "proxmox_virtual_environment_file" "cloud_config" {
|
|||||||
source_raw {
|
source_raw {
|
||||||
data = <<-EOF
|
data = <<-EOF
|
||||||
#cloud-config
|
#cloud-config
|
||||||
|
hostname: test-ubuntu
|
||||||
users:
|
users:
|
||||||
- default
|
- default
|
||||||
- name: ubuntu
|
- name: ubuntu
|
||||||
@ -98,7 +100,7 @@ resource "proxmox_virtual_environment_file" "cloud_config" {
|
|||||||
- echo "done" > /tmp/cloud-config.done
|
- echo "done" > /tmp/cloud-config.done
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
file_name = "cloud-config.yaml"
|
file_name = "user-data-cloud-config.yaml"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -136,7 +138,7 @@ resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user_data_file_id = proxmox_virtual_environment_file.cloud_config.id
|
user_data_file_id = proxmox_virtual_environment_file.user_data_cloud_config.id
|
||||||
}
|
}
|
||||||
|
|
||||||
network_device {
|
network_device {
|
||||||
@ -157,3 +159,36 @@ output "vm_ipv4_address" {
|
|||||||
value = proxmox_virtual_environment_vm.ubuntu_vm.ipv4_addresses[1][0]
|
value = proxmox_virtual_environment_vm.ubuntu_vm.ipv4_addresses[1][0]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you wish to keep the user data cloud-init config generic, for example, when deploying multiple VMs for a Kubernetes cluster, you can use a separate snippet with the metadata cloud-init config to set the hostname. Note that it uses the `local-hostname` configuration parameter. See more details in the [cloud-init documentation](https://docs.cloud-init.io/en/latest/reference/yaml_examples/update_hostname.html).
|
||||||
|
|
||||||
|
```terraform
|
||||||
|
resource "proxmox_virtual_environment_file" "metadata_cloud_config" {
|
||||||
|
content_type = "snippets"
|
||||||
|
datastore_id = "local"
|
||||||
|
node_name = "pve"
|
||||||
|
|
||||||
|
source_raw {
|
||||||
|
data = <<-EOF
|
||||||
|
#cloud-config
|
||||||
|
local-hostname: test-ubuntu
|
||||||
|
EOF
|
||||||
|
|
||||||
|
file_name = "metadata-cloud-config.yaml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```terraform
|
||||||
|
resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
|
||||||
|
# ...
|
||||||
|
|
||||||
|
initialization {
|
||||||
|
# ...
|
||||||
|
user_data_file_id = proxmox_virtual_environment_file.user_data_cloud_config.id
|
||||||
|
metadata_file_id = proxmox_virtual_environment_file.metadata_cloud_config.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
@ -2,7 +2,7 @@ data "local_file" "ssh_public_key" {
|
|||||||
filename = "./id_rsa.pub"
|
filename = "./id_rsa.pub"
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "proxmox_virtual_environment_file" "cloud_config" {
|
resource "proxmox_virtual_environment_file" "user_data_cloud_config" {
|
||||||
content_type = "snippets"
|
content_type = "snippets"
|
||||||
datastore_id = "local"
|
datastore_id = "local"
|
||||||
node_name = "pve"
|
node_name = "pve"
|
||||||
@ -10,6 +10,7 @@ resource "proxmox_virtual_environment_file" "cloud_config" {
|
|||||||
source_raw {
|
source_raw {
|
||||||
data = <<-EOF
|
data = <<-EOF
|
||||||
#cloud-config
|
#cloud-config
|
||||||
|
hostname: test-ubuntu
|
||||||
users:
|
users:
|
||||||
- default
|
- default
|
||||||
- name: ubuntu
|
- name: ubuntu
|
||||||
@ -28,6 +29,6 @@ resource "proxmox_virtual_environment_file" "cloud_config" {
|
|||||||
- echo "done" > /tmp/cloud-config.done
|
- echo "done" > /tmp/cloud-config.done
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
file_name = "cloud-config.yaml"
|
file_name = "user-data-cloud-config.yaml"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
user_data_file_id = proxmox_virtual_environment_file.cloud_config.id
|
user_data_file_id = proxmox_virtual_environment_file.user_data_cloud_config.id
|
||||||
}
|
}
|
||||||
|
|
||||||
network_device {
|
network_device {
|
||||||
|
@ -7,7 +7,6 @@ resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
|
|||||||
node_name = "pve"
|
node_name = "pve"
|
||||||
|
|
||||||
initialization {
|
initialization {
|
||||||
|
|
||||||
ip_config {
|
ip_config {
|
||||||
ipv4 {
|
ipv4 {
|
||||||
address = "192.168.3.233/24"
|
address = "192.168.3.233/24"
|
||||||
|
@ -8,20 +8,55 @@ description: |-
|
|||||||
|
|
||||||
# Configure a VM with Cloud-Init
|
# Configure a VM with Cloud-Init
|
||||||
|
|
||||||
## Native Proxmox Cloud-Init support
|
## Native Proxmox Cloud-Init Support
|
||||||
|
|
||||||
Proxmox supports Cloud-Init natively, so you can use the `initialization` block to configure your VM:
|
Proxmox supports cloud-init natively, so you can use the `initialization` block to configure your VM:
|
||||||
|
|
||||||
{{ codefile "terraform" "examples/guides/cloud-init/native/main.tf" }}
|
{{ codefile "terraform" "examples/guides/cloud-init/native/main.tf" }}
|
||||||
|
|
||||||
Note that many cloud images do not have `qemu-guest-agent` installed by default, so you won't be able to retrieve the dynamic IP address of the VM from Proxmox, as this is agent's responsibility. You can use the `ip_config` block to configure a static IP address instead.
|
Note that many cloud images do not have `qemu-guest-agent` installed by default, so you won't be able to retrieve the dynamic IP address of the VM from Proxmox, as this is agent's responsibility. You can use the `ip_config` block to configure a static IP address instead.
|
||||||
|
|
||||||
## Custom Cloud-Init configuration
|
## Custom Cloud-Init Configuration
|
||||||
|
|
||||||
Because of several limitations of the native Proxmox cloud-init support, you may want to use a custom Cloud-Init configuration instead. This would allow you to adjust the VM configuration to your needs, and also install the `qemu-guest-agent` and additional packages.
|
Due to several limitations of the native Proxmox cloud-init support, you may want to use a custom Cloud-Init configuration instead. This allows you to adjust the VM configuration to your needs and install the `qemu-guest-agent` and additional packages.
|
||||||
|
|
||||||
In order to use a custom cloud-init configuration, you need to create a `cloud-config` snippet file and pass it to the VM as a `user_data_file_id` parameter. You can use the `proxmox_virtual_environment_file` resource to create the file. Make sure the "Snippets" content type is enabled on the target datastore in Proxmox before applying the configuration below.
|
To use a custom cloud-init configuration, create a cloud-config snippet file and pass it to the VM as a `user_data_file_id` parameter. Use the `proxmox_virtual_environment_file` resource to create the file. Ensure the "Snippets" content type is enabled on the target datastore in Proxmox before applying the configuration below.
|
||||||
|
|
||||||
|
Note that you need to explicitly set the `hostname` in the provided cloud-init configuration, as the custom user data cloud-init config overwrites the config set by Proxmox, as shown in the example below.
|
||||||
|
|
||||||
{{ codefile "terraform" "examples/guides/cloud-init/custom/cloud-config.tf" }}
|
{{ codefile "terraform" "examples/guides/cloud-init/custom/cloud-config.tf" }}
|
||||||
|
|
||||||
{{ codefile "terraform" "examples/guides/cloud-init/custom/main.tf" }}
|
{{ codefile "terraform" "examples/guides/cloud-init/custom/main.tf" }}
|
||||||
|
|
||||||
|
If you wish to keep the user data cloud-init config generic, for example, when deploying multiple VMs for a Kubernetes cluster, you can use a separate snippet with the metadata cloud-init config to set the hostname. Note that it uses the `local-hostname` configuration parameter. See more details in the [cloud-init documentation](https://docs.cloud-init.io/en/latest/reference/yaml_examples/update_hostname.html).
|
||||||
|
|
||||||
|
```terraform
|
||||||
|
resource "proxmox_virtual_environment_file" "metadata_cloud_config" {
|
||||||
|
content_type = "snippets"
|
||||||
|
datastore_id = "local"
|
||||||
|
node_name = "pve"
|
||||||
|
|
||||||
|
source_raw {
|
||||||
|
data = <<-EOF
|
||||||
|
#cloud-config
|
||||||
|
local-hostname: test-ubuntu
|
||||||
|
EOF
|
||||||
|
|
||||||
|
file_name = "metadata-cloud-config.yaml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```terraform
|
||||||
|
resource "proxmox_virtual_environment_vm" "ubuntu_vm" {
|
||||||
|
# ...
|
||||||
|
|
||||||
|
initialization {
|
||||||
|
# ...
|
||||||
|
user_data_file_id = proxmox_virtual_environment_file.user_data_cloud_config.id
|
||||||
|
metadata_file_id = proxmox_virtual_environment_file.metadata_cloud_config.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user