diff --git a/centreon-plugins/cloud/azure/custom/api.pm b/centreon-plugins/cloud/azure/custom/api.pm index dc967c237..ef8c979df 100644 --- a/centreon-plugins/cloud/azure/custom/api.pm +++ b/centreon-plugins/cloud/azure/custom/api.pm @@ -210,12 +210,12 @@ sub request_api { $self->settings(); - my $content = $self->{http}->request(%options); + my $content = $self->{http}->request(%options); if (!defined($content) || $content eq '' || $self->{http}->get_header(name => 'content-length') == 0) { $self->{output}->add_option_msg(short_msg => "Management endpoint API returns empty content [code: '" . $self->{http}->get_code() . "'] [message: '" . $self->{http}->get_message() . "']"); $self->{output}->option_exit(); } - + my $decoded; eval { $decoded = JSON::XS->new->utf8->decode($content); @@ -388,20 +388,29 @@ sub azure_list_resources_set_url { my $uri = URI::Encode->new({encode_reserved => 1}); my $encoded_filter = $uri->encode($filter); - + my $url = $self->{management_endpoint} . "/subscriptions/" . $self->{subscription} . "/resources?api-version=" . $self->{api_version}; $url .= "&\$filter=" . $encoded_filter if (defined($encoded_filter) && $encoded_filter ne ''); - return $url; + return $url; } sub azure_list_resources { my ($self, %options) = @_; + my $full_response = []; my $full_url = $self->azure_list_resources_set_url(%options); - my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); + while (1) { + my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); + foreach (@{$response->{value}}) { + push @$full_response, $_; + } - return $response->{value}; + last if (!defined($response->{nextLink})); + $full_url = $response->{nextLink}; + } + + return $full_response; } sub azure_list_vms_set_url { @@ -410,8 +419,8 @@ sub azure_list_vms_set_url { my $url = $self->{management_endpoint} . "/subscriptions/" . $self->{subscription}; $url .= "/resourceGroups/" . $options{resource_group} if (defined($options{resource_group}) && $options{resource_group} ne ''); $url .= "/providers/Microsoft.Compute/virtualMachines?api-version=" . $self->{api_version}; - - return $url; + + return $url; } sub azure_list_vms { @@ -419,7 +428,7 @@ sub azure_list_vms { my $full_url = $self->azure_list_vms_set_url(%options); my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); - + return $response->{value}; } @@ -427,7 +436,7 @@ sub azure_list_groups_set_url { my ($self, %options) = @_; my $url = $self->{management_endpoint} . "/subscriptions/" . $self->{subscription} . "/resourcegroups?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_groups { @@ -444,7 +453,7 @@ sub azure_list_deployments_set_url { my $url = $self->{management_endpoint} . "/subscriptions/" . $self->{subscription} . "/resourcegroups/" . $options{resource_group} . "/providers/Microsoft.Resources/deployments?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_deployments { @@ -461,7 +470,7 @@ sub azure_list_vaults_set_url { my $url = $self->{management_endpoint} . "/subscriptions/" . $self->{subscription}; $url .= "/resourceGroups/" . $options{resource_group} if (defined($options{resource_group}) && $options{resource_group} ne ''); $url .= "/providers/Microsoft.RecoveryServices/vaults?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_vaults { @@ -479,7 +488,7 @@ sub azure_list_backup_jobs_set_url { $options{resource_group} . "/providers/Microsoft.RecoveryServices/vaults/" . $options{vault_name} . "/backupJobs?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_backup_jobs { @@ -497,7 +506,7 @@ sub azure_list_backup_items_set_url { $options{resource_group} . "/providers/Microsoft.RecoveryServices/vaults/" . $options{vault_name} . "/backupProtectedItems?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_backup_items { @@ -516,7 +525,7 @@ sub azure_list_expressroute_circuits_set_url { $url .= "/resourceGroups/" . $options{resource_group} if (defined($options{resource_group}) && $options{resource_group} ne ''); $url .= "/providers/Microsoft.Network/expressRouteCircuits?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_expressroute_circuits { @@ -534,15 +543,15 @@ sub azure_list_vpn_gateways_set_url { my $url = $self->{management_endpoint} . "/subscriptions/" . $self->{subscription} . "/resourcegroups/" . $options{resource_group} . "/providers/Microsoft.Network/virtualNetworkGateways?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_vpn_gateways { my ($self, %options) = @_; - + my $full_url = $self->azure_list_vpn_gateways_set_url(%options); my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); - + return $response->{value}; } @@ -553,15 +562,15 @@ sub azure_list_virtualnetworks_set_url { $url .= "/resourceGroups/" . $options{resource_group} if (defined($options{resource_group}) && $options{resource_group} ne ''); $url .= "/providers/Microsoft.Network/virtualNetworks?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_virtualnetworks { my ($self, %options) = @_; - + my $full_url = $self->azure_list_virtualnetworks_set_url(%options); my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); - + return $response->{value}; } @@ -573,15 +582,15 @@ sub azure_list_vnet_peerings_set_url { $url .= "/providers/Microsoft.Network/virtualNetworks/" . $options{vnet_name} if (defined($options{vnet_name}) && $options{vnet_name} ne ''); $url .= "/virtualNetworkPeerings?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_vnet_peerings { my ($self, %options) = @_; - + my $full_url = $self->azure_list_vnet_peerings_set_url(%options); my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); - + return $response->{value}; } @@ -592,15 +601,15 @@ sub azure_list_sqlservers_set_url { $url .= "/resourceGroups/" . $options{resource_group} if (defined($options{resource_group}) && $options{resource_group} ne ''); $url .= "/providers/Microsoft.Sql/servers?api-version=" . $self->{api_version}; - return $url; + return $url; } sub azure_list_sqlservers { my ($self, %options) = @_; - + my $full_url = $self->azure_list_sqlservers_set_url(%options); my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); - + return $response->{value}; } @@ -611,16 +620,16 @@ sub azure_list_sqldatabases_set_url { $url .= "/resourceGroups/" . $options{resource_group} if (defined($options{resource_group}) && $options{resource_group} ne ''); $url .= "/providers/Microsoft.Sql/servers/" . $options{server} if (defined($options{server}) && $options{server} ne ''); $url .= "/databases?api-version=" . $self->{api_version}; - - return $url; + + return $url; } sub azure_list_sqldatabases { my ($self, %options) = @_; - + my $full_url = $self->azure_list_sqldatabases_set_url(%options); my $response = $self->request_api(method => 'GET', full_url => $full_url, hostname => ''); - + return $response->{value}; }