Sziasztok,
Egy olyan kérdésem lenne, hogy valaki meg tudná mondani, miként lehet "not in"-t használni perl-ben.
Konkrétan van egy egyszerű vmware perl script. És azt szeretném, hogy a filter résznél az első igaz, a második paramétert negáltját válogassa ki, vagyis a 'guest.guestState' => 'running' és a NEM 'name' => 'virtualpc' nevű gépeket szűrje ki a kapott listába.
Valaki foglalkozott már ilyennel? Ötlet?
Köszi, N
#!/usr/bin/perl -w
use strict;
use warnings;
use VMware::VIRuntime;
use VMware::VILib;
my $service_url = 'https://vmware.local/sdk/vimService';
my $userid ='root';
my $password ='123';
Vim::login(service_url => $service_url, user_name => $userid, password => $password);
my $vm_views = Vim::find_entity_views(view_type => 'VirtualMachine', filter => { 'guest.guestState' => 'running', 'name' => 'virtualpc'} );
foreach my $ev (@$vm_views){
print $ev->name . "\n";
}
Vim::logout();
- 6375 megtekintés
Hozzászólások
Hash esetén az exists, lista (tömb) esetén a grep függvény szolgál ellenőrzésre.
- A hozzászóláshoz be kell jelentkezni
kliens oldalon kell szurni
- A hozzászóláshoz be kell jelentkezni
Próbáltam keresni grep-re valami mintát erre a példára, de nem igazán találtam használhatót.
Ezt még valahogy a filter-be kéne beírni vagy már a foreach-ba?
A kódba egy példát bele tudnátok írni??
Köszi,
- A hozzászóláshoz be kell jelentkezni
Szinte mindent lehet, de nem ártana látni, hogy milyen a szűretlen adathalmazod; adattípus és -érték szinten.
- A hozzászóláshoz be kell jelentkezni
ha kihagyom belőle a:
, filter => { 'guest.guestState' => 'running', 'name' => 'virtualpc'}
részt, akkor konkrétan ezt a szűretlen eredményt kapom:
d:\perl>vm.pl
SRM-Site1-Esxi1
SRM-Site2-ESXi2
SRM-Site1-vCenter1
SRM-Site2-vCenter2
virtualpc
vCloud-NAS
Fortigate-VM5-A
Cidway_TMG
Cidway_DC
Cidway_Cidway
vCloud-ESXi1
Cisco-LANserver
HostA
Cisco-WANserver
HostB
Wan
Dc
vCloud-ESXi2
Fortigate-VM4-B
Fortigate-VM4-A
HP-ICE
W2012TerminalServer
McAffee-EMM
rhel_Vsp-4.1.0.GA-60
vCloud-Director
WDS2012
PC1
PC3
PC2
WDS2012_MDT
vCloud-vShield
d:\perl>
- A hozzászóláshoz be kell jelentkezni
Ha a Perl verziod nem tul regi, akkor megprobalkozhatsz egy "zero-width negative lookahead" pattern-nel:
# ...
my $vm_views = Vim::find_entity_views(
view_type => 'VirtualMachine',
filter => {
'guest.guestState' => 'running',
'name' => '^(?!virtualpc).*$'
}
);
# ...
Ha nem jon be, es a filter nelkuli lekerdezes nem jelent tul nagy overheadet, akkor folosleges ezt a vonalat eroltetni, ahogy bigwig kollega is javasolja. Es itt fordulunk ra az lx kollega altal javasolt grep-re. Valami ilyesmire tippelek:
# ...
my $vm_views = Vim::find_entity_views( ... );
my @filtered_vm_views = grep {$_->name ne 'virtualpc'} @$vm_views;
# ...
Disclaimer: a fentieket csak emlekezetbol irtam, nem tudom ellenorizni, szoval siman lehet hogy semmi sem mukodik.
Szerk.: most latom hogy az elso megoldas nem jo, mert minden olyan elemet kizar ami "virtualpc"-vel kezdodik.
- A hozzászóláshoz be kell jelentkezni
Köszönöm, az ötleteket, amint lesz több időm még jobban átnézem, mert így első beírásra hibát dob.
- A hozzászóláshoz be kell jelentkezni