Skip to content

Instantly share code, notes, and snippets.

@raulcabero
Created December 10, 2015 16:13
Show Gist options
  • Save raulcabero/c63df4ec79b0a6655d0c to your computer and use it in GitHub Desktop.
Save raulcabero/c63df4ec79b0a6655d0c to your computer and use it in GitHub Desktop.
Order bare metal server with raid configuration and custom partitions
"""
Order a new server with RAID configuration.
Important manual pages:
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Hardware_Server
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item_Price
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/verifyOrder
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/placeOrder
License: http://sldn.softlayer.com/article/License
Author: SoftLayer Technologies, Inc. <[email protected]>
"""
import SoftLayer
import json
# Your SoftLayer API username and key.
USERNAME = 'set me'
API_KEY = 'set me'
quantity = 1
location = 'AMSTERDAM03'
packageId = 265
# Building a skeleton SoftLayer_Hardware_Server object to model the hostname and
# domain we want for our server. If you set quantity greater then 1 then you
# need to define one hostname/domain pair per server you wish to order.
hardware = [
{
'hostname': 'test',
'domain': 'example.org'
}
]
# Building a skeleton SoftLayer_Product_Item_Price objects. These objects contain
# much more than ids, but SoftLayer's ordering system only needs the price's id
# to know what you want to order.
# Every item in SoftLayer's product catalog is assigned an id. Use these ids
# to tell the SoftLayer API which options you want in your new server. Use
# the getActivePackages() method in the SoftLayer_Account API service to get
# a list of available item and price options per available package.
prices = [
{'id': 76175}, # Dual Intel Xeon E5-2690 (8 Cores, 2.90 GHz)
{'id': 74095}, # 16 GB
{'id': 44988}, # CentOS 7.x (64 bit)
{'id': 75005}, # RAID
{'id': 68789}, # 500 GB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 64817}, # 1.00 TB SATA
{'id': 50357}, # 500 GB Bandwidth
{'id': 273}, # 100 Mbps Public & Private Network Uplinks
{'id': 76205}, # Redundant Power Supply
{'id': 55}, # Host Ping
{'id': 58}, # Automated Notification
{'id': 420}, # Unlimited SSL VPN Users & 1 PPTP VPN User per account
{'id': 418}, # Nessus Vulnerability Assessment & Reporting
{'id': 21}, # 1 IP Address
{'id': 57}, # Email and Ticket
{'id': 906} # Reboot / KVM over IP
]
# Building a skeleton SoftLayer_Container_Product_Order_Storage_Group object
# Storage groups will only be used if the 'RAID' disk controller price is selected.
# Any other disk controller types will ignore the storage groups set here.
# The first storage group in this array will be considered the primary storage group,
# which is used for the OS. Any other storage groups will act as data storage.
storageGroups = [
{
"arraySize": 1998,
"arrayTypeId": 3, # RAID_5
"hardDrives": [
1,
2,
3,
4
],
"partitionTemplateId": 6
},
{
"arraySize": 500,
"arrayTypeId": 9,
"hardDrives": [
0
],
# The custom partitions only work on other storage groups
# different from the primary one
"partitions": [
{
"isGrow": False,
"name": "/test",
"size": 100
},
{
"isGrow": True,
"name": "/test2",
"size": 200
}
]
},
{
"arraySize": 2264,
"arrayTypeId": 1, # RAID_0
"hardDrives": [
5,
6,
7,
8
],
"partitions": [
{
"isGrow": False,
"name": "/rc",
"size": 500
},
{
"isGrow": True,
"name": "/tr",
"size": 200
}
]
}
]
# Building a skeleton SoftLayer_Container_Product_Order_Hardware_Server object
# containing the order you wish to place.
orderTemplate = {
'quantity': quantity,
'location': location,
'packageId': packageId,
'prices': prices,
'hardware': hardware,
'storageGroups': storageGroups
}
# Creating a SoftLayer API client object
client = SoftLayer.Client(username=USERNAME, api_key=API_KEY)
try:
# verifyOrder() will check your order for errors. Replace this with a call
# to placeOrder() when you're ready to order. Both calls return a receipt
# object that you can use for your records.
# Once your order is placed it'll go through SoftLayer's approval and
# provisioning process. When it's done you'll have a new
# SoftLayer_Hardware_Server object and server ready to use.
receipt = client['Product_Order'].verifyOrder(orderTemplate)
print(json.dumps(receipt, sort_keys=True, indent=2, separators=(',', ': ')))
except SoftLayer.SoftLayerAPIError as e:
print("Unable to place a server order faultCode=%s, faultString=%s"
% (e.faultCode, e.faultString))
exit(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment