func NewSolidFireDriverFromConfig(c *sfapi.Config) SolidFireDriver {
	var tenantID int64

	client, _ := sfapi.NewFromConfig("")
	req := sfapi.GetAccountByNameRequest{
		Name: c.TenantName,
	}

	account, err := client.GetAccountByName(&req)
	if err != nil {
		req := sfapi.AddAccountRequest{
			Username: c.TenantName,
		}
		tenantID, err = client.AddAccount(&req)
		if err != nil {
			log.Fatal("Failed to initialize solidfire driver while creating tenant: ", err)
		}
	} else {
		tenantID = account.AccountID
	}

	baseMountPoint := "/var/lib/solidfire/mount"
	if c.MountPoint != "" {
		baseMountPoint = c.MountPoint
	}

	iscsiInterface := "default"
	if c.InitiatorIFace != "" {
		iscsiInterface = c.InitiatorIFace
	}

	if c.Types != nil {
		client.VolumeTypes = c.Types
	}

	defaultVolSize := int64(1)
	if c.DefaultVolSz != 0 {
		defaultVolSize = c.DefaultVolSz
	}

	_, err = os.Lstat(baseMountPoint)
	if os.IsNotExist(err) {
		if err := os.MkdirAll(baseMountPoint, 0755); err != nil {
			log.Fatal("Failed to create Mount directory during driver init: %v", err)
		}
	}

	d := SolidFireDriver{
		TenantID:       tenantID,
		Client:         client,
		Mutex:          &sync.Mutex{},
		DefaultVolSz:   defaultVolSize,
		MountPoint:     c.MountPoint,
		InitiatorIFace: iscsiInterface,
	}
	log.Debugf("Driver initialized with the following settings:\n%+v\n", d)
	log.Info("Succesfuly initialized SolidFire Docker driver")
	return d
}
func initClient(c *cli.Context) error {
	cfgFile := c.GlobalString("config")
	if cfgFile != "" {
		client, _ = sfapi.NewFromConfig(cfgFile)
		conf, _ := sfapi.ProcessConfig(cfgFile)
		client.Config = &conf
	} else {
		client, _ = sfapi.New()
	}
	updateLogLevel(c)
	return nil
}
func New(cfgFile string) SolidFireDriver {
	var tenantID int64
	client, _ := sfapi.NewFromConfig(cfgFile)

	req := sfapi.GetAccountByNameRequest{
		Name: client.DefaultTenantName,
	}
	account, err := client.GetAccountByName(&req)
	if err != nil {
		req := sfapi.AddAccountRequest{
			Username: client.DefaultTenantName,
		}
		actID, err := client.AddAccount(&req)
		if err != nil {
			log.Fatalf("Failed init, unable to create Tenant (%s): %+v", client.DefaultTenantName, err)
		}
		tenantID = actID
		log.Debug("Set tenantID: ", tenantID)
	} else {
		tenantID = account.AccountID
		log.Debug("Set tenantID: ", tenantID)
	}
	baseMountPoint := "/var/lib/solidfire/mount"
	if client.Config.MountPoint != "" {
		baseMountPoint = client.Config.MountPoint
	}

	iscsiInterface := "default"
	if client.Config.InitiatorIFace != "" {
		iscsiInterface = client.Config.InitiatorIFace
	}

	_, err = os.Lstat(baseMountPoint)
	if os.IsNotExist(err) {
		if err := os.MkdirAll(baseMountPoint, 0755); err != nil {
			log.Fatal("Failed to create Mount directory during driver init: %v", err)
		}
	}

	d := SolidFireDriver{
		TenantID:       tenantID,
		Client:         client,
		Mutex:          &sync.Mutex{},
		DefaultVolSz:   client.DefaultVolSize,
		MountPoint:     client.Config.MountPoint,
		InitiatorIFace: iscsiInterface,
	}
	return d
}