Skip to content

Commit 65685df

Browse files
feat: volume-qos-mode feature development (IBM-Cloud#6498)
1 parent a2f76f1 commit 65685df

24 files changed

+613
-10
lines changed

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ github.com/IBM/go-sdk-core/v5 v5.6.3/go.mod h1:tt/B9rxLkRtglE7pvqLuYikgCXaZFL3bt
125125
github.com/IBM/go-sdk-core/v5 v5.9.5/go.mod h1:YlOwV9LeuclmT/qi/LAK2AsobbAP42veV0j68/rlZsE=
126126
github.com/IBM/go-sdk-core/v5 v5.10.2/go.mod h1:WZPFasUzsKab/2mzt29xPcfruSk5js2ywAPwW4VJjdI=
127127
github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns=
128+
github.com/IBM/go-sdk-core/v5 v5.20.1 h1:dzeyifh1kfRLw8VfAIIS5okZYuqLTqplPZP/Kcsgdlo=
129+
github.com/IBM/go-sdk-core/v5 v5.20.1/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw=
128130
github.com/IBM/go-sdk-core/v5 v5.21.0 h1:DUnYhvC4SoC8T84rx5omnhY3+xcQg/Whyoa3mDPIMkk=
129131
github.com/IBM/go-sdk-core/v5 v5.21.0/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw=
130132
github.com/IBM/ibm-backup-recovery-sdk-go v1.0.3 h1:9TZHocmCfgmF8TGVrpP1kFyQbjcqLNW7+bM07lefpKQ=

ibm/service/vpc/data_source_ibm_is_instance.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,11 @@ func DataSourceIBMISInstance() *schema.Resource {
251251
Computed: true,
252252
Description: "The total bandwidth (in megabits per second) shared across the instance's network interfaces and storage volumes",
253253
},
254+
isInstanceVolumeBandwidthQoSMode: {
255+
Type: schema.TypeString,
256+
Computed: true,
257+
Description: "The volume bandwidth QoS mode for this virtual server instance.",
258+
},
254259

255260
isInstanceTotalNetworkBandwidth: {
256261
Type: schema.TypeInt,
@@ -1473,6 +1478,12 @@ func instanceGetByName(context context.Context, d *schema.ResourceData, meta int
14731478
}
14741479
}
14751480

1481+
if instance.VolumeBandwidthQosMode != nil {
1482+
if err = d.Set(isInstanceVolumeBandwidthQoSMode, string(*instance.VolumeBandwidthQosMode)); err != nil {
1483+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting volume_bandwidth_qos_mode: %s", err), "(Data) ibm_is_instance", "read", "set-volume_bandwidth_qos_mode").GetDiag()
1484+
}
1485+
}
1486+
14761487
if instance.TotalNetworkBandwidth != nil {
14771488
if err = d.Set("total_network_bandwidth", flex.IntValue(instance.TotalNetworkBandwidth)); err != nil {
14781489
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting total_network_bandwidth: %s", err), "(Data) ibm_is_instance", "read", "set-total_network_bandwidth").GetDiag()

ibm/service/vpc/data_source_ibm_is_instance_profile.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,32 @@ func DataSourceIBMISInstanceProfile() *schema.Resource {
780780
},
781781
},
782782
},
783+
"volume_bandwidth_qos_modes": &schema.Schema{
784+
Type: schema.TypeList,
785+
Computed: true,
786+
Elem: &schema.Resource{
787+
Schema: map[string]*schema.Schema{
788+
"type": {
789+
Type: schema.TypeString,
790+
Computed: true,
791+
Description: "The type for this profile field.",
792+
},
793+
"default": {
794+
Type: schema.TypeString,
795+
Computed: true,
796+
Description: "The default volume bandwidth QoS mode for this profile.",
797+
},
798+
"values": {
799+
Type: schema.TypeList,
800+
Computed: true,
801+
Description: "The permitted volume bandwidth QoS modes for an instance using this profile.",
802+
Elem: &schema.Schema{
803+
Type: schema.TypeString,
804+
},
805+
},
806+
},
807+
},
808+
},
783809
},
784810
}
785811
}
@@ -992,6 +1018,12 @@ func instanceProfileGet(context context.Context, d *schema.ResourceData, meta in
9921018
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting vcpu_count: %s", err), "(Data) ibm_is_instance_profile", "read", "set-vcpu_count").GetDiag()
9931019
}
9941020
}
1021+
if profile.VolumeBandwidthQosModes != nil {
1022+
err = d.Set("volume_bandwidth_qos_modes", dataSourceInstanceProfileFlattenVolumeBandwidthQoSMode(*profile.VolumeBandwidthQosModes.(*vpcv1.InstanceProfileVolumeBandwidthQoSModes)))
1023+
if err != nil {
1024+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting volume_bandwidth_qos_modes: %s", err), "(Data) ibm_is_instance_profile", "read", "set-volume_bandwidth_qos_modes").GetDiag()
1025+
}
1026+
}
9951027
return nil
9961028
}
9971029

@@ -1318,6 +1350,13 @@ func dataSourceInstanceProfileFlattenVcpuCount(result vpcv1.InstanceProfileVcpu)
13181350

13191351
return finalList
13201352
}
1353+
func dataSourceInstanceProfileFlattenVolumeBandwidthQoSMode(result vpcv1.InstanceProfileVolumeBandwidthQoSModes) (finalList []map[string]interface{}) {
1354+
finalList = []map[string]interface{}{}
1355+
finalMap := dataSourceInstanceProfileVolumeBandwidthQoSModeToMap(result)
1356+
finalList = append(finalList, finalMap)
1357+
1358+
return finalList
1359+
}
13211360

13221361
func dataSourceInstanceProfileVcpuCountToMap(vcpuCountItem vpcv1.InstanceProfileVcpu) (vcpuCountMap map[string]interface{}) {
13231362
vcpuCountMap = map[string]interface{}{}
@@ -1347,6 +1386,21 @@ func dataSourceInstanceProfileVcpuCountToMap(vcpuCountItem vpcv1.InstanceProfile
13471386
return vcpuCountMap
13481387
}
13491388

1389+
func dataSourceInstanceProfileVolumeBandwidthQoSModeToMap(volumeBandwidthQoSModeItem vpcv1.InstanceProfileVolumeBandwidthQoSModes) (volumeBandwidthQoSModeItemMap map[string]interface{}) {
1390+
volumeBandwidthQoSModeItemMap = map[string]interface{}{}
1391+
1392+
if volumeBandwidthQoSModeItem.Type != nil {
1393+
volumeBandwidthQoSModeItemMap["type"] = volumeBandwidthQoSModeItem.Type
1394+
}
1395+
if volumeBandwidthQoSModeItem.Default != nil {
1396+
volumeBandwidthQoSModeItemMap["default"] = volumeBandwidthQoSModeItem.Default
1397+
}
1398+
if volumeBandwidthQoSModeItem.Values != nil {
1399+
volumeBandwidthQoSModeItemMap["values"] = volumeBandwidthQoSModeItem.Values
1400+
}
1401+
return volumeBandwidthQoSModeItemMap
1402+
}
1403+
13501404
func dataSourceInstanceProfileFlattenDisks(result []vpcv1.InstanceProfileDisk) (disks []map[string]interface{}) {
13511405
for _, disksItem := range result {
13521406
disks = append(disks, dataSourceInstanceProfileDisksToMap(disksItem))

ibm/service/vpc/data_source_ibm_is_instance_profile_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,40 @@ func TestAccIBMISInstanceProfileDataSource_basic(t *testing.T) {
4646
},
4747
})
4848
}
49+
50+
func TestAccIBMISInstanceProfileDataSource_QoSMode(t *testing.T) {
51+
resName := "data.ibm_is_instance_profile.test1"
52+
53+
resource.Test(t, resource.TestCase{
54+
PreCheck: func() { acc.TestAccPreCheck(t) },
55+
Providers: acc.TestAccProviders,
56+
Steps: []resource.TestStep{
57+
{
58+
Config: testAccCheckIBMISInstanceProfileDataSourceConfig(),
59+
Check: resource.ComposeTestCheckFunc(
60+
resource.TestCheckResourceAttr(resName, "name", acc.InstanceProfileName),
61+
resource.TestCheckResourceAttrSet(resName, "family"),
62+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "bandwidth.#"),
63+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "family"),
64+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "href"),
65+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "memory.#"),
66+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "architecture"),
67+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "port_speed.#"),
68+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "vcpu_architecture.#"),
69+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "vcpu_count.#"),
70+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "vcpu_manufacturer.#"),
71+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "vcpu_manufacturer.0.type"),
72+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "vcpu_manufacturer.0.value"),
73+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "network_interface_count.0.type"),
74+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "network_attachment_count.0.type"),
75+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "network_attachment_count.#"),
76+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profile.test1", "volume_bandwidth_qos_modes.#"),
77+
),
78+
},
79+
},
80+
})
81+
}
82+
4983
func TestAccIBMISInstanceProfileDataSource_cluster(t *testing.T) {
5084
resName := "data.ibm_is_instance_profile.test1"
5185

ibm/service/vpc/data_source_ibm_is_instance_profiles.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,32 @@ func DataSourceIBMISInstanceProfiles() *schema.Resource {
759759
},
760760
},
761761
},
762+
"volume_bandwidth_qos_modes": &schema.Schema{
763+
Type: schema.TypeList,
764+
Computed: true,
765+
Elem: &schema.Resource{
766+
Schema: map[string]*schema.Schema{
767+
"type": {
768+
Type: schema.TypeString,
769+
Computed: true,
770+
Description: "The type for this profile field.",
771+
},
772+
"default": {
773+
Type: schema.TypeString,
774+
Computed: true,
775+
Description: "The default volume bandwidth QoS mode for this profile.",
776+
},
777+
"values": {
778+
Type: schema.TypeList,
779+
Computed: true,
780+
Description: "The permitted volume bandwidth QoS modes for an instance using this profile.",
781+
Elem: &schema.Schema{
782+
Type: schema.TypeString,
783+
},
784+
},
785+
},
786+
},
787+
},
762788
"vcpu_manufacturer": &schema.Schema{
763789
Type: schema.TypeList,
764790
Computed: true,
@@ -948,6 +974,12 @@ func instanceProfilesList(context context.Context, d *schema.ResourceData, meta
948974
vcpuCountList = append(vcpuCountList, vcpuCountMap)
949975
l["vcpu_count"] = vcpuCountList
950976
}
977+
if profile.VolumeBandwidthQosModes != nil {
978+
volumeBandwidthQosModesList := []map[string]interface{}{}
979+
volumeBandwidthQosModesMap := dataSourceInstanceProfileVolumeBandwidthQoSModeToMap(*profile.VolumeBandwidthQosModes.(*vpcv1.InstanceProfileVolumeBandwidthQoSModes))
980+
volumeBandwidthQosModesList = append(volumeBandwidthQosModesList, volumeBandwidthQosModesMap)
981+
l["volume_bandwidth_qos_modes"] = volumeBandwidthQosModesList
982+
}
951983
// Changes for manufacturer for AMD Support.
952984
// reduce the line of code here. - sumit's suggestions
953985
if profile.VcpuManufacturer != nil {

ibm/service/vpc/data_source_ibm_is_instance_profiles_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,41 @@ func TestAccIBMISInstanceProfilesDataSource_basic(t *testing.T) {
4747
},
4848
})
4949
}
50+
51+
func TestAccIBMISInstanceProfilesDataSource_QoS(t *testing.T) {
52+
resName := "data.ibm_is_instance_profiles.test1"
53+
54+
resource.Test(t, resource.TestCase{
55+
PreCheck: func() { acc.TestAccPreCheck(t) },
56+
Providers: acc.TestAccProviders,
57+
Steps: []resource.TestStep{
58+
{
59+
Config: testAccCheckIBMISInstanceProfilesDataSourceConfig(),
60+
Check: resource.ComposeTestCheckFunc(
61+
resource.TestCheckResourceAttrSet(resName, "profiles.0.name"),
62+
resource.TestCheckResourceAttrSet(resName, "profiles.0.family"),
63+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.bandwidth.#"),
64+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.family"),
65+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.href"),
66+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.memory.#"),
67+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.architecture"),
68+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.port_speed.#"),
69+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.vcpu_architecture.#"),
70+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.vcpu_count.#"),
71+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.network_interface_count.#"),
72+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.network_interface_count.0.type"),
73+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.network_attachment_count.#"),
74+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.network_attachment_count.0.type"),
75+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.vcpu_manufacturer.#"),
76+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.vcpu_manufacturer.0.type"),
77+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.vcpu_manufacturer.0.value"),
78+
resource.TestCheckResourceAttrSet("data.ibm_is_instance_profiles.test1", "profiles.0.volume_bandwidth_qos_modes.#"),
79+
),
80+
},
81+
},
82+
})
83+
}
84+
5085
func TestAccIBMISInstanceProfilesDataSource_cluster(t *testing.T) {
5186
resName := "data.ibm_is_instance_profiles.test1"
5287

ibm/service/vpc/data_source_ibm_is_instance_template.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,11 @@ func DataSourceIBMISInstanceTemplate() *schema.Resource {
214214
Computed: true,
215215
Description: "The amount of bandwidth (in megabits per second) allocated exclusively to instance storage volumes",
216216
},
217+
isInstanceVolumeBandwidthQoSMode: {
218+
Type: schema.TypeString,
219+
Computed: true,
220+
Description: "The volume bandwidth QoS mode for this virtual server instance.",
221+
},
217222
isInstanceDefaultTrustedProfileAutoLink: {
218223
Type: schema.TypeBool,
219224
Computed: true,
@@ -1226,6 +1231,12 @@ func dataSourceIBMISInstanceTemplateRead(context context.Context, d *schema.Reso
12261231
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting total_volume_bandwidth: %s", err), "(Data) ibm_is_instance_template", "read", "set-total_volume_bandwidth").GetDiag()
12271232
}
12281233
}
1234+
if instanceTemplate.VolumeBandwidthQosMode != nil {
1235+
d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode))
1236+
if err = d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode)); err != nil {
1237+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting volume_bandwidth_qos_mode: %s", err), "(Data) ibm_is_instance_template", "read", "set-volume_bandwidth_qos_mode").GetDiag()
1238+
}
1239+
}
12291240

12301241
if instanceTemplate.PrimaryNetworkInterface != nil {
12311242
interfaceList := make([]map[string]interface{}, 0)
@@ -1640,6 +1651,12 @@ func dataSourceIBMISInstanceTemplateRead(context context.Context, d *schema.Reso
16401651
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting total_volume_bandwidth: %s", err), "(Data) ibm_is_instance_template", "read", "set-total_volume_bandwidth").GetDiag()
16411652
}
16421653
}
1654+
if instanceTemplate.VolumeBandwidthQosMode != nil {
1655+
d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode))
1656+
if err = d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode)); err != nil {
1657+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting volume_bandwidth_qos_mode: %s", err), "(Data) ibm_is_instance_template", "read", "set-volume_bandwidth_qos_mode").GetDiag()
1658+
}
1659+
}
16431660

16441661
if instanceTemplate.PrimaryNetworkInterface != nil {
16451662
interfaceList := make([]map[string]interface{}, 0)
@@ -2165,6 +2182,12 @@ func dataSourceIBMISInstanceTemplateRead(context context.Context, d *schema.Reso
21652182
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting total_volume_bandwidth: %s", err), "(Data) ibm_is_instance_template", "read", "set-total_volume_bandwidth").GetDiag()
21662183
}
21672184
}
2185+
if instanceTemplate.VolumeBandwidthQosMode != nil {
2186+
d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode))
2187+
if err = d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode)); err != nil {
2188+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting volume_bandwidth_qos_mode: %s", err), "(Data) ibm_is_instance_template", "read", "set-volume_bandwidth_qos_mode").GetDiag()
2189+
}
2190+
}
21682191

21692192
if instanceTemplate.Image != nil {
21702193
imageInf := instanceTemplate.Image
@@ -2540,6 +2563,12 @@ func dataSourceIBMISInstanceTemplateRead(context context.Context, d *schema.Reso
25402563
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting total_volume_bandwidth: %s", err), "(Data) ibm_is_instance_template", "read", "set-total_volume_bandwidth").GetDiag()
25412564
}
25422565
}
2566+
if instanceTemplate.VolumeBandwidthQosMode != nil {
2567+
d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode))
2568+
if err = d.Set(isInstanceVolumeBandwidthQoSMode, string(*instanceTemplate.VolumeBandwidthQosMode)); err != nil {
2569+
return flex.DiscriminatedTerraformErrorf(err, fmt.Sprintf("Error setting volume_bandwidth_qos_mode: %s", err), "(Data) ibm_is_instance_template", "read", "set-volume_bandwidth_qos_mode").GetDiag()
2570+
}
2571+
}
25432572

25442573
if instanceTemplate.VPC != nil {
25452574
vpcInf := instanceTemplate.VPC

ibm/service/vpc/data_source_ibm_is_instance_template_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,35 @@ func TestAccIBMISInstanceTemplate_dataBasic(t *testing.T) {
4040
},
4141
})
4242
}
43+
44+
func TestAccIBMISInstanceTemplate_QoS(t *testing.T) {
45+
randInt := acctest.RandIntRange(600, 700)
46+
publicKey := strings.TrimSpace(`
47+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQ+WiiUR1Jg3oGSmB/2//GJ3XnotriBiGN6t3iwGces6sUsvRkza1t0Mf05DKZxC/zp0WvDTvbit2gTkF9sD37OZSn5aCJk1F5URk/JNPmz25ZogkICFL4OUfhrE3mnyKio6Bk1JIEIypR5PRtGxY9vFDUfruADDLfRi+dGwHF6U9RpvrDRo3FNtI8T0GwvWwFE7bg63vLz65CjYY5XqH9z/YWz/asH6BKumkwiphLGhuGn03+DV6DkIZqr3Oh13UDjMnTdgv1y/Kou5UM3CK1dVsmLRXPEf2KUWUq1EwRfrJXkPOrBwn8to+Yydo57FgrRM9Qw8uzvKmnVxfKW6iG3oSGA0L6ROuCq1lq0MD8ySLd56+d1ftSDaUq+0/Yt9vK3olzVP0/iZobD7chbGqTLMCzL4/CaIUR/UmX08EA0Oh0DdyAdj3UUNETAj3W8gBrV6xLR7fZAJ8roX2BKb4K8Ed3YqzgiY0zgjqvpBYl9xZl0jgVX0qMFaEa6+CeGI8= root@ffd8363b1226
48+
`)
49+
vpcName := fmt.Sprintf("testvpc%d", randInt)
50+
subnetName := fmt.Sprintf("testsubnet%d", randInt)
51+
templateName := fmt.Sprintf("testtemplate%d", randInt)
52+
sshKeyName := fmt.Sprintf("testsshkey%d", randInt)
53+
qosMode := "weighted"
54+
resource.Test(t, resource.TestCase{
55+
PreCheck: func() { acc.TestAccPreCheck(t) },
56+
Providers: acc.TestAccProviders,
57+
CheckDestroy: testAccCheckIBMISInstanceGroupDestroy,
58+
Steps: []resource.TestStep{
59+
{
60+
Config: testAccCheckIBMISInstanceTemplateDQoSConfig(vpcName, subnetName, sshKeyName, publicKey, templateName, qosMode),
61+
Check: resource.ComposeTestCheckFunc(
62+
resource.TestCheckResourceAttr(
63+
"data.ibm_is_instance_template.instance_template_data", "name", templateName),
64+
resource.TestCheckResourceAttrSet(
65+
"data.ibm_is_instance_template.instance_template_data", "volume_bandwidth_qos_mode"),
66+
),
67+
},
68+
},
69+
})
70+
}
71+
4372
func TestAccIBMISInstanceTemplateDatasourceCluster(t *testing.T) {
4473
randInt := acctest.RandIntRange(600, 700)
4574
publicKey := strings.TrimSpace(`
@@ -283,6 +312,14 @@ func TestAccIBMISInstanceTemplate_AllowedUse_Basic(t *testing.T) {
283312
})
284313
}
285314

315+
func testAccCheckIBMISInstanceTemplateDQoSConfig(vpcName, subnetName, sshKeyName, publicKey, templateName, qosMode string) string {
316+
return testAccCheckIBMISInstanceTemplateConfig_QoSMode(vpcName, subnetName, sshKeyName, publicKey, templateName, qosMode) + fmt.Sprintf(`
317+
data "ibm_is_instance_template" "instance_template_data" {
318+
name = ibm_is_instance_template.instancetemplate1.name
319+
}
320+
`)
321+
}
322+
286323
func testAccCheckIBMISInstanceTemplateDConfig(vpcName, subnetName, sshKeyName, publicKey, templateName string) string {
287324
return testAccCheckIBMISInstanceTemplateConfig(vpcName, subnetName, sshKeyName, publicKey, templateName) + fmt.Sprintf(`
288325
data "ibm_is_instance_template" "instance_template_data" {

ibm/service/vpc/data_source_ibm_is_instance_templates.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,11 @@ func DataSourceIBMISInstanceTemplates() *schema.Resource {
278278
Computed: true,
279279
Description: "The amount of bandwidth (in megabits per second) allocated exclusively to instance storage volumes",
280280
},
281+
isInstanceVolumeBandwidthQoSMode: {
282+
Type: schema.TypeString,
283+
Computed: true,
284+
Description: "The volume bandwidth QoS mode for this virtual server instance.",
285+
},
281286
isInstanceDefaultTrustedProfileAutoLink: {
282287
Type: schema.TypeBool,
283288
Computed: true,
@@ -1177,6 +1182,10 @@ func dataSourceIBMISInstanceTemplatesRead(context context.Context, d *schema.Res
11771182
template[isInstanceTotalVolumeBandwidth] = int(*instance.TotalVolumeBandwidth)
11781183
}
11791184

1185+
if instance.VolumeBandwidthQosMode != nil {
1186+
template[isInstanceVolumeBandwidthQoSMode] = *instance.VolumeBandwidthQosMode
1187+
}
1188+
11801189
// vni
11811190

11821191
networkAttachments := []map[string]interface{}{}
@@ -1527,6 +1536,10 @@ func dataSourceIBMISInstanceTemplatesRead(context context.Context, d *schema.Res
15271536
template[isInstanceTotalVolumeBandwidth] = int(*instance.TotalVolumeBandwidth)
15281537
}
15291538

1539+
if instance.VolumeBandwidthQosMode != nil {
1540+
template[isInstanceVolumeBandwidthQoSMode] = *instance.VolumeBandwidthQosMode
1541+
}
1542+
15301543
// vni
15311544

15321545
networkAttachments := []map[string]interface{}{}

0 commit comments

Comments
 (0)