在我的前一篇博客中,我介绍了如何导航 SoftLayer Services 网站,以及如何有效查询 SoftLayer API。在这篇文章中,我将介绍在 python 客户端中使用 SoftLayer API 的其他方面。
如果您阅读了本系列的第 1 部分,那么您应该掌握了在 SoftLayer 中查询资源数据的许多不错的技术,这样您就可以从任何服务有效地遵循数据线索追踪到其他服务,从而获得您想要的所有信息。关于查询 SoftLayer API,您需要知道的最后一件大事是:在包含了无数的 SoftLayer Services 网站中,您最好从哪儿开始追踪这些线索?Account 服务对许多数据类型来说都是一个很好的起点,但总是从这里开始不会让您获得一切。即使最终您可以得到开始使用 Account 服务所需的数据,但您通常也可以在其他地方找到一些捷径。我将有用的线索以及可以沿着每条线索找到的数据类型都放入一个列表中。该列表并不是一个详尽的列表,但希望您能将它作为您的起点。
帐户
位置
Product_Package
Billing_Order
User_Customer
回页首
现在,您是一个查询 SoftLayer API 的专家,让我们继续执行修改 SoftLayer 资源的 SoftLayer API 调用。基本原理是相似的:找到合适的服务和该服务中的方法,填写数据结构,该数据结构类似于您将来查询它时的样子,如果该资源是一个现有资源,那么可以使用 id 来识别它。有许多 SoftLayer API 方法都可以用来修改资源,但是为了向您解释它们是什么样子的,我为您提供了一个具体的示例。
editSoftwareComponentPasswords():通知 SoftLayer 您更改了 CCI 或裸机服务器的密码,因为它在 SoftLayer 门户中正确显示了密码,以便 SoftLayer 技术支持人员可以在您有问题时访问 CCI
bypassVlans():更改与某个网关相关的 VLAN,将它从 routed 状态更改为 bypassed 状态
unbypassVlans():更改与某个网关相关的 VLAN,将它从 bypassed 状态更改为 routed 状态
createObjects():将 VLAN 与某个网关相关联(也就是说,让网关称为它们的路由器)
deleteObjects():从此网关分离 VLAN
placeOrder():从 SoftLayer 订购资源
verifyOrder():确认您的订单数据结构是有效的,但实际上您并没有订购该资源
cancelItem():将资源还给 SoftLayer(按月返回,它们在月底前仍然是可用的)
对于我们的详细的示例,我们将 VLAN 与网络网关相关联。在 SoftLayer Services 网站上,我们发现 Network_Gateway_Vlan 服务有一个名为 createObjects 的方法,该方法将VLAN 与某个网关相关联。我们看到,参数方法采用了一个 Network_Gateway_Vlan 数据类型对象数组。
所以,该示例将:
import SoftLayer import pprint # Get the SoftLayer API client object client = SoftLayer.Client(username=myuser, api_key=mykey, endpoint_url=SoftLayer.API_PUBLIC_ENDPOINT) # Get the id of the gateway you want to associate the VLANs to gateways = client['Account'].getNetworkGateways(mask='id, name', filter={'networkGateways': {'name': {'operation': 'v1'}}}) gatewayid = gateways[0]['id'] # Get all of the VLANs that are allowed to be associated with this gateway. # For this example, we assume we want to associate all of them. vlans = client['Network_Gateway'].getPossibleInsideVlans(id=gatewayid, mask='id, vlanNumber') # Build the array of Network_Gateway_Vlan objects. # It's local properties are: bypassFlag, id, networkGatewayId, networkVlanId. objs = [] for v in vlans: # Fill in the object properties. We set id to None, because SoftLayer will fill that in when the # objects are created. objs.append({'bypassFlag':True, 'id':None, 'networkGatewayId':gatewayid, 'networkVlanId':v['id']}) # Use the Network_Gateway_Vlan service to associate them assocVlans = client['Network_Gateway_Vlan'].createObjects(objs) # the output is the created Network_Gateway_Vlan objects pprint.pprint(assocVlans)
回页首
您可能注意到示例代码中没有进行错误检查。那是因为我打算在这里介绍 SoftLayer 异常。主要的 SoftLayer API 异常类是 SoftLayer.exceptions.SoftLayerAPIError,它有两个成员:faultCode 和 faultString。您可以捕获以下 API 错误:
import SoftLayer # Get the SoftLayer API client object client = SoftLayer.Client(username=myuser, api_key=mykey, endpoint_url=SoftLayer.API_PUBLIC_ENDPOINT)
在 http://sldn.softlayer.com/article/Exception-Handling-SoftLayer-API 的底部,还可以看到一些常见的 faultStrings,提供它们是为了防止您想要在您代码的 "except" 部分单独处理它们。
在我的下一篇博客中,将详细介绍如何使用 API 订购 SoftLayer 资源。