如何配置vSphere 6 SOAP调用来显示资源池或数据中心?


How do I configure vSphere 6 SOAP calls to show resource pools or data centers?

VMware vSphere 6.0 WSDL API

参见文档:http://pubs.vmware.com/vsphere-60/index.jsp com.vmware.wssdk.pg.doc/PG_Introduction_Inventory.6.4.html

我正在尝试检索VMware vCenter库存中的数据中心列表,并且存在一个数据中心。

我在PHP中创建了一个SOAP调用,如下所示($request is print_r()ed):
stdClass Object(
        [_this] => stdClass Object(
            [_] => propertyCollector
            [type] => PropertyCollector
        )
    [specSet] => Array(
            [propSet] => Array(
                    [0] => Array(
                            [type] => ResourcePool
                            [all] => 1
                        )
                )
            [objectSet] => Array(
                    [obj] => stdClass Object(
                            [_] => group-d1
                            [type] => Folder
                        )
                    [skip] => 
                    [selectSet] => Array(
                            [0] => SoapVar Object(
                                    [enc_type] => 301
                                    [enc_value] => Array(
                                            [name] => FolderTraversalSpec
                                            [type] => Folder
                                            [path] => childEntity
                                            [skip] => 
                                            [0] => SoapVar Object(
                                                    [enc_type] => 301
                                                    [enc_value] => Array(
                                                            [name] => FolderTraversalSpec
                                                        )
                                                    [enc_name] => selectSet
                                                )
                                            [1] => SoapVar Object(
                                                    [enc_type] => 301
                                                    [enc_value] => Array(
                                                            [name] => DataCenterVMTraversalSpec
                                                        )
                                                    [enc_name] => selectSet
                                                )
                                        )
                                    [enc_stype] => TraversalSpec
                                )
                            [1] => SoapVar Object(
                                    [enc_type] => 301
                                    [enc_value] => Array(
                                            [name] => DataCenterVMTraversalSpec
                                            [type] => Datacenter
                                            [path] => datastoreFolder
                                            [skip] => 
                                            [0] => SoapVar Object(
                                                    [enc_type] => 301
                                                    [enc_value] => Array(
                                                            [name] => FolderTraversalSpec
                                                        )
                                                    [enc_name] => selectSet
                                                )
                                        )
                                    [enc_stype] => TraversalSpec
                                )
                        )
                )
        )
)

我认为[path] => datastoreFolder是不正确的,VMware文档显示datastoreFolder, hostFolder, networkFolder和vmFolder。其中任何一个都没有数据中心,并且任何其他对象似乎都以错误中断SOAP调用。

是否有一种使用soap调用检索数据中心集群的方法?

我一直有同样的问题。然后我仔细看了看这一页:

https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.Datacenter.html

:

每个数据中心都有以下一组专用文件夹。在为数据中心创建实体之前,这些文件夹是空的。

存放VirtualMachine、template和VirtualApp对象的文件夹。计算机资源层次结构的文件夹。用于存放Network、DistributedVirtualSwitch和DistributedVirtualPortgroup对象的文件夹。数据存储对象的文件夹。

你在你的propSet中使用了ResourcePool,但是对于一个数据中心不存在。

[propSet] => Array(
        [0] => Array(
                [type] => ResourcePool
                [all] => 1
            )
    )

这是我用来读取所有主机的:

[propSet] => Array
    (
        [0] => Array
            (
                [type] => ComputeResource
                [all] => 1
            )
    )
[objectSet] => Array
    (
        [obj] => stdClass Object
            (
                [_] => group-d1
                [type] => Folder
            )
        [skip] => 
        [selectSet] => Array
            (
                [0] => SoapVar Object
                    (
                        [enc_type] => 301
                        [enc_value] => Array
                            (
                                [name] => FolderTraversalSpec
                                [type] => Folder
                                [path] => childEntity
                                [skip] => 
                                [0] => SoapVar Object
                                    (
                                        [enc_type] => 301
                                        [enc_value] => Array
                                            (
                                                [name] => FolderTraversalSpec
                                            )
                                        [enc_name] => selectSet
                                    )
                                [1] => SoapVar Object
                                    (
                                        [enc_type] => 301
                                        [enc_value] => Array
                                            (
                                                [name] => DataCenterVMTraversalSpec
                                            )
                                        [enc_name] => selectSet
                                    )
                            )
                        [enc_stype] => TraversalSpec
                    )
                [1] => SoapVar Object
                    (
                        [enc_type] => 301
                        [enc_value] => Array
                            (
                                [name] => DataCenterVMTraversalSpec
                                [type] => Datacenter
                                [path] => hostFolder
                                [skip] => 
                                [0] => SoapVar Object
                                    (
                                        [enc_type] => 301
                                        [enc_value] => Array
                                            (
                                                [name] => FolderTraversalSpec
                                            )
                                        [enc_name] => selectSet
                                    )
                            )
                        [enc_stype] => TraversalSpec
                    )
            )
    )

)

我不知道它是否有帮助,我只是希望如此!好运。