【问题标题】:How to find out if Azure Virtual machine is (un)managed?如何确定 Azure 虚拟机是否(未)托管?
【发布时间】:2021-02-04 14:58:49
【问题描述】:

如何判断虚拟机是否(未)托管?这意味着 VM 是否只有(非)托管磁盘,因为这些磁盘不能混合(据我所知)。

我最初使用的是Azure Fluent SDK。但是我遇到了一些麻烦,甚至还有一些issues

唯一的方法是检查磁盘(或只检查一个,因为它们不能混淆)并检查磁盘本身是否(未)管理。对吗?

问题是如何确定磁盘是否(非)托管?我的第一个想法是检查OSDisk 属性(或DataDisk)

  • 如果它有 managedDisk/id 属性,那么它显然是托管磁盘。
  • 如果它有 vhd/uri 属性,那么它显然是非托管磁盘。

这看起来很简单(我很确定它至少在 99% 的情况下都有效,但我真的需要 100% 确定)但是如果你查看 Fluent SDK 库的source code(由微软提供,那么什么是更好的事实来源?)逻辑要复杂得多。另外,我怀疑它是否正确(参见上面的错误)。

简而言之,在 100% 的情况下,检查 VM 是否受管理的可靠方法是什么?

【问题讨论】:

  • 你看过 Azure 资源浏览器吗?
  • 查看我自己的 Azure 资源资源管理器 (resources.azure.com) 我可以枚举subscriptions/{sub}/providers/Microsoft.Compute/virtualMachines 下的 VM,并在解析 JSON 响应后,确定 VM 是否具有 100% 或非 100% 托管磁盘 -这足以满足您的目的吗?如果是这样,那么为它编写一个客户端就很简单了。
  • 2Dai:问题仍然存在。您写道“解析 JSON 响应后,确定 VM 是否具有 100% 或非 100% 的托管磁盘”。 JSON 与 REST API 有什么不同?如果是怎么办?如果不是根据什么属性判断它是否是托管磁盘?
  • 你看过资源浏览器吗?
  • 是的,它似乎返回与 REST API 相同的 JSON。回答你的问题是不够的。您如何 100% 确定磁盘是否被管理?正如我在原始问题中所写,我不太确定......

标签: azure azure-virtual-machine azure-sdk


【解决方案1】:

您对(非)托管虚拟机的所有认知都是正确的,我可以确认一下。并且要区分VM是否为托管VM,只需要检查OS磁盘是否为托管磁盘,即OS磁盘的属性managedDisk是否不为空。

如您所知,托管磁盘和非托管磁盘不能混用。因此,如果 OS 磁盘是托管的,那么 VM 必须是托管 VM,因为每个 VM 必须有一个 OS 磁盘。

【讨论】:

  • 感谢您的回答。仅检查 OS 磁盘很有意义。我想我们可以检查任何磁盘,但操作系统磁盘可能总是在那里。您的答案或多或少是我在原始帖子中的建议(“如果它具有 managedDisk/id 属性,那么它显然是托管磁盘。”)。但是你确定它是 100% 可靠的吗?您是否有任何消息来源可以证实这一点?我怀疑的原因是,这个答案基本上是说 MS 库中的逻辑(在原帖中提到)是错误的,这很奇怪,因为逻辑更复杂,更不直观,所以可能是有原因的。
  • @robot40q 你在哪里发现这个逻辑错在MS库?
  • @robot40q 事实上,没有文档告诉你如何检查虚拟机是否被管理。你需要自己做。也许this 会有帮助。
  • @robot40q 你可以看到所有的条件和条件为真时的结果。最后,您可以发现当每个条件都为真时,managedDisk 将是我们所期望的。所以应该没有什么让你感到困惑的。
猜你喜欢
  • 2017-09-11
  • 2021-12-29
  • 2016-11-20
  • 1970-01-01
  • 2015-09-06
  • 2012-12-10
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多