Skip to content

Commit e70e490

Browse files
committed
Return errors on trying to use kibana saved objects on v7+.
1 parent 71ef408 commit e70e490

3 files changed

+18
-77
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[![Build Status](https://travis-ci.org/phillbaker/terraform-provider-elasticsearch.svg?branch=master)](https://travis-ci.org/phillbaker/terraform-provider-elasticsearch)
44

5-
This is a terraform provider that lets you provision elasticsearch resources, compatible with v5 and v6 of elasticsearch. Based off of an [original PR to Terraform](https://github.com/hashicorp/terraform/pull/13238).
5+
This is a terraform provider that lets you provision elasticsearch resources, compatible with v5, v6 and v7 of elasticsearch. Based off of an [original PR to Terraform](https://github.com/hashicorp/terraform/pull/13238).
66

77
## Installation
88

resource_elasticsearch_kibana_object.go

+6-70
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"context"
5+
"errors"
56
"encoding/json"
67
"fmt"
78
"log"
@@ -46,8 +47,7 @@ func resourceElasticsearchKibanaObjectCreate(d *schema.ResourceData, meta interf
4647
var err error
4748
switch meta.(type) {
4849
case *elastic7.Client:
49-
client := meta.(*elastic7.Client)
50-
success, err = elastic7CreateIndexIfNotExists(client, index, mapping_index)
50+
err = errors.New("kibana objects not implemented post to Elastic v7")
5151
case *elastic6.Client:
5252
client := meta.(*elastic6.Client)
5353
success, err = elastic6CreateIndexIfNotExists(client, index, mapping_index)
@@ -80,26 +80,6 @@ func resourceElasticsearchKibanaObjectCreate(d *schema.ResourceData, meta interf
8080
return nil
8181
}
8282

83-
func elastic7CreateIndexIfNotExists(client *elastic7.Client, index string, mapping_index string) (int, error) {
84-
log.Printf("[INFO] elastic7CreateIndexIfNotExists")
85-
86-
// Use the IndexExists service to check if a specified index exists.
87-
exists, err := client.IndexExists(index).Do(context.TODO())
88-
if err != nil {
89-
return INDEX_CREATION_FAILED, err
90-
}
91-
if !exists {
92-
createIndex, err := client.CreateIndex(mapping_index).Body(`{"mappings":{}}`).Do(context.TODO())
93-
if createIndex.Acknowledged {
94-
return INDEX_CREATED, err
95-
} else {
96-
return INDEX_CREATION_FAILED, err
97-
}
98-
}
99-
100-
return INDEX_EXISTS, nil
101-
}
102-
10383
func elastic6CreateIndexIfNotExists(client *elastic6.Client, index string, mapping_index string) (int, error) {
10484
log.Printf("[INFO] elastic6CreateIndexIfNotExists")
10585

@@ -165,14 +145,11 @@ func resourceElasticsearchKibanaObjectRead(d *schema.ResourceData, meta interfac
165145
objectType := body[0]["_type"].(string)
166146
index := d.Get("index").(string)
167147

168-
var rawMessage json.RawMessage
169148
var result *json.RawMessage
170149
var err error
171150
switch meta.(type) {
172151
case *elastic7.Client:
173-
client := meta.(*elastic7.Client)
174-
rawMessage, err = elastic7GetObject(client, objectType, index, id)
175-
result = &rawMessage
152+
err = errors.New("kibana objects not implemented post to Elastic v7")
176153
case *elastic6.Client:
177154
client := meta.(*elastic6.Client)
178155
result, err = elastic6GetObject(client, objectType, index, id)
@@ -182,7 +159,7 @@ func resourceElasticsearchKibanaObjectRead(d *schema.ResourceData, meta interfac
182159
}
183160

184161
if err != nil {
185-
if elastic7.IsNotFound(err) || elastic6.IsNotFound(err) || elastic5.IsNotFound(err) {
162+
if elastic6.IsNotFound(err) || elastic5.IsNotFound(err) {
186163
log.Printf("[WARN] Kibana Object (%s) not found, removing from state", id)
187164
d.SetId("")
188165
return nil
@@ -197,23 +174,6 @@ func resourceElasticsearchKibanaObjectRead(d *schema.ResourceData, meta interfac
197174
return nil
198175
}
199176

200-
func elastic7GetObject(client *elastic7.Client, objectType string, index string, id string) (json.RawMessage, error) {
201-
result, err := client.Get().
202-
Index(index).
203-
Type(objectType).
204-
Id(id).
205-
Do(context.TODO())
206-
207-
if err != nil {
208-
return nil, err
209-
}
210-
if !result.Found {
211-
return nil, fmt.Errorf("Object not found.")
212-
}
213-
214-
return result.Source, nil
215-
}
216-
217177
func elastic6GetObject(client *elastic6.Client, objectType string, index string, id string) (*json.RawMessage, error) {
218178
result, err := client.Get().
219179
Index(index).
@@ -268,8 +228,7 @@ func resourceElasticsearchKibanaObjectDelete(d *schema.ResourceData, meta interf
268228
var err error
269229
switch meta.(type) {
270230
case *elastic7.Client:
271-
client := meta.(*elastic7.Client)
272-
err = elastic7DeleteIndex(client, objectType, index, id)
231+
err = errors.New("kibana objects not implemented post to Elastic v7")
273232
case *elastic6.Client:
274233
client := meta.(*elastic6.Client)
275234
err = elastic6DeleteIndex(client, objectType, index, id)
@@ -285,17 +244,6 @@ func resourceElasticsearchKibanaObjectDelete(d *schema.ResourceData, meta interf
285244
return nil
286245
}
287246

288-
func elastic7DeleteIndex(client *elastic7.Client, objectType string, index string, id string) error {
289-
_, err := client.Delete().
290-
Index(index).
291-
Type(objectType).
292-
Id(id).
293-
Do(context.TODO())
294-
295-
// we'll get an error if it's not found: https://github.com/olivere/elastic/blob/v6.1.26/delete.go#L207-L210
296-
return err
297-
}
298-
299247
func elastic6DeleteIndex(client *elastic6.Client, objectType string, index string, id string) error {
300248
_, err := client.Delete().
301249
Index(index).
@@ -334,8 +282,7 @@ func resourceElasticsearchPutKibanaObject(d *schema.ResourceData, meta interface
334282
var err error
335283
switch meta.(type) {
336284
case *elastic7.Client:
337-
client := meta.(*elastic7.Client)
338-
err = elastic7PutIndex(client, objectType, index, id, data)
285+
err = errors.New("kibana objects not implemented post to Elastic v7")
339286
case *elastic6.Client:
340287
client := meta.(*elastic6.Client)
341288
err = elastic6PutIndex(client, objectType, index, id, data)
@@ -351,17 +298,6 @@ func resourceElasticsearchPutKibanaObject(d *schema.ResourceData, meta interface
351298
return id, nil
352299
}
353300

354-
func elastic7PutIndex(client *elastic7.Client, objectType string, index string, id string, data interface{}) error {
355-
_, err := client.Index().
356-
Index(index).
357-
Type(objectType).
358-
Id(id).
359-
BodyJson(&data).
360-
Do(context.TODO())
361-
362-
return err
363-
}
364-
365301
func elastic6PutIndex(client *elastic6.Client, objectType string, index string, id string, data interface{}) error {
366302
_, err := client.Index().
367303
Index(index).

resource_elasticsearch_kibana_object_test.go

+11-6
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,26 @@ package main
33
import (
44
"context"
55
"fmt"
6+
"os"
67
"testing"
78

9+
elastic7 "github.com/olivere/elastic/v7"
810
elastic5 "gopkg.in/olivere/elastic.v5"
911
elastic6 "gopkg.in/olivere/elastic.v6"
10-
elastic7 "github.com/olivere/elastic/v7"
1112

1213
"github.com/hashicorp/terraform/helper/resource"
1314
"github.com/hashicorp/terraform/terraform"
1415
)
1516

1617
func TestAccElasticsearchKibanaObject(t *testing.T) {
1718
resource.Test(t, resource.TestCase{
18-
PreCheck: func() { testAccPreCheck(t) },
19+
PreCheck: func() {
20+
testAccPreCheck(t)
21+
// skip tests on ES > 7 until saved object API is supported
22+
if v := os.Getenv("ES_VERSION"); v >= "7.0.0" {
23+
t.Skip("Need to implement saved object API on ES >= 6")
24+
}
25+
},
1926
Providers: testAccProviders,
2027
CheckDestroy: testCheckElasticsearchKibanaObjectDestroy,
2128
Steps: []resource.TestStep{
@@ -44,8 +51,7 @@ func testCheckElasticsearchKibanaObjectExists(name string) resource.TestCheckFun
4451
var err error
4552
switch meta.(type) {
4653
case *elastic7.Client:
47-
client := meta.(*elastic7.Client)
48-
_, err = client.Get().Index(".kibana").Type("visualization").Id("response-time-percentile").Do(context.TODO())
54+
// not implemented
4955
case *elastic6.Client:
5056
client := meta.(*elastic6.Client)
5157
_, err = client.Get().Index(".kibana").Type("visualization").Id("response-time-percentile").Do(context.TODO())
@@ -73,8 +79,7 @@ func testCheckElasticsearchKibanaObjectDestroy(s *terraform.State) error {
7379
var err error
7480
switch meta.(type) {
7581
case *elastic7.Client:
76-
client := meta.(*elastic7.Client)
77-
_, err = client.Get().Index(".kibana").Type("visualization").Id("response-time-percentile").Do(context.TODO())
82+
// not implemented
7883
case *elastic6.Client:
7984
client := meta.(*elastic6.Client)
8085
_, err = client.Get().Index(".kibana").Type("visualization").Id("response-time-percentile").Do(context.TODO())

0 commit comments

Comments
 (0)