Skip to content

Commit 521823f

Browse files
Kush BaronjSrividyaKamakshi
authored andcommitted
Added - Support for VCNIP - IP Lifetime support and related feature
1 parent ab7d620 commit 521823f

19 files changed

+465
-52
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
# Create Reserved IPv6 with vnic
5+
resource "oci_core_ipv6" "test_reserve_ipv6" {
6+
vnic_id = data.oci_core_vnic_attachments.instance_vnics.vnic_attachments[0]["vnic_id"]
7+
subnet_id = oci_core_subnet.example_subnet.id
8+
display_name = "reserved_ipv6"
9+
route_table_id = oci_core_vcn.example_vcn.default_route_table_id
10+
lifetime = "RESERVED"
11+
}
12+
13+
# Create Reserved IPv6 with only subnet
14+
resource "oci_core_ipv6" "test_reserve_ipv6_available" {
15+
subnet_id = oci_core_subnet.example_subnet.id
16+
display_name = "available_reserved_ipv6"
17+
route_table_id = oci_core_vcn.example_vcn.default_route_table_id
18+
lifetime = "RESERVED"
19+
}
20+
21+
# List IPv6s
22+
data "oci_core_ipv6s" "reserve_ipv6_datasource" {
23+
depends_on = [oci_core_ipv6.test_reserve_ipv6,oci_core_ipv6.test_reserve_ipv6_available]
24+
subnet_id = oci_core_subnet.example_subnet.id
25+
}
26+
27+
output "reserve_ipv6s" {
28+
value = [data.oci_core_ipv6s.reserve_ipv6_datasource.ipv6s]
29+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
# Create Reserve PrivateIP with vnic
5+
resource "oci_core_private_ip" "private_reserve_ip" {
6+
vnic_id = data.oci_core_vnic_attachments.instance_vnics.vnic_attachments[0]["vnic_id"]
7+
display_name = "reserve_private_ip"
8+
route_table_id = oci_core_vcn.example_vcn.default_route_table_id
9+
lifetime = "RESERVED"
10+
}
11+
12+
# Create Reserve PrivateIP with only subnet
13+
resource "oci_core_private_ip" "private_reserve_ip_available" {
14+
subnet_id = oci_core_subnet.example_subnet.id
15+
display_name = "available_reserve_private_ip"
16+
route_table_id = oci_core_vcn.example_vcn.default_route_table_id
17+
lifetime = "RESERVED"
18+
}
19+
20+
21+
# List Private IPs
22+
data "oci_core_private_ips" "reserve_private_ip_datasource" {
23+
depends_on = [oci_core_private_ip.private_reserve_ip, oci_core_private_ip.private_reserve_ip_available]
24+
subnet_id = oci_core_subnet.example_subnet.id
25+
}
26+
27+
output "private_reserve_ips" {
28+
value = [data.oci_core_private_ips.reserve_private_ip_datasource.private_ips]
29+
}

internal/integrationtest/core_ipv6_test.go

Lines changed: 60 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,33 +35,49 @@ var (
3535
"ipv6id": acctest.Representation{RepType: acctest.Required, Create: `${oci_core_ipv6.test_ipv6.id}`},
3636
}
3737

38+
CoreIpv6DataSourceRepresentation = map[string]interface{}{
39+
"ip_state": acctest.Representation{RepType: acctest.Optional, Create: `ipState`},
40+
"lifetime": acctest.Representation{RepType: acctest.Optional, Create: `EPHEMERAL`, Update: `RESERVED`},
41+
"subnet_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_subnet.test_subnet.id}`},
42+
"vnic_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_core_vnic_attachments.t.vnic_attachments[0], "vnic_id")}`},
43+
"filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreIpv6DataSourceFilterRepresentation}}
44+
3845
CoreCoreIpv6DataSourceRepresentation = map[string]interface{}{
3946
"vnic_id": acctest.Representation{RepType: acctest.Optional, Create: `${lookup(data.oci_core_vnic_attachments.t.vnic_attachments[0], "vnic_id")}`},
4047
"filter": acctest.RepresentationGroup{RepType: acctest.Required, Group: CoreIpv6DataSourceFilterRepresentation}}
48+
4149
CoreIpv6DataSourceFilterRepresentation = map[string]interface{}{
4250
"name": acctest.Representation{RepType: acctest.Required, Create: `id`},
4351
"values": acctest.Representation{RepType: acctest.Required, Create: []string{`${oci_core_ipv6.test_ipv6.id}`}},
4452
}
4553

4654
CoreIpv6Representation = map[string]interface{}{
55+
"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`, Update: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}`},
56+
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
57+
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}},
58+
"lifetime": acctest.Representation{RepType: acctest.Optional, Create: `EPHEMERAL`, Update: `RESERVED`},
4759
"route_table_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_route_table.test_route_table.id}`},
4860
"vnic_id": acctest.Representation{RepType: acctest.Required, Create: `${lookup(data.oci_core_vnic_attachments.t.vnic_attachments[0], "vnic_id")}`},
61+
}
62+
63+
CoreIpv6Representation2 = map[string]interface{}{
4964
"defined_tags": acctest.Representation{RepType: acctest.Optional, Create: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "value")}`, Update: `${map("${oci_identity_tag_namespace.tag-namespace1.name}.${oci_identity_tag.tag1.name}", "updatedValue")}`},
5065
"display_name": acctest.Representation{RepType: acctest.Optional, Create: `displayName`, Update: `displayName2`},
5166
"freeform_tags": acctest.Representation{RepType: acctest.Optional, Create: map[string]string{"Department": "Finance"}, Update: map[string]string{"Department": "Accounting"}},
52-
"ip_address": acctest.Representation{RepType: acctest.Optional, Create: `${substr(oci_core_vcn.test_vcn.ipv6cidr_blocks[0], 0, length(oci_core_vcn.test_vcn.ipv6cidr_blocks[0]) - 4)}5901:cede:a617:8bba`},
67+
"lifetime": acctest.Representation{RepType: acctest.Optional, Create: `EPHEMERAL`, Update: `RESERVED`},
68+
"route_table_id": acctest.Representation{RepType: acctest.Optional, Create: `${oci_core_route_table.test_route_table.id}`},
5369
}
5470

5571
CoreIpv6ResourceDependencies = utils.OciImageIdsVariable +
5672
acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", acctest.Required, acctest.Create, CoreInstanceRepresentation) +
5773
acctest.GenerateResourceFromRepresentationMap("oci_core_route_table", "test_route_table", acctest.Required, acctest.Create, CoreRouteTableRepresentation) +
58-
acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Optional, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreSubnetRepresentation, map[string]interface{}{
74+
acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreSubnetRepresentation, map[string]interface{}{
5975
"dns_label": acctest.Representation{RepType: acctest.Required, Create: `dnslabel`},
60-
"ipv6cidr_block": acctest.Representation{RepType: acctest.Optional, Create: `${substr(oci_core_vcn.test_vcn.ipv6cidr_blocks[0], 0, length(oci_core_vcn.test_vcn.ipv6cidr_blocks[0]) - 2)}${64}`},
76+
"ipv6cidr_block": acctest.Representation{RepType: acctest.Required, Create: `${substr(oci_core_vcn.test_vcn.ipv6cidr_blocks[0], 0, length(oci_core_vcn.test_vcn.ipv6cidr_blocks[0]) - 2)}${64}`},
6177
})) +
62-
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Optional, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{
78+
acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, acctest.RepresentationCopyWithNewProperties(CoreVcnRepresentation, map[string]interface{}{
6379
"dns_label": acctest.Representation{RepType: acctest.Required, Create: `dnslabel`},
64-
"is_ipv6enabled": acctest.Representation{RepType: acctest.Optional, Create: `true`},
80+
"is_ipv6enabled": acctest.Representation{RepType: acctest.Required, Create: `true`},
6581
})) +
6682
AvailabilityDomainConfig +
6783
DefinedTagsDependencies + `
@@ -99,7 +115,6 @@ func TestCoreIpv6Resource_basic(t *testing.T) {
99115
Config: config + compartmentIdVariableStr + CoreIpv6ResourceDependencies +
100116
acctest.GenerateResourceFromRepresentationMap("oci_core_ipv6", "test_ipv6", acctest.Required, acctest.Create, CoreIpv6Representation),
101117
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
102-
resource.TestCheckResourceAttrSet(resourceName, "vnic_id"),
103118

104119
func(s *terraform.State) (err error) {
105120
resId, err = acctest.FromInstanceState(s, resourceName, "id")
@@ -117,13 +132,10 @@ func TestCoreIpv6Resource_basic(t *testing.T) {
117132
Config: config + compartmentIdVariableStr + CoreIpv6ResourceDependencies +
118133
acctest.GenerateResourceFromRepresentationMap("oci_core_ipv6", "test_ipv6", acctest.Optional, acctest.Create, CoreIpv6Representation),
119134
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
120-
resource.TestCheckResourceAttrSet(resourceName, "compartment_id"),
121135
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"),
122136
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
123-
resource.TestCheckResourceAttrSet(resourceName, "id"),
137+
resource.TestCheckResourceAttr(resourceName, "lifetime", "EPHEMERAL"),
124138
resource.TestCheckResourceAttrSet(resourceName, "route_table_id"),
125-
resource.TestCheckResourceAttrSet(resourceName, "ip_address"),
126-
resource.TestCheckResourceAttrSet(resourceName, "state"),
127139
resource.TestCheckResourceAttrSet(resourceName, "subnet_id"),
128140
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
129141
resource.TestCheckResourceAttrSet(resourceName, "vnic_id"),
@@ -149,8 +161,8 @@ func TestCoreIpv6Resource_basic(t *testing.T) {
149161
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
150162
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
151163
resource.TestCheckResourceAttrSet(resourceName, "id"),
164+
resource.TestCheckResourceAttr(resourceName, "lifetime", "RESERVED"),
152165
resource.TestCheckResourceAttrSet(resourceName, "route_table_id"),
153-
resource.TestCheckResourceAttrSet(resourceName, "ip_address"),
154166
resource.TestCheckResourceAttrSet(resourceName, "state"),
155167
resource.TestCheckResourceAttrSet(resourceName, "subnet_id"),
156168
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
@@ -165,19 +177,52 @@ func TestCoreIpv6Resource_basic(t *testing.T) {
165177
},
166178
),
167179
},
180+
181+
// verify detach operation
182+
{
183+
Config: config + compartmentIdVariableStr + CoreIpv6ResourceDependencies +
184+
acctest.GenerateResourceFromRepresentationMap("oci_core_ipv6", "test_ipv6", acctest.Optional, acctest.Update, CoreIpv6Representation2),
185+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
186+
resource.TestCheckResourceAttrSet(resourceName, "compartment_id"),
187+
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
188+
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
189+
resource.TestCheckResourceAttrSet(resourceName, "id"),
190+
resource.TestCheckResourceAttr(resourceName, "lifetime", "RESERVED"),
191+
resource.TestCheckResourceAttrSet(resourceName, "route_table_id"),
192+
resource.TestCheckResourceAttrSet(resourceName, "ip_address"),
193+
resource.TestCheckResourceAttrSet(resourceName, "state"),
194+
resource.TestCheckResourceAttrSet(resourceName, "subnet_id"),
195+
resource.TestCheckResourceAttrSet(resourceName, "time_created"),
196+
197+
func(s *terraform.State) (err error) {
198+
resId2, err = acctest.FromInstanceState(s, resourceName, "id")
199+
if resId != resId2 {
200+
return fmt.Errorf("Resource recreated when it was supposed to be updated.")
201+
}
202+
return err
203+
},
204+
),
205+
},
206+
168207
// verify datasource
169208
{
170209
Config: config +
171210
acctest.GenerateDataSourceFromRepresentationMap("oci_core_ipv6s", "test_ipv6s", acctest.Optional, acctest.Update, CoreCoreIpv6DataSourceRepresentation) +
172211
compartmentIdVariableStr + CoreIpv6ResourceDependencies +
173212
acctest.GenerateResourceFromRepresentationMap("oci_core_ipv6", "test_ipv6", acctest.Optional, acctest.Update, CoreIpv6Representation),
174213
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
175-
resource.TestCheckResourceAttrSet(datasourceName, "vnic_id"),
214+
//resource.TestCheckResourceAttr(datasourceName, "ip_address", "ipAddress"),
215+
//resource.TestCheckResourceAttr(datasourceName, "ip_state", "ipState"),
216+
//resource.TestCheckResourceAttr(datasourceName, "lifetime", "lifetime2"),
217+
//resource.TestCheckResourceAttrSet(datasourceName, "subnet_id"),
218+
//resource.TestCheckResourceAttrSet(datasourceName, "vnic_id"),
176219

177220
resource.TestCheckResourceAttr(datasourceName, "ipv6s.#", "1"),
178221
resource.TestCheckResourceAttr(datasourceName, "ipv6s.0.display_name", "displayName2"),
179222
resource.TestCheckResourceAttr(datasourceName, "ipv6s.0.freeform_tags.%", "1"),
180223
resource.TestCheckResourceAttrSet(datasourceName, "ipv6s.0.id"),
224+
resource.TestCheckResourceAttrSet(datasourceName, "ipv6s.0.ip_state"),
225+
resource.TestCheckResourceAttr(datasourceName, "ipv6s.0.lifetime", "RESERVED"),
181226
resource.TestCheckResourceAttrSet(datasourceName, "ipv6s.0.route_table_id"),
182227
resource.TestCheckResourceAttrSet(datasourceName, "ipv6s.0.ip_address"),
183228
resource.TestCheckResourceAttrSet(datasourceName, "ipv6s.0.subnet_id"),
@@ -196,6 +241,9 @@ func TestCoreIpv6Resource_basic(t *testing.T) {
196241
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
197242
resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"),
198243
resource.TestCheckResourceAttrSet(singularDatasourceName, "id"),
244+
resource.TestCheckResourceAttrSet(singularDatasourceName, "ip_state"),
245+
resource.TestCheckResourceAttr(singularDatasourceName, "lifetime", "RESERVED"),
246+
resource.TestCheckResourceAttrSet(singularDatasourceName, "state"),
199247
resource.TestCheckResourceAttrSet(singularDatasourceName, "ip_address"),
200248
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
201249
resource.TestCheckResourceAttrSet(singularDatasourceName, "route_table_id"),

0 commit comments

Comments
 (0)