Skip to content

Commit 6c424ae

Browse files
wandergeektobio
authored andcommitted
wip
1 parent 079e149 commit 6c424ae

File tree

6 files changed

+58
-121
lines changed

6 files changed

+58
-121
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ require (
1414
github.com./hashicorp/terraform-plugin-log v0.9.0
1515
github.com./hashicorp/terraform-plugin-mux v0.11.1
1616
github.com./hashicorp/terraform-plugin-sdk/v2 v2.26.1
17+
github.com./hashicorp/terraform-plugin-testing v1.2.0
1718
github.com./stretchr/testify v1.8.4
1819
)
1920

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ github.com./hashicorp/terraform-plugin-mux v0.11.1 h1:cDCrmkrNHf/c2zC1oREIMdgCYWi
108108
github.com./hashicorp/terraform-plugin-mux v0.11.1/go.mod h1:eMZPcv8b5y+alMeQmocgaphPj4zAnM3uXiMLd1emqMQ=
109109
github.com./hashicorp/terraform-plugin-sdk/v2 v2.26.1 h1:G9WAfb8LHeCxu7Ae8nc1agZlQOSCUWsb610iAogBhCs=
110110
github.com./hashicorp/terraform-plugin-sdk/v2 v2.26.1/go.mod h1:xcOSYlRVdPLmDUoqPhO9fiO/YCN/l6MGYeTzGt5jgkQ=
111+
github.com./hashicorp/terraform-plugin-testing v1.2.0 h1:pASRAe6BOZFO4xSGQr9WzitXit0nrQAYDk8ziuRfn9E=
112+
github.com./hashicorp/terraform-plugin-testing v1.2.0/go.mod h1:+8bp3O7xUb1UtBcdknrGdVRIuTw4b62TYSIgXHqlyew=
111113
github.com./hashicorp/terraform-registry-address v0.2.1 h1:QuTf6oJ1+WSflJw6WYOHhLgwUiQ0FrROpHPYFtwTYWM=
112114
github.com./hashicorp/terraform-registry-address v0.2.1/go.mod h1:BSE9fIFzp0qWsJUUyGquo4ldV9k2n+psif6NYkBRS3Y=
113115
github.com./hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ=

internal/clients/api_client.go

-117
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"github.com./elastic/terraform-provider-elasticstack/internal/models"
2222
"github.com./elastic/terraform-provider-elasticstack/internal/utils"
2323
"github.com./hashicorp/go-version"
24-
fwdiag "github.com./hashicorp/terraform-plugin-framework/diag"
2524
"github.com./hashicorp/terraform-plugin-framework/types"
2625
"github.com./hashicorp/terraform-plugin-log/tflog"
2726
"github.com./hashicorp/terraform-plugin-sdk/v2/diag"
@@ -76,20 +75,6 @@ type ApiClient struct {
7675
version string
7776
}
7877

79-
type ElasticsearchConnection struct {
80-
Username types.String `tfsdk:"username"`
81-
Password types.String `tfsdk:"password"`
82-
APIKey types.String `tfsdk:"api_key"`
83-
Endpoints types.List `tfsdk:"endpoints"`
84-
Insecure types.Bool `tfsdk:"insecure"`
85-
CAFile types.String `tfsdk:"ca_file"`
86-
CAData types.String `tfsdk:"ca_data"`
87-
CertFile types.String `tfsdk:"cert_file"`
88-
KeyFile types.String `tfsdk:"key_file"`
89-
CertData types.String `tfsdk:"cert_data"`
90-
KeyData types.String `tfsdk:"key_data"`
91-
}
92-
9378
func NewApiClientFunc(version string) func(context.Context, *schema.ResourceData) (interface{}, diag.Diagnostics) {
9479
return func(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
9580
return newApiClient(d, version)
@@ -360,108 +345,6 @@ func (a *ApiClient) ClusterID(ctx context.Context) (*string, diag.Diagnostics) {
360345
return nil, diags
361346
}
362347

363-
func NewFWApiClient(ctx context.Context, esConn *ElasticsearchConnection, version string, useEnvAsDefault bool) (*ApiClient, fwdiag.Diagnostics) {
364-
var diags fwdiag.Diagnostics
365-
config := elasticsearch.Config{}
366-
config.Username = getStringValue(esConn.Username, "ELASTICSEARCH_USERNAME", true)
367-
config.Password = getStringValue(esConn.Password, "ELASTICSEARCH_PASSWORD", true)
368-
config.APIKey = getStringValue(esConn.APIKey, "ELASTICSEARCH_API_KEY", true)
369-
370-
var addrs []string
371-
diags.Append(esConn.Endpoints.ElementsAs(ctx, &addrs, true)...)
372-
if diags.HasError() {
373-
return nil, diags
374-
}
375-
if len(addrs) == 0 && useEnvAsDefault {
376-
if endpoints := os.Getenv("ELASTICSEARCH_ENDPOINTS"); endpoints != "" {
377-
for _, e := range strings.Split(endpoints, ",") {
378-
addrs = append(addrs, strings.TrimSpace(e))
379-
}
380-
}
381-
}
382-
config.Addresses = addrs
383-
384-
envInsecure, _ := strconv.ParseBool(os.Getenv("ELASTICSEARCH_INSECURE"))
385-
if esConn.Insecure.ValueBool() || envInsecure {
386-
tlsClientConfig := ensureTLSClientConfig(&config)
387-
tlsClientConfig.InsecureSkipVerify = true
388-
}
389-
390-
if esConn.CAFile.ValueString() != "" {
391-
caCert, err := os.ReadFile(esConn.CAFile.ValueString())
392-
if err != nil {
393-
diags.Append(fwdiag.NewErrorDiagnostic(
394-
"Unable to read CA File",
395-
err.Error(),
396-
))
397-
return nil, diags
398-
}
399-
config.CACert = caCert
400-
}
401-
if esConn.CAData.ValueString() != "" {
402-
config.CACert = []byte(esConn.CAData.ValueString())
403-
}
404-
405-
if certFile := esConn.CertFile.ValueString(); certFile != "" {
406-
if keyFile := esConn.KeyFile.ValueString(); keyFile != "" {
407-
cert, err := tls.LoadX509KeyPair(certFile, keyFile)
408-
if err != nil {
409-
diags.Append(fwdiag.NewErrorDiagnostic(
410-
"Unable to read certificate or key file",
411-
err.Error(),
412-
))
413-
return nil, diags
414-
}
415-
tlsClientConfig := ensureTLSClientConfig(&config)
416-
tlsClientConfig.Certificates = []tls.Certificate{cert}
417-
} else {
418-
diags.Append(fwdiag.NewErrorDiagnostic(
419-
"Unable to read key file",
420-
"Path to key file has not been configured or is empty",
421-
))
422-
return nil, diags
423-
}
424-
}
425-
if certData := esConn.CertData.ValueString(); certData != "" {
426-
if keyData := esConn.KeyData.ValueString(); keyData != "" {
427-
cert, err := tls.X509KeyPair([]byte(certData), []byte(keyData))
428-
if err != nil {
429-
diags.Append(fwdiag.NewErrorDiagnostic(
430-
"Unable to parse certificate or key",
431-
err.Error(),
432-
))
433-
return nil, diags
434-
}
435-
tlsClientConfig := ensureTLSClientConfig(&config)
436-
tlsClientConfig.Certificates = []tls.Certificate{cert}
437-
} else {
438-
diags.Append(fwdiag.NewErrorDiagnostic(
439-
"Unable to parse key",
440-
"Key data has not been configured or is empty",
441-
))
442-
return nil, diags
443-
}
444-
}
445-
446-
es, err := elasticsearch.NewClient(config)
447-
if err != nil {
448-
diags.Append(fwdiag.NewErrorDiagnostic(
449-
"Unable to create Elasticsearch client",
450-
err.Error(),
451-
))
452-
return nil, diags
453-
}
454-
if logging.IsDebugOrHigher() {
455-
config.EnableDebugLogger = true
456-
config.Logger = &debugLogger{Name: "elasticsearch"}
457-
}
458-
459-
return &ApiClient{
460-
elasticsearch: es,
461-
version: version,
462-
}, diags
463-
}
464-
465348
func getStringValue(s types.String, envKey string, useEnvAsDefault bool) string {
466349
if s.IsNull() {
467350
if useEnvAsDefault {

provider/factory_test.go

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package provider
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
8+
"github.com./hashicorp/terraform-plugin-framework/providerserver"
9+
"github.com./hashicorp/terraform-plugin-go/tfprotov5"
10+
"github.com./hashicorp/terraform-plugin-mux/tf5muxserver"
11+
"github.com./hashicorp/terraform-plugin-testing/helper/resource"
12+
)
13+
14+
func TestMuxServer(t *testing.T) {
15+
const providerConfig = `
16+
provider "elasticstack" {
17+
elasticsearch {
18+
username = "sup"
19+
password = "dawg"
20+
endpoints = ["http://localhost:9200"]
21+
}
22+
}
23+
`
24+
resource.Test(t, resource.TestCase{
25+
ProtoV5ProviderFactories: map[string]func() (tfprotov5.ProviderServer, error){
26+
"elasticstack": func() (tfprotov5.ProviderServer, error) {
27+
version := "test"
28+
sdkv2Provider := New(version)
29+
frameworkProvider := providerserver.NewProtocol5(NewFrameworkProvider(version))
30+
ctx := context.Background()
31+
providers := []func() tfprotov5.ProviderServer{
32+
frameworkProvider,
33+
sdkv2Provider.GRPCProvider,
34+
}
35+
36+
muxServer, err := tf5muxserver.NewMuxServer(ctx, providers...)
37+
38+
if err != nil {
39+
return nil, err
40+
}
41+
42+
return muxServer.ProviderServer(), nil
43+
},
44+
},
45+
Steps: []resource.TestStep{
46+
{
47+
Config: fmt.Sprintf(providerConfig),
48+
},
49+
},
50+
})
51+
}

provider/plugin_framework.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ func (p *Provider) Schema(ctx context.Context, req fwprovider.SchemaRequest, res
3939
}
4040

4141
func (p *Provider) Configure(ctx context.Context, req fwprovider.ConfigureRequest, res *fwprovider.ConfigureResponse) {
42-
esConn := []*clients.ApiClient{}
43-
diags := req.Config.GetAttribute(ctx, path.Root(esKeyName), &esConn)
42+
apiClients := []*clients.ApiClient{}
43+
diags := req.Config.GetAttribute(ctx, path.Root(esKeyName), &apiClients)
4444
res.Diagnostics.Append(diags...)
4545
if res.Diagnostics.HasError() {
4646
return

provider/provider_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
99
"github.com./elastic/terraform-provider-elasticstack/internal/elasticsearch/security"
1010
"github.com./elastic/terraform-provider-elasticstack/internal/versionutils"
1111
"github.com./elastic/terraform-provider-elasticstack/provider"
12-
sdkacctest "github.com./hashicorp/terraform-plugin-sdk/v2/helper/acctest"
13-
"github.com./hashicorp/terraform-plugin-sdk/v2/helper/resource"
12+
sdkacctest "github.com./hashicorp/terraform-plugin-testing/helper/acctest"
13+
"github.com./hashicorp/terraform-plugin-testing/helper/resource"
1414
)
1515

1616
func TestProvider(t *testing.T) {

0 commit comments

Comments
 (0)