工具箱

等待资源状态

什么时候应该使用它?

等待函数可以等待远程状态达到某一特定的状态,比如:

  • 创建并等待资源创建完成
  • 调用主机开关机并等待开机或关机完成
  • 自定义等待的时间策略

例如:

snippet.python
def mget_uhost_states(uhost_ids):
    resp = client.uhost().describe_uhost_instance({'UHostIds': uhost_ids})
    return [inst.get('State') for inst in resp.get('UHostSet')]
 
# Stop all instances
for uhost_id in uhost_ids:
    client.uhost().stop_uhost_instance({'UHostId': uhost_id})
 
# Wait all instances is stopped
wait.wait_for_state(
    target=['stopped'], pending=['pending'],
    timeout=300, # wait 5min
    refresh=lambda: (
        'stopped' if all([state == 'Stopped' for state in mget_uhost_states(uhost_ids)]) else 'pending'
    ),
)
 
# Remove all instances
for uhost_id in uhost_ids:
    client.uhost().terminate_uhost_instance({'UHostId': uhost_id})

默认情况下,等待函数将使用指数退避策略来决定两次请求之间的间隔。当达到超时时间时,将会抛出 WaitTimeoutException 异常。