Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/data-sources/telemetrylink.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
1 change: 1 addition & 0 deletions docs/resources/telemetrylink.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions stackit/internal/services/telemetrylink/link/datasource.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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,
},
},
}
}
Expand Down Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
16 changes: 16 additions & 0 deletions stackit/internal/services/telemetrylink/link/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down Expand Up @@ -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),
},
},
}
}
Expand Down Expand Up @@ -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
}

Expand All @@ -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
}

Expand All @@ -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
}

Expand All @@ -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
}

Expand All @@ -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
}

Expand All @@ -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
}

Expand All @@ -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
}
23 changes: 23 additions & 0 deletions stackit/internal/services/telemetrylink/link/resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -119,6 +121,7 @@ func TestToCreateOrUpdateOrganizationTelemetryLinkPayload(t *testing.T) {
DisplayName: "name",
AccessToken: "",
TelemetryRouterId: "tlmrid",
Enabled: true,
},
},
{
Expand All @@ -135,6 +138,7 @@ func TestToCreateOrUpdateOrganizationTelemetryLinkPayload(t *testing.T) {
DisplayName: "display-name",
AccessToken: "access-token",
TelemetryRouterId: "tlmr_id",
Enabled: true,
},
},
{
Expand All @@ -149,6 +153,7 @@ func TestToCreateOrUpdateOrganizationTelemetryLinkPayload(t *testing.T) {
DisplayName: "name",
AccessToken: "wo-access-token",
TelemetryRouterId: "tlmrid",
Enabled: true,
},
},
{
Expand Down Expand Up @@ -189,6 +194,7 @@ func TestToCreateOrUpdateFolderTelemetryLinkPayload(t *testing.T) {
DisplayName: "name",
AccessToken: "",
TelemetryRouterId: "tlmrid",
Enabled: true,
},
},
{
Expand All @@ -205,6 +211,7 @@ func TestToCreateOrUpdateFolderTelemetryLinkPayload(t *testing.T) {
DisplayName: "display-name",
AccessToken: "access-token",
TelemetryRouterId: "tlmr_id",
Enabled: true,
},
},
{
Expand All @@ -219,6 +226,7 @@ func TestToCreateOrUpdateFolderTelemetryLinkPayload(t *testing.T) {
DisplayName: "name",
AccessToken: "wo-access-token",
TelemetryRouterId: "tlmrid",
Enabled: true,
},
},
{
Expand Down Expand Up @@ -259,6 +267,7 @@ func TestToCreateOrUpdateProjectTelemetryLinkPayload(t *testing.T) {
DisplayName: "name",
AccessToken: "",
TelemetryRouterId: "tlmrid",
Enabled: true,
},
},
{
Expand All @@ -275,6 +284,7 @@ func TestToCreateOrUpdateProjectTelemetryLinkPayload(t *testing.T) {
DisplayName: "display-name",
AccessToken: "access-token",
TelemetryRouterId: "tlmr_id",
Enabled: true,
},
},
{
Expand All @@ -289,6 +299,7 @@ func TestToCreateOrUpdateProjectTelemetryLinkPayload(t *testing.T) {
DisplayName: "name",
AccessToken: "wo-access-token",
TelemetryRouterId: "tlmrid",
Enabled: true,
},
},
{
Expand Down Expand Up @@ -334,6 +345,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: new("access-token"),
Enabled: new(true),
},
},
{
Expand All @@ -352,6 +364,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: nil,
Enabled: new(true),
},
},
{
Expand All @@ -370,6 +383,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: new("new-wo-access-token"),
Enabled: new(true),
},
},
{
Expand All @@ -389,6 +403,7 @@ func TestToPartialUpdateOrganizationTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: nil,
Enabled: new(true),
},
},
{
Expand Down Expand Up @@ -434,6 +449,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: new("access-token"),
Enabled: new(true),
},
},
{
Expand All @@ -452,6 +468,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: nil,
Enabled: new(true),
},
},
{
Expand All @@ -470,6 +487,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: new("new-wo-access-token"),
Enabled: new(true),
},
},
{
Expand All @@ -484,6 +502,7 @@ func TestToPartialUpdateFolderTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: nil,
Enabled: new(true),
},
},
{
Expand Down Expand Up @@ -529,6 +548,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: new("access-token"),
Enabled: new(true),
},
},
{
Expand All @@ -547,6 +567,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: nil,
Enabled: new(true),
},
},
{
Expand All @@ -565,6 +586,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: new("new-wo-access-token"),
Enabled: new(true),
},
},
{
Expand All @@ -579,6 +601,7 @@ func TestToPartialUpdateProjectTelemetryLinkPayload(t *testing.T) {
Description: new(""),
TelemetryRouterId: new("tlmrid"),
AccessToken: nil,
Enabled: new(true),
},
},
{
Expand Down