Skip to content
Merged
26 changes: 24 additions & 2 deletions plugins/inputs/azure_monitor/azure_monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package azure_monitor

import (
_ "embed"
"errors"
"fmt"
"sync"

Expand All @@ -12,13 +13,14 @@ import (
receiver "github.com/logzio/azure-monitor-metrics-receiver"

"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/config"
"github.com/influxdata/telegraf/plugins/inputs"
)

type AzureMonitor struct {
SubscriptionID string `toml:"subscription_id"`
ClientID string `toml:"client_id"`
ClientSecret string `toml:"client_secret"`
ClientSecret config.Secret `toml:"client_secret"`
Comment thread
skartikey marked this conversation as resolved.
TenantID string `toml:"tenant_id"`
CloudOption string `toml:"cloud_option,omitempty"`
ResourceTargets []*resourceTarget `toml:"resource_target"`
Expand Down Expand Up @@ -63,6 +65,16 @@ func (*AzureMonitor) SampleConfig() string {
}

func (am *AzureMonitor) Init() error {
if am.SubscriptionID == "" {
return errors.New("subscription_id is required")
}
if am.ClientID == "" {
return errors.New("client_id is required")
}
if am.TenantID == "" {
return errors.New("tenant_id is required")
}
Comment thread
skartikey marked this conversation as resolved.
Outdated

var clientOptions azcore.ClientOptions
switch am.CloudOption {
case "AzureChina":
Expand All @@ -75,8 +87,18 @@ func (am *AzureMonitor) Init() error {
return fmt.Errorf("unknown cloud option: %s", am.CloudOption)
}

var clientSecret string
if !am.ClientSecret.Empty() {
secret, err := am.ClientSecret.Get()
if err != nil {
return err
Comment thread
superguillen marked this conversation as resolved.
Outdated
}
clientSecret = secret.String()
defer secret.Destroy()
Comment thread
superguillen marked this conversation as resolved.
Outdated
}

var err error
am.azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions)
am.azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions)
if err != nil {
return err
}
Expand Down
70 changes: 66 additions & 4 deletions plugins/inputs/azure_monitor/azure_monitor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -611,6 +611,36 @@ func TestInit_NoSubscriptionID(t *testing.T) {
require.Error(t, am.Init())
}

func TestInit_NoClientID(t *testing.T) {
file, err := os.ReadFile("testdata/toml/init_no_client_id.toml")
require.NoError(t, err)
require.NotNil(t, file)
require.NotEmpty(t, file)

var am *AzureMonitor
require.NoError(t, toml.Unmarshal(file, &am))

am.Log = testutil.Logger{}
am.azureManager = &mockAzureClientsManager{}

require.Error(t, am.Init())
}

func TestInit_NoTenantID(t *testing.T) {
file, err := os.ReadFile("testdata/toml/init_no_tenant_id.toml")
require.NoError(t, err)
require.NotNil(t, file)
require.NotEmpty(t, file)

var am *AzureMonitor
require.NoError(t, toml.Unmarshal(file, &am))

am.Log = testutil.Logger{}
am.azureManager = &mockAzureClientsManager{}

require.Error(t, am.Init())
}

func TestInit_NoTargets(t *testing.T) {
file, err := os.ReadFile("testdata/toml/init_no_targets.toml")
require.NoError(t, err)
Expand Down Expand Up @@ -911,10 +941,18 @@ func TestGather_Success(t *testing.T) {
resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations))
}

var clientSecret string
if !am.ClientSecret.Empty() {
clientSecretValue, err := am.ClientSecret.Get()
require.NoError(t, err)
clientSecret = clientSecretValue.String()
defer clientSecretValue.Destroy()
}

Comment thread
srebhan marked this conversation as resolved.
Outdated
var clientOptions = azcore.ClientOptions{Cloud: cloud.AzurePublic}

var azureClients *receiver.AzureClients
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions)
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions)
require.NoError(t, err)
require.NotNil(t, azureClients)

Expand Down Expand Up @@ -998,10 +1036,18 @@ func TestGather_China_Success(t *testing.T) {
resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations))
}

var clientSecret string
if !am.ClientSecret.Empty() {
clientSecretValue, err := am.ClientSecret.Get()
require.NoError(t, err)
clientSecret = clientSecretValue.String()
defer clientSecretValue.Destroy()
}

var clientOptions = azcore.ClientOptions{Cloud: cloud.AzureChina}

var azureClients *receiver.AzureClients
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions)
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions)
require.NoError(t, err)
require.NotNil(t, azureClients)

Expand Down Expand Up @@ -1031,10 +1077,18 @@ func TestGather_Government_Success(t *testing.T) {
resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations))
}

var clientSecret string
if !am.ClientSecret.Empty() {
clientSecretValue, err := am.ClientSecret.Get()
require.NoError(t, err)
clientSecret = clientSecretValue.String()
defer clientSecretValue.Destroy()
}

var clientOptions = azcore.ClientOptions{Cloud: cloud.AzureGovernment}

var azureClients *receiver.AzureClients
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions)
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions)
require.NoError(t, err)
require.NotNil(t, azureClients)

Expand Down Expand Up @@ -1064,10 +1118,18 @@ func TestGather_Public_Success(t *testing.T) {
resourceTargets = append(resourceTargets, receiver.NewResourceTarget(target.ResourceID, target.Metrics, target.Aggregations))
}

var clientSecret string
if !am.ClientSecret.Empty() {
clientSecretValue, err := am.ClientSecret.Get()
require.NoError(t, err)
clientSecret = clientSecretValue.String()
defer clientSecretValue.Destroy()
}

var clientOptions = azcore.ClientOptions{Cloud: cloud.AzurePublic}

var azureClients *receiver.AzureClients
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, am.ClientSecret, am.TenantID, clientOptions)
azureClients, err = am.azureManager.createAzureClients(am.SubscriptionID, am.ClientID, clientSecret, am.TenantID, clientOptions)
require.NoError(t, err)
require.NotNil(t, azureClients)

Expand Down
Loading