问题描述
我观察到,只有将--debug标志传递给z命令时,az命令才会打印http标头。 例如
az storage account list --debug
并且标头打印到stderr,stdout不包含任何内容。
在使用HTTP 429的情况下,如果出现太多错误错误,则指南是在Retry-After响应标头中提到的间隔之后重试。
是否有任何机制可以使az cli在HTTP 429错误的情况下自动重试API?
编辑-重试内置到z命令中
urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=3,connect=4,read=4,redirect=None,status=None)
urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=2,status=None)
urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=1,status=None)
urllib3.util.retry : Incremented Retry for (url='/subscriptions/REMOVED/providers/Microsoft.Storage/storageAccounts?api-version=2019-06-01'): Retry(total=0,status=None)
解决方法
根据到目前为止收到的响应,答案为“否”,并且调用方必须运行带有--debug选项的z命令并解析stderr。这是示例Groovy代码。
var ans = rs.OrderBy(r => r.Values.OrderBy(rv => rv.key.ColumnValidation.display_order)
.First()
.value)
.ToList();
这是样本回复。
def pat = /'Retry-After': '(\d+)'/
stderr.split("\n").each { line ->
def m = line =~ pat
if (m.size() > 0 && m.hasGroup()) {
retryAfterDuration = Integer.parseInt(m[0][1])
println("Found Retry-After header,value = ${retryAfterDuration}")
}
}