令我惊讶的是,自ansible 2.9(我相信)以来,ovirt info模块默认不获取嵌套字典。而且,由于大多数有价值的数据通常驻留在那里,我正在寻找一种简单的方法来获取它们。把
fetch_nested: yes
通常只给出id,这不是很有用,为了获得所需的数据,我需要知道给定模块的属性字典的确切名称,这是有问题的,直到我看到用该字典获取的输出(鸡或蛋)。
文档在属性名方面非常吝啬,例如:
- nested_attributes Specifies list of the attributes which should be fetched from the API. This parameter apply only when fetch_nested' is true'. [Default: (null)] type: list version_added: 2.3
对于大多数ovirt*_info模块,该条目在文档中是相同的,例如ovirt_event_info, ovirt_storage_domain_info, ovirt_nic_info(它们有不同的嵌套数据和不同的属性名称)。
如果有一种方法可以把它们全部取出来就好了,比如:
nested_attributes:
- all
遗憾的是这不起作用。如果有人能给我指出获得attr名称的明显方法,我将不胜感激,否则我发现ovirt模块很难使用。
我理解这些变化是为了速度的缘故,但它似乎不那么用户友好,并且可能破坏为以前版本编写的代码。
描述的ovirt*_info模块行为是在ovirt 4.4中观察到的,我怀疑可见的ovirt模块行为会在ovirt 4.3中有所不同,例如,但是谁知道…
首先感谢你的问题,老实说,我也有一段时间在我的脑海里。
获取所有嵌套属性名称的最简单方法可能是使用API。例如,您需要知道虚拟机模板的所有可能属性,因此您进入那里的https://FQCN/api/vms/ID
,得到template href,在那里您将看到所有可用属性。虽然不太好,但是最简单。
我有一些关于如何改进/解决这个问题的想法,但我需要小心不要破坏任何向后兼容性。
所以如果你能在GitHub repo[1]上打开一个问题,我们可以和其他开发人员讨论这个问题。
[1] http://github.com/ovirt/ovirt-ansible-collection