Skip to content

Commit 796f491

Browse files
Copilottobio
andauthored
Fix metadata type conversion in SLM policy read operation (#1413)
* Initial plan * Fix metadata []byte to string conversion and add test Co-authored-by: tobio <444668+tobio@users.noreply.github.com> * Add CHANGELOG entry for metadata fix Co-authored-by: tobio <444668+tobio@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: tobio <444668+tobio@users.noreply.github.com>
1 parent ecbe7eb commit 796f491

File tree

3 files changed

+72
-1
lines changed

3 files changed

+72
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## [Unreleased]
22

3+
- Fix `elasticstack_elasticsearch_snapshot_lifecycle` metadata type conversion causing terraform apply to fail ([#1409](https://github.com/elastic/terraform-provider-elasticstack/issues/1409))
34
- Add new `elasticstack_elasticsearch_ml_anomaly_detection_job` resource ([#1329](https://github.com/elastic/terraform-provider-elasticstack/pull/1329))
45
- Add new `elasticstack_elasticsearch_ml_datafeed` resource ([1340](https://github.com/elastic/terraform-provider-elasticstack/pull/1340))
56

internal/elasticsearch/cluster/slm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ func resourceSlmRead(ctx context.Context, d *schema.ResourceData, meta interface
313313
if err != nil {
314314
return diag.FromErr(err)
315315
}
316-
if err := d.Set("metadata", meta); err != nil {
316+
if err := d.Set("metadata", string(meta)); err != nil {
317317
return diag.FromErr(err)
318318
}
319319
}

internal/elasticsearch/cluster/slm_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,37 @@ func TestAccResourceSLM(t *testing.T) {
5858
})
5959
}
6060

61+
func TestAccResourceSLMWithMetadata(t *testing.T) {
62+
// generate a random policy name
63+
name := sdkacctest.RandStringFromCharSet(10, sdkacctest.CharSetAlphaNum)
64+
65+
resource.Test(t, resource.TestCase{
66+
PreCheck: func() { acctest.PreCheck(t) },
67+
CheckDestroy: checkSlmDestroy(name),
68+
ProtoV6ProviderFactories: acctest.Providers,
69+
Steps: []resource.TestStep{
70+
{
71+
Config: testAccSlmCreateWithMetadata(name),
72+
Check: resource.ComposeTestCheckFunc(
73+
resource.TestCheckResourceAttr("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "name", name),
74+
resource.TestCheckResourceAttr("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "schedule", "0 30 1 * * ?"),
75+
resource.TestCheckResourceAttr("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "repository", fmt.Sprintf("%s-repo", name)),
76+
resource.TestCheckResourceAttr("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "expire_after", "30d"),
77+
resource.TestCheckResourceAttr("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "min_count", "5"),
78+
resource.TestCheckResourceAttr("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "max_count", "50"),
79+
resource.TestCheckResourceAttrSet("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "metadata"),
80+
),
81+
},
82+
{
83+
RefreshState: true,
84+
Check: resource.ComposeTestCheckFunc(
85+
resource.TestCheckResourceAttrSet("elasticstack_elasticsearch_snapshot_lifecycle.test_slm_metadata", "metadata"),
86+
),
87+
},
88+
},
89+
})
90+
}
91+
6192
func testAccSlmCreate(name string) string {
6293
return fmt.Sprintf(`
6394
provider "elasticstack" {
@@ -92,6 +123,45 @@ resource "elasticstack_elasticsearch_snapshot_lifecycle" "test_slm" {
92123
`, name, name)
93124
}
94125

126+
func testAccSlmCreateWithMetadata(name string) string {
127+
return fmt.Sprintf(`
128+
provider "elasticstack" {
129+
elasticsearch {}
130+
}
131+
132+
resource "elasticstack_elasticsearch_snapshot_repository" "repo" {
133+
name = "%s-repo"
134+
135+
fs {
136+
location = "/tmp/snapshots"
137+
compress = true
138+
max_restore_bytes_per_sec = "20mb"
139+
}
140+
}
141+
142+
resource "elasticstack_elasticsearch_snapshot_lifecycle" "test_slm_metadata" {
143+
name = "%s"
144+
145+
schedule = "0 30 1 * * ?"
146+
snapshot_name = "<daily-snap-{now/d}>"
147+
repository = elasticstack_elasticsearch_snapshot_repository.repo.name
148+
149+
indices = ["data-*", "abc"]
150+
ignore_unavailable = false
151+
include_global_state = false
152+
153+
expire_after = "30d"
154+
min_count = 5
155+
max_count = 50
156+
157+
metadata = jsonencode({
158+
created_by = "terraform"
159+
purpose = "daily backup"
160+
})
161+
}
162+
`, name, name)
163+
}
164+
95165
func checkSlmDestroy(name string) func(s *terraform.State) error {
96166
return func(s *terraform.State) error {
97167
client, err := clients.NewAcceptanceTestingClient()

0 commit comments

Comments
 (0)