1package dependency 2 3import ( 4 "log" 5 "net/url" 6 7 "github.com/pkg/errors" 8) 9 10var ( 11 // Ensure implements 12 _ Dependency = (*ConnectCAQuery)(nil) 13) 14 15type ConnectCAQuery struct { 16 stopCh chan struct{} 17} 18 19func NewConnectCAQuery() *ConnectCAQuery { 20 return &ConnectCAQuery{ 21 stopCh: make(chan struct{}, 1), 22 } 23} 24 25func (d *ConnectCAQuery) Fetch(clients *ClientSet, opts *QueryOptions) ( 26 interface{}, *ResponseMetadata, error, 27) { 28 select { 29 case <-d.stopCh: 30 return nil, nil, ErrStopped 31 default: 32 } 33 34 opts = opts.Merge(nil) 35 log.Printf("[TRACE] %s: GET %s", d, &url.URL{ 36 Path: "/v1/agent/connect/ca/roots", 37 RawQuery: opts.String(), 38 }) 39 40 certs, md, err := clients.Consul().Agent().ConnectCARoots( 41 opts.ToConsulOpts()) 42 if err != nil { 43 return nil, nil, errors.Wrap(err, d.String()) 44 } 45 46 log.Printf("[TRACE] %s: returned %d results", d, len(certs.Roots)) 47 log.Printf("[TRACE] %s: %#v ", d, md) 48 49 rm := &ResponseMetadata{ 50 LastIndex: md.LastIndex, 51 LastContact: md.LastContact, 52 Block: true, 53 } 54 55 return certs.Roots, rm, nil 56} 57 58func (d *ConnectCAQuery) Stop() { 59 close(d.stopCh) 60} 61 62func (d *ConnectCAQuery) CanShare() bool { 63 return false 64} 65 66func (d *ConnectCAQuery) Type() Type { 67 return TypeConsul 68} 69 70func (d *ConnectCAQuery) String() string { 71 return "connect.caroots" 72} 73