Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions pkg/csi/cinder/openstack/openstack.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"fmt"
"net/http"
"os"
"sync"

"github.com/gophercloud/gophercloud/v2"
"github.com/gophercloud/gophercloud/v2/openstack"
Expand Down Expand Up @@ -147,8 +148,9 @@ func GetConfigFromFiles(configFilePaths []string) (Config, error) {
const defaultMaxVolAttachLimit int64 = 256

var (
OsInstances map[string]IOpenStack
configFiles = []string{"/etc/cloud.conf"}
OsInstances map[string]IOpenStack
osInstancesMu sync.Mutex
configFiles = []string{"/etc/cloud.conf"}
)

func InitOpenStackProvider(cfgFiles []string, httpEndpoint string) {
Expand Down Expand Up @@ -212,29 +214,35 @@ func CreateOpenStackProvider(cloudName string) (IOpenStack, error) {
}

// Init OpenStack
OsInstances[cloudName] = &OpenStack{
osInstance := &OpenStack{
compute: computeclient,
blockstorage: blockstorageclient,
bsOpts: cfg.BlockStorage,
epOpts: epOpts,
metadataOpts: cfg.Metadata,
}

return OsInstances[cloudName], nil
osInstancesMu.Lock()
OsInstances[cloudName] = osInstance
osInstancesMu.Unlock()

return osInstance, nil
}

// GetOpenStackProvider returns Openstack Instance
func GetOpenStackProvider(cloudName string) (IOpenStack, error) {
OsInstance, OsInstanceDefined := OsInstances[cloudName]
if OsInstanceDefined {
return OsInstance, nil
osInstancesMu.Lock()
osInstance, ok := OsInstances[cloudName]
osInstancesMu.Unlock()
if ok {
return osInstance, nil
}
OsInstance, err := CreateOpenStackProvider(cloudName)
osInstance, err := CreateOpenStackProvider(cloudName)
if err != nil {
return nil, err
}

return OsInstance, nil
return osInstance, nil
}

// GetMetadataOpts returns metadataopts
Expand Down