Skip to content

Commit

Permalink
Merge pull request #117 from Cloud-Temple/bugfix/116
Browse files Browse the repository at this point in the history
Fixed a bug causing guest os customization not to work properly on windows
  • Loading branch information
pbesret committed Nov 23, 2023
2 parents eb686c3 + a91a4f6 commit 0d5d4fc
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 28 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 0.12.1 (November 23rd, 2023)

BUG FIXES:

* Fixed a bug on newly released Virtual Machine Guest OS Customization feature.

## 0.12.0 (November 22nd, 2023)

NEW FEATURES:
Expand Down
90 changes: 90 additions & 0 deletions docs/resources/compute_virtual_machine.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,96 @@ resource "cloudtemple_compute_virtual_machine" "ubuntu-cloud-init" {
user-data = filebase64("./cloud-init/user-data.yml")
}
}
# Customize Guest OS using the customize block (deployed from an ubuntu OVF)
resource "cloudtemple_compute_virtual_machine" "bar" {
name = "pbt-customize-tf-04"
power_state = "on"
memory = 8 * 1024 * 1024 * 1024
cpu = 4
num_cores_per_socket = 1
datacenter_id = data.cloudtemple_compute_virtual_datacenter.th3s.id
host_cluster_id = data.cloudtemple_compute_host_cluster.clu001.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.sdrs001.id
datastore_id = data.cloudtemple_compute_datastore.ds001.id
content_library_id = data.cloudtemple_compute_content_library.cl001.id
content_library_item_id = data.cloudtemple_compute_content_library_item.ubuntu.id
backup_sla_policies = [
data.cloudtemple_backup_sla_policy.nobackup.id
]
os_network_adapter {
network_id = data.cloudtemple_compute_network.lan1.id
auto_connect = true
}
customize {
network_config {
hostname = "Pimp-My-VM-updated"
domain = "cloud-temple.com"
dns_server_list = [
"8.8.8.8"
]
adapters {
ip_address = "192.168.16.15"
subnet_mask = "255.255.255.0"
gateway = "192.168.16.254"
}
}
}
}
# Customize Guest OS using the customize block (Deployed from a Windows Server Clone)
resource "cloudtemple_compute_virtual_machine" "foo" {
name = "pbt-customize-tf-03"
power_state = "on"
memory = 8 * 1024 * 1024 * 1024
cpu = 4
num_cores_per_socket = 1
datacenter_id = data.cloudtemple_compute_virtual_datacenter.th3s.id
host_cluster_id = data.cloudtemple_compute_host_cluster.clu001.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.sdrs001.id
datastore_id = data.cloudtemple_compute_datastore.ds001.id
clone_virtual_machine_id = data.cloudtemple_compute_virtual_machine.windows_server_vm.id
backup_sla_policies = [
data.cloudtemple_backup_sla_policy.nobackup.id
]
os_network_adapter {
network_id = data.cloudtemple_compute_network.lan1.id
auto_connect = true
}
customize {
network_config {
hostname = "Pimp-My-VM"
domain = "cloud-temple.com"
dns_server_list = [
"8.8.8.8"
]
adapters {
ip_address = "192.168.16.12"
subnet_mask = "255.255.255.0"
gateway = "192.168.16.254"
}
}
windows_config {
auto_logon = true
auto_logon_count = 3
timezone = 105
password = "azerty"
workgroup = "cloudtemple"
}
}
}
```

<!-- schema generated by tfplugindocs -->
Expand Down
44 changes: 22 additions & 22 deletions examples/resources/cloudtemple_compute_virtual_machine/resource.tf
Original file line number Diff line number Diff line change
Expand Up @@ -173,14 +173,14 @@ resource "cloudtemple_compute_virtual_machine" "bar" {
name = "pbt-customize-tf-04"
power_state = "on"

memory = 8 * 1024 * 1024 * 1024
cpu = 4
num_cores_per_socket = 1
memory = 8 * 1024 * 1024 * 1024
cpu = 4
num_cores_per_socket = 1

datacenter_id = data.cloudtemple_compute_virtual_datacenter.th3s.id
host_cluster_id = data.cloudtemple_compute_host_cluster.clu001.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.sdrs001.id
datastore_id = data.cloudtemple_compute_datastore.ds001.id
datacenter_id = data.cloudtemple_compute_virtual_datacenter.th3s.id
host_cluster_id = data.cloudtemple_compute_host_cluster.clu001.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.sdrs001.id
datastore_id = data.cloudtemple_compute_datastore.ds001.id

content_library_id = data.cloudtemple_compute_content_library.cl001.id
content_library_item_id = data.cloudtemple_compute_content_library_item.ubuntu.id
Expand All @@ -196,8 +196,8 @@ resource "cloudtemple_compute_virtual_machine" "bar" {

customize {
network_config {
hostname = "Pimp-My-VM-updated"
domain = "cloud-temple.com"
hostname = "Pimp-My-VM-updated"
domain = "cloud-temple.com"
dns_server_list = [
"8.8.8.8"
]
Expand All @@ -215,14 +215,14 @@ resource "cloudtemple_compute_virtual_machine" "foo" {
name = "pbt-customize-tf-03"
power_state = "on"

memory = 8 * 1024 * 1024 * 1024
cpu = 4
num_cores_per_socket = 1
memory = 8 * 1024 * 1024 * 1024
cpu = 4
num_cores_per_socket = 1

datacenter_id = data.cloudtemple_compute_virtual_datacenter.th3s.id
host_cluster_id = data.cloudtemple_compute_host_cluster.clu001.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.sdrs001.id
datastore_id = data.cloudtemple_compute_datastore.ds001.id
datacenter_id = data.cloudtemple_compute_virtual_datacenter.th3s.id
host_cluster_id = data.cloudtemple_compute_host_cluster.clu001.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.sdrs001.id
datastore_id = data.cloudtemple_compute_datastore.ds001.id

clone_virtual_machine_id = data.cloudtemple_compute_virtual_machine.windows_server_vm.id

Expand All @@ -237,8 +237,8 @@ resource "cloudtemple_compute_virtual_machine" "foo" {

customize {
network_config {
hostname = "Pimp-My-VM"
domain = "cloud-temple.com"
hostname = "Pimp-My-VM"
domain = "cloud-temple.com"
dns_server_list = [
"8.8.8.8"
]
Expand All @@ -249,11 +249,11 @@ resource "cloudtemple_compute_virtual_machine" "foo" {
}
}
windows_config {
auto_logon = true
auto_logon = true
auto_logon_count = 3
timezone = 105
password = "azerty"
workgroup = "cloudtemple"
timezone = 105
password = "azerty"
workgroup = "cloudtemple"
}
}
}
2 changes: 1 addition & 1 deletion internal/provider/helper_compute_virtual_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func buildGuestOSCustomizationRequest(ctx context.Context, d *schema.ResourceDat
},
}

if d.Get("customization.0.windows_config") != nil {
if len(d.Get("customize.0.windows_config").([]interface{})) > 0 {
customizationRequest.WindowsConfig = &client.CustomGuestWindowsConfig{
AutoLogon: d.Get("customize.0.windows_config.0.auto_logon").(bool),
AutoLogonCount: d.Get("customize.0.windows_config.0.auto_logon_count").(int),
Expand Down
10 changes: 5 additions & 5 deletions internal/provider/resource_compute_virtual_machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -870,7 +870,7 @@ func computeVirtualMachineCreate(ctx context.Context, d *schema.ResourceData, me
return diag.FromErr(err)
}

if d.Get("customization") != nil {
if len(d.Get("customize").([]interface{})) > 0 {
customizationRequest := buildGuestOSCustomizationRequest(ctx, d)
activityId, err = c.Compute().VirtualMachine().CustomizeGuestOS(ctx, d.Id(), customizationRequest)
if err != nil {
Expand Down Expand Up @@ -934,7 +934,7 @@ func computeVirtualMachineCreate(ctx context.Context, d *schema.ResourceData, me
}
}

return updateVirtualMachine(ctx, d, meta, d.Get("power_state").(string) == "on")
return updateVirtualMachine(ctx, d, meta, d.Get("power_state").(string) == "on", true)
}

func computeVirtualMachineRead(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
Expand Down Expand Up @@ -1016,10 +1016,10 @@ func computeVirtualMachineRead(ctx context.Context, d *schema.ResourceData, meta
}

func computeVirtualMachineUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
return updateVirtualMachine(ctx, d, meta, d.HasChange("power_state"))
return updateVirtualMachine(ctx, d, meta, d.HasChange("power_state"), false)
}

func updateVirtualMachine(ctx context.Context, d *schema.ResourceData, meta any, updatePower bool) diag.Diagnostics {
func updateVirtualMachine(ctx context.Context, d *schema.ResourceData, meta any, updatePower bool, customizing bool) diag.Diagnostics {
c := getClient(meta)

req := &client.UpdateVirtualMachineRequest{
Expand Down Expand Up @@ -1101,7 +1101,7 @@ func updateVirtualMachine(ctx context.Context, d *schema.ResourceData, meta any,
}
}

if d.HasChange("customize") {
if d.HasChange("customize") && !customizing {
vm, err := c.Compute().VirtualMachine().Read(ctx, d.Id())
if err != nil {
return diag.Errorf("failed to read virtual machine: %s", err)
Expand Down

0 comments on commit 0d5d4fc

Please sign in to comment.