如何访问vmware sdk中的CreateNasDatastore?

时间:2019-04-19 01:38:26

标签: perl vmware

我正在尝试使用Vmware Perl SDK挂载nfs数据存储,并且文档正在...具有挑战性...但是当我认为自己可以解决问题时,我得到了:

在./mkds行65处无法通过包“ ManagedObjectReference”找到对象方法“ CreateNasDatastore”。

我也已经更新到最新的Perl SDK(6.7)...

根据https://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.host.DatastoreSystem.html

CreateNasDatastore是托管对象HostDatastoreSystem中的一种方法,它是HostConfigManager的属性,因此对于每个主机,我都获得了HostSystem视图,然后使用configManager-> datastoreSystem对象:

...
foreach my $host_view (@$host_views) {
...
    print "connected to $host\n";

    my $cf_views = Vim::find_entity_views(view_type => 'HostSystem');
    foreach my $cfv (@$cf_views) {
        my $ds = $cfv->configManager->datastoreSystem;
        print Dumper($ds);
        # no arguments yet, just trying to find out how to invoke it
        $ds->CreateNasDatastore();
        exit 0;
    }
}
connected to vcenter01.ad.casco.net
Hosts found:
1: cvo-esx5.ad.casco.net
connected to cvo-esx5.ad.casco.net
$VAR1 = bless( {
                 'value' => 'ha-datastoresystem',
                 'type' => 'HostDatastoreSystem'
               }, 'ManagedObjectReference' );
Can't locate object method "CreateNasDatastore" via package "ManagedObjectReference" at ./mkds line 65.

我不确定其他方式如何使用它,希望其他人比我更了解这种结构...

2 个答案:

答案 0 :(得分:1)

您链接到的文档不是关于Perl SDK的,Perl绑定看起来可能会略有不同(不同的大小写约定,不同的输入顺序,类似的东西),甚至与另一种语言的绑定也有很大不同

这是一个一般性提示。要查看ManagedObjectReference技巧所支持的方法,请检查隐藏变量%ManagedObjectReference::

print "Symbols in 'ManagedObjectReference' namespace:\n\t";
print join("\n\t", sort keys %ManagedObjectReference::);

这将列出名称空间中的符号,其中一些将是方法名称,也许它们会提示您所寻找方法的正确拼写。

答案 1 :(得分:0)

  

我发现随SDK一起安装的某些命令行工具是perl,并在vicfg-nas中找到了此解决方案(它也显示了如何构建参数结构):

use VMware::VIRuntime;
use VMware::VIExt;
...
eval {
    Vim::login( user_name => $esx_user, password => $esx_pw, service_url => "https://$server/sdk");
};
...
my $datacenter_view = Vim::find_entity_view(view_type => 'Datacenter');
my $host_views = Vim::find_entity_views(view_type => 'HostSystem',
                                        begin_entity => $datacenter_view);
foreach my $host_view (@$host_views) {
    my $host = $host_view->{'name'};
    eval {
        Vim::login( user_name => $esx_user, password => $esx_pw, service_url => "https://$host/sdk");
    };

    my $ds_view = Vim::get_view(mo_ref => $host_view->{'configManager.datastoreSystem'});

    my $hostNasVolSpec = new HostNasVolumeSpec (remoteHost => $fileserver, 
                                               remotePath => $share, 
                                               localPath => $label,
                                               accessMode => $accessMode); 
    $ds_view->CreateNasDatastore(spec => $hostNasVolSpec);
}