我需要对pysphere's VIServer.get_datastore
返回的字典进行排序。它应按数据存储区中的可用空间排序,我们可以通过以下方式获取:
from pysphere import VIServer, VIProperty
if __name__ == "__main__":
server = VIServer()
print "Connecting to vSphere..."
server.connect(VSPHERE_IP, VSPHERE_USER, VSPHERE_PASS)
datastores = server.get_datastores()
for ds, name in datastores.iteritems():
props = VIProperty(server, ds)
freeSpace = props.summary.freeSpace
我知道我可以使用sorted(iterable[, cmp[, key[, reverse]]])并创建一个自定义排序函数,但我不知道哪个类型会作为此函数的参数。
我无法使用OrderedDict,因为我必须使用python 2.6(不要问为什么:()
答案 0 :(得分:1)
只需在关键功能中执行可用空间查找:
server = VIServer()
server.connect(VSPHERE_IP, VSPHERE_USER, VSPHERE_PASS)
datastores = server.get_datastores()
ds_keys = sorted(datastores,
key=lambda ds: VIProperty(server, ds).summary.freeSpace
reverse=True)
这会从datastores
生成键的排序列表;您可以使用它以特定顺序迭代。我猜你想要首先列出空间最多的数据存储区。
您也可以获得已排序的键值对,分别将ds
替换为item
和item[0]
:
ds_items = sorted(datastores.items(),
key=lambda item: VIProperty(server, item[0]).summary.freeSpace
reverse=True)