Skip to content
Merged
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
65 changes: 59 additions & 6 deletions provider/resource_elkaliases_index.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ func resourceelkAliasesIndex() *schema.Resource {
Read: resourceelkAliasesIndexRead,
Update: resourceelkAliasesIndexUpdate,
Delete: resourceelkAliasesIndexDelete,
Importer: &schema.ResourceImporter{
State: resourceelkAliasesIndexImport,
},

Schema: map[string]*schema.Schema{
"name": {
Expand All @@ -41,7 +44,8 @@ func resourceelkAliasesIndex() *schema.Resource {
Required: true,
},
"alias": {
Type: schema.TypeList,
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"name": {
Expand All @@ -54,7 +58,6 @@ func resourceelkAliasesIndex() *schema.Resource {
},
},
},
Optional: true,
},
},
},
Expand Down Expand Up @@ -200,11 +203,11 @@ func resourceelkAliasesIndexRead(d *schema.ResourceData, m interface{}) error {
}

// Handle aliases
if aliases, ok := templateContent["aliases"].(map[string]interface{}); ok {
templateAliases := d.Get("template.0.alias").([]any)

if aliases, ok := templateContent["aliases"].(map[string]any); ok {
stateAliases := d.Get("template.0.alias").([]any)
var aliasList []any
for _, alias := range templateAliases {

for _, alias := range stateAliases {
alias := alias.(map[string]any)
if config, exist := aliases[alias["name"].(string)]; exist {
filterJson, err := json.Marshal(config.(map[string]any)["filter"])
Expand All @@ -217,6 +220,20 @@ func resourceelkAliasesIndexRead(d *schema.ResourceData, m interface{}) error {
})
}
}

for name, config := range aliases {
if !isInMap(stateAliases, "name", name) {
filterJson, err := json.Marshal(config.(map[string]any)["filter"])
if err != nil {
return fmt.Errorf("error marshaling filter: %s", err)
}
aliasList = append(aliasList, map[string]any{
"name": name,
"filter": string(filterJson),
})
}
}

templateVar["alias"] = aliasList
}
}
Expand All @@ -229,10 +246,46 @@ func resourceelkAliasesIndexRead(d *schema.ResourceData, m interface{}) error {
return nil
}

func isInMap(list []any, key string, value any) bool {
for _, element := range list {
element := element.(map[string]any)
if element[key] == value {
return true
}
}
return false
}

func resourceelkAliasesIndexUpdate(d *schema.ResourceData, m interface{}) error {
return resourceelkAliasesIndexCreate(d, m)
}

func resourceelkAliasesIndexDelete(d *schema.ResourceData, m interface{}) error {
es := m.(*elasticsearch.Client)

name := d.Id()

// Perform the delete operation
res, err := es.Indices.DeleteIndexTemplate(name)
if err != nil {
return fmt.Errorf("error deleting Elasticsearch index template: %s", err)
}
defer res.Body.Close()

if res.IsError() {
return fmt.Errorf("error response from Elasticsearch when deleting index template: %s", res.String())
}

// If delete is successful, remove it from the state
d.SetId("")

return nil
}

func resourceelkAliasesIndexImport(d *schema.ResourceData, m any) ([]*schema.ResourceData, error) {
err := resourceelkAliasesIndexRead(d, m)
if err != nil {
return nil, err
}
return []*schema.ResourceData{d}, nil
}
40 changes: 32 additions & 8 deletions provider/resource_elkaliases_index_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,9 @@ func TestAccElkaliasesIndex_basic(t *testing.T) {
}`

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckElkaliasesIndexDestroy,
Steps: []resource.TestStep{
{
Config: config,
Expand Down Expand Up @@ -81,8 +82,9 @@ func TestAccElkaliasesIndex_aliases(t *testing.T) {
}`

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckElkaliasesIndexDestroy,
Steps: []resource.TestStep{
{
Config: config,
Expand Down Expand Up @@ -162,8 +164,9 @@ func TestAccElkaliasesIndex_aliases(t *testing.T) {
}`

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckElkaliasesIndexDestroy,
Steps: []resource.TestStep{
{
Config: config,
Expand Down Expand Up @@ -238,8 +241,9 @@ func TestAccElkaliasesIndex_invalid(t *testing.T) {
}`

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckElkaliasesIndexDestroy,
Steps: []resource.TestStep{
{
Config: config,
Expand Down Expand Up @@ -333,3 +337,23 @@ func testAccCheckElkaliasesIndexAliasExists(resourceName string, aliasName strin
return nil
}
}

func testAccCheckElkaliasesIndexDestroy(s *terraform.State) error {
client := testAccProvider.Meta().(*elasticsearch.Client)

for _, rs := range s.RootModule().Resources {
if rs.Type != "elkaliases_index" {
continue
}

// Check if the index still exists
res, err := client.Indices.GetIndexTemplate(client.Indices.GetIndexTemplate.WithName(rs.Primary.ID))
if err == nil {
if res.StatusCode != 404 {
return fmt.Errorf("Index template %s still exists", rs.Primary.ID)
}
}
}

return nil
}
Loading