diff --git a/connectors/vmware/src/centreon/script/centreon_vmware.pm b/connectors/vmware/src/centreon/script/centreon_vmware.pm index a3400792e..5ada8a14b 100644 --- a/connectors/vmware/src/centreon/script/centreon_vmware.pm +++ b/connectors/vmware/src/centreon/script/centreon_vmware.pm @@ -85,6 +85,7 @@ my @load_modules = ( 'centreon::vmware::cmdnethost', 'centreon::vmware::cmdservicehost', 'centreon::vmware::cmdsnapshotvm', + 'centreon::vmware::cmdstatuscluster', 'centreon::vmware::cmdstatushost', 'centreon::vmware::cmdstatusvm', 'centreon::vmware::cmdswaphost', diff --git a/connectors/vmware/src/centreon/vmware/cmdstatuscluster.pm b/connectors/vmware/src/centreon/vmware/cmdstatuscluster.pm new file mode 100644 index 000000000..a21891244 --- /dev/null +++ b/connectors/vmware/src/centreon/vmware/cmdstatuscluster.pm @@ -0,0 +1,87 @@ +# Copyright 2015 Centreon (http://www.centreon.com/) +# +# Centreon is a full-fledged industry-strength solution that meets +# the needs in IT infrastructure and application monitoring for +# service performance. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +package centreon::vmware::cmdstatuscluster; + +use base qw(centreon::vmware::cmdbase); + +use strict; +use warnings; +use centreon::vmware::common; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(%options); + bless $self, $class; + + $self->{commandName} = 'statuscluster'; + + return $self; +} + +sub checkArgs { + my ($self, %options) = @_; + + if (defined($options{arguments}->{cluster_name}) && $options{arguments}->{cluster_name} eq '') { + centreon::vmware::common::set_response(code => 100, short_message => "Argument error: cluster name cannot be null"); + return 1; + } + + return 0; +} + +sub run { + my $self = shift; + + my $vsan_cluster_health; + my $filters = $self->build_filter(label => 'name', search_option => 'cluster_name', is_regexp => 'filter'); + my @properties = ('name', 'summary.overallStatus'); + if ($self->is_vsan_enabled()) { + $vsan_cluster_health = = centreon::vmware::common::vsan_create_mo_view( + vsan_vim => $self->{connector}->{vsan_vim}, + type => 'VsanVcClusterHealthSystem', + value => 'vsan-cluster-health-system', + ); + push @properties, 'configurationEx'; + } + my $views = centreon::vmware::common::search_entities(command => $self, view_type => ' ComputeResource', properties => \@properties, filter => $filters); + return if (!defined($views)); + + my $data = {}; + foreach my $view (@$views) { + my $entity_value = $view->{mo_ref}->{value}; + $data->{$entity_value} = { + name => $view->{name}, + overall_status => $view->{'summary.overallStatus'}->val; + }; + + if (defined($view->{configurationEx}->{vsanConfigInfo}) && $view->{configurationEx}->{vsanConfigInfo}->enabled == 1) { + my $summary = $vsan_cluster_health->VsanQueryVcClusterHealthSummary( + cluster => $view, + includeObjUuids => 'false', + fetchFromCache => 'false', + fields => ['clusterStatus'], + ); + $data->{$entity_value}->{vsan_cluster_status} = $summary->clusterStatus; + } + } + + centreon::vmware::common::set_response(data => $data); +} + +1;