/
fleet.go
113 lines (99 loc) · 3.01 KB
/
fleet.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package config
import (
"context"
"os"
"strings"
"github.com/elastic/terraform-provider-elasticstack/internal/clients/fleet"
fwdiags "github.com/hashicorp/terraform-plugin-framework/diag"
sdkdiags "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
type fleetConfig fleet.Config
func newFleetConfigFromSDK(d *schema.ResourceData, kibanaCfg kibanaConfig) (fleetConfig, sdkdiags.Diagnostics) {
config := kibanaCfg.toFleetConfig()
// Set variables from resource config.
if fleetDataRaw, ok := d.GetOk("fleet"); ok {
fleetData, ok := fleetDataRaw.([]interface{})[0].(map[string]any)
if !ok {
diags := sdkdiags.Diagnostics{
sdkdiags.Diagnostic{
Severity: sdkdiags.Error,
Summary: "Unable to parse Fleet configuration",
Detail: "Fleet configuration data has not been configured correctly or is empty",
},
}
return fleetConfig{}, diags
}
if v, ok := fleetData["endpoint"].(string); ok && v != "" {
config.URL = v
}
if v, ok := fleetData["username"].(string); ok && v != "" {
config.Username = v
}
if v, ok := fleetData["password"].(string); ok && v != "" {
config.Password = v
}
if v, ok := fleetData["api_key"].(string); ok && v != "" {
config.APIKey = v
}
if v, ok := fleetData["ca_certs"].([]interface{}); ok && len(v) > 0 {
for _, elem := range v {
if vStr, elemOk := elem.(string); elemOk {
config.CACerts = append(config.CACerts, vStr)
}
}
}
if v, ok := fleetData["insecure"].(bool); ok {
config.Insecure = v
}
}
return config.withEnvironmentOverrides(), nil
}
func newFleetConfigFromFramework(ctx context.Context, cfg ProviderConfiguration, kibanaCfg kibanaConfig) (fleetConfig, fwdiags.Diagnostics) {
config := kibanaCfg.toFleetConfig()
if len(cfg.Fleet) > 0 {
fleetCfg := cfg.Fleet[0]
if fleetCfg.Username.ValueString() != "" {
config.Username = fleetCfg.Username.ValueString()
}
if fleetCfg.Password.ValueString() != "" {
config.Password = fleetCfg.Password.ValueString()
}
if fleetCfg.Endpoint.ValueString() != "" {
config.URL = fleetCfg.Endpoint.ValueString()
}
if fleetCfg.APIKey.ValueString() != "" {
config.APIKey = fleetCfg.APIKey.ValueString()
}
if !fleetCfg.Insecure.IsNull() && !fleetCfg.Insecure.IsUnknown() {
config.Insecure = fleetCfg.Insecure.ValueBool()
}
var caCerts []string
diags := fleetCfg.CACerts.ElementsAs(ctx, &caCerts, true)
if diags.HasError() {
return fleetConfig{}, diags
}
if len(caCerts) > 0 {
config.CACerts = caCerts
}
}
return config.withEnvironmentOverrides(), nil
}
func (c fleetConfig) withEnvironmentOverrides() fleetConfig {
if v, ok := os.LookupEnv("FLEET_ENDPOINT"); ok {
c.URL = v
}
if v, ok := os.LookupEnv("FLEET_USERNAME"); ok {
c.Username = v
}
if v, ok := os.LookupEnv("FLEET_PASSWORD"); ok {
c.Password = v
}
if v, ok := os.LookupEnv("FLEET_API_KEY"); ok {
c.APIKey = v
}
if v, ok := os.LookupEnv("FLEET_CA_CERTS"); ok {
c.CACerts = strings.Split(v, ",")
}
return c
}