setStore(); } } protected function doRender() { $action = Request::post('action'); if ($action === 'setstore' && !Taskmanager::isFailed($this->mountTask)) { Render::addTemplate('mount', array( 'task' => $this->mountTask['id'] )); return; } $vmstore = Property::getVmStoreConfig(); if (isset($vmstore['storetype'])) { $vmstore['pre-' . $vmstore['storetype']] = 'checked'; } Render::addTemplate('page-vmstore', $vmstore); } private function setStore() { $vmstore = array(); foreach (array('storetype', 'nfsaddr', 'nfsopts', 'cifsaddr', 'cifsuser', 'cifspasswd', 'cifsuserro', 'cifspasswdro', 'cifsopts') as $key) { $vmstore[$key] = trim(Request::post($key, '', 'string')); // Remove rw setting if ($key === 'cifsopts' || $key === 'nfsopts') { $vmstore[$key] = preg_replace('/\s+,\s+/', ',', $vmstore[$key]); $vmstore[$key] = preg_replace('/^rw,|,rw$/', '', str_replace(',rw,', ',', $vmstore[$key])); } } $storetype = $vmstore['storetype']; if (!in_array($storetype, array('internal', 'nfs', 'cifs'))) { Message::addError('main.value-invalid', 'type', $storetype); Util::redirect('?do=VmStore'); } // Validate syntax of nfs/cifs if ($storetype === 'nfs' && !preg_match('#^\S+:\S+$#is', $vmstore['nfsaddr'])) { Message::addError('main.value-invalid', 'nfsaddr', $vmstore['nfsaddr']); Util::redirect('?do=VmStore'); } $vmstore['cifsaddr'] = str_replace('\\', '/', $vmstore['cifsaddr']); if ($storetype === 'cifs' && !preg_match('#^//\S+/.+$#is', $vmstore['cifsaddr'])) { Message::addError('main.value-invalid', 'nfsaddr', $vmstore['nfsaddr']); Util::redirect('?do=VmStore'); } $this->mountTask = Trigger::mount($vmstore); if ($this->mountTask !== false) { TaskmanagerCallback::addCallback($this->mountTask, 'manualMount', $vmstore); } } }