vmware / terraform-provider-vra

Terraform Provider for VMware Aria Automation
https://registry.terraform.io/providers/vmware/vra/
Mozilla Public License 2.0
103 stars 90 forks source link

Objects have changed outside of Terraform after day 2 operation or vSphere tag #467

Open jskirde opened 1 year ago

jskirde commented 1 year ago

vRA Version

8.7.0.21169 (19508505)

Terraform Version

v1.3.2

vRA Terraform Provider Version

0.5.2

Affected Resource(s)

vra_deployment

Terraform Configuration Files

resource "vra_deployment" "vm" {
  name        = format("%s_%s_%s", var.application, var.buildEnvironment, uuid())
  description = var.description
  lifecycle {
    ignore_changes = [
      name
    ]
  }

  catalog_item_id = data.vra_catalog_item.catalog_item.id
  project_id = data.vra_project.project.id

  inputs = {
    application= var.application
    site                   = var.site
    osVersion              = var.osVersion
    applicationEnvironment = var.applicationEnvironment
    applicationTier        = var.applicationTier
    disks                  = jsonencode(var.disks)
    cpuCount               = 8
    totalMemoryMB          = 8192
    resourcePool           = "default"
    component              = ""
  }

  timeouts {
    create = "200m"
    delete = "60m"
    update = "30m"
  }
}

tfvar file is initially set with :

disks                  = []

but then after the build, update it:

disks = [{
  label      = "test"
  mountPoint = "/var"
  size       = 10
}]

Expected Behavior

A disk should have been added (it was) and the state should have been updated with the last_request return (resource_ids and status) but it wasn't. When no changes are made to the input, and the resources haven't drifted, no state drift or resource changes should be required.

Actual Behavior

Terraform advised "Note: Objects have changed outside of Terraform" and indicates the vra_deployment resource has changed in both the last_request and resources attributes and shows a diff that is not representative of the actions that will be takes (it shows a complete removal of the virtual machine

# vra_deployment.vm has changed
  ~ resource "vra_deployment" "vm" {
        id                        = "6f1a80b9-17ee-4303-a056-769959ca8b0e"
      ~ last_request              = [
          ~ {
                id              = "4a72ccdc-b508-4ef0-afca-c09500e10774"
                name            = "Update"
              ~ resource_ids    = [
                  + "04d380e9-5590-4e3a-ae47-d0df829bd71a",
                  - "3caf47fd-d6a6-46ba-a18b-8242a528040f",
                    # (1 unchanged element hidden)
                ]
                # (17 unchanged elements hidden)
            },
        ]
        name                      = "myapp_dev_30ffdeb6-c994-a823-b0a5-a24086dc95ab"
      ~ resources                 = [
          + {
              + created_at      = "2022-10-10T23:01:51.205Z"
              + depends_on      = [
                  + "Cloud_vSphere_Disk[0]",
                  + "vSphere_Network",
                ]
              + description     = ""
              + expense         = []
              + id              = "412c79c3-13a0-49ea-927c-d3aef162e260"
              + name            = "vSphere_Machine[0]"
              + properties_json = jsonencode(
                    {
                      + _clusterAllocationSize            = "1"
                      + account                           = "mycloudzone"
                      + accounts                          = [
                          + "mycloudzone",
                        ]
                      + address                           = "192.168.0.114"
                      + application                       = "myapplication"
                      + applicationEnvironment            = "dev"
                      + applicationTier                   = "web"
                      + attachedDisks                     = [
                          + {
                              + source = "/resources/disks/04d380e9-5590-4e3a-ae47-d0df829bd71a"
                            },
                        ]
                      + catalogItemName                   = "linux"
                      + cloneFromImage                    = "linux-image"
                      + componentType                     = "Cloud.vSphere.Machine"
                      + computeHostRef                    = "ResourcePool:resgroup-1234"
                      + computeHostType                   = "ResourcePool"
                      + constraints                       = [
                          + {},
                          + {
                              + tag = "application:general"
                            },
                          + {},
                          + {},
                        ]
                      + coreCount                         = "8"
                      + count                             = "1"
                      + countIndex                        = "0"
                      + cpuCount                          = 8
                      + customizationSpec                 = "linux"
                      + datacenter                        = "Datacenter:datacenter-1"
                      + datastoreName                     = "DATASTORE01"
                      + deploymentId                      = "6f1a80b9-17ee-4303-a056-769959ca8b0e"
                      + disks                             = jsonencode([])
                      + endpointId                        = "bd809ecd-9099-49db-999c-475b584efc71"
                      + endpointType                      = "vsphere"
                      + environmentName                   = "environment"
                      + folderName                        = "folder"
                      + hasSnapshots                      = "false"
                      + hostname                          = "hostname123"
                      + id                                = "/resources/compute/412c79c3-13a0-49ea-927c-d3aef162e260"
                      + image                             = "linux-image"
                      + instanceUUID                      = "501b5d3f-fbb4-519c-ab89-7361101fd9e6"
                      + memoryGB                          = "8"
                      + name                              = "vSphere_Machine"
                      + networks                          = [
                          + {
                              + "Infoblox.IPAM.Network.dnsView" = "default"
                              + "Infoblox.IPAM.RangeId"         = "network/ZG5zLm5ldHdvcmskMTAuMTAwLjE2LjAvMjIvMA:192.168.0.0/24/default"
                              + address                         = "192.168.0.114"
                              + assignment                      = "static"
                              + deviceIndex                     = 0
                              + dns                             = [
                                  + "1.1.1.1",
                                  + "1.1.0.0",
                                ]
                              + external_id                     = "ecdc5476-7749-4861-8680-d1e48a57641a"
                              + id                              = "/resources/network-interfaces/629327ad-73f4-40e8-817c-1427d2e03caf"
                              + ipv6Addresses                   = []
                              + mac_address                     = "00:00:00:00:00:f0"
                              + name                            = "portgroup1"
                              + netmask                         = "255.255.255.0"
                              + network                         = "/provisioning/resources/compute-networks/3caf47fd-d6a6-46ba-a18b-8242a528040f"
                              + resourceName                    = "portgroup1"
                            },
                        ]
                      + nsxSecurityGroups                 = jsonencode(
                            [
                              + "sg1",
                            ]
                        )
                      + powerState                        = "ON"
                      + primaryMAC                        = "00:00:00:00:00:f0"
                      + project                           = "1f1d9944-c036-401e-8407-c1aa9d8de8b9"
                      + providerId                        = "101b5d3f-fbb4-519c-ab89-7361101fd9e6"
                      + region                            = "REGION01"
                      + resourceDescLink                  = "/resources/compute-descriptions/b8739ffa-a3be-4bcd-a2dd-2be3a3e2f798"
                      + resourceId                        = "412c79c3-13a0-49ea-927c-d3aef162e260"
                      + resourceLink                      = "/resources/compute/412c79c3-13a0-49ea-927c-d3aef162e260"
                      + resourceName                      = "hostname123"
                      + resourcePool                      = "/resources/pools/8ea476dba090ae75-7f703c5265a63d87"
                      + site                              = "site1"
                      + softwareName                      = "Linux"
                      + storage                           = {
                          + disks = [
                              + {
                                  + capacityGb           = 10
                                  + controllerKey        = "1000"
                                  + controllerUnitNumber = "1"
                                  + count                = "1"
                                  + countIndex           = "0"
                                  + encrypted            = false
                                  + endpointType         = "vsphere"
                                  + existingResource     = "false"
                                  + label                = "test"
                                  + mountPoint           = "/var"
                                  + name                 = "admin-748"
                                  + persistent           = false
                                  + provisioningType     = "thin"
                                  + resourceLink         = "/resources/disks/04d380e9-5590-4e3a-ae47-d0df829bd71a"
                                  + type                 = "HDD"
                                  + vcUuid               = "6c6d6246-0929-4229-805a-083012704055"
                                },
                              + {
                                  + bootOrder            = 1
                                  + capacityGb           = 40
                                  + controllerKey        = "1000"
                                  + controllerUnitNumber = "0"
                                  + diskPlacementRef     = "Datastore:datastore-1"
                                  + encrypted            = false
                                  + endpointType         = "vsphere"
                                  + existingResource     = "false"
                                  + independent          = "false"
                                  + limitIops            = "-1"
                                  + name                 = "hostname123-boot-disk"
                                  + persistent           = false
                                  + provisioningType     = "thin"
                                  + resourceLink         = "/resources/disks/87299d18-e789-4b32-b9b7-907c09d1d7d6"
                                  + shares               = "1000"
                                  + sharesLevel          = "normal"
                                  + type                 = "HDD"
                                  + vcUuid               = "6c6d6246-0929-4229-805a-083012704055"
                                  + vm                   = "VirtualMachine:vm-16390"
                                },
                            ]
                        }
                      + tags                              = [
                          + {
                              + key   = "application"
                              + value = "myapp"
                            },
                        ]
                      + totalMemoryMB                     = 8192
                      + vcUuid                            = "6c6d6246-0929-4229-805a-083012704055"
                      + vmFolderPath                      = "[DATASTORE01] 88a44463-e8d9-2eb7-d5f1-e4434bd9e0e0"
                      + vraEnvironment                    = "edev"
                      + zone                              = "mycloudzone / Tin"
                      + zone_overlapping_migrated         = "true"
                    }
                )
              + state           = "OK"
              + sync_status     = ""
              + type            = "Cloud.vSphere.Machine"
            },
          - {
              - created_at      = "2022-10-10T23:01:51.205Z"
              - depends_on      = [
                  - "vSphere_Network",
                ]
              - description     = ""
              - expense         = []
              - id              = "412c79c3-13a0-49ea-927c-d3aef162e260"
              - name            = "vSphere_Machine[0]"
              - properties_json = jsonencode(
                    {
                      {
                      - _clusterAllocationSize            = "1"
                      - account                           = "mycloudzone"
                      - accounts                          = [
                          - "mycloudzone",
                        ]
                      - address                           = "192.168.0.114"
                      - application                       = "myapplication"
                      - applicationEnvironment            = "dev"
                      - applicationTier                   = "web"
                      - attachedDisks                     = [
                          - {
                              - source = "/resources/disks/04d380e9-5590-4e3a-ae47-d0df829bd71a"
                            },
                        ]
                      - catalogItemName                   = "linux"
                      - cloneFromImage                    = "linux-image"
                      - componentType                     = "Cloud.vSphere.Machine"
                      - computeHostRef                    = "ResourcePool:resgroup-1234"
                      - computeHostType                   = "ResourcePool"
                      - constraints                       = [
                          - {},
                          - {
                              - tag = "application:general"
                            },
                          - {},
                          - {},
                        ]
                      - coreCount                         = "8"
                      - count                             = "1"
                      - countIndex                        = "0"
                      - cpuCount                          = 8
                      - customizationSpec                 = "linux"
                      - datacenter                        = "Datacenter:datacenter-1"
                      - datastoreName                     = "DATASTORE01"
                      - deploymentId                      = "6f1a80b9-17ee-4303-a056-769959ca8b0e"
                      - disks                             = jsonencode([])
                      - endpointId                        = "bd809ecd-9099-49db-999c-475b584efc71"
                      - endpointType                      = "vsphere"
                      - environmentName                   = "environment"
                      - folderName                        = "folder"
                      - hasSnapshots                      = "false"
                      - hostname                          = "hostname123"
                      - id                                = "/resources/compute/412c79c3-13a0-49ea-927c-d3aef162e260"
                      - image                             = "linux-image"
                      - instanceUUID                      = "501b5d3f-fbb4-519c-ab89-7361101fd9e6"
                      - memoryGB                          = "8"
                      - name                              = "vSphere_Machine"
                      - networks                          = [
                          - {
                              - "Infoblox.IPAM.Network.dnsView" = "default"
                              - "Infoblox.IPAM.RangeId"         = "network/ZG5zLm5ldHdvcmskMTAuMTAwLjE2LjAvMjIvMA:192.168.0.0/24/default"
                              - address                         = "192.168.0.114"
                              - assignment                      = "static"
                              - deviceIndex                     = 0
                              - dns                             = [
                                  - "1.1.1.1",
                                  - "1.1.0.0",
                                ]
                              - external_id                     = "ecdc5476-7749-4861-8680-d1e48a57641a"
                              - id                              = "/resources/network-interfaces/629327ad-73f4-40e8-817c-1427d2e03caf"
                              - ipv6Addresses                   = []
                              - mac_address                     = "00:00:00:00:00:f0"
                              - name                            = "portgroup1"
                              - netmask                         = "255.255.255.0"
                              - network                         = "/provisioning/resources/compute-networks/3caf47fd-d6a6-46ba-a18b-8242a528040f"
                              - resourceName                    = "portgroup1"
                            },
                        ]
                      - nsxSecurityGroups                 = jsonencode(
                            [
                              - "sg1",
                            ]
                        )
                      - powerState                        = "ON"
                      - primaryMAC                        = "00:00:00:00:00:f0"
                      - project                           = "1f1d9944-c036-401e-8407-c1aa9d8de8b9"
                      - providerId                        = "101b5d3f-fbb4-519c-ab89-7361101fd9e6"
                      - region                            = "REGION01"
                      - resourceDescLink                  = "/resources/compute-descriptions/b8739ffa-a3be-4bcd-a2dd-2be3a3e2f798"
                      - resourceId                        = "412c79c3-13a0-49ea-927c-d3aef162e260"
                      - resourceLink                      = "/resources/compute/412c79c3-13a0-49ea-927c-d3aef162e260"
                      - resourceName                      = "hostname123"
                      - resourcePool                      = "/resources/pools/8ea476dba090ae75-7f703c5265a63d87"
                      - site                              = "site1"
                      - softwareName                      = "Linux"
                      - storage                           = {
                          - disks = [
                              - {
                                  - bootOrder            = 1
                                  - capacityGb           = 40
                                  - controllerKey        = "1000"
                                  - controllerUnitNumber = "0"
                                  - diskPlacementRef     = "Datastore:datastore-23"
                                  - encrypted            = false
                                  - endpointType         = "vsphere"
                                  - existingResource     = "false"
                                  - independent          = "false"
                                  - name                 = "dlw221010230101-boot-disk"
                                  - persistent           = false
                                  - provisioningType     = "thin"
                                  - resourceLink         = "/resources/disks/87299d18-e789-4b32-b9b7-907c09d1d7d6"
                                  - type                 = "HDD"
                                  - vcUuid               = "6c6d6246-0929-4229-805a-083012704055"
                                  - vm                   = "VirtualMachine:vm-16390"
                                },
                            ]
                        }
                      - tags                              = []
                      - totalMemoryMB                     = 8192
                      - vcUuid                            = "6c6d6246-0929-4229-805a-083012704055"
                      - vmFolderPath                      = "[RCC-ISD-EDEV01-DATASTORE01] 88a44463-e8d9-2eb7-d5f1-e4434bd9e0e0"
                      - vraEnvironment                    = "edev"
                      - zone                              = "RCC-ISD-EDEV01 / Tin"
                      - zoneOverride                      = ""
                      - zone_overlapping_migrated         = "true"
                    }
                )
              - state           = "OK"
              - sync_status     = ""
              - type            = "Cloud.vSphere.Machine"
            },
          + {
              + created_at      = "2022-10-10T23:13:16.356Z"
              + depends_on      = []
              + description     = ""
              + expense         = []
              + id              = "04d380e9-5590-4e3a-ae47-d0df829bd71a"
              + name            = "Cloud_vSphere_Disk[0]"
              + properties_json = jsonencode(
                    {
                      + account          = "mycloudzone"
                      + accounts         = [
                          + "mycloudzone",
                        ]
                      + capacityGb       = 10
                      + componentType    = "Cloud.vSphere.Disk"
                      + constraints      = [
                          + {
                              + tag = "storageTier:ultra"
                            },
                          + {},
                          + {
                              + tag = "application:general"
                            },
                          + {},
                          + {},
                        ]
                      + count            = "1"
                      + countIndex       = "0"
                      + encrypted        = false
                      + endpointId       = "bd809ecd-9099-49db-999c-475b584efc71"
                      + endpointType     = "vsphere"
                      + id               = "/resources/disks/04d380e9-5590-4e3a-ae47-d0df829bd71a"
                      + label            = "test"
                      + mountPoint       = "/var"
                      + name             = "test"
                      + persistent       = false
                      + providerId       = "8896-2001"
                      + provisioningType = "thin"
                      + region           = "Datacenter:datacenter-1"
                      + resourceDescLink = "/resources/disks/8e0d9843-8034-4674-9b92-df2b76204503"
                      + resourceId       = "04d380e9-5590-4e3a-ae47-d0df829bd71a"
                      + resourceLink     = "/resources/disks/04d380e9-5590-4e3a-ae47-d0df829bd71a"
                      + resourceName     = "admin-748"
                      + status           = "ATTACHED"
                      + tags             = []
                      + type             = "HDD"
                      + vcUuid           = "6c6d6246-0929-4229-805a-083012704055"
                    }
                )
              + state           = "OK"
              + sync_status     = "SUCCESS"
              + type            = "Cloud.vSphere.Disk"
            },
            # (1 unchanged element hidden)
        ]
        # (14 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may include actions to undo or respond to these changes.

Steps to Reproduce

  1. Run initially with disks = []
  2. Add a disk by running with
    disks = [{
    label      = "test"
    mountPoint = "/var"
    size       = 10
    }]
  3. Run another plan

Debug Output

N/A

Panic Output

N/A

Important Factoids

N/A

References

N/A

Community Note

ankujuniyal commented 9 months ago

using terraform untaint vra_deployment.vm could help you to keep latest state. even after untaint i tried to add disk its not working.

mf-sky commented 2 weeks ago

Still happens with

vRA Version 8.17.0.35214 (23831516)

Terraform Version v1.9.5

vRA Terraform Provider Version 0.8.6