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
35 changes: 35 additions & 0 deletions docs/data-sources/observability_cert_check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "stackit_observability_cert_check Data Source - stackit"
subcategory: ""
description: |-
Datasource for managing cert-checks in STACKIT Observability.
---

# stackit_observability_cert_check (Data Source)

Datasource for managing cert-checks in STACKIT Observability.

## Example Usage

```terraform
data "stackit_observability_cert_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
cert_check_id = "xxxxxxxxxxxxxxxxxxxxxxxx"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `cert_check_id` (String) Unique ID of the cert-check.
- `instance_id` (String) STACKIT Observability instance ID.
- `project_id` (String) STACKIT project ID.

### Read-Only

- `id` (String) Terraform resource ID in format `project_id,instance_id,cert_check_id`.
- `source` (String) The cert source to check, e.g. tcp://stackit.de:443 Must start with `tcp://`.
35 changes: 35 additions & 0 deletions docs/data-sources/observability_http_check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "stackit_observability_http_check Data Source - stackit"
subcategory: ""
description: |-
Datasource for managing HTTP-checks in STACKIT Observability.
---

# stackit_observability_http_check (Data Source)

Datasource for managing HTTP-checks in STACKIT Observability.

## Example Usage

```terraform
data "stackit_observability_http_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
http_check_id = "xxxxxxxxxxxxxxxxxxxxxxxx"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `http_check_id` (String) Unique ID of the HTTP-check.
- `instance_id` (String) STACKIT Observability instance ID.
- `project_id` (String) STACKIT project ID.

### Read-Only

- `id` (String) Terraform resource ID in format `project_id,instance_id,http_check_id`.
- `url` (String) The URL to check, e.g. https://www.stackit.de. Must start with `http://` or `https://`.
41 changes: 41 additions & 0 deletions docs/resources/observability_cert_check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "stackit_observability_cert_check Resource - stackit"
subcategory: ""
description: |-
Resource for managing cert-checks in STACKIT Observability.
---

# stackit_observability_cert_check (Resource)

Resource for managing cert-checks in STACKIT Observability.

## Example Usage

```terraform
resource "stackit_observability_http_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
url = "tcp://stackit.de:443"
}

# Only use the import statement, if you want to import an existing cert-check
import {
to = stackit_observability_http_check.example
id = "${var.project_id},${var.observability_instance_id},${var.cert_check_id}"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `instance_id` (String) STACKIT Observability instance ID.
- `project_id` (String) STACKIT project ID.
- `source` (String) The cert source to check, e.g. tcp://stackit.de:443 Must start with `tcp://`.

### Read-Only

- `cert_check_id` (String) Unique ID of the cert-check.
- `id` (String) Terraform resource ID in format `project_id,instance_id,cert_check_id`.
41 changes: 41 additions & 0 deletions docs/resources/observability_http_check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "stackit_observability_http_check Resource - stackit"
subcategory: ""
description: |-
Resource for managing HTTP-checks in STACKIT Observability.
---

# stackit_observability_http_check (Resource)

Resource for managing HTTP-checks in STACKIT Observability.

## Example Usage

```terraform
resource "stackit_observability_http_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
url = "https://www.stackit.de"
}

# Only use the import statement, if you want to import an existing http-check
import {
to = stackit_observability_http_check.example
id = "${var.project_id},${var.observability_instance_id},${var.http_check_id}"
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `instance_id` (String) STACKIT Observability instance ID.
- `project_id` (String) STACKIT project ID.
- `url` (String) The URL to check, e.g. https://www.stackit.de. Must start with `http://` or `https://`.

### Read-Only

- `http_check_id` (String) Unique ID of the HTTP-check.
- `id` (String) Terraform resource ID in format `project_id,instance_id,http_check_id`.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
data "stackit_observability_cert_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
cert_check_id = "xxxxxxxxxxxxxxxxxxxxxxxx"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
data "stackit_observability_http_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
http_check_id = "xxxxxxxxxxxxxxxxxxxxxxxx"
}
11 changes: 11 additions & 0 deletions examples/resources/stackit_observability_cert_check/resource.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
resource "stackit_observability_http_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
url = "tcp://stackit.de:443"
}

# Only use the import statement, if you want to import an existing cert-check
import {
to = stackit_observability_http_check.example
id = "${var.project_id},${var.observability_instance_id},${var.cert_check_id}"
}
11 changes: 11 additions & 0 deletions examples/resources/stackit_observability_http_check/resource.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
resource "stackit_observability_http_check" "example" {
project_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
instance_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
url = "https://www.stackit.de"
}

# Only use the import statement, if you want to import an existing http-check
import {
to = stackit_observability_http_check.example
id = "${var.project_id},${var.observability_instance_id},${var.http_check_id}"
}
139 changes: 139 additions & 0 deletions stackit/internal/services/observability/cert-check/datasource.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package certcheck

import (
"context"
"fmt"

"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/stackitcloud/stackit-sdk-go/services/observability"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/features"
observabilityUtils "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/observability/utils"
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/validate"
)

// Ensure the implementation satisfies the expected interfaces.
var (
_ datasource.DataSource = &certCheckDataSource{}
)

// NewCertCheckDataSource creates a new instance of the certCheckDataSource.
func NewCertCheckDataSource() datasource.DataSource {
return &certCheckDataSource{}
}

// certCheckDataSource is the datasource implementation.
type certCheckDataSource struct {
client *observability.APIClient
}

// Configure adds the provider configured client to the resource.
func (d *certCheckDataSource) Configure(ctx context.Context, req datasource.ConfigureRequest, resp *datasource.ConfigureResponse) {
providerData, ok := conversion.ParseProviderData(ctx, req.ProviderData, &resp.Diagnostics)
if !ok {
return
}

features.CheckBetaResourcesEnabled(ctx, &providerData, &resp.Diagnostics, "stackit_observability_cert_check", "datasource")
if resp.Diagnostics.HasError() {
return
}

apiClient := observabilityUtils.ConfigureClient(ctx, &providerData, &resp.Diagnostics)
if resp.Diagnostics.HasError() {
return
}
d.client = apiClient
tflog.Info(ctx, "Observability client configured")
}

// Metadata provides metadata for the alert group datasource.
func (d *certCheckDataSource) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
resp.TypeName = req.ProviderTypeName + "_observability_cert_check"
}

// Schema defines the schema for the alert group data source.
func (d *certCheckDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
resp.Schema = schema.Schema{
Description: "Datasource for managing cert-checks in STACKIT Observability.",
Attributes: map[string]schema.Attribute{
"id": schema.StringAttribute{
Description: descriptions["id"],
Computed: true,
},
"project_id": schema.StringAttribute{
Description: descriptions["project_id"],
Required: true,
Validators: []validator.String{
validate.UUID(),
validate.NoSeparator(),
},
},
"instance_id": schema.StringAttribute{
Description: descriptions["instance_id"],
Required: true,
Validators: []validator.String{
validate.UUID(),
validate.NoSeparator(),
},
},
"cert_check_id": schema.StringAttribute{
Description: descriptions["cert_check_id"],
Required: true,
},
"source": schema.StringAttribute{
Description: descriptions["source"],
Computed: true,
},
},
}
}

func (d *certCheckDataSource) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { // nolint:gocritic // function signature required by Terraform
var model Model
diags := req.Config.Get(ctx, &model)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}

projectId := model.ProjectId.ValueString()
instanceId := model.InstanceId.ValueString()
certCheckId := model.CertCheckId.ValueString()
ctx = tflog.SetField(ctx, "project_id", projectId)
ctx = tflog.SetField(ctx, "instance_id", instanceId)
ctx = tflog.SetField(ctx, "cert_check_id", certCheckId)

listCertChecks, err := d.client.ListCertChecks(ctx, instanceId, projectId).Execute()
if err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error listing cert-checks", fmt.Sprintf("Listing API payload: %v", err))
return
}

if listCertChecks.CertChecks == nil || len(*listCertChecks.CertChecks) == 0 {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error listing cert-checks", "Response is empty")
return
}

for _, certCheck := range *listCertChecks.CertChecks {
if certCheck.Id != nil && *certCheck.Id == certCheckId {
if err := mapFields(ctx, &certCheck, &model); err != nil {
core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading cert-check", "Unable to map cert-check model")
return
}
break
}
}

// Set the state with fully populated data.
diags = resp.State.Set(ctx, model)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
tflog.Info(ctx, "cert-check read")
}
Loading
Loading