2017-04-18 75 views
0

通过ARM REST API,我想读取资源(NSG)对其进行修改并将其写回。我希望最后一步(回写)失败,如果有东西出现,并在读取操作和写入操作之间修改资源。那可能吗?当我进行GET时,我发现有一个ETAG属性,如果资源被修改,可能有一些方法可以利用它来使写入失败?Azure ARM API - 乐观并发

+1

你的情况是什么?即你怎么知道读写之间发生的变化优先于你的?你可以锁定资源吗? –

+0

@ bmoore-msft我的场景是自动化NSG更改(例如带有webhook的Runbook)。如果两个更改同时发生,我希望有一种方法可以让一个失败,然后以指数回退重试另一个。 – gregjhogan

+0

好的,但即使在这种情况下,它最多只是一场比赛,对吧?如果我可以在一段时间内“锁定”资源(这实际上不起作用,但这个想法是相同的) - 在写完之后,有人可能会立即出现并进行他们想要的更改无论如何... –

回答

0

据我所知,Azure表存储在ITableEntity中有ETag,用于更新期间的乐观并发。虽然Azure的REST API Network Security Groupsetag

独特只读字符串每当资源被更新的变化。

我试图利用Azure Portalresources.azure.com来模拟我的NSG并发更新操作,我发现有上更新操作没有并发控制,配置会被后来的请求overrided。

根据我的理解,您没有内置功能来处理乐观并发。对于NSG,我认为你不会经常修改它。因此,我认为您可以尝试限制少数人更新NSG的权限,或者您可以构建用于更新NSG的自定义REST API,并获取最新的NSG信息,然后将etag与之前的etag进行比较以确定在更新NSG之前是否修改NSG。此外,您可以添加您的反馈here

+0

感谢您的信息!我正在使用Runbook自动化NSG更改,并且正在寻找一种内置的方式来对更改进行序列化。 Runbook没有内置的方法来完成这个任务,所以我希望ARM REST API有一些东西,因为我注意到了e-tag属性。您的手动电子标签比较建议并没有真正的帮助,因为我知道自从我修改NSG后电子标签会有所不同,因此它总是会有所不同。我可以建立一些东西来处理我的情况,但我希望我不需要! – gregjhogan