2016-05-05 20 views
0

新しいシステムを仮想サーバーに再ロードするなどの操作を行ったとき、サーバーはポータルから保留中の状態になり、保留中の取引 "となります。この状態では、サーバーは他の操作を受け取ることができません。それ以外の場合は、例外がスローされます。だから私はトランザクションの状態を確認する必要があり、私が使ったのはSoftLayer.managers.vs.VSManager(softlayer pythonパッケージ)に属する "wait_for_transaction"です。残念ながら、私は奇妙な何かに会った。APIでトランザクションが完了したかどうかを確認する方法

たとえば、サーバーのnic_speedをアップグレードするために「upgrade」(SoftLayer.managers.vs.VSManager)を呼び出し、「wait_for_transaction」を即座に呼び出しました。 "wait_for_transaction"が "True"を返しました。実際には、サーバーが "アップグレード"を開始する必要があるため、 "True"ではなく "False"を返す必要があります。数秒後にもう一度「wait_for_transaction」と呼ばれ、今回は「False」が返されました。

softlayerシステムのように、私はAPIを "アップグレード"と呼んだ後、 "アップグレード"トランザクションを実行するのに遅延があります。したがって、この取引のステータスを確認する方法。 「保留中のトランザクション」をトリガーするapiが実際に遅延を持っている場合、私はそれらを呼び出すとトランザクションが「実際に」実行される時間差は何ですか?

+0

このquestioの答えはあなたを助けることがあります。http://stackoverflow.com/questions/36164444/how-to-get-order-username-すべての軟質レイヤーマシンで使用するための準備ツール – mcruz

答えて

0

アップグレードが実行され、注文が承認されると、注文が承認され、トランザクションが開始されるまでに遅延が発生するためです。

アップグレードをリクエストすると、このリクエストはすぐにDBに保存されます。http://sldn.softlayer.com/reference/services/SoftLayer_Virtual_Guest/getUpgradeRequest を使用してこのデータを取得できます。アップグレード要求が完了していないかどうかを確認する確認をコードに追加できますまだ完了していないリクエストがあり、それが開始されているはずなので、いつでもトランザクションが開始され、それを待たなければならないことを知っています。

このコードをチェックアウト

import SoftLayer 
from pprint import pprint as pp 
from datetime import datetime 

client = SoftLayer.Client() 
vsiId = 15003381 
objectMask= "mask[completedFlag,maintenanceStartTimeUtc]" 
upgrade = client['SoftLayer_Virtual_Guest'].getUpgradeRequest(id=vsiId, mask=objectMask) 
if upgrade: 
    if not upgrade['completedFlag']: 
     # so there is upgrade request which has not been completed 
     # you can see the maintenance Start Time of the upgrade request 
     # like this: print (upgrade['maintenanceStartTimeUtc']) 
     # in case the upgrade request is not inmediatly you can perform 
     # a verification in order to see if the request should have been started or not 
     print ("there is a pending upgrade") 
     activeTraqnsaction = [] 
     while (len(activeTraqnsaction) == 0): 
      activeTraqnsaction = client['SoftLayer_Virtual_Guest'].getActiveTransactions(id=vsiId) 
     print ('There is a transaction running') 
     # here you can add your code to wait until the transaction is completed. 
    else: 
     print ("there is no pending upgrades") 

よろしく

+0

ありがとうございました! 「アップグレード」トランザクションステータスをチェックするのは良い方法です。しかし、私はすべての種類の "保留中のトランザクション"をチェックするためのより一般的な方法が必要です。たとえば、 "reload an os"、 "attach disks"、 "destroy an instance" ...これらの操作はすべて「保留中のトランザクション」をトリガーします。 – ChrisM

+0

トランザクションを開始する必要があることが分かっている場合は、空白とは異なる値を返すまで、この行をactiveTraqnsaction = client ['SoftLayer_Virtual_Guest']。getActiveTransactions(id = vsiId)と呼ぶだけで済みます。トランザクションメソッドの呼び出しを呼び出します。 –

関連する問題