mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-30 17:15:11 +02:00
enhance discovery folders management
This commit is contained in:
parent
12e545e235
commit
57a1c6c577
@ -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};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user