package consul import ( consulapi "github.com/hashicorp/consul/api" "github.com/hashicorp/terraform/helper/schema" ) func dataSourceConsulKeys() *schema.Resource { return &schema.Resource{ Read: dataSourceConsulKeysRead, Schema: map[string]*schema.Schema{ "datacenter": &schema.Schema{ Type: schema.TypeString, Optional: true, Computed: true, ForceNew: true, }, "token": &schema.Schema{ Type: schema.TypeString, Optional: true, }, "key": &schema.Schema{ Type: schema.TypeSet, Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, Required: true, }, "path": &schema.Schema{ Type: schema.TypeString, Required: true, }, "default": &schema.Schema{ Type: schema.TypeString, Optional: true, }, }, }, }, "var": &schema.Schema{ Type: schema.TypeMap, Computed: true, }, }, } } func dataSourceConsulKeysRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*consulapi.Client) kv := client.KV() token := d.Get("token").(string) dc, err := getDC(d, client) if err != nil { return err } keyClient := newKeyClient(kv, dc, token) vars := make(map[string]string) keys := d.Get("key").(*schema.Set).List() for _, raw := range keys { key, path, sub, err := parseKey(raw) if err != nil { return err } value, err := keyClient.Get(path) if err != nil { return err } value = attributeValue(sub, value) vars[key] = value } if err := d.Set("var", vars); err != nil { return err } // Store the datacenter on this resource, which can be helpful for reference // in case it was read from the provider d.Set("datacenter", dc) d.SetId("-") return nil }