diff --git a/README.md b/README.md index 6c3cd8e..193d4c5 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,12 @@ resource "proxmox_vm_qemu" "prepprovision-test" { size = 4G backup = true } + # Serial interface of type socket is used by xterm.js + # You will need to configure your guest system before being able to use it + serial { + id = 0 + type = "socket" + } preprovision = true ssh_forward_ip = "10.0.0.1" ssh_user = "terraform" diff --git a/proxmox/resource_vm_qemu.go b/proxmox/resource_vm_qemu.go index 366340d..79ec930 100644 --- a/proxmox/resource_vm_qemu.go +++ b/proxmox/resource_vm_qemu.go @@ -274,6 +274,22 @@ func resourceVmQemu() *schema.Resource { return strings.TrimSpace(old) == strings.TrimSpace(new) }, }, + "serial": &schema.Schema{ + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": &schema.Schema{ + Type: schema.TypeInt, + Required: true, + }, + "type": &schema.Schema{ + Type: schema.TypeString, + Required: true, + }, + }, + }, + }, "os_type": { Type: schema.TypeString, Optional: true, @@ -375,6 +391,8 @@ func resourceVmQemuCreate(d *schema.ResourceData, meta interface{}) error { qemuNetworks := DevicesSetToMap(networks) disks := d.Get("disk").(*schema.Set) qemuDisks := DevicesSetToMap(disks) + serials := d.Get("serial").(*schema.Set) + qemuSerials := DevicesSetToMap(serials) config := pxapi.ConfigQemu{ Name: vmName, @@ -390,6 +408,7 @@ func resourceVmQemuCreate(d *schema.ResourceData, meta interface{}) error { QemuOs: d.Get("qemu_os").(string), QemuNetworks: qemuNetworks, QemuDisks: qemuDisks, + QemuSerials: qemuSerials, // Cloud-init. CIuser: d.Get("ciuser").(string), CIpassword: d.Get("cipassword").(string), @@ -534,6 +553,8 @@ func resourceVmQemuUpdate(d *schema.ResourceData, meta interface{}) error { qemuDisks := DevicesSetToMap(configDisksSet) configNetworksSet := d.Get("network").(*schema.Set) qemuNetworks := DevicesSetToMap(configNetworksSet) + serials := d.Get("serial").(*schema.Set) + qemuSerials := DevicesSetToMap(serials) config := pxapi.ConfigQemu{ Name: d.Get("name").(string), @@ -549,6 +570,7 @@ func resourceVmQemuUpdate(d *schema.ResourceData, meta interface{}) error { QemuOs: d.Get("qemu_os").(string), QemuNetworks: qemuNetworks, QemuDisks: qemuDisks, + QemuSerials: qemuSerials, // Cloud-init. CIuser: d.Get("ciuser").(string), CIpassword: d.Get("cipassword").(string), @@ -664,6 +686,10 @@ func resourceVmQemuRead(d *schema.ResourceData, meta interface{}) error { d.Set("vlan", config.QemuVlanTag) d.Set("mac", config.QemuMacAddr) d.Set("pool", vmr.Pool()) + //Serials + configSerialsSet := d.Get("serial").(*schema.Set) + activeSerialSet := UpdateDevicesSet(configSerialsSet, config.QemuSerials) + d.Set("serial", activeSerialSet) pmParallelEnd(pconf) return nil