我正在尝试使用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.
我不确定其他方式如何使用它,希望其他人比我更了解这种结构...
答案 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);
}