|
4 | 4 | "context"
|
5 | 5 | "encoding/json"
|
6 | 6 | "fmt"
|
| 7 | + "reflect" |
7 | 8 | "sort"
|
8 | 9 | "strings"
|
9 | 10 | "time"
|
@@ -778,6 +779,9 @@ func resourceVmRead(ctx context.Context, d *schema.ResourceData, meta interface{
|
778 | 779 | return diags
|
779 | 780 | }
|
780 | 781 |
|
| 782 | + if err := d.Set("name", v.Name); err != nil { |
| 783 | + return diag.FromErr(err) |
| 784 | + } |
781 | 785 | // set computed variables
|
782 | 786 | if err := d.Set("cluster_id", v.Cluster.ID); err != nil {
|
783 | 787 | return diag.FromErr(err)
|
@@ -1410,7 +1414,7 @@ func resourceVmUpdate(ctx context.Context, d *schema.ResourceData, meta interfac
|
1410 | 1414 | ID: &id,
|
1411 | 1415 | },
|
1412 | 1416 | Data: &models.VMStartParamsData{
|
1413 |
| - HostID: basic.HostId, |
| 1417 | + HostID: hostId, |
1414 | 1418 | },
|
1415 | 1419 | }
|
1416 | 1420 | uvp.Context = ctx
|
@@ -1565,6 +1569,10 @@ func resourceVmUpdate(ctx context.Context, d *schema.ResourceData, meta interfac
|
1565 | 1569 | }
|
1566 | 1570 | }
|
1567 | 1571 |
|
| 1572 | + if d.HasChange("cluster_id") { |
| 1573 | + return diag.Errorf("cross cluster migration is not supported yet") |
| 1574 | + } |
| 1575 | + |
1568 | 1576 | // then migrate the vm if needed
|
1569 | 1577 | if d.HasChange("host_id") {
|
1570 | 1578 | hostId := d.Get("host_id").(string)
|
@@ -1594,27 +1602,36 @@ func resourceVmUpdate(ctx context.Context, d *schema.ResourceData, meta interfac
|
1594 | 1602 | }
|
1595 | 1603 |
|
1596 | 1604 | // execute vm basic updation in the last
|
1597 |
| - _, err := utils.RetryWithExponentialBackoff(ctx, func() (interface{}, error) { |
1598 |
| - return nil, ct.GraphqlApi.Mutate(ctx, &updateVm, map[string]interface{}{ |
1599 |
| - "data": updateParams, |
1600 |
| - "effect": updateEffect, |
1601 |
| - "where": VmWhereUniqueInput{ |
1602 |
| - "id": d.Id(), |
1603 |
| - }, |
1604 |
| - }, graphql.OperationName("updateVm")) |
1605 |
| - }, utils.RetryWithExponentialBackoffOptions{}) |
1606 |
| - |
1607 |
| - if err != nil { |
1608 |
| - return diag.FromErr(err) |
| 1605 | + if !reflect.ValueOf(updateParams).IsZero() { |
| 1606 | + // skip basic params change if struct is zero |
| 1607 | + _, err := utils.RetryWithExponentialBackoff(ctx, func() (interface{}, error) { |
| 1608 | + return nil, ct.GraphqlApi.Mutate(ctx, &updateVm, map[string]interface{}{ |
| 1609 | + "data": updateParams, |
| 1610 | + "effect": UpdateVmEffect{}, |
| 1611 | + "where": VmWhereUniqueInput{ |
| 1612 | + "id": d.Id(), |
| 1613 | + }, |
| 1614 | + }, graphql.OperationName("updateVm")) |
| 1615 | + }, utils.RetryWithExponentialBackoffOptions{}) |
| 1616 | + if err != nil { |
| 1617 | + return diag.FromErr(err) |
| 1618 | + } |
| 1619 | + _, err = ct.WaitTaskForResource(ctx, d.Id(), "updateVm") |
| 1620 | + if err != nil { |
| 1621 | + return diag.FromErr(err) |
| 1622 | + } |
1609 | 1623 | }
|
1610 |
| - ct.WaitTaskForResource(ctx, d.Id(), "updateVm") |
1611 | 1624 | if runStatusChangeFirst && statusChangeFunc != nil {
|
1612 | 1625 | err := statusChangeFunc()
|
1613 | 1626 | if err != nil {
|
1614 | 1627 | return diag.FromErr(err)
|
1615 | 1628 | }
|
1616 | 1629 | }
|
1617 | 1630 | if needUpdateVmToolsAttribute {
|
| 1631 | + _, err := helper.WaitVmToolsRunning(ctx, ct, d.Id()) |
| 1632 | + if err != nil { |
| 1633 | + return diag.FromErr(err) |
| 1634 | + } |
1618 | 1635 | _, err = utils.RetryWithExponentialBackoff(ctx, func() (interface{}, error) {
|
1619 | 1636 | return nil, ct.GraphqlApi.Mutate(ctx, &updateVm, map[string]interface{}{
|
1620 | 1637 | "data": updateVmToolsAttributeParams,
|
|
0 commit comments