Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
3b7b3fd
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 8, 2026
70bea91
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 8, 2026
5a9dd47
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 9, 2026
ecf2ffc
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 9, 2026
0823e02
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 9, 2026
ee1c46b
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 10, 2026
32de388
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 10, 2026
459fcaa
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 10, 2026
5f1f0a1
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 10, 2026
3f3c3c6
TPT-4295: Update linode_networking_ip resource β€” reserved conversion …
mgwoj Apr 10, 2026
424c68d
Update linode/networkingip/framework_resource.go
mgwoj Apr 17, 2026
c812f2b
Merge branch 'proj/reserved-ips' into feature/TPT-4295-terraform-upda…
mgwoj May 7, 2026
d9a0592
Merge branch 'proj/reserved-ips' into feature/TPT-4295-terraform-upda…
mgwoj May 8, 2026
98c859f
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 8, 2026
ec190c0
Merge branch 'proj/reserved-ips' into feature/TPT-4295-terraform-upda…
mgwoj May 11, 2026
a65d8a2
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 12, 2026
ce0caed
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 12, 2026
13ae1bc
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 12, 2026
ed4ca04
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 12, 2026
6a55bc3
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 12, 2026
0d7ca91
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 12, 2026
d198e50
``
mgwoj May 12, 2026
9f8461c
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 12, 2026
1d5f9bf
Merge branch 'proj/reserved-ips' into feature/TPT-4295-terraform-upda…
mgwoj May 12, 2026
b881e43
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 13, 2026
9af642f
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 13, 2026
1a666db
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 14, 2026
ddc61df
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 14, 2026
3761662
TPT-4295: terraform: Update linode_networking_ip resource β€” reserved …
mgwoj May 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 82 additions & 1 deletion docs/data-sources/instance_networking.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: |-
# Data Source: linode\_instance\_networking

Provides details about the networking configuration of an Instance.
For more information, see the [Linode APIv4 docs](https://techdocs.akamai.com/linode-api/reference/get-linode-config-interfaces).
For more information, see the [Linode APIv4 docs](https://techdocs.akamai.com/linode-api/reference/get-linode-ips).

## Example Usage

Expand Down Expand Up @@ -63,8 +63,16 @@ A list of private IP Address objects belonging to this Linode.

* `address` - The private IPv4 address.

* `assigned_entity` - The entity this IP address has been assigned to. This is `null` if the address is not assigned to an entity.
* `id` - The ID of the entity.
* `label` - The label of the entity.
* `type` - The type of the entity.
* `url` - The URL of the entity.

* `gateway` - The default gateway for this address.

* `interface_id` - The Linode interface ID that this IP address is assigned to.

* `linode_id` - The ID of the Linode this address currently belongs to.

* `prefix` - The number of bits set in the subnet mask.
Expand All @@ -75,10 +83,19 @@ A list of private IP Address objects belonging to this Linode.

* `region` - (Filterable) The Region this address resides in.

* `reserved` - Whether this IP address is a reserved IP.

* `subnet_mask` - The mask that separates host bits from network bits for this address.

* `tags` - A set of tags associated with this IP address.

* `type` - The type of address this is.

* `vpc_nat_1_1` - IPv4 address configured as a 1:1 NAT for this Interface.
* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.
* `subnet_id` - The `id` of the VPC Subnet for this Interface.
* `vpc_id` - The `id` of the VPC configured for this Interface.

### Public

A list of public IP Address objects belonging to this Linode.
Expand All @@ -99,10 +116,20 @@ A list of public IP Address objects belonging to this Linode.

* `region` - (Filterable) The Region this IP address resides in.

* `reserved` - Whether this IP address is a reserved IP.

* `subnet_mask` - The mask that separates host bits from network bits for this address.

* `tags` - A set of tags associated with this IP address.

@mawilk90 mawilk90 May 5, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I know, the tags are not supported currently for /ips endpoints (here). Moreover, the API returns also assigned_entity (not mentioned in the API spec for /ips endpoints at all...) so should we cover it as well?


* `type` - The type of address this is.

* `assigned_entity` - The entity this IP address has been assigned to. This is `null` if the address is not assigned to an entity.
* `id` - The ID of the entity.
* `label` - The label of the entity.
* `type` - The type of the entity.
* `url` - The URL of the entity.

* `vpc_nat_1_1` - IPv4 address configured as a 1:1 NAT for this Interface.
* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.
* `subnet_id` - The `id` of the VPC Subnet for this Interface.
Expand All @@ -114,6 +141,12 @@ A list of reserved IP Address objects belonging to this Linode.

* `address` - The IP address.

* `assigned_entity` - The entity this IP address has been assigned to. This is `null` if the address is not assigned to an entity.
* `id` - The ID of the entity.
* `label` - The label of the entity.
* `type` - The type of the entity.
* `url` - The URL of the entity.

* `gateway` - (Nullable) The default gateway for this address.

* `interface_id` - The Linode interface ID that this IP address is assigned to.
Expand All @@ -128,8 +161,12 @@ A list of reserved IP Address objects belonging to this Linode.

* `region` - (Filterable) The Region this IP address resides in.

* `reserved` - Whether this IP address is a reserved IP.

* `subnet_mask` - The mask that separates host bits from network bits for this address.

* `tags` - A set of tags associated with this IP address.

* `type` - The type of address this is.

* `vpc_nat_1_1` - IPv4 address configured as a 1:1 NAT for this Interface.
Expand All @@ -143,6 +180,12 @@ A list of shared IP Address objects assigned to this Linode.

* `address` - The IP address.

* `assigned_entity` - The entity this IP address has been assigned to. This is `null` if the address is not assigned to an entity.
* `id` - The ID of the entity.
* `label` - The label of the entity.
* `type` - The type of the entity.
* `url` - The URL of the entity.

* `gateway` - (Nullable) The default gateway for this address.

* `interface_id` - The Linode interface ID that this IP address is assigned to.
Expand All @@ -157,8 +200,12 @@ A list of shared IP Address objects assigned to this Linode.

* `region` - (Filterable) The Region this IP address resides in.

* `reserved` - Whether this IP address is a reserved IP.

* `subnet_mask` - The mask that separates host bits from network bits for this address.

* `tags` - A set of tags associated with this IP address.

* `type` - The type of address this is.

* `vpc_nat_1_1` - IPv4 address configured as a 1:1 NAT for this Interface.
Expand Down Expand Up @@ -221,8 +268,16 @@ A link-local IPv6 address that exists in Linode’s system.

* `address` - The IPv6 link-local address.

* `assigned_entity` - The entity this IP address has been assigned to. This is `null` if the address is not assigned to an entity.
* `id` - The ID of the entity.
* `label` - The label of the entity.
* `type` - The type of the entity.
* `url` - The URL of the entity.

* `gateway` - The default gateway for this address.

* `interface_id` - The Linode interface ID that this IP address is assigned to.

* `linode_id` - The ID of the Linode this address currently belongs to.

* `prefix` - The network prefix.
Expand All @@ -233,18 +288,35 @@ A link-local IPv6 address that exists in Linode’s system.

* `region` - (Filterable) The Region this address resides in.

* `reserved` - Whether this IP address is a reserved IP.

* `subnet_mask` - The subnet mask.

* `tags` - A set of tags associated with this IP address.

* `type` - The type of address this is.

* `vpc_nat_1_1` - IPv4 address configured as a 1:1 NAT for this Interface.
* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.
* `subnet_id` - The `id` of the VPC Subnet for this Interface.
* `vpc_id` - The `id` of the VPC configured for this Interface.

### SLAAC

A SLAAC IPv6 address object that exists in Linode’s system.

* `address` - The address.

* `assigned_entity` - The entity this IP address has been assigned to. This is `null` if the address is not assigned to an entity.
* `id` - The ID of the entity.
* `label` - The label of the entity.
* `type` - The type of the entity.
* `url` - The URL of the entity.

* `gateway` - The default gateway for this address.

* `interface_id` - The Linode interface ID that this IP address is assigned to.

* `linode_id` - The ID of the Linode this address currently belongs to.

* `prefix` - The network prefix.
Expand All @@ -255,6 +327,15 @@ A SLAAC IPv6 address object that exists in Linode’s system.

* `region` - (Filterable) The Region this address resides in.

* `reserved` - Whether this IP address is a reserved IP.

* `subnet_mask` - The subnet mask.

* `tags` - A set of tags associated with this IP address.

* `type` - The type of address this is.

* `vpc_nat_1_1` - IPv4 address configured as a 1:1 NAT for this Interface.
* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.
* `subnet_id` - The `id` of the VPC Subnet for this Interface.
* `vpc_id` - The `id` of the VPC configured for this Interface.
8 changes: 8 additions & 0 deletions docs/data-sources/networking_ip.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,14 @@ The Linode Network IP Address resource exports the following attributes:

* `reserved` - Whether this IP address is a reserved IP.

* `tags` - A set of tags associated with this IP address.

@mawilk90 mawilk90 May 5, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1


* `assigned_entity` - The entity this IP address has been assigned to. This is `null` if the address is not assigned to an entity.
* `id` - The ID of the entity.
* `label` - The label of the entity.
* `type` - The type of the entity.
* `url` - The URL of the entity.

* `vpc_nat_1_1` - Contains information about the NAT 1:1 mapping of a public IP address to a VPC subnet.

* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.
Expand Down
12 changes: 12 additions & 0 deletions docs/data-sources/networking_ips.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,18 @@ Each IP address will be stored in the `ip_addresses` attribute and will export t

* `reserved` - Whether this IP address is a reserved IP.

* `tags` - A set of tags associated with this IP address.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1


* `assigned_entity` - The entity this IP address has been assigned to. This is null if the address is not assigned to an entity.

* `id` - The ID of the entity.

* `label` - The label of the entity.

* `type` - The type of the entity.

* `url` - The URL of the entity.

* `vpc_nat_1_1` - Contains information about the NAT 1:1 mapping of a public IP address to a VPC subnet.

* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.
Expand Down
14 changes: 13 additions & 1 deletion docs/resources/networking_ip.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ The following arguments are supported:

The following arguments are only available when reserving an IP address:

* `reserved` - (Optional) Whether this IP address should be a reserved IP.
* `reserved` - (Optional) Whether this IP address should be a reserved IP. Changing this value on an assigned IP triggers an in-place update (not replacement). Setting `reserved = true` converts an ephemeral IP to reserved. Setting `reserved = false` converts a reserved IP to ephemeral when the address is assigned. If the reserved IP is unassigned, the API deletes the IP as a side effect of setting `reserved = false`, and the provider returns an `IP Address Deleted During Update` error; after this occurs, remove the resource from your Terraform configuration so future applies succeed.

* `region` - (Optional) The region where the reserved IP should be allocated.

Expand All @@ -56,6 +56,18 @@ In addition to all arguments above, the following attributes are exported:

* `subnet_mask` - The mask that separates host bits from network bits for this address.

* `tags` - A set of tags associated with this IP address.

* `assigned_entity` - The entity this IP address has been assigned to. This is null if the address is not assigned to an entity.

* `id` - The ID of the entity.

* `label` - The label of the entity.

* `type` - The type of the entity.

* `url` - The URL of the entity.

* `vpc_nat_1_1` - Contains information about the NAT 1:1 mapping of a public IP address to a VPC subnet.

* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.
Expand Down
16 changes: 16 additions & 0 deletions docs/resources/networking_ip_assignment.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,22 @@ The following attributes can be defined under each entry in the `assignments` fi

* `id` - The unique ID of this resource.

* `assignments` - The list of IP/Linode assignments. In addition to the configurable arguments above, each entry exposes the following computed attributes after assignment:

* `reserved` - Whether this IP address is a reserved IP.

* `tags` - A set of tags associated with this IP address.

* `assigned_entity` - The entity this IP address has been assigned to.

* `id` - The ID of the entity.

* `label` - The label of the entity.

* `type` - The type of the entity.

* `url` - The URL of the entity.

## Import

Network IP assignments cannot be imported.
73 changes: 73 additions & 0 deletions docs/resources/reserved_ip_assignment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
---
page_title: "Linode: linode_reserved_ip_assignment"
description: |-
Manages assignment of a reserved IP address to a Linode instance.
---

# linode\_reserved\_ip\_assignment

Manages the assignment of a reserved IPv4 address to a Linode instance.

For more information, see the corresponding [API documentation](https://techdocs.akamai.com/linode-api/reference/post-add-linode-ip).

## Example Usage

```hcl
resource "linode_reserved_ip_assignment" "example" {
linode_id = linode_instance.example.id
address = linode_networking_ip.reserved.address
public = true
}
```

## Argument Reference

The following arguments are supported:

* `linode_id` - (Required) The ID of the Linode to assign the reserved IP to. Changing this forces creation of a new resource.

* `address` - (Required) The reserved IPv4 address to assign to the Linode.

* `public` - (Optional) Whether the IP address is public. Defaults to `true`. This must match the reserved IP's existing public/private status. Changing this forces creation of a new resource.

* `rdns` - (Optional) The reverse DNS assigned to this address. Configured via a separate API call after the IP is assigned.

* `apply_immediately` - (Optional) If true, the instance will be rebooted to update network interfaces. Defaults to `false`.

## Attributes Reference

In addition to all arguments above, the following attributes are exported:

* `id` - The ID of the IPv4 address (the address itself).

* `gateway` - The default gateway for this address.

* `prefix` - The number of bits set in the subnet mask.

* `region` - The region this IP resides in.

* `subnet_mask` - The mask that separates host bits from network bits for this address.

* `type` - The type of IP address.

* `reserved` - The reservation status of the IP address.

* `tags` - A set of tags associated with this IP address.

* `assigned_entity` - The entity this IP address has been assigned to. This is null if the address is not assigned to an entity.

* `id` - The ID of the entity.

* `label` - The label of the entity.

* `type` - The type of the entity.

* `url` - The URL of the entity.

* `vpc_nat_1_1` - Contains information about the NAT 1:1 mapping of a public IP address to a VPC subnet.

* `address` - The IPv4 address that is configured as a 1:1 NAT for this VPC interface.

* `subnet_id` - The `id` of the VPC Subnet for this Interface.

* `vpc_id` - The `id` of the VPC configured for this Interface.
Comment on lines +1 to +73
34 changes: 23 additions & 11 deletions linode/instancenetworking/framework_datasource_schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,31 @@ var VPCNAT1To1Type = types.ObjectType{
},
}

var AssignedEntityObjectType = types.ObjectType{
AttrTypes: map[string]attr.Type{
"id": types.Int64Type,
"label": types.StringType,
"type": types.StringType,
"url": types.StringType,
},
}

var networkObjectType = types.ObjectType{
AttrTypes: map[string]attr.Type{
"address": types.StringType,
"gateway": types.StringType,
"prefix": types.Int64Type,
"rdns": types.StringType,
"region": types.StringType,
"subnet_mask": types.StringType,
"type": types.StringType,
"public": types.BoolType,
"linode_id": types.Int64Type,
"interface_id": types.Int64Type,
"vpc_nat_1_1": VPCNAT1To1Type,
"address": types.StringType,
"gateway": types.StringType,
"prefix": types.Int64Type,
"rdns": types.StringType,
"region": types.StringType,
"subnet_mask": types.StringType,
"type": types.StringType,
"public": types.BoolType,
"linode_id": types.Int64Type,
"interface_id": types.Int64Type,
"vpc_nat_1_1": VPCNAT1To1Type,
"reserved": types.BoolType,
"tags": types.SetType{ElemType: types.StringType},
"assigned_entity": AssignedEntityObjectType,
},
}

Expand Down
2 changes: 2 additions & 0 deletions linode/instancenetworking/framework_datasource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ func TestAccDataSourceInstanceNetworking_basicwithReseved(t *testing.T) {
resource.TestCheckResourceAttrSet(testInstanceNetworkResName, "ipv6.0.global.#"),
resource.TestCheckResourceAttrSet(testInstanceNetworkResName, "ipv6.0.link_local.%"),
resource.TestCheckResourceAttrSet(testInstanceNetworkResName, "ipv6.0.slaac.%"),
// The reserved IP is assigned to the instance, so it appears in public (with reserved=true), not in reserved
resource.TestCheckResourceAttr(testInstanceNetworkResName, "ipv4.0.public.#", "2"),
),
},
},
Expand Down
Loading
Loading