xds/bootstrap: Use correct format for "certificate_providers" field. (#3922)
diff --git a/xds/internal/client/bootstrap/bootstrap.go b/xds/internal/client/bootstrap/bootstrap.go
index 93e6d3e..51ab98d 100644
--- a/xds/internal/client/bootstrap/bootstrap.go
+++ b/xds/internal/client/bootstrap/bootstrap.go
@@ -118,8 +118,14 @@
// ],
// "server_features": [ ... ]
// "certificate_providers" : {
-// "default": { default cert provider config },
-// "foo": { config for provider foo }
+// "default": {
+// "plugin_name": "default-plugin-name",
+// "config": { default plugin config in JSON }
+// },
+// "foo": {
+// "plugin_name": "foo",
+// "config": { foo plugin config in JSON }
+// }
// }
// },
// "node": <JSON form of Node proto>
@@ -208,24 +214,28 @@
configs := make(map[string]CertProviderConfig)
getBuilder := internal.GetCertificateProviderBuilder.(func(string) certprovider.Builder)
for instance, data := range providerInstances {
- var providerConfigs map[string]json.RawMessage
- if err := json.Unmarshal(data, &providerConfigs); err != nil {
+ var nameAndConfig struct {
+ PluginName string `json:"plugin_name"`
+ Config json.RawMessage `json:"config"`
+ }
+ if err := json.Unmarshal(data, &nameAndConfig); err != nil {
return nil, fmt.Errorf("xds: json.Unmarshal(%v) for field %q failed during bootstrap: %v", string(v), instance, err)
}
- for name, cfg := range providerConfigs {
- parser := getBuilder(name)
- if parser == nil {
- // We ignore plugins that we do not know about.
- continue
- }
- c, err := parser.ParseConfig(cfg)
- if err != nil {
- return nil, fmt.Errorf("xds: Config parsing for plugin %q failed: %v", name, err)
- }
- configs[instance] = CertProviderConfig{
- Name: name,
- Config: c,
- }
+
+ name := nameAndConfig.PluginName
+ parser := getBuilder(nameAndConfig.PluginName)
+ if parser == nil {
+ // We ignore plugins that we do not know about.
+ continue
+ }
+ cfg := nameAndConfig.Config
+ c, err := parser.ParseConfig(cfg)
+ if err != nil {
+ return nil, fmt.Errorf("xds: Config parsing for plugin %q failed: %v", name, err)
+ }
+ configs[instance] = CertProviderConfig{
+ Name: name,
+ Config: c,
}
}
config.CertProviderConfigs = configs
diff --git a/xds/internal/client/bootstrap/bootstrap_test.go b/xds/internal/client/bootstrap/bootstrap_test.go
index 353bcd9..2266506 100644
--- a/xds/internal/client/bootstrap/bootstrap_test.go
+++ b/xds/internal/client/bootstrap/bootstrap_test.go
@@ -564,10 +564,12 @@
"server_features" : ["foo", "bar", "xds_v3"],
"certificate_providers": {
"unknownProviderInstance1": {
- "foo1": "bar1"
+ "plugin_name": "foo",
+ "config": {"foo": "bar"}
},
"unknownProviderInstance2": {
- "foo2": "bar2"
+ "plugin_name": "bar",
+ "config": {"foo": "bar"}
}
}
}`,
@@ -588,17 +590,12 @@
"server_features" : ["foo", "bar", "xds_v3"],
"certificate_providers": {
"unknownProviderInstance": {
- "foo": "bar"
- },
- "fakeProviderInstance": {
- "fake-certificate-provider": {
- "configKey": "configValue"
- }
+ "plugin_name": "foo",
+ "config": {"foo": "bar"}
},
"fakeProviderInstanceBad": {
- "fake-certificate-provider": {
- "configKey": 666
- }
+ "plugin_name": "fake-certificate-provider",
+ "config": {"configKey": 666}
}
}
}`,
@@ -619,12 +616,12 @@
"server_features" : ["foo", "bar", "xds_v3"],
"certificate_providers": {
"unknownProviderInstance": {
- "foo": "bar"
+ "plugin_name": "foo",
+ "config": {"foo": "bar"}
},
"fakeProviderInstance": {
- "fake-certificate-provider": {
- "configKey": "configValue"
- }
+ "plugin_name": "fake-certificate-provider",
+ "config": {"configKey": "configValue"}
}
}
}`,
@@ -692,7 +689,7 @@
}
c, err := NewConfig()
if (err != nil) != test.wantErr {
- t.Fatalf("NewConfig() returned: %v, wantErr: %v", err, test.wantErr)
+ t.Fatalf("NewConfig() returned: (%+v, %v), wantErr: %v", c.CertProviderConfigs, err, test.wantErr)
}
if test.wantErr {
return