Skip to content

Commit 8923d77

Browse files
Add vsn functionality
1 parent 15e4757 commit 8923d77

21 files changed

+1218
-6
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
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-beta5
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
@@ -53,7 +53,6 @@ require (
5353
github.com/google/uuid v1.6.0
5454
github.com/hashicorp/go-uuid v1.0.3
5555
github.com/hashicorp/go-version v1.7.0
56-
github.com/hashicorp/hcl/v2 v2.18.0
5756
github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0
5857
github.com/jinzhu/copier v0.3.2
5958
github.com/minsikl/netscaler-nitro-go v0.0.0-20170827154432-5b14ce3643e3
@@ -143,6 +142,7 @@ require (
143142
github.com/hashicorp/golang-lru v0.5.4 // indirect
144143
github.com/hashicorp/hc-install v0.6.1 // indirect
145144
github.com/hashicorp/hcl v1.0.1-vault-5 // indirect
145+
github.com/hashicorp/hcl/v2 v2.18.0 // indirect
146146
github.com/hashicorp/logutils v1.0.0 // indirect
147147
github.com/hashicorp/terraform-exec v0.19.0 // indirect
148148
github.com/hashicorp/terraform-json v0.17.1 // indirect

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-beta5 h1:W2mnJxwuS+pP8Dsu3HtEqg+csx7z8MQuFfiB6xee91o=
122+
github.com/IBM-Cloud/power-go-client v1.9.0-beta5/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/acctest/acctest.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ var (
235235
Pi_spp_placement_group_id string
236236
Pi_storage_connection string
237237
Pi_target_storage_tier string
238+
Pi_virtual_serial_number string
238239
Pi_volume_clone_task_id string
239240
Pi_volume_group_id string
240241
Pi_volume_group_name string
@@ -1283,6 +1284,12 @@ func init() {
12831284
fmt.Println("[INFO] Set the environment variable PI_VOLUME_CLONE_TASK_ID for testing Pi_volume_clone_task_id resource else it is set to default value 'terraform-test-volume-clone-task-id'")
12841285
}
12851286

1287+
Pi_virtual_serial_number = os.Getenv("PI_VIRTUAL_SERIAL_NUMBER")
1288+
if Pi_volume_clone_task_id == "" {
1289+
Pi_volume_clone_task_id = "terraform_test_power"
1290+
fmt.Println("[INFO] Set the environment variable PI_VIRTUAL_SERIAL_NUMBER for testing ibm_pi_virtual_serial_number data source else it is set to default value 'terraform-test-power'")
1291+
}
1292+
12861293
Pi_resource_group_id = os.Getenv("PI_RESOURCE_GROUP_ID")
12871294
if Pi_resource_group_id == "" {
12881295
Pi_resource_group_id = ""

ibm/provider/provider.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,8 @@ func Provider() *schema.Provider {
690690
"ibm_pi_storage_types_capacity": power.DataSourceIBMPIStorageTypesCapacity(),
691691
"ibm_pi_system_pools": power.DataSourceIBMPISystemPools(),
692692
"ibm_pi_tenant": power.DataSourceIBMPITenant(),
693+
"ibm_pi_virtual_serial_number": power.DataSourceIBMPIVirtualSerialNumber(),
694+
"ibm_pi_virtual_serial_numbers": power.DataSourceIBMPIVirtualSerialNumbers(),
693695
"ibm_pi_volume_clone": power.DataSourceIBMPIVolumeClone(),
694696
"ibm_pi_volume_flash_copy_mappings": power.DataSourceIBMPIVolumeFlashCopyMappings(),
695697
"ibm_pi_volume_group_details": power.DataSourceIBMPIVolumeGroupDetails(),
@@ -1344,6 +1346,7 @@ func Provider() *schema.Provider {
13441346
"ibm_pi_shared_processor_pool": power.ResourceIBMPISharedProcessorPool(),
13451347
"ibm_pi_snapshot": power.ResourceIBMPISnapshot(),
13461348
"ibm_pi_spp_placement_group": power.ResourceIBMPISPPPlacementGroup(),
1349+
"ibm_pi_virtual_serial_number": power.ResourceIBMPIVirtualSerialNumber(),
13471350
"ibm_pi_volume_attach": power.ResourceIBMPIVolumeAttach(),
13481351
"ibm_pi_volume_clone": power.ResourceIBMPIVolumeClone(),
13491352
"ibm_pi_volume_group_action": power.ResourceIBMPIVolumeGroupAction(),

ibm/service/power/data_source_ibm_pi_instance.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,25 @@ func DataSourceIBMPIInstance() *schema.Resource {
232232
Description: "The virtual cores that are assigned to the instance.",
233233
Type: schema.TypeInt,
234234
},
235+
Attr_VirtualSerialNumber: {
236+
Computed: true,
237+
Description: "Virtual Serial Number information",
238+
Elem: &schema.Resource{
239+
Schema: map[string]*schema.Schema{
240+
Attr_Description: {
241+
Computed: true,
242+
Description: "Description of the Virtual Serial Number",
243+
Type: schema.TypeString,
244+
},
245+
Attr_Serial: {
246+
Computed: true,
247+
Description: "Virtual serial number.",
248+
Type: schema.TypeString,
249+
},
250+
},
251+
},
252+
Type: schema.TypeList,
253+
},
235254
Attr_Volumes: {
236255
Computed: true,
237256
Description: "List of volume IDs that are attached to the instance.",
@@ -311,6 +330,9 @@ func dataSourceIBMPIInstancesRead(ctx context.Context, d *schema.ResourceData, m
311330
if powervmdata.Fault != nil {
312331
d.Set(Attr_Fault, flattenPvmInstanceFault(powervmdata.Fault))
313332
}
333+
if powervmdata.VirtualSerialNumber != nil {
334+
d.Set(Attr_VirtualSerialNumber, flattenVirtualSerialNumberToList(powervmdata.VirtualSerialNumber))
335+
}
314336

315337
return nil
316338
}

ibm/service/power/data_source_ibm_pi_instances.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,25 @@ func DataSourceIBMPIInstances() *schema.Resource {
213213
Description: "The virtual cores that are assigned to the instance.",
214214
Type: schema.TypeInt,
215215
},
216+
Attr_VirtualSerialNumber: {
217+
Computed: true,
218+
Description: "Virtual Serial Number information",
219+
Elem: &schema.Resource{
220+
Schema: map[string]*schema.Schema{
221+
Attr_Description: {
222+
Computed: true,
223+
Description: "Description of the Virtual Serial Number",
224+
Type: schema.TypeString,
225+
},
226+
Attr_Serial: {
227+
Computed: true,
228+
Description: "Virtual serial number.",
229+
Type: schema.TypeString,
230+
},
231+
},
232+
},
233+
Type: schema.TypeList,
234+
},
216235
},
217236
},
218237
Type: schema.TypeList,
@@ -290,6 +309,10 @@ func flattenPvmInstances(list []*models.PVMInstanceReference, meta interface{})
290309
l[Attr_Fault] = flattenPvmInstanceFault(i.Fault)
291310
}
292311

312+
if i.VirtualSerialNumber != nil {
313+
l[Attr_VirtualSerialNumber] = flattenVirtualSerialNumberToList(i.VirtualSerialNumber)
314+
}
315+
293316
result = append(result, l)
294317
}
295318
return result
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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/terraform-provider-ibm/ibm/conns"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
14+
)
15+
16+
// Datasource to get a virtual serial number in a power instance
17+
func DataSourceIBMPIVirtualSerialNumber() *schema.Resource {
18+
return &schema.Resource{
19+
ReadContext: dataSourceIBMPIVirtualSerialNumberRead,
20+
Schema: map[string]*schema.Schema{
21+
// Arguments
22+
Arg_CloudInstanceID: {
23+
Description: "The GUID of the service instance associated with an account.",
24+
Required: true,
25+
Type: schema.TypeString,
26+
ValidateFunc: validation.NoZeroValues,
27+
},
28+
Arg_Serial: {
29+
Description: "Virtual serial number.",
30+
Required: true,
31+
Type: schema.TypeString,
32+
ValidateFunc: validation.NoZeroValues,
33+
},
34+
35+
// Attributes
36+
Attr_Description: {
37+
Computed: true,
38+
Description: "Description of virtual serial number.",
39+
Type: schema.TypeString,
40+
},
41+
Attr_PVMInstanceID: {
42+
Computed: true,
43+
Description: "ID of PVM instance virtual serial number is attached to.",
44+
Type: schema.TypeString,
45+
},
46+
},
47+
}
48+
}
49+
50+
func dataSourceIBMPIVirtualSerialNumberRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
51+
sess, err := meta.(conns.ClientSession).IBMPISession()
52+
if err != nil {
53+
return diag.FromErr(err)
54+
}
55+
56+
cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
57+
client := instance.NewIBMPIVSNClient(ctx, sess, cloudInstanceID)
58+
59+
vsnInput := d.Get(Arg_Serial).(string)
60+
virtualSerialNumberData, err := client.Get(vsnInput)
61+
if err != nil {
62+
return diag.FromErr(err)
63+
}
64+
65+
id := *virtualSerialNumberData.Serial
66+
d.SetId(id)
67+
d.Set(Attr_Description, virtualSerialNumberData.Description)
68+
if virtualSerialNumberData.PvmInstanceID != nil {
69+
d.Set(Attr_PVMInstanceID, virtualSerialNumberData.PvmInstanceID)
70+
}
71+
72+
return nil
73+
}
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+
acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
11+
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
13+
)
14+
15+
func TestAccIBMPIVirtualSerialNumber(t *testing.T) {
16+
vsnData := "data.ibm_pi_virtual_serial_number.testacc_virtual_serial_number"
17+
resource.Test(t, resource.TestCase{
18+
PreCheck: func() { acc.TestAccPreCheck(t) },
19+
Providers: acc.TestAccProviders,
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccCheckIBMPIVirtualSerialNumberConfig(),
23+
Check: resource.ComposeTestCheckFunc(
24+
resource.TestCheckResourceAttrSet(vsnData, "id"),
25+
),
26+
},
27+
},
28+
})
29+
}
30+
31+
func testAccCheckIBMPIVirtualSerialNumberConfig() string {
32+
return fmt.Sprintf(`
33+
data "ibm_pi_virtual_serial_number" "testacc_virtual_serial_number" {
34+
pi_cloud_instance_id = "%s"
35+
pi_serial = "%s"
36+
}`, acc.Pi_cloud_instance_id, acc.Pi_virtual_serial_number)
37+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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/terraform-provider-ibm/ibm/conns"
11+
"github.com/hashicorp/go-uuid"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
15+
)
16+
17+
// Datasource to list Cloud Connections in a power instance
18+
func DataSourceIBMPIVirtualSerialNumbers() *schema.Resource {
19+
return &schema.Resource{
20+
ReadContext: dataSourceIBMPIVirtualSerialNumbersRead,
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_PVMInstanceId: {
30+
Description: "ID of PVM instance to get virtual serial number attached to.",
31+
Optional: true,
32+
Type: schema.TypeString,
33+
},
34+
35+
// Attributes
36+
Attr_VirtualSerialNumbers: {
37+
Computed: true,
38+
Elem: &schema.Resource{
39+
Schema: map[string]*schema.Schema{
40+
Attr_Description: {
41+
Computed: true,
42+
Description: "Description of virtual serial number.",
43+
Type: schema.TypeString,
44+
},
45+
Attr_PVMInstanceID: {
46+
Computed: true,
47+
Description: "ID of PVM instance virtual serial number is attached to.",
48+
Type: schema.TypeString,
49+
},
50+
Attr_Serial: {
51+
Computed: true,
52+
Description: "Virtual Serial Number.",
53+
Type: schema.TypeString,
54+
},
55+
},
56+
},
57+
Type: schema.TypeList,
58+
},
59+
},
60+
}
61+
}
62+
63+
func dataSourceIBMPIVirtualSerialNumbersRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
64+
sess, err := meta.(conns.ClientSession).IBMPISession()
65+
if err != nil {
66+
return diag.FromErr(err)
67+
}
68+
69+
cloudInstanceID := d.Get(Arg_CloudInstanceID).(string)
70+
71+
client := instance.NewIBMPIVSNClient(ctx, sess, cloudInstanceID)
72+
73+
var pvmInstanceID string
74+
if instanceID, ok := d.GetOk(Arg_PVMInstanceId); ok {
75+
pvmInstanceID = instanceID.(string)
76+
}
77+
78+
vsns, err := client.GetAll(&pvmInstanceID)
79+
if err != nil {
80+
return diag.FromErr(err)
81+
}
82+
83+
vsnMapList := make([]map[string]interface{}, 0)
84+
for _, vsn := range vsns {
85+
v := make(map[string]interface{})
86+
v[Attr_Description] = vsn.Description
87+
v[Attr_PVMInstanceID] = vsn.PvmInstanceID
88+
v[Attr_Serial] = vsn.Serial
89+
vsnMapList = append(vsnMapList, v)
90+
}
91+
92+
var clientgenU, _ = uuid.GenerateUUID()
93+
d.SetId(clientgenU)
94+
d.Set(Attr_VirtualSerialNumbers, vsnMapList)
95+
return nil
96+
}
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+
acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
11+
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
13+
)
14+
15+
func TestAccIBMPIVirtualSerialNumbers(t *testing.T) {
16+
vsnData := "data.ibm_pi_virtual_serial_numbers.testacc_virtual_serial_numbers"
17+
resource.Test(t, resource.TestCase{
18+
PreCheck: func() { acc.TestAccPreCheck(t) },
19+
Providers: acc.TestAccProviders,
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccCheckIBMPIVirtualSerialNumbersConfig(),
23+
Check: resource.ComposeTestCheckFunc(
24+
resource.TestCheckResourceAttrSet(vsnData, "id"),
25+
resource.TestCheckResourceAttrSet(vsnData, "virtual_serial_numbers.#"),
26+
),
27+
},
28+
},
29+
})
30+
}
31+
32+
func testAccCheckIBMPIVirtualSerialNumbersConfig() string {
33+
return fmt.Sprintf(`
34+
data "ibm_pi_virtual_serial_numbers" "testacc_virtual_serial_numbers" {
35+
pi_cloud_instance_id = "%s"
36+
}`, acc.Pi_cloud_instance_id)
37+
}

0 commit comments

Comments
 (0)