首页 文章

Softlayer API - 如何检查我的订单是否被接受

提问于
浏览
0

我下了命令,通过api(python)“placeOrder”升级虚拟机的硬件,它成功返回 . 我使用“wait_for_transaction”(VSManager中的函数)来等待此事务完成 . 几分钟后,它也成功返回 . 但是,当我登录网站“control.softlayer.com”时,我发现升级票据显示它已被取消,说“由于数据中心池中的资源不足,XXXX无法完成 . 升级请求已被取消取消,此票已关闭“ .

那么如何检查此订单是否已被接受并成功处理?我需要知道订单结果 .

1 回答

  • 2

    VSManager中的“wait_for_transaction”功能仅检查事务状态是否未挂起,这就是尽管事务失败但结果仍然成功的原因 . 要验证升级是否有效,有必要检查上次事务的状态 .

    您可以使用python客户端查看下一个示例脚本:

    """
    Retrieve a computing instance's associated upgrade request object if any.
    
    Important manual pages:
    
    http://sldn.softlayer.com/reference/services/SoftLayer_Virtual_Guest/getUpgradeRequest
    http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Upgrade_Request
    https://sldn.softlayer.com/article/object-masks
    
    License: http://sldn.softlayer.com/article/License
    Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
    """
    import SoftLayer
    from pprint import pprint as pp
    
    virtualGuestId = 12345678
    
    USERNAME = 'set me'
    API_KEY = 'set me'
    
    client = SoftLayer.Client(username=USERNAME,
                              api_key=API_KEY)
    
    virtualGuestService = client['SoftLayer_Virtual_Guest']
    
    objectMask = 'mask[completedFlag,order,status,ticket[title,id],virtualGuest[id,fullyQualifiedDomainName,lastTransaction[transactionGroup]]]'
    
    try:
      upgradeRequest = virtualGuestService.getUpgradeRequest(mask=objectMask, id=virtualGuestId)
      # The result should display the upgrade request status, order status, ticket associated
      # and the last transaction and transaction status of the current Virtual Guest.
      # Note: The upgrade request status could be the next:
      # APPROVED
      # PENDING
      # PENDING_CUSTOMER_APPROVAL
      # COMPLETE
      # CANCELLED
      # MAINTENANCE_UPDATE_REQUIRED
      # IN_TRANSACTION
      # PENDING_PAYMENT_PROCESS
      # PENDING_AUTOMATED_FINALIZE
      pp(upgradeRequest)
    except SoftLayer.SoftLayerAPIError as e:
      pp('Unable to upgrade the VSI faultCode=%s, faultString=%s'
         % (e.faultCode, e.faultString))
    

相关问题