diff --git a/konnect/client/plugin.go b/konnect/client/plugin.go index eb6dfed..0cb5b14 100644 --- a/konnect/client/plugin.go +++ b/konnect/client/plugin.go @@ -28,9 +28,10 @@ type PluginSchema struct { Fields []map[string]PluginField `json:"fields"` } type PluginField struct { - Type string `json:"type"` - Default interface{} `json:"default"` - Fields []map[string]PluginField `json:"fields"` + Type string `json:"type"` + Default interface{} `json:"default"` + Fields []map[string]PluginField `json:"fields"` + ShorthandFields []map[string]PluginField `json:"shorthand_fields"` } func (s *Plugin) PluginEncodeId() string { diff --git a/konnect/resource_plugin.go b/konnect/resource_plugin.go index 56c839b..a17b480 100644 --- a/konnect/resource_plugin.go +++ b/konnect/resource_plugin.go @@ -128,12 +128,15 @@ func fillPlugin(c *client.Plugin, d *schema.ResourceData) { func fillResourceDataFromPlugin(ctx context.Context, c *client.Plugin, d *schema.ResourceData, pluginSchema *client.PluginSchema) { // Grab just the schema for config parameter from plugin schema - var configSchema []map[string]client.PluginField - configSchema = nil + var fieldSchema []map[string]client.PluginField + fieldSchema = nil + var shorthandFieldSchema []map[string]client.PluginField + shorthandFieldSchema = nil for _, value := range pluginSchema.Fields { valueMap, ok := value["config"] if ok { - configSchema = valueMap.Fields + fieldSchema = valueMap.Fields + shorthandFieldSchema = valueMap.ShorthandFields break } } @@ -159,8 +162,11 @@ func fillResourceDataFromPlugin(ctx context.Context, c *client.Plugin, d *schema d.Set("consumer_id", consumerId) d.Set("plugin_id", c.Id) // Remove all default values from config based on plugin schema - if configSchema != nil { - pruneConfigValues(ctx, c.Config, configSchema) + if fieldSchema != nil { + pruneConfigValues(ctx, c.Config, fieldSchema, false) + } + if shorthandFieldSchema != nil { + pruneConfigValues(ctx, c.Config, shorthandFieldSchema, true) } bytes, _ := json.Marshal(c.Config) d.Set("config_json", string(bytes[:])) @@ -168,7 +174,7 @@ func fillResourceDataFromPlugin(ctx context.Context, c *client.Plugin, d *schema d.Set("config_all_json", string(bytes[:])) } -func pruneConfigValues(ctx context.Context, config map[string]interface{}, configSchema []map[string]client.PluginField) { +func pruneConfigValues(ctx context.Context, config map[string]interface{}, configSchema []map[string]client.PluginField, isShorthand bool) { for _, fieldConfig := range configSchema { for fieldKey, field := range fieldConfig { configValue, ok := config[fieldKey] @@ -176,12 +182,13 @@ func pruneConfigValues(ctx context.Context, config map[string]interface{}, confi // If field type is record, then recurse if field.Type == "record" { childConfigValue := configValue.(map[string]interface{}) - pruneConfigValues(ctx, childConfigValue, field.Fields) + pruneConfigValues(ctx, childConfigValue, field.Fields, false) + pruneConfigValues(ctx, childConfigValue, field.ShorthandFields, true) // If all fields of child config are defaults, then remove entire child config from parent if len(childConfigValue) == 0 { delete(config, fieldKey) } - } else if areConfigValuesEqual(ctx, fieldKey, configValue, field.Default) { + } else if areConfigValuesEqual(ctx, fieldKey, configValue, field.Default) || isShorthand { delete(config, fieldKey) } } diff --git a/test/main.tf b/test/main.tf index 33202fe..8e0f26b 100644 --- a/test/main.tf +++ b/test/main.tf @@ -92,9 +92,9 @@ provider "konnect" { # role_display_name = data.konnect_role.R.display_name #} -data "konnect_team" "T" { - name = "api-product-developer" -} +# data "konnect_team" "T" { +# name = "api-product-developer" +# } #resource "konnect_user" "U" { # email = "jblow@example.com"