我正在寻找一种方法来通过SoftLayer API订购虚拟服务器来激活“从监控中自动重启”。
在我的使用中,如果API提供了一个选项来设置“从监控中自动重启”,那就很有用了,比如
client['Virtual_Guest'].createObject({
'hostname': 'myhost',
'domain': 'yukaary.craft.com',
'startCpus': 1,
'maxMemory': 1024,
'datacenter': {"name": "tok02"},
'privateNetworkOnlyFlag': 'true',
'hourlyBillingFlag': 'true',
'operatingSystemReferenceCode': 'UBUNTU_LATEST',
'localDiskFlag': 'false',
'serviceAddon': {'response': 'reboot'}
})
抱歉,这是python,而不是PHP。
我正在搜索现有的问题并搜索网站,但目前没有任何线索。
答案 0 :(得分:0)
我找到了办法。
以下是我从现有服务器的订单模板修改的示例订单:xts
。
order.json
client['Virtual_Guest'].getOrderTemplate("HOURLY", id=12345678)
然后我通过
订购了虚拟服务器
{
"preTaxSetup": "0",
"storageGroups": [],
"postTaxRecurring": "0.111",
"billingOrderItemId": "",
"presetId": "",
"prices": [
{"id": 52123},
{"id": 1800},
{"id": 2202},
{"id": 57731},
{"id": 56679},
{"id": 57},
{"id": 13945},
{"id": 273},
{"id": 21},
{"id": 52265},
{"id": 905},
{"id": 57755},
{"id": 420},
{"id": 418}
],
"sendQuoteEmailFlag": "",
"packageId": 46,
"useHourlyPricing": true,
"preTaxRecurringMonthly": "0",
"message": "",
"virtualGuests": [{"domain": "yukaary.craft.net", "hostname": "test"}],
"preTaxRecurring": "0.111",
"primaryDiskPartitionId": 1,
"taxCompletedFlag": true,
"isManagedOrder": 0,
"imageTemplateId": "",
"postTaxRecurringMonthly": "0",
"resourceGroupTemplateId": "",
"postTaxSetup": "0",
"sshKeys": [{"sshKeyIds":[012345]}],
"location": 449604,
"stepId": "",
"proratedInitialCharge": "0",
"totalRecurringTax": 0,
"paymentType": "",
"resourceGroupId": "",
"sourceVirtualGuestId": "",
"bigDataOrderFlag": false,
"extendedHardwareTesting": "",
"preTaxRecurringHourly": "0.111",
"monitoringAgentConfigurationTemplateGroupId": "",
"postTaxRecurringHourly": "0.111",
"currencyShortName": "USD",
"proratedOrderTotal": "0",
"serverCoreCount": 4,
"privateCloudOrderFlag": false,
"totalSetupTax": "0",
"quantity": 1
}
使用选项创建服务器:“监控包 - 高级应用程序”和“从监控自动重新启动”。
答案 1 :(得分:0)
使用创建对象无法配置addom,您需要使用placeOrder方法并按顺序指定订单中所需商品的价格。
有关如何在softlayer中订购的详细信息,请参阅此文档 http://sldn.softlayer.com/blog/bpotter/Going-Further-SoftLayer-API-Python-Client-Part-3
也许这个例子可以帮助你(它使用的是python)。您可以使用门户网站中显示的名称和值来设置您要订购的选项。
"""
Order a new VSI.
Important manual pages:
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/verifyOrder
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/placeOrder
http://sldn.softlayer.com/reference/services/SoftLayer_Account/getSshKeys
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package
http://sldn.softlayer.com/reference/services/SoftLayer_Product_Package/getItemPrices
http://sldn.softlayer.com/reference/services/SoftLayer_Location/getDatacenters
http://sldn.softlayer.com/reference/services/SoftLayer_Network_Vlan/getVlanForIpAddress
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order
http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item_Price
License: http://sldn.softlayer.com/article/License
Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
"""
import SoftLayer
import json
location = "AMS01"
quantity = 1
# If you want the VSI hourly pricing
# set the value as True
useHourlyPricing = False
# The configuration of the VSI
# The values and names are the same like
# the ones displayed in the portal.
configuration = {
"COMPUTING INSTANCE": "2 x 2.0 GHz Cores",
"RAM": "4 GB",
"OPERATING SYSTEM": "CentOS 7.x - Minimal Install (64 bit)",
"FIRST DISK": "25 GB (SAN)",
"PUBLIC BANDWIDTH": "250 GB Bandwidth",
"UPLINK PORT SPEEDS": "100 Mbps Public & Private Network Uplinks",
"MONITORING": "Host Ping",
"RESPONSE": "Automated Notification",
"Primary IP Addresses": "1 IP Address",
"Remote Management": "Reboot / Remote Console",
"Notification": "Email and Ticket",
"VPN Management - Private Network": "Unlimited SSL VPN Users & 1 PPTP VPN User per account",
"Vulnerability Assessments & Management": "Nessus Vulnerability Assessment & Reporting"
}
# Specifies the hostname and domain we want for our VSI.
# If you set quantity greater than 1 then you
# need to define one hostname/domain pair per VSI you wish to order.
virtualGuest = [
{
"domain": "softlayer.ibm.com",
"hostname": "VM1",
# The vlan configuration for the VSI if you do not wish to configure
# the vlans just comment the lines.
# set the any IP address which belongs to the VLAN you wish to configure in the VSI
"backendVlanIp": "10.68.117.193",
"frontedVLAN": "159.122.23.225"
}
]
# The post install script to apply.
# Leave in empty if you do not wish to apply an script in the provisioning.
postInstallScript = ""
# The list of ssh keys to apply to the VSI.
# Set the label names of the ssh keys like in the portal
# Leave in empty if you do not wish to apply any ssh key.
sshKeys = ["labkey", "matt-sl-test"]
PACKAGE = 46
client = SoftLayer.Client()
orderService = client['SoftLayer_Product_Order']
accountService = client['SoftLayer_Account']
packageService = client['SoftLayer_Product_Package']
locationService = client['SoftLayer_Location']
valnService = client['SoftLayer_Network_Vlan']
try:
location = locationService.getDatacenters(filter={"name": {"operation": location.lower()}})
except SoftLayer.SoftLayerAPIError as e:
print("Unable to get the datacenter. " % (e.faultCode, e.faultString))
exit(0)
try:
pricesPackage = packageService.getItemPrices(id=PACKAGE, mask="mask[categories, item]")
except SoftLayer.SoftLayerAPIError as e:
print("Unable to get the item prices. " % (e.faultCode, e.faultString))
exit(0)
# Getting the item prices for the order.
prices = []
for item in configuration.keys():
for price in pricesPackage:
added = False
if 'categories' in price:
for category in price['categories']:
if category['name'].strip().upper() == item.strip().upper() and \
price['item']['description'].strip().upper() == configuration[item].strip().upper() and \
price['locationGroupId'] == "":
prices.append(price)
added = True
break
if added:
break
if not added:
print("There is no price for the item: " + item + "- " + configuration[item])
exit(0)
vsis = []
for vsi in virtualGuest:
guest = {}
if 'domain' in vsi:
guest['domain'] = vsi['domain']
if 'hostname' in vsi:
guest['hostname'] = vsi['hostname']
if 'backendVlanIp' in vsi:
try:
backend = valnService.getVlanForIpAddress(vsi['backendVlanIp'])
guest['primaryBackendNetworkComponent'] = {}
guest['primaryBackendNetworkComponent']['networkVlan'] = backend
except SoftLayer.SoftLayerAPIError as e:
print("Unable to get the backend Vlan. " % (e.faultCode, e.faultString))
if 'frontedVLAN' in vsi:
try:
fronted = valnService.getVlanForIpAddress(vsi['frontedVLAN'])
guest['primaryNetworkComponent'] = {}
guest['primaryNetworkComponent']['networkVlan'] = fronted
except SoftLayer.SoftLayerAPIError as e:
print("Unable to get the fronted Vlan. " % (e.faultCode, e.faultString))
vsis.append(guest)
orderData = {
"prices": prices,
"packageId": PACKAGE,
"location": location[0]['id'],
'hardware': vsis,
'useHourlyPricing': useHourlyPricing
}
if postInstallScript:
orderData['provisionScripts'] = [postInstallScript]
if len(sshKeys) > 0:
objectfilter = {"sshKeys": {"label": {"operation": "in", "options": [{"name": "data", "value": sshKeys}]}}}
try:
sshs = accountService.getSshKeys(filter=objectfilter, mask="mask[id]")
except SoftLayer.SoftLayerAPIError as e:
print("Unable to get the ssh keys. " % (e.faultCode, e.faultString))
if len(sshs) > 0:
orderData['sshKeys'] = []
sshKeyIds = {}
sshKeyIds['sshKeyIds'] = []
for ssh in sshs:
sshKeyIds['sshKeyIds'].append(ssh['id'])
orderData['sshKeys'].append(sshKeyIds)
else:
print("None ssh key was found")
try:
# When you are ready to order the VSI
# change verifyOrder() method by placeOrder() method.
result = orderService.verifyOrder(orderData)
print(json.dumps(result, sort_keys=True, indent=2, separators=(',', ': ')))
except SoftLayer.SoftLayerAPIError as e:
print("Unable to create the order. "
% (e.faultCode, e.faultString))