diff --git a/README.md b/README.md index f574b9cd..6c88f6c6 100644 --- a/README.md +++ b/README.md @@ -334,6 +334,7 @@ This resource doesn't expose any additional attributes. * `gateway` - (Optional) The IPv6 gateway (must be omitted when `dhcp` is used as the address) * `user_account` - (Required) The user account configuration * `keys` - (Required) The SSH keys + * `password` - (Optional) The SSH password * `username` - (Required) The SSH username * `cpu` - (Optional) The CPU configuration * `cores` - (Optional) The number of CPU cores (defaults to `1`) diff --git a/example/resource_virtual_environment_vm.tf b/example/resource_virtual_environment_vm.tf index 3678eca2..f9a31792 100644 --- a/example/resource_virtual_environment_vm.tf +++ b/example/resource_virtual_environment_vm.tf @@ -12,6 +12,7 @@ resource "proxmox_virtual_environment_vm" "example" { user_account { keys = ["${trimspace(tls_private_key.example.public_key_openssh)}"] + password = "proxmoxtf" username = "ubuntu" } } @@ -43,3 +44,7 @@ resource "tls_private_key" "example" { algorithm = "RSA" rsa_bits = 2048 } + +output "resource_proxmox_virtual_environment_vm_example_id" { + value = "${proxmox_virtual_environment_vm.example.id}" +} diff --git a/proxmoxtf/resource_virtual_environment_vm.go b/proxmoxtf/resource_virtual_environment_vm.go index bc0e7b3f..36ab600c 100644 --- a/proxmoxtf/resource_virtual_environment_vm.go +++ b/proxmoxtf/resource_virtual_environment_vm.go @@ -15,35 +15,36 @@ import ( ) const ( - dvResourceVirtualEnvironmentVMAgentEnabled = false - dvResourceVirtualEnvironmentVMAgentTrim = false - dvResourceVirtualEnvironmentVMAgentType = "virtio" - dvResourceVirtualEnvironmentVMCDROMEnabled = false - dvResourceVirtualEnvironmentVMCDROMFileID = "" - dvResourceVirtualEnvironmentVMCloudInitDNSDomain = "" - dvResourceVirtualEnvironmentVMCloudInitDNSServer = "" - dvResourceVirtualEnvironmentVMCPUCores = 1 - dvResourceVirtualEnvironmentVMCPUHotplugged = 0 - dvResourceVirtualEnvironmentVMCPUSockets = 1 - dvResourceVirtualEnvironmentVMDescription = "" - dvResourceVirtualEnvironmentVMDiskDatastoreID = "local-lvm" - dvResourceVirtualEnvironmentVMDiskEnabled = true - dvResourceVirtualEnvironmentVMDiskFileFormat = "qcow2" - dvResourceVirtualEnvironmentVMDiskFileID = "" - dvResourceVirtualEnvironmentVMDiskSize = 8 - dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us" - dvResourceVirtualEnvironmentVMMemoryDedicated = 512 - dvResourceVirtualEnvironmentVMMemoryFloating = 0 - dvResourceVirtualEnvironmentVMMemoryShared = 0 - dvResourceVirtualEnvironmentVMName = "" - dvResourceVirtualEnvironmentVMNetworkDeviceBridge = "vmbr0" - dvResourceVirtualEnvironmentVMNetworkDeviceEnabled = true - dvResourceVirtualEnvironmentVMNetworkDeviceMACAddress = "" - dvResourceVirtualEnvironmentVMNetworkDeviceModel = "virtio" - dvResourceVirtualEnvironmentVMNetworkDeviceVLANID = -1 - dvResourceVirtualEnvironmentVMOSType = "other" - dvResourceVirtualEnvironmentVMPoolID = "" - dvResourceVirtualEnvironmentVMVMID = -1 + dvResourceVirtualEnvironmentVMAgentEnabled = false + dvResourceVirtualEnvironmentVMAgentTrim = false + dvResourceVirtualEnvironmentVMAgentType = "virtio" + dvResourceVirtualEnvironmentVMCDROMEnabled = false + dvResourceVirtualEnvironmentVMCDROMFileID = "" + dvResourceVirtualEnvironmentVMCloudInitDNSDomain = "" + dvResourceVirtualEnvironmentVMCloudInitDNSServer = "" + dvResourceVirtualEnvironmentVMCloudInitUserAccountPassword = "" + dvResourceVirtualEnvironmentVMCPUCores = 1 + dvResourceVirtualEnvironmentVMCPUHotplugged = 0 + dvResourceVirtualEnvironmentVMCPUSockets = 1 + dvResourceVirtualEnvironmentVMDescription = "" + dvResourceVirtualEnvironmentVMDiskDatastoreID = "local-lvm" + dvResourceVirtualEnvironmentVMDiskEnabled = true + dvResourceVirtualEnvironmentVMDiskFileFormat = "qcow2" + dvResourceVirtualEnvironmentVMDiskFileID = "" + dvResourceVirtualEnvironmentVMDiskSize = 8 + dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us" + dvResourceVirtualEnvironmentVMMemoryDedicated = 512 + dvResourceVirtualEnvironmentVMMemoryFloating = 0 + dvResourceVirtualEnvironmentVMMemoryShared = 0 + dvResourceVirtualEnvironmentVMName = "" + dvResourceVirtualEnvironmentVMNetworkDeviceBridge = "vmbr0" + dvResourceVirtualEnvironmentVMNetworkDeviceEnabled = true + dvResourceVirtualEnvironmentVMNetworkDeviceMACAddress = "" + dvResourceVirtualEnvironmentVMNetworkDeviceModel = "virtio" + dvResourceVirtualEnvironmentVMNetworkDeviceVLANID = -1 + dvResourceVirtualEnvironmentVMOSType = "other" + dvResourceVirtualEnvironmentVMPoolID = "" + dvResourceVirtualEnvironmentVMVMID = -1 mkResourceVirtualEnvironmentVMAgent = "agent" mkResourceVirtualEnvironmentVMAgentEnabled = "enabled" @@ -65,6 +66,7 @@ const ( mkResourceVirtualEnvironmentVMCloudInitIPConfigIPv6Gateway = "gateway" mkResourceVirtualEnvironmentVMCloudInitUserAccount = "user_account" mkResourceVirtualEnvironmentVMCloudInitUserAccountKeys = "keys" + mkResourceVirtualEnvironmentVMCloudInitUserAccountPassword = "password" mkResourceVirtualEnvironmentVMCloudInitUserAccountUsername = "username" mkResourceVirtualEnvironmentVMCPU = "cpu" mkResourceVirtualEnvironmentVMCPUCores = "cores" @@ -291,6 +293,12 @@ func resourceVirtualEnvironmentVM() *schema.Resource { Description: "The SSH keys", Elem: &schema.Schema{Type: schema.TypeString}, }, + mkResourceVirtualEnvironmentVMCloudInitUserAccountPassword: { + Type: schema.TypeString, + Optional: true, + Description: "The SSH password", + Default: dvResourceVirtualEnvironmentVMCloudInitUserAccountPassword, + }, mkResourceVirtualEnvironmentVMCloudInitUserAccountUsername: { Type: schema.TypeString, Required: true, @@ -680,6 +688,12 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e cloudInitConfig.SSHKeys = &sshKeys } + password := cloudInitUserAccountBlock[mkResourceVirtualEnvironmentVMCloudInitUserAccountPassword].(string) + + if password != "" { + cloudInitConfig.Password = &password + } + username := cloudInitUserAccountBlock[mkResourceVirtualEnvironmentVMCloudInitUserAccountUsername].(string) cloudInitConfig.Username = &username diff --git a/proxmoxtf/resource_virtual_environment_vm_test.go b/proxmoxtf/resource_virtual_environment_vm_test.go index 162cfe7b..d8bc971e 100644 --- a/proxmoxtf/resource_virtual_environment_vm_test.go +++ b/proxmoxtf/resource_virtual_environment_vm_test.go @@ -191,12 +191,18 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMCloudInitUserAccountUsername, }) + testOptionalArguments(t, cloudInitUserAccountSchema, []string{ + mkResourceVirtualEnvironmentVMCloudInitUserAccountPassword, + }) + testSchemaValueTypes(t, cloudInitUserAccountSchema, []string{ mkResourceVirtualEnvironmentVMCloudInitUserAccountKeys, + mkResourceVirtualEnvironmentVMCloudInitUserAccountPassword, mkResourceVirtualEnvironmentVMCloudInitUserAccountUsername, }, []schema.ValueType{ schema.TypeList, schema.TypeString, + schema.TypeString, }) cpuSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMCPU)