Skip to content

Commit 99f42e8

Browse files
hkantarerenier
authored andcommitted
Fix to get standard price and packageId of the guest (#123)
* Fix to get standard price item (issue #121) * Fix to use same pacakgeId of guest during upgrade
1 parent 82a74c5 commit 99f42e8

File tree

2 files changed

+72
-63
lines changed

2 files changed

+72
-63
lines changed

helpers/product/product.go

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func GetPackageProducts(
105105
mask ...string,
106106
) ([]datatypes.Product_Item, error) {
107107

108-
objectMask := "id,capacity,description,units,keyName,prices[id,categories[id,name,categoryCode]]"
108+
objectMask := "id,capacity,description,units,keyName,prices[id,locationGroupId,categories[id,name,categoryCode]]"
109109
if len(mask) > 0 {
110110
objectMask = mask[0]
111111
}
@@ -158,53 +158,60 @@ func SelectProductPricesByCategory(
158158
isPrivate := strings.Contains(sl.Get(productItem.KeyName, "").(string), "PRIVATE")
159159
isPublic := strings.Contains(sl.Get(productItem.Description, "Public").(string), "Public")
160160
isDedicated := strings.Contains(sl.Get(productItem.KeyName, "").(string), "DEDICATED")
161-
for _, category := range productItem.Prices[0].Categories {
162-
for categoryCode, capacity := range options {
163-
if _, ok := priceCheck[categoryCode]; ok {
164-
continue
165-
}
166-
167-
if productItem.Capacity == nil {
168-
continue
169-
}
170-
171-
if *category.CategoryCode != categoryCode {
172-
continue
173-
}
161+
//Logic taken from softlayer-python @ https://bit.ly/2DV2bBi
162+
for _, p := range productItem.Prices {
163+
if p.LocationGroupId != nil {
164+
continue
165+
}
174166

175-
if *productItem.Capacity != datatypes.Float64(capacity) {
176-
continue
177-
}
167+
for _, category := range p.Categories {
168+
for categoryCode, capacity := range options {
169+
if _, ok := priceCheck[categoryCode]; ok {
170+
continue
171+
}
178172

179-
// Logic taken from softlayer-python @ http://bit.ly/2bN9Gbu
180-
switch categoryCode {
181-
case CPUCategoryCode:
182-
if forPublicCores == isPrivate || forDedicatedHost != isDedicated {
173+
if productItem.Capacity == nil {
183174
continue
184175
}
185-
case NICSpeedCategoryCode:
186-
if forPublicNetwork != isPublic || forDedicatedHost != isDedicated {
176+
177+
if *category.CategoryCode != categoryCode {
187178
continue
188179
}
189-
case MemoryCategoryCode:
190-
if forDedicatedHost != isDedicated {
180+
181+
if *productItem.Capacity != datatypes.Float64(capacity) {
191182
continue
192183
}
193-
}
194184

195-
if strings.HasPrefix(categoryCode, "guest_disk") {
196-
categories := productItem.Prices[0].Categories
197-
var deviceCategories []datatypes.Product_Item_Category
198-
for _, reqCategory := range categories {
199-
if *reqCategory.CategoryCode == categoryCode {
200-
deviceCategories = append(deviceCategories, reqCategory)
185+
// Logic taken from softlayer-python @ http://bit.ly/2bN9Gbu
186+
switch categoryCode {
187+
case CPUCategoryCode:
188+
if forPublicCores == isPrivate || forDedicatedHost != isDedicated {
189+
continue
190+
}
191+
case NICSpeedCategoryCode:
192+
if forPublicNetwork != isPublic || forDedicatedHost != isDedicated {
193+
continue
194+
}
195+
case MemoryCategoryCode:
196+
if forDedicatedHost != isDedicated {
197+
continue
201198
}
202199
}
203-
productItem.Prices[0].Categories = deviceCategories
204-
}
205200

206-
prices = append(prices, productItem.Prices[0])
207-
priceCheck[categoryCode] = true
201+
if strings.HasPrefix(categoryCode, "guest_disk") {
202+
categories := p.Categories
203+
var deviceCategories []datatypes.Product_Item_Category
204+
for _, reqCategory := range categories {
205+
if *reqCategory.CategoryCode == categoryCode {
206+
deviceCategories = append(deviceCategories, reqCategory)
207+
}
208+
}
209+
p.Categories = deviceCategories
210+
}
211+
212+
prices = append(prices, p)
213+
priceCheck[categoryCode] = true
214+
}
208215
}
209216
}
210217
}

helpers/virtual/virtual.go

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,24 @@ func UpgradeVirtualGuest(
3838
when ...time.Time,
3939
) (datatypes.Container_Product_Order_Receipt, error) {
4040

41+
// Get the packageID of the guest and use same during upgrade of guest.
42+
service := services.GetVirtualGuestService(sess)
43+
guestPackage, err := service.Id(*guest.Id).Mask("privateNetworkOnlyFlag,dedicatedAccountHostOnlyFlag,billingItem[package[id]]").GetObject()
44+
if err != nil {
45+
return datatypes.Container_Product_Order_Receipt{}, err
46+
}
47+
4148
if guest.PrivateNetworkOnlyFlag == nil || guest.DedicatedAccountHostOnlyFlag == nil {
42-
service := services.GetVirtualGuestService(sess)
43-
guestForFlag, err := service.Id(*guest.Id).Mask("privateNetworkOnlyFlag,dedicatedAccountHostOnlyFlag").GetObject()
44-
if err != nil {
45-
return datatypes.Container_Product_Order_Receipt{}, err
46-
}
47-
48-
guest.PrivateNetworkOnlyFlag = guestForFlag.PrivateNetworkOnlyFlag
49-
guest.DedicatedAccountHostOnlyFlag = guestForFlag.DedicatedAccountHostOnlyFlag
49+
guest.PrivateNetworkOnlyFlag = guestPackage.PrivateNetworkOnlyFlag
50+
guest.DedicatedAccountHostOnlyFlag = guestPackage.DedicatedAccountHostOnlyFlag
5051
}
5152

52-
pkg, err := product.GetPackageByType(sess, "VIRTUAL_SERVER_INSTANCE")
53-
if err != nil {
54-
return datatypes.Container_Product_Order_Receipt{}, err
53+
var packageID int
54+
if guestPackage.BillingItem != nil {
55+
packageID = *guestPackage.BillingItem.Package.Id
5556
}
5657

57-
productItems, err := product.GetPackageProducts(sess, *pkg.Id)
58+
productItems, err := product.GetPackageProducts(sess, packageID)
5859
if err != nil {
5960
return datatypes.Container_Product_Order_Receipt{}, err
6061
}
@@ -70,7 +71,7 @@ func UpgradeVirtualGuest(
7071
Container_Product_Order_Virtual_Guest: datatypes.Container_Product_Order_Virtual_Guest{
7172
Container_Product_Order_Hardware_Server: datatypes.Container_Product_Order_Hardware_Server{
7273
Container_Product_Order: datatypes.Container_Product_Order{
73-
PackageId: pkg.Id,
74+
PackageId: &packageID,
7475
VirtualGuests: []datatypes.Virtual_Guest{
7576
*guest,
7677
},
@@ -103,25 +104,26 @@ func UpgradeVirtualGuestWithPreset(
103104
when ...time.Time,
104105
) (datatypes.Container_Product_Order_Receipt, error) {
105106

107+
// Get the packageID of the guest and use same during upgrade of guest.
108+
service := services.GetVirtualGuestService(sess)
109+
guestPackage, err := service.Id(*guest.Id).Mask("privateNetworkOnlyFlag,dedicatedAccountHostOnlyFlag,billingItem[package[id]]").GetObject()
110+
if err != nil {
111+
return datatypes.Container_Product_Order_Receipt{}, err
112+
}
113+
106114
if guest.PrivateNetworkOnlyFlag == nil || guest.DedicatedAccountHostOnlyFlag == nil {
107-
service := services.GetVirtualGuestService(sess)
108-
guestForFlag, err := service.Id(*guest.Id).Mask("privateNetworkOnlyFlag,dedicatedAccountHostOnlyFlag").GetObject()
109-
if err != nil {
110-
return datatypes.Container_Product_Order_Receipt{}, err
111-
}
112-
113-
guest.PrivateNetworkOnlyFlag = guestForFlag.PrivateNetworkOnlyFlag
114-
guest.DedicatedAccountHostOnlyFlag = guestForFlag.DedicatedAccountHostOnlyFlag
115+
guest.PrivateNetworkOnlyFlag = guestPackage.PrivateNetworkOnlyFlag
116+
guest.DedicatedAccountHostOnlyFlag = guestPackage.DedicatedAccountHostOnlyFlag
115117
}
116118

117-
pkg, err := product.GetPackageByKeyName(sess, "PUBLIC_CLOUD_SERVER")
118-
if err != nil {
119-
return datatypes.Container_Product_Order_Receipt{}, err
119+
var packageID int
120+
if guestPackage.BillingItem != nil {
121+
packageID = *guestPackage.BillingItem.Package.Id
120122
}
121123

122-
preset, _ := product.GetPresetByKeyName(sess, *pkg.Id, presetKeyName)
124+
preset, _ := product.GetPresetByKeyName(sess, packageID, presetKeyName)
123125

124-
productItems, err := product.GetPackageProducts(sess, *pkg.Id)
126+
productItems, err := product.GetPackageProducts(sess, packageID)
125127
if err != nil {
126128
return datatypes.Container_Product_Order_Receipt{}, err
127129
}
@@ -137,7 +139,7 @@ func UpgradeVirtualGuestWithPreset(
137139
Container_Product_Order_Virtual_Guest: datatypes.Container_Product_Order_Virtual_Guest{
138140
Container_Product_Order_Hardware_Server: datatypes.Container_Product_Order_Hardware_Server{
139141
Container_Product_Order: datatypes.Container_Product_Order{
140-
PackageId: pkg.Id,
142+
PackageId: &packageID,
141143
VirtualGuests: []datatypes.Virtual_Guest{
142144
*guest,
143145
},

0 commit comments

Comments
 (0)