outscale / terraform-provider-outscale

Mozilla Public License 2.0
28 stars 30 forks source link

ENI is "forgotten" #448

Closed ChristopheHubert72 closed 3 months ago

ChristopheHubert72 commented 4 months ago

Terraform v1.7.3 on linux_amd64

When creating an instance with a nic, the associated ENI is "forgotten" : Recreating the instance lead to a ResourceConflict since it do not reuse the ENI and tries to recreate one Deleting a SG leads to an issue also since it cannot remove it until the ENI is deleted.

Terraform Configuration Files

variable region { default = "us-east-2" } variable az { default = "a" }

variable keypair_name { default = "Bug" } variable vm_type { default = "tinav5.c4r16p1" }

variable image_id_r9 { default = "ami-57042109" }

variable image_id_r8 { default = "ami-fcebd643" }

variable security_group_name { default = "Bug" }

resource "outscale_keypair" "KeyPair" { keypair_name = "Bug" }

resource "outscale_net" "BugVPC" { ip_range = "10.0.0.0/16" tags { key = "name" value = "Bug" } }

resource "outscale_subnet" "BugVPCSubnetPriv" { subregion_name = "${var.region}${var.az}" ip_range = "10.0.0.0/24" net_id = outscale_net.BugVPC.net_id }

resource "outscale_security_group" "SecurityGroup" { description = "SecurityGroup" security_group_name = "BugVPC" net_id = outscale_net.BugVPC.net_id }

resource "outscale_security_group_rule" "security_group_rule1" { flow = "Inbound" security_group_id = outscale_security_group.SecurityGroup.id

from_port_range = "22" to_port_range = "22" ip_protocol = "tcp" ip_range = "0.0.0.0/0" }

resource "outscale_vm" "BugVM" { vm_type = var.vm_type image_id = var.image_id_r9 keypair_name = var.keypair_name nics { private_ips { private_ip="10.0.0.254" is_primary=true } subnet_id = outscale_subnet.BugVPCSubnetPriv.subnet_id device_number = 0 security_group_ids = [outscale_security_group.SecurityGroup.security_group_id] } tags { key = "name" value = "Bug-VM" } }

Debug Output

When recreating the instance (terraform apply after updating the omi):

2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: POST /api/v1/CreateVms HTTP/1.1 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Host: api.us-east-2.outscale.com 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: User-Agent: terraform-provider-outscale/0.12.0 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Length: 378 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Accept: application/json [deleted] 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Type: application/json 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: X-Amz-Date: 20240520T142705Z 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Accept-Encoding: gzip 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "BootOnCreation": true, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "DeletionProtection": false, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "ImageId": "ami-57042109", 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "KeypairName": "Bug", 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "MaxVmsCount": 1, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "MinVmsCount": 1, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "NestedVirtualization": false, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Nics": [ 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "DeleteOnVmDeletion": false, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Description": "", 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "DeviceNumber": 0, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "PrivateIps": [ 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "IsPrimary": true, 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "PrivateIp": "10.0.0.254" 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ], 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "SecurityGroupIds": [ 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "sg-6a1355c6" 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ], 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "SubnetId": "subnet-15df6b3e" 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ], 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "VmType": "tinav5.c4r16p1" 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0 2024-05-20T14:27:05.716Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ----------------------------------------------------- 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: 2024/05/20 14:27:05 [DEBUG] Outscale API Response Details: 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ---[ RESPONSE ]-------------------------------------- 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: HTTP/1.1 409 Conflict 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Length: 138 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Access-Control-Allow-Origin: * 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Connection: keep-alive 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Type: application/json 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Date: Mon, 20 May 2024 14:27:05 GMT 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Server: nginx 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:27:05.932Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Errors": [ 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Type": "ResourceConflict", 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Details": "", 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Code": "9086" 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ], 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "ResponseContext": { 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "RequestId": "95a84135-78e9-4919-abf5-890a569f18dd" 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:27:05.933Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: }

When deleting the Net (terraform destroy) 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: POST /api/v1/DeleteSubnet HTTP/1.1 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Host: api.us-east-2.outscale.com 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: User-Agent: terraform-provider-outscale/0.12.0 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Length: 31 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Accept: application/json [deleted] 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Type: application/json 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: X-Amz-Date: 20240520T142804Z 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Accept-Encoding: gzip 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "SubnetId": "subnet-15df6b3e" 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0 2024-05-20T14:28:04.541Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ----------------------------------------------------- 2024-05-20T14:28:04.736Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: 2024/05/20 14:28:04 [DEBUG] Outscale API Response Details: 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ---[ RESPONSE ]-------------------------------------- 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: HTTP/1.1 409 Conflict 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Length: 138 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Access-Control-Allow-Origin: * 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Connection: keep-alive 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Content-Type: application/json 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Date: Mon, 20 May 2024 14:28:04 GMT 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: Server: nginx 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Errors": [ 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: { 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Type": "ResourceConflict", 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Details": "", 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "Code": "9095" 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: ], 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "ResponseContext": { 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: "RequestId": "781e2e0e-9328-44a7-aec0-33864a2a5e68" 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: } 2024-05-20T14:28:04.737Z [DEBUG] provider.terraform-provider-outscale_v0.12.0: }

Expected Behavior

When recreating the VM, the ENI should be destroyed/recreated When deleting the NET/SG holding the ENI, the ENI should be destroyed first

Actual Behavior

When recreating the VM, the ENI is left aside. The new instance cannot be created since there's a conflict When deleting the NET/SG, it fails also with a conflict

outscale-toa commented 4 months ago

Hello @ChristopheHubert72

Thanks for reaching us,

If you want to use an existing ENI when recreating VM, you need to set nic_id in nics block inside VM like:

…...

#adding a nics ressouce
resource "outscale_nic" "nicBug01" {
  private_ips {
    private_ip = "10.0.0.254"
    is_primary = true
  }
  subnet_id = outscale_subnet.BugVPCSubnetPriv.subnet_id                                                                                                                                                                                                                                                                                           
  security_group_ids = [outscale_security_group.SecurityGroup.security_group_id]
}

resource "outscale_security_group_rule" "security_group_rule1" {
  flow              = "Inbound"
  security_group_id = outscale_security_group.SecurityGroup.id
  from_port_range = "22"
  to_port_range   = "22"
  ip_protocol     = "tcp"
  ip_range        = "0.0.0.0/0"
}
resource "outscale_vm" "BugVM" {
  vm_type      = var.vm_type
  image_id     = var.image_id_r9                                                                                                                                                                                                                                                            
  keypair_name = var.keypair_name
# here VM will always get the nic_id when recreating 
 nics {
    nic_id        = outscale_nic.nicBug01.nic_id
    device_number = "0"
  }                                                                                                                                                                                                                                              
  tags {
    key   = "name"
    value = "Bug-VM"
  }
}
…...

About When recreating the VM, the ENI should be destroyed/recreated, you can use delete_on_vm_deletion parameter in nic block :

...
resource "outscale_vm" "BugVM" {
  vm_type      = var.vm_type
  image_id     = var.image_id_r9                                                                                                                                                                                                                                                            
  keypair_name = var.keypair_name

 nics {
  delete_on_vm_deletion = true   ## here ##                                                                                                                                                                                                                                              
  private_ips {
    private_ip = "10.0.0.254"
    is_primary = true
  }
  subnet_id = outscale_subnet.BugVPCSubnetPriv.subnet_id
  device_number      = 0
  security_group_ids = [outscale_security_group.SecurityGroup.security_group_id]
  }                                                                                                                                                                                                                                              
  tags {
    key   = "name"
    value = "Bug-VM"
  }
}
...

Best regards,