2023-07-03 12:37:50 -04:00
|
|
|
// Copyright IBM Corp. 2014, 2026
|
2023-08-10 18:43:27 -04:00
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
2023-07-03 12:37:50 -04:00
|
|
|
|
|
|
|
|
package providers
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/terraform/internal/addrs"
|
|
|
|
|
)
|
|
|
|
|
|
2023-07-05 17:27:16 -04:00
|
|
|
// SchemaCache is a global cache of Schemas.
|
2023-07-03 12:37:50 -04:00
|
|
|
// This will be accessed by both core and the provider clients to ensure that
|
|
|
|
|
// large schemas are stored in a single location.
|
|
|
|
|
var SchemaCache = &schemaCache{
|
2023-07-06 10:35:33 -04:00
|
|
|
m: make(map[addrs.Provider]ProviderSchema),
|
2023-07-03 12:37:50 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Global cache for provider schemas
|
|
|
|
|
// Cache the entire response to ensure we capture any new fields, like
|
|
|
|
|
// ServerCapabilities. This also serves to capture errors so that multiple
|
|
|
|
|
// concurrent calls resulting in an error can be handled in the same manner.
|
|
|
|
|
type schemaCache struct {
|
|
|
|
|
mu sync.Mutex
|
2023-07-06 10:35:33 -04:00
|
|
|
m map[addrs.Provider]ProviderSchema
|
2023-07-03 12:37:50 -04:00
|
|
|
}
|
|
|
|
|
|
2023-07-06 10:35:33 -04:00
|
|
|
func (c *schemaCache) Set(p addrs.Provider, s ProviderSchema) {
|
2023-07-03 12:37:50 -04:00
|
|
|
c.mu.Lock()
|
|
|
|
|
defer c.mu.Unlock()
|
|
|
|
|
|
|
|
|
|
c.m[p] = s
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-06 10:35:33 -04:00
|
|
|
func (c *schemaCache) Get(p addrs.Provider) (ProviderSchema, bool) {
|
2023-07-03 12:37:50 -04:00
|
|
|
c.mu.Lock()
|
|
|
|
|
defer c.mu.Unlock()
|
|
|
|
|
|
|
|
|
|
s, ok := c.m[p]
|
|
|
|
|
return s, ok
|
|
|
|
|
}
|