33 lines
740 B
Go
33 lines
740 B
Go
package smartconfig
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/consul/api"
|
|
)
|
|
|
|
// ConsulResolver retrieves values from Consul KV store.
|
|
// Usage: ${CONSUL:myapp/config/database}
|
|
type ConsulResolver struct{}
|
|
|
|
// Resolve retrieves the value from Consul.
|
|
func (r *ConsulResolver) Resolve(value string) (string, error) {
|
|
config := api.DefaultConfig()
|
|
client, err := api.NewClient(config)
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to create Consul client: %w", err)
|
|
}
|
|
|
|
kv := client.KV()
|
|
pair, _, err := kv.Get(value, nil)
|
|
if err != nil {
|
|
return "", fmt.Errorf("failed to get key %s from Consul: %w", value, err)
|
|
}
|
|
|
|
if pair == nil {
|
|
return "", fmt.Errorf("key %s not found in Consul", value)
|
|
}
|
|
|
|
return string(pair.Value), nil
|
|
}
|