diff --git a/centreon-plugins/cloud/docker/mode/listcontainers.pm b/centreon-plugins/cloud/docker/mode/listcontainers.pm index f1985d6fe..2db673617 100644 --- a/centreon-plugins/cloud/docker/mode/listcontainers.pm +++ b/centreon-plugins/cloud/docker/mode/listcontainers.pm @@ -35,18 +35,19 @@ sub new { $self->{version} = '1.1'; $options{options}->add_options(arguments => { - "hostname:s" => { name => 'hostname' }, - "port:s" => { name => 'port', default => '2376'}, - "proto:s" => { name => 'proto', default => 'https' }, - "urlpath:s" => { name => 'url_path', default => '/' }, - "credentials" => { name => 'credentials' }, - "username:s" => { name => 'username' }, - "password:s" => { name => 'password' }, - "ssl:s" => { name => 'ssl', }, - "cert-file:s" => { name => 'cert_file' }, - "key-file:s" => { name => 'key_file' }, - "cacert-file:s" => { name => 'cacert_file' }, - "timeout:s" => { name => 'timeout' }, + "hostname:s" => { name => 'hostname' }, + "port:s" => { name => 'port', default => '2376'}, + "proto:s" => { name => 'proto', default => 'https' }, + "urlpath:s" => { name => 'url_path', default => '/' }, + "credentials" => { name => 'credentials' }, + "username:s" => { name => 'username' }, + "password:s" => { name => 'password' }, + "ssl:s" => { name => 'ssl', }, + "cert-file:s" => { name => 'cert_file' }, + "key-file:s" => { name => 'key_file' }, + "cacert-file:s" => { name => 'cacert_file' }, + "exclude:s" => { name => 'exclude' }, + "timeout:s" => { name => 'timeout' }, }); $self->{http} = centreon::plugins::http->new(output => $self->{output}); @@ -65,6 +66,16 @@ sub check_options { $self->{http}->set_options(%{$self->{option_results}}) } +sub check_exclude { + my ($self, %options) = @_; + + if (defined($self->{option_results}->{exclude}) && $self->{option_results}->{exclude} =~ /(^|\s|,)${options{status}}(\s|,|$)/) { + $self->{output}->output_add(long_msg => sprintf("Skipping ${options{status}} container.")); + return 1; + } +return 0; +} + sub api_request { my ($self, %options) = @_; @@ -84,20 +95,22 @@ sub api_request { } foreach my $val (@$webcontent) { + my $containerstate; + if (($val->{Status} =~ m/^Up/) && ($val->{Status} =~ m/^(?:(?!Paused).)*$/)) { + return if ($self->check_exclude(status => 'Running')); + $containerstate = 'Running'; + } elsif ($val->{Status} =~ m/^Exited/) { + return if ($self->check_exclude(status => 'Exited')); + $containerstate = 'Exited'; + } elsif ($val->{Status} =~ m/\(Paused\)$/) { + return if ($self->check_exclude(status => 'Paused')); + $containerstate = 'Paused'; + } my $containername = $val->{Names}->[0]; $containername =~ s/^\///; $self->{container_infos}->{$containername}->{id} = $val->{Id}; $self->{container_infos}->{$containername}->{image} = $val->{Image}; - my $containerstate; - if (($val->{Status} =~ m/^Up/) && ($val->{Status} =~ m/^(?:(?!Paused).)*$/)) { - $containerstate = 'Running'; - } elsif ($val->{Status} =~ m/^Exited/) { - $containerstate = 'Exited'; - } elsif ($val->{Status} =~ m/\(Paused\)$/) { - $containerstate = 'Paused'; - } $self->{container_infos}->{$containername}->{state} = $containerstate; - } } @@ -197,6 +210,10 @@ Specify key to send to the webserver Specify root certificate to send to the webserver +=item B<--exlude> + +Exclude specific container's state (comma seperated list) (Example: --exclude=Paused,Running) + =item B<--timeout> Threshold for HTTP timeout (Default: 3)