Skip to content

Commit 8ad89c2

Browse files
committed
Support for customer_asn attribute in core_virtual_circuit resource
1 parent fd97463 commit 8ad89c2

15 files changed

+177
-86
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
### Added
44
- Support for creating `oci_database_autonomous_database` resource with the specified `whitelisted_ips`
5+
- Support for `customer_asn` attribute in `core_virtual_circuit` resource
6+
7+
### Deprecated
8+
- Virtual Circuit resource: The `customer_bgp_asn` attribute is now deprecated. Please use the `customer_asn` instead.
59

610
## 3.52.0 (November 13, 2019)
711

examples/fast_connect/variables.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ variable "virtual_circuit_cross_connect_mappings_vlan" {
3232
default = 200
3333
}
3434

35-
variable "virtual_circuit_customer_bgp_asn" {
35+
variable "virtual_circuit_customer_asn" {
3636
default = 10
3737
}
3838

examples/fast_connect/virtual_circuit.tf

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ resource "oci_core_virtual_circuit" "virtual_circuit_private" {
2020
vlan = "${var.virtual_circuit_cross_connect_mappings_vlan}"
2121
}
2222

23-
customer_bgp_asn = "${var.virtual_circuit_customer_bgp_asn}"
24-
display_name = "${var.virtual_circuit_display_name}"
25-
gateway_id = "${oci_core_drg.drg_private.id}"
23+
customer_asn = "${var.virtual_circuit_customer_asn}"
24+
display_name = "${var.virtual_circuit_display_name}"
25+
gateway_id = "${oci_core_drg.drg_private.id}"
2626

2727
#provider_service_id = "${oci_core_provider_service.provider_service.id}"
2828
region = "${var.virtual_circuit_region}"
@@ -41,8 +41,8 @@ resource "oci_core_virtual_circuit" "virtual_circuit_public" {
4141
vlan = "${var.virtual_circuit_cross_connect_mappings_vlan_public}"
4242
}
4343

44-
customer_bgp_asn = "${var.virtual_circuit_customer_bgp_asn}"
45-
display_name = "${var.virtual_circuit_display_name}"
44+
customer_asn = "${var.virtual_circuit_customer_asn}"
45+
display_name = "${var.virtual_circuit_display_name}"
4646

4747
#provider_service_id = "${oci_core_provider_service.provider_service.id}"
4848

@@ -80,7 +80,7 @@ resource "oci_core_virtual_circuit" "virtual_circuit_provider_private_layer2" {
8080
oracle_bgp_peering_ip = "${var.virtual_circuit_cross_connect_mappings_oracle_bgp_peering_ip}"
8181
}
8282

83-
customer_bgp_asn = "${var.virtual_circuit_customer_bgp_asn}"
83+
customer_asn = "${var.virtual_circuit_customer_asn}"
8484
display_name = "${var.virtual_circuit_display_name}"
8585
gateway_id = "${oci_core_drg.drg_provider_layer2.id}"
8686
provider_service_id = "${data.oci_core_fast_connect_provider_services.fast_connect_provider_services_private_layer2.fast_connect_provider_services.0.id}"

oci/core_virtual_circuit_data_source.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package oci
44

55
import (
66
"context"
7+
"strconv"
78

89
"github.com/hashicorp/terraform/helper/schema"
910
oci_core "github.com/oracle/oci-go-sdk/core"
@@ -80,6 +81,10 @@ func (s *CoreVirtualCircuitDataSourceCrud) SetData() error {
8081
}
8182
s.D.Set("cross_connect_mappings", crossConnectMappings)
8283

84+
if s.Res.CustomerAsn != nil {
85+
s.D.Set("customer_asn", strconv.FormatInt(*s.Res.CustomerAsn, 10))
86+
}
87+
8388
if s.Res.CustomerBgpAsn != nil {
8489
s.D.Set("customer_bgp_asn", *s.Res.CustomerBgpAsn)
8590
}

oci/core_virtual_circuit_resource.go

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"bytes"
77
"context"
88
"fmt"
9+
"strconv"
910
"strings"
1011

1112
"github.com/hashicorp/terraform/helper/hashcode"
@@ -93,10 +94,20 @@ func CoreVirtualCircuitResource() *schema.Resource {
9394
},
9495
},
9596
},
97+
"customer_asn": {
98+
Type: schema.TypeString,
99+
Optional: true,
100+
Computed: true,
101+
ValidateFunc: validateInt64TypeString,
102+
DiffSuppressFunc: int64StringDiffSuppressFunction,
103+
ConflictsWith: []string{"customer_bgp_asn"},
104+
},
96105
"customer_bgp_asn": {
97-
Type: schema.TypeInt,
98-
Optional: true,
99-
Computed: true,
106+
Type: schema.TypeInt,
107+
Optional: true,
108+
Computed: true,
109+
Deprecated: FieldDeprecatedForAnother("customer_bgp_asn", "customer_asn"),
110+
ConflictsWith: []string{"customer_asn"},
100111
},
101112
"defined_tags": {
102113
Type: schema.TypeMap,
@@ -308,9 +319,18 @@ func (s *CoreVirtualCircuitResourceCrud) Create() error {
308319
}
309320
}
310321

322+
if customerAsn, ok := s.D.GetOkExists("customer_asn"); ok {
323+
tmp := customerAsn.(string)
324+
tmpInt64, err := strconv.ParseInt(tmp, 10, 64)
325+
if err != nil {
326+
return fmt.Errorf("unable to convert customerAsn string: %s to an int64 and encountered error: %v", tmp, err)
327+
}
328+
request.CustomerAsn = &tmpInt64
329+
}
330+
311331
if customerBgpAsn, ok := s.D.GetOkExists("customer_bgp_asn"); ok {
312-
tmp := customerBgpAsn.(int)
313-
request.CustomerBgpAsn = &tmp
332+
tmp := int64(customerBgpAsn.(int))
333+
request.CustomerAsn = &tmp
314334
}
315335

316336
if definedTags, ok := s.D.GetOkExists("defined_tags"); ok {
@@ -469,9 +489,18 @@ func (s *CoreVirtualCircuitResourceCrud) Update() error {
469489
}
470490
}
471491

472-
if customerBgpAsn, ok := s.D.GetOkExists("customer_bgp_asn"); ok {
473-
tmp := customerBgpAsn.(int)
474-
request.CustomerBgpAsn = &tmp
492+
if customerAsn, ok := s.D.GetOkExists("customer_asn"); ok {
493+
tmp := customerAsn.(string)
494+
tmpInt64, err := strconv.ParseInt(tmp, 10, 64)
495+
if err != nil {
496+
return fmt.Errorf("unable to convert customerAsn string: %s to an int64 and encountered error: %v", tmp, err)
497+
}
498+
request.CustomerAsn = &tmpInt64
499+
}
500+
501+
if customerBgpAsn, ok := s.D.GetOkExists("customer_bgp_asn"); ok && s.D.HasChange("customer_bgp_asn") {
502+
tmp := int64(customerBgpAsn.(int))
503+
request.CustomerAsn = &tmp
475504
}
476505

477506
if definedTags, ok := s.D.GetOkExists("defined_tags"); ok {
@@ -621,8 +650,8 @@ func (s *CoreVirtualCircuitResourceCrud) SetData() error {
621650
}
622651
s.D.Set("cross_connect_mappings", crossConnectMappings)
623652

624-
if s.Res.CustomerBgpAsn != nil {
625-
s.D.Set("customer_bgp_asn", *s.Res.CustomerBgpAsn)
653+
if s.Res.CustomerAsn != nil {
654+
s.D.Set("customer_asn", strconv.FormatInt(*s.Res.CustomerAsn, 10))
626655
}
627656

628657
if s.Res.DefinedTags != nil {

oci/core_virtual_circuit_test.go

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,24 @@ var (
4343
"customer_bgp_asn": Representation{repType: Required, create: `10`, update: `11`},
4444
"public_prefixes": RepresentationGroup{Required, virtualCircuitPublicPrefixesRepresentation},
4545
}
46+
virtualCircuitPublicRequiredOnlyWithoutDeprecatedRepresentation = representationCopyWithNewProperties(
47+
representationCopyWithRemovedProperties(virtualCircuitPublicRequiredOnlyRepresentation, []string{"customer_bgp_asn"}), map[string]interface{}{
48+
"customer_asn": Representation{repType: Required, create: `10`, update: `11`},
49+
})
50+
4651
virtualCircuitRequiredOnlyRepresentation = map[string]interface{}{
4752
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
4853
"type": Representation{repType: Required, create: `${var.virtual_circuit_type}`},
4954
"cross_connect_mappings": RepresentationGroup{Required, crossConnectMappingsRequiredOnlyRepresentation},
50-
"customer_bgp_asn": Representation{repType: Required, create: `10`, update: `11`},
55+
"customer_asn": Representation{repType: Required, create: `10`, update: `11`},
5156
"gateway_id": Representation{repType: Required, create: `${oci_core_drg.test_drg.id}`},
5257
}
5358
virtualCircuitRepresentation = map[string]interface{}{
5459
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
5560
"type": Representation{repType: Required, create: `${var.virtual_circuit_type}`},
5661
"bandwidth_shape_name": Representation{repType: Optional, create: `10 Gbps`, update: `20 Gbps`},
5762
"cross_connect_mappings": RepresentationGroup{Required, crossConnectMappingsRequiredOnlyRepresentation},
58-
"customer_bgp_asn": Representation{repType: Required, create: `10`, update: `11`},
63+
"customer_asn": Representation{repType: Required, create: `10`, update: `11`},
5964
"defined_tags": Representation{repType: 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")}`},
6065
"display_name": Representation{repType: Optional, create: `displayName`, update: `displayName2`},
6166
"freeform_tags": Representation{repType: Optional, create: map[string]string{"Department": "Finance"}, update: map[string]string{"Department": "Accounting"}},
@@ -68,7 +73,7 @@ var (
6873
"type": Representation{repType: Required, create: `${var.virtual_circuit_type}`},
6974
"bandwidth_shape_name": Representation{repType: Optional, create: "${data.oci_core_virtual_circuit_bandwidth_shapes.test_virtual_circuit_bandwidth_shapes.virtual_circuit_bandwidth_shapes.0.name}"},
7075
"cross_connect_mappings": RepresentationGroup{Required, virtualCircuitCrossConnectMappingsRepresentation},
71-
"customer_bgp_asn": Representation{repType: Required, create: `10`, update: `11`},
76+
"customer_asn": Representation{repType: Required, create: `10`, update: `11`},
7277
"display_name": Representation{repType: Optional, create: `displayName`, update: `displayName2`},
7378
"gateway_id": Representation{repType: Optional, create: `${oci_core_drg.test_drg.id}`},
7479
"provider_service_id": Representation{repType: Optional, create: `${data.oci_core_fast_connect_provider_services.test_fast_connect_provider_services.fast_connect_provider_services.0.id}`},
@@ -193,16 +198,42 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
193198
},
194199
),
195200
},
201+
// verify update from customer_bgp_asn to customer_asn
202+
{
203+
Config: config + compartmentIdVariableStr + VirtualCircuitResourceDependencies + VirtualCircuitPublicPropertyVariables +
204+
generateResourceFromRepresentationMap("oci_core_virtual_circuit", "test_virtual_circuit", Required, Create, virtualCircuitPublicRequiredOnlyWithoutDeprecatedRepresentation),
205+
Check: resource.ComposeAggregateTestCheckFunc(
206+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
207+
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.#", "1"),
208+
resource.TestCheckResourceAttrSet(resourceName, "cross_connect_mappings.0.cross_connect_or_cross_connect_group_id"),
209+
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.vlan", "200"),
210+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "10"),
211+
resource.TestCheckResourceAttr(resourceName, "public_prefixes.#", "1"),
212+
CheckResourceSetContainsElementWithProperties(resourceName, "public_prefixes", map[string]string{
213+
"cidr_block": "11.0.0.0/24",
214+
},
215+
[]string{}),
216+
resource.TestCheckResourceAttr(resourceName, "type", "PUBLIC"),
217+
218+
func(s *terraform.State) (err error) {
219+
resId2, err = fromInstanceState(s, resourceName, "id")
220+
if resId != resId2 {
221+
return fmt.Errorf("Resource recreated when it was supposed to be updated.")
222+
}
223+
return err
224+
},
225+
),
226+
},
196227
// verify update - PUBLIC Virtual Circuit
197228
{
198229
Config: config + compartmentIdVariableStr + VirtualCircuitResourceDependencies + VirtualCircuitPublicPropertyVariables +
199-
generateResourceFromRepresentationMap("oci_core_virtual_circuit", "test_virtual_circuit", Required, Update, virtualCircuitPublicRequiredOnlyRepresentation),
230+
generateResourceFromRepresentationMap("oci_core_virtual_circuit", "test_virtual_circuit", Required, Update, virtualCircuitPublicRequiredOnlyWithoutDeprecatedRepresentation),
200231
Check: resource.ComposeAggregateTestCheckFunc(
201232
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
202233
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.#", "1"),
203234
resource.TestCheckResourceAttrSet(resourceName, "cross_connect_mappings.0.cross_connect_or_cross_connect_group_id"),
204235
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.vlan", "300"),
205-
resource.TestCheckResourceAttr(resourceName, "customer_bgp_asn", "11"),
236+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "11"),
206237
resource.TestCheckResourceAttr(resourceName, "public_prefixes.#", "1"),
207238
CheckResourceSetContainsElementWithProperties(resourceName, "public_prefixes", map[string]string{
208239
"cidr_block": "11.0.1.0/24",
@@ -232,7 +263,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
232263
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.#", "1"),
233264
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.18/31"),
234265
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.19/31"),
235-
resource.TestCheckResourceAttr(resourceName, "customer_bgp_asn", "10"),
266+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "10"),
236267
resource.TestCheckResourceAttrSet(resourceName, "gateway_id"),
237268
resource.TestCheckResourceAttrSet(resourceName, "provider_service_id"),
238269
resource.TestCheckResourceAttr(resourceName, "provider_state", "INACTIVE"),
@@ -253,7 +284,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
253284
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.#", "1"),
254285
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.20/31"),
255286
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.21/31"),
256-
resource.TestCheckResourceAttr(resourceName, "customer_bgp_asn", "11"),
287+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "11"),
257288
resource.TestCheckResourceAttrSet(resourceName, "gateway_id"),
258289
resource.TestCheckResourceAttrSet(resourceName, "provider_service_id"),
259290
resource.TestCheckResourceAttr(resourceName, "provider_state", "INACTIVE"),
@@ -283,7 +314,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
283314
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.18/31"),
284315
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.19/31"),
285316
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.vlan", "200"),
286-
resource.TestCheckResourceAttr(resourceName, "customer_bgp_asn", "10"),
317+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "10"),
287318
resource.TestCheckResourceAttrSet(resourceName, "gateway_id"),
288319
resource.TestCheckResourceAttr(resourceName, "type", "PRIVATE"),
289320

@@ -311,7 +342,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
311342
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.18/31"),
312343
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.19/31"),
313344
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.vlan", "200"),
314-
resource.TestCheckResourceAttr(resourceName, "customer_bgp_asn", "10"),
345+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "10"),
315346
resource.TestCheckResourceAttr(resourceName, "defined_tags.%", "1"),
316347
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"),
317348
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
@@ -346,7 +377,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
346377
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.18/31"),
347378
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.19/31"),
348379
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.vlan", "200"),
349-
resource.TestCheckResourceAttr(resourceName, "customer_bgp_asn", "10"),
380+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "10"),
350381
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName"),
351382
resource.TestCheckResourceAttrSet(resourceName, "gateway_id"),
352383
resource.TestCheckResourceAttr(resourceName, "region", "us-phoenix-1"),
@@ -374,7 +405,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
374405
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.20/31"),
375406
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.21/31"),
376407
resource.TestCheckResourceAttr(resourceName, "cross_connect_mappings.0.vlan", "300"),
377-
resource.TestCheckResourceAttr(resourceName, "customer_bgp_asn", "11"),
408+
resource.TestCheckResourceAttr(resourceName, "customer_asn", "11"),
378409
resource.TestCheckResourceAttr(resourceName, "defined_tags.%", "1"),
379410
resource.TestCheckResourceAttr(resourceName, "display_name", "displayName2"),
380411
resource.TestCheckResourceAttr(resourceName, "freeform_tags.%", "1"),
@@ -410,7 +441,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
410441
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.20/31"),
411442
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.21/31"),
412443
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.cross_connect_mappings.0.vlan", "300"),
413-
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.customer_bgp_asn", "11"),
444+
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.customer_asn", "11"),
414445
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.defined_tags.%", "1"),
415446
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.display_name", "displayName2"),
416447
resource.TestCheckResourceAttr(datasourceName, "virtual_circuits.0.freeform_tags.%", "1"),
@@ -441,7 +472,7 @@ func TestCoreVirtualCircuitResource_basic(t *testing.T) {
441472
resource.TestCheckResourceAttr(singularDatasourceName, "cross_connect_mappings.0.customer_bgp_peering_ip", "10.0.0.20/31"),
442473
resource.TestCheckResourceAttr(singularDatasourceName, "cross_connect_mappings.0.oracle_bgp_peering_ip", "10.0.0.21/31"),
443474
resource.TestCheckResourceAttr(singularDatasourceName, "cross_connect_mappings.0.vlan", "300"),
444-
resource.TestCheckResourceAttr(singularDatasourceName, "customer_bgp_asn", "11"),
475+
resource.TestCheckResourceAttr(singularDatasourceName, "customer_asn", "11"),
445476
resource.TestCheckResourceAttr(singularDatasourceName, "defined_tags.%", "1"),
446477
resource.TestCheckResourceAttr(singularDatasourceName, "display_name", "displayName2"),
447478
resource.TestCheckResourceAttr(singularDatasourceName, "freeform_tags.%", "1"),

oci/core_virtual_circuits_data_source.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package oci
44

55
import (
66
"context"
7+
"strconv"
78

89
"github.com/hashicorp/terraform/helper/schema"
910
oci_core "github.com/oracle/oci-go-sdk/core"
@@ -120,6 +121,10 @@ func (s *CoreVirtualCircuitsDataSourceCrud) SetData() error {
120121
}
121122
virtualCircuit["cross_connect_mappings"] = crossConnectMappings
122123

124+
if r.CustomerAsn != nil {
125+
virtualCircuit["customer_asn"] = strconv.FormatInt(*r.CustomerAsn, 10)
126+
}
127+
123128
if r.CustomerBgpAsn != nil {
124129
virtualCircuit["customer_bgp_asn"] = *r.CustomerBgpAsn
125130
}

0 commit comments

Comments
 (0)