From 34c50fe2b669f97fcea32a679ad2370aa4c84904 Mon Sep 17 00:00:00 2001 From: Sueeda Oezkaya Date: Tue, 18 Aug 2026 09:15:10 +0200 Subject: [PATCH 1/2] feat(telemetrylink): add enable field to telemetry link resource and datasource --- .../services/telemetrylink/link/datasource.go | 6 +++++ .../telemetrylink/link/datasource_test.go | 1 + .../services/telemetrylink/link/resource.go | 16 +++++++++++++ .../telemetrylink/link/resource_test.go | 23 +++++++++++++++++++ 4 files changed, 46 insertions(+) diff --git a/stackit/internal/services/telemetrylink/link/datasource.go b/stackit/internal/services/telemetrylink/link/datasource.go index 596826734..6423a7cd0 100644 --- a/stackit/internal/services/telemetrylink/link/datasource.go +++ b/stackit/internal/services/telemetrylink/link/datasource.go @@ -39,6 +39,7 @@ type DataSourceModel struct { TelemetryRouterID types.String `tfsdk:"telemetry_router_id"` CreateTime types.String `tfsdk:"create_time"` Status types.String `tfsdk:"status"` + Enabled types.Bool `tfsdk:"enabled"` } type telemetryLinkDataSource struct { @@ -115,6 +116,10 @@ func (d *telemetryLinkDataSource) Schema(_ context.Context, _ datasource.SchemaR DeprecationMessage: "status is deprecated and will be removed after February 2027.", Computed: true, }, + "enabled": schema.BoolAttribute{ + Description: schemaDescriptions["enabled"], + Computed: true, + }, }, } } @@ -197,6 +202,7 @@ func mapDataSourceFields(_ context.Context, link *telemetrylink.TelemetryLinkRes model.TelemetryRouterID = types.StringValue(link.TelemetryRouterId) model.CreateTime = types.StringValue(link.CreateTime.Format(time.RFC3339)) model.Status = types.StringValue(string(link.Status)) + model.Enabled = types.BoolValue(link.Enabled) return nil } diff --git a/stackit/internal/services/telemetrylink/link/datasource_test.go b/stackit/internal/services/telemetrylink/link/datasource_test.go index 8dc2839cc..b1338a35e 100644 --- a/stackit/internal/services/telemetrylink/link/datasource_test.go +++ b/stackit/internal/services/telemetrylink/link/datasource_test.go @@ -21,6 +21,7 @@ func fixtureDataSourceModel(mods ...func(model *DataSourceModel)) *DataSourceMod TelemetryRouterID: types.StringValue("tlmrid"), CreateTime: types.StringValue(testTime.Format(time.RFC3339)), Status: types.StringValue("active"), + Enabled: types.BoolValue(true), } for _, mod := range mods { mod(model) diff --git a/stackit/internal/services/telemetrylink/link/resource.go b/stackit/internal/services/telemetrylink/link/resource.go index 9052fa1d9..beefe9dfb 100644 --- a/stackit/internal/services/telemetrylink/link/resource.go +++ b/stackit/internal/services/telemetrylink/link/resource.go @@ -14,6 +14,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/schema/validator" @@ -68,6 +69,7 @@ var schemaDescriptions = map[string]string{ "The status of the TelemetryLink, possible values: %s", tfutils.FormatPossibleValues(sdkUtils.EnumSliceToStringSlice(telemetrylink.AllowedTelemetryLinkResponseStatusEnumValues)...), ), + "enabled": "Whether the Telemetry Link is enabled or not.", } type Model struct { @@ -83,6 +85,7 @@ type Model struct { AccessTokenWoVersion types.Int64 `tfsdk:"access_token_wo_version"` CreateTime types.String `tfsdk:"create_time"` Status types.String `tfsdk:"status"` + Enabled types.Bool `tfsdk:"enabled"` } type telemetryLinkResource struct { @@ -250,6 +253,12 @@ func (r *telemetryLinkResource) Schema(_ context.Context, _ resource.SchemaReque DeprecationMessage: "status is deprecated and will be removed after February 2027.", Computed: true, }, + "enabled": schema.BoolAttribute{ + Description: schemaDescriptions["enabled"], + Optional: true, + Computed: true, + Default: booldefault.StaticBool(true), + }, }, } } @@ -741,6 +750,7 @@ func toCreateOrUpdateOrganizationTelemetryLinkPayload(planModel, configModel *Mo Description: planModel.Description.ValueStringPointer(), TelemetryRouterId: planModel.TelemetryRouterID.ValueString(), AccessToken: getAccessTokenForCreate(planModel, configModel), + Enabled: planModel.Enabled.ValueBool(), }, nil } @@ -757,6 +767,7 @@ func toCreateOrUpdateFolderTelemetryLinkPayload(planModel, configModel *Model) ( Description: planModel.Description.ValueStringPointer(), TelemetryRouterId: planModel.TelemetryRouterID.ValueString(), AccessToken: getAccessTokenForCreate(planModel, configModel), + Enabled: planModel.Enabled.ValueBool(), }, nil } @@ -773,6 +784,7 @@ func toCreateOrUpdateProjectTelemetryLinkPayload(planModel, configModel *Model) Description: planModel.Description.ValueStringPointer(), TelemetryRouterId: planModel.TelemetryRouterID.ValueString(), AccessToken: getAccessTokenForCreate(planModel, configModel), + Enabled: planModel.Enabled.ValueBool(), }, nil } @@ -794,6 +806,7 @@ func toPartialUpdateOrganizationTelemetryLinkPayload(planModel, stateModel, conf Description: new(planModel.Description.ValueString()), TelemetryRouterId: planModel.TelemetryRouterID.ValueStringPointer(), AccessToken: getAccessTokenForUpdate(planModel, stateModel, configModel), + Enabled: planModel.Enabled.ValueBoolPointer(), }, nil } @@ -813,6 +826,7 @@ func toPartialUpdateFolderTelemetryLinkPayload(planModel, stateModel, configMode Description: new(planModel.Description.ValueString()), TelemetryRouterId: planModel.TelemetryRouterID.ValueStringPointer(), AccessToken: getAccessTokenForUpdate(planModel, stateModel, configModel), + Enabled: planModel.Enabled.ValueBoolPointer(), }, nil } @@ -832,6 +846,7 @@ func toPartialUpdateProjectTelemetryLinkPayload(planModel, stateModel, configMod Description: new(planModel.Description.ValueString()), TelemetryRouterId: planModel.TelemetryRouterID.ValueStringPointer(), AccessToken: getAccessTokenForUpdate(planModel, stateModel, configModel), + Enabled: planModel.Enabled.ValueBoolPointer(), }, nil } @@ -850,6 +865,7 @@ func mapFields(_ context.Context, link *telemetrylink.TelemetryLinkResponse, mod model.TelemetryRouterID = types.StringValue(link.TelemetryRouterId) model.CreateTime = types.StringValue(link.CreateTime.Format(time.RFC3339)) model.Status = types.StringValue(string(link.Status)) + model.Enabled = types.BoolValue(link.Enabled) return nil } diff --git a/stackit/internal/services/telemetrylink/link/resource_test.go b/stackit/internal/services/telemetrylink/link/resource_test.go index fd94cc79b..615e5818a 100644 --- a/stackit/internal/services/telemetrylink/link/resource_test.go +++ b/stackit/internal/services/telemetrylink/link/resource_test.go @@ -19,6 +19,7 @@ func fixtureLink(mods ...func(link *telemetrylink.TelemetryLinkResponse)) *telem TelemetryRouterId: "tlmrid", CreateTime: testTime, Status: "active", + Enabled: true, } for _, mod := range mods { mod(link) @@ -40,6 +41,7 @@ func fixtureModel(mods ...func(model *Model)) *Model { AccessTokenWoVersion: types.Int64{}, CreateTime: types.StringValue(testTime.Format(time.RFC3339)), Status: types.StringValue("active"), + Enabled: types.BoolValue(true), } for _, mod := range mods { mod(model) @@ -119,6 +121,7 @@ func TestToCreateOrUpdateOrganizationTelemetryLinkPayload(t *testing.T) { DisplayName: "name", AccessToken: "", TelemetryRouterId: "tlmrid", + Enabled: true, }, }, { @@ -135,6 +138,7 @@ func TestToCreateOrUpdateOrganizationTelemetryLinkPayload(t *testing.T) { DisplayName: "display-name", AccessToken: "access-token", TelemetryRouterId: "tlmr_id", + Enabled: true, }, }, { @@ -149,6 +153,7 @@ func TestToCreateOrUpdateOrganizationTelemetryLinkPayload(t *testing.T) { DisplayName: "name", AccessToken: "wo-access-token", TelemetryRouterId: "tlmrid", + Enabled: true, }, }, { @@ -189,6 +194,7 @@ func TestToCreateOrUpdateFolderTelemetryLinkPayload(t *testing.T) { DisplayName: "name", AccessToken: "", TelemetryRouterId: "tlmrid", + Enabled: true, }, }, { @@ -205,6 +211,7 @@ func TestToCreateOrUpdateFolderTelemetryLinkPayload(t *testing.T) { DisplayName: "display-name", AccessToken: "access-token", TelemetryRouterId: "tlmr_id", + Enabled: true, }, }, { @@ -219,6 +226,7 @@ func TestToCreateOrUpdateFolderTelemetryLinkPayload(t *testing.T) { DisplayName: "name", AccessToken: "wo-access-token", TelemetryRouterId: "tlmrid", + Enabled: true, }, }, { @@ -259,6 +267,7 @@ func TestToCreateOrUpdateProjectTelemetryLinkPayload(t *testing.T) { DisplayName: "name", AccessToken: "", TelemetryRouterId: "tlmrid", + Enabled: true, }, }, { @@ -275,6 +284,7 @@ func TestToCreateOrUpdateProjectTelemetryLinkPayload(t *testing.T) { DisplayName: "display-name", AccessToken: "access-token", TelemetryRouterId: "tlmr_id", + Enabled: true, }, }, { @@ -289,6 +299,7 @@ func TestToCreateOrUpdateProjectTelemetryLinkPayload(t *testing.T) { DisplayName: "name", AccessToken: "wo-access-token", TelemetryRouterId: "tlmrid", + Enabled: true, }, }, { @@ -334,6 +345,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: new("access-token"), + Enabled: new(true), }, }, { @@ -352,6 +364,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: nil, + Enabled: new(true), }, }, { @@ -370,6 +383,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: new("new-wo-access-token"), + Enabled: new(true), }, }, { @@ -389,6 +403,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: nil, + Enabled: new(true), }, }, { @@ -434,6 +449,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: new("access-token"), + Enabled: new(true), }, }, { @@ -452,6 +468,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: nil, + Enabled: new(true), }, }, { @@ -470,6 +487,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: new("new-wo-access-token"), + Enabled: new(true), }, }, { @@ -484,6 +502,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: nil, + Enabled: new(true), }, }, { @@ -529,6 +548,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: new("access-token"), + Enabled: new(true), }, }, { @@ -547,6 +567,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: nil, + Enabled: new(true), }, }, { @@ -565,6 +586,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: new("new-wo-access-token"), + Enabled: new(true), }, }, { @@ -579,6 +601,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) { Description: new(""), TelemetryRouterId: new("tlmrid"), AccessToken: nil, + Enabled: new(true), }, }, { From 713f8e532d2b8f42e8872567d2c34465d31ea996 Mon Sep 17 00:00:00 2001 From: Sueeda Oezkaya Date: Tue, 18 Aug 2026 10:00:40 +0200 Subject: [PATCH 2/2] make generate docs run --- docs/data-sources/telemetrylink.md | 1 + docs/resources/telemetrylink.md | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/data-sources/telemetrylink.md b/docs/data-sources/telemetrylink.md index d0097148c..e2ec8295b 100644 --- a/docs/data-sources/telemetrylink.md +++ b/docs/data-sources/telemetrylink.md @@ -37,6 +37,7 @@ data "stackit_telemetrylink" "link" { - `create_time` (String) The time the Telemetry Link was created. - `description` (String) The description of the Telemetry Link resource. - `display_name` (String) The displayed name of the Telemetry Link resource. +- `enabled` (Boolean) Whether the Telemetry Link is enabled or not. - `id` (String) Terraform's internal resource identifier. It is structured as "`resource_type`, `resource_id`,`region`". - `status` (String, Deprecated) The status of the TelemetryLink, possible values: Possible values are: `active`, `inactive`, `failed`, `reconciling`, `deleting`. - `telemetry_router_id` (String) The Telemetry Router ID. diff --git a/docs/resources/telemetrylink.md b/docs/resources/telemetrylink.md index fbab0898f..9c9696d5b 100644 --- a/docs/resources/telemetrylink.md +++ b/docs/resources/telemetrylink.md @@ -54,6 +54,7 @@ resource "stackit_telemetrylink" "link2" { - `access_token_wo` (String, Sensitive, [Write-only](https://developer.hashicorp.com/terraform/language/resources/ephemeral#write-only-arguments)) The access token of the Telemetry Router instance. Write-only - never stored in state and never returned by the API. To rotate the token, update this value AND increment `access_token_wo_version`. Changing this field alone will NOT trigger an update. - `access_token_wo_version` (Number) User-managed rotation counter for `access_token_wo`. Must be incremented every time `access_token_wo` is changed. Terraform diffs this field to detect token rotations - changing `access_token_wo` alone will NOT trigger an update because it is write-only and never stored in state. - `description` (String) The description of the Telemetry Link resource. +- `enabled` (Boolean) Whether the Telemetry Link is enabled or not. - `region` (String) STACKIT region name the resource is located in. If not defined, the provider region is used. ### Read-Only