enhance discovery folders management

This commit is contained in:
garnier-quentin 2020-02-05 11:46:39 +01:00
parent 12e545e235
commit 57a1c6c577

View File

@ -61,10 +61,13 @@ sub get_folders {
my $children = $folder->childEntity || return; my $children = $folder->childEntity || return;
for my $child (@{$children}) { for my $child (@{$children}) {
next if $child->type ne 'Folder'; next if ($child->type ne 'Folder');
$self->get_folders(folder => centreon::vmware::common::get_view($self->{connector}, $child), parent => $parent, $self->get_folders(
value => $child->value); folder => centreon::vmware::common::get_view($self->{connector}, $child),
parent => $parent,
value => $child->value
);
} }
} }
@ -79,37 +82,46 @@ sub run {
my $filters = $self->build_filter(label => 'name', search_option => 'datacenter', is_regexp => 'filter'); my $filters = $self->build_filter(label => 'name', search_option => 'datacenter', is_regexp => 'filter');
my @properties = ('name', 'hostFolder', 'vmFolder'); my @properties = ('name', 'hostFolder', 'vmFolder');
my $datacenters = centreon::vmware::common::search_entities(command => $self, view_type => 'Datacenter', my $datacenters = centreon::vmware::common::search_entities(
properties => \@properties, filter => $filters); command => $self,
view_type => 'Datacenter',
properties => \@properties,
filter => $filters
);
return if (!defined($datacenters)); return if (!defined($datacenters));
foreach my $datacenter (@{$datacenters}) { foreach my $datacenter (@{$datacenters}) {
my @properties = ('childType', 'childEntity');
$self->get_folders(folder => centreon::vmware::common::get_view($self->{connector}, $datacenter->vmFolder),
parent => '', value => $datacenter->vmFolder->value);
my @array;
if (defined $datacenter->hostFolder) {
push @array, $datacenter->hostFolder;
}
my $childs = centreon::vmware::common::get_views($self->{connector}, \@array, \@properties);
next if (!defined($childs));
foreach my $child (@{$childs}) {
next if (!$child->childEntity);
my %types = map { $_ => 1 } @{$child->childType};
my %entities = map { $_->type => 1 } @{$child->childEntity};
next if (!defined($types{ComputeResource}) || (!defined($entities{ClusterComputeResource}) &&
!defined($entities{ComputeResource})));
my @properties = ('name', 'host'); my @properties = ('name', 'host');
my $clusters = centreon::vmware::common::get_views($self->{connector}, \@{$child->childEntity}, \@properties); $self->get_folders(
next if (!defined($clusters)); folder => centreon::vmware::common::get_view($self->{connector}, $datacenter->vmFolder),
parent => '',
value => $datacenter->vmFolder->value
);
foreach my $cluster (@{$clusters}) { my ($status, childs);
next if (!$cluster->host); my $clusters = [];
($status, $childs) = centreon::vmware::common::find_entity_views(
connector => $self->{connector},
view_type => 'ClusterComputeResource',
properties => \@properties,
filter => $filters,
begin_entity => $datacenter,
output_message => 0
);
push $clusters, @$childs if (defined($childs));
($status, $childs) = centreon::vmware::common::find_entity_views(
connector => $self->{connector},
view_type => 'ComputeResource',
properties => \@properties,
filter => $filters,
begin_entity => $datacenter,
output_message => 0
);
push $clusters, @$childs if (defined($childs));
foreach my $cluster (@$clusters) {
next if (!$cluster->{'host'});
my @properties = ('name', 'vm', 'config.virtualNicManagerInfo.netConfig', 'config.product.version', my @properties = ('name', 'vm', 'config.virtualNicManagerInfo.netConfig', 'config.product.version',
'config.product.productLineId', 'hardware.systemInfo.vendor', 'hardware.systemInfo.model', 'config.product.productLineId', 'hardware.systemInfo.vendor', 'hardware.systemInfo.model',
@ -118,7 +130,7 @@ sub run {
my $esxs = centreon::vmware::common::get_views($self->{connector}, \@{$cluster->host}, \@properties); my $esxs = centreon::vmware::common::get_views($self->{connector}, \@{$cluster->host}, \@properties);
next if (!defined($esxs)); next if (!defined($esxs));
foreach my $esx (@{$esxs}) { foreach my $esx (@$esxs) {
my %esx; my %esx;
$esx{type} = "esx"; $esx{type} = "esx";
@ -138,12 +150,14 @@ sub run {
} }
} }
push @disco_data, \%esx if ($self->{resource_type} eq 'esx'); push @disco_data, \%esx if (defined($self->{resource_type}) && $self->{resource_type} eq 'esx');
next if ($self->{resource_type} ne 'vm'); next if (!defined($self->{resource_type}) || $self->{resource_type} ne 'vm');
next if (!$esx->vm); next if (!$esx->vm);
@properties = ('parent', 'config.name', 'config.annotation', 'config.template', 'config.uuid', 'config.version', @properties = (
'config.guestId', 'guest.guestState', 'guest.hostName', 'guest.ipAddress', 'runtime.powerState'); 'parent', 'config.name', 'config.annotation', 'config.template', 'config.uuid', 'config.version',
'config.guestId', 'guest.guestState', 'guest.hostName', 'guest.ipAddress', 'runtime.powerState'
);
my $vms = centreon::vmware::common::get_views($self->{connector}, \@{$esx->vm}, \@properties); my $vms = centreon::vmware::common::get_views($self->{connector}, \@{$esx->vm}, \@properties);
next if (!defined($vms)); next if (!defined($vms));
@ -152,7 +166,7 @@ sub run {
next if ($vm->{'config.template'} eq 'true'); next if ($vm->{'config.template'} eq 'true');
my %vm; my %vm;
$vm{type} = "vm"; $vm{type} = 'vm';
$vm{name} = $vm->{'config.name'}; $vm{name} = $vm->{'config.name'};
$vm{uuid} = $vm->{'config.uuid'}; $vm{uuid} = $vm->{'config.uuid'};
$vm{folder} = (defined($vm->parent) && $vm->parent->type eq 'Folder') ? $self->{paths}->{$vm->parent->value} : ''; $vm{folder} = (defined($vm->parent) && $vm->parent->type eq 'Folder') ? $self->{paths}->{$vm->parent->value} : '';
@ -172,7 +186,6 @@ sub run {
} }
} }
} }
}
$disco_stats->{end_time} = time(); $disco_stats->{end_time} = time();
$disco_stats->{duration} = $disco_stats->{end_time} - $disco_stats->{start_time}; $disco_stats->{duration} = $disco_stats->{end_time} - $disco_stats->{start_time};