Skip to content

Commit

Permalink
[Datasource, Resource] network address groups, NAG member.
Browse files Browse the repository at this point in the history
Add userTags
Update to 1.8.3
  • Loading branch information
michaelkad committed Oct 14, 2024
1 parent 62cb947 commit f75d348
Show file tree
Hide file tree
Showing 17 changed files with 1,311 additions and 9 deletions.
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ toolchain go1.22.5
require (
github.com/IBM-Cloud/bluemix-go v0.0.0-20240926024252-81b3928fd062
github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20240725064144-454a2ae23113
github.com/IBM-Cloud/power-go-client v1.8.1
github.com/IBM-Cloud/power-go-client v1.8.3
github.com/IBM/apigateway-go-sdk v0.0.0-20210714141226-a5d5d49caaca
github.com/IBM/appconfiguration-go-admin-sdk v0.3.0
github.com/IBM/appid-management-go-sdk v0.0.0-20210908164609-dd0e0eaf732f
Expand Down Expand Up @@ -210,10 +210,10 @@ require (
go.opentelemetry.io/otel v1.14.0 // indirect
go.opentelemetry.io/otel/trace v1.14.0 // indirect
go.uber.org/ratelimit v0.2.0 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/mod v0.19.0 // indirect
golang.org/x/net v0.27.0 // indirect
golang.org/x/oauth2 v0.7.0 // indirect
golang.org/x/sys v0.22.0 // indirect
golang.org/x/sys v0.25.0 // indirect
golang.org/x/term v0.22.0 // indirect
golang.org/x/text v0.16.0 // indirect
golang.org/x/time v0.3.0 // indirect
Expand Down
14 changes: 8 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ github.com/IBM-Cloud/bluemix-go v0.0.0-20240926024252-81b3928fd062/go.mod h1:/7h
github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20240725064144-454a2ae23113 h1:f2Erqfea1dKpaTFagTJM6W/wnD3JGq/Vn9URh8nuRwk=
github.com/IBM-Cloud/container-services-go-sdk v0.0.0-20240725064144-454a2ae23113/go.mod h1:xUQL9SGAjoZFd4GNjrjjtEpjpkgU7RFXRyHesbKTjiY=
github.com/IBM-Cloud/ibm-cloud-cli-sdk v0.5.3/go.mod h1:RiUvKuHKTBmBApDMUQzBL14pQUGKcx/IioKQPIcRQjs=
github.com/IBM-Cloud/power-go-client v1.8.1 h1:tx1aPJmIQrNru1MD1VHGNasGx3eRIs0zzPZ0KvdFQrg=
github.com/IBM-Cloud/power-go-client v1.8.1/go.mod h1:N4RxrsMUvBQjSQ/qPk0iMZ8zK+fZPRTnHi/gTaASw0g=
github.com/IBM-Cloud/power-go-client v1.8.3 h1:QsBuIS6KvKsiEpe0yiHYKhWgXlqkcJ7XqFHtATj8Yh4=
github.com/IBM-Cloud/power-go-client v1.8.3/go.mod h1:UDyXeIKEp6r7yWUXYu3r0ZnFSlNZ2YeQTHwM2Tmlgv0=
github.com/IBM-Cloud/softlayer-go v1.0.5-tf h1:koUAyF9b6X78lLLruGYPSOmrfY2YcGYKOj/Ug9nbKNw=
github.com/IBM-Cloud/softlayer-go v1.0.5-tf/go.mod h1:6HepcfAXROz0Rf63krk5hPZyHT6qyx2MNvYyHof7ik4=
github.com/IBM/apigateway-go-sdk v0.0.0-20210714141226-a5d5d49caaca h1:crniVcf+YcmgF03NmmfonXwSQ73oJF+IohFYBwknMxs=
Expand Down Expand Up @@ -1653,8 +1653,10 @@ github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4=
github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM=
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
Expand Down Expand Up @@ -1824,8 +1826,8 @@ golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=
golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand Down Expand Up @@ -2057,8 +2059,8 @@ golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
Expand Down
6 changes: 6 additions & 0 deletions ibm/acctest/acctest.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ var (
Pi_image_id string
Pi_instance_name string
Pi_key_name string
Pi_network_address_group_id string
Pi_network_name string
Pi_network_id string
Pi_network_interface_id string
Expand Down Expand Up @@ -1240,6 +1241,11 @@ func init() {
Pi_host_id = ""
fmt.Println("[WARN] Set the environment variable PI_HOST_ID for testing ibm_pi_host resource else it is set to default value ''")
}
Pi_network_address_group_id = os.Getenv("PI_NETWORK_ADDRESS_GROUP_ID")
if Pi_network_address_group_id == "" {
Pi_network_address_group_id = "terraform-test-power"
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'")
}

WorkspaceID = os.Getenv("SCHEMATICS_WORKSPACE_ID")
if WorkspaceID == "" {
Expand Down
4 changes: 4 additions & 0 deletions ibm/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,8 @@ func Provider() *schema.Provider {
"ibm_pi_instances": power.DataSourceIBMPIInstances(),
"ibm_pi_key": power.DataSourceIBMPIKey(),
"ibm_pi_keys": power.DataSourceIBMPIKeys(),
"ibm_pi_network_address_group": power.DataSourceIBMPINetworkAddressGroup(),
"ibm_pi_network_address_groups": power.DataSourceIBMPINetworkAddressGroups(),
"ibm_pi_network_interface": power.DataSourceIBMPINetworkInterface(),
"ibm_pi_network_interfaces": power.DataSourceIBMPINetworkInterfaces(),
"ibm_pi_network_port": power.DataSourceIBMPINetworkPort(),
Expand Down Expand Up @@ -1311,6 +1313,8 @@ func Provider() *schema.Provider {
"ibm_pi_instance": power.ResourceIBMPIInstance(),
"ibm_pi_ipsec_policy": power.ResourceIBMPIIPSecPolicy(),
"ibm_pi_key": power.ResourceIBMPIKey(),
"ibm_pi_network_address_group_member": power.ResourceIBMPINetworkAddressGroupMember(),
"ibm_pi_network_address_group": power.ResourceIBMPINetworkAddressGroup(),
"ibm_pi_network_interface": power.ResourceIBMPINetworkInterface(),
"ibm_pi_network_port_attach": power.ResourceIBMPINetworkPortAttach(),
"ibm_pi_network": power.ResourceIBMPINetwork(),
Expand Down
112 changes: 112 additions & 0 deletions ibm/service/power/data_source_ibm_pi_network_address_group.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
// Copyright IBM Corp. 2024 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

package power

import (
"context"
"log"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"

"github.com/IBM-Cloud/power-go-client/clients/instance"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
)

func DataSourceIBMPINetworkAddressGroup() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIBMPINetworkAddressGroupRead,

Schema: map[string]*schema.Schema{
// Arguments
Arg_CloudInstanceID: {
Description: "The GUID of the service instance associated with an account.",
Required: true,
Type: schema.TypeString,
ValidateFunc: validation.NoZeroValues,
},
Arg_NetworkAddressGroupID: {
Description: "Network Address Group ID.",
Required: true,
Type: schema.TypeString,
},
// Attributes
Attr_CRN: {
Computed: true,
Description: "The Network Address Group's crn.",
Type: schema.TypeString,
},
Attr_Members: {
Computed: true,
Description: "The list of IP addresses in CIDR notation (for example 192.168.66.2/32) in the Network Address Group.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
Attr_CIDR: {
Computed: true,
Description: "The IP addresses in CIDR notation for example 192.168.1.5/32.",
Type: schema.TypeString,
},
Attr_ID: {
Computed: true,
Description: "The id of the Network Address Group member IP addresses.",
Type: schema.TypeString,
},
},
},
Type: schema.TypeList,
},
Attr_Name: {
Computed: true,
Description: "The name of the Network Address Group.",
Type: schema.TypeString,
},
Attr_UserTags: {
Computed: true,
Description: "List of user tags attached to the resource.",
Elem: &schema.Schema{Type: schema.TypeString},
Set: schema.HashString,
Type: schema.TypeSet,
},
},
}
}

func dataSourceIBMPINetworkAddressGroupRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
sess, err := meta.(conns.ClientSession).IBMPISession()
if err != nil {
return diag.FromErr(err)
}

cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
nagID := d.Get(Arg_NetworkAddressGroupID).(string)
nagC := instance.NewIBMPINetworkAddressGroupClient(ctx, sess, cloudInstanceID)
networkAddressGroup, err := nagC.Get(nagID)
if err != nil {
return diag.FromErr(err)
}

d.SetId(*networkAddressGroup.ID)
if networkAddressGroup.Crn != nil {
d.Set(Attr_CRN, networkAddressGroup.Crn)
userTags, err := flex.GetTagsUsingCRN(meta, string(*networkAddressGroup.Crn))
if err != nil {
log.Printf("Error on get of pi network address group (%s) user_tags: %s", nagID, err)
}
d.Set(Attr_UserTags, userTags)
}

members := []map[string]interface{}{}
if len(networkAddressGroup.Members) > 0 {
for _, mbr := range networkAddressGroup.Members {
member := memberToMap(mbr)
members = append(members, member)
}
d.Set(Attr_Members, members)
}
d.Set(Attr_Name, networkAddressGroup.Name)

return nil
}
36 changes: 36 additions & 0 deletions ibm/service/power/data_source_ibm_pi_network_address_group_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright IBM Corp. 2024 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

package power_test

import (
"fmt"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"

acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
)

func TestAccIBMPINetworkAddressGroupDataSourceBasic(t *testing.T) {
resource.Test(t, resource.TestCase{
PreCheck: func() { acc.TestAccPreCheck(t) },
Providers: acc.TestAccProviders,
Steps: []resource.TestStep{
{
Config: testAccCheckIBMPINetworkAddressGroupDataSourceConfigBasic(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("data.ibm_pi_network_address_group.network_address_group", "id"),
),
},
},
})
}

func testAccCheckIBMPINetworkAddressGroupDataSourceConfigBasic() string {
return fmt.Sprintf(`
data "ibm_pi_network_address_group" "network_address_group" {
pi_cloud_instance_id = "%s"
pi_network_address_group_id = "%s"
}`, acc.Pi_cloud_instance_id, acc.Pi_network_address_group_id)
}
138 changes: 138 additions & 0 deletions ibm/service/power/data_source_ibm_pi_network_address_groups.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
// Copyright IBM Corp. 2024 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

package power

import (
"context"
"log"

"github.com/IBM-Cloud/power-go-client/clients/instance"
"github.com/IBM-Cloud/power-go-client/power/models"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
"github.com/hashicorp/go-uuid"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)

func DataSourceIBMPINetworkAddressGroups() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIBMPINetworkAddressGroupsRead,

Schema: map[string]*schema.Schema{
// Arguments
Arg_CloudInstanceID: {
Description: "The GUID of the service instance associated with an account.",
Required: true,
Type: schema.TypeString,
ValidateFunc: validation.NoZeroValues,
},

// Attributes
Attr_NetworkAddressGroups: {
Computed: true,
Description: "list of Network Address Groups.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
Attr_CRN: {
Computed: true,
Description: "The Network Address Group's crn.",
Type: schema.TypeString,
},
Attr_ID: {
Computed: true,
Description: "The id of the Network Address Group.",
Type: schema.TypeString,
},
Attr_Members: {
Computed: true,
Description: "The list of IP addresses in CIDR notation (for example 192.168.66.2/32) in the Network Address Group.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
Attr_CIDR: {
Computed: true,
Description: "The IP addresses in CIDR notation for example 192.168.1.5/32.",
Type: schema.TypeString,
},
Attr_ID: {
Computed: true,
Description: "The id of the Network Address Group member IP addresses.",
Type: schema.TypeString,
},
},
},
Type: schema.TypeList,
},
Attr_Name: {
Computed: true,
Description: "The name of the Network Address Group.",
Type: schema.TypeString,
},
},
},
Type: schema.TypeList,
},
},
}
}

func dataSourceIBMPINetworkAddressGroupsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
sess, err := meta.(conns.ClientSession).IBMPISession()
if err != nil {
return diag.FromErr(err)
}

cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
nagC := instance.NewIBMPINetworkAddressGroupClient(ctx, sess, cloudInstanceID)
networkAddressGroups, err := nagC.GetAll()
if err != nil {
return diag.FromErr(err)
}

var genID, _ = uuid.GenerateUUID()
d.SetId(genID)

nags := []map[string]interface{}{}
if len(networkAddressGroups.NetworkAddressGroups) > 0 {
for _, nag := range networkAddressGroups.NetworkAddressGroups {
modelMap := networkAddressGroupsNetworkAddressGroupToMap(nag, meta)
nags = append(nags, modelMap)
}
}
d.Set(Attr_NetworkAddressGroups, nags)

return nil
}

func networkAddressGroupsNetworkAddressGroupToMap(networkAddressGroup *models.NetworkAddressGroup, meta interface{}) map[string]interface{} {
nag := make(map[string]interface{})
if networkAddressGroup.Crn != nil {
nag[Attr_CRN] = networkAddressGroup.Crn
userTags, err := flex.GetTagsUsingCRN(meta, string(*networkAddressGroup.Crn))
if err != nil {
log.Printf("Error on get of pi network address group (%s) user_tags: %s", *networkAddressGroup.ID, err)
}
nag[Attr_UserTags] = userTags
}

nag[Attr_ID] = networkAddressGroup.ID
if len(networkAddressGroup.Members) > 0 {
members := []map[string]interface{}{}
for _, membersItem := range networkAddressGroup.Members {
member := memberToMap(membersItem)
members = append(members, member)
}
nag[Attr_Members] = members
}
nag[Attr_Name] = networkAddressGroup.Name
return nag
}

func memberToMap(mbr *models.NetworkAddressGroupMember) map[string]interface{} {
member := make(map[string]interface{})
member[Attr_CIDR] = mbr.Cidr
member[Attr_ID] = mbr.ID
return member
}
Loading

0 comments on commit f75d348

Please sign in to comment.