Skip to content

Commit 778cab2

Browse files
committed
vni data source changes
1 parent f496345 commit 778cab2

6 files changed

+292
-26
lines changed

ibm/service/vpc/data_source_ibm_is_virtual_network_interface.go

Lines changed: 114 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"fmt"
99
"log"
1010

11-
"github.com/IBM/vpc-beta-go-sdk/vpcbetav1"
11+
"github.com/IBM/vpc-go-sdk/vpcv1"
1212
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1313
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1414

@@ -26,6 +26,71 @@ func DataSourceIBMIsVirtualNetworkInterface() *schema.Resource {
2626
Required: true,
2727
Description: "The network interface identifier.",
2828
},
29+
// vni p2 changes
30+
"allow_ip_spoofing": &schema.Schema{
31+
Type: schema.TypeBool,
32+
Computed: true,
33+
Description: "Indicates whether source IP spoofing is allowed on this interface. If `false`, source IP spoofing is prevented on this interface. If `true`, source IP spoofing is allowed on this interface.",
34+
},
35+
"enable_infrastructure_nat": &schema.Schema{
36+
Type: schema.TypeBool,
37+
Computed: true,
38+
Description: "If `true`:- The VPC infrastructure performs any needed NAT operations.- `floating_ips` must not have more than one floating IP.If `false`:- Packets are passed unchanged to/from the virtual network interface, allowing the workload to perform any needed NAT operations.- `allow_ip_spoofing` must be `false`.- If the virtual network interface is attached: - The target `resource_type` must be `bare_metal_server_network_attachment`. - The target `interface_type` must not be `hipersocket`.",
39+
},
40+
"ips": &schema.Schema{
41+
Type: schema.TypeList,
42+
Computed: true,
43+
Description: "The reserved IPs bound to this virtual network interface.May be empty when `lifecycle_state` is `pending`.",
44+
Elem: &schema.Resource{
45+
Schema: map[string]*schema.Schema{
46+
"address": &schema.Schema{
47+
Type: schema.TypeString,
48+
Computed: true,
49+
Description: "The IP address.If the address has not yet been selected, the value will be `0.0.0.0`.This property may add support for IPv6 addresses in the future. When processing a value in this property, verify that the address is in an expected format. If it is not, log an error. Optionally halt processing and surface the error, or bypass the resource on which the unexpected IP address format was encountered.",
50+
},
51+
"deleted": &schema.Schema{
52+
Type: schema.TypeList,
53+
Computed: true,
54+
Description: "If present, this property indicates the referenced resource has been deleted, and providessome supplementary information.",
55+
Elem: &schema.Resource{
56+
Schema: map[string]*schema.Schema{
57+
"more_info": &schema.Schema{
58+
Type: schema.TypeString,
59+
Computed: true,
60+
Description: "Link to documentation about deleted resources.",
61+
},
62+
},
63+
},
64+
},
65+
"href": &schema.Schema{
66+
Type: schema.TypeString,
67+
Computed: true,
68+
Description: "The URL for this reserved IP.",
69+
},
70+
"id": &schema.Schema{
71+
Type: schema.TypeString,
72+
Computed: true,
73+
Description: "The unique identifier for this reserved IP.",
74+
},
75+
"name": &schema.Schema{
76+
Type: schema.TypeString,
77+
Computed: true,
78+
Description: "The name for this reserved IP. The name is unique across all reserved IPs in a subnet.",
79+
},
80+
"resource_type": &schema.Schema{
81+
Type: schema.TypeString,
82+
Computed: true,
83+
Description: "The resource type.",
84+
},
85+
},
86+
},
87+
},
88+
"mac_address": &schema.Schema{
89+
Type: schema.TypeString,
90+
Computed: true,
91+
Description: "The MAC address of the virtual network interface. May be absent if `lifecycle_state` is `pending`.",
92+
},
93+
2994
"auto_delete": {
3095
Type: schema.TypeBool,
3196
Computed: true,
@@ -339,12 +404,12 @@ func DataSourceIBMIsVirtualNetworkInterface() *schema.Resource {
339404
}
340405

341406
func dataSourceIBMIsVirtualNetworkInterfaceRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
342-
vpcbetaClient, err := meta.(conns.ClientSession).VpcV1BetaAPI()
407+
vpcbetaClient, err := meta.(conns.ClientSession).VpcV1API()
343408
if err != nil {
344409
return diag.FromErr(err)
345410
}
346411

347-
getVirtualNetworkInterfaceOptions := &vpcbetav1.GetVirtualNetworkInterfaceOptions{}
412+
getVirtualNetworkInterfaceOptions := &vpcv1.GetVirtualNetworkInterfaceOptions{}
348413

349414
getVirtualNetworkInterfaceOptions.SetID(d.Get("virtual_network_interface").(string))
350415

@@ -470,10 +535,38 @@ func dataSourceIBMIsVirtualNetworkInterfaceRead(context context.Context, d *sche
470535
return diag.FromErr(fmt.Errorf("Error setting zone %s", err))
471536
}
472537

538+
// vni p2 changes
539+
540+
if err = d.Set("mac_address", virtualNetworkInterface.MacAddress); err != nil {
541+
return diag.FromErr(fmt.Errorf("Error setting mac_address: %s", err))
542+
}
543+
if err = d.Set("allow_ip_spoofing", virtualNetworkInterface.AllowIPSpoofing); err != nil {
544+
return diag.FromErr(fmt.Errorf("Error setting allow_ip_spoofing: %s", err))
545+
}
546+
if err = d.Set("enable_infrastructure_nat", virtualNetworkInterface.EnableInfrastructureNat); err != nil {
547+
return diag.FromErr(fmt.Errorf("Error setting enable_infrastructure_nat: %s", err))
548+
}
549+
550+
ips := []map[string]interface{}{}
551+
if virtualNetworkInterface.Ips != nil {
552+
for _, modelItem := range virtualNetworkInterface.Ips {
553+
if *modelItem.ID != *virtualNetworkInterface.PrimaryIP.ID {
554+
modelMap, err := dataSourceIBMIsVirtualNetworkInterfaceReservedIPReferenceToMap(&modelItem)
555+
if err != nil {
556+
return diag.FromErr(err)
557+
}
558+
ips = append(ips, modelMap)
559+
}
560+
}
561+
}
562+
if err = d.Set("ips", ips); err != nil {
563+
return diag.FromErr(fmt.Errorf("Error setting ips %s", err))
564+
}
565+
473566
return nil
474567
}
475568

476-
func dataSourceIBMIsVirtualNetworkInterfaceReservedIPReferenceToMap(model *vpcbetav1.ReservedIPReference) (map[string]interface{}, error) {
569+
func dataSourceIBMIsVirtualNetworkInterfaceReservedIPReferenceToMap(model *vpcv1.ReservedIPReference) (map[string]interface{}, error) {
477570
modelMap := make(map[string]interface{})
478571
if model.Address != nil {
479572
modelMap["address"] = *model.Address
@@ -500,15 +593,15 @@ func dataSourceIBMIsVirtualNetworkInterfaceReservedIPReferenceToMap(model *vpcbe
500593
return modelMap, nil
501594
}
502595

503-
func dataSourceIBMIsVirtualNetworkInterfaceReservedIPReferenceDeletedToMap(model *vpcbetav1.ReservedIPReferenceDeleted) (map[string]interface{}, error) {
596+
func dataSourceIBMIsVirtualNetworkInterfaceReservedIPReferenceDeletedToMap(model *vpcv1.ReservedIPReferenceDeleted) (map[string]interface{}, error) {
504597
modelMap := make(map[string]interface{})
505598
if model.MoreInfo != nil {
506599
modelMap["more_info"] = *model.MoreInfo
507600
}
508601
return modelMap, nil
509602
}
510603

511-
func dataSourceIBMIsVirtualNetworkInterfaceResourceGroupReferenceToMap(model *vpcbetav1.ResourceGroupReference) (map[string]interface{}, error) {
604+
func dataSourceIBMIsVirtualNetworkInterfaceResourceGroupReferenceToMap(model *vpcv1.ResourceGroupReference) (map[string]interface{}, error) {
512605
modelMap := make(map[string]interface{})
513606
if model.Href != nil {
514607
modelMap["href"] = *model.Href
@@ -522,7 +615,7 @@ func dataSourceIBMIsVirtualNetworkInterfaceResourceGroupReferenceToMap(model *vp
522615
return modelMap, nil
523616
}
524617

525-
func dataSourceIBMIsVirtualNetworkInterfaceSecurityGroupReferenceToMap(model *vpcbetav1.SecurityGroupReference) (map[string]interface{}, error) {
618+
func dataSourceIBMIsVirtualNetworkInterfaceSecurityGroupReferenceToMap(model *vpcv1.SecurityGroupReference) (map[string]interface{}, error) {
526619
modelMap := make(map[string]interface{})
527620
if model.CRN != nil {
528621
modelMap["crn"] = *model.CRN
@@ -546,15 +639,15 @@ func dataSourceIBMIsVirtualNetworkInterfaceSecurityGroupReferenceToMap(model *vp
546639
return modelMap, nil
547640
}
548641

549-
func dataSourceIBMIsVirtualNetworkInterfaceSecurityGroupReferenceDeletedToMap(model *vpcbetav1.SecurityGroupReferenceDeleted) (map[string]interface{}, error) {
642+
func dataSourceIBMIsVirtualNetworkInterfaceSecurityGroupReferenceDeletedToMap(model *vpcv1.SecurityGroupReferenceDeleted) (map[string]interface{}, error) {
550643
modelMap := make(map[string]interface{})
551644
if model.MoreInfo != nil {
552645
modelMap["more_info"] = *model.MoreInfo
553646
}
554647
return modelMap, nil
555648
}
556649

557-
func dataSourceIBMIsVirtualNetworkInterfaceSubnetReferenceToMap(model *vpcbetav1.SubnetReference) (map[string]interface{}, error) {
650+
func dataSourceIBMIsVirtualNetworkInterfaceSubnetReferenceToMap(model *vpcv1.SubnetReference) (map[string]interface{}, error) {
558651
modelMap := make(map[string]interface{})
559652
if model.CRN != nil {
560653
modelMap["crn"] = *model.CRN
@@ -581,20 +674,20 @@ func dataSourceIBMIsVirtualNetworkInterfaceSubnetReferenceToMap(model *vpcbetav1
581674
return modelMap, nil
582675
}
583676

584-
func dataSourceIBMIsVirtualNetworkInterfaceSubnetReferenceDeletedToMap(model *vpcbetav1.SubnetReferenceDeleted) (map[string]interface{}, error) {
677+
func dataSourceIBMIsVirtualNetworkInterfaceSubnetReferenceDeletedToMap(model *vpcv1.SubnetReferenceDeleted) (map[string]interface{}, error) {
585678
modelMap := make(map[string]interface{})
586679
if model.MoreInfo != nil {
587680
modelMap["more_info"] = *model.MoreInfo
588681
}
589682
return modelMap, nil
590683
}
591684

592-
func dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetToMap(model vpcbetav1.VirtualNetworkInterfaceTargetIntf) (map[string]interface{}, error) {
593-
if _, ok := model.(*vpcbetav1.VirtualNetworkInterfaceTargetShareMountTargetReference); ok {
594-
return dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetShareMountTargetReferenceToMap(model.(*vpcbetav1.VirtualNetworkInterfaceTargetShareMountTargetReference))
595-
} else if _, ok := model.(*vpcbetav1.VirtualNetworkInterfaceTarget); ok {
685+
func dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetToMap(model vpcv1.VirtualNetworkInterfaceTargetIntf) (map[string]interface{}, error) {
686+
if _, ok := model.(*vpcv1.VirtualNetworkInterfaceTargetShareMountTargetReference); ok {
687+
return dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetShareMountTargetReferenceToMap(model.(*vpcv1.VirtualNetworkInterfaceTargetShareMountTargetReference))
688+
} else if _, ok := model.(*vpcv1.VirtualNetworkInterfaceTarget); ok {
596689
modelMap := make(map[string]interface{})
597-
model := model.(*vpcbetav1.VirtualNetworkInterfaceTarget)
690+
model := model.(*vpcv1.VirtualNetworkInterfaceTarget)
598691
if model.Deleted != nil {
599692
deletedMap, err := dataSourceIBMIsVirtualNetworkInterfaceShareMountTargetReferenceDeletedToMap(model.Deleted)
600693
if err != nil {
@@ -616,19 +709,19 @@ func dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetToMap(mo
616709
}
617710
return modelMap, nil
618711
} else {
619-
return nil, fmt.Errorf("Unrecognized vpcbetav1.VirtualNetworkInterfaceTargetIntf subtype encountered")
712+
return nil, fmt.Errorf("Unrecognized vpcv1.VirtualNetworkInterfaceTargetIntf subtype encountered")
620713
}
621714
}
622715

623-
func dataSourceIBMIsVirtualNetworkInterfaceShareMountTargetReferenceDeletedToMap(model *vpcbetav1.ShareMountTargetReferenceDeleted) (map[string]interface{}, error) {
716+
func dataSourceIBMIsVirtualNetworkInterfaceShareMountTargetReferenceDeletedToMap(model *vpcv1.ShareMountTargetReferenceDeleted) (map[string]interface{}, error) {
624717
modelMap := make(map[string]interface{})
625718
if model.MoreInfo != nil {
626719
modelMap["more_info"] = *model.MoreInfo
627720
}
628721
return modelMap, nil
629722
}
630723

631-
func dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetShareMountTargetReferenceToMap(model *vpcbetav1.VirtualNetworkInterfaceTargetShareMountTargetReference) (map[string]interface{}, error) {
724+
func dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetShareMountTargetReferenceToMap(model *vpcv1.VirtualNetworkInterfaceTargetShareMountTargetReference) (map[string]interface{}, error) {
632725
modelMap := make(map[string]interface{})
633726
if model.Deleted != nil {
634727
deletedMap, err := dataSourceIBMIsVirtualNetworkInterfaceShareMountTargetReferenceDeletedToMap(model.Deleted)
@@ -652,7 +745,7 @@ func dataSourceIBMIsVirtualNetworkInterfaceVirtualNetworkInterfaceTargetShareMou
652745
return modelMap, nil
653746
}
654747

655-
func dataSourceIBMIsVirtualNetworkInterfaceVPCReferenceToMap(model *vpcbetav1.VPCReference) (map[string]interface{}, error) {
748+
func dataSourceIBMIsVirtualNetworkInterfaceVPCReferenceToMap(model *vpcv1.VPCReference) (map[string]interface{}, error) {
656749
modelMap := make(map[string]interface{})
657750
if model.CRN != nil {
658751
modelMap["crn"] = *model.CRN
@@ -679,15 +772,15 @@ func dataSourceIBMIsVirtualNetworkInterfaceVPCReferenceToMap(model *vpcbetav1.VP
679772
return modelMap, nil
680773
}
681774

682-
func dataSourceIBMIsVirtualNetworkInterfaceVPCReferenceDeletedToMap(model *vpcbetav1.VPCReferenceDeleted) (map[string]interface{}, error) {
775+
func dataSourceIBMIsVirtualNetworkInterfaceVPCReferenceDeletedToMap(model *vpcv1.VPCReferenceDeleted) (map[string]interface{}, error) {
683776
modelMap := make(map[string]interface{})
684777
if model.MoreInfo != nil {
685778
modelMap["more_info"] = *model.MoreInfo
686779
}
687780
return modelMap, nil
688781
}
689782

690-
func dataSourceIBMIsVirtualNetworkInterfaceZoneReferenceToMap(model *vpcbetav1.ZoneReference) (map[string]interface{}, error) {
783+
func dataSourceIBMIsVirtualNetworkInterfaceZoneReferenceToMap(model *vpcv1.ZoneReference) (map[string]interface{}, error) {
691784
modelMap := make(map[string]interface{})
692785
if model.Href != nil {
693786
modelMap["href"] = *model.Href

ibm/service/vpc/data_source_ibm_is_virtual_network_interface_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,34 @@ func TestAccIBMIsVirtualNetworkInterfaceDataSourceBasic(t *testing.T) {
3838
},
3939
})
4040
}
41+
func TestAccIBMIsVirtualNetworkInterfaceDataSourceVniBasic(t *testing.T) {
42+
resource.Test(t, resource.TestCase{
43+
PreCheck: func() { acc.TestAccPreCheck(t) },
44+
Providers: acc.TestAccProviders,
45+
Steps: []resource.TestStep{
46+
resource.TestStep{
47+
Config: testAccCheckIBMIsVirtualNetworkInterfaceDataSourceConfigBasic(),
48+
Check: resource.ComposeTestCheckFunc(
49+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "virtual_network_interface"),
50+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "auto_delete"),
51+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "created_at"),
52+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "crn"),
53+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "href"),
54+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "lifecycle_state"),
55+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "name"),
56+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "resource_group.0.id"),
57+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "resource_type"),
58+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "security_groups.0.id"),
59+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "subnet.0.id"),
60+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "vpc.0.id"),
61+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "zone.0.name"),
62+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "enable_infrastructure_nat"),
63+
resource.TestCheckResourceAttrSet("data.ibm_is_virtual_network_interface.is_virtual_network_interface", "allow_ip_spoofing"),
64+
),
65+
},
66+
},
67+
})
68+
}
4169

4270
func testAccCheckIBMIsVirtualNetworkInterfaceDataSourceConfigBasic() string {
4371
return fmt.Sprintf(`

0 commit comments

Comments
 (0)