Skip to content

Commit 9bf509e

Browse files
committed
[Datasource, Resource] network address groups, NAG member.
1 parent 82aad7a commit 9bf509e

17 files changed

+1234
-6
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,10 @@ require (
209209
go.opentelemetry.io/otel v1.14.0 // indirect
210210
go.opentelemetry.io/otel/trace v1.14.0 // indirect
211211
go.uber.org/ratelimit v0.2.0 // indirect
212-
golang.org/x/mod v0.17.0 // indirect
212+
golang.org/x/mod v0.19.0 // indirect
213213
golang.org/x/net v0.27.0 // indirect
214214
golang.org/x/oauth2 v0.7.0 // indirect
215-
golang.org/x/sys v0.22.0 // indirect
215+
golang.org/x/sys v0.25.0 // indirect
216216
golang.org/x/term v0.22.0 // indirect
217217
golang.org/x/text v0.16.0 // indirect
218218
golang.org/x/time v0.3.0 // indirect

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1823,8 +1823,8 @@ golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
18231823
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
18241824
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
18251825
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
1826-
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
1827-
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
1826+
golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=
1827+
golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
18281828
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
18291829
golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
18301830
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -2056,8 +2056,8 @@ golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
20562056
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
20572057
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
20582058
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
2059-
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
2060-
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
2059+
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
2060+
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
20612061
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
20622062
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
20632063
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=

ibm/acctest/acctest.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ var (
216216
Pi_image_bucket_secret_key string
217217
Pi_instance_name string
218218
Pi_key_name string
219+
Pi_network_address_group_id string
219220
Pi_network_name string
220221
Pi_placement_group_name string
221222
Pi_replication_volume_name string
@@ -1219,6 +1220,12 @@ func init() {
12191220
Pi_host_id = ""
12201221
fmt.Println("[WARN] Set the environment variable PI_HOST_ID for testing ibm_pi_host resource else it is set to default value ''")
12211222
}
1223+
Pi_network_address_group_id = os.Getenv("PI_NETWORK_ADDRESS_GROUP_ID")
1224+
if Pi_network_address_group_id == "" {
1225+
Pi_network_address_group_id = "terraform-test-power"
1226+
fmt.Println("[INFO] Set the environment variable PI_NETWORK_ADDRESS_GROUP_ID for testing ibm_pi_network_address_group data source else it is set to default value 'terraform-test-power'")
1227+
}
1228+
12221229
WorkspaceID = os.Getenv("SCHEMATICS_WORKSPACE_ID")
12231230
if WorkspaceID == "" {
12241231
WorkspaceID = "us-south.workspace.tf-acc-test-schematics-state-test.392cd99f"

ibm/provider/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,6 +651,8 @@ func Provider() *schema.Provider {
651651
"ibm_pi_instances": power.DataSourceIBMPIInstances(),
652652
"ibm_pi_key": power.DataSourceIBMPIKey(),
653653
"ibm_pi_keys": power.DataSourceIBMPIKeys(),
654+
"ibm_pi_network_address_group": power.DataSourceIBMPINetworkAddressGroup(),
655+
"ibm_pi_network_address_groups": power.DataSourceIBMPINetworkAddressGroups(),
654656
"ibm_pi_network_port": power.DataSourceIBMPINetworkPort(),
655657
"ibm_pi_network": power.DataSourceIBMPINetwork(),
656658
"ibm_pi_networks": power.DataSourceIBMPINetworks(),
@@ -1298,6 +1300,8 @@ func Provider() *schema.Provider {
12981300
"ibm_pi_instance": power.ResourceIBMPIInstance(),
12991301
"ibm_pi_ipsec_policy": power.ResourceIBMPIIPSecPolicy(),
13001302
"ibm_pi_key": power.ResourceIBMPIKey(),
1303+
"ibm_pi_network_address_group_member": power.ResourceIBMPINetworkAddressGroupMember(),
1304+
"ibm_pi_network_address_group": power.ResourceIBMPINetworkAddressGroup(),
13011305
"ibm_pi_network_port_attach": power.ResourceIBMPINetworkPortAttach(),
13021306
"ibm_pi_network": power.ResourceIBMPINetwork(),
13031307
"ibm_pi_placement_group": power.ResourceIBMPIPlacementGroup(),
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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/terraform-plugin-sdk/v2/diag"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
12+
13+
"github.com/IBM-Cloud/power-go-client/clients/instance"
14+
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
15+
)
16+
17+
func DataSourceIBMPINetworkAddressGroup() *schema.Resource {
18+
return &schema.Resource{
19+
ReadContext: dataSourceIBMPINetworkAddressGroupRead,
20+
21+
Schema: map[string]*schema.Schema{
22+
// Arguments
23+
Arg_CloudInstanceID: {
24+
Description: "The GUID of the service instance associated with an account.",
25+
Required: true,
26+
Type: schema.TypeString,
27+
ValidateFunc: validation.NoZeroValues,
28+
},
29+
Arg_NetworkAddressGroupID: {
30+
Description: "Network Address Group ID.",
31+
Required: true,
32+
Type: schema.TypeString,
33+
},
34+
// Attributes
35+
Attr_CRN: {
36+
Computed: true,
37+
Description: "The Network Address Group's crn.",
38+
Type: schema.TypeString,
39+
},
40+
Attr_Members: {
41+
Computed: true,
42+
Description: "The list of IP addresses in CIDR notation (for example 192.168.66.2/32) in the Network Address Group.",
43+
Elem: &schema.Resource{
44+
Schema: map[string]*schema.Schema{
45+
Attr_CIDR: {
46+
Computed: true,
47+
Description: "The IP addresses in CIDR notation for example 192.168.1.5/32.",
48+
Type: schema.TypeString,
49+
},
50+
Attr_ID: {
51+
Computed: true,
52+
Description: "The id of the Network Address Group member IP addresses.",
53+
Type: schema.TypeString,
54+
},
55+
},
56+
},
57+
Type: schema.TypeList,
58+
},
59+
Attr_Name: {
60+
Computed: true,
61+
Description: "The name of the Network Address Group.",
62+
Type: schema.TypeString,
63+
},
64+
},
65+
}
66+
}
67+
68+
func dataSourceIBMPINetworkAddressGroupRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
69+
sess, err := meta.(conns.ClientSession).IBMPISession()
70+
if err != nil {
71+
return diag.FromErr(err)
72+
}
73+
74+
cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
75+
nagID := d.Get(Arg_NetworkAddressGroupID).(string)
76+
nagC := instance.NewIBMPINetworkAddressGroupClient(ctx, sess, cloudInstanceID)
77+
networkAddressGroup, err := nagC.Get(nagID)
78+
if err != nil {
79+
return diag.FromErr(err)
80+
}
81+
82+
d.SetId(*networkAddressGroup.ID)
83+
84+
d.Set(Attr_CRN, networkAddressGroup.Crn)
85+
86+
members := []map[string]interface{}{}
87+
if len(networkAddressGroup.Members) > 0 {
88+
for _, mbr := range networkAddressGroup.Members {
89+
member := memberToMap(mbr)
90+
members = append(members, member)
91+
}
92+
d.Set(Attr_Members, members)
93+
}
94+
d.Set(Attr_Name, networkAddressGroup.Name)
95+
96+
return nil
97+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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 TestAccIBMPINetworkAddressGroupDataSourceBasic(t *testing.T) {
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { acc.TestAccPreCheck(t) },
18+
Providers: acc.TestAccProviders,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: testAccCheckIBMPINetworkAddressGroupDataSourceConfigBasic(),
22+
Check: resource.ComposeTestCheckFunc(
23+
resource.TestCheckResourceAttrSet("data.ibm_pi_network_address_group.network_address_group", "id"),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
func testAccCheckIBMPINetworkAddressGroupDataSourceConfigBasic() string {
31+
return fmt.Sprintf(`
32+
data "ibm_pi_network_address_group" "network_address_group" {
33+
pi_cloud_instance_id = "%s"
34+
pi_network_address_group_id = "%s"
35+
}`, acc.Pi_cloud_instance_id, acc.Pi_network_address_group_id)
36+
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
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/IBM-Cloud/power-go-client/clients/instance"
10+
"github.com/IBM-Cloud/power-go-client/power/models"
11+
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
12+
"github.com/hashicorp/go-uuid"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
15+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
16+
)
17+
18+
func DataSourceIBMPINetworkAddressGroups() *schema.Resource {
19+
return &schema.Resource{
20+
ReadContext: dataSourceIBMPINetworkAddressGroupsRead,
21+
22+
Schema: map[string]*schema.Schema{
23+
// Arguments
24+
Arg_CloudInstanceID: {
25+
Description: "The GUID of the service instance associated with an account.",
26+
Required: true,
27+
Type: schema.TypeString,
28+
ValidateFunc: validation.NoZeroValues,
29+
},
30+
31+
// Attributes
32+
Attr_NetworkAddressGroups: {
33+
Computed: true,
34+
Description: "list of Network Address Groups.",
35+
Elem: &schema.Resource{
36+
Schema: map[string]*schema.Schema{
37+
Attr_CRN: {
38+
Computed: true,
39+
Description: "The Network Address Group's crn.",
40+
Type: schema.TypeString,
41+
},
42+
Attr_ID: {
43+
Computed: true,
44+
Description: "The id of the Network Address Group.",
45+
Type: schema.TypeString,
46+
},
47+
Attr_Members: {
48+
Computed: true,
49+
Description: "The list of IP addresses in CIDR notation (for example 192.168.66.2/32) in the Network Address Group.",
50+
Elem: &schema.Resource{
51+
Schema: map[string]*schema.Schema{
52+
Attr_CIDR: {
53+
Computed: true,
54+
Description: "The IP addresses in CIDR notation for example 192.168.1.5/32.",
55+
Type: schema.TypeString,
56+
},
57+
Attr_ID: {
58+
Computed: true,
59+
Description: "The id of the Network Address Group member IP addresses.",
60+
Type: schema.TypeString,
61+
},
62+
},
63+
},
64+
Type: schema.TypeList,
65+
},
66+
Attr_Name: {
67+
Computed: true,
68+
Description: "The name of the Network Address Group.",
69+
Type: schema.TypeString,
70+
},
71+
},
72+
},
73+
Type: schema.TypeList,
74+
},
75+
},
76+
}
77+
}
78+
79+
func dataSourceIBMPINetworkAddressGroupsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
80+
sess, err := meta.(conns.ClientSession).IBMPISession()
81+
if err != nil {
82+
return diag.FromErr(err)
83+
}
84+
85+
cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
86+
nagC := instance.NewIBMPINetworkAddressGroupClient(ctx, sess, cloudInstanceID)
87+
networkAddressGroups, err := nagC.GetAll()
88+
if err != nil {
89+
return diag.FromErr(err)
90+
}
91+
92+
var genID, _ = uuid.GenerateUUID()
93+
d.SetId(genID)
94+
95+
nags := []map[string]interface{}{}
96+
if len(networkAddressGroups.NetworkAddressGroups) > 0 {
97+
for _, nag := range networkAddressGroups.NetworkAddressGroups {
98+
modelMap := networkAddressGroupsNetworkAddressGroupToMap(nag)
99+
nags = append(nags, modelMap)
100+
}
101+
}
102+
d.Set(Attr_NetworkAddressGroups, nags)
103+
104+
return nil
105+
}
106+
107+
func networkAddressGroupsNetworkAddressGroupToMap(networkAddressGroup *models.NetworkAddressGroup) map[string]interface{} {
108+
nag := make(map[string]interface{})
109+
nag[Attr_CRN] = networkAddressGroup.Crn
110+
nag[Attr_ID] = networkAddressGroup.ID
111+
if len(networkAddressGroup.Members) > 0 {
112+
members := []map[string]interface{}{}
113+
for _, membersItem := range networkAddressGroup.Members {
114+
member := memberToMap(membersItem)
115+
members = append(members, member)
116+
}
117+
nag[Attr_Members] = members
118+
}
119+
nag[Attr_Name] = networkAddressGroup.Name
120+
return nag
121+
}
122+
123+
func memberToMap(mbr *models.NetworkAddressGroupMember) map[string]interface{} {
124+
member := make(map[string]interface{})
125+
member[Attr_CIDR] = mbr.Cidr
126+
member[Attr_ID] = mbr.ID
127+
return member
128+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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 TestAccIBMPINetworkAddressGroupsDataSourceBasic(t *testing.T) {
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { acc.TestAccPreCheck(t) },
18+
Providers: acc.TestAccProviders,
19+
Steps: []resource.TestStep{
20+
{
21+
Config: testAccCheckIBMPINetworkAddressGroupsDataSourceConfigBasic(),
22+
Check: resource.ComposeTestCheckFunc(
23+
resource.TestCheckResourceAttrSet("data.ibm_pi_network_address_groups.network_address_groups", "id"),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
func testAccCheckIBMPINetworkAddressGroupsDataSourceConfigBasic() string {
31+
return fmt.Sprintf(`
32+
data "ibm_pi_network_address_groups" "network_address_groups" {
33+
pi_cloud_instance_id = "%s"
34+
}`, acc.Pi_cloud_instance_id)
35+
}

0 commit comments

Comments
 (0)