func New(cfgFile string) CinderDriver { conf, err := processConfig(cfgFile) isV3 := strings.Contains(conf.Endpoint, "v3") if err != nil { log.Fatal("Error processing cinder driver config file: ", err) } _, err = os.Lstat(conf.MountPoint) if os.IsNotExist(err) { if err := os.MkdirAll(conf.MountPoint, 0755); err != nil { log.Fatal("Failed to create Mount directory during driver init: %v", err) } } auth := gophercloud.AuthOptions{ IdentityEndpoint: conf.Endpoint, Username: conf.Username, Password: conf.Password, TenantID: conf.TenantID, AllowReauth: true, } if isV3 == true && conf.DomainName == "" { log.Warning("V3 endpoint specified, but DomainName not set!") log.Warning("Setting to \"Default\", maybe it'll work.") auth.DomainName = "Default" } if conf.DomainName != "" && isV3 == true { log.Info("Authorizing to a V3 Endpoint") auth.DomainName = conf.DomainName } providerClient, err := openstack.AuthenticatedClient(auth) if err != nil { log.Fatal("Error initiating gophercloud provider client: ", err) } client, err := openstack.NewBlockStorageV2(providerClient, gophercloud.EndpointOpts{Region: "RegionOne"}) if err != nil { log.Fatal("Error initiating gophercloud cinder client: ", err) } d := CinderDriver{ Conf: &conf, Mutex: &sync.Mutex{}, Client: client, } return d }