Skip to content

Commit

Permalink
Fix baremetal issue #472
Browse files Browse the repository at this point in the history
  • Loading branch information
hkantare committed Jan 16, 2019
1 parent 7cb346d commit e5e25a7
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 15 deletions.
66 changes: 63 additions & 3 deletions ibm/resource_ibm_compute_bare_metal.go
Original file line number Diff line number Diff line change
Expand Up @@ -952,17 +952,43 @@ func setHardwareNotes(id int, d dataRetriever, meta interface{}) error {

// Returns a price from an item list.
// Example usage : getItemPriceId(items, 'server', 'INTEL_XEON_2690_2_60')
func getItemPriceId(items []datatypes.Product_Item, categoryCode string, keyName string) (datatypes.Product_Item_Price, error) {
func getItemPriceId(items []datatypes.Product_Item, categoryCode string, keyName string, capacity ...int) (datatypes.Product_Item_Price, error) {
availableItems := ""
for _, item := range items {
for _, itemCategory := range item.Categories {
if *itemCategory.CategoryCode == categoryCode {
availableItems = availableItems + *item.KeyName + " ( " + *item.Description + " ) , "
if *item.KeyName == keyName {
for _, price := range item.Prices {
capacityMin := -1
capacityMax := -1
var err error

if price.CapacityRestrictionMinimum != nil && price.CapacityRestrictionMaximum != nil && *price.CapacityRestrictionType == "CORE" {
capacityMin, err = strconv.Atoi(*price.CapacityRestrictionMinimum)
if err != nil {
return datatypes.Product_Item_Price{}, err
}
capacityMax, err = strconv.Atoi(*price.CapacityRestrictionMaximum)
if err != nil {
return datatypes.Product_Item_Price{}, err
}

}
for _, category := range price.Categories {
if *category.CategoryCode == categoryCode && price.LocationGroupId == nil {
return datatypes.Product_Item_Price{Id: price.Id}, nil

if len(capacity) > 0 && capacityMin != -1 && capacityMax != -1 {

if capacity[0] >= capacityMin && capacity[0] <= capacityMax {
return datatypes.Product_Item_Price{Id: price.Id}, nil
}

} else {
return datatypes.Product_Item_Price{Id: price.Id}, nil

}

}
}
}
Expand Down Expand Up @@ -1021,10 +1047,28 @@ func getMonthlyBareMetalOrder(d *schema.ResourceData, meta interface{}) (datatyp
if err != nil {
return datatypes.Container_Product_Order{}, err
}
os, err := getItemPriceId(items, "os", osKeyName.(string))

coreCapacity := -1

coreCapacity = getCoreCapacity(items, "server", d.Get("process_key_name").(string))
if err != nil {
return datatypes.Container_Product_Order{}, err
}
var os datatypes.Product_Item_Price

if coreCapacity == -1 {
os, err = getItemPriceId(items, "os", osKeyName.(string))
if err != nil {
return datatypes.Container_Product_Order{}, err
}

} else {
os, err = getItemPriceId(items, "os", osKeyName.(string), coreCapacity)
if err != nil {
return datatypes.Container_Product_Order{}, err
}

}

ram, err := findMemoryItemPriceId(items, d)
if err != nil {
Expand Down Expand Up @@ -1468,3 +1512,19 @@ func getCommonItemPriceID(items []datatypes.Product_Item, categoryCode string, k
}
return false, datatypes.Product_Item_Price{}
}

func getCoreCapacity(items []datatypes.Product_Item, categoryCode string, keyName string) int {
availableItems := ""
for _, item := range items {
for _, itemCategory := range item.Categories {
if *itemCategory.CategoryCode == categoryCode {
availableItems = availableItems + *item.KeyName + " ( " + *item.Description + " ) , "
if *item.KeyName == keyName && item.TotalPhysicalCoreCapacity != nil {
return *item.TotalPhysicalCoreCapacity

}
}
}
}
return -1
}
22 changes: 11 additions & 11 deletions ibm/resource_ibm_compute_bare_metal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func TestAccIBMComputeBareMetal_Basic(t *testing.T) {
resource.TestCheckResourceAttr(
configName, "os_reference_code", "UBUNTU_16_64"),
resource.TestCheckResourceAttr(
configName, "datacenter", "dal01"),
configName, "datacenter", "dal10"),
resource.TestCheckResourceAttr(
configName, "network_speed", "100"),
resource.TestCheckResourceAttr(
Expand Down Expand Up @@ -93,7 +93,7 @@ func TestAccIBMComputeBareMetal_With_IPV6(t *testing.T) {
resource.TestCheckResourceAttr(
configName, "os_reference_code", "UBUNTU_16_64"),
resource.TestCheckResourceAttr(
configName, "datacenter", "dal01"),
configName, "datacenter", "dal10"),
resource.TestCheckResourceAttr(
configName, "network_speed", "100"),
resource.TestCheckResourceAttr(
Expand Down Expand Up @@ -152,7 +152,7 @@ func TestAccIBMComputeBareMetal_With_Unbonded_Port_Speed(t *testing.T) {
resource.TestCheckResourceAttr(
configName, "os_reference_code", "UBUNTU_16_64"),
resource.TestCheckResourceAttr(
configName, "datacenter", "dal01"),
configName, "datacenter", "dal10"),
resource.TestCheckResourceAttr(
configName, "network_speed", "1000"),
resource.TestCheckResourceAttr(
Expand Down Expand Up @@ -195,7 +195,7 @@ func TestAccIBMComputeBareMetal_With_Network_Storage_Access(t *testing.T) {
resource.TestCheckResourceAttr(
configInstance, "domain", domain),
resource.TestCheckResourceAttr(
configInstance, "datacenter", "wdc04"),
configInstance, "datacenter", "dal10"),
resource.TestCheckResourceAttr(
configInstance, "hourly_billing", "true"),
resource.TestCheckResourceAttr(
Expand Down Expand Up @@ -395,7 +395,7 @@ resource "ibm_compute_bare_metal" "terraform-acceptance-test-1" {
hostname = "%s"
domain = "terraformuat.ibm.com"
os_reference_code = "UBUNTU_16_64"
datacenter = "dal01"
datacenter = "dal10"
network_speed = 100
hourly_billing = true
private_network_only = false
Expand All @@ -414,7 +414,7 @@ resource "ibm_compute_bare_metal" "terraform-acceptance-test-1" {
hostname = "%s"
domain = "terraformuat.ibm.com"
os_reference_code = "UBUNTU_16_64"
datacenter = "dal01"
datacenter = "dal10"
network_speed = 100
hourly_billing = true
private_network_only = false
Expand All @@ -432,7 +432,7 @@ resource "ibm_compute_bare_metal" "terraform-bm-storage-access" {
hostname = "%s"
domain = "%s"
os_reference_code = "UBUNTU_16_64"
datacenter = "wdc04"
datacenter = "dal10"
network_speed = 100
hourly_billing = true
private_network_only = false
Expand All @@ -457,7 +457,7 @@ resource "ibm_compute_bare_metal" "terraform-bm-storage-access" {
hostname = "%s"
domain = "%s"
os_reference_code = "UBUNTU_16_64"
datacenter = "wdc04"
datacenter = "dal10"
network_speed = 100
hourly_billing = true
private_network_only = false
Expand Down Expand Up @@ -520,7 +520,7 @@ func testBareMetalCustomConfigWithGpus(hostname, domain string) string {
os_key_name = "OS_WINDOWS_2012_R2_FULL_DC_64_BIT_2"
hostname = "%s"
domain = "%s"
datacenter = "ams01"
datacenter = "dal05"
network_speed = 1000
public_bandwidth = 500
disk_key_names = ["HARD_DRIVE_1_00_TB_SATA_2", "HARD_DRIVE_1_00_TB_SATA_2"]
Expand All @@ -535,7 +535,7 @@ resource "ibm_compute_bare_metal" "terraform-acceptance-test-1" {
hostname = "%s"
domain = "terraformuat.ibm.com"
os_reference_code = "UBUNTU_16_64"
datacenter = "dal01"
datacenter = "dal10"
network_speed = 1000
unbonded_network = true
hourly_billing = true
Expand All @@ -554,7 +554,7 @@ resource "ibm_compute_bare_metal" "terraform-acceptance-test-1" {
hostname = "%s"
domain = "terraformuat.ibm.com"
os_reference_code = "UBUNTU_16_64"
datacenter = "dal01"
datacenter = "dal10"
ipv6_enabled = true
ipv6_static_enabled = true
secondary_ip_count = 4
Expand Down
2 changes: 1 addition & 1 deletion ibm/resource_ibm_lbaas.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const (

const NOT_FOUND = "SoftLayer_Exception_Network_LBaaS_ObjectNotFound"

const productItemMaskWithPriceLocationGroupID = "id,categories,capacity,description,units,keyName,prices[id,categories[id,name,categoryCode],locationGroupId]"
const productItemMaskWithPriceLocationGroupID = "id,categories,capacity,description,units,keyName,prices[id,categories[id,name,categoryCode],locationGroupId,capacityRestrictionMaximum,capacityRestrictionMinimum,capacityRestrictionType],totalPhysicalCoreCapacity"

func init() {

Expand Down

0 comments on commit e5e25a7

Please sign in to comment.