Skip to content

Commit 11f9526

Browse files
committed
Network Peers
Add [D]: pi_network_peers Update [D]: pi_network, pi_networks Update [R]: pi_network Add require option
1 parent 03caa9e commit 11f9526

14 files changed

+436
-26
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ toolchain go1.22.5
77
require (
88
github.com/IBM-Cloud/bluemix-go v0.0.0-20240926024252-81b3928fd062
99
github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20240725064144-454a2ae23113
10-
github.com/IBM-Cloud/power-go-client v1.8.3
10+
github.com/IBM-Cloud/power-go-client v1.9.0-beta6
1111
github.com/IBM/apigateway-go-sdk v0.0.0-20210714141226-a5d5d49caaca
1212
github.com/IBM/appconfiguration-go-admin-sdk v0.3.0
1313
github.com/IBM/appid-management-go-sdk v0.0.0-20210908164609-dd0e0eaf732f

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ github.com/IBM-Cloud/bluemix-go v0.0.0-20240926024252-81b3928fd062/go.mod h1:/7h
118118
github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20240725064144-454a2ae23113 h1:f2Erqfea1dKpaTFagTJM6W/wnD3JGq/Vn9URh8nuRwk=
119119
github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20240725064144-454a2ae23113/go.mod h1:xUQL9SGAjoZFd4GNjrjjtEpjpkgU7RFXRyHesbKTjiY=
120120
github.com/IBM-Cloud/ibm-cloud-cli-sdk v0.5.3/go.mod h1:RiUvKuHKTBmBApDMUQzBL14pQUGKcx/IioKQPIcRQjs=
121-
github.com/IBM-Cloud/power-go-client v1.8.3 h1:QsBuIS6KvKsiEpe0yiHYKhWgXlqkcJ7XqFHtATj8Yh4=
122-
github.com/IBM-Cloud/power-go-client v1.8.3/go.mod h1:UDyXeIKEp6r7yWUXYu3r0ZnFSlNZ2YeQTHwM2Tmlgv0=
121+
github.com/IBM-Cloud/power-go-client v1.9.0-beta6 h1:UOcCmM16R2fNGJWpie1gBZhq1T/zRzwbcLVaMmX4Uj8=
122+
github.com/IBM-Cloud/power-go-client v1.9.0-beta6/go.mod h1:UDyXeIKEp6r7yWUXYu3r0ZnFSlNZ2YeQTHwM2Tmlgv0=
123123
github.com/IBM-Cloud/softlayer-go v1.0.5-tf h1:koUAyF9b6X78lLLruGYPSOmrfY2YcGYKOj/Ug9nbKNw=
124124
github.com/IBM-Cloud/softlayer-go v1.0.5-tf/go.mod h1:6HepcfAXROz0Rf63krk5hPZyHT6qyx2MNvYyHof7ik4=
125125
github.com/IBM/apigateway-go-sdk v0.0.0-20210714141226-a5d5d49caaca h1:crniVcf+YcmgF03NmmfonXwSQ73oJF+IohFYBwknMxs=

ibm/provider/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,7 @@ func Provider() *schema.Provider {
668668
"ibm_pi_network_address_groups": power.DataSourceIBMPINetworkAddressGroups(),
669669
"ibm_pi_network_interface": power.DataSourceIBMPINetworkInterface(),
670670
"ibm_pi_network_interfaces": power.DataSourceIBMPINetworkInterfaces(),
671+
"ibm_pi_network_peers": power.DataSourceIBMPINetworkPeers(),
671672
"ibm_pi_network_port": power.DataSourceIBMPINetworkPort(),
672673
"ibm_pi_network_security_group": power.DataSourceIBMPINetworkSecurityGroup(),
673674
"ibm_pi_network_security_groups": power.DataSourceIBMPINetworkSecurityGroups(),

ibm/service/power/data_source_ibm_pi_network.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ func DataSourceIBMPINetwork() *schema.Resource {
3737
// Attributes
3838
Attr_AccessConfig: {
3939
Computed: true,
40-
Description: "The network communication configuration option of the network (for satellite locations only).",
40+
Deprecated: "This field is deprecated please use peer_id instead.",
41+
Description: "The network communication configuration option of the network (for on prem locations only). Use `peer_id` instead.",
4142
Type: schema.TypeString,
4243
},
4344
Attr_AvailableIPCount: {
@@ -83,6 +84,25 @@ func DataSourceIBMPINetwork() *schema.Resource {
8384
Description: "The unique identifier or name of a network.",
8485
Type: schema.TypeString,
8586
},
87+
Attr_NetworkAddressTranslation: {
88+
Computed: true,
89+
Description: "Contains the network address translation details (for on prem locations only).",
90+
Elem: &schema.Resource{
91+
Schema: map[string]*schema.Schema{
92+
Attr_SourceIP: {
93+
Computed: true,
94+
Description: "source IP address.",
95+
Type: schema.TypeString,
96+
},
97+
},
98+
},
99+
Type: schema.TypeList,
100+
},
101+
Attr_PeerID: {
102+
Computed: true,
103+
Description: "Network peer ID (for on prem locations only).",
104+
Type: schema.TypeString,
105+
},
86106
Attr_Type: {
87107
Computed: true,
88108
Description: "The type of network.",
@@ -153,6 +173,13 @@ func dataSourceIBMPINetworkRead(ctx context.Context, d *schema.ResourceData, met
153173
if networkdata.Name != nil {
154174
d.Set(Attr_Name, networkdata.Name)
155175
}
176+
networkAddressTranslation := []map[string]interface{}{}
177+
if networkdata.NetworkAddressTranslation != nil {
178+
natMap := networkAddressTranslationToMap(networkdata.NetworkAddressTranslation)
179+
networkAddressTranslation = append(networkAddressTranslation, natMap)
180+
}
181+
d.Set(Attr_NetworkAddressTranslation, networkAddressTranslation)
182+
d.Set(Attr_PeerID, networkdata.PeerID)
156183
if networkdata.Type != nil {
157184
d.Set(Attr_Type, networkdata.Type)
158185
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// Copyright IBM Corp. 2024 All Rights Reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package power
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/go-uuid"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
13+
14+
"github.com/IBM-Cloud/power-go-client/clients/instance"
15+
"github.com/IBM-Cloud/power-go-client/power/models"
16+
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
17+
)
18+
19+
func DataSourceIBMPINetworkPeers() *schema.Resource {
20+
return &schema.Resource{
21+
ReadContext: dataSourceIBMPINetworkPeersRead,
22+
23+
Schema: map[string]*schema.Schema{
24+
// Arguments
25+
Arg_CloudInstanceID: {
26+
Description: "The GUID of the service instance associated with an account.",
27+
Required: true,
28+
Type: schema.TypeString,
29+
ValidateFunc: validation.NoZeroValues,
30+
},
31+
32+
// Attributes
33+
Attr_NetworkPeers: {
34+
Computed: true,
35+
Description: "List of network peers.",
36+
Elem: &schema.Resource{
37+
Schema: map[string]*schema.Schema{
38+
Attr_Description: {
39+
Computed: true,
40+
Description: "Description of the network peer.",
41+
Type: schema.TypeString,
42+
},
43+
Attr_ID: {
44+
Computed: true,
45+
Description: "ID of the network peer.",
46+
Type: schema.TypeString,
47+
},
48+
Attr_Name: {
49+
Computed: true,
50+
Description: "Name of the network peer.",
51+
Type: schema.TypeString,
52+
},
53+
Attr_Type: {
54+
Computed: true,
55+
Description: "Type of the network peer.",
56+
Type: schema.TypeString,
57+
},
58+
},
59+
},
60+
Type: schema.TypeList,
61+
},
62+
},
63+
}
64+
}
65+
66+
func dataSourceIBMPINetworkPeersRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
67+
sess, err := meta.(conns.ClientSession).IBMPISession()
68+
if err != nil {
69+
return diag.FromErr(err)
70+
}
71+
cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
72+
73+
networkC := instance.NewIBMPINetworkPeerClient(ctx, sess, cloudInstanceID)
74+
networkdata, err := networkC.GetNetworkPeers()
75+
if err != nil {
76+
return diag.FromErr(err)
77+
}
78+
var clientgenU, _ = uuid.GenerateUUID()
79+
d.SetId(clientgenU)
80+
81+
networkPeers := []map[string]interface{}{}
82+
if networkdata.NetworkPeers != nil {
83+
for _, np := range networkdata.NetworkPeers {
84+
npMap := dataSourceIBMPINetworkPeersNetworkPeerToMap(np)
85+
86+
networkPeers = append(networkPeers, npMap)
87+
}
88+
}
89+
d.Set(Attr_NetworkPeers, networkPeers)
90+
91+
return nil
92+
}
93+
94+
func dataSourceIBMPINetworkPeersNetworkPeerToMap(np *models.NetworkPeer) map[string]interface{} {
95+
npMap := make(map[string]interface{})
96+
if np.Description != nil {
97+
npMap[Attr_Description] = np.Description
98+
}
99+
if np.ID != nil {
100+
npMap[Attr_ID] = np.ID
101+
}
102+
if np.Name != nil {
103+
npMap[Attr_Name] = np.Name
104+
}
105+
if np.Type != nil {
106+
npMap[Attr_Type] = np.Type
107+
}
108+
return npMap
109+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright IBM Corp. 2024 All Rights Reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package power_test
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
11+
12+
acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
13+
)
14+
15+
func TestAccIBMPINetworkPeersDataSourceBasic(t *testing.T) {
16+
networksResData := "data.ibm_pi_network_peers.network_peers"
17+
resource.Test(t, resource.TestCase{
18+
PreCheck: func() { acc.TestAccPreCheck(t) },
19+
Providers: acc.TestAccProviders,
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccCheckIBMPINetworkPeersDataSourceConfigBasic(),
23+
Check: resource.ComposeTestCheckFunc(
24+
resource.TestCheckResourceAttrSet(networksResData, "id"),
25+
resource.TestCheckResourceAttrSet(networksResData, "network_peers.#"),
26+
),
27+
},
28+
},
29+
})
30+
}
31+
32+
func testAccCheckIBMPINetworkPeersDataSourceConfigBasic() string {
33+
return fmt.Sprintf(`
34+
data "ibm_pi_network_peers" "network_peers" {
35+
pi_cloud_instance_id = "%s"
36+
}`, acc.Pi_cloud_instance_id)
37+
}

ibm/service/power/data_source_ibm_pi_networks.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ func DataSourceIBMPINetworks() *schema.Resource {
3737
Schema: map[string]*schema.Schema{
3838
Attr_AccessConfig: {
3939
Computed: true,
40-
Description: "The network communication configuration option of the network (for satellite locations only).",
40+
Deprecated: "This field is deprecated please use peer_id instead.",
41+
Description: "The network communication configuration option of the network (for on-prem locations only). Use `peer_id` instead.",
4142
Type: schema.TypeString,
4243
},
4344
Attr_CRN: {
@@ -70,6 +71,11 @@ func DataSourceIBMPINetworks() *schema.Resource {
7071
Description: "The unique identifier of a network.",
7172
Type: schema.TypeString,
7273
},
74+
Attr_PeerID: {
75+
Computed: true,
76+
Description: "Network Peer ID.",
77+
Type: schema.TypeString,
78+
},
7379
Attr_Type: {
7480
Computed: true,
7581
Description: "The type of network.",
@@ -126,6 +132,7 @@ func flattenNetworks(list []*models.NetworkReference, meta interface{}) []map[st
126132
Attr_MTU: i.Mtu,
127133
Attr_Name: *i.Name,
128134
Attr_NetworkID: *i.NetworkID,
135+
Attr_PeerID: i.PeerID,
129136
Attr_Type: *i.Type,
130137
Attr_VLanID: *i.VlanID,
131138
}

ibm/service/power/ibm_pi_constants.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ const (
5353
Arg_NetworkID = "pi_network_id"
5454
Arg_NetworkInterfaceID = "pi_network_interface_id"
5555
Arg_NetworkName = "pi_network_name"
56+
Arg_NetworkPeer = "pi_network_peer"
5657
Arg_NetworkSecurityGroupID = "pi_network_security_group_id"
5758
Arg_NetworkSecurityGroupMemberID = "pi_network_security_group_member_id"
5859
Arg_NetworkSecurityGroupRuleID = "pi_network_security_group_rule_id"
@@ -290,9 +291,11 @@ const (
290291
Attr_NetworkAddressGroupID = "network_address_group_id"
291292
Attr_NetworkAddressGroupMemberID = "network_address_group_member_id"
292293
Attr_NetworkAddressGroups = "network_address_groups"
294+
Attr_NetworkAddressTranslation = "network_address_translation"
293295
Attr_NetworkID = "network_id"
294296
Attr_NetworkInterfaceID = "network_interface_id"
295297
Attr_NetworkName = "network_name"
298+
Attr_NetworkPeers = "network_peers"
296299
Attr_NetworkPorts = "network_ports"
297300
Attr_Networks = "networks"
298301
Attr_NetworkSecurityGroupID = "network_security_group_id"
@@ -302,6 +305,7 @@ const (
302305
Attr_Onboardings = "onboardings"
303306
Attr_OperatingSystem = "operating_system"
304307
Attr_OSType = "os_type"
308+
Attr_PeerID = "peer_id"
305309
Attr_PercentComplete = "percent_complete"
306310
Attr_PinPolicy = "pin_policy"
307311
Attr_PlacementGroupID = "placement_group_id"
@@ -371,6 +375,7 @@ const (
371375
Attr_Size = "size"
372376
Attr_SnapshotID = "snapshot_id"
373377
Attr_SourceChecksum = "source_checksum"
378+
Attr_SourceIP = "source_ip"
374379
Attr_SourcePort = "source_port"
375380
Attr_SourceVolumeID = "source_volume_id"
376381
Attr_SourceVolumeName = "source_volume_name"
@@ -497,8 +502,11 @@ const (
497502
HostGroup = "hostGroup"
498503
ICMP = "icmp"
499504
IPV4_Address = "ipv4-address"
500-
NAG = "network-address-group"
505+
L2 = "L2"
506+
L3BGP = "L3BGP"
507+
L3Static = "L3Static"
501508
MaxVolumeSupport = "maxVolumeSupport"
509+
NAG = "network-address-group"
502510
Netweaver = "Netweaver"
503511
Network_Interface = "network-interface"
504512
None = "none"

0 commit comments

Comments
 (0)