code: func (v *sioVolume) setSioMgrFromConfig() error {
  	klog.V(4).Info(log("setting scaleio mgr from available config"))
  	if v.sioMgr == nil {
  		applyConfigDefaults(v.configData)
  
  		v.configData[confKey.volSpecName] = v.volSpecName
  
  		if err := validateConfigs(v.configData); err != nil {
  			klog.Error(log("config data setup failed: %s", err))
  			return err
  		}
  
  		// copy config and attach secret
  		data := map[string]string{}
  		for k, v := range v.configData {
  			data[k] = v
  		}
  
  		if err := attachSecret(v.plugin, v.secretNamespace, data); err != nil {
  			klog.Error(log("failed to load secret: %v", err))
  			return err
  		}
  
  		mgr, err := newSioMgr(data, v.plugin.host.GetExec(v.plugin.GetPluginName()))
  
  		if err != nil {
  			klog.Error(log("failed while setting scaleio mgr from config: %v", err))
  			return err
  		}
  		v.sioMgr = mgr
  	}
  	return nil
  }
docs: // setSioFromConfig sets up scaleio mgr from an available config data map
  // designed to be called from dynamic provisioner