outscale / terraform-provider-outscale

Mozilla Public License 2.0
28 stars 32 forks source link

Conflict Error (409) When Creating outscale_nat_service Resource #453

Open babidi34 opened 1 month ago

babidi34 commented 1 month ago

Hello,

I'm encountering a conflict error (409) when trying to create an outscale_nat_service resource in my Terraform configuration. This issue was not present earlier, and I was able to create the resource without any issues. However, now the same configuration results in a 409 Conflict error.

Steps Taken

I executed terraform destroy to remove all resources. I verified that there are no existing NAT Services present on the Outscale side. I attempted to re-run terraform apply with the same configuration.

Terraform Version

Terraform v1.8.4
on linux_amd64

Terraform Configuration Files


resource "outscale_public_ip" "nat_service" {
  tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
  }
}

resource "outscale_nat_service" "nat_service" {
    subnet_id    = outscale_subnet.private.subnet_id
    public_ip_id = outscale_public_ip.nat_service.public_ip_id
    tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
    }
    depends_on = [outscale_public_ip.nat_service]
}

Crash Output

╷ │ Error: Error creating Nat Service: 409 Conflict │ │ with outscale_nat_service.nat_service, │ on main.tf line 80, in resource "outscale_nat_service" "nat_service": │ 80: resource "outscale_nat_service" "nat_service" { │ ╵ 2024-06-05T20:14:20.280+0200 [DEBUG] provider.stdio: received EOF, stopping recv loop: err="rpc error: code = Unavailable desc = error reading from server: EOF" 2024-06-05T20:14:20.284+0200 [DEBUG] provider: plugin process exited: path=.terraform/providers/registry.terraform.io/outscale/outscale/0.12.0/linux_amd64/terraform-provider-outscale_v0.12.0 pid=185141 2024-06-05T20:14:20.284+0200 [DEBUG] provider: plugin exited

Steps to Reproduce

terraform apply

outscale-toa commented 4 weeks ago

Hello @babidi34,

You must create the required resources before creating outscale_nat_service

Required resources

resource "outscale_net" "net01" {
    ip_range = "10.0.0.0/16"
}

resource "outscale_subnet" "private" {
    net_id   = outscale_net.net01.net_id
    ip_range = "10.0.0.0/18"
}

resource "outscale_route_table" "route_table01" {
    net_id = outscale_net.net01.net_id
}

resource "outscale_route_table_link" "outscale_route_table_link01" {
    subnet_id      = outscale_subnet.private.subnet_id
    route_table_id = outscale_route_table.route_table01.route_table_id
}

resource "outscale_internet_service" "internet_service01" {
}

resource "outscale_internet_service_link" "internet_service_link01" {
    net_id              = outscale_net.net01.net_id
    internet_service_id = outscale_internet_service.internet_service01.internet_service_id
}

resource "outscale_route" "route01" {
    destination_ip_range = "0.0.0.0/0"
    gateway_id           = outscale_internet_service.internet_service01.internet_service_id
    route_table_id       = outscale_route_table.route_table01.route_table_id
    depends_on           = [outscale_internet_service_link.internet_service_link01]
}

resource "outscale_public_ip" "nat_service" {
  tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
  }
}

outscale_nat_service

resource "outscale_nat_service" "nat_service" {
    subnet_id    = outscale_subnet.private.subnet_id
    public_ip_id = outscale_public_ip.nat_service.public_ip_id
    tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
    }
    depends_on = [outscale_public_ip.nat_service, outscale_route.route01]
}

Best Regards,

babidi34 commented 4 weeks ago

My resource route is after nat service because I use the nat_service_id in my route

resource "outscale_route_table" "route_table" {
  net_id = outscale_net.vpc.net_id
  tags {
      key   = "name"
      value = "${terraform.workspace}"
  }
}

resource "outscale_route_table_link" "route_table_link" {
  route_table_id = outscale_route_table.route_table.route_table_id
  subnet_id      = outscale_subnet.private.subnet_id
}

resource "outscale_public_ip" "nat_service" {
  tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
  }
}

resource "outscale_nat_service" "nat_service" {
    subnet_id    = outscale_subnet.private.subnet_id
    public_ip_id = outscale_public_ip.nat_service.public_ip_id
    tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
    }
    depends_on = [outscale_public_ip.nat_service]
}

resource "outscale_route" "route_nat" {
  nat_service_id       = outscale_nat_service.nat_service.nat_service_id
  destination_ip_range = "0.0.0.0/0"
  route_table_id       = outscale_route_table.route_table.route_table_id
  depends_on = [outscale_nat_service.nat_service, outscale_route_table.route_table]
}
babidi34 commented 4 weeks ago

I also have the error via the API command :

osc-cli api CreateNatService --profile "default" \
    --SubnetId "subnet-***" \
    --PublicIpId "eipalloc-***"

osc_sdk.sdk.OscApiException: Error --> status = 409, code = 9045, Reason = ResourceConflict, request_id = 22466059-54ad-491e-b414-25da78f8bd94

I checked, I only have one NAT and it it's on another NET

outscale-toa commented 3 weeks ago

You can try this:

....
resource "outscale_internet_service" "internet_service01" {
}

resource "outscale_internet_service_link" "internet_service_link01" {
    net_id              = outscale_net.vpc.net_id
    internet_service_id = outscale_internet_service.internet_service01.internet_service_id
}

resource "outscale_route" "route_nat" {
  gateway_id           = outscale_internet_service.internet_service01.internet_service_id
  destination_ip_range = "0.0.0.0/0"
  route_table_id       = outscale_route_table.route_table.route_table_id
  depends_on           = [outscale_internet_service_link.internet_service_link01]
}
resource "outscale_public_ip" "nat_service" {
  tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
  }
}
resource "outscale_nat_service" "nat_service" {
    subnet_id    = outscale_subnet.private.subnet_id
    public_ip_id = outscale_public_ip.nat_service.public_ip_id
    tags {
      key   = "name"
      value = "nat-${terraform.workspace}"
    }
    depends_on = [outscale_public_ip.nat_service, outscale_route.route01]
}

And after, you can update route with nat_service

resource "outscale_route" "route_nat" {
  nat_service_id       = outscale_nat_service.nat_service.nat_service_id
  destination_ip_range = "0.0.0.0/0"
  route_table_id       = outscale_route_table.route_table.route_table_id
  depends_on = [outscale_nat_service.nat_service, outscale_route_table.route_table]
}

But I recommend that you contact outscale support.. You have the same problem with osc-cli, which means it's not a terrafrom-plugin issue.

Best Regards,