/** * 执行remove操作 * * @param array $query * @return array boolean */ public function remove(array $query) { try { return $this->result($this->_client->remove(serialize($query))); } catch (SoapFault $e) { $this->soapFaultMsg($e); return false; } }
function remove() { $response = $this->get_response(); $instance_name = $response->html->request()->get('instance_name'); $form = $response->form; $submit = $form->get_elements('submit'); $submit->handler = 'onclick="wait();"'; $form->add($submit, 'submit'); $submit = $form->get_elements('cancel'); $submit->handler = 'onclick="cancel();"'; $form->add($submit, 'cancel'); $d['param_f']['label'] = $instance_name; $d['param_f']['object']['type'] = 'htmlobject_input'; $d['param_f']['object']['attrib']['type'] = 'checkbox'; $d['param_f']['object']['attrib']['name'] = 'instance_name'; $d['param_f']['object']['attrib']['value'] = $instance_name; $d['param_f']['object']['attrib']['checked'] = true; $form->add($d); if (!$form->get_errors() && $response->submit()) { $errors = array(); $message = array(); $resource = new resource(); $resource->get_instance_by_mac($this->instance_mac); $appliance = new appliance(); $appliances_using_resource = $appliance->get_ids_per_resource($resource->id); if (count($appliances_using_resource) > 0) { $appliances_using_resource_str = implode(",", $appliances_using_resource[0]); $errors[] = sprintf($this->lang['msg_vm_resource_still_in_use'], $instance_name, $resource->id, $appliances_using_resource_str); } else { $resource->remove($resource->id, $this->instance_mac); $hc_authentication = ''; if ($this->hc->account_type == 'aws' || $this->hc->account_type == 'euca') { $hc_authentication .= ' -O ' . $this->hc->access_key; $hc_authentication .= ' -W ' . $this->hc->secret_key; $hc_authentication .= ' -ir ' . $this->region; } if ($this->hc->account_type == 'lc-openstack') { $hc_authentication .= ' -u ' . $this->hc->username; $hc_authentication .= ' -p ' . $this->hc->password; $hc_authentication .= ' -q ' . $this->hc->host; $hc_authentication .= ' -x ' . $this->hc->port; $hc_authentication .= ' -g ' . $this->hc->tenant; $hc_authentication .= ' -e ' . $this->hc->endpoint; } $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-vm remove'; $command .= ' -i ' . $this->hc->id; $command .= ' -n ' . $this->hc->account_name; $command .= ' -t ' . $this->hc->account_type; $command .= ' -in ' . $instance_name; $command .= $hc_authentication; $command .= ' --openqrm-ui-user ' . $this->user->name; $command .= ' --openqrm-cmd-mode background'; $openqrm = new openqrm_server(); $openqrm->send_command($command, NULL, true); $message[] = sprintf($this->lang['msg_removed'], $instance_name); } if (count($errors) === 0) { $response->msg = join('<br>', $message); } else { $msg = array_merge($errors, $message); $response->error = join('<br>', $msg); } } return $response; }
function remove($resource_id, $virtualization_type, $name, $mac) { global $OPENQRM_SERVER_BASE_DIR; global $OPENQRM_SERVER_IP_ADDRESS; global $OPENQRM_EXEC_PORT; global $RESOURCE_INFO_TABLE; global $RootDir; global $event; // never remove the openQRM server resource if ($resource_id == 0) { return; } $vtype = new virtualization(); $vtype->get_instance_by_id($virtualization_type); $virtualization_plugin_name = $vtype->get_plugin_name(); // remove the VM from host $auto_resource = new resource(); $auto_resource->get_instance_by_id($resource_id); $host_resource = new resource(); $host_resource->get_instance_by_id($auto_resource->vhostid); $event->log("remove", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Trying to remove resource {$resource_id} type {$virtualization_plugin_name} on host {$host_resource->id} ({$mac})", "", "", 0, 0, 0); // we need to have an openQRM server object too since some of the // virtualization commands are sent from openQRM directly $openqrm = new openqrm_server(); // plug in the virtualization cloud hook $virtualization_cloud_hook = "{$RootDir}/plugins/{$virtualization_plugin_name}/openqrm-{$virtualization_plugin_name}-cloud-hook.php"; if (file_exists($virtualization_cloud_hook)) { $event->log("remove", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class", "Found plugin {$virtualization_plugin_name} handling to remove the VM.", "", "", 0, 0, $resource_id); require_once "{$virtualization_cloud_hook}"; $virtualization_method = "remove_" . $vtype->type; $virtualization_method = str_replace("-", "_", $virtualization_method); $virtualization_method($host_resource->id, $name, $mac); } else { $event->log("cloud", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class", "Do not know how to remove VM from type {$virtualization_plugin_name}.", "", "", 0, 0, 0); return false; } // let plugin hooks settle sleep(2); // remove VM from hostlimit current_vms $res_hostlimit = new cloudhostlimit(); $res_hostlimit->get_instance_by_resource($host_resource->id); if (strlen($res_hostlimit->id)) { if ($res_hostlimit->current_vms > 0) { $current_vms = $res_hostlimit->current_vms - 1; $cloud_hostlimit_fields["hl_current_vms"] = $current_vms; $res_hostlimit->update($res_hostlimit->id, $cloud_hostlimit_fields); } } // resource object remove $auto_resource->remove($auto_resource->id, $auto_resource->mac); $event->log("remove", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Removed resource {$resource_id}", "", "", 0, 0, 0); }
$resource->add($resource_fields); // set lastgood to -1 to prevent automatic checking the state $resource_fields["resource_lastgood"] = -1; $resource->update_info($new_resource_id, $resource_fields); // $resource->get_parameter($new_resource_id); break; // remove requires : // resource_id // resource_mac // remove requires : // resource_id // resource_mac case 'remove': // remove from openQRM database $resource = new resource(); $resource->remove($resource_id, $resource_mac); break; // localboot requires : // resource_id // resource_mac // resource_ip // localboot requires : // resource_id // resource_mac // resource_ip case 'localboot': $openqrm_server->send_command("openqrm_server_set_boot local {$resource_id} {$resource_mac} {$resource_ip}"); // update db $resource = new resource(); $resource->set_localboot($resource_id, 1); break;
function remove() { $response = $this->get_response(); $vms = $response->html->request()->get($this->identifier_name); $form = $response->form; if ($vms !== '') { $submit = $form->get_elements('submit'); $submit->handler = 'onclick="wait();"'; $form->add($submit, 'submit'); $submit = $form->get_elements('cancel'); $submit->handler = 'onclick="cancel();"'; $form->add($submit, 'cancel'); $i = 0; foreach ($vms as $ex) { $d['param_f' . $i]['label'] = $ex; $d['param_f' . $i]['object']['type'] = 'htmlobject_input'; $d['param_f' . $i]['object']['attrib']['type'] = 'checkbox'; $d['param_f' . $i]['object']['attrib']['name'] = $this->identifier_name . '[' . $i . ']'; $d['param_f' . $i]['object']['attrib']['value'] = $ex; $d['param_f' . $i]['object']['attrib']['checked'] = true; $i++; } $form->add($d); if (!$form->get_errors() && $response->submit()) { $appliance_id = $this->response->html->request()->get('appliance_id'); $appliance = new appliance(); $resource = new resource(); $errors = array(); $message = array(); foreach ($vms as $key => $vm) { $appliance->get_instance_by_id($appliance_id); $resource->get_instance_by_id($appliance->resources); $file = $this->openqrm->get('basedir') . '/plugins/kvm/web/kvm-stat/' . $resource->id . '.vm_list'; if ($this->file->exists($file)) { $lines = explode("\n", $this->file->get_contents($file)); if (count($lines) >= 1) { foreach ($lines as $line) { if ($line !== '') { $line = explode('@', $line); if ($vm === $line[1]) { $kvm = new resource(); $kvm->get_instance_by_mac($line[2]); // check if it is still in use $appliances_using_resource = $appliance->get_ids_per_resource($kvm->id); if (count($appliances_using_resource) > 0) { $appliances_using_resource_str = implode(",", $appliances_using_resource[0]); $errors[] = sprintf($this->lang['msg_vm_resource_still_in_use'], $vm, $kvm->id, $appliances_using_resource_str); } else { $kvm->remove($kvm->id, $line[2]); $command = $this->openqrm->get('basedir') . '/plugins/kvm/bin/openqrm-kvm-vm delete -n ' . $vm; $command .= ' -u ' . $this->openqrm->admin()->name . ' -p ' . $this->openqrm->admin()->password; $command .= ' --openqrm-ui-user ' . $this->user->name; $command .= ' --openqrm-cmd-mode background'; $resource->send_command($resource->ip, $command); $form->remove($this->identifier_name . '[' . $key . ']'); $message[] = sprintf($this->lang['msg_removed'], $vm); // stop remote console $tmp = explode(':', $line[5]); $server = $tmp[0]; $port = $tmp[1]; $mac = $line[2]; $rid = $kvm->id; $event = new event(); $plugin = new plugin(); $enabled = $plugin->enabled(); foreach ($enabled as $index => $name) { $running = $this->openqrm->get('webdir') . '/plugins/' . $name . '/.running'; $hook = $this->openqrm->get('webdir') . '/plugins/' . $name . '/openqrm-' . $name . '-remote-console-hook.php'; if (file_exists($hook)) { if (file_exists($running)) { $event->log("console", $_SERVER['REQUEST_TIME'], 5, "kvm-storge-vm.remove.class.php", 'Stopping ' . $name . ' remote console.', "", "", 0, 0, $kvm->id); require_once $hook; $console_function = 'openqrm_' . $name . '_disable_remote_console'; $console_function = str_replace("-", "_", $console_function); $console_function($server, $port, $rid, $mac, $vm); } } } } } } } } } } if (count($errors) === 0) { $response->msg = join('<br>', $message); } else { $msg = array_merge($errors, $message); $response->error = join('<br>', $msg); } } } else { $response->msg = ''; } return $response; }