internal/clients/config/base.go (91 lines of code) (raw):

package config import ( "fmt" "net/http" "os" "github.com/elastic/go-elasticsearch/v8" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) type baseConfig struct { Username string Password string ApiKey string UserAgent string Header http.Header } func newBaseConfigFromSDK(d *schema.ResourceData, version string, esKey string) baseConfig { userAgent := buildUserAgent(version) baseConfig := baseConfig{ UserAgent: userAgent, Header: http.Header{"User-Agent": []string{userAgent}}, } if esConn, ok := d.GetOk(esKey); ok { if resource := esConn.([]interface{})[0]; resource != nil { config := resource.(map[string]interface{}) if apiKey, ok := config["api_key"]; ok && apiKey != "" { baseConfig.ApiKey = apiKey.(string) } else { if username, ok := config["username"]; ok { baseConfig.Username = username.(string) } if password, ok := config["password"]; ok { baseConfig.Password = password.(string) } } } } return baseConfig.withEnvironmentOverrides() } func newBaseConfigFromFramework(config ProviderConfiguration, version string) baseConfig { userAgent := buildUserAgent(version) baseConfig := baseConfig{ UserAgent: userAgent, Header: http.Header{"User-Agent": []string{userAgent}}, } if len(config.Elasticsearch) > 0 { esConfig := config.Elasticsearch[0] baseConfig.Username = esConfig.Username.ValueString() baseConfig.Password = esConfig.Password.ValueString() baseConfig.ApiKey = esConfig.APIKey.ValueString() } return baseConfig.withEnvironmentOverrides() } func (b baseConfig) withEnvironmentOverrides() baseConfig { b.Username = withEnvironmentOverride(b.Username, "ELASTICSEARCH_USERNAME") b.Password = withEnvironmentOverride(b.Password, "ELASTICSEARCH_PASSWORD") b.ApiKey = withEnvironmentOverride(b.ApiKey, "ELASTICSEARCH_API_KEY") return b } func (b baseConfig) toKibanaConfig() kibanaConfig { return kibanaConfig{ Username: b.Username, Password: b.Password, ApiKey: b.ApiKey, } } func (b baseConfig) toKibanaOapiConfig() kibanaOapiConfig { return kibanaOapiConfig{ Username: b.Username, Password: b.Password, APIKey: b.ApiKey, } } func (b baseConfig) toElasticsearchConfig() elasticsearchConfig { return elasticsearchConfig{ config: elasticsearch.Config{ Header: b.Header.Clone(), Username: b.Username, Password: b.Password, APIKey: b.ApiKey, }, } } func withEnvironmentOverride(currentValue, envOverrideKey string) string { if envValue, ok := os.LookupEnv(envOverrideKey); ok { return envValue } return currentValue } func buildUserAgent(version string) string { return fmt.Sprintf("elasticstack-terraform-provider/%s", version) }