code: func (m *sioMgr) getClient() (sioInterface, error) {
  	if m.client == nil {
  		klog.V(4).Info(log("creating scaleio client"))
  		configs := m.configData
  		username := configs[confKey.username]
  		password := configs[confKey.password]
  		gateway := configs[confKey.gateway]
  		b, err := strconv.ParseBool(configs[confKey.sslEnabled])
  		if err != nil {
  			klog.Error(log("failed to parse sslEnabled, must be either \"true\" or \"false\""))
  			return nil, err
  		}
  		certsEnabled := b
  
  		klog.V(4).Info(log("creating new client for gateway %s", gateway))
  		client, err := newSioClient(gateway, username, password, certsEnabled, m.exec)
  		if err != nil {
  			klog.Error(log("failed to create scaleio client: %v", err))
  			return nil, err
  		}
  
  		client.sysName = configs[confKey.system]
  		client.pdName = configs[confKey.protectionDomain]
  		client.spName = configs[confKey.storagePool]
  		client.sdcPath = configs[confKey.sdcRootPath]
  		client.provisionMode = configs[confKey.storageMode]
  		client.sdcGUID = configs[confKey.sdcGUID]
  
  		m.client = client
  
  		klog.V(4).Info(log("client created successfully [gateway=%s]", gateway))
  	}
  	return m.client, nil
  }
docs: // getClient safely returns an sioInterface