BuildXDSClientConfig builds the xdsclient.Config from the bootstrap.Config. This function is exported for fuzz testing purposes only.
(config *bootstrap.Config, metricsRecorder estats.MetricsRecorder, target string, watchExpiryTimeout time.Duration)
| 206 | // |
| 207 | // This function is exported for fuzz testing purposes only. |
| 208 | func BuildXDSClientConfig(config *bootstrap.Config, metricsRecorder estats.MetricsRecorder, target string, watchExpiryTimeout time.Duration) (xdsclient.Config, error) { |
| 209 | grpcTransportConfigs := make(map[string]grpctransport.Config) |
| 210 | gServerCfgMap := make(map[xdsclient.ServerConfig]*bootstrap.ServerConfig) |
| 211 | |
| 212 | gAuthorities := make(map[string]xdsclient.Authority) |
| 213 | for name, cfg := range config.Authorities() { |
| 214 | // If server configs are specified in the authorities map, use that. |
| 215 | // Else, use the top-level server configs. |
| 216 | serverCfg := config.XDSServers() |
| 217 | if len(cfg.XDSServers) >= 1 { |
| 218 | serverCfg = cfg.XDSServers |
| 219 | } |
| 220 | gsc, err := buildServerConfigs(serverCfg, grpcTransportConfigs, gServerCfgMap) |
| 221 | if err != nil { |
| 222 | return xdsclient.Config{}, err |
| 223 | } |
| 224 | gAuthorities[name] = xdsclient.Authority{XDSServers: gsc} |
| 225 | } |
| 226 | |
| 227 | gServerCfgs, err := buildServerConfigs(config.XDSServers(), grpcTransportConfigs, gServerCfgMap) |
| 228 | if err != nil { |
| 229 | return xdsclient.Config{}, err |
| 230 | } |
| 231 | |
| 232 | node := config.Node() |
| 233 | gNode := clients.Node{ |
| 234 | ID: node.GetId(), |
| 235 | Cluster: node.GetCluster(), |
| 236 | Metadata: node.Metadata, |
| 237 | UserAgentName: node.UserAgentName, |
| 238 | UserAgentVersion: node.GetUserAgentVersion(), |
| 239 | } |
| 240 | if node.Locality != nil { |
| 241 | gNode.Locality = clients.Locality{ |
| 242 | Region: node.Locality.Region, |
| 243 | Zone: node.Locality.Zone, |
| 244 | SubZone: node.Locality.SubZone, |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | return xdsclient.Config{ |
| 249 | Authorities: gAuthorities, |
| 250 | Servers: gServerCfgs, |
| 251 | Node: gNode, |
| 252 | TransportBuilder: grpctransport.NewBuilder(grpcTransportConfigs), |
| 253 | ResourceTypes: supportedResourceTypes(config, gServerCfgMap), |
| 254 | MetricsReporter: &metricsReporter{recorder: metricsRecorder, target: target}, |
| 255 | WatchExpiryTimeout: watchExpiryTimeout, |
| 256 | }, nil |
| 257 | } |
| 258 | |
| 259 | // populateGRPCTransportConfigsFromServerConfig iterates through the channel |
| 260 | // credentials of the provided server configuration, builds credential bundles, |