From 082ab3a824e4b015aa77960a8d7f15d047b0ced6 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Wed, 13 Aug 2025 11:03:04 +0100 Subject: [PATCH 01/12] [processor/resourcedetection] support openstack nova into resourcedetection processor Signed-off-by: Paulo Dias --- .chloggen/feat_39117.yaml | 27 +++ .../openstack/nova/metadata.go | 97 +++++++++ .../resourcedetectionprocessor/config.go | 7 + .../resourcedetectionprocessor/factory.go | 2 + .../internal/openstack/nova/config.go | 35 ++++ .../internal/openstack/nova/documentation.md | 18 ++ .../internal/metadata/generated_config.go | 67 +++++++ .../metadata/generated_config_test.go | 71 +++++++ .../internal/metadata/generated_resource.go | 85 ++++++++ .../metadata/generated_resource_test.go | 82 ++++++++ .../internal/metadata/testdata/config.yaml | 37 ++++ .../internal/openstack/nova/metadata.yaml | 41 ++++ .../internal/openstack/nova/nova.go | 186 ++++++++++++++++++ 13 files changed, 755 insertions(+) create mode 100644 .chloggen/feat_39117.yaml create mode 100644 internal/metadataproviders/openstack/nova/metadata.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/config.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/nova.go diff --git a/.chloggen/feat_39117.yaml b/.chloggen/feat_39117.yaml new file mode 100644 index 0000000000000..1fdb2d505a6c7 --- /dev/null +++ b/.chloggen/feat_39117.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: resourcedetection + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Add Openstack Nova resource detector to gather Openstack instance metadata as resource attributes" + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [39117] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: The Openstack Nova resource detector has been added to gather metadata such as host name, ID, cloud provider, region, and availability zone as resource attributes, enhancing the observability of Openstack environments. + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: ["user"] diff --git a/internal/metadataproviders/openstack/nova/metadata.go b/internal/metadataproviders/openstack/nova/metadata.go new file mode 100644 index 0000000000000..f67171f43e0b3 --- /dev/null +++ b/internal/metadataproviders/openstack/nova/metadata.go @@ -0,0 +1,97 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package nova // import "github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders/openstack/nova" + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "time" +) + +const ( + metadataURL = "http://169.254.169.254/openstack/latest/meta_data.json" +) + +type Provider interface { + Get(ctx context.Context) (Document, error) + Hostname(ctx context.Context) (string, error) + InstanceID(ctx context.Context) (string, error) +} + +type metadataClient struct { + client *http.Client +} + +var _ Provider = (*metadataClient)(nil) + +// Document is a minimal representation of OpenStack's meta_data.json +type Document struct { + UUID string `json:"uuid"` + Hostname string `json:"hostname"` + Name string `json:"name"` + Meta map[string]string `json:"meta"` +} + +// NewProvider returns a new Nova metadata provider with a short timeout. +func NewProvider() Provider { + return &metadataClient{ + client: &http.Client{ + Timeout: 2 * time.Second, + }, + } +} + +func (c *metadataClient) getMetadata(ctx context.Context) (Document, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, metadataURL, nil) + if err != nil { + return Document{}, err + } + + resp, err := c.client.Do(req) + if err != nil { + return Document{}, fmt.Errorf("failed to query nova metadata service: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(resp.Body) + return Document{}, fmt.Errorf("metadata service returned %d: %s", resp.StatusCode, string(body)) + } + + var doc Document + if err := json.NewDecoder(resp.Body).Decode(&doc); err != nil { + return Document{}, fmt.Errorf("failed to decode nova metadata: %w", err) + } + + return doc, nil +} + +func (c *metadataClient) InstanceID(ctx context.Context) (string, error) { + doc, err := c.getMetadata(ctx) + if err != nil { + return "", err + } + if doc.UUID == "" { + return "", fmt.Errorf("instance ID (uuid) not found in metadata") + } + return doc.UUID, nil +} + +func (c *metadataClient) Hostname(ctx context.Context) (string, error) { + doc, err := c.getMetadata(ctx) + if err != nil { + return "", err + } + if doc.Hostname == "" { + return "", fmt.Errorf("hostname not found in metadata") + } + return doc.Hostname, nil +} + +func (c *metadataClient) Get(ctx context.Context) (Document, error) { + return c.getMetadata(ctx) +} diff --git a/processor/resourcedetectionprocessor/config.go b/processor/resourcedetectionprocessor/config.go index 8685443bea189..7c2ee27ae364c 100644 --- a/processor/resourcedetectionprocessor/config.go +++ b/processor/resourcedetectionprocessor/config.go @@ -21,6 +21,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/k8snode" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/kubeadm" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openshift" + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/system" ) @@ -84,6 +85,9 @@ type DetectorConfig struct { // OpenShift contains user-specified configurations for the OpenShift detector OpenShiftConfig openshift.Config `mapstructure:"openshift"` + // OpenShift contains user-specified configurations for the OpenShift detector + OpenStackNovaConfig nova.Config `mapstructure:"nova"` + // K8SNode contains user-specified configurations for the K8SNode detector K8SNodeConfig k8snode.Config `mapstructure:"k8snode"` @@ -106,6 +110,7 @@ func detectorCreateDefaultConfig() DetectorConfig { HerokuConfig: heroku.CreateDefaultConfig(), SystemConfig: system.CreateDefaultConfig(), OpenShiftConfig: openshift.CreateDefaultConfig(), + OpenStackNovaConfig: nova.CreateDefaultConfig(), K8SNodeConfig: k8snode.CreateDefaultConfig(), KubeadmConfig: kubeadm.CreateDefaultConfig(), } @@ -139,6 +144,8 @@ func (d *DetectorConfig) GetConfigFromType(detectorType internal.DetectorType) i return d.SystemConfig case openshift.TypeStr: return d.OpenShiftConfig + case nova.TypeStr: + return d.OpenStackNovaConfig case k8snode.TypeStr: return d.K8SNodeConfig case kubeadm.TypeStr: diff --git a/processor/resourcedetectionprocessor/factory.go b/processor/resourcedetectionprocessor/factory.go index ab3fd107be7dc..8dfb8440660b7 100644 --- a/processor/resourcedetectionprocessor/factory.go +++ b/processor/resourcedetectionprocessor/factory.go @@ -36,6 +36,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/kubeadm" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/metadata" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openshift" + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/system" ) @@ -67,6 +68,7 @@ func NewFactory() processor.Factory { heroku.TypeStr: heroku.NewDetector, system.TypeStr: system.NewDetector, openshift.TypeStr: openshift.NewDetector, + nova.TypeStr: nova.NewDetector, k8snode.TypeStr: k8snode.NewDetector, kubeadm.TypeStr: kubeadm.NewDetector, dynatrace.TypeStr: dynatrace.NewDetector, diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/config.go b/processor/resourcedetectionprocessor/internal/openstack/nova/config.go new file mode 100644 index 0000000000000..1e6e5b7ff0273 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/config.go @@ -0,0 +1,35 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package nova // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova" + +import ( + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata" +) + +// Config defines user-specified configurations unique to the Nova detector. +type Config struct { + // Labels is a list of regex patterns to match Nova instance metadata keys + // (from the "meta" map) that should be added as resource attributes. + // Matched keys are emitted as "openstack.meta.: ". + Labels []string `mapstructure:"labels"` + + // ResourceAttributes controls which standard resource attributes are enabled + // (e.g., host.id, host.name, cloud.provider, etc.). + ResourceAttributes metadata.ResourceAttributesConfig `mapstructure:"resource_attributes"` + + // FailOnMissingMetadata, if true, causes the detector to return an error + // when the Nova metadata service is unavailable or required fields are missing. + // If false (default), the detector does best-effort population. + FailOnMissingMetadata bool `mapstructure:"fail_on_missing_metadata"` +} + +// CreateDefaultConfig returns the default configuration for the Nova detector. +func CreateDefaultConfig() Config { + return Config{ + Labels: []string{}, + ResourceAttributes: metadata.DefaultResourceAttributesConfig(), + // default: best-effort + FailOnMissingMetadata: false, + } +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md b/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md new file mode 100644 index 0000000000000..e7441afa9ab04 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md @@ -0,0 +1,18 @@ +[comment]: <> (Code generated by mdatagen. DO NOT EDIT.) + +# resourcedetectionprocessor/nova + +**Parent Component:** resourcedetection + +## Resource Attributes + +| Name | Description | Values | Enabled | +| ---- | ----------- | ------ | ------- | +| cloud.account.id | The cloud account id (e.g., OpenStack project or tenant ID) | Any Str | true | +| cloud.availability_zone | The cloud availability zone | Any Str | true | +| cloud.platform | The cloud platform | Any Str | true | +| cloud.provider | The cloud provider | Any Str | true | +| cloud.region | The cloud region | Any Str | true | +| host.id | The host.id | Any Str | true | +| host.name | The hostname | Any Str | true | +| host.type | The host instance type (Nova flavor name or ID) | Any Str | true | diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go new file mode 100644 index 0000000000000..2df6b786fdc4c --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go @@ -0,0 +1,67 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "go.opentelemetry.io/collector/confmap" +) + +// ResourceAttributeConfig provides common config for a particular resource attribute. +type ResourceAttributeConfig struct { + Enabled bool `mapstructure:"enabled"` + + enabledSetByUser bool +} + +func (rac *ResourceAttributeConfig) Unmarshal(parser *confmap.Conf) error { + if parser == nil { + return nil + } + err := parser.Unmarshal(rac) + if err != nil { + return err + } + rac.enabledSetByUser = parser.IsSet("enabled") + return nil +} + +// ResourceAttributesConfig provides config for resourcedetectionprocessor/nova resource attributes. +type ResourceAttributesConfig struct { + CloudAccountID ResourceAttributeConfig `mapstructure:"cloud.account.id"` + CloudAvailabilityZone ResourceAttributeConfig `mapstructure:"cloud.availability_zone"` + CloudPlatform ResourceAttributeConfig `mapstructure:"cloud.platform"` + CloudProvider ResourceAttributeConfig `mapstructure:"cloud.provider"` + CloudRegion ResourceAttributeConfig `mapstructure:"cloud.region"` + HostID ResourceAttributeConfig `mapstructure:"host.id"` + HostName ResourceAttributeConfig `mapstructure:"host.name"` + HostType ResourceAttributeConfig `mapstructure:"host.type"` +} + +func DefaultResourceAttributesConfig() ResourceAttributesConfig { + return ResourceAttributesConfig{ + CloudAccountID: ResourceAttributeConfig{ + Enabled: true, + }, + CloudAvailabilityZone: ResourceAttributeConfig{ + Enabled: true, + }, + CloudPlatform: ResourceAttributeConfig{ + Enabled: true, + }, + CloudProvider: ResourceAttributeConfig{ + Enabled: true, + }, + CloudRegion: ResourceAttributeConfig{ + Enabled: true, + }, + HostID: ResourceAttributeConfig{ + Enabled: true, + }, + HostName: ResourceAttributeConfig{ + Enabled: true, + }, + HostType: ResourceAttributeConfig{ + Enabled: true, + }, + } +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go new file mode 100644 index 0000000000000..4214876ad5459 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go @@ -0,0 +1,71 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "path/filepath" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/stretchr/testify/require" + + "go.opentelemetry.io/collector/confmap/confmaptest" +) + +func TestResourceAttributesConfig(t *testing.T) { + tests := []struct { + name string + want ResourceAttributesConfig + }{ + { + name: "default", + want: DefaultResourceAttributesConfig(), + }, + { + name: "all_set", + want: ResourceAttributesConfig{ + CloudAccountID: ResourceAttributeConfig{Enabled: true}, + CloudAvailabilityZone: ResourceAttributeConfig{Enabled: true}, + CloudPlatform: ResourceAttributeConfig{Enabled: true}, + CloudProvider: ResourceAttributeConfig{Enabled: true}, + CloudRegion: ResourceAttributeConfig{Enabled: true}, + HostID: ResourceAttributeConfig{Enabled: true}, + HostName: ResourceAttributeConfig{Enabled: true}, + HostType: ResourceAttributeConfig{Enabled: true}, + }, + }, + { + name: "none_set", + want: ResourceAttributesConfig{ + CloudAccountID: ResourceAttributeConfig{Enabled: false}, + CloudAvailabilityZone: ResourceAttributeConfig{Enabled: false}, + CloudPlatform: ResourceAttributeConfig{Enabled: false}, + CloudProvider: ResourceAttributeConfig{Enabled: false}, + CloudRegion: ResourceAttributeConfig{Enabled: false}, + HostID: ResourceAttributeConfig{Enabled: false}, + HostName: ResourceAttributeConfig{Enabled: false}, + HostType: ResourceAttributeConfig{Enabled: false}, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cfg := loadResourceAttributesConfig(t, tt.name) + diff := cmp.Diff(tt.want, cfg, cmpopts.IgnoreUnexported(ResourceAttributeConfig{})) + require.Emptyf(t, diff, "Config mismatch (-expected +actual):\n%s", diff) + }) + } +} + +func loadResourceAttributesConfig(t *testing.T, name string) ResourceAttributesConfig { + cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml")) + require.NoError(t, err) + sub, err := cm.Sub(name) + require.NoError(t, err) + sub, err = sub.Sub("resource_attributes") + require.NoError(t, err) + cfg := DefaultResourceAttributesConfig() + require.NoError(t, sub.Unmarshal(&cfg)) + return cfg +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go new file mode 100644 index 0000000000000..21b9655c3a38c --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go @@ -0,0 +1,85 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "go.opentelemetry.io/collector/pdata/pcommon" +) + +// ResourceBuilder is a helper struct to build resources predefined in metadata.yaml. +// The ResourceBuilder is not thread-safe and must not to be used in multiple goroutines. +type ResourceBuilder struct { + config ResourceAttributesConfig + res pcommon.Resource +} + +// NewResourceBuilder creates a new ResourceBuilder. This method should be called on the start of the application. +func NewResourceBuilder(rac ResourceAttributesConfig) *ResourceBuilder { + return &ResourceBuilder{ + config: rac, + res: pcommon.NewResource(), + } +} + +// SetCloudAccountID sets provided value as "cloud.account.id" attribute. +func (rb *ResourceBuilder) SetCloudAccountID(val string) { + if rb.config.CloudAccountID.Enabled { + rb.res.Attributes().PutStr("cloud.account.id", val) + } +} + +// SetCloudAvailabilityZone sets provided value as "cloud.availability_zone" attribute. +func (rb *ResourceBuilder) SetCloudAvailabilityZone(val string) { + if rb.config.CloudAvailabilityZone.Enabled { + rb.res.Attributes().PutStr("cloud.availability_zone", val) + } +} + +// SetCloudPlatform sets provided value as "cloud.platform" attribute. +func (rb *ResourceBuilder) SetCloudPlatform(val string) { + if rb.config.CloudPlatform.Enabled { + rb.res.Attributes().PutStr("cloud.platform", val) + } +} + +// SetCloudProvider sets provided value as "cloud.provider" attribute. +func (rb *ResourceBuilder) SetCloudProvider(val string) { + if rb.config.CloudProvider.Enabled { + rb.res.Attributes().PutStr("cloud.provider", val) + } +} + +// SetCloudRegion sets provided value as "cloud.region" attribute. +func (rb *ResourceBuilder) SetCloudRegion(val string) { + if rb.config.CloudRegion.Enabled { + rb.res.Attributes().PutStr("cloud.region", val) + } +} + +// SetHostID sets provided value as "host.id" attribute. +func (rb *ResourceBuilder) SetHostID(val string) { + if rb.config.HostID.Enabled { + rb.res.Attributes().PutStr("host.id", val) + } +} + +// SetHostName sets provided value as "host.name" attribute. +func (rb *ResourceBuilder) SetHostName(val string) { + if rb.config.HostName.Enabled { + rb.res.Attributes().PutStr("host.name", val) + } +} + +// SetHostType sets provided value as "host.type" attribute. +func (rb *ResourceBuilder) SetHostType(val string) { + if rb.config.HostType.Enabled { + rb.res.Attributes().PutStr("host.type", val) + } +} + +// Emit returns the built resource and resets the internal builder state. +func (rb *ResourceBuilder) Emit() pcommon.Resource { + r := rb.res + rb.res = pcommon.NewResource() + return r +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go new file mode 100644 index 0000000000000..8446379a3572d --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go @@ -0,0 +1,82 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestResourceBuilder(t *testing.T) { + for _, tt := range []string{"default", "all_set", "none_set"} { + t.Run(tt, func(t *testing.T) { + cfg := loadResourceAttributesConfig(t, tt) + rb := NewResourceBuilder(cfg) + rb.SetCloudAccountID("cloud.account.id-val") + rb.SetCloudAvailabilityZone("cloud.availability_zone-val") + rb.SetCloudPlatform("cloud.platform-val") + rb.SetCloudProvider("cloud.provider-val") + rb.SetCloudRegion("cloud.region-val") + rb.SetHostID("host.id-val") + rb.SetHostName("host.name-val") + rb.SetHostType("host.type-val") + + res := rb.Emit() + assert.Equal(t, 0, rb.Emit().Attributes().Len()) // Second call should return empty Resource + + switch tt { + case "default": + assert.Equal(t, 8, res.Attributes().Len()) + case "all_set": + assert.Equal(t, 8, res.Attributes().Len()) + case "none_set": + assert.Equal(t, 0, res.Attributes().Len()) + return + default: + assert.Failf(t, "unexpected test case: %s", tt) + } + + val, ok := res.Attributes().Get("cloud.account.id") + assert.True(t, ok) + if ok { + assert.Equal(t, "cloud.account.id-val", val.Str()) + } + val, ok = res.Attributes().Get("cloud.availability_zone") + assert.True(t, ok) + if ok { + assert.Equal(t, "cloud.availability_zone-val", val.Str()) + } + val, ok = res.Attributes().Get("cloud.platform") + assert.True(t, ok) + if ok { + assert.Equal(t, "cloud.platform-val", val.Str()) + } + val, ok = res.Attributes().Get("cloud.provider") + assert.True(t, ok) + if ok { + assert.Equal(t, "cloud.provider-val", val.Str()) + } + val, ok = res.Attributes().Get("cloud.region") + assert.True(t, ok) + if ok { + assert.Equal(t, "cloud.region-val", val.Str()) + } + val, ok = res.Attributes().Get("host.id") + assert.True(t, ok) + if ok { + assert.Equal(t, "host.id-val", val.Str()) + } + val, ok = res.Attributes().Get("host.name") + assert.True(t, ok) + if ok { + assert.Equal(t, "host.name-val", val.Str()) + } + val, ok = res.Attributes().Get("host.type") + assert.True(t, ok) + if ok { + assert.Equal(t, "host.type-val", val.Str()) + } + }) + } +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml new file mode 100644 index 0000000000000..19ed604430cd7 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml @@ -0,0 +1,37 @@ +default: +all_set: + resource_attributes: + cloud.account.id: + enabled: true + cloud.availability_zone: + enabled: true + cloud.platform: + enabled: true + cloud.provider: + enabled: true + cloud.region: + enabled: true + host.id: + enabled: true + host.name: + enabled: true + host.type: + enabled: true +none_set: + resource_attributes: + cloud.account.id: + enabled: false + cloud.availability_zone: + enabled: false + cloud.platform: + enabled: false + cloud.provider: + enabled: false + cloud.region: + enabled: false + host.id: + enabled: false + host.name: + enabled: false + host.type: + enabled: false diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml new file mode 100644 index 0000000000000..4fe09d7786e62 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml @@ -0,0 +1,41 @@ +type: resourcedetectionprocessor/nova + +parent: resourcedetection + +resource_attributes: + host.name: + description: The hostname + type: string + enabled: true + host.id: + description: The host.id + type: string + enabled: true + cloud.provider: + description: The cloud provider + type: string + enabled: true + cloud.account.id: + description: The cloud account id (e.g., OpenStack project or tenant ID) + type: string + enabled: true + cloud.platform: + description: The cloud platform + type: string + enabled: true + cloud.region: + description: The cloud region + type: string + enabled: true + cloud.availability_zone: + description: The cloud availability zone + type: string + enabled: true + host.type: + description: The host instance type (Nova flavor name or ID) + type: string + enabled: true + +tests: + skip_lifecycle: true + skip_shutdown: true diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go new file mode 100644 index 0000000000000..93a8a32ae3b07 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go @@ -0,0 +1,186 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package nova // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova" + +import ( + "context" + "fmt" + "regexp" + + "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/collector/processor" + conventions "go.opentelemetry.io/otel/semconv/v1.6.1" + + // "go.uber.org/multierr" + "go.uber.org/zap" + + novaprovider "github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders/openstack/nova" + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal" + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata" +) + +const ( + // TypeStr is the detector type id. + TypeStr = "nova" + + // LabelPrefix is the attribute prefix for Nova metadata keys (user/tenant-provided). + LabelPrefix = "openstack.nova.meta." +) + +var _ internal.Detector = (*Detector)(nil) + +// Detector queries the OpenStack Nova metadata service and emits resource attributes. +type Detector struct { + logger *zap.Logger + rb *metadata.ResourceBuilder + metadataProvider novaprovider.Provider + labelRegexes []*regexp.Regexp + failOnMissingMetadata bool +} + +// NewDetector creates a Nova detector. +func NewDetector(set processor.Settings, dcfg internal.DetectorConfig) (internal.Detector, error) { + cfg := dcfg.(Config) + + rs, err := compileRegexes(cfg.Labels) + if err != nil { + return nil, err + } + + return &Detector{ + logger: set.Logger, + rb: metadata.NewResourceBuilder(cfg.ResourceAttributes), // ✅ init RB + metadataProvider: novaprovider.NewProvider(), // ✅ correct field + labelRegexes: rs, + failOnMissingMetadata: cfg.FailOnMissingMetadata, + }, nil +} + +// Detect implements internal.Detector. +// func (d *Detector) Detect(ctx context.Context) (pcommon.Resource, string, error) { +// res := pcommon.NewResource() +// attrs := res.Attributes() + +// // Identify cloud first (stable, even if some fields fail). +// attrs.PutStr(string(conventions.CloudProviderKey), "openstack") +// attrs.PutStr(string(conventions.CloudPlatformKey), "openstack_nova") + +// // Pull the document. +// doc, err := d.provider.Get(ctx) +// if err != nil { +// if d.failOnMissingMD { +// return res, conventions.SchemaURL, err +// } +// // best-effort: return what we have (cloud.*) +// d.logger.Debug("nova metadata get failed (best-effort mode)", zap.Error(err)) +// return res, conventions.SchemaURL, nil +// } + +// var aggErr error + +// // host.id (uuid) +// if doc.UUID != "" { +// attrs.PutStr(string(conventions.HostIDKey), doc.UUID) +// } else { +// aggErr = multierr.Append(aggErr, errMissing("uuid")) +// } + +// // host.name (hostname) +// if doc.Hostname != "" { +// attrs.PutStr(string(conventions.HostNameKey), doc.Hostname) +// } else { +// // Some deployments only set Name; fall back if Hostname is empty. +// if doc.Name != "" { +// attrs.PutStr(string(conventions.HostNameKey), doc.Name) +// } else { +// aggErr = multierr.Append(aggErr, errMissing("hostname")) +// } +// } + +// // Optional: capture selected meta labels under openstack.meta.* +// if len(d.labelRegexes) > 0 && doc.Meta != nil { +// for k, v := range doc.Meta { +// if regexArrayMatch(d.labelRegexes, k) { +// attrs.PutStr(LabelPrefix+k, v) +// } +// } +// } + +// // Surface missing-field errors only if requested. +// if d.failOnMissingMD && aggErr != nil { +// return res, conventions.SchemaURL, aggErr +// } + +// return res, conventions.SchemaURL, nil +// } + +func (d *Detector) Detect(ctx context.Context) (resource pcommon.Resource, schemaURL string, err error) { + if _, err = d.metadataProvider.InstanceID(ctx); err != nil { + d.logger.Debug("OpenStack Nova metadata unavailable", zap.Error(err)) + if d.failOnMissingMetadata { + return pcommon.NewResource(), "", err + } + return pcommon.NewResource(), "", nil + } + + meta, err := d.metadataProvider.Get(ctx) + if err != nil { + return pcommon.NewResource(), "", fmt.Errorf("failed getting Nova metadata: %w", err) + } + + hostname, err := d.metadataProvider.Hostname(ctx) + if err != nil { + return pcommon.NewResource(), "", fmt.Errorf("failed getting hostname: %w", err) + } + + d.rb.SetCloudProvider("openstack") + d.rb.SetCloudPlatform("openstack_nova") + d.rb.SetHostID(meta.UUID) + d.rb.SetHostName(hostname) + res := d.rb.Emit() + + // Optional: capture selected meta labels under openstack.meta. + if len(d.labelRegexes) > 0 && meta.Meta != nil { + attrs := res.Attributes() + for k, v := range meta.Meta { + if regexArrayMatch(d.labelRegexes, k) { + attrs.PutStr(LabelPrefix+k, v) + } + } + } + + return res, conventions.SchemaURL, nil +} + +func compileRegexes(pats []string) ([]*regexp.Regexp, error) { + if len(pats) == 0 { + return nil, nil + } + out := make([]*regexp.Regexp, 0, len(pats)) + for _, p := range pats { + re, err := regexp.Compile(p) + if err != nil { + return nil, err + } + out = append(out, re) + } + return out, nil +} + +func regexArrayMatch(arr []*regexp.Regexp, s string) bool { + for _, r := range arr { + if r.MatchString(s) { + return true + } + } + return false +} + +func errMissing(field string) error { + return &missingFieldError{field: field} +} + +type missingFieldError struct{ field string } + +func (e *missingFieldError) Error() string { return "nova metadata missing field: " + e.field } From 03acea6620d9b31f8dd47ff1fed2391410d66dae Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Wed, 13 Aug 2025 13:48:11 +0100 Subject: [PATCH 02/12] feat: add host.type, cloud.account.id and cloud.availability_zone Signed-off-by: Paulo Dias --- .../openstack/nova/metadata.go | 41 ++++++++++++++++--- .../internal/openstack/nova/nova.go | 9 ++++ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/internal/metadataproviders/openstack/nova/metadata.go b/internal/metadataproviders/openstack/nova/metadata.go index f67171f43e0b3..24e9fd5cb9960 100644 --- a/internal/metadataproviders/openstack/nova/metadata.go +++ b/internal/metadataproviders/openstack/nova/metadata.go @@ -13,13 +13,15 @@ import ( ) const ( - metadataURL = "http://169.254.169.254/openstack/latest/meta_data.json" + openstackMetaURL = "http://169.254.169.254/openstack/latest/meta_data.json" + ec2MetaBaseURL = "http://169.254.169.254/latest/meta-data/" ) type Provider interface { Get(ctx context.Context) (Document, error) Hostname(ctx context.Context) (string, error) InstanceID(ctx context.Context) (string, error) + InstanceType(ctx context.Context) (string, error) } type metadataClient struct { @@ -30,10 +32,12 @@ var _ Provider = (*metadataClient)(nil) // Document is a minimal representation of OpenStack's meta_data.json type Document struct { - UUID string `json:"uuid"` - Hostname string `json:"hostname"` - Name string `json:"name"` - Meta map[string]string `json:"meta"` + AvailabilityZone string `json:"availability_zone"` + Hostname string `json:"hostname"` + Name string `json:"name"` + Meta map[string]string `json:"meta"` + ProjectID string `json:"project_id"` + UUID string `json:"uuid"` } // NewProvider returns a new Nova metadata provider with a short timeout. @@ -46,7 +50,7 @@ func NewProvider() Provider { } func (c *metadataClient) getMetadata(ctx context.Context) (Document, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, metadataURL, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, openstackMetaURL, nil) if err != nil { return Document{}, err } @@ -70,6 +74,27 @@ func (c *metadataClient) getMetadata(ctx context.Context) (Document, error) { return doc, nil } +func (c *metadataClient) getEc2Metadata(ctx context.Context, fullURL string) (string, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, fullURL, nil) + if err != nil { + return "", err + } + resp, err := c.client.Do(req) + if err != nil { + return "", fmt.Errorf("metadata GET %s: %w", fullURL, err) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + b, _ := io.ReadAll(resp.Body) + return "", fmt.Errorf("metadata %s returned %d: %s", fullURL, resp.StatusCode, string(b)) + } + b, err := io.ReadAll(resp.Body) + if err != nil { + return "", err + } + return string(b), nil +} + func (c *metadataClient) InstanceID(ctx context.Context) (string, error) { doc, err := c.getMetadata(ctx) if err != nil { @@ -92,6 +117,10 @@ func (c *metadataClient) Hostname(ctx context.Context) (string, error) { return doc.Hostname, nil } +func (c *metadataClient) InstanceType(ctx context.Context) (string, error) { + return c.getEc2Metadata(ctx, ec2MetaBaseURL+"instance-type") +} + func (c *metadataClient) Get(ctx context.Context) (Document, error) { return c.getMetadata(ctx) } diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go index 93a8a32ae3b07..d5e4944dbaa7f 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go @@ -134,8 +134,17 @@ func (d *Detector) Detect(ctx context.Context) (resource pcommon.Resource, schem return pcommon.NewResource(), "", fmt.Errorf("failed getting hostname: %w", err) } + // Optional: EC2‑compatible instance type (don’t fail if missing) + if instance_type, err := d.metadataProvider.InstanceType(ctx); err == nil && instance_type != "" { + d.rb.SetHostType(instance_type) + } else if err != nil { + d.logger.Debug("EC2-compatible instance type unavailable", zap.Error(err)) + } + d.rb.SetCloudProvider("openstack") d.rb.SetCloudPlatform("openstack_nova") + d.rb.SetCloudAccountID(meta.ProjectID) + d.rb.SetCloudAvailabilityZone(meta.AvailabilityZone) d.rb.SetHostID(meta.UUID) d.rb.SetHostName(hostname) res := d.rb.Emit() From 6cd28483b35f516e2cb789d342ffe9dfd4e9391e Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Wed, 13 Aug 2025 13:54:19 +0100 Subject: [PATCH 03/12] fix: remove cloud.region Signed-off-by: Paulo Dias --- .../internal/openstack/nova/documentation.md | 1 - .../nova/internal/metadata/generated_config.go | 4 ---- .../nova/internal/metadata/generated_config_test.go | 3 +-- .../nova/internal/metadata/generated_resource.go | 7 ------- .../nova/internal/metadata/generated_resource_test.go | 10 ++-------- .../nova/internal/metadata/testdata/config.yaml | 4 ---- .../internal/openstack/nova/metadata.yaml | 4 ---- 7 files changed, 3 insertions(+), 30 deletions(-) diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md b/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md index e7441afa9ab04..70299f5c95b35 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md @@ -12,7 +12,6 @@ | cloud.availability_zone | The cloud availability zone | Any Str | true | | cloud.platform | The cloud platform | Any Str | true | | cloud.provider | The cloud provider | Any Str | true | -| cloud.region | The cloud region | Any Str | true | | host.id | The host.id | Any Str | true | | host.name | The hostname | Any Str | true | | host.type | The host instance type (Nova flavor name or ID) | Any Str | true | diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go index 2df6b786fdc4c..c74046cbba878 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go @@ -31,7 +31,6 @@ type ResourceAttributesConfig struct { CloudAvailabilityZone ResourceAttributeConfig `mapstructure:"cloud.availability_zone"` CloudPlatform ResourceAttributeConfig `mapstructure:"cloud.platform"` CloudProvider ResourceAttributeConfig `mapstructure:"cloud.provider"` - CloudRegion ResourceAttributeConfig `mapstructure:"cloud.region"` HostID ResourceAttributeConfig `mapstructure:"host.id"` HostName ResourceAttributeConfig `mapstructure:"host.name"` HostType ResourceAttributeConfig `mapstructure:"host.type"` @@ -51,9 +50,6 @@ func DefaultResourceAttributesConfig() ResourceAttributesConfig { CloudProvider: ResourceAttributeConfig{ Enabled: true, }, - CloudRegion: ResourceAttributeConfig{ - Enabled: true, - }, HostID: ResourceAttributeConfig{ Enabled: true, }, diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go index 4214876ad5459..07ecb9f1d8151 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go @@ -10,6 +10,7 @@ import ( "github.com/google/go-cmp/cmp/cmpopts" "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/confmaptest" ) @@ -29,7 +30,6 @@ func TestResourceAttributesConfig(t *testing.T) { CloudAvailabilityZone: ResourceAttributeConfig{Enabled: true}, CloudPlatform: ResourceAttributeConfig{Enabled: true}, CloudProvider: ResourceAttributeConfig{Enabled: true}, - CloudRegion: ResourceAttributeConfig{Enabled: true}, HostID: ResourceAttributeConfig{Enabled: true}, HostName: ResourceAttributeConfig{Enabled: true}, HostType: ResourceAttributeConfig{Enabled: true}, @@ -42,7 +42,6 @@ func TestResourceAttributesConfig(t *testing.T) { CloudAvailabilityZone: ResourceAttributeConfig{Enabled: false}, CloudPlatform: ResourceAttributeConfig{Enabled: false}, CloudProvider: ResourceAttributeConfig{Enabled: false}, - CloudRegion: ResourceAttributeConfig{Enabled: false}, HostID: ResourceAttributeConfig{Enabled: false}, HostName: ResourceAttributeConfig{Enabled: false}, HostType: ResourceAttributeConfig{Enabled: false}, diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go index 21b9655c3a38c..d41ed3681a555 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource.go @@ -49,13 +49,6 @@ func (rb *ResourceBuilder) SetCloudProvider(val string) { } } -// SetCloudRegion sets provided value as "cloud.region" attribute. -func (rb *ResourceBuilder) SetCloudRegion(val string) { - if rb.config.CloudRegion.Enabled { - rb.res.Attributes().PutStr("cloud.region", val) - } -} - // SetHostID sets provided value as "host.id" attribute. func (rb *ResourceBuilder) SetHostID(val string) { if rb.config.HostID.Enabled { diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go index 8446379a3572d..5009bdc87bfed 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_resource_test.go @@ -17,7 +17,6 @@ func TestResourceBuilder(t *testing.T) { rb.SetCloudAvailabilityZone("cloud.availability_zone-val") rb.SetCloudPlatform("cloud.platform-val") rb.SetCloudProvider("cloud.provider-val") - rb.SetCloudRegion("cloud.region-val") rb.SetHostID("host.id-val") rb.SetHostName("host.name-val") rb.SetHostType("host.type-val") @@ -27,9 +26,9 @@ func TestResourceBuilder(t *testing.T) { switch tt { case "default": - assert.Equal(t, 8, res.Attributes().Len()) + assert.Equal(t, 7, res.Attributes().Len()) case "all_set": - assert.Equal(t, 8, res.Attributes().Len()) + assert.Equal(t, 7, res.Attributes().Len()) case "none_set": assert.Equal(t, 0, res.Attributes().Len()) return @@ -57,11 +56,6 @@ func TestResourceBuilder(t *testing.T) { if ok { assert.Equal(t, "cloud.provider-val", val.Str()) } - val, ok = res.Attributes().Get("cloud.region") - assert.True(t, ok) - if ok { - assert.Equal(t, "cloud.region-val", val.Str()) - } val, ok = res.Attributes().Get("host.id") assert.True(t, ok) if ok { diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml index 19ed604430cd7..15013fa011de1 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/testdata/config.yaml @@ -9,8 +9,6 @@ all_set: enabled: true cloud.provider: enabled: true - cloud.region: - enabled: true host.id: enabled: true host.name: @@ -27,8 +25,6 @@ none_set: enabled: false cloud.provider: enabled: false - cloud.region: - enabled: false host.id: enabled: false host.name: diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml index 4fe09d7786e62..faf6154019c19 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml @@ -23,10 +23,6 @@ resource_attributes: description: The cloud platform type: string enabled: true - cloud.region: - description: The cloud region - type: string - enabled: true cloud.availability_zone: description: The cloud availability zone type: string From adc030ac76faa895790abd9c2338e5d66916c009 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Wed, 13 Aug 2025 21:48:08 +0100 Subject: [PATCH 04/12] feat: add documentation and tests Signed-off-by: Paulo Dias --- .../openstack/nova/metadata_test.go | 230 ++++++++++++++++++ .../resourcedetectionprocessor/README.md | 34 ++- .../internal/openstack/nova/config.go | 2 +- .../openstack/nova/generated_package_test.go | 13 + .../metadata/generated_config_test.go | 1 - .../internal/openstack/nova/nova.go | 62 +---- .../internal/openstack/nova/nova_test.go | 209 ++++++++++++++++ 7 files changed, 488 insertions(+), 63 deletions(-) create mode 100644 internal/metadataproviders/openstack/nova/metadata_test.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/generated_package_test.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go diff --git a/internal/metadataproviders/openstack/nova/metadata_test.go b/internal/metadataproviders/openstack/nova/metadata_test.go new file mode 100644 index 0000000000000..80d24eb588fcc --- /dev/null +++ b/internal/metadataproviders/openstack/nova/metadata_test.go @@ -0,0 +1,230 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package nova + +import ( + "bytes" + "context" + "errors" + "io" + "net/http" + "reflect" + "testing" + "time" +) + +// mockHTTPDoer allows us to fake HTTP responses from the Nova metadata service. +type mockHTTPDoer func(*http.Request) (*http.Response, error) + +func (m mockHTTPDoer) Do(req *http.Request) (*http.Response, error) { + return m(req) +} + +func TestGetNovaMetadataDocument(t *testing.T) { + dummyBody := `{ + "uuid": "12345678-abcd-ef00-1234-56789abcdef0", + "meta": { + "key1": "value1", + "key2": "value2" + }, + "hostname": "test-vm-01", + "name": "test-vm-01", + "availability_zone": "zone-a", + "project_id": "proj-123456", + "launch_index": 0 + }` + + tests := []struct { + name string + doer mockHTTPDoer + want Document + expectErr bool + }{ + { + name: "successfully retrieves Nova metadata document", + doer: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewBufferString(dummyBody)), + }, nil + }, + want: Document{ + UUID: "12345678-abcd-ef00-1234-56789abcdef0", + Meta: map[string]string{"key1": "value1", "key2": "value2"}, + Hostname: "test-vm-01", + Name: "test-vm-01", + ProjectID: "proj-123456", + AvailabilityZone: "zone-a", + }, + }, + { + name: "http error", + doer: func(req *http.Request) (*http.Response, error) { + return nil, errors.New("connection failed") + }, + expectErr: true, + }, + { + name: "non-200 status", + doer: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusInternalServerError, + Body: io.NopCloser(bytes.NewBufferString("fail")), + }, nil + }, + expectErr: true, + }, + { + name: "invalid json", + doer: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewBufferString("{not-json")), + }, nil + }, + expectErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + p := &metadataClient{ + client: &http.Client{ + Timeout: 1 * time.Second, + Transport: roundTripperFunc(tt.doer), + }, + } + + doc, err := p.Get(context.Background()) + if tt.expectErr { + if err == nil { + t.Fatalf("expected error but got nil") + } + return + } + + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if !reflect.DeepEqual(doc, tt.want) { + t.Fatalf("document mismatch\n got: %+v\nwant: %+v", doc, tt.want) + } + }) + } +} + +func TestNovaProviderAccessors(t *testing.T) { + dummyBody := `{ + "uuid": "abcd-1234", + "hostname": "vm-accessor-test", + "name": "vm-accessor-test", + "project_id": "proj-xyz" + }` + + p := &metadataClient{ + client: &http.Client{ + Timeout: 1 * time.Second, + Transport: roundTripperFunc(func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewBufferString(dummyBody)), + }, nil + }), + }, + } + + ctx := context.Background() + + // InstanceID + id, err := p.InstanceID(ctx) + if err != nil { + t.Fatalf("unexpected error in InstanceID: %v", err) + } + if id != "abcd-1234" { + t.Fatalf("InstanceID mismatch: got %q, want %q", id, "abcd-1234") + } + + // Hostname + hn, err := p.Hostname(ctx) + if err != nil { + t.Fatalf("unexpected error in Hostname: %v", err) + } + if hn != "vm-accessor-test" { + t.Fatalf("Hostname mismatch: got %q, want %q", hn, "vm-accessor-test") + } +} + +func TestNovaInstanceType(t *testing.T) { + tests := []struct { + name string + doer roundTripperFunc + want string + expectErr bool + }{ + { + name: "successfully retrieves instance type", + doer: func(req *http.Request) (*http.Response, error) { + if req.URL.String() != ec2MetaBaseURL+"instance-type" { + t.Fatalf("expected URL %s, got %s", ec2MetaBaseURL+"instance-type", req.URL.String()) + } + return &http.Response{ + StatusCode: http.StatusOK, + Body: io.NopCloser(bytes.NewBufferString("t3.small")), + }, nil + }, + want: "t3.small", + expectErr: false, + }, + { + name: "returns error on HTTP failure", + doer: func(req *http.Request) (*http.Response, error) { + return nil, errors.New("connection failed") + }, + expectErr: true, + }, + { + name: "returns error on non-200 status", + doer: func(req *http.Request) (*http.Response, error) { + return &http.Response{ + StatusCode: http.StatusNotFound, + Body: io.NopCloser(bytes.NewBufferString("not found")), + }, nil + }, + expectErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + p := &metadataClient{ + client: &http.Client{ + Timeout: 1 * time.Second, + Transport: tt.doer, + }, + } + + got, err := p.InstanceType(context.Background()) + if tt.expectErr { + if err == nil { + t.Fatalf("expected error but got nil") + } + return + } + + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if got != tt.want { + t.Fatalf("InstanceType mismatch: got %q, want %q", got, tt.want) + } + }) + } +} + +// helper to implement http.RoundTripper from a function +type roundTripperFunc func(*http.Request) (*http.Response, error) + +func (f roundTripperFunc) RoundTrip(r *http.Request) (*http.Response, error) { return f(r) } diff --git a/processor/resourcedetectionprocessor/README.md b/processor/resourcedetectionprocessor/README.md index 3d2577288f7d5..7d7227ad98f1f 100644 --- a/processor/resourcedetectionprocessor/README.md +++ b/processor/resourcedetectionprocessor/README.md @@ -320,7 +320,7 @@ processors: ### Amazon EKS This detector reads resource information from the [EC2 instance metadata service](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) to retrieve related resource attributes. -If IMDS is not available, (example: EKS-AutoMode and POD not on the hostnetwork), it falls back to a combination of [Kubernetes API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#-strong-kubernetes-api-v1-25-strong-) +If IMDS is not available, (example: EKS-AutoMode and POD not on the hostnetwork), it falls back to a combination of [Kubernetes API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.25/#-strong-kubernetes-api-v1-25-strong-) and [EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html) to retrieve related resource attributes. EC2 API requires the `EC2:DescribeInstances` permission to be granted to the IAM role. If IMDS is not accessible, ex: EKS-AutoMode, you can use [POD Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html). @@ -655,6 +655,38 @@ other sources to the collector, then these describe the monitored entity in the Overriding these with the collector's own identifier would instead make the telemetry appear as if it was coming from the collector or the collector's host instead, which might be inaccurate. +### Openstack Nova + + +Uses the [OpenStack Nova metadata API](https://docs.openstack.org/nova/latest/user/metadata.html) to read resource information from the instance metadata service and populate related resource attributes. + +The list of the populated resource attributes can be found at [EC2 Detector Resource Attributes](./internal/openstack/nova/documentation.md). + +It can also optionally capture metadata keys from the `"meta"` section of `meta_data.json` as resource attributes, using regular expressions to match the keys you want. + +Nova custom configuration example: +```yaml +processors: + resourcedetection/nova: + detectors: ["nova"] + nova: + # A list of regex's to match label keys to add as resource attributes can be specified + labels: + - ^tag1$ + - ^tag2$ + - ^label.*$ +``` + +The Nova detector will report an error in logs if the metadata endpoint is unavailable. You can configure the detector to instead fail with this flag: + +```yaml +processors: + resourcedetection/nova: + detectors: ["nova"] + nova: + fail_on_missing_metadata: true +``` + ## Configuration ```yaml diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/config.go b/processor/resourcedetectionprocessor/internal/openstack/nova/config.go index 1e6e5b7ff0273..1a76a1eb12366 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/config.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/config.go @@ -11,7 +11,7 @@ import ( type Config struct { // Labels is a list of regex patterns to match Nova instance metadata keys // (from the "meta" map) that should be added as resource attributes. - // Matched keys are emitted as "openstack.meta.: ". + // Matched keys are emitted as "openstack.nova.meta.: ". Labels []string `mapstructure:"labels"` // ResourceAttributes controls which standard resource attributes are enabled diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/generated_package_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/generated_package_test.go new file mode 100644 index 0000000000000..6d121c657b241 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/generated_package_test.go @@ -0,0 +1,13 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package nova + +import ( + "testing" + + "go.uber.org/goleak" +) + +func TestMain(m *testing.M) { + goleak.VerifyTestMain(m) +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go index 07ecb9f1d8151..285314e5b521e 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config_test.go @@ -10,7 +10,6 @@ import ( "github.com/google/go-cmp/cmp/cmpopts" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/confmaptest" ) diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go index d5e4944dbaa7f..7fb77cf2f1e64 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go @@ -50,71 +50,13 @@ func NewDetector(set processor.Settings, dcfg internal.DetectorConfig) (internal return &Detector{ logger: set.Logger, - rb: metadata.NewResourceBuilder(cfg.ResourceAttributes), // ✅ init RB - metadataProvider: novaprovider.NewProvider(), // ✅ correct field + rb: metadata.NewResourceBuilder(cfg.ResourceAttributes), + metadataProvider: novaprovider.NewProvider(), labelRegexes: rs, failOnMissingMetadata: cfg.FailOnMissingMetadata, }, nil } -// Detect implements internal.Detector. -// func (d *Detector) Detect(ctx context.Context) (pcommon.Resource, string, error) { -// res := pcommon.NewResource() -// attrs := res.Attributes() - -// // Identify cloud first (stable, even if some fields fail). -// attrs.PutStr(string(conventions.CloudProviderKey), "openstack") -// attrs.PutStr(string(conventions.CloudPlatformKey), "openstack_nova") - -// // Pull the document. -// doc, err := d.provider.Get(ctx) -// if err != nil { -// if d.failOnMissingMD { -// return res, conventions.SchemaURL, err -// } -// // best-effort: return what we have (cloud.*) -// d.logger.Debug("nova metadata get failed (best-effort mode)", zap.Error(err)) -// return res, conventions.SchemaURL, nil -// } - -// var aggErr error - -// // host.id (uuid) -// if doc.UUID != "" { -// attrs.PutStr(string(conventions.HostIDKey), doc.UUID) -// } else { -// aggErr = multierr.Append(aggErr, errMissing("uuid")) -// } - -// // host.name (hostname) -// if doc.Hostname != "" { -// attrs.PutStr(string(conventions.HostNameKey), doc.Hostname) -// } else { -// // Some deployments only set Name; fall back if Hostname is empty. -// if doc.Name != "" { -// attrs.PutStr(string(conventions.HostNameKey), doc.Name) -// } else { -// aggErr = multierr.Append(aggErr, errMissing("hostname")) -// } -// } - -// // Optional: capture selected meta labels under openstack.meta.* -// if len(d.labelRegexes) > 0 && doc.Meta != nil { -// for k, v := range doc.Meta { -// if regexArrayMatch(d.labelRegexes, k) { -// attrs.PutStr(LabelPrefix+k, v) -// } -// } -// } - -// // Surface missing-field errors only if requested. -// if d.failOnMissingMD && aggErr != nil { -// return res, conventions.SchemaURL, aggErr -// } - -// return res, conventions.SchemaURL, nil -// } - func (d *Detector) Detect(ctx context.Context) (resource pcommon.Resource, schemaURL string, err error) { if _, err = d.metadataProvider.InstanceID(ctx); err != nil { d.logger.Debug("OpenStack Nova metadata unavailable", zap.Error(err)) diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go new file mode 100644 index 0000000000000..dd61871731739 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go @@ -0,0 +1,209 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package nova + +import ( + "context" + "errors" + "regexp" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/pdata/pcommon" + "go.opentelemetry.io/collector/processor/processortest" + "go.uber.org/zap" + + novaprovider "github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders/openstack/nova" + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata" +) + +var errUnavailable = errors.New("nova metadata unavailable") + +// --- Provider mock --- + +type mockNovaMetadata struct { + retDoc novaprovider.Document + retErrGet error + retHostname string + retErrHostname error + retInstanceType string + retErrInstanceType error + isAvailable bool +} + +var _ novaprovider.Provider = (*mockNovaMetadata)(nil) + +func (m *mockNovaMetadata) InstanceID(_ context.Context) (string, error) { + if !m.isAvailable { + return "", errUnavailable + } + return m.retDoc.UUID, nil +} + +func (m *mockNovaMetadata) Get(_ context.Context) (novaprovider.Document, error) { + if m.retErrGet != nil { + return novaprovider.Document{}, m.retErrGet + } + return m.retDoc, nil +} + +func (m *mockNovaMetadata) Hostname(_ context.Context) (string, error) { + if m.retErrHostname != nil { + return "", m.retErrHostname + } + return m.retHostname, nil +} + +func (m *mockNovaMetadata) InstanceType(_ context.Context) (string, error) { + if m.retErrInstanceType != nil { + return "", m.retErrInstanceType + } + // Always return the dummy type so tests are stable. + return "dummy.host.type", nil +} + +// --- Constructor smoke test (matches EC2 structure) --- + +func TestNewDetector(t *testing.T) { + tests := []struct { + name string + cfg Config + shouldError bool + }{ + { + name: "Success Case Empty Config", + cfg: Config{}, + shouldError: false, + }, + { + name: "Success Case Valid Config", + cfg: Config{ + Labels: []string{"label1"}, + }, + shouldError: false, + }, + { + name: "Error Case Invalid Regex", + cfg: Config{ + Labels: []string{"*"}, + }, + shouldError: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + detector, err := NewDetector(processortest.NewNopSettings(processortest.NopType), tt.cfg) + if tt.shouldError { + assert.Error(t, err) + assert.Nil(t, detector) + } else { + assert.NotNil(t, detector) + assert.NoError(t, err) + } + }) + } +} + +// --- Detect() behavior tests (like EC2’s TestDetector_Detect) --- + +func TestDetector_Detect(t *testing.T) { + tests := []struct { + name string + provider novaprovider.Provider + labelRegexes []*regexp.Regexp + want pcommon.Resource + wantErr bool + failOnMissingMetadata bool + }{ + { + name: "success with availability_zone, project_id and labels", + provider: &mockNovaMetadata{ + retDoc: novaprovider.Document{ + UUID: "vm-1234", + ProjectID: "proj-xyz", + AvailabilityZone: "zone-a", + Meta: map[string]string{ + "tag1": "val1", + "tag2": "val2", + "other": "nope", + }, + }, + retHostname: "example-nova-host", + isAvailable: true, + }, + labelRegexes: []*regexp.Regexp{regexp.MustCompile("^tag1$"), regexp.MustCompile("^tag2$")}, + want: func() pcommon.Resource { + res := pcommon.NewResource() + attr := res.Attributes() + attr.PutStr("cloud.provider", "openstack") + attr.PutStr("cloud.platform", "openstack_nova") + attr.PutStr("cloud.account.id", "proj-xyz") + attr.PutStr("cloud.availability_zone", "zone-a") + attr.PutStr("host.id", "vm-1234") + attr.PutStr("host.name", "example-nova-host") + attr.PutStr("host.type", "dummy.host.type") + attr.PutStr("openstack.nova.meta.tag1", "val1") + attr.PutStr("openstack.nova.meta.tag2", "val2") + return res + }(), + }, + { + name: "endpoint not available", + provider: &mockNovaMetadata{ + isAvailable: false, + }, + want: pcommon.NewResource(), + wantErr: false, + }, + { + name: "endpoint not available, fail_on_missing_metadata", + provider: &mockNovaMetadata{ + isAvailable: false, + }, + want: pcommon.NewResource(), + wantErr: true, + failOnMissingMetadata: true, + }, + { + name: "get fails", + provider: &mockNovaMetadata{ + isAvailable: true, + retErrGet: errors.New("get failed"), + }, + want: pcommon.NewResource(), + wantErr: true, + }, + { + name: "hostname fails", + provider: &mockNovaMetadata{ + isAvailable: true, + retErrHostname: errors.New("hostname failed"), + }, + want: pcommon.NewResource(), + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + d := &Detector{ + metadataProvider: tt.provider, + logger: zap.NewNop(), + rb: metadata.NewResourceBuilder(metadata.DefaultResourceAttributesConfig()), + labelRegexes: tt.labelRegexes, + failOnMissingMetadata: tt.failOnMissingMetadata, + } + + got, _, err := d.Detect(context.Background()) + if tt.wantErr { + require.Error(t, err) + } else { + require.NoError(t, err) + require.NotNil(t, got) + assert.Equal(t, tt.want.Attributes().AsRaw(), got.Attributes().AsRaw()) + } + }) + } +} From a109fba2567be665bad5b48a79d49f74c0f6ba24 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Thu, 14 Aug 2025 08:45:57 +0100 Subject: [PATCH 05/12] fix: fix tests and remove unneded skips Signed-off-by: Paulo Dias --- .../metadataproviders/openstack/nova/metadata.go | 9 +++++---- .../openstack/nova/metadata_test.go | 14 +++++++------- .../internal/openstack/nova/metadata.yaml | 4 ---- .../internal/openstack/nova/nova.go | 14 ++------------ .../internal/openstack/nova/nova_test.go | 9 ++++++--- 5 files changed, 20 insertions(+), 30 deletions(-) diff --git a/internal/metadataproviders/openstack/nova/metadata.go b/internal/metadataproviders/openstack/nova/metadata.go index 24e9fd5cb9960..4e9a32c7fc018 100644 --- a/internal/metadataproviders/openstack/nova/metadata.go +++ b/internal/metadataproviders/openstack/nova/metadata.go @@ -6,6 +6,7 @@ package nova // import "github.com/open-telemetry/opentelemetry-collector-contri import ( "context" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -50,7 +51,7 @@ func NewProvider() Provider { } func (c *metadataClient) getMetadata(ctx context.Context) (Document, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, openstackMetaURL, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, openstackMetaURL, http.NoBody) if err != nil { return Document{}, err } @@ -75,7 +76,7 @@ func (c *metadataClient) getMetadata(ctx context.Context) (Document, error) { } func (c *metadataClient) getEc2Metadata(ctx context.Context, fullURL string) (string, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, fullURL, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, fullURL, http.NoBody) if err != nil { return "", err } @@ -101,7 +102,7 @@ func (c *metadataClient) InstanceID(ctx context.Context) (string, error) { return "", err } if doc.UUID == "" { - return "", fmt.Errorf("instance ID (uuid) not found in metadata") + return "", errors.New("instance ID (uuid) not found in metadata") } return doc.UUID, nil } @@ -112,7 +113,7 @@ func (c *metadataClient) Hostname(ctx context.Context) (string, error) { return "", err } if doc.Hostname == "" { - return "", fmt.Errorf("hostname not found in metadata") + return "", errors.New("hostname not found in metadata") } return doc.Hostname, nil } diff --git a/internal/metadataproviders/openstack/nova/metadata_test.go b/internal/metadataproviders/openstack/nova/metadata_test.go index 80d24eb588fcc..2671a8dec3742 100644 --- a/internal/metadataproviders/openstack/nova/metadata_test.go +++ b/internal/metadataproviders/openstack/nova/metadata_test.go @@ -43,7 +43,7 @@ func TestGetNovaMetadataDocument(t *testing.T) { }{ { name: "successfully retrieves Nova metadata document", - doer: func(req *http.Request) (*http.Response, error) { + doer: func(_ *http.Request) (*http.Response, error) { return &http.Response{ StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString(dummyBody)), @@ -60,14 +60,14 @@ func TestGetNovaMetadataDocument(t *testing.T) { }, { name: "http error", - doer: func(req *http.Request) (*http.Response, error) { + doer: func(_ *http.Request) (*http.Response, error) { return nil, errors.New("connection failed") }, expectErr: true, }, { name: "non-200 status", - doer: func(req *http.Request) (*http.Response, error) { + doer: func(_ *http.Request) (*http.Response, error) { return &http.Response{ StatusCode: http.StatusInternalServerError, Body: io.NopCloser(bytes.NewBufferString("fail")), @@ -77,7 +77,7 @@ func TestGetNovaMetadataDocument(t *testing.T) { }, { name: "invalid json", - doer: func(req *http.Request) (*http.Response, error) { + doer: func(_ *http.Request) (*http.Response, error) { return &http.Response{ StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString("{not-json")), @@ -126,7 +126,7 @@ func TestNovaProviderAccessors(t *testing.T) { p := &metadataClient{ client: &http.Client{ Timeout: 1 * time.Second, - Transport: roundTripperFunc(func(req *http.Request) (*http.Response, error) { + Transport: roundTripperFunc(func(_ *http.Request) (*http.Response, error) { return &http.Response{ StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString(dummyBody)), @@ -179,14 +179,14 @@ func TestNovaInstanceType(t *testing.T) { }, { name: "returns error on HTTP failure", - doer: func(req *http.Request) (*http.Response, error) { + doer: func(_ *http.Request) (*http.Response, error) { return nil, errors.New("connection failed") }, expectErr: true, }, { name: "returns error on non-200 status", - doer: func(req *http.Request) (*http.Response, error) { + doer: func(_ *http.Request) (*http.Response, error) { return &http.Response{ StatusCode: http.StatusNotFound, Body: io.NopCloser(bytes.NewBufferString("not found")), diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml index faf6154019c19..90b9e492ba338 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml @@ -31,7 +31,3 @@ resource_attributes: description: The host instance type (Nova flavor name or ID) type: string enabled: true - -tests: - skip_lifecycle: true - skip_shutdown: true diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go index 7fb77cf2f1e64..88c2ae1d96ea3 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/nova.go @@ -11,8 +11,6 @@ import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/processor" conventions "go.opentelemetry.io/otel/semconv/v1.6.1" - - // "go.uber.org/multierr" "go.uber.org/zap" novaprovider "github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders/openstack/nova" @@ -77,8 +75,8 @@ func (d *Detector) Detect(ctx context.Context) (resource pcommon.Resource, schem } // Optional: EC2‑compatible instance type (don’t fail if missing) - if instance_type, err := d.metadataProvider.InstanceType(ctx); err == nil && instance_type != "" { - d.rb.SetHostType(instance_type) + if instanceType, err := d.metadataProvider.InstanceType(ctx); err == nil && instanceType != "" { + d.rb.SetHostType(instanceType) } else if err != nil { d.logger.Debug("EC2-compatible instance type unavailable", zap.Error(err)) } @@ -127,11 +125,3 @@ func regexArrayMatch(arr []*regexp.Regexp, s string) bool { } return false } - -func errMissing(field string) error { - return &missingFieldError{field: field} -} - -type missingFieldError struct{ field string } - -func (e *missingFieldError) Error() string { return "nova metadata missing field: " + e.field } diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go index dd61871731739..7ad349cd4daf4 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go @@ -60,7 +60,9 @@ func (m *mockNovaMetadata) InstanceType(_ context.Context) (string, error) { if m.retErrInstanceType != nil { return "", m.retErrInstanceType } - // Always return the dummy type so tests are stable. + if m.retInstanceType != "" { + return m.retInstanceType, nil + } return "dummy.host.type", nil } @@ -130,8 +132,9 @@ func TestDetector_Detect(t *testing.T) { "other": "nope", }, }, - retHostname: "example-nova-host", - isAvailable: true, + retHostname: "example-nova-host", + retInstanceType: "dummy.host.type", + isAvailable: true, }, labelRegexes: []*regexp.Regexp{regexp.MustCompile("^tag1$"), regexp.MustCompile("^tag2$")}, want: func() pcommon.Resource { From dec3260a4a880e2aea6df3fa2363e7b30f2ec327 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Thu, 14 Aug 2025 13:53:20 +0100 Subject: [PATCH 06/12] fix: fix test replacing context.Background() by t.Context() Signed-off-by: Paulo Dias --- .../internal/openstack/nova/nova_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go index 7ad349cd4daf4..211c251991f82 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/nova_test.go @@ -199,7 +199,7 @@ func TestDetector_Detect(t *testing.T) { failOnMissingMetadata: tt.failOnMissingMetadata, } - got, _, err := d.Detect(context.Background()) + got, _, err := d.Detect(t.Context()) if tt.wantErr { require.Error(t, err) } else { From cce625656e11184f10ba765ea5bd6147110b57c6 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Thu, 14 Aug 2025 14:09:19 +0100 Subject: [PATCH 07/12] fix: missing test replacing context.Background() by t.Context() Signed-off-by: Paulo Dias --- internal/metadataproviders/openstack/nova/metadata_test.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/internal/metadataproviders/openstack/nova/metadata_test.go b/internal/metadataproviders/openstack/nova/metadata_test.go index 2671a8dec3742..fbd089327570c 100644 --- a/internal/metadataproviders/openstack/nova/metadata_test.go +++ b/internal/metadataproviders/openstack/nova/metadata_test.go @@ -5,7 +5,6 @@ package nova import ( "bytes" - "context" "errors" "io" "net/http" @@ -96,7 +95,7 @@ func TestGetNovaMetadataDocument(t *testing.T) { }, } - doc, err := p.Get(context.Background()) + doc, err := p.Get(t.Context()) if tt.expectErr { if err == nil { t.Fatalf("expected error but got nil") @@ -135,7 +134,7 @@ func TestNovaProviderAccessors(t *testing.T) { }, } - ctx := context.Background() + ctx := t.Context() // InstanceID id, err := p.InstanceID(ctx) @@ -205,7 +204,7 @@ func TestNovaInstanceType(t *testing.T) { }, } - got, err := p.InstanceType(context.Background()) + got, err := p.InstanceType(t.Context()) if tt.expectErr { if err == nil { t.Fatalf("expected error but got nil") From 8123a59412050838afec4d09183de03dcc6b4341 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 8 Sep 2025 14:19:14 +0100 Subject: [PATCH 08/12] feat: add codeowners and labels Signed-off-by: Paulo Dias --- .github/CODEOWNERS | 1 + .github/ISSUE_TEMPLATE/beta_stability.yaml | 1 + .github/ISSUE_TEMPLATE/bug_report.yaml | 1 + .github/ISSUE_TEMPLATE/feature_request.yaml | 1 + .github/ISSUE_TEMPLATE/other.yaml | 1 + .github/ISSUE_TEMPLATE/unmaintained.yaml | 1 + .github/component_labels.txt | 1 + .../internal/openstack/nova/config.go | 5 +-- .../internal/openstack/nova/documentation.md | 4 +- .../nova/generated_component_test.go | 21 +++++++++++ .../internal/metadata/generated_config.go | 2 +- .../internal/metadata/generated_status.go | 19 ++++++++++ .../internal/openstack/nova/metadata.go | 25 +++++++++++++ .../internal/openstack/nova/metadata.yaml | 37 ++++++++++++------- 14 files changed, 99 insertions(+), 21 deletions(-) create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/generated_component_test.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_status.go create mode 100644 processor/resourcedetectionprocessor/internal/openstack/nova/metadata.go diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cfabed43c4139..c218fd6efe224 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -206,6 +206,7 @@ processor/remotetapprocessor/ @open-telemetry processor/resourcedetectionprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole processor/resourcedetectionprocessor/internal/dynatrace/ @open-telemetry/collector-contrib-approvers @bacherfl @evan-bradley processor/resourcedetectionprocessor/internal/hetzner/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias +processor/resourcedetectionprocessor/internal/openstack/nova/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias processor/resourceprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax processor/schemaprocessor/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @ankitpatel96 @dineshg13 processor/spanprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken diff --git a/.github/ISSUE_TEMPLATE/beta_stability.yaml b/.github/ISSUE_TEMPLATE/beta_stability.yaml index a742136e098df..56db886687b4e 100644 --- a/.github/ISSUE_TEMPLATE/beta_stability.yaml +++ b/.github/ISSUE_TEMPLATE/beta_stability.yaml @@ -208,6 +208,7 @@ body: - processor/resourcedetection - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/schema - processor/span - processor/sumologic diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 861947658ddb1..abd6dc3387d25 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -211,6 +211,7 @@ body: - processor/resourcedetection - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/schema - processor/span - processor/sumologic diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 54e0aaebc3491..40a993de8cd2c 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -205,6 +205,7 @@ body: - processor/resourcedetection - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/schema - processor/span - processor/sumologic diff --git a/.github/ISSUE_TEMPLATE/other.yaml b/.github/ISSUE_TEMPLATE/other.yaml index b4469f4fc4546..d478edb9058b0 100644 --- a/.github/ISSUE_TEMPLATE/other.yaml +++ b/.github/ISSUE_TEMPLATE/other.yaml @@ -205,6 +205,7 @@ body: - processor/resourcedetection - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/schema - processor/span - processor/sumologic diff --git a/.github/ISSUE_TEMPLATE/unmaintained.yaml b/.github/ISSUE_TEMPLATE/unmaintained.yaml index 58469cf8bf4ad..bd3acec80d7ac 100644 --- a/.github/ISSUE_TEMPLATE/unmaintained.yaml +++ b/.github/ISSUE_TEMPLATE/unmaintained.yaml @@ -210,6 +210,7 @@ body: - processor/resourcedetection - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/schema - processor/span - processor/sumologic diff --git a/.github/component_labels.txt b/.github/component_labels.txt index f202be6c1adbd..cc9bf486ed5a8 100644 --- a/.github/component_labels.txt +++ b/.github/component_labels.txt @@ -187,6 +187,7 @@ processor/remotetapprocessor processor/remotetap processor/resourcedetectionprocessor processor/resourcedetection processor/resourcedetectionprocessor/internal/dynatrace processor/resourcedetection/internal/dynatrace processor/resourcedetectionprocessor/internal/hetzner processor/resourcedetection/internal/hetzner +processor/resourcedetectionprocessor/internal/openstack/nova processor/resourcedetection/internal/openstack/nova processor/resourceprocessor processor/resource processor/schemaprocessor processor/schema processor/spanprocessor processor/span diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/config.go b/processor/resourcedetectionprocessor/internal/openstack/nova/config.go index 1a76a1eb12366..d0afc6fde82e7 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/config.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/config.go @@ -27,9 +27,8 @@ type Config struct { // CreateDefaultConfig returns the default configuration for the Nova detector. func CreateDefaultConfig() Config { return Config{ - Labels: []string{}, - ResourceAttributes: metadata.DefaultResourceAttributesConfig(), - // default: best-effort + Labels: []string{}, + ResourceAttributes: metadata.DefaultResourceAttributesConfig(), FailOnMissingMetadata: false, } } diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md b/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md index 70299f5c95b35..b9abb53216c6f 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/documentation.md @@ -1,8 +1,6 @@ [comment]: <> (Code generated by mdatagen. DO NOT EDIT.) -# resourcedetectionprocessor/nova - -**Parent Component:** resourcedetection +# novadetector ## Resource Attributes diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/generated_component_test.go b/processor/resourcedetectionprocessor/internal/openstack/nova/generated_component_test.go new file mode 100644 index 0000000000000..bdb78b3117450 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/generated_component_test.go @@ -0,0 +1,21 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package nova + +import ( + "testing" + + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/component/componenttest" +) + +var typ = component.MustNewType("novadetector") + +func TestComponentFactoryType(t *testing.T) { + require.Equal(t, typ, NewFactory().Type()) +} + +func TestComponentConfigStruct(t *testing.T) { + require.NoError(t, componenttest.CheckConfigStruct(NewFactory().CreateDefaultConfig())) +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go index c74046cbba878..d4a1c881e8ec6 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_config.go @@ -25,7 +25,7 @@ func (rac *ResourceAttributeConfig) Unmarshal(parser *confmap.Conf) error { return nil } -// ResourceAttributesConfig provides config for resourcedetectionprocessor/nova resource attributes. +// ResourceAttributesConfig provides config for novadetector resource attributes. type ResourceAttributesConfig struct { CloudAccountID ResourceAttributeConfig `mapstructure:"cloud.account.id"` CloudAvailabilityZone ResourceAttributeConfig `mapstructure:"cloud.availability_zone"` diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_status.go b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_status.go new file mode 100644 index 0000000000000..6fc3377cfccea --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata/generated_status.go @@ -0,0 +1,19 @@ +// Code generated by mdatagen. DO NOT EDIT. + +package metadata + +import ( + "go.opentelemetry.io/collector/component" +) + +var ( + Type = component.MustNewType("novadetector") + ScopeName = "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova" +) + +const ( + TracesStability = component.StabilityLevelAlpha + MetricsStability = component.StabilityLevelAlpha + LogsStability = component.StabilityLevelAlpha + ProfilesStability = component.StabilityLevelAlpha +) diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.go b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.go new file mode 100644 index 0000000000000..6e3212dbb8c03 --- /dev/null +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.go @@ -0,0 +1,25 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package nova // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova" + +import ( + "go.opentelemetry.io/collector/component" + + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/openstack/nova/internal/metadata" +) + +type dummyFactory struct{} + +func (dummyFactory) Type() component.Type { + return metadata.Type +} + +func (dummyFactory) CreateDefaultConfig() component.Config { + return struct{}{} +} + +// Necessary to satisfy mdatagen tests +func NewFactory() component.Factory { + return dummyFactory{} +} diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml index 90b9e492ba338..c6538d3292acb 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml @@ -1,33 +1,42 @@ -type: resourcedetectionprocessor/nova +type: novadetector -parent: resourcedetection +status: + class: processor + stability: + alpha: [traces, metrics, logs, profiles] + codeowners: + active: [Aneurysm9, dashpole, paulojmdias] resource_attributes: - host.name: - description: The hostname + cloud.account.id: + description: The cloud account id (e.g., OpenStack project or tenant ID) type: string enabled: true - host.id: - description: The host.id + cloud.availability_zone: + description: The cloud availability zone type: string enabled: true - cloud.provider: - description: The cloud provider + cloud.platform: + description: The cloud platform type: string enabled: true - cloud.account.id: - description: The cloud account id (e.g., OpenStack project or tenant ID) + cloud.provider: + description: The cloud provider type: string enabled: true - cloud.platform: - description: The cloud platform + host.id: + description: The host.id type: string enabled: true - cloud.availability_zone: - description: The cloud availability zone + host.name: + description: The hostname type: string enabled: true host.type: description: The host instance type (Nova flavor name or ID) type: string enabled: true + +tests: + skip_lifecycle: true + skip_shutdown: true From 25b6d5352fd6197909c63ca7b8bfca2feee14f39 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 29 Sep 2025 13:55:14 +0100 Subject: [PATCH 09/12] chore: fix codeowners Signed-off-by: Paulo Dias --- .github/CODEOWNERS | 2 +- .github/ISSUE_TEMPLATE/beta_stability.yaml | 650 +++++++++--------- .github/ISSUE_TEMPLATE/bug_report.yaml | 650 +++++++++--------- .github/ISSUE_TEMPLATE/feature_request.yaml | 650 +++++++++--------- .github/ISSUE_TEMPLATE/other.yaml | 650 +++++++++--------- .github/ISSUE_TEMPLATE/unmaintained.yaml | 650 +++++++++--------- .../internal/openstack/nova/metadata.yaml | 2 +- 7 files changed, 1627 insertions(+), 1627 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1994151e92d06..3d1fa5456db2d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -208,7 +208,7 @@ processor/resourcedetectionprocessor/internal/akamai/ @open-telemetry processor/resourcedetectionprocessor/internal/digitalocean/ @open-telemetry/collector-contrib-approvers @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/dynatrace/ @open-telemetry/collector-contrib-approvers @bacherfl @evan-bradley processor/resourcedetectionprocessor/internal/hetzner/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias -processor/resourcedetectionprocessor/internal/openstack/nova/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias +processor/resourcedetectionprocessor/internal/openstack/nova/ @open-telemetry/collector-contrib-approvers @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/oraclecloud/ @open-telemetry/collector-contrib-approvers @dashpole processor/resourcedetectionprocessor/internal/scaleway/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/vultr/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias diff --git a/.github/ISSUE_TEMPLATE/beta_stability.yaml b/.github/ISSUE_TEMPLATE/beta_stability.yaml index 8a9642e9863ae..3e090997b9db8 100644 --- a/.github/ISSUE_TEMPLATE/beta_stability.yaml +++ b/.github/ISSUE_TEMPLATE/beta_stability.yaml @@ -15,331 +15,331 @@ body: # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` # Do not manually edit it. # Start components list - - cmd/codecovgen - - cmd/golden - - cmd/opampsupervisor - - cmd/otelcontribcol - - cmd/oteltestbedcol - - cmd/telemetrygen - - confmap/provider/aesprovider - - confmap/provider/googlesecretmanagerprovider - - confmap/provider/s3provider - - confmap/provider/secretsmanagerprovider - - connector/count - - connector/datadog - - connector/exceptions - - connector/failover - - connector/grafanacloud - - connector/otlpjson - - connector/roundrobin - - connector/routing - - connector/servicegraph - - connector/signaltometrics - - connector/spanmetrics - - connector/sum - - exporter/alertmanager - - exporter/alibabacloudlogservice - - exporter/awscloudwatchlogs - - exporter/awsemf - - exporter/awskinesis - - exporter/awss3 - - exporter/awsxray - - exporter/azureblob - - exporter/azuredataexplorer - - exporter/azuremonitor - - exporter/bmchelix - - exporter/carbon - - exporter/cassandra - - exporter/clickhouse - - exporter/coralogix - - exporter/datadog - - exporter/dataset - - exporter/doris - - exporter/elasticsearch - - exporter/faro - - exporter/file - - exporter/googlecloud - - exporter/googlecloudpubsub - - exporter/googlemanagedprometheus - - exporter/honeycombmarker - - exporter/influxdb - - exporter/kafka - - exporter/loadbalancing - - exporter/logicmonitor - - exporter/logzio - - exporter/mezmo - - exporter/opensearch - - exporter/otelarrow - - exporter/prometheus - - exporter/prometheusremotewrite - - exporter/pulsar - - exporter/rabbitmq - - exporter/sapm - - exporter/sematext - - exporter/sentry - - exporter/signalfx - - exporter/splunkhec - - exporter/stef - - exporter/sumologic - - exporter/syslog - - exporter/tencentcloudlogservice - - exporter/tinybird - - exporter/zipkin - - extension/ack - - extension/asapauth - - extension/awsproxy - - extension/azureauth - - extension/basicauth - - extension/bearertokenauth - - extension/cgroupruntime - - extension/datadog - - extension/encoding - - extension/encoding/avrologencoding - - extension/encoding/awscloudwatchmetricstreamsencoding - - extension/encoding/awslogsencoding - - extension/encoding/googlecloudlogentryencoding - - extension/encoding/jaegerencoding - - extension/encoding/jsonlogencoding - - extension/encoding/otlpencoding - - extension/encoding/skywalkingencoding - - extension/encoding/textencoding - - extension/encoding/zipkinencoding - - extension/googleclientauth - - extension/headerssetter - - extension/healthcheck - - extension/healthcheckv2 - - extension/httpforwarder - - extension/jaegerremotesampling - - extension/k8sleaderelector - - extension/oauth2clientauth - - extension/observer - - extension/observer/cfgardenobserver - - extension/observer/dockerobserver - - extension/observer/ecsobserver - - extension/observer/ecstaskobserver - - extension/observer/hostobserver - - extension/observer/k8sobserver - - extension/observer/kafkatopicsobserver - - extension/oidcauth - - extension/opamp - - extension/opampcustommessages - - extension/pprof - - extension/remotetap - - extension/sigv4auth - - extension/solarwindsapmsettings - - extension/storage - - extension/storage/dbstorage - - extension/storage/filestorage - - extension/storage/redisstorage - - extension/sumologic - - internal/aws - - internal/collectd - - internal/common - - internal/core - - internal/datadog - - internal/docker - - internal/exp/metrics - - internal/filter - - internal/grpcutil - - internal/healthcheck - - internal/k8sconfig - - internal/kafka - - internal/kubelet - - internal/metadataproviders - - internal/otelarrow - - internal/pdatautil - - internal/rabbitmq - - internal/sharedcomponent - - internal/splunk - - internal/sqlquery - - internal/tools - - pkg/batchperresourceattr - - pkg/batchpersignal - - pkg/core/xidutils - - pkg/datadog - - pkg/experimentalmetricmetadata - - pkg/golden - - pkg/kafka/configkafka - - pkg/kafka/topic - - pkg/ottl - - pkg/pdatatest - - pkg/pdatautil - - pkg/resourcetotelemetry - - pkg/sampling - - pkg/stanza - - pkg/stanza/fileconsumer - - pkg/status - - pkg/translator/azure - - pkg/translator/azurelogs - - pkg/translator/faro - - pkg/translator/jaeger - - pkg/translator/loki - - pkg/translator/opencensus - - pkg/translator/prometheus - - pkg/translator/prometheusremotewrite - - pkg/translator/signalfx - - pkg/translator/skywalking - - pkg/translator/zipkin - - pkg/winperfcounters - - pkg/xk8stest - - processor/attributes - - processor/coralogix - - processor/cumulativetodelta - - processor/datadogsemantics - - processor/deltatocumulative - - processor/deltatorate - - processor/dnslookup - - processor/filter - - processor/geoip - - processor/groupbyattrs - - processor/groupbytrace - - processor/interval - - processor/isolationforest - - processor/k8sattributes - - processor/logdedup - - processor/logstransform - - processor/metricsgeneration - - processor/metricstarttime - - processor/metricstransform - - processor/probabilisticsampler - - processor/redaction - - processor/remotetap - - processor/resource - - processor/resourcedetection - - processor/resourcedetection/internal/akamai - - processor/resourcedetection/internal/digitalocean - - processor/resourcedetection/internal/dynatrace - - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - - processor/resourcedetection/internal/oraclecloud - - processor/resourcedetection/internal/scaleway - - processor/resourcedetection/internal/vultr - - processor/schema - - processor/span - - processor/sumologic - - processor/tailsampling - - processor/transform - - processor/unroll - - receiver/activedirectoryds - - receiver/aerospike - - receiver/apache - - receiver/apachespark - - receiver/awscloudwatch - - receiver/awscontainerinsight - - receiver/awsecscontainermetrics - - receiver/awsfirehose - - receiver/awss3 - - receiver/awsxray - - receiver/azureblob - - receiver/azureeventhub - - receiver/azuremonitor - - receiver/bigip - - receiver/carbon - - receiver/chrony - - receiver/cloudflare - - receiver/cloudfoundry - - receiver/collectd - - receiver/couchdb - - receiver/datadog - - receiver/dockerstats - - receiver/elasticsearch - - receiver/envoyals - - receiver/expvar - - receiver/faro - - receiver/filelog - - receiver/filestats - - receiver/flinkmetrics - - receiver/fluentforward - - receiver/github - - receiver/gitlab - - receiver/googlecloudmonitoring - - receiver/googlecloudpubsub - - receiver/googlecloudspanner - - receiver/haproxy - - receiver/hostmetrics - - receiver/hostmetrics/internal/scraper/cpuscraper - - receiver/hostmetrics/internal/scraper/diskscraper - - receiver/hostmetrics/internal/scraper/filesystemscraper - - receiver/hostmetrics/internal/scraper/loadscraper - - receiver/hostmetrics/internal/scraper/memoryscraper - - receiver/hostmetrics/internal/scraper/networkscraper - - receiver/hostmetrics/internal/scraper/nfsscraper - - receiver/hostmetrics/internal/scraper/pagingscraper - - receiver/hostmetrics/internal/scraper/processesscraper - - receiver/hostmetrics/internal/scraper/processscraper - - receiver/hostmetrics/internal/scraper/systemscraper - - receiver/httpcheck - - receiver/huaweicloudces - - receiver/iis - - receiver/influxdb - - receiver/jaeger - - receiver/jmx - - receiver/journald - - receiver/k8scluster - - receiver/k8sevents - - receiver/k8slog - - receiver/k8sobjects - - receiver/kafka - - receiver/kafkametrics - - receiver/kubeletstats - - receiver/libhoney - - receiver/loki - - receiver/memcached - - receiver/mongodb - - receiver/mongodbatlas - - receiver/mysql - - receiver/namedpipe - - receiver/netflow - - receiver/nginx - - receiver/nsxt - - receiver/ntp - - receiver/oracledb - - receiver/osquery - - receiver/otelarrow - - receiver/otlpjsonfile - - receiver/podman - - receiver/postgresql - - receiver/pprof - - receiver/prometheus - - receiver/prometheusremotewrite - - receiver/pulsar - - receiver/purefa - - receiver/purefb - - receiver/rabbitmq - - receiver/receivercreator - - receiver/redis - - receiver/riak - - receiver/saphana - - receiver/signalfx - - receiver/simpleprometheus - - receiver/skywalking - - receiver/snmp - - receiver/snowflake - - receiver/solace - - receiver/splunkenterprise - - receiver/splunkhec - - receiver/sqlquery - - receiver/sqlserver - - receiver/sshcheck - - receiver/statsd - - receiver/stef - - receiver/syslog - - receiver/systemd - - receiver/tcpcheck - - receiver/tcplog - - receiver/tlscheck - - receiver/udplog - - receiver/vcenter - - receiver/wavefront - - receiver/webhookevent - - receiver/windowseventlog - - receiver/windowsperfcounters - - receiver/windowsservice - - receiver/zipkin - - receiver/zookeeper - - scraper/zookeeperscraper - - testbed - - testbed/mockdatasenders/mockdatadogagentexporter + - cmd/codecovgen + - cmd/golden + - cmd/opampsupervisor + - cmd/otelcontribcol + - cmd/oteltestbedcol + - cmd/telemetrygen + - confmap/provider/aesprovider + - confmap/provider/googlesecretmanagerprovider + - confmap/provider/s3provider + - confmap/provider/secretsmanagerprovider + - connector/count + - connector/datadog + - connector/exceptions + - connector/failover + - connector/grafanacloud + - connector/otlpjson + - connector/roundrobin + - connector/routing + - connector/servicegraph + - connector/signaltometrics + - connector/spanmetrics + - connector/sum + - exporter/alertmanager + - exporter/alibabacloudlogservice + - exporter/awscloudwatchlogs + - exporter/awsemf + - exporter/awskinesis + - exporter/awss3 + - exporter/awsxray + - exporter/azureblob + - exporter/azuredataexplorer + - exporter/azuremonitor + - exporter/bmchelix + - exporter/carbon + - exporter/cassandra + - exporter/clickhouse + - exporter/coralogix + - exporter/datadog + - exporter/dataset + - exporter/doris + - exporter/elasticsearch + - exporter/faro + - exporter/file + - exporter/googlecloud + - exporter/googlecloudpubsub + - exporter/googlemanagedprometheus + - exporter/honeycombmarker + - exporter/influxdb + - exporter/kafka + - exporter/loadbalancing + - exporter/logicmonitor + - exporter/logzio + - exporter/mezmo + - exporter/opensearch + - exporter/otelarrow + - exporter/prometheus + - exporter/prometheusremotewrite + - exporter/pulsar + - exporter/rabbitmq + - exporter/sapm + - exporter/sematext + - exporter/sentry + - exporter/signalfx + - exporter/splunkhec + - exporter/stef + - exporter/sumologic + - exporter/syslog + - exporter/tencentcloudlogservice + - exporter/tinybird + - exporter/zipkin + - extension/ack + - extension/asapauth + - extension/awsproxy + - extension/azureauth + - extension/basicauth + - extension/bearertokenauth + - extension/cgroupruntime + - extension/datadog + - extension/encoding + - extension/encoding/avrologencoding + - extension/encoding/awscloudwatchmetricstreamsencoding + - extension/encoding/awslogsencoding + - extension/encoding/googlecloudlogentryencoding + - extension/encoding/jaegerencoding + - extension/encoding/jsonlogencoding + - extension/encoding/otlpencoding + - extension/encoding/skywalkingencoding + - extension/encoding/textencoding + - extension/encoding/zipkinencoding + - extension/googleclientauth + - extension/headerssetter + - extension/healthcheck + - extension/healthcheckv2 + - extension/httpforwarder + - extension/jaegerremotesampling + - extension/k8sleaderelector + - extension/oauth2clientauth + - extension/observer + - extension/observer/cfgardenobserver + - extension/observer/dockerobserver + - extension/observer/ecsobserver + - extension/observer/ecstaskobserver + - extension/observer/hostobserver + - extension/observer/k8sobserver + - extension/observer/kafkatopicsobserver + - extension/oidcauth + - extension/opamp + - extension/opampcustommessages + - extension/pprof + - extension/remotetap + - extension/sigv4auth + - extension/solarwindsapmsettings + - extension/storage + - extension/storage/dbstorage + - extension/storage/filestorage + - extension/storage/redisstorage + - extension/sumologic + - internal/aws + - internal/collectd + - internal/common + - internal/core + - internal/datadog + - internal/docker + - internal/exp/metrics + - internal/filter + - internal/grpcutil + - internal/healthcheck + - internal/k8sconfig + - internal/kafka + - internal/kubelet + - internal/metadataproviders + - internal/otelarrow + - internal/pdatautil + - internal/rabbitmq + - internal/sharedcomponent + - internal/splunk + - internal/sqlquery + - internal/tools + - pkg/batchperresourceattr + - pkg/batchpersignal + - pkg/core/xidutils + - pkg/datadog + - pkg/experimentalmetricmetadata + - pkg/golden + - pkg/kafka/configkafka + - pkg/kafka/topic + - pkg/ottl + - pkg/pdatatest + - pkg/pdatautil + - pkg/resourcetotelemetry + - pkg/sampling + - pkg/stanza + - pkg/stanza/fileconsumer + - pkg/status + - pkg/translator/azure + - pkg/translator/azurelogs + - pkg/translator/faro + - pkg/translator/jaeger + - pkg/translator/loki + - pkg/translator/opencensus + - pkg/translator/prometheus + - pkg/translator/prometheusremotewrite + - pkg/translator/signalfx + - pkg/translator/skywalking + - pkg/translator/zipkin + - pkg/winperfcounters + - pkg/xk8stest + - processor/attributes + - processor/coralogix + - processor/cumulativetodelta + - processor/datadogsemantics + - processor/deltatocumulative + - processor/deltatorate + - processor/dnslookup + - processor/filter + - processor/geoip + - processor/groupbyattrs + - processor/groupbytrace + - processor/interval + - processor/isolationforest + - processor/k8sattributes + - processor/logdedup + - processor/logstransform + - processor/metricsgeneration + - processor/metricstarttime + - processor/metricstransform + - processor/probabilisticsampler + - processor/redaction + - processor/remotetap + - processor/resource + - processor/resourcedetection + - processor/resourcedetection/internal/akamai + - processor/resourcedetection/internal/digitalocean + - processor/resourcedetection/internal/dynatrace + - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova + - processor/resourcedetection/internal/oraclecloud + - processor/resourcedetection/internal/scaleway + - processor/resourcedetection/internal/vultr + - processor/schema + - processor/span + - processor/sumologic + - processor/tailsampling + - processor/transform + - processor/unroll + - receiver/activedirectoryds + - receiver/aerospike + - receiver/apache + - receiver/apachespark + - receiver/awscloudwatch + - receiver/awscontainerinsight + - receiver/awsecscontainermetrics + - receiver/awsfirehose + - receiver/awss3 + - receiver/awsxray + - receiver/azureblob + - receiver/azureeventhub + - receiver/azuremonitor + - receiver/bigip + - receiver/carbon + - receiver/chrony + - receiver/cloudflare + - receiver/cloudfoundry + - receiver/collectd + - receiver/couchdb + - receiver/datadog + - receiver/dockerstats + - receiver/elasticsearch + - receiver/envoyals + - receiver/expvar + - receiver/faro + - receiver/filelog + - receiver/filestats + - receiver/flinkmetrics + - receiver/fluentforward + - receiver/github + - receiver/gitlab + - receiver/googlecloudmonitoring + - receiver/googlecloudpubsub + - receiver/googlecloudspanner + - receiver/haproxy + - receiver/hostmetrics + - receiver/hostmetrics/internal/scraper/cpuscraper + - receiver/hostmetrics/internal/scraper/diskscraper + - receiver/hostmetrics/internal/scraper/filesystemscraper + - receiver/hostmetrics/internal/scraper/loadscraper + - receiver/hostmetrics/internal/scraper/memoryscraper + - receiver/hostmetrics/internal/scraper/networkscraper + - receiver/hostmetrics/internal/scraper/nfsscraper + - receiver/hostmetrics/internal/scraper/pagingscraper + - receiver/hostmetrics/internal/scraper/processesscraper + - receiver/hostmetrics/internal/scraper/processscraper + - receiver/hostmetrics/internal/scraper/systemscraper + - receiver/httpcheck + - receiver/huaweicloudces + - receiver/iis + - receiver/influxdb + - receiver/jaeger + - receiver/jmx + - receiver/journald + - receiver/k8scluster + - receiver/k8sevents + - receiver/k8slog + - receiver/k8sobjects + - receiver/kafka + - receiver/kafkametrics + - receiver/kubeletstats + - receiver/libhoney + - receiver/loki + - receiver/memcached + - receiver/mongodb + - receiver/mongodbatlas + - receiver/mysql + - receiver/namedpipe + - receiver/netflow + - receiver/nginx + - receiver/nsxt + - receiver/ntp + - receiver/oracledb + - receiver/osquery + - receiver/otelarrow + - receiver/otlpjsonfile + - receiver/podman + - receiver/postgresql + - receiver/pprof + - receiver/prometheus + - receiver/prometheusremotewrite + - receiver/pulsar + - receiver/purefa + - receiver/purefb + - receiver/rabbitmq + - receiver/receivercreator + - receiver/redis + - receiver/riak + - receiver/saphana + - receiver/signalfx + - receiver/simpleprometheus + - receiver/skywalking + - receiver/snmp + - receiver/snowflake + - receiver/solace + - receiver/splunkenterprise + - receiver/splunkhec + - receiver/sqlquery + - receiver/sqlserver + - receiver/sshcheck + - receiver/statsd + - receiver/stef + - receiver/syslog + - receiver/systemd + - receiver/tcpcheck + - receiver/tcplog + - receiver/tlscheck + - receiver/udplog + - receiver/vcenter + - receiver/wavefront + - receiver/webhookevent + - receiver/windowseventlog + - receiver/windowsperfcounters + - receiver/windowsservice + - receiver/zipkin + - receiver/zookeeper + - scraper/zookeeperscraper + - testbed + - testbed/mockdatasenders/mockdatadogagentexporter # End components list - type: checkboxes attributes: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 886b33913ff06..e89c24e003246 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -18,331 +18,331 @@ body: # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` # Do not manually edit it. # Start components list - - cmd/codecovgen - - cmd/golden - - cmd/opampsupervisor - - cmd/otelcontribcol - - cmd/oteltestbedcol - - cmd/telemetrygen - - confmap/provider/aesprovider - - confmap/provider/googlesecretmanagerprovider - - confmap/provider/s3provider - - confmap/provider/secretsmanagerprovider - - connector/count - - connector/datadog - - connector/exceptions - - connector/failover - - connector/grafanacloud - - connector/otlpjson - - connector/roundrobin - - connector/routing - - connector/servicegraph - - connector/signaltometrics - - connector/spanmetrics - - connector/sum - - exporter/alertmanager - - exporter/alibabacloudlogservice - - exporter/awscloudwatchlogs - - exporter/awsemf - - exporter/awskinesis - - exporter/awss3 - - exporter/awsxray - - exporter/azureblob - - exporter/azuredataexplorer - - exporter/azuremonitor - - exporter/bmchelix - - exporter/carbon - - exporter/cassandra - - exporter/clickhouse - - exporter/coralogix - - exporter/datadog - - exporter/dataset - - exporter/doris - - exporter/elasticsearch - - exporter/faro - - exporter/file - - exporter/googlecloud - - exporter/googlecloudpubsub - - exporter/googlemanagedprometheus - - exporter/honeycombmarker - - exporter/influxdb - - exporter/kafka - - exporter/loadbalancing - - exporter/logicmonitor - - exporter/logzio - - exporter/mezmo - - exporter/opensearch - - exporter/otelarrow - - exporter/prometheus - - exporter/prometheusremotewrite - - exporter/pulsar - - exporter/rabbitmq - - exporter/sapm - - exporter/sematext - - exporter/sentry - - exporter/signalfx - - exporter/splunkhec - - exporter/stef - - exporter/sumologic - - exporter/syslog - - exporter/tencentcloudlogservice - - exporter/tinybird - - exporter/zipkin - - extension/ack - - extension/asapauth - - extension/awsproxy - - extension/azureauth - - extension/basicauth - - extension/bearertokenauth - - extension/cgroupruntime - - extension/datadog - - extension/encoding - - extension/encoding/avrologencoding - - extension/encoding/awscloudwatchmetricstreamsencoding - - extension/encoding/awslogsencoding - - extension/encoding/googlecloudlogentryencoding - - extension/encoding/jaegerencoding - - extension/encoding/jsonlogencoding - - extension/encoding/otlpencoding - - extension/encoding/skywalkingencoding - - extension/encoding/textencoding - - extension/encoding/zipkinencoding - - extension/googleclientauth - - extension/headerssetter - - extension/healthcheck - - extension/healthcheckv2 - - extension/httpforwarder - - extension/jaegerremotesampling - - extension/k8sleaderelector - - extension/oauth2clientauth - - extension/observer - - extension/observer/cfgardenobserver - - extension/observer/dockerobserver - - extension/observer/ecsobserver - - extension/observer/ecstaskobserver - - extension/observer/hostobserver - - extension/observer/k8sobserver - - extension/observer/kafkatopicsobserver - - extension/oidcauth - - extension/opamp - - extension/opampcustommessages - - extension/pprof - - extension/remotetap - - extension/sigv4auth - - extension/solarwindsapmsettings - - extension/storage - - extension/storage/dbstorage - - extension/storage/filestorage - - extension/storage/redisstorage - - extension/sumologic - - internal/aws - - internal/collectd - - internal/common - - internal/core - - internal/datadog - - internal/docker - - internal/exp/metrics - - internal/filter - - internal/grpcutil - - internal/healthcheck - - internal/k8sconfig - - internal/kafka - - internal/kubelet - - internal/metadataproviders - - internal/otelarrow - - internal/pdatautil - - internal/rabbitmq - - internal/sharedcomponent - - internal/splunk - - internal/sqlquery - - internal/tools - - pkg/batchperresourceattr - - pkg/batchpersignal - - pkg/core/xidutils - - pkg/datadog - - pkg/experimentalmetricmetadata - - pkg/golden - - pkg/kafka/configkafka - - pkg/kafka/topic - - pkg/ottl - - pkg/pdatatest - - pkg/pdatautil - - pkg/resourcetotelemetry - - pkg/sampling - - pkg/stanza - - pkg/stanza/fileconsumer - - pkg/status - - pkg/translator/azure - - pkg/translator/azurelogs - - pkg/translator/faro - - pkg/translator/jaeger - - pkg/translator/loki - - pkg/translator/opencensus - - pkg/translator/prometheus - - pkg/translator/prometheusremotewrite - - pkg/translator/signalfx - - pkg/translator/skywalking - - pkg/translator/zipkin - - pkg/winperfcounters - - pkg/xk8stest - - processor/attributes - - processor/coralogix - - processor/cumulativetodelta - - processor/datadogsemantics - - processor/deltatocumulative - - processor/deltatorate - - processor/dnslookup - - processor/filter - - processor/geoip - - processor/groupbyattrs - - processor/groupbytrace - - processor/interval - - processor/isolationforest - - processor/k8sattributes - - processor/logdedup - - processor/logstransform - - processor/metricsgeneration - - processor/metricstarttime - - processor/metricstransform - - processor/probabilisticsampler - - processor/redaction - - processor/remotetap - - processor/resource - - processor/resourcedetection - - processor/resourcedetection/internal/akamai - - processor/resourcedetection/internal/digitalocean - - processor/resourcedetection/internal/dynatrace - - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - - processor/resourcedetection/internal/oraclecloud - - processor/resourcedetection/internal/scaleway - - processor/resourcedetection/internal/vultr - - processor/schema - - processor/span - - processor/sumologic - - processor/tailsampling - - processor/transform - - processor/unroll - - receiver/activedirectoryds - - receiver/aerospike - - receiver/apache - - receiver/apachespark - - receiver/awscloudwatch - - receiver/awscontainerinsight - - receiver/awsecscontainermetrics - - receiver/awsfirehose - - receiver/awss3 - - receiver/awsxray - - receiver/azureblob - - receiver/azureeventhub - - receiver/azuremonitor - - receiver/bigip - - receiver/carbon - - receiver/chrony - - receiver/cloudflare - - receiver/cloudfoundry - - receiver/collectd - - receiver/couchdb - - receiver/datadog - - receiver/dockerstats - - receiver/elasticsearch - - receiver/envoyals - - receiver/expvar - - receiver/faro - - receiver/filelog - - receiver/filestats - - receiver/flinkmetrics - - receiver/fluentforward - - receiver/github - - receiver/gitlab - - receiver/googlecloudmonitoring - - receiver/googlecloudpubsub - - receiver/googlecloudspanner - - receiver/haproxy - - receiver/hostmetrics - - receiver/hostmetrics/internal/scraper/cpuscraper - - receiver/hostmetrics/internal/scraper/diskscraper - - receiver/hostmetrics/internal/scraper/filesystemscraper - - receiver/hostmetrics/internal/scraper/loadscraper - - receiver/hostmetrics/internal/scraper/memoryscraper - - receiver/hostmetrics/internal/scraper/networkscraper - - receiver/hostmetrics/internal/scraper/nfsscraper - - receiver/hostmetrics/internal/scraper/pagingscraper - - receiver/hostmetrics/internal/scraper/processesscraper - - receiver/hostmetrics/internal/scraper/processscraper - - receiver/hostmetrics/internal/scraper/systemscraper - - receiver/httpcheck - - receiver/huaweicloudces - - receiver/iis - - receiver/influxdb - - receiver/jaeger - - receiver/jmx - - receiver/journald - - receiver/k8scluster - - receiver/k8sevents - - receiver/k8slog - - receiver/k8sobjects - - receiver/kafka - - receiver/kafkametrics - - receiver/kubeletstats - - receiver/libhoney - - receiver/loki - - receiver/memcached - - receiver/mongodb - - receiver/mongodbatlas - - receiver/mysql - - receiver/namedpipe - - receiver/netflow - - receiver/nginx - - receiver/nsxt - - receiver/ntp - - receiver/oracledb - - receiver/osquery - - receiver/otelarrow - - receiver/otlpjsonfile - - receiver/podman - - receiver/postgresql - - receiver/pprof - - receiver/prometheus - - receiver/prometheusremotewrite - - receiver/pulsar - - receiver/purefa - - receiver/purefb - - receiver/rabbitmq - - receiver/receivercreator - - receiver/redis - - receiver/riak - - receiver/saphana - - receiver/signalfx - - receiver/simpleprometheus - - receiver/skywalking - - receiver/snmp - - receiver/snowflake - - receiver/solace - - receiver/splunkenterprise - - receiver/splunkhec - - receiver/sqlquery - - receiver/sqlserver - - receiver/sshcheck - - receiver/statsd - - receiver/stef - - receiver/syslog - - receiver/systemd - - receiver/tcpcheck - - receiver/tcplog - - receiver/tlscheck - - receiver/udplog - - receiver/vcenter - - receiver/wavefront - - receiver/webhookevent - - receiver/windowseventlog - - receiver/windowsperfcounters - - receiver/windowsservice - - receiver/zipkin - - receiver/zookeeper - - scraper/zookeeperscraper - - testbed - - testbed/mockdatasenders/mockdatadogagentexporter + - cmd/codecovgen + - cmd/golden + - cmd/opampsupervisor + - cmd/otelcontribcol + - cmd/oteltestbedcol + - cmd/telemetrygen + - confmap/provider/aesprovider + - confmap/provider/googlesecretmanagerprovider + - confmap/provider/s3provider + - confmap/provider/secretsmanagerprovider + - connector/count + - connector/datadog + - connector/exceptions + - connector/failover + - connector/grafanacloud + - connector/otlpjson + - connector/roundrobin + - connector/routing + - connector/servicegraph + - connector/signaltometrics + - connector/spanmetrics + - connector/sum + - exporter/alertmanager + - exporter/alibabacloudlogservice + - exporter/awscloudwatchlogs + - exporter/awsemf + - exporter/awskinesis + - exporter/awss3 + - exporter/awsxray + - exporter/azureblob + - exporter/azuredataexplorer + - exporter/azuremonitor + - exporter/bmchelix + - exporter/carbon + - exporter/cassandra + - exporter/clickhouse + - exporter/coralogix + - exporter/datadog + - exporter/dataset + - exporter/doris + - exporter/elasticsearch + - exporter/faro + - exporter/file + - exporter/googlecloud + - exporter/googlecloudpubsub + - exporter/googlemanagedprometheus + - exporter/honeycombmarker + - exporter/influxdb + - exporter/kafka + - exporter/loadbalancing + - exporter/logicmonitor + - exporter/logzio + - exporter/mezmo + - exporter/opensearch + - exporter/otelarrow + - exporter/prometheus + - exporter/prometheusremotewrite + - exporter/pulsar + - exporter/rabbitmq + - exporter/sapm + - exporter/sematext + - exporter/sentry + - exporter/signalfx + - exporter/splunkhec + - exporter/stef + - exporter/sumologic + - exporter/syslog + - exporter/tencentcloudlogservice + - exporter/tinybird + - exporter/zipkin + - extension/ack + - extension/asapauth + - extension/awsproxy + - extension/azureauth + - extension/basicauth + - extension/bearertokenauth + - extension/cgroupruntime + - extension/datadog + - extension/encoding + - extension/encoding/avrologencoding + - extension/encoding/awscloudwatchmetricstreamsencoding + - extension/encoding/awslogsencoding + - extension/encoding/googlecloudlogentryencoding + - extension/encoding/jaegerencoding + - extension/encoding/jsonlogencoding + - extension/encoding/otlpencoding + - extension/encoding/skywalkingencoding + - extension/encoding/textencoding + - extension/encoding/zipkinencoding + - extension/googleclientauth + - extension/headerssetter + - extension/healthcheck + - extension/healthcheckv2 + - extension/httpforwarder + - extension/jaegerremotesampling + - extension/k8sleaderelector + - extension/oauth2clientauth + - extension/observer + - extension/observer/cfgardenobserver + - extension/observer/dockerobserver + - extension/observer/ecsobserver + - extension/observer/ecstaskobserver + - extension/observer/hostobserver + - extension/observer/k8sobserver + - extension/observer/kafkatopicsobserver + - extension/oidcauth + - extension/opamp + - extension/opampcustommessages + - extension/pprof + - extension/remotetap + - extension/sigv4auth + - extension/solarwindsapmsettings + - extension/storage + - extension/storage/dbstorage + - extension/storage/filestorage + - extension/storage/redisstorage + - extension/sumologic + - internal/aws + - internal/collectd + - internal/common + - internal/core + - internal/datadog + - internal/docker + - internal/exp/metrics + - internal/filter + - internal/grpcutil + - internal/healthcheck + - internal/k8sconfig + - internal/kafka + - internal/kubelet + - internal/metadataproviders + - internal/otelarrow + - internal/pdatautil + - internal/rabbitmq + - internal/sharedcomponent + - internal/splunk + - internal/sqlquery + - internal/tools + - pkg/batchperresourceattr + - pkg/batchpersignal + - pkg/core/xidutils + - pkg/datadog + - pkg/experimentalmetricmetadata + - pkg/golden + - pkg/kafka/configkafka + - pkg/kafka/topic + - pkg/ottl + - pkg/pdatatest + - pkg/pdatautil + - pkg/resourcetotelemetry + - pkg/sampling + - pkg/stanza + - pkg/stanza/fileconsumer + - pkg/status + - pkg/translator/azure + - pkg/translator/azurelogs + - pkg/translator/faro + - pkg/translator/jaeger + - pkg/translator/loki + - pkg/translator/opencensus + - pkg/translator/prometheus + - pkg/translator/prometheusremotewrite + - pkg/translator/signalfx + - pkg/translator/skywalking + - pkg/translator/zipkin + - pkg/winperfcounters + - pkg/xk8stest + - processor/attributes + - processor/coralogix + - processor/cumulativetodelta + - processor/datadogsemantics + - processor/deltatocumulative + - processor/deltatorate + - processor/dnslookup + - processor/filter + - processor/geoip + - processor/groupbyattrs + - processor/groupbytrace + - processor/interval + - processor/isolationforest + - processor/k8sattributes + - processor/logdedup + - processor/logstransform + - processor/metricsgeneration + - processor/metricstarttime + - processor/metricstransform + - processor/probabilisticsampler + - processor/redaction + - processor/remotetap + - processor/resource + - processor/resourcedetection + - processor/resourcedetection/internal/akamai + - processor/resourcedetection/internal/digitalocean + - processor/resourcedetection/internal/dynatrace + - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova + - processor/resourcedetection/internal/oraclecloud + - processor/resourcedetection/internal/scaleway + - processor/resourcedetection/internal/vultr + - processor/schema + - processor/span + - processor/sumologic + - processor/tailsampling + - processor/transform + - processor/unroll + - receiver/activedirectoryds + - receiver/aerospike + - receiver/apache + - receiver/apachespark + - receiver/awscloudwatch + - receiver/awscontainerinsight + - receiver/awsecscontainermetrics + - receiver/awsfirehose + - receiver/awss3 + - receiver/awsxray + - receiver/azureblob + - receiver/azureeventhub + - receiver/azuremonitor + - receiver/bigip + - receiver/carbon + - receiver/chrony + - receiver/cloudflare + - receiver/cloudfoundry + - receiver/collectd + - receiver/couchdb + - receiver/datadog + - receiver/dockerstats + - receiver/elasticsearch + - receiver/envoyals + - receiver/expvar + - receiver/faro + - receiver/filelog + - receiver/filestats + - receiver/flinkmetrics + - receiver/fluentforward + - receiver/github + - receiver/gitlab + - receiver/googlecloudmonitoring + - receiver/googlecloudpubsub + - receiver/googlecloudspanner + - receiver/haproxy + - receiver/hostmetrics + - receiver/hostmetrics/internal/scraper/cpuscraper + - receiver/hostmetrics/internal/scraper/diskscraper + - receiver/hostmetrics/internal/scraper/filesystemscraper + - receiver/hostmetrics/internal/scraper/loadscraper + - receiver/hostmetrics/internal/scraper/memoryscraper + - receiver/hostmetrics/internal/scraper/networkscraper + - receiver/hostmetrics/internal/scraper/nfsscraper + - receiver/hostmetrics/internal/scraper/pagingscraper + - receiver/hostmetrics/internal/scraper/processesscraper + - receiver/hostmetrics/internal/scraper/processscraper + - receiver/hostmetrics/internal/scraper/systemscraper + - receiver/httpcheck + - receiver/huaweicloudces + - receiver/iis + - receiver/influxdb + - receiver/jaeger + - receiver/jmx + - receiver/journald + - receiver/k8scluster + - receiver/k8sevents + - receiver/k8slog + - receiver/k8sobjects + - receiver/kafka + - receiver/kafkametrics + - receiver/kubeletstats + - receiver/libhoney + - receiver/loki + - receiver/memcached + - receiver/mongodb + - receiver/mongodbatlas + - receiver/mysql + - receiver/namedpipe + - receiver/netflow + - receiver/nginx + - receiver/nsxt + - receiver/ntp + - receiver/oracledb + - receiver/osquery + - receiver/otelarrow + - receiver/otlpjsonfile + - receiver/podman + - receiver/postgresql + - receiver/pprof + - receiver/prometheus + - receiver/prometheusremotewrite + - receiver/pulsar + - receiver/purefa + - receiver/purefb + - receiver/rabbitmq + - receiver/receivercreator + - receiver/redis + - receiver/riak + - receiver/saphana + - receiver/signalfx + - receiver/simpleprometheus + - receiver/skywalking + - receiver/snmp + - receiver/snowflake + - receiver/solace + - receiver/splunkenterprise + - receiver/splunkhec + - receiver/sqlquery + - receiver/sqlserver + - receiver/sshcheck + - receiver/statsd + - receiver/stef + - receiver/syslog + - receiver/systemd + - receiver/tcpcheck + - receiver/tcplog + - receiver/tlscheck + - receiver/udplog + - receiver/vcenter + - receiver/wavefront + - receiver/webhookevent + - receiver/windowseventlog + - receiver/windowsperfcounters + - receiver/windowsservice + - receiver/zipkin + - receiver/zookeeper + - scraper/zookeeperscraper + - testbed + - testbed/mockdatasenders/mockdatadogagentexporter # End components list - type: textarea attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index c9bca0794834a..507d3a5de5042 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -12,331 +12,331 @@ body: # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` # Do not manually edit it. # Start components list - - cmd/codecovgen - - cmd/golden - - cmd/opampsupervisor - - cmd/otelcontribcol - - cmd/oteltestbedcol - - cmd/telemetrygen - - confmap/provider/aesprovider - - confmap/provider/googlesecretmanagerprovider - - confmap/provider/s3provider - - confmap/provider/secretsmanagerprovider - - connector/count - - connector/datadog - - connector/exceptions - - connector/failover - - connector/grafanacloud - - connector/otlpjson - - connector/roundrobin - - connector/routing - - connector/servicegraph - - connector/signaltometrics - - connector/spanmetrics - - connector/sum - - exporter/alertmanager - - exporter/alibabacloudlogservice - - exporter/awscloudwatchlogs - - exporter/awsemf - - exporter/awskinesis - - exporter/awss3 - - exporter/awsxray - - exporter/azureblob - - exporter/azuredataexplorer - - exporter/azuremonitor - - exporter/bmchelix - - exporter/carbon - - exporter/cassandra - - exporter/clickhouse - - exporter/coralogix - - exporter/datadog - - exporter/dataset - - exporter/doris - - exporter/elasticsearch - - exporter/faro - - exporter/file - - exporter/googlecloud - - exporter/googlecloudpubsub - - exporter/googlemanagedprometheus - - exporter/honeycombmarker - - exporter/influxdb - - exporter/kafka - - exporter/loadbalancing - - exporter/logicmonitor - - exporter/logzio - - exporter/mezmo - - exporter/opensearch - - exporter/otelarrow - - exporter/prometheus - - exporter/prometheusremotewrite - - exporter/pulsar - - exporter/rabbitmq - - exporter/sapm - - exporter/sematext - - exporter/sentry - - exporter/signalfx - - exporter/splunkhec - - exporter/stef - - exporter/sumologic - - exporter/syslog - - exporter/tencentcloudlogservice - - exporter/tinybird - - exporter/zipkin - - extension/ack - - extension/asapauth - - extension/awsproxy - - extension/azureauth - - extension/basicauth - - extension/bearertokenauth - - extension/cgroupruntime - - extension/datadog - - extension/encoding - - extension/encoding/avrologencoding - - extension/encoding/awscloudwatchmetricstreamsencoding - - extension/encoding/awslogsencoding - - extension/encoding/googlecloudlogentryencoding - - extension/encoding/jaegerencoding - - extension/encoding/jsonlogencoding - - extension/encoding/otlpencoding - - extension/encoding/skywalkingencoding - - extension/encoding/textencoding - - extension/encoding/zipkinencoding - - extension/googleclientauth - - extension/headerssetter - - extension/healthcheck - - extension/healthcheckv2 - - extension/httpforwarder - - extension/jaegerremotesampling - - extension/k8sleaderelector - - extension/oauth2clientauth - - extension/observer - - extension/observer/cfgardenobserver - - extension/observer/dockerobserver - - extension/observer/ecsobserver - - extension/observer/ecstaskobserver - - extension/observer/hostobserver - - extension/observer/k8sobserver - - extension/observer/kafkatopicsobserver - - extension/oidcauth - - extension/opamp - - extension/opampcustommessages - - extension/pprof - - extension/remotetap - - extension/sigv4auth - - extension/solarwindsapmsettings - - extension/storage - - extension/storage/dbstorage - - extension/storage/filestorage - - extension/storage/redisstorage - - extension/sumologic - - internal/aws - - internal/collectd - - internal/common - - internal/core - - internal/datadog - - internal/docker - - internal/exp/metrics - - internal/filter - - internal/grpcutil - - internal/healthcheck - - internal/k8sconfig - - internal/kafka - - internal/kubelet - - internal/metadataproviders - - internal/otelarrow - - internal/pdatautil - - internal/rabbitmq - - internal/sharedcomponent - - internal/splunk - - internal/sqlquery - - internal/tools - - pkg/batchperresourceattr - - pkg/batchpersignal - - pkg/core/xidutils - - pkg/datadog - - pkg/experimentalmetricmetadata - - pkg/golden - - pkg/kafka/configkafka - - pkg/kafka/topic - - pkg/ottl - - pkg/pdatatest - - pkg/pdatautil - - pkg/resourcetotelemetry - - pkg/sampling - - pkg/stanza - - pkg/stanza/fileconsumer - - pkg/status - - pkg/translator/azure - - pkg/translator/azurelogs - - pkg/translator/faro - - pkg/translator/jaeger - - pkg/translator/loki - - pkg/translator/opencensus - - pkg/translator/prometheus - - pkg/translator/prometheusremotewrite - - pkg/translator/signalfx - - pkg/translator/skywalking - - pkg/translator/zipkin - - pkg/winperfcounters - - pkg/xk8stest - - processor/attributes - - processor/coralogix - - processor/cumulativetodelta - - processor/datadogsemantics - - processor/deltatocumulative - - processor/deltatorate - - processor/dnslookup - - processor/filter - - processor/geoip - - processor/groupbyattrs - - processor/groupbytrace - - processor/interval - - processor/isolationforest - - processor/k8sattributes - - processor/logdedup - - processor/logstransform - - processor/metricsgeneration - - processor/metricstarttime - - processor/metricstransform - - processor/probabilisticsampler - - processor/redaction - - processor/remotetap - - processor/resource - - processor/resourcedetection - - processor/resourcedetection/internal/akamai - - processor/resourcedetection/internal/digitalocean - - processor/resourcedetection/internal/dynatrace - - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - - processor/resourcedetection/internal/oraclecloud - - processor/resourcedetection/internal/scaleway - - processor/resourcedetection/internal/vultr - - processor/schema - - processor/span - - processor/sumologic - - processor/tailsampling - - processor/transform - - processor/unroll - - receiver/activedirectoryds - - receiver/aerospike - - receiver/apache - - receiver/apachespark - - receiver/awscloudwatch - - receiver/awscontainerinsight - - receiver/awsecscontainermetrics - - receiver/awsfirehose - - receiver/awss3 - - receiver/awsxray - - receiver/azureblob - - receiver/azureeventhub - - receiver/azuremonitor - - receiver/bigip - - receiver/carbon - - receiver/chrony - - receiver/cloudflare - - receiver/cloudfoundry - - receiver/collectd - - receiver/couchdb - - receiver/datadog - - receiver/dockerstats - - receiver/elasticsearch - - receiver/envoyals - - receiver/expvar - - receiver/faro - - receiver/filelog - - receiver/filestats - - receiver/flinkmetrics - - receiver/fluentforward - - receiver/github - - receiver/gitlab - - receiver/googlecloudmonitoring - - receiver/googlecloudpubsub - - receiver/googlecloudspanner - - receiver/haproxy - - receiver/hostmetrics - - receiver/hostmetrics/internal/scraper/cpuscraper - - receiver/hostmetrics/internal/scraper/diskscraper - - receiver/hostmetrics/internal/scraper/filesystemscraper - - receiver/hostmetrics/internal/scraper/loadscraper - - receiver/hostmetrics/internal/scraper/memoryscraper - - receiver/hostmetrics/internal/scraper/networkscraper - - receiver/hostmetrics/internal/scraper/nfsscraper - - receiver/hostmetrics/internal/scraper/pagingscraper - - receiver/hostmetrics/internal/scraper/processesscraper - - receiver/hostmetrics/internal/scraper/processscraper - - receiver/hostmetrics/internal/scraper/systemscraper - - receiver/httpcheck - - receiver/huaweicloudces - - receiver/iis - - receiver/influxdb - - receiver/jaeger - - receiver/jmx - - receiver/journald - - receiver/k8scluster - - receiver/k8sevents - - receiver/k8slog - - receiver/k8sobjects - - receiver/kafka - - receiver/kafkametrics - - receiver/kubeletstats - - receiver/libhoney - - receiver/loki - - receiver/memcached - - receiver/mongodb - - receiver/mongodbatlas - - receiver/mysql - - receiver/namedpipe - - receiver/netflow - - receiver/nginx - - receiver/nsxt - - receiver/ntp - - receiver/oracledb - - receiver/osquery - - receiver/otelarrow - - receiver/otlpjsonfile - - receiver/podman - - receiver/postgresql - - receiver/pprof - - receiver/prometheus - - receiver/prometheusremotewrite - - receiver/pulsar - - receiver/purefa - - receiver/purefb - - receiver/rabbitmq - - receiver/receivercreator - - receiver/redis - - receiver/riak - - receiver/saphana - - receiver/signalfx - - receiver/simpleprometheus - - receiver/skywalking - - receiver/snmp - - receiver/snowflake - - receiver/solace - - receiver/splunkenterprise - - receiver/splunkhec - - receiver/sqlquery - - receiver/sqlserver - - receiver/sshcheck - - receiver/statsd - - receiver/stef - - receiver/syslog - - receiver/systemd - - receiver/tcpcheck - - receiver/tcplog - - receiver/tlscheck - - receiver/udplog - - receiver/vcenter - - receiver/wavefront - - receiver/webhookevent - - receiver/windowseventlog - - receiver/windowsperfcounters - - receiver/windowsservice - - receiver/zipkin - - receiver/zookeeper - - scraper/zookeeperscraper - - testbed - - testbed/mockdatasenders/mockdatadogagentexporter + - cmd/codecovgen + - cmd/golden + - cmd/opampsupervisor + - cmd/otelcontribcol + - cmd/oteltestbedcol + - cmd/telemetrygen + - confmap/provider/aesprovider + - confmap/provider/googlesecretmanagerprovider + - confmap/provider/s3provider + - confmap/provider/secretsmanagerprovider + - connector/count + - connector/datadog + - connector/exceptions + - connector/failover + - connector/grafanacloud + - connector/otlpjson + - connector/roundrobin + - connector/routing + - connector/servicegraph + - connector/signaltometrics + - connector/spanmetrics + - connector/sum + - exporter/alertmanager + - exporter/alibabacloudlogservice + - exporter/awscloudwatchlogs + - exporter/awsemf + - exporter/awskinesis + - exporter/awss3 + - exporter/awsxray + - exporter/azureblob + - exporter/azuredataexplorer + - exporter/azuremonitor + - exporter/bmchelix + - exporter/carbon + - exporter/cassandra + - exporter/clickhouse + - exporter/coralogix + - exporter/datadog + - exporter/dataset + - exporter/doris + - exporter/elasticsearch + - exporter/faro + - exporter/file + - exporter/googlecloud + - exporter/googlecloudpubsub + - exporter/googlemanagedprometheus + - exporter/honeycombmarker + - exporter/influxdb + - exporter/kafka + - exporter/loadbalancing + - exporter/logicmonitor + - exporter/logzio + - exporter/mezmo + - exporter/opensearch + - exporter/otelarrow + - exporter/prometheus + - exporter/prometheusremotewrite + - exporter/pulsar + - exporter/rabbitmq + - exporter/sapm + - exporter/sematext + - exporter/sentry + - exporter/signalfx + - exporter/splunkhec + - exporter/stef + - exporter/sumologic + - exporter/syslog + - exporter/tencentcloudlogservice + - exporter/tinybird + - exporter/zipkin + - extension/ack + - extension/asapauth + - extension/awsproxy + - extension/azureauth + - extension/basicauth + - extension/bearertokenauth + - extension/cgroupruntime + - extension/datadog + - extension/encoding + - extension/encoding/avrologencoding + - extension/encoding/awscloudwatchmetricstreamsencoding + - extension/encoding/awslogsencoding + - extension/encoding/googlecloudlogentryencoding + - extension/encoding/jaegerencoding + - extension/encoding/jsonlogencoding + - extension/encoding/otlpencoding + - extension/encoding/skywalkingencoding + - extension/encoding/textencoding + - extension/encoding/zipkinencoding + - extension/googleclientauth + - extension/headerssetter + - extension/healthcheck + - extension/healthcheckv2 + - extension/httpforwarder + - extension/jaegerremotesampling + - extension/k8sleaderelector + - extension/oauth2clientauth + - extension/observer + - extension/observer/cfgardenobserver + - extension/observer/dockerobserver + - extension/observer/ecsobserver + - extension/observer/ecstaskobserver + - extension/observer/hostobserver + - extension/observer/k8sobserver + - extension/observer/kafkatopicsobserver + - extension/oidcauth + - extension/opamp + - extension/opampcustommessages + - extension/pprof + - extension/remotetap + - extension/sigv4auth + - extension/solarwindsapmsettings + - extension/storage + - extension/storage/dbstorage + - extension/storage/filestorage + - extension/storage/redisstorage + - extension/sumologic + - internal/aws + - internal/collectd + - internal/common + - internal/core + - internal/datadog + - internal/docker + - internal/exp/metrics + - internal/filter + - internal/grpcutil + - internal/healthcheck + - internal/k8sconfig + - internal/kafka + - internal/kubelet + - internal/metadataproviders + - internal/otelarrow + - internal/pdatautil + - internal/rabbitmq + - internal/sharedcomponent + - internal/splunk + - internal/sqlquery + - internal/tools + - pkg/batchperresourceattr + - pkg/batchpersignal + - pkg/core/xidutils + - pkg/datadog + - pkg/experimentalmetricmetadata + - pkg/golden + - pkg/kafka/configkafka + - pkg/kafka/topic + - pkg/ottl + - pkg/pdatatest + - pkg/pdatautil + - pkg/resourcetotelemetry + - pkg/sampling + - pkg/stanza + - pkg/stanza/fileconsumer + - pkg/status + - pkg/translator/azure + - pkg/translator/azurelogs + - pkg/translator/faro + - pkg/translator/jaeger + - pkg/translator/loki + - pkg/translator/opencensus + - pkg/translator/prometheus + - pkg/translator/prometheusremotewrite + - pkg/translator/signalfx + - pkg/translator/skywalking + - pkg/translator/zipkin + - pkg/winperfcounters + - pkg/xk8stest + - processor/attributes + - processor/coralogix + - processor/cumulativetodelta + - processor/datadogsemantics + - processor/deltatocumulative + - processor/deltatorate + - processor/dnslookup + - processor/filter + - processor/geoip + - processor/groupbyattrs + - processor/groupbytrace + - processor/interval + - processor/isolationforest + - processor/k8sattributes + - processor/logdedup + - processor/logstransform + - processor/metricsgeneration + - processor/metricstarttime + - processor/metricstransform + - processor/probabilisticsampler + - processor/redaction + - processor/remotetap + - processor/resource + - processor/resourcedetection + - processor/resourcedetection/internal/akamai + - processor/resourcedetection/internal/digitalocean + - processor/resourcedetection/internal/dynatrace + - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova + - processor/resourcedetection/internal/oraclecloud + - processor/resourcedetection/internal/scaleway + - processor/resourcedetection/internal/vultr + - processor/schema + - processor/span + - processor/sumologic + - processor/tailsampling + - processor/transform + - processor/unroll + - receiver/activedirectoryds + - receiver/aerospike + - receiver/apache + - receiver/apachespark + - receiver/awscloudwatch + - receiver/awscontainerinsight + - receiver/awsecscontainermetrics + - receiver/awsfirehose + - receiver/awss3 + - receiver/awsxray + - receiver/azureblob + - receiver/azureeventhub + - receiver/azuremonitor + - receiver/bigip + - receiver/carbon + - receiver/chrony + - receiver/cloudflare + - receiver/cloudfoundry + - receiver/collectd + - receiver/couchdb + - receiver/datadog + - receiver/dockerstats + - receiver/elasticsearch + - receiver/envoyals + - receiver/expvar + - receiver/faro + - receiver/filelog + - receiver/filestats + - receiver/flinkmetrics + - receiver/fluentforward + - receiver/github + - receiver/gitlab + - receiver/googlecloudmonitoring + - receiver/googlecloudpubsub + - receiver/googlecloudspanner + - receiver/haproxy + - receiver/hostmetrics + - receiver/hostmetrics/internal/scraper/cpuscraper + - receiver/hostmetrics/internal/scraper/diskscraper + - receiver/hostmetrics/internal/scraper/filesystemscraper + - receiver/hostmetrics/internal/scraper/loadscraper + - receiver/hostmetrics/internal/scraper/memoryscraper + - receiver/hostmetrics/internal/scraper/networkscraper + - receiver/hostmetrics/internal/scraper/nfsscraper + - receiver/hostmetrics/internal/scraper/pagingscraper + - receiver/hostmetrics/internal/scraper/processesscraper + - receiver/hostmetrics/internal/scraper/processscraper + - receiver/hostmetrics/internal/scraper/systemscraper + - receiver/httpcheck + - receiver/huaweicloudces + - receiver/iis + - receiver/influxdb + - receiver/jaeger + - receiver/jmx + - receiver/journald + - receiver/k8scluster + - receiver/k8sevents + - receiver/k8slog + - receiver/k8sobjects + - receiver/kafka + - receiver/kafkametrics + - receiver/kubeletstats + - receiver/libhoney + - receiver/loki + - receiver/memcached + - receiver/mongodb + - receiver/mongodbatlas + - receiver/mysql + - receiver/namedpipe + - receiver/netflow + - receiver/nginx + - receiver/nsxt + - receiver/ntp + - receiver/oracledb + - receiver/osquery + - receiver/otelarrow + - receiver/otlpjsonfile + - receiver/podman + - receiver/postgresql + - receiver/pprof + - receiver/prometheus + - receiver/prometheusremotewrite + - receiver/pulsar + - receiver/purefa + - receiver/purefb + - receiver/rabbitmq + - receiver/receivercreator + - receiver/redis + - receiver/riak + - receiver/saphana + - receiver/signalfx + - receiver/simpleprometheus + - receiver/skywalking + - receiver/snmp + - receiver/snowflake + - receiver/solace + - receiver/splunkenterprise + - receiver/splunkhec + - receiver/sqlquery + - receiver/sqlserver + - receiver/sshcheck + - receiver/statsd + - receiver/stef + - receiver/syslog + - receiver/systemd + - receiver/tcpcheck + - receiver/tcplog + - receiver/tlscheck + - receiver/udplog + - receiver/vcenter + - receiver/wavefront + - receiver/webhookevent + - receiver/windowseventlog + - receiver/windowsperfcounters + - receiver/windowsservice + - receiver/zipkin + - receiver/zookeeper + - scraper/zookeeperscraper + - testbed + - testbed/mockdatasenders/mockdatadogagentexporter # End components list - type: textarea attributes: diff --git a/.github/ISSUE_TEMPLATE/other.yaml b/.github/ISSUE_TEMPLATE/other.yaml index 5d652fea099f0..99f337c77ac8e 100644 --- a/.github/ISSUE_TEMPLATE/other.yaml +++ b/.github/ISSUE_TEMPLATE/other.yaml @@ -12,331 +12,331 @@ body: # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` # Do not manually edit it. # Start components list - - cmd/codecovgen - - cmd/golden - - cmd/opampsupervisor - - cmd/otelcontribcol - - cmd/oteltestbedcol - - cmd/telemetrygen - - confmap/provider/aesprovider - - confmap/provider/googlesecretmanagerprovider - - confmap/provider/s3provider - - confmap/provider/secretsmanagerprovider - - connector/count - - connector/datadog - - connector/exceptions - - connector/failover - - connector/grafanacloud - - connector/otlpjson - - connector/roundrobin - - connector/routing - - connector/servicegraph - - connector/signaltometrics - - connector/spanmetrics - - connector/sum - - exporter/alertmanager - - exporter/alibabacloudlogservice - - exporter/awscloudwatchlogs - - exporter/awsemf - - exporter/awskinesis - - exporter/awss3 - - exporter/awsxray - - exporter/azureblob - - exporter/azuredataexplorer - - exporter/azuremonitor - - exporter/bmchelix - - exporter/carbon - - exporter/cassandra - - exporter/clickhouse - - exporter/coralogix - - exporter/datadog - - exporter/dataset - - exporter/doris - - exporter/elasticsearch - - exporter/faro - - exporter/file - - exporter/googlecloud - - exporter/googlecloudpubsub - - exporter/googlemanagedprometheus - - exporter/honeycombmarker - - exporter/influxdb - - exporter/kafka - - exporter/loadbalancing - - exporter/logicmonitor - - exporter/logzio - - exporter/mezmo - - exporter/opensearch - - exporter/otelarrow - - exporter/prometheus - - exporter/prometheusremotewrite - - exporter/pulsar - - exporter/rabbitmq - - exporter/sapm - - exporter/sematext - - exporter/sentry - - exporter/signalfx - - exporter/splunkhec - - exporter/stef - - exporter/sumologic - - exporter/syslog - - exporter/tencentcloudlogservice - - exporter/tinybird - - exporter/zipkin - - extension/ack - - extension/asapauth - - extension/awsproxy - - extension/azureauth - - extension/basicauth - - extension/bearertokenauth - - extension/cgroupruntime - - extension/datadog - - extension/encoding - - extension/encoding/avrologencoding - - extension/encoding/awscloudwatchmetricstreamsencoding - - extension/encoding/awslogsencoding - - extension/encoding/googlecloudlogentryencoding - - extension/encoding/jaegerencoding - - extension/encoding/jsonlogencoding - - extension/encoding/otlpencoding - - extension/encoding/skywalkingencoding - - extension/encoding/textencoding - - extension/encoding/zipkinencoding - - extension/googleclientauth - - extension/headerssetter - - extension/healthcheck - - extension/healthcheckv2 - - extension/httpforwarder - - extension/jaegerremotesampling - - extension/k8sleaderelector - - extension/oauth2clientauth - - extension/observer - - extension/observer/cfgardenobserver - - extension/observer/dockerobserver - - extension/observer/ecsobserver - - extension/observer/ecstaskobserver - - extension/observer/hostobserver - - extension/observer/k8sobserver - - extension/observer/kafkatopicsobserver - - extension/oidcauth - - extension/opamp - - extension/opampcustommessages - - extension/pprof - - extension/remotetap - - extension/sigv4auth - - extension/solarwindsapmsettings - - extension/storage - - extension/storage/dbstorage - - extension/storage/filestorage - - extension/storage/redisstorage - - extension/sumologic - - internal/aws - - internal/collectd - - internal/common - - internal/core - - internal/datadog - - internal/docker - - internal/exp/metrics - - internal/filter - - internal/grpcutil - - internal/healthcheck - - internal/k8sconfig - - internal/kafka - - internal/kubelet - - internal/metadataproviders - - internal/otelarrow - - internal/pdatautil - - internal/rabbitmq - - internal/sharedcomponent - - internal/splunk - - internal/sqlquery - - internal/tools - - pkg/batchperresourceattr - - pkg/batchpersignal - - pkg/core/xidutils - - pkg/datadog - - pkg/experimentalmetricmetadata - - pkg/golden - - pkg/kafka/configkafka - - pkg/kafka/topic - - pkg/ottl - - pkg/pdatatest - - pkg/pdatautil - - pkg/resourcetotelemetry - - pkg/sampling - - pkg/stanza - - pkg/stanza/fileconsumer - - pkg/status - - pkg/translator/azure - - pkg/translator/azurelogs - - pkg/translator/faro - - pkg/translator/jaeger - - pkg/translator/loki - - pkg/translator/opencensus - - pkg/translator/prometheus - - pkg/translator/prometheusremotewrite - - pkg/translator/signalfx - - pkg/translator/skywalking - - pkg/translator/zipkin - - pkg/winperfcounters - - pkg/xk8stest - - processor/attributes - - processor/coralogix - - processor/cumulativetodelta - - processor/datadogsemantics - - processor/deltatocumulative - - processor/deltatorate - - processor/dnslookup - - processor/filter - - processor/geoip - - processor/groupbyattrs - - processor/groupbytrace - - processor/interval - - processor/isolationforest - - processor/k8sattributes - - processor/logdedup - - processor/logstransform - - processor/metricsgeneration - - processor/metricstarttime - - processor/metricstransform - - processor/probabilisticsampler - - processor/redaction - - processor/remotetap - - processor/resource - - processor/resourcedetection - - processor/resourcedetection/internal/akamai - - processor/resourcedetection/internal/digitalocean - - processor/resourcedetection/internal/dynatrace - - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - - processor/resourcedetection/internal/oraclecloud - - processor/resourcedetection/internal/scaleway - - processor/resourcedetection/internal/vultr - - processor/schema - - processor/span - - processor/sumologic - - processor/tailsampling - - processor/transform - - processor/unroll - - receiver/activedirectoryds - - receiver/aerospike - - receiver/apache - - receiver/apachespark - - receiver/awscloudwatch - - receiver/awscontainerinsight - - receiver/awsecscontainermetrics - - receiver/awsfirehose - - receiver/awss3 - - receiver/awsxray - - receiver/azureblob - - receiver/azureeventhub - - receiver/azuremonitor - - receiver/bigip - - receiver/carbon - - receiver/chrony - - receiver/cloudflare - - receiver/cloudfoundry - - receiver/collectd - - receiver/couchdb - - receiver/datadog - - receiver/dockerstats - - receiver/elasticsearch - - receiver/envoyals - - receiver/expvar - - receiver/faro - - receiver/filelog - - receiver/filestats - - receiver/flinkmetrics - - receiver/fluentforward - - receiver/github - - receiver/gitlab - - receiver/googlecloudmonitoring - - receiver/googlecloudpubsub - - receiver/googlecloudspanner - - receiver/haproxy - - receiver/hostmetrics - - receiver/hostmetrics/internal/scraper/cpuscraper - - receiver/hostmetrics/internal/scraper/diskscraper - - receiver/hostmetrics/internal/scraper/filesystemscraper - - receiver/hostmetrics/internal/scraper/loadscraper - - receiver/hostmetrics/internal/scraper/memoryscraper - - receiver/hostmetrics/internal/scraper/networkscraper - - receiver/hostmetrics/internal/scraper/nfsscraper - - receiver/hostmetrics/internal/scraper/pagingscraper - - receiver/hostmetrics/internal/scraper/processesscraper - - receiver/hostmetrics/internal/scraper/processscraper - - receiver/hostmetrics/internal/scraper/systemscraper - - receiver/httpcheck - - receiver/huaweicloudces - - receiver/iis - - receiver/influxdb - - receiver/jaeger - - receiver/jmx - - receiver/journald - - receiver/k8scluster - - receiver/k8sevents - - receiver/k8slog - - receiver/k8sobjects - - receiver/kafka - - receiver/kafkametrics - - receiver/kubeletstats - - receiver/libhoney - - receiver/loki - - receiver/memcached - - receiver/mongodb - - receiver/mongodbatlas - - receiver/mysql - - receiver/namedpipe - - receiver/netflow - - receiver/nginx - - receiver/nsxt - - receiver/ntp - - receiver/oracledb - - receiver/osquery - - receiver/otelarrow - - receiver/otlpjsonfile - - receiver/podman - - receiver/postgresql - - receiver/pprof - - receiver/prometheus - - receiver/prometheusremotewrite - - receiver/pulsar - - receiver/purefa - - receiver/purefb - - receiver/rabbitmq - - receiver/receivercreator - - receiver/redis - - receiver/riak - - receiver/saphana - - receiver/signalfx - - receiver/simpleprometheus - - receiver/skywalking - - receiver/snmp - - receiver/snowflake - - receiver/solace - - receiver/splunkenterprise - - receiver/splunkhec - - receiver/sqlquery - - receiver/sqlserver - - receiver/sshcheck - - receiver/statsd - - receiver/stef - - receiver/syslog - - receiver/systemd - - receiver/tcpcheck - - receiver/tcplog - - receiver/tlscheck - - receiver/udplog - - receiver/vcenter - - receiver/wavefront - - receiver/webhookevent - - receiver/windowseventlog - - receiver/windowsperfcounters - - receiver/windowsservice - - receiver/zipkin - - receiver/zookeeper - - scraper/zookeeperscraper - - testbed - - testbed/mockdatasenders/mockdatadogagentexporter + - cmd/codecovgen + - cmd/golden + - cmd/opampsupervisor + - cmd/otelcontribcol + - cmd/oteltestbedcol + - cmd/telemetrygen + - confmap/provider/aesprovider + - confmap/provider/googlesecretmanagerprovider + - confmap/provider/s3provider + - confmap/provider/secretsmanagerprovider + - connector/count + - connector/datadog + - connector/exceptions + - connector/failover + - connector/grafanacloud + - connector/otlpjson + - connector/roundrobin + - connector/routing + - connector/servicegraph + - connector/signaltometrics + - connector/spanmetrics + - connector/sum + - exporter/alertmanager + - exporter/alibabacloudlogservice + - exporter/awscloudwatchlogs + - exporter/awsemf + - exporter/awskinesis + - exporter/awss3 + - exporter/awsxray + - exporter/azureblob + - exporter/azuredataexplorer + - exporter/azuremonitor + - exporter/bmchelix + - exporter/carbon + - exporter/cassandra + - exporter/clickhouse + - exporter/coralogix + - exporter/datadog + - exporter/dataset + - exporter/doris + - exporter/elasticsearch + - exporter/faro + - exporter/file + - exporter/googlecloud + - exporter/googlecloudpubsub + - exporter/googlemanagedprometheus + - exporter/honeycombmarker + - exporter/influxdb + - exporter/kafka + - exporter/loadbalancing + - exporter/logicmonitor + - exporter/logzio + - exporter/mezmo + - exporter/opensearch + - exporter/otelarrow + - exporter/prometheus + - exporter/prometheusremotewrite + - exporter/pulsar + - exporter/rabbitmq + - exporter/sapm + - exporter/sematext + - exporter/sentry + - exporter/signalfx + - exporter/splunkhec + - exporter/stef + - exporter/sumologic + - exporter/syslog + - exporter/tencentcloudlogservice + - exporter/tinybird + - exporter/zipkin + - extension/ack + - extension/asapauth + - extension/awsproxy + - extension/azureauth + - extension/basicauth + - extension/bearertokenauth + - extension/cgroupruntime + - extension/datadog + - extension/encoding + - extension/encoding/avrologencoding + - extension/encoding/awscloudwatchmetricstreamsencoding + - extension/encoding/awslogsencoding + - extension/encoding/googlecloudlogentryencoding + - extension/encoding/jaegerencoding + - extension/encoding/jsonlogencoding + - extension/encoding/otlpencoding + - extension/encoding/skywalkingencoding + - extension/encoding/textencoding + - extension/encoding/zipkinencoding + - extension/googleclientauth + - extension/headerssetter + - extension/healthcheck + - extension/healthcheckv2 + - extension/httpforwarder + - extension/jaegerremotesampling + - extension/k8sleaderelector + - extension/oauth2clientauth + - extension/observer + - extension/observer/cfgardenobserver + - extension/observer/dockerobserver + - extension/observer/ecsobserver + - extension/observer/ecstaskobserver + - extension/observer/hostobserver + - extension/observer/k8sobserver + - extension/observer/kafkatopicsobserver + - extension/oidcauth + - extension/opamp + - extension/opampcustommessages + - extension/pprof + - extension/remotetap + - extension/sigv4auth + - extension/solarwindsapmsettings + - extension/storage + - extension/storage/dbstorage + - extension/storage/filestorage + - extension/storage/redisstorage + - extension/sumologic + - internal/aws + - internal/collectd + - internal/common + - internal/core + - internal/datadog + - internal/docker + - internal/exp/metrics + - internal/filter + - internal/grpcutil + - internal/healthcheck + - internal/k8sconfig + - internal/kafka + - internal/kubelet + - internal/metadataproviders + - internal/otelarrow + - internal/pdatautil + - internal/rabbitmq + - internal/sharedcomponent + - internal/splunk + - internal/sqlquery + - internal/tools + - pkg/batchperresourceattr + - pkg/batchpersignal + - pkg/core/xidutils + - pkg/datadog + - pkg/experimentalmetricmetadata + - pkg/golden + - pkg/kafka/configkafka + - pkg/kafka/topic + - pkg/ottl + - pkg/pdatatest + - pkg/pdatautil + - pkg/resourcetotelemetry + - pkg/sampling + - pkg/stanza + - pkg/stanza/fileconsumer + - pkg/status + - pkg/translator/azure + - pkg/translator/azurelogs + - pkg/translator/faro + - pkg/translator/jaeger + - pkg/translator/loki + - pkg/translator/opencensus + - pkg/translator/prometheus + - pkg/translator/prometheusremotewrite + - pkg/translator/signalfx + - pkg/translator/skywalking + - pkg/translator/zipkin + - pkg/winperfcounters + - pkg/xk8stest + - processor/attributes + - processor/coralogix + - processor/cumulativetodelta + - processor/datadogsemantics + - processor/deltatocumulative + - processor/deltatorate + - processor/dnslookup + - processor/filter + - processor/geoip + - processor/groupbyattrs + - processor/groupbytrace + - processor/interval + - processor/isolationforest + - processor/k8sattributes + - processor/logdedup + - processor/logstransform + - processor/metricsgeneration + - processor/metricstarttime + - processor/metricstransform + - processor/probabilisticsampler + - processor/redaction + - processor/remotetap + - processor/resource + - processor/resourcedetection + - processor/resourcedetection/internal/akamai + - processor/resourcedetection/internal/digitalocean + - processor/resourcedetection/internal/dynatrace + - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova + - processor/resourcedetection/internal/oraclecloud + - processor/resourcedetection/internal/scaleway + - processor/resourcedetection/internal/vultr + - processor/schema + - processor/span + - processor/sumologic + - processor/tailsampling + - processor/transform + - processor/unroll + - receiver/activedirectoryds + - receiver/aerospike + - receiver/apache + - receiver/apachespark + - receiver/awscloudwatch + - receiver/awscontainerinsight + - receiver/awsecscontainermetrics + - receiver/awsfirehose + - receiver/awss3 + - receiver/awsxray + - receiver/azureblob + - receiver/azureeventhub + - receiver/azuremonitor + - receiver/bigip + - receiver/carbon + - receiver/chrony + - receiver/cloudflare + - receiver/cloudfoundry + - receiver/collectd + - receiver/couchdb + - receiver/datadog + - receiver/dockerstats + - receiver/elasticsearch + - receiver/envoyals + - receiver/expvar + - receiver/faro + - receiver/filelog + - receiver/filestats + - receiver/flinkmetrics + - receiver/fluentforward + - receiver/github + - receiver/gitlab + - receiver/googlecloudmonitoring + - receiver/googlecloudpubsub + - receiver/googlecloudspanner + - receiver/haproxy + - receiver/hostmetrics + - receiver/hostmetrics/internal/scraper/cpuscraper + - receiver/hostmetrics/internal/scraper/diskscraper + - receiver/hostmetrics/internal/scraper/filesystemscraper + - receiver/hostmetrics/internal/scraper/loadscraper + - receiver/hostmetrics/internal/scraper/memoryscraper + - receiver/hostmetrics/internal/scraper/networkscraper + - receiver/hostmetrics/internal/scraper/nfsscraper + - receiver/hostmetrics/internal/scraper/pagingscraper + - receiver/hostmetrics/internal/scraper/processesscraper + - receiver/hostmetrics/internal/scraper/processscraper + - receiver/hostmetrics/internal/scraper/systemscraper + - receiver/httpcheck + - receiver/huaweicloudces + - receiver/iis + - receiver/influxdb + - receiver/jaeger + - receiver/jmx + - receiver/journald + - receiver/k8scluster + - receiver/k8sevents + - receiver/k8slog + - receiver/k8sobjects + - receiver/kafka + - receiver/kafkametrics + - receiver/kubeletstats + - receiver/libhoney + - receiver/loki + - receiver/memcached + - receiver/mongodb + - receiver/mongodbatlas + - receiver/mysql + - receiver/namedpipe + - receiver/netflow + - receiver/nginx + - receiver/nsxt + - receiver/ntp + - receiver/oracledb + - receiver/osquery + - receiver/otelarrow + - receiver/otlpjsonfile + - receiver/podman + - receiver/postgresql + - receiver/pprof + - receiver/prometheus + - receiver/prometheusremotewrite + - receiver/pulsar + - receiver/purefa + - receiver/purefb + - receiver/rabbitmq + - receiver/receivercreator + - receiver/redis + - receiver/riak + - receiver/saphana + - receiver/signalfx + - receiver/simpleprometheus + - receiver/skywalking + - receiver/snmp + - receiver/snowflake + - receiver/solace + - receiver/splunkenterprise + - receiver/splunkhec + - receiver/sqlquery + - receiver/sqlserver + - receiver/sshcheck + - receiver/statsd + - receiver/stef + - receiver/syslog + - receiver/systemd + - receiver/tcpcheck + - receiver/tcplog + - receiver/tlscheck + - receiver/udplog + - receiver/vcenter + - receiver/wavefront + - receiver/webhookevent + - receiver/windowseventlog + - receiver/windowsperfcounters + - receiver/windowsservice + - receiver/zipkin + - receiver/zookeeper + - scraper/zookeeperscraper + - testbed + - testbed/mockdatasenders/mockdatadogagentexporter # End components list - type: textarea attributes: diff --git a/.github/ISSUE_TEMPLATE/unmaintained.yaml b/.github/ISSUE_TEMPLATE/unmaintained.yaml index 635beb15e43af..df1217717bf9b 100644 --- a/.github/ISSUE_TEMPLATE/unmaintained.yaml +++ b/.github/ISSUE_TEMPLATE/unmaintained.yaml @@ -17,331 +17,331 @@ body: # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` # Do not manually edit it. # Start components list - - cmd/codecovgen - - cmd/golden - - cmd/opampsupervisor - - cmd/otelcontribcol - - cmd/oteltestbedcol - - cmd/telemetrygen - - confmap/provider/aesprovider - - confmap/provider/googlesecretmanagerprovider - - confmap/provider/s3provider - - confmap/provider/secretsmanagerprovider - - connector/count - - connector/datadog - - connector/exceptions - - connector/failover - - connector/grafanacloud - - connector/otlpjson - - connector/roundrobin - - connector/routing - - connector/servicegraph - - connector/signaltometrics - - connector/spanmetrics - - connector/sum - - exporter/alertmanager - - exporter/alibabacloudlogservice - - exporter/awscloudwatchlogs - - exporter/awsemf - - exporter/awskinesis - - exporter/awss3 - - exporter/awsxray - - exporter/azureblob - - exporter/azuredataexplorer - - exporter/azuremonitor - - exporter/bmchelix - - exporter/carbon - - exporter/cassandra - - exporter/clickhouse - - exporter/coralogix - - exporter/datadog - - exporter/dataset - - exporter/doris - - exporter/elasticsearch - - exporter/faro - - exporter/file - - exporter/googlecloud - - exporter/googlecloudpubsub - - exporter/googlemanagedprometheus - - exporter/honeycombmarker - - exporter/influxdb - - exporter/kafka - - exporter/loadbalancing - - exporter/logicmonitor - - exporter/logzio - - exporter/mezmo - - exporter/opensearch - - exporter/otelarrow - - exporter/prometheus - - exporter/prometheusremotewrite - - exporter/pulsar - - exporter/rabbitmq - - exporter/sapm - - exporter/sematext - - exporter/sentry - - exporter/signalfx - - exporter/splunkhec - - exporter/stef - - exporter/sumologic - - exporter/syslog - - exporter/tencentcloudlogservice - - exporter/tinybird - - exporter/zipkin - - extension/ack - - extension/asapauth - - extension/awsproxy - - extension/azureauth - - extension/basicauth - - extension/bearertokenauth - - extension/cgroupruntime - - extension/datadog - - extension/encoding - - extension/encoding/avrologencoding - - extension/encoding/awscloudwatchmetricstreamsencoding - - extension/encoding/awslogsencoding - - extension/encoding/googlecloudlogentryencoding - - extension/encoding/jaegerencoding - - extension/encoding/jsonlogencoding - - extension/encoding/otlpencoding - - extension/encoding/skywalkingencoding - - extension/encoding/textencoding - - extension/encoding/zipkinencoding - - extension/googleclientauth - - extension/headerssetter - - extension/healthcheck - - extension/healthcheckv2 - - extension/httpforwarder - - extension/jaegerremotesampling - - extension/k8sleaderelector - - extension/oauth2clientauth - - extension/observer - - extension/observer/cfgardenobserver - - extension/observer/dockerobserver - - extension/observer/ecsobserver - - extension/observer/ecstaskobserver - - extension/observer/hostobserver - - extension/observer/k8sobserver - - extension/observer/kafkatopicsobserver - - extension/oidcauth - - extension/opamp - - extension/opampcustommessages - - extension/pprof - - extension/remotetap - - extension/sigv4auth - - extension/solarwindsapmsettings - - extension/storage - - extension/storage/dbstorage - - extension/storage/filestorage - - extension/storage/redisstorage - - extension/sumologic - - internal/aws - - internal/collectd - - internal/common - - internal/core - - internal/datadog - - internal/docker - - internal/exp/metrics - - internal/filter - - internal/grpcutil - - internal/healthcheck - - internal/k8sconfig - - internal/kafka - - internal/kubelet - - internal/metadataproviders - - internal/otelarrow - - internal/pdatautil - - internal/rabbitmq - - internal/sharedcomponent - - internal/splunk - - internal/sqlquery - - internal/tools - - pkg/batchperresourceattr - - pkg/batchpersignal - - pkg/core/xidutils - - pkg/datadog - - pkg/experimentalmetricmetadata - - pkg/golden - - pkg/kafka/configkafka - - pkg/kafka/topic - - pkg/ottl - - pkg/pdatatest - - pkg/pdatautil - - pkg/resourcetotelemetry - - pkg/sampling - - pkg/stanza - - pkg/stanza/fileconsumer - - pkg/status - - pkg/translator/azure - - pkg/translator/azurelogs - - pkg/translator/faro - - pkg/translator/jaeger - - pkg/translator/loki - - pkg/translator/opencensus - - pkg/translator/prometheus - - pkg/translator/prometheusremotewrite - - pkg/translator/signalfx - - pkg/translator/skywalking - - pkg/translator/zipkin - - pkg/winperfcounters - - pkg/xk8stest - - processor/attributes - - processor/coralogix - - processor/cumulativetodelta - - processor/datadogsemantics - - processor/deltatocumulative - - processor/deltatorate - - processor/dnslookup - - processor/filter - - processor/geoip - - processor/groupbyattrs - - processor/groupbytrace - - processor/interval - - processor/isolationforest - - processor/k8sattributes - - processor/logdedup - - processor/logstransform - - processor/metricsgeneration - - processor/metricstarttime - - processor/metricstransform - - processor/probabilisticsampler - - processor/redaction - - processor/remotetap - - processor/resource - - processor/resourcedetection - - processor/resourcedetection/internal/akamai - - processor/resourcedetection/internal/digitalocean - - processor/resourcedetection/internal/dynatrace - - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - - processor/resourcedetection/internal/oraclecloud - - processor/resourcedetection/internal/scaleway - - processor/resourcedetection/internal/vultr - - processor/schema - - processor/span - - processor/sumologic - - processor/tailsampling - - processor/transform - - processor/unroll - - receiver/activedirectoryds - - receiver/aerospike - - receiver/apache - - receiver/apachespark - - receiver/awscloudwatch - - receiver/awscontainerinsight - - receiver/awsecscontainermetrics - - receiver/awsfirehose - - receiver/awss3 - - receiver/awsxray - - receiver/azureblob - - receiver/azureeventhub - - receiver/azuremonitor - - receiver/bigip - - receiver/carbon - - receiver/chrony - - receiver/cloudflare - - receiver/cloudfoundry - - receiver/collectd - - receiver/couchdb - - receiver/datadog - - receiver/dockerstats - - receiver/elasticsearch - - receiver/envoyals - - receiver/expvar - - receiver/faro - - receiver/filelog - - receiver/filestats - - receiver/flinkmetrics - - receiver/fluentforward - - receiver/github - - receiver/gitlab - - receiver/googlecloudmonitoring - - receiver/googlecloudpubsub - - receiver/googlecloudspanner - - receiver/haproxy - - receiver/hostmetrics - - receiver/hostmetrics/internal/scraper/cpuscraper - - receiver/hostmetrics/internal/scraper/diskscraper - - receiver/hostmetrics/internal/scraper/filesystemscraper - - receiver/hostmetrics/internal/scraper/loadscraper - - receiver/hostmetrics/internal/scraper/memoryscraper - - receiver/hostmetrics/internal/scraper/networkscraper - - receiver/hostmetrics/internal/scraper/nfsscraper - - receiver/hostmetrics/internal/scraper/pagingscraper - - receiver/hostmetrics/internal/scraper/processesscraper - - receiver/hostmetrics/internal/scraper/processscraper - - receiver/hostmetrics/internal/scraper/systemscraper - - receiver/httpcheck - - receiver/huaweicloudces - - receiver/iis - - receiver/influxdb - - receiver/jaeger - - receiver/jmx - - receiver/journald - - receiver/k8scluster - - receiver/k8sevents - - receiver/k8slog - - receiver/k8sobjects - - receiver/kafka - - receiver/kafkametrics - - receiver/kubeletstats - - receiver/libhoney - - receiver/loki - - receiver/memcached - - receiver/mongodb - - receiver/mongodbatlas - - receiver/mysql - - receiver/namedpipe - - receiver/netflow - - receiver/nginx - - receiver/nsxt - - receiver/ntp - - receiver/oracledb - - receiver/osquery - - receiver/otelarrow - - receiver/otlpjsonfile - - receiver/podman - - receiver/postgresql - - receiver/pprof - - receiver/prometheus - - receiver/prometheusremotewrite - - receiver/pulsar - - receiver/purefa - - receiver/purefb - - receiver/rabbitmq - - receiver/receivercreator - - receiver/redis - - receiver/riak - - receiver/saphana - - receiver/signalfx - - receiver/simpleprometheus - - receiver/skywalking - - receiver/snmp - - receiver/snowflake - - receiver/solace - - receiver/splunkenterprise - - receiver/splunkhec - - receiver/sqlquery - - receiver/sqlserver - - receiver/sshcheck - - receiver/statsd - - receiver/stef - - receiver/syslog - - receiver/systemd - - receiver/tcpcheck - - receiver/tcplog - - receiver/tlscheck - - receiver/udplog - - receiver/vcenter - - receiver/wavefront - - receiver/webhookevent - - receiver/windowseventlog - - receiver/windowsperfcounters - - receiver/windowsservice - - receiver/zipkin - - receiver/zookeeper - - scraper/zookeeperscraper - - testbed - - testbed/mockdatasenders/mockdatadogagentexporter + - cmd/codecovgen + - cmd/golden + - cmd/opampsupervisor + - cmd/otelcontribcol + - cmd/oteltestbedcol + - cmd/telemetrygen + - confmap/provider/aesprovider + - confmap/provider/googlesecretmanagerprovider + - confmap/provider/s3provider + - confmap/provider/secretsmanagerprovider + - connector/count + - connector/datadog + - connector/exceptions + - connector/failover + - connector/grafanacloud + - connector/otlpjson + - connector/roundrobin + - connector/routing + - connector/servicegraph + - connector/signaltometrics + - connector/spanmetrics + - connector/sum + - exporter/alertmanager + - exporter/alibabacloudlogservice + - exporter/awscloudwatchlogs + - exporter/awsemf + - exporter/awskinesis + - exporter/awss3 + - exporter/awsxray + - exporter/azureblob + - exporter/azuredataexplorer + - exporter/azuremonitor + - exporter/bmchelix + - exporter/carbon + - exporter/cassandra + - exporter/clickhouse + - exporter/coralogix + - exporter/datadog + - exporter/dataset + - exporter/doris + - exporter/elasticsearch + - exporter/faro + - exporter/file + - exporter/googlecloud + - exporter/googlecloudpubsub + - exporter/googlemanagedprometheus + - exporter/honeycombmarker + - exporter/influxdb + - exporter/kafka + - exporter/loadbalancing + - exporter/logicmonitor + - exporter/logzio + - exporter/mezmo + - exporter/opensearch + - exporter/otelarrow + - exporter/prometheus + - exporter/prometheusremotewrite + - exporter/pulsar + - exporter/rabbitmq + - exporter/sapm + - exporter/sematext + - exporter/sentry + - exporter/signalfx + - exporter/splunkhec + - exporter/stef + - exporter/sumologic + - exporter/syslog + - exporter/tencentcloudlogservice + - exporter/tinybird + - exporter/zipkin + - extension/ack + - extension/asapauth + - extension/awsproxy + - extension/azureauth + - extension/basicauth + - extension/bearertokenauth + - extension/cgroupruntime + - extension/datadog + - extension/encoding + - extension/encoding/avrologencoding + - extension/encoding/awscloudwatchmetricstreamsencoding + - extension/encoding/awslogsencoding + - extension/encoding/googlecloudlogentryencoding + - extension/encoding/jaegerencoding + - extension/encoding/jsonlogencoding + - extension/encoding/otlpencoding + - extension/encoding/skywalkingencoding + - extension/encoding/textencoding + - extension/encoding/zipkinencoding + - extension/googleclientauth + - extension/headerssetter + - extension/healthcheck + - extension/healthcheckv2 + - extension/httpforwarder + - extension/jaegerremotesampling + - extension/k8sleaderelector + - extension/oauth2clientauth + - extension/observer + - extension/observer/cfgardenobserver + - extension/observer/dockerobserver + - extension/observer/ecsobserver + - extension/observer/ecstaskobserver + - extension/observer/hostobserver + - extension/observer/k8sobserver + - extension/observer/kafkatopicsobserver + - extension/oidcauth + - extension/opamp + - extension/opampcustommessages + - extension/pprof + - extension/remotetap + - extension/sigv4auth + - extension/solarwindsapmsettings + - extension/storage + - extension/storage/dbstorage + - extension/storage/filestorage + - extension/storage/redisstorage + - extension/sumologic + - internal/aws + - internal/collectd + - internal/common + - internal/core + - internal/datadog + - internal/docker + - internal/exp/metrics + - internal/filter + - internal/grpcutil + - internal/healthcheck + - internal/k8sconfig + - internal/kafka + - internal/kubelet + - internal/metadataproviders + - internal/otelarrow + - internal/pdatautil + - internal/rabbitmq + - internal/sharedcomponent + - internal/splunk + - internal/sqlquery + - internal/tools + - pkg/batchperresourceattr + - pkg/batchpersignal + - pkg/core/xidutils + - pkg/datadog + - pkg/experimentalmetricmetadata + - pkg/golden + - pkg/kafka/configkafka + - pkg/kafka/topic + - pkg/ottl + - pkg/pdatatest + - pkg/pdatautil + - pkg/resourcetotelemetry + - pkg/sampling + - pkg/stanza + - pkg/stanza/fileconsumer + - pkg/status + - pkg/translator/azure + - pkg/translator/azurelogs + - pkg/translator/faro + - pkg/translator/jaeger + - pkg/translator/loki + - pkg/translator/opencensus + - pkg/translator/prometheus + - pkg/translator/prometheusremotewrite + - pkg/translator/signalfx + - pkg/translator/skywalking + - pkg/translator/zipkin + - pkg/winperfcounters + - pkg/xk8stest + - processor/attributes + - processor/coralogix + - processor/cumulativetodelta + - processor/datadogsemantics + - processor/deltatocumulative + - processor/deltatorate + - processor/dnslookup + - processor/filter + - processor/geoip + - processor/groupbyattrs + - processor/groupbytrace + - processor/interval + - processor/isolationforest + - processor/k8sattributes + - processor/logdedup + - processor/logstransform + - processor/metricsgeneration + - processor/metricstarttime + - processor/metricstransform + - processor/probabilisticsampler + - processor/redaction + - processor/remotetap + - processor/resource + - processor/resourcedetection + - processor/resourcedetection/internal/akamai + - processor/resourcedetection/internal/digitalocean + - processor/resourcedetection/internal/dynatrace + - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova + - processor/resourcedetection/internal/oraclecloud + - processor/resourcedetection/internal/scaleway + - processor/resourcedetection/internal/vultr + - processor/schema + - processor/span + - processor/sumologic + - processor/tailsampling + - processor/transform + - processor/unroll + - receiver/activedirectoryds + - receiver/aerospike + - receiver/apache + - receiver/apachespark + - receiver/awscloudwatch + - receiver/awscontainerinsight + - receiver/awsecscontainermetrics + - receiver/awsfirehose + - receiver/awss3 + - receiver/awsxray + - receiver/azureblob + - receiver/azureeventhub + - receiver/azuremonitor + - receiver/bigip + - receiver/carbon + - receiver/chrony + - receiver/cloudflare + - receiver/cloudfoundry + - receiver/collectd + - receiver/couchdb + - receiver/datadog + - receiver/dockerstats + - receiver/elasticsearch + - receiver/envoyals + - receiver/expvar + - receiver/faro + - receiver/filelog + - receiver/filestats + - receiver/flinkmetrics + - receiver/fluentforward + - receiver/github + - receiver/gitlab + - receiver/googlecloudmonitoring + - receiver/googlecloudpubsub + - receiver/googlecloudspanner + - receiver/haproxy + - receiver/hostmetrics + - receiver/hostmetrics/internal/scraper/cpuscraper + - receiver/hostmetrics/internal/scraper/diskscraper + - receiver/hostmetrics/internal/scraper/filesystemscraper + - receiver/hostmetrics/internal/scraper/loadscraper + - receiver/hostmetrics/internal/scraper/memoryscraper + - receiver/hostmetrics/internal/scraper/networkscraper + - receiver/hostmetrics/internal/scraper/nfsscraper + - receiver/hostmetrics/internal/scraper/pagingscraper + - receiver/hostmetrics/internal/scraper/processesscraper + - receiver/hostmetrics/internal/scraper/processscraper + - receiver/hostmetrics/internal/scraper/systemscraper + - receiver/httpcheck + - receiver/huaweicloudces + - receiver/iis + - receiver/influxdb + - receiver/jaeger + - receiver/jmx + - receiver/journald + - receiver/k8scluster + - receiver/k8sevents + - receiver/k8slog + - receiver/k8sobjects + - receiver/kafka + - receiver/kafkametrics + - receiver/kubeletstats + - receiver/libhoney + - receiver/loki + - receiver/memcached + - receiver/mongodb + - receiver/mongodbatlas + - receiver/mysql + - receiver/namedpipe + - receiver/netflow + - receiver/nginx + - receiver/nsxt + - receiver/ntp + - receiver/oracledb + - receiver/osquery + - receiver/otelarrow + - receiver/otlpjsonfile + - receiver/podman + - receiver/postgresql + - receiver/pprof + - receiver/prometheus + - receiver/prometheusremotewrite + - receiver/pulsar + - receiver/purefa + - receiver/purefb + - receiver/rabbitmq + - receiver/receivercreator + - receiver/redis + - receiver/riak + - receiver/saphana + - receiver/signalfx + - receiver/simpleprometheus + - receiver/skywalking + - receiver/snmp + - receiver/snowflake + - receiver/solace + - receiver/splunkenterprise + - receiver/splunkhec + - receiver/sqlquery + - receiver/sqlserver + - receiver/sshcheck + - receiver/statsd + - receiver/stef + - receiver/syslog + - receiver/systemd + - receiver/tcpcheck + - receiver/tcplog + - receiver/tlscheck + - receiver/udplog + - receiver/vcenter + - receiver/wavefront + - receiver/webhookevent + - receiver/windowseventlog + - receiver/windowsperfcounters + - receiver/windowsservice + - receiver/zipkin + - receiver/zookeeper + - scraper/zookeeperscraper + - testbed + - testbed/mockdatasenders/mockdatadogagentexporter # End components list - type: textarea diff --git a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml index c6538d3292acb..594a22fb02d01 100644 --- a/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml +++ b/processor/resourcedetectionprocessor/internal/openstack/nova/metadata.yaml @@ -5,7 +5,7 @@ status: stability: alpha: [traces, metrics, logs, profiles] codeowners: - active: [Aneurysm9, dashpole, paulojmdias] + active: [dashpole, paulojmdias] resource_attributes: cloud.account.id: From 49c46bcd70b4ba5ee287e63881de426357672d6e Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 29 Sep 2025 14:14:32 +0100 Subject: [PATCH 10/12] chore: revert comments Signed-off-by: Paulo Dias --- .github/CODEOWNERS | 1 - .github/ISSUE_TEMPLATE/beta_stability.yaml | 7 +++---- .github/ISSUE_TEMPLATE/bug_report.yaml | 7 +++---- .github/ISSUE_TEMPLATE/feature_request.yaml | 7 +++---- .github/ISSUE_TEMPLATE/other.yaml | 7 +++---- .github/ISSUE_TEMPLATE/unmaintained.yaml | 13 ++++++------- .github/component_labels.txt | 1 - 7 files changed, 18 insertions(+), 25 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3d1fa5456db2d..8ee0b2783a4fc 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -208,7 +208,6 @@ processor/resourcedetectionprocessor/internal/akamai/ @open-telemetry processor/resourcedetectionprocessor/internal/digitalocean/ @open-telemetry/collector-contrib-approvers @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/dynatrace/ @open-telemetry/collector-contrib-approvers @bacherfl @evan-bradley processor/resourcedetectionprocessor/internal/hetzner/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias -processor/resourcedetectionprocessor/internal/openstack/nova/ @open-telemetry/collector-contrib-approvers @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/oraclecloud/ @open-telemetry/collector-contrib-approvers @dashpole processor/resourcedetectionprocessor/internal/scaleway/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/vultr/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias diff --git a/.github/ISSUE_TEMPLATE/beta_stability.yaml b/.github/ISSUE_TEMPLATE/beta_stability.yaml index 3e090997b9db8..9c64765d64fdb 100644 --- a/.github/ISSUE_TEMPLATE/beta_stability.yaml +++ b/.github/ISSUE_TEMPLATE/beta_stability.yaml @@ -12,9 +12,9 @@ body: label: Component description: Which component does your request concern? options: - # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` - # Do not manually edit it. - # Start components list + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list - cmd/codecovgen - cmd/golden - cmd/opampsupervisor @@ -210,7 +210,6 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index e89c24e003246..8d72a5f6f3707 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -15,9 +15,9 @@ body: description: Which component(s) does your bug report concern? multiple: true options: - # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` - # Do not manually edit it. - # Start components list + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list - cmd/codecovgen - cmd/golden - cmd/opampsupervisor @@ -213,7 +213,6 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 507d3a5de5042..f649c1e9e05d9 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -9,9 +9,9 @@ body: description: Which component(s) does your feature request concern? multiple: true options: - # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` - # Do not manually edit it. - # Start components list + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list - cmd/codecovgen - cmd/golden - cmd/opampsupervisor @@ -207,7 +207,6 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/other.yaml b/.github/ISSUE_TEMPLATE/other.yaml index 99f337c77ac8e..79331bb9b1c42 100644 --- a/.github/ISSUE_TEMPLATE/other.yaml +++ b/.github/ISSUE_TEMPLATE/other.yaml @@ -9,9 +9,9 @@ body: description: Which component(s) does your issue concern? multiple: true options: - # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` - # Do not manually edit it. - # Start components list + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list - cmd/codecovgen - cmd/golden - cmd/opampsupervisor @@ -207,7 +207,6 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/unmaintained.yaml b/.github/ISSUE_TEMPLATE/unmaintained.yaml index df1217717bf9b..c11fc86c4f9b9 100644 --- a/.github/ISSUE_TEMPLATE/unmaintained.yaml +++ b/.github/ISSUE_TEMPLATE/unmaintained.yaml @@ -14,9 +14,9 @@ body: description: Which component is no longer maintained? multiple: true options: - # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` - # Do not manually edit it. - # Start components list + # NOTE: The list below is autogenerated using `make generate-gh-issue-templates` + # Do not manually edit it. + # Start components list - cmd/codecovgen - cmd/golden - cmd/opampsupervisor @@ -212,7 +212,6 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner - - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr @@ -347,7 +346,7 @@ body: - type: textarea attributes: label: Details - description: Please provide details + description: Please provide details value: | Code owners for this component have explicitly stated they will no longer maintain the code or have been unresponsive to issues/pull requests. @@ -358,9 +357,9 @@ body: - [ ] On , 6 months from now, the component will be removed https://github.com/open-telemetry/opentelemetry-collector#unmaintained - + ## Pull requests / Issues - + - type: dropdown attributes: label: Tip diff --git a/.github/component_labels.txt b/.github/component_labels.txt index 26361bd633154..497b34b7501a2 100644 --- a/.github/component_labels.txt +++ b/.github/component_labels.txt @@ -189,7 +189,6 @@ processor/resourcedetectionprocessor/internal/akamai processor/resourcedetection processor/resourcedetectionprocessor/internal/digitalocean processor/resourcedetection/internal/digitalocean processor/resourcedetectionprocessor/internal/dynatrace processor/resourcedetection/internal/dynatrace processor/resourcedetectionprocessor/internal/hetzner processor/resourcedetection/internal/hetzner -processor/resourcedetectionprocessor/internal/openstack/nova processor/resourcedetection/internal/openstack/nova processor/resourcedetectionprocessor/internal/oraclecloud processor/resourcedetection/internal/oraclecloud processor/resourcedetectionprocessor/internal/scaleway processor/resourcedetection/internal/scaleway processor/resourcedetectionprocessor/internal/vultr processor/resourcedetection/internal/vultr From 7f4acd71f34ae72bc7c647993ca838acc19cea48 Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 29 Sep 2025 14:14:56 +0100 Subject: [PATCH 11/12] chore: make genlabels gencodeowners Signed-off-by: Paulo Dias --- .github/CODEOWNERS | 1 + .github/ISSUE_TEMPLATE/beta_stability.yaml | 1 + .github/ISSUE_TEMPLATE/bug_report.yaml | 1 + .github/ISSUE_TEMPLATE/feature_request.yaml | 1 + .github/ISSUE_TEMPLATE/other.yaml | 1 + .github/ISSUE_TEMPLATE/unmaintained.yaml | 1 + 6 files changed, 6 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8ee0b2783a4fc..3d1fa5456db2d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -208,6 +208,7 @@ processor/resourcedetectionprocessor/internal/akamai/ @open-telemetry processor/resourcedetectionprocessor/internal/digitalocean/ @open-telemetry/collector-contrib-approvers @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/dynatrace/ @open-telemetry/collector-contrib-approvers @bacherfl @evan-bradley processor/resourcedetectionprocessor/internal/hetzner/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias +processor/resourcedetectionprocessor/internal/openstack/nova/ @open-telemetry/collector-contrib-approvers @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/oraclecloud/ @open-telemetry/collector-contrib-approvers @dashpole processor/resourcedetectionprocessor/internal/scaleway/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias processor/resourcedetectionprocessor/internal/vultr/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole @paulojmdias diff --git a/.github/ISSUE_TEMPLATE/beta_stability.yaml b/.github/ISSUE_TEMPLATE/beta_stability.yaml index 9c64765d64fdb..37e99ac8eb731 100644 --- a/.github/ISSUE_TEMPLATE/beta_stability.yaml +++ b/.github/ISSUE_TEMPLATE/beta_stability.yaml @@ -210,6 +210,7 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 8d72a5f6f3707..6a97335cf8021 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -213,6 +213,7 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index f649c1e9e05d9..8573c6f7c4fa8 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -207,6 +207,7 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/other.yaml b/.github/ISSUE_TEMPLATE/other.yaml index 79331bb9b1c42..58553ae3bf179 100644 --- a/.github/ISSUE_TEMPLATE/other.yaml +++ b/.github/ISSUE_TEMPLATE/other.yaml @@ -207,6 +207,7 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr diff --git a/.github/ISSUE_TEMPLATE/unmaintained.yaml b/.github/ISSUE_TEMPLATE/unmaintained.yaml index c11fc86c4f9b9..4310b8dc0a32b 100644 --- a/.github/ISSUE_TEMPLATE/unmaintained.yaml +++ b/.github/ISSUE_TEMPLATE/unmaintained.yaml @@ -212,6 +212,7 @@ body: - processor/resourcedetection/internal/digitalocean - processor/resourcedetection/internal/dynatrace - processor/resourcedetection/internal/hetzner + - processor/resourcedetection/internal/openstack/nova - processor/resourcedetection/internal/oraclecloud - processor/resourcedetection/internal/scaleway - processor/resourcedetection/internal/vultr From fa6bd79c46012efe6a53003b053fdd2ee9c7cc7b Mon Sep 17 00:00:00 2001 From: Paulo Dias Date: Mon, 29 Sep 2025 14:18:43 +0100 Subject: [PATCH 12/12] chore: make genlabels Signed-off-by: Paulo Dias --- .github/component_labels.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/component_labels.txt b/.github/component_labels.txt index 497b34b7501a2..26361bd633154 100644 --- a/.github/component_labels.txt +++ b/.github/component_labels.txt @@ -189,6 +189,7 @@ processor/resourcedetectionprocessor/internal/akamai processor/resourcedetection processor/resourcedetectionprocessor/internal/digitalocean processor/resourcedetection/internal/digitalocean processor/resourcedetectionprocessor/internal/dynatrace processor/resourcedetection/internal/dynatrace processor/resourcedetectionprocessor/internal/hetzner processor/resourcedetection/internal/hetzner +processor/resourcedetectionprocessor/internal/openstack/nova processor/resourcedetection/internal/openstack/nova processor/resourcedetectionprocessor/internal/oraclecloud processor/resourcedetection/internal/oraclecloud processor/resourcedetectionprocessor/internal/scaleway processor/resourcedetection/internal/scaleway processor/resourcedetectionprocessor/internal/vultr processor/resourcedetection/internal/vultr