mirror of https://github.com/pulumi/pulumi.git
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package utils
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
|
|
"github.com/pulumi/pulumi/pkg/v3/resource/deploy/deploytest"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
|
|
|
|
"github.com/edsrzf/mmap-go"
|
|
)
|
|
|
|
func GetSchema(schemaDirectoryPath, providerName string) ([]byte, error) {
|
|
path := filepath.Join(schemaDirectoryPath, providerName+".json")
|
|
schemaFile, err := os.OpenFile(path, os.O_RDONLY, 0644)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// We'll leak this memory, but we are in a testing environment and
|
|
schemaMmap, err := mmap.Map(schemaFile, mmap.RDONLY, 0)
|
|
if err != nil {
|
|
schemaFile.Close()
|
|
return nil, err
|
|
}
|
|
|
|
return schemaMmap, nil
|
|
}
|
|
|
|
type ProviderLoader func(string) (plugin.Provider, error)
|
|
|
|
func NewProviderLoader(pkg string) ProviderLoader {
|
|
return func(schemaDirectoryPath string) (plugin.Provider, error) {
|
|
// Single instance schema:
|
|
var schema []byte
|
|
var err error
|
|
var m sync.Mutex
|
|
return &deploytest.Provider{
|
|
GetSchemaF: func(version int) ([]byte, error) {
|
|
m.Lock()
|
|
defer m.Unlock()
|
|
if schema != nil {
|
|
return schema, nil
|
|
}
|
|
|
|
schema, err = GetSchema(schemaDirectoryPath, pkg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return schema, nil
|
|
},
|
|
}, nil
|
|
}
|
|
}
|
|
|
|
var (
|
|
AWS = NewProviderLoader("aws")
|
|
AwsNative = NewProviderLoader("aws")
|
|
Azure = NewProviderLoader("azure")
|
|
AzureNative = NewProviderLoader("azure-native")
|
|
Random = NewProviderLoader("random")
|
|
Kubernetes = NewProviderLoader("kubernetes")
|
|
Other = NewProviderLoader("other")
|
|
Synthetic = NewProviderLoader("synthetic")
|
|
)
|