コード例 #1
0
 function action()
 {
     $external_portal_name = $this->cloud_config->get_value(3);
     // 3 is the external name;
     if (!strlen($external_portal_name)) {
         $openqrm_server = new openqrm_server();
         $openqrm_server_ip = $openqrm_server->get_ip_address();
         $external_portal_name = "http://" . $openqrm_server_ip . "/cloud-portal";
     }
     $template = $this->response->html->template($this->tpldir . "/cloud-documentation-about.tpl.php");
     $template->add($this->lang['cloud_documentation_title'], 'title');
     $template->add($this->lang['cloud_documentation_intro'], 'cloud_documentation_intro');
     $template->add($this->lang['cloud_documentation_label'], 'cloud_documentation_label');
     $template->add($this->lang['cloud_documentation_setup'], 'cloud_documentation_setup');
     $template->add($this->lang['cloud_documentation_setup_title'], 'cloud_documentation_setup_title');
     $template->add($this->lang['cloud_documentation_setup_steps'], 'cloud_documentation_setup_steps');
     $template->add($this->lang['cloud_documentation_users'], 'cloud_documentation_users');
     $template->add($this->lang['cloud_documentation_create_user'], 'cloud_documentation_create_user');
     $template->add($this->lang['cloud_documentation_ip_management'], 'cloud_documentation_ip_management');
     $template->add($this->lang['cloud_documentation_ip_management_setup'], 'cloud_documentation_ip_management_setup');
     $template->add($this->lang['cloud_documentation_type_title'], 'cloud_documentation_type_title');
     $template->add($this->lang['cloud_documentation_type_content'], 'cloud_documentation_type_content');
     $template->add($this->lang['cloud_documentation_tested_title'], 'cloud_documentation_tested_title');
     $template->add($this->lang['cloud_documentation_tested_content'], 'cloud_documentation_tested_content');
     $template->add($this->lang['cloud_documentation_api'], 'cloud_documentation_api');
     $template->add($this->lang['cloud_documentation_soap'], 'cloud_documentation_soap');
     $template->add($this->lang['cloud_documentation_lockfile'], 'cloud_documentation_lockfile');
     $template->add(sprintf($this->lang['cloud_documentation_lockfile_details'], $this->rootdir . "/web/action/cloud-conf/cloud-monitor.lock"), 'cloud_documentation_lockfile_details');
     $template->add($this->baseurl, 'baseurl');
     $template->add($external_portal_name, 'external_portal_name');
     $template->add($this->response->html->thisfile, "thisfile");
     $template->group_elements(array('param_' => 'form'));
     return $template;
 }
コード例 #2
0
function openqrm_dhcpd_appliance($cmd, $appliance_fields)
{
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_EXEC_PORT;
    $openqrm_server = new openqrm_server();
    $OPENQRM_SERVER_IP_ADDRESS = $openqrm_server->get_ip_address();
    $event = new event();
    $appliance_id = $appliance_fields["appliance_id"];
    $appliance_name = $appliance_fields["appliance_name"];
    $resource = new resource();
    $resource->get_instance_by_id($appliance_fields["appliance_resources"]);
    $resource_mac = $resource->mac;
    $resource_ip = $resource->ip;
    $appliance = new appliance();
    $appliance->get_instance_by_id($appliance_id);
    if ($resource->id == "-1" || $resource->id == "") {
        return;
    }
    $event->log("openqrm_dhcpd_appliance", $_SERVER['REQUEST_TIME'], 5, "openqrm-dhcpd-appliance-hook.php", "Handling {$cmd} event {$appliance_id}/{$appliance_name}/{$resource_ip}/{$resource_mac}", "", "", 0, 0, $resource->id);
    switch ($cmd) {
        case "start":
            $event->log("openqrm_dhcpd_appliance", $_SERVER['REQUEST_TIME'], 5, "openqrm-dhcpd-appliance-hook.php", "Adding hostname " . $appliance->name . " from resource " . $resource->id . ".", "", "", 0, 0, $resource->id);
            $dhcpd_command = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/dhcpd/bin/openqrm-dhcpd-appliance add_hostname -m " . $resource_mac . " -n " . $appliance->name . " -d " . $resource->id . " --openqrm-cmd-mode background";
            $openqrm_server->send_command($dhcpd_command);
            break;
        case "stop":
            $event->log("openqrm_dhcpd_appliance", $_SERVER['REQUEST_TIME'], 5, "openqrm-dhcpd-appliance-hook.php", "Removing hostname " . $appliance->name . " from resource " . $resource->id . ".", "", "", 0, 0, $resource->id);
            $dhcpd_command = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/dhcpd/bin/openqrm-dhcpd-appliance remove_hostname -m " . $resource_mac . " -n " . $appliance->name . " -d " . $resource->id . " --openqrm-cmd-mode background";
            $openqrm_server->send_command($dhcpd_command);
            break;
    }
}
コード例 #3
0
function openqrm_dhcpd_resource($cmd, $resource_fields)
{
    global $event;
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    $resource_id = $resource_fields["resource_id"];
    $resource_ip = $resource_fields["resource_ip"];
    $resource_mac = $resource_fields["resource_mac"];
    if (isset($resource_fields["resource_subnet"])) {
        $resource_subnet = $resource_fields["resource_subnet"];
    } else {
        $resource_subnet = "0.0.0.0";
    }
    $openqrm_admin_user = new user("openqrm");
    $openqrm_admin_user->set_user();
    $openqrm_server = new openqrm_server();
    $event->log("openqrm_new_resource", $_SERVER['REQUEST_TIME'], 5, "openqrm-dhcpd-resource-hook.php", "Handling {$cmd} event {$resource_id}/{$resource_ip}/{$resource_subnet}/{$resource_mac}", "", "", 0, 0, $resource_id);
    switch ($cmd) {
        case "add":
            $openqrm_server->send_command($OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/dhcpd/bin/openqrm-dhcpd-manager add -d " . $resource_id . " -m " . $resource_mac . " -i " . $resource_ip . " -s " . $resource_subnet . " -u " . $openqrm_admin_user->name . " -p " . $openqrm_admin_user->password . " --openqrm-cmd-mode background");
            break;
        case "remove":
            $openqrm_server->send_command("{$OPENQRM_SERVER_BASE_DIR}/openqrm/plugins/dhcpd/bin/openqrm-dhcpd-manager remove -d " . $resource_id . " -m " . $resource_mac . " -i " . $resource_ip . " -s " . $resource_subnet . " -u " . $openqrm_admin_user->name . " -p " . $openqrm_admin_user->password . " --openqrm-cmd-mode background");
            break;
    }
}
コード例 #4
0
function openqrm_template_appliance($cmd, $appliance_fields)
{
    global $event;
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    $appliance_id = $appliance_fields["appliance_id"];
    $appliance_name = $appliance_fields["appliance_name"];
    $resource = new resource();
    $resource->get_instance_by_id($appliance_fields["appliance_resources"]);
    $appliance_ip = $resource->ip;
    // check appliance values, maybe we are in update and they are incomplete
    if ($resource->id == "-1" || $resource->id == "") {
        return;
    }
    $event->log("openqrm_new_appliance", $_SERVER['REQUEST_TIME'], 5, "openqrm-template-appliance-hook.php", "Handling {$cmd} event {$appliance_id}/{$appliance_name}/{$appliance_ip}", "", "", 0, 0, $appliance_id);
    switch ($cmd) {
        case "start":
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command($OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/template/bin/openqrm-template-manager start " . $appliance_id . " " . $appliance_name . " " . $appliance_ip . " --openqrm-cmd-mode background");
            break;
        case "stop":
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command($OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/template/bin/openqrm-template-manager stop " . $appliance_id . " " . $appliance_name . " " . $appliance_ip . " --openqrm-cmd-mode background");
            break;
    }
}
コード例 #5
0
function openqrm_nagios3_appliance($cmd, $appliance_fields)
{
    global $event;
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    $appliance_id = $appliance_fields["appliance_id"];
    $appliance = new appliance();
    $appliance->get_instance_by_id($appliance_id);
    $appliance_name = $appliance_fields["appliance_name"];
    $resource = new resource();
    $resource->get_instance_by_id($appliance_fields["appliance_resources"]);
    $appliance_ip = $resource->ip;
    // check appliance values, maybe we are in update and they are incomplete
    if ($appliance->imageid == 1) {
        return;
    }
    if ($resource->id == "-1" || $resource->id == "") {
        return;
    }
    // get the nagios service checks
    $nagios_host = new nagios3_host();
    $nagios_host->get_instance_by_appliance_id($appliance_id);
    $active_nagios_services = explode(',', $nagios_host->appliance_services);
    $nagios_service_list = '';
    foreach ($active_nagios_services as $service_id) {
        $nagios_service = new nagios3_service();
        $nagios_service->get_instance_by_id($service_id);
        $nagios_service_list = $nagios_service_list . "," . $nagios_service->port;
    }
    $nagios_service_list = substr($nagios_service_list, 1);
    if (!strlen($nagios_service_list)) {
        $event->log("openqrm_new_appliance", $_SERVER['REQUEST_TIME'], 5, "openqrm-nagios3-appliance-hook.php", "Appliance {$appliance_id} has no configured nagios services, skipping...", "", "", 0, 0, $appliance_id);
        return 0;
    }
    $event->log("openqrm_new_appliance", $_SERVER['REQUEST_TIME'], 5, "openqrm-nagios3-appliance-hook.php", "Handling {$cmd} event {$appliance_id}/{$appliance_name}/{$appliance_ip}", "", "", 0, 0, $appliance_id);
    switch ($cmd) {
        case "start":
            $nagios_appliance_start_cmd = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/nagios3/bin/openqrm-nagios-manager add -n " . $appliance_name . " -i " . $resource->ip . " -p " . $nagios_service_list . " --openqrm-cmd-mode background";
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command($nagios_appliance_start_cmd, NULL, true);
            break;
        case "stop":
            $nagios_appliance_stop_cmd = "{$OPENQRM_SERVER_BASE_DIR}/openqrm/plugins/nagios3/bin/openqrm-nagios-manager remove_host -n " . $appliance_name . " --openqrm-cmd-mode background";
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command($nagios_appliance_stop_cmd, NULL, true);
            break;
        case "remove":
            $nagios_appliance_stop_cmd = "{$OPENQRM_SERVER_BASE_DIR}/openqrm/plugins/nagios3/bin/openqrm-nagios-manager remove_host -n " . $appliance_name . " --openqrm-cmd-mode background";
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command($nagios_appliance_stop_cmd, NULL, true);
            // remove nagios_host from the db
            $nagios_host->remove_by_appliance_id($appliance_id);
            break;
    }
}
コード例 #6
0
 function action()
 {
     $msg = '';
     $event = new event();
     $server = new openqrm_server();
     $plugin = new plugin();
     $identifier = $this->response->html->request()->get($this->identifier_name);
     $enabled = $plugin->enabled();
     if ($identifier !== '') {
         foreach ($identifier as $id) {
             if (in_array($id, $enabled)) {
                 $return = $server->send_command("openqrm_server_plugin_command {$id} start");
                 if ($return === true) {
                     if ($this->__check($id)) {
                         $msg .= sprintf($this->lang['msg'], $id) . '<br>';
                     } else {
                         $msg .= sprintf($this->lang['error_timeout'], $id) . '<br>';
                     }
                 } else {
                     $msg .= sprintf($this->lang['error_start'], $id) . '<br>';
                 }
             }
         }
     }
     $this->response->redirect($this->response->get_url($this->actions_name, 'select', $this->message_param, $msg));
 }
コード例 #7
0
 function action()
 {
     $msg = '';
     $event = new event();
     $server = new openqrm_server();
     $plugin = new plugin();
     $identifier = $this->response->html->request()->get($this->identifier_name);
     $enabled = $plugin->enabled();
     if ($identifier !== '') {
         foreach ($identifier as $id) {
             if (in_array($id, $enabled)) {
                 $error = false;
                 // check dependencies
                 foreach ($enabled as $v) {
                     if ($v !== $id) {
                         $tmp = $plugin->get_dependencies($v);
                         if ($tmp !== '' && isset($tmp['dependencies']) && $tmp['dependencies'] !== '') {
                             if (strpos($tmp['dependencies'], $id) !== false) {
                                 $msg .= sprintf($this->lang['error_dependencies'], $id, $v) . '<br>';
                                 $error = true;
                             }
                         }
                     }
                 }
                 // handle plugin type
                 if ($error === false) {
                     $tmp = $plugin->get_config($id);
                     switch ($tmp['type']) {
                         case 'storage':
                             $storage = new storage();
                             $types = $storage->get_storage_types();
                             $deployment = new deployment();
                             $dep = $deployment->get_id_by_storagetype($id);
                             foreach ($dep as $val) {
                                 if (in_array($val['value'], $types)) {
                                     $msg .= sprintf($this->lang['error_in_use'], $id) . '<br>';
                                     $error = true;
                                 }
                             }
                             break;
                     }
                 }
                 if ($error === false) {
                     $return = $server->send_command("openqrm_server_plugin_command " . $id . " uninstall " . $GLOBALS['OPENQRM_ADMIN']->name . ' ' . $GLOBALS['OPENQRM_ADMIN']->password);
                     if ($return === true) {
                         if ($this->__check($id)) {
                             $msg .= sprintf($this->lang['msg'], $id) . '<br>';
                         } else {
                             $msg .= sprintf($this->lang['error_timeout'], $id) . '<br>';
                         }
                     } else {
                         $msg .= sprintf($this->lang['error_disable'], $id) . '<br>';
                     }
                 }
             }
         }
     }
     $this->response->redirect($this->response->get_url($this->actions_name, 'select', $this->message_param, $msg));
 }
コード例 #8
0
function openqrm_tftpd_resource($cmd, $resource_fields)
{
    global $event;
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    $resource_id = $resource_fields["resource_id"];
    $resource_ip = $resource_fields["resource_ip"];
    $resource_mac = $resource_fields["resource_mac"];
    $event->log("openqrm_new_resource", $_SERVER['REQUEST_TIME'], 5, "openqrm-tftpd-resource-hook.php", "Handling {$cmd} event {$resource_id}/{$resource_ip}/{$resource_mac}", "", "", 0, 0, $resource_id);
    switch ($cmd) {
        case "remove":
            // we remove the pxe config file; the database removal is handled in the resource class
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command("openqrm_remove_resource {$resource_id} {$resource_mac}");
            break;
    }
}
コード例 #9
0
function openqrm_puppet_resource($cmd, $resource_fields)
{
    global $event;
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    $resource_id = $resource_fields["resource_id"];
    $resource = new resource();
    $resource->get_instance_by_id($resource_id);
    $resource_ip = $resource->ip;
    $resource_name = $resource->hostname;
    $event->log("openqrm_puppet_resource", $_SERVER['REQUEST_TIME'], 5, "openqrm-puppet-resource-hook.php", "Handling {$cmd} event {$resource_id}/{$resource_name}/{$resource_ip}", "", "", 0, 0, $resource_id);
    // we do only care if we serving an appliance
    $appliance = new appliance();
    $appliance_record_set = array();
    $appliance_id_array = array();
    $appliance_record_set = $appliance->get_all_ids();
    // the appliance_array from getlist is a 2-dimensional array
    foreach ($appliance_record_set as $index => $appliance_id_array) {
        foreach ($appliance_id_array as $index => $id) {
            $tapp = new appliance();
            $tapp->get_instance_by_id($id);
            $tapp_state = $tapp->state;
            $tapp_resources = $tapp->resources;
            if (!strcmp($tapp_state, "active")) {
                if ($tapp_resources == $resource_id) {
                    // we found the resources active appliance, running the cmd
                    $appliance_name = $tapp->name;
                    switch ($cmd) {
                        case "start":
                            $openqrm_server = new openqrm_server();
                            $openqrm_server->send_command("{$OPENQRM_SERVER_BASE_DIR}/openqrm/plugins/puppet/bin/openqrm-puppet-manager start {$id} {$appliance_name} {$resource_ip} --openqrm-cmd-mode background");
                            break;
                        case "stop":
                            $openqrm_server = new openqrm_server();
                            $openqrm_server->send_command("{$OPENQRM_SERVER_BASE_DIR}/openqrm/plugins/puppet/bin/openqrm-puppet-manager stop {$id} {$appliance_name} {$resource_ip} --openqrm-cmd-mode background");
                            break;
                    }
                }
            }
        }
    }
}
コード例 #10
0
 function action()
 {
     $response = $this->update();
     if (isset($response->error)) {
         $_REQUEST[$this->message_param] = $response->error;
     }
     if (isset($response->msg)) {
         $this->response->redirect($this->response->get_url($this->actions_name, 'select', $this->message_param, $response->msg));
     }
     $external_portal_name = $this->cloud_config->get_value_by_key('external_portal_url');
     if (!strlen($external_portal_name)) {
         $openqrm_server = new openqrm_server();
         $openqrm_server_ip = $openqrm_server->get_ip_address();
         $external_portal_name = "http://" . $openqrm_server_ip . "/cloud-portal";
     }
     $template = $response->html->template($this->tpldir . "/cloud-usergroup-update.tpl.php");
     $template->add(sprintf($this->lang['cloud_usergroup_update_title'], $response->name), 'title');
     $template->add($external_portal_name, 'external_portal_name');
     $template->add($response->form->get_elements());
     $template->add($response->html->thisfile, "thisfile");
     $template->group_elements(array('param_' => 'form'));
     return $template;
 }
コード例 #11
0
function openqrm_collectd_appliance($cmd, $appliance_fields)
{
    global $event;
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    $appliance_id = $appliance_fields["appliance_id"];
    $appliance_name = $appliance_fields["appliance_name"];
    $resource = new resource();
    $resource->get_instance_by_id($appliance_fields["appliance_resources"]);
    $appliance_ip = $resource->ip;
    $event->log("openqrm_new_appliance", $_SERVER['REQUEST_TIME'], 5, "openqrm-collectd-appliance-hook.php", "Handling {$cmd} event {$appliance_id}/{$appliance_name}/{$appliance_ip}", "", "", 0, 0, $appliance_id);
    // we remove the stats on add and remove
    switch ($cmd) {
        case "add":
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command($OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/collectd/bin/openqrm-collectd-manager remove " . $appliance_name . " now --openqrm-cmd-mode background");
            break;
        case "remove":
            $openqrm_server = new openqrm_server();
            $openqrm_server->send_command($OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/collectd/bin/openqrm-collectd-manager remove " . $appliance_name . " now --openqrm-cmd-mode background");
            break;
    }
}
コード例 #12
0
 function select()
 {
     $response = $this->get_response();
     $form = $response->form;
     if (!$form->get_errors() && $this->response->submit()) {
         $request = $form->get_request();
         $hc = $response->hc;
         $image = $response->image;
         $storage = new storage();
         $storage->get_instance_by_id($image->storageid);
         $resource = new resource();
         $resource->get_instance_by_id($storage->resource_id);
         $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-migration export_image';
         $command .= ' -i ' . $hc->id;
         $command .= ' -n ' . $hc->account_name;
         $command .= ' -O ' . $hc->access_key;
         $command .= ' -W ' . $hc->secret_key;
         $command .= ' -t ' . $hc->account_type;
         $command .= ' -s ' . $resource->ip . ":" . $image->rootdevice;
         $command .= ' -m ' . $request['size'];
         $command .= ' -a ' . $request['name'];
         $command .= ' -r ' . $request['arch'];
         $command .= ' -u ' . $request['user_id'];
         $command .= ' -y ' . $request['private_key_file'];
         $command .= ' -z ' . $request['public_key_file'];
         $command .= ' -l ' . $this->region;
         $command .= ' --openqrm-ui-user ' . $this->user->name;
         $command .= ' --openqrm-cmd-mode background';
         $server = new openqrm_server();
         $server->send_command($command, NULL, true);
         $response->msg = sprintf($this->lang['msg_exported'], $image->name, $hc->account_name);
         // $ev = new event();
         // $ev->log("hybrid_cloud_monitor", $_SERVER['REQUEST_TIME'], 2, "hybrid-cloud-monitor-hook", $command, "", "", 0, 0, 0);
     }
     return $response;
 }
コード例 #13
0
 function add()
 {
     $response = $this->get_response();
     $form = $response->form;
     $errors = array();
     if (!$form->get_errors() && $this->response->submit()) {
         $group_name = $form->get_request('name');
         if (!strlen($group_name)) {
             $errors[] = $this->lang['error_name'];
         }
         $group_description = $form->get_request('description');
         if (!strlen($group_description)) {
             $errors[] = $this->lang['error_description'];
         }
         $group_vpc_parameter = '';
         $group_vpc = $form->get_request('vpc');
         if (strlen($group_vpc)) {
             $group_vpc_parameter = ' -c ' . $group_vpc;
         }
         if (count($errors) > 0 || $form->get_errors()) {
             $response->error = join('<br>', $errors);
         } else {
             require_once $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/class/hybrid-cloud.class.php';
             $hc = new hybrid_cloud();
             $hc->get_instance_by_id($this->id);
             $openqrm = new openqrm_server();
             $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-group create';
             $command .= ' -i ' . $hc->id;
             $command .= ' -n ' . $hc->account_name;
             $command .= ' -O ' . $hc->access_key;
             $command .= ' -W ' . $hc->secret_key;
             $command .= ' -t ' . $hc->account_type;
             $command .= ' -ar ' . $this->region;
             $command .= ' -gn ' . $group_name;
             $command .= ' -gd ' . $group_description;
             $command .= $group_vpc_parameter;
             $command .= ' --openqrm-ui-user ' . $this->user->name;
             $command .= ' --openqrm-cmd-mode background';
             $openqrm->send_command($command, NULL, true);
             sleep(4);
             $response->msg = sprintf($this->lang['msg_added_group'], $group_name);
             //$ev = new event();
             //$ev->log("hybrid_cloud_monitor", $_SERVER['REQUEST_TIME'], 2, "hybrid-cloud-monitor-hook", $command, "", "", 0, 0, 0);
         }
     }
     return $response;
 }
コード例 #14
0
ファイル: cloudvm.class.php プロジェクト: kelubo/OpenQRM
 function create($cu_id, $virtualization_type, $name, $mac, $additional_nics, $cpu, $memory, $disk, $timeout, $vncpassword, $source_image_id = null)
 {
     global $OPENQRM_SERVER_BASE_DIR;
     global $OPENQRM_SERVER_IP_ADDRESS;
     global $OPENQRM_EXEC_PORT;
     global $RESOURCE_INFO_TABLE;
     global $host_start_from_off_timeout;
     global $RootDir;
     $this->init($timeout);
     global $event;
     $vmware_mac_address_space = "00:50:56";
     $vtype = new virtualization();
     $vtype->get_instance_by_id($virtualization_type);
     $virtualization_plugin_name = $vtype->get_plugin_name();
     $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Trying to create new VM type {$virtualization_type} ({$virtualization_plugin_name}) {$mac}/{$cpu}/{$memory}/{$disk}", "", "", 0, 0, 0);
     // here we need to find out if we have a virtualization host providing the type of VMs as requested
     // find out the host virtualization type via the plugin name
     $vhost_type = new virtualization();
     $vhost_type->get_instance_by_type($virtualization_plugin_name);
     $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Trying to find a virtualization host from type {$vhost_type->type} {$vhost_type->name}", "", "", 0, 0, 0);
     // check if resource-pooling is enabled
     $cp_conf = new cloudconfig();
     $show_resource_pools = $cp_conf->get_value(25);
     // resource_pools enabled ?
     $vm_provision_delay = $cp_conf->get_value(40);
     // delay provisioning of VMs ?
     $vm_loadbalance_algorithm = $cp_conf->get_value(41);
     // which LB to select ?
     // for all in appliance list, find virtualization host appliances
     $appliance_tmp = new appliance();
     $appliance_id_list = $appliance_tmp->get_all_ids();
     $active_appliance_list = array();
     $active_appliance_resource_list = array();
     foreach ($appliance_id_list as $id_arr) {
         foreach ($id_arr as $id) {
             $appliance = new appliance();
             $appliance->get_instance_by_id($id);
             // active ?
             if ($appliance->stoptime == 0 || $appliance->resources == 0) {
                 if ($appliance->virtualization == $vhost_type->id) {
                     // we have found an active appliance from the right virtualization type
                     // Now we check that its resource is active and not in error
                     $cvm_resource = new resource();
                     $cvm_resource->get_instance_by_id($appliance->resources);
                     if (strcmp($cvm_resource->state, "active")) {
                         continue;
                     }
                     // here we check if there is still enough space
                     // to create the new VM -> max_vm setting per resource
                     $res_hostlimit = new cloudhostlimit();
                     $res_hostlimit->get_instance_by_resource($appliance->resources);
                     if (strlen($res_hostlimit->id)) {
                         if ($res_hostlimit->max_vms >= 0) {
                             $new_current_vms = $res_hostlimit->current_vms + 1;
                             if ($new_current_vms > $res_hostlimit->max_vms) {
                                 $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Hostlimit max_vm is reached for resource {$appliance->resources}", "", "", 0, 0, $appliance->resources);
                                 continue;
                             }
                         }
                     }
                     // resource pooling enabled ?
                     if (strcmp($show_resource_pools, "true")) {
                         // disabled, add any appliance from the right virtualization type
                         $active_appliance_list[] .= $id;
                         $active_appliance_resource_list[] .= $appliance->resources;
                         //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- resource pooling is disabled", "", "", 0, 0, 0);
                     } else {
                         //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- resource pooling is enabled $appliance->resources", "", "", 0, 0, 0);
                         // resource pooling enabled, check to which user group the resource belongs to
                         $private_resource = new cloudrespool();
                         $private_resource->get_instance_by_resource($appliance->resources);
                         // is this resource configured in the resource pools ?
                         //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- resource pool id $private_resource->id !", "", "", 0, 0, 0);
                         if (strlen($private_resource->id)) {
                             //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- resource $appliance->resources is in a resource pool", "", "", 0, 0, 0);
                             // is it hidden ?
                             if ($private_resource->cg_id >= 0) {
                                 //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- resource $appliance->resources is also configured in resource pool (not hidden)", "", "", 0, 0, 0);
                                 $cloud_user = new clouduser();
                                 $cloud_user->get_instance_by_id($cu_id);
                                 $cloud_user_group = new cloudusergroup();
                                 $cloud_user_group->get_instance_by_id($cloud_user->cg_id);
                                 //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- we have found the users group $cloud_user_group->id", "", "", 0, 0, 0);
                                 // does it really belongs to the users group ?
                                 if ($private_resource->cg_id == $cloud_user_group->id) {
                                     // resource belongs to the users group, add appliance to list
                                     //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- adding appliance $id   ", "", "", 0, 0, 0);
                                     $active_appliance_list[] .= $id;
                                     $active_appliance_resource_list[] .= $appliance->resources;
                                     //} else {
                                     //    $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Appliance $id (resource $appliance->resources) is NOT in dedicated for the users group", "", "", 0, 0, 0);
                                 }
                                 //} else {
                                 //    $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Appliance $id (resource $appliance->resources) is marked as hidden", "", "", 0, 0, 0);
                             }
                         }
                     }
                 }
             }
         }
     }
     // did we found any active host ?
     if (count($active_appliance_list) < 1) {
         $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Warning ! There is no active virtualization host type {$vhost_type->name} available to bring up a new VM", "", "", 0, 0, 0);
         $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Notice : Trying to find a Host which can start-from-off .....", "", "", 0, 0, 0);
         // if this method finds a host it will block until the host is up + active
         $cloud_host_start_from_off = new cloudhoststartfromoff();
         $start_from_off_appliance_id = $cloud_host_start_from_off->find_host_to_start_from_off($vhost_type->id, $show_resource_pools, $cu_id, $host_start_from_off_timeout);
         if ($start_from_off_appliance_id > 0) {
             //$event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "------- adding appliance $id   ", "", "", 0, 0, 0);
             $active_appliance_list[] .= $start_from_off_appliance_id;
             // add to active resource list
             $start_from_off_appliance = new appliance();
             $start_from_off_appliance->get_instance_by_id($start_from_off_appliance_id);
             $active_appliance_resource_list[] .= $start_from_off_appliance->resources;
         } else {
             // here we did not found any host to start-from-off
             $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Warning ! Could not find any virtualization host type {$vhost_type->name} to start-from-off", "", "", 0, 0, 0);
             $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Warning ! Giving up trying to start a new VM type {$vhost_type->name}", "", "", 0, 0, 0);
             return false;
         }
     }
     // ! for all virt-localboot VMs we need to make sure the VM is created on
     // ! the same host as the image is located, for all others we try to lb
     $less_load_resource_id = -1;
     if (strstr($vtype->type, "-vm-local")) {
         $origin_appliance = new appliance();
         $origin_appliance->get_instance_by_name($name);
         // if we have a cloudappliance already this create is coming from unpause
         // The host to create the new VM on must be the image storage resource
         $vstorage_cloud_app = new cloudappliance();
         $vstorage_cloud_app->get_instance_by_appliance_id($origin_appliance->id);
         if (strlen($vstorage_cloud_app->id)) {
             $vstorage_image = new image();
             $vstorage_image->get_instance_by_id($origin_appliance->imageid);
             $vstorage = new storage();
             $vstorage->get_instance_by_id($vstorage_image->storageid);
             $vstorage_host_res_id = $vstorage->resource_id;
             // check if the origin host is in the active appliances we have found
             if (in_array($vstorage_host_res_id, $active_appliance_resource_list)) {
                 $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Origin host {$vstorage_host_res_id} is active. Creating the new VM", "", "", 0, 0, 0);
                 $resource = new resource();
                 $resource->get_instance_by_id($vstorage_host_res_id);
                 $less_load_resource_id = $vstorage_host_res_id;
             } else {
                 $event->log("create", $_SERVER['REQUEST_TIME'], 2, "cloudvm.class.php", "Origin host {$vstorage_host_res_id} is not active. Not creating the new VM", "", "", 0, 0, 0);
             }
         } else {
             // if we do not have a cloudappliance yet we can (should) loadbalance the create VM request
             $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Using Loadbalancing Algorithm " . $vm_loadbalance_algorithm . " for creating the new VM", "", "", 0, 0, 0);
             // the cloud-deployment hook of the virt-localboot VM will adapt the image storage id to the host id
             switch ($vm_loadbalance_algorithm) {
                 case '0':
                     $less_load_resource_id = $this->vm_balance_load($active_appliance_list);
                     break;
                 case '1':
                     $less_load_resource_id = $this->vm_balance_memory($active_appliance_list, $memory);
                     break;
                 case '2':
                     $less_load_resource_id = $this->vm_balance_random($active_appliance_list);
                     break;
                 case '3':
                     $less_load_resource_id = $this->vm_balance_first_available($active_appliance_list);
                     break;
                 default:
                     $less_load_resource_id = $this->vm_balance_load($active_appliance_list);
                     break;
             }
         }
     } else {
         $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Using Loadbalancing Algorithm " . $vm_loadbalance_algorithm . " for creating the new VM", "", "", 0, 0, 0);
         switch ($vm_loadbalance_algorithm) {
             case '0':
                 $less_load_resource_id = $this->vm_balance_load($active_appliance_list);
                 break;
             case '1':
                 $less_load_resource_id = $this->vm_balance_memory($active_appliance_list, $memory);
                 break;
             case '2':
                 $less_load_resource_id = $this->vm_balance_random($active_appliance_list);
                 break;
             case '3':
                 $less_load_resource_id = $this->vm_balance_first_available($active_appliance_list);
                 break;
             default:
                 $less_load_resource_id = $this->vm_balance_load($active_appliance_list);
                 break;
         }
     }
     if ($less_load_resource_id >= 0) {
         $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Found Virtualization host resource {$less_load_resource_id} as the target for the new VM ", "", "", 0, 0, 0);
     }
     // additional network cards
     if ($additional_nics > 0) {
         $anic = 1;
         $additional_nic_str = "";
         $mac_gen_res = new resource();
         while ($anic <= $additional_nics) {
             $mac_gen_res->generate_mac();
             switch ($virtualization_plugin_name) {
                 # VMware VMs need to get special macs
                 case 'vmware-esx':
                     $nic_nr = $anic;
                     $suggested_mac = $mac_gen_res->mac;
                     $new_forth_byte_first_bit = rand(1, 3);
                     $mac_gen_res_vmw = strtolower($vmware_mac_address_space . ":" . substr($suggested_mac, 9));
                     $mac_gen_res_vmw = substr_replace($mac_gen_res_vmw, $new_forth_byte_first_bit, 9, 1);
                     $additional_nic_str .= " -m" . $nic_nr . " " . $mac_gen_res_vmw;
                     break;
                     # VMs network parameter starts with -m1
                 # VMs network parameter starts with -m1
                 default:
                     $nic_nr = $anic;
                     $additional_nic_str .= " -m" . $nic_nr . " " . $mac_gen_res->mac;
                     break;
             }
             $anic++;
         }
     }
     // swap, for the cloud VMs we simply calculate memory * 2
     $swap = $memory * 2;
     // start the VM on the appliance resource
     $host_resource = new resource();
     $host_resource->get_instance_by_id($less_load_resource_id);
     $host_resource_ip = $host_resource->ip;
     // we need to have an openQRM server object too since some of the
     // virtualization commands are sent from openQRM directly
     $openqrm = new openqrm_server();
     // create the new resource + setting the virtualization type
     $vm_resource_ip = "0.0.0.0";
     // add to openQRM database
     $vm_resource_fields["resource_ip"] = $vm_resource_ip;
     $vm_resource_fields["resource_mac"] = $mac;
     $vm_resource_fields["resource_localboot"] = 0;
     $vm_resource_fields["resource_vtype"] = $vtype->id;
     $vm_resource_fields["resource_vhostid"] = $less_load_resource_id;
     $vm_resource_fields["resource_vname"] = $name;
     $new_resource_id = (int) str_replace(".", "", str_pad(microtime(true), 15, "0"));
     $vm_resource_fields["resource_id"] = $new_resource_id;
     $host_resource->add($vm_resource_fields);
     // send new-resource command now after the resource is created logically
     $openqrm->send_command("openqrm_server_add_resource {$new_resource_id} {$mac} {$vm_resource_ip}");
     // let the new resource commands settle
     sleep(10);
     // 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("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class", "Found plugin {$virtualization_plugin_name} handling to create the VM.", "", "", 0, 0, $new_resource_id);
         require_once "{$virtualization_cloud_hook}";
         $virtualization_method = "create_" . $vtype->type;
         $virtualization_method = str_replace("-", "_", $virtualization_method);
         $virtualization_method($less_load_resource_id, $name, $mac, $memory, $cpu, $swap, $additional_nic_str, $vncpassword, $source_image_id);
     } else {
         $event->log("cloud", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class", "Do not know how to create VM from type {$virtualization_plugin_name}.", "", "", 0, 0, 0);
         // remove resource object
         $vm_resource = new resource();
         $vm_resource->get_instance_by_id($new_resource_id);
         $vm_resource->remove($new_resource_id, $mac);
         return false;
     }
     // update hostlimits quite early to avoid overloading a Host with non-starting VMs
     // add or update hostlimits
     $res_hostlimit = new cloudhostlimit();
     $res_hostlimit->get_instance_by_resource($host_resource->id);
     if (strlen($res_hostlimit->id)) {
         // update
         $current_vms = $res_hostlimit->current_vms + 1;
         $cloud_hostlimit_fields["hl_current_vms"] = $current_vms;
         $res_hostlimit->update($res_hostlimit->id, $cloud_hostlimit_fields);
     } else {
         // add
         $cloud_hostlimit_fields["hl_id"] = (int) str_replace(".", "", str_pad(microtime(true), 15, "0"));
         $cloud_hostlimit_fields["hl_resource_id"] = $host_resource->id;
         $cloud_hostlimit_fields["hl_max_vms"] = -1;
         $cloud_hostlimit_fields["hl_current_vms"] = 1;
         $res_hostlimit->add($cloud_hostlimit_fields);
     }
     $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "New VM created with resource id " . $new_resource_id . " and started. Waiting now until it is active/idle", "", "", 0, 0, 0);
     if ($vm_provision_delay > 0) {
         $event->log("create", $_SERVER['REQUEST_TIME'], 5, "cloudvm.class.php", "Delaying the provisioning of resource id " . $new_resource_id . " for " . $vm_provision_delay . " seconds.", "", "", 0, 0, 0);
         sleep($vm_provision_delay);
     }
     // setting this object resource id as return state
     $this->resource_id = $new_resource_id;
 }
コード例 #15
0
 function edit()
 {
     $h = array();
     $h['state']['title'] = $this->lang['table_state'];
     $h['state']['sortable'] = false;
     $h['name']['title'] = $this->lang['table_name'];
     $h['name']['hidden'] = true;
     $h['region']['title'] = $this->lang['table_region'];
     $h['region']['hidden'] = true;
     $h['ami']['title'] = $this->lang['table_ami'];
     $h['ami']['hidden'] = true;
     $h['type']['title'] = $this->lang['table_type'];
     $h['type']['hidden'] = true;
     $h['data']['title'] = '&#160;';
     $h['data']['sortable'] = false;
     $h['public']['title'] = $this->lang['table_public_ip'];
     $h['private']['title'] = $this->lang['table_private_ip'];
     $h['remove']['title'] = '&#160;';
     $h['remove']['sortable'] = false;
     $a = $this->response->html->a();
     $a->label = $this->lang['action_add_local_vm'];
     $a->css = 'add';
     $a->handler = 'onclick="wait();"';
     $a->href = $this->response->get_url($this->actions_name, "add");
     $d['add_local_vm'] = $a->get_string();
     $content = array();
     $file = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/hybrid-cloud-stat/' . $this->id . '.describe_instances.log';
     if ($this->file->exists($file)) {
         $this->file->remove($file);
     }
     $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 describe';
     $command .= ' -i ' . $this->hc->id;
     $command .= ' -n ' . $this->hc->account_name;
     $command .= ' -t ' . $this->hc->account_type;
     $command .= $hc_authentication;
     $command .= ' --openqrm-ui-user ' . $this->user->name;
     $command .= ' --openqrm-cmd-mode background';
     $server = new openqrm_server();
     $server->send_command($command, NULL, true);
     while (!$this->file->exists($file)) {
         usleep(10000);
         // sleep 10ms to unload the CPU
         clearstatcache();
     }
     $content = $this->file->get_contents($file);
     $content = explode("\n", $content);
     $b = array();
     foreach ($content as $k => $v) {
         if ($v !== '') {
             // e.g. INSTANCE@i-ec3667a1@ami-02f4fe76@ec2-54-216-10-23.eu-west-1.compute.amazonaws.com@ip-10-234-109-57.eu-west-1.compute.internal@running@home@0@@m1.small@2013-06-25T16:58:30+0000@eu-west-1a@aki-71665e05@@@monitoring-disabled@54.216.10.23@10.234.109.57@@@instance-store@@@@@paravirtual@xen@@sg-9d664de9@default@false@
             $tmp = explode('@', $v);
             $name = $tmp[1];
             $ami = $tmp[2];
             $public_hostname = $tmp[3];
             $private_hostname = $tmp[4];
             $state = $tmp[5];
             $keypair = $tmp[6];
             $unknown1 = $tmp[7];
             $unknown2 = $tmp[8];
             $type = $tmp[9];
             $date = $tmp[10];
             $region = $tmp[11];
             $unknown4 = $tmp[12];
             $unknown5 = $tmp[13];
             $unknown6 = $tmp[14];
             $monitoring = $tmp[15];
             $public_ip = $this->hc->format_ip_address($tmp[16]);
             $private_ip = $this->hc->format_ip_address($tmp[17]);
             $vpc = $tmp[18];
             $subnet = $tmp[19];
             $store = $tmp[20];
             $unknown9 = $tmp[21];
             $unknown10 = $tmp[22];
             $unknown11 = $tmp[23];
             $unknown12 = $tmp[24];
             $hvm = $tmp[25];
             $virt_type = $tmp[26];
             $mac = '';
             // remove
             $remove_instance = '';
             $import_str = '';
             if ($state == 'idle') {
                 $mac = $tmp[30];
                 $a = $this->response->html->a();
                 $a->label = $this->lang['action_remove_vm'];
                 $a->css = 'remove';
                 $a->handler = 'onclick="wait();"';
                 $a->href = $this->response->get_url($this->actions_name, "remove") . '&instance_name=' . $name . '&instance_mac=' . $mac;
                 $remove_instance = $a->get_string();
                 $state_icon = '<span class="pill idle">idle</span>';
             } else {
                 if ($state == 'running') {
                     $state_icon = '<span class="pill active">active</span>';
                     // import
                     $import_resource = new resource();
                     $import_resource->get_instance_id_by_hostname($name);
                     if ($import_resource->id == '') {
                         // import add
                         if (!strlen($mac)) {
                             $import_resource->generate_mac();
                             $mac = $import_resource->mac;
                         }
                         $link = $this->response->get_url($this->actions_name, "import");
                         $link .= '&instance_command=add&instance_name=' . $name;
                         $link .= '&instance_mac=' . $mac;
                         $link .= '&instance_public_ip=' . $public_ip;
                         $link .= '&instance_type=' . $type;
                         $link .= '&instance_keypair=' . $keypair;
                         $link .= '&instance_region=' . $region;
                         $link .= '&instance_ami=' . $ami;
                         $link .= '&instance_subnet=' . $subnet;
                         $a = $this->response->html->a();
                         $a->label = $this->lang['action_import_instance'];
                         $a->title = $this->lang['action_import_instance_title'];
                         $a->css = 'add';
                         $a->handler = 'onclick="wait();"';
                         $a->href = $link;
                         $import_str = $a->get_string();
                     }
                 } else {
                     $state_icon = '<span class="pill ' . $state . '">' . $state . '</span>';
                 }
             }
             $remove = $remove_instance . $import_str;
             $data = '<b>' . $this->lang['table_name'] . '</b>: ' . $name . '<br>';
             $data .= '<b>' . $this->lang['table_region'] . '</b>: ' . $region . '<br>';
             $data .= '<b>' . $this->lang['table_ami'] . '</b>: ' . $ami . '<br>';
             $data .= '<b>' . $this->lang['table_type'] . '</b>: ' . $type;
             $b[] = array('state' => $state_icon, 'name' => $name, 'region' => $region, 'ami' => $ami, 'type' => $type, 'data' => $data, 'public' => $public_ip, 'private' => $private_ip, 'remove' => $remove);
         }
     }
     $params = $this->response->get_array($this->actions_name, 'edit');
     $table = $this->response->html->tablebuilder('hybridcloud_vm_edit', $params);
     $table->form_action = $this->response->html->thisfile;
     $table->offset = 0;
     $table->sort = 'name';
     $table->limit = 10;
     $table->order = 'ASC';
     $table->id = 'Tabelle';
     $table->css = 'htmlobject_table';
     $table->border = 1;
     $table->cellspacing = 0;
     $table->cellpadding = 3;
     $table->autosort = true;
     $table->sort_link = false;
     $table->max = count($b);
     $table->head = $h;
     $table->body = $b;
     $d['name'] = $this->hc->account_name;
     $d['form'] = $this->response->get_form($this->actions_name, 'import', false)->get_elements();
     $d['table'] = $table;
     return $d;
 }
コード例 #16
0
function fence_hybrid_cloud_vm_local($host_resource_id, $mac)
{
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    global $RESOURCE_INFO_TABLE;
    global $event;
    $event->log("fence_hybrid_cloud_vm_local", $_SERVER['REQUEST_TIME'], 5, "hybrid-cloud-ha-hook", "Fencing Cloud VM " . $mac, "", "", 0, 0, 0);
    $origin_resource = new resource();
    $origin_resource->get_instance_by_mac($mac);
    // get hybrid-cloud account from origin resource
    $hybrid_acl_id = $origin_resource->get_resource_capabilities("HCACL");
    $hc = new hybrid_cloud();
    $hc->get_instance_by_id($hybrid_acl_id);
    $hc_authentication = '';
    if ($hc->account_type == 'aws' || $hc->account_type == 'euca') {
        $hc_authentication .= ' -O ' . $hc->access_key;
        $hc_authentication .= ' -W ' . $hc->secret_key;
    }
    if ($hc->account_type == 'lc-openstack') {
        $hc_authentication .= ' -u ' . $hc->username;
        $hc_authentication .= ' -p ' . $hc->password;
        $hc_authentication .= ' -q ' . $hc->host;
        $hc_authentication .= ' -x ' . $hc->port;
        $hc_authentication .= ' -g ' . $hc->tenant;
        $hc_authentication .= ' -e ' . $hc->endpoint;
    }
    $openqrm = new openqrm_server();
    $command = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-vm fence ";
    $command .= ' -i ' . $hc->id;
    $command .= ' -n ' . $hc->account_name;
    $command .= ' -t ' . $hc->account_type;
    $command .= $hc_authentication;
    $command .= ' -im ' . $mac;
    $command .= ' --openqrm-cmd-mode background';
    $event->log("fence_hybrid_cloud_vm_local", $_SERVER['REQUEST_TIME'], 5, "hybrid-cloud-ha-hook", "Running {$command}", "", "", 0, 0, 0);
    $openqrm->send_command($command, NULL, true);
    $rufields["resource_hostname"] = $hc->account_type . $origin_resource->id;
    $origin_resource->update_info($origin_resource->id, $rufields);
    // debug
    // echo "1:".$command;
}
コード例 #17
0
 function __reload()
 {
     require_once $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/class/hybrid-cloud.class.php';
     $hc = new hybrid_cloud();
     $hc->get_instance_by_id($this->response->html->request()->get('hybrid_cloud_id'));
     $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-keypair describe';
     $command .= ' -i ' . $hc->id;
     $command .= ' -n ' . $hc->account_name;
     $command .= ' -c ' . $hc->rc_config;
     $command .= ' -t ' . $hc->account_type;
     $command .= ' -ir ' . $this->response->html->request()->get('region');
     $command .= ' --openqrm-ui-user ' . $this->user->name;
     $command .= ' --openqrm-cmd-mode background';
     $file = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/hybrid-cloud-stat/' . $hc->id . '.describe_keypair.log';
     if ($this->file->exists($file)) {
         $this->file->remove($file);
     }
     $openqrm = new openqrm_server();
     $openqrm->send_command($command);
     while (!$this->file->exists($file)) {
         usleep(10000);
         // sleep 10ms to unload the CPU
         clearstatcache();
     }
     return true;
 }
コード例 #18
0
 function add()
 {
     $response = $this->get_response();
     $form = $response->form;
     $errors = array();
     if (!$form->get_errors() && $this->response->submit()) {
         $keypair_name = $form->get_request('name');
         if (!strlen($keypair_name)) {
             $errors[] = $this->lang['error_name'];
         }
         if (count($errors) > 0 || $form->get_errors()) {
             $response->error = join('<br>', $errors);
         } else {
             $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') {
                 $keypair_content = $form->get_request('keypair_content');
                 if (!strlen($keypair_content)) {
                     $errors[] = $this->lang['error_keypair_content'];
                 }
                 $keypair_content = str_replace(' ', '%', $keypair_content);
                 $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;
                 $hc_authentication .= ' -c ' . $keypair_content;
             }
             $openqrm = new openqrm_server();
             $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-keypair create';
             $command .= ' -i ' . $this->hc->id;
             $command .= ' -n ' . $this->hc->account_name;
             $command .= ' -t ' . $this->hc->account_type;
             $command .= $hc_authentication;
             $command .= ' -k ' . $keypair_name;
             $command .= ' --openqrm-ui-user ' . $this->user->name;
             $command .= ' --openqrm-cmd-mode background';
             $openqrm->send_command($command, NULL, true);
             sleep(4);
             $response->msg = sprintf($this->lang['msg_added'], $keypair_name);
         }
     }
     return $response;
 }
コード例 #19
0
global $DEPLOYMENT_INFO_TABLE;
global $KERNEL_INFO_TABLE;
global $STORAGETYPE_INFO_TABLE;
global $OPENQRM_SERVER_BASE_DIR;
// user/role authentication
if ($OPENQRM_USER->role != "administrator") {
    $event->log("authorization", $_SERVER['REQUEST_TIME'], 1, "local-server-action", "Un-Authorized access to lvm-actions from {$OPENQRM_USER->name}", "", "", 0, 0, 0);
    exit;
}
$local_server_command = $request->get('local_server_command');
$local_server_id = $request->get('local_server_id');
$local_server_root_device = $request->get('local_server_root_device');
$local_server_root_device_type = $request->get('local_server_root_device_type');
$local_server_kernel_version = $request->get('local_server_kernel_version');
$local_server_name = $request->get('local_server_name');
$openqrm_server = new openqrm_server();
$OPENQRM_SERVER_IP_ADDRESS = $openqrm_server->get_ip_address();
global $OPENQRM_SERVER_IP_ADDRESS;
$event->log("{$local_server_command}", $_SERVER['REQUEST_TIME'], 5, "local-server-action", "Processing local-server command {$local_server_command}", "", "", 0, 0, 0);
switch ($local_server_command) {
    case 'integrate':
        // create storage server
        $storage_fields["storage_name"] = "resource{$local_server_id}";
        $storage_fields["storage_resource_id"] = "{$local_server_id}";
        $deployment = new deployment();
        $deployment->get_instance_by_type('local-server');
        $storage_fields["storage_type"] = $deployment->id;
        $storage_fields["storage_comment"] = "Local-server resource {$local_server_id}";
        $storage_fields["storage_capabilities"] = 'TYPE=local-server';
        $storage = new storage();
        $storage_fields["storage_id"] = (int) str_replace(".", "", str_pad(microtime(true), 15, "0"));
コード例 #20
0
ファイル: nagios3.edit.class.php プロジェクト: kelubo/OpenQRM
 function edit()
 {
     $response = $this->get_response();
     $form = $response->form;
     $appliance_id = $response->html->request()->get('appliance_id');
     if ($appliance_id !== '') {
         if (!$form->get_errors() && $response->submit()) {
             $host = new nagios3_host();
             $host = $host->get_instance_by_appliance_id($appliance_id);
             $old = explode(',', $host->appliance_services);
             $new = $form->get_request('services');
             if (isset($new[0]) && $new[0] !== '{empty}') {
                 $fields['nagios3_appliance_services'] = implode(',', $new);
             } else {
                 $fields['nagios3_appliance_services'] = 'false';
             }
             // if nagios3_host id is set -> update or remove
             if ($host->id !== '') {
                 // if no services -> remove
                 if ($fields['nagios3_appliance_services'] === 'false') {
                     $error = $this->nagios3h->remove($host->id);
                 } else {
                     $error = $this->nagios3h->update($host->id, $fields);
                 }
             } else {
                 if ($fields['nagios3_appliance_services'] !== 'false') {
                     $fields['nagios3_host_id'] = (int) str_replace(".", "", str_pad(microtime(true), 15, "0"));
                     $fields['nagios3_appliance_id'] = $appliance_id;
                     $error = $this->nagios3h->add($fields);
                 }
             }
             // remove new ports from old
             foreach ($new as $id) {
                 if ($id !== '{empty}') {
                     if (in_array($id, $old)) {
                         $key = array_search($id, $old);
                         unset($old[$key]);
                     }
                 }
             }
             // handle ports to set
             $set = array();
             foreach ($new as $id) {
                 if ($id !== '{empty}') {
                     $set[] = $this->nagios3s->get_instance_by_id($id)->port;
                 }
             }
             // handle ports to unset
             $unset = array();
             foreach ($old as $id) {
                 if ($id !== 'false') {
                     $unset[] = $this->nagios3s->get_instance_by_id($id)->port;
                 }
             }
             // autoselect? active?
             if ($response->appliance->state == "active" || $response->appliance->resources == 0) {
                 // unset
                 if (count($unset) >= 1) {
                     $res = new resource();
                     $cmd = $this->openqrm->get('basedir') . '/plugins/nagios3/bin/openqrm-nagios-manager remove_service';
                     $cmd .= ' -n ' . $response->appliance->name;
                     $cmd .= ' -i ' . $res->get_instance_by_id($response->appliance->resources)->ip;
                     $cmd .= ' -p ' . implode(',', $unset);
                     $cmd .= ' --openqrm-ui-user ' . $this->user->name;
                     $cmd .= ' --openqrm-cmd-mode fork';
                     $oqs = new openqrm_server();
                     $oqs->send_command($cmd, NULL, true);
                 }
                 // set
                 if (count($set) >= 1) {
                     $res = new resource();
                     $cmd = $this->openqrm->get('basedir') . '/plugins/nagios3/bin/openqrm-nagios-manager add';
                     $cmd .= ' -n ' . $response->appliance->name;
                     $cmd .= ' -i ' . $res->get_instance_by_id($response->appliance->resources)->ip;
                     $cmd .= ' -p ' . implode(',', $set);
                     $cmd .= ' --openqrm-ui-user ' . $this->user->name;
                     $cmd .= ' --openqrm-cmd-mode fork';
                     $oqs = new openqrm_server();
                     $oqs->send_command($cmd, NULL, true);
                 }
             }
             $response->msg = sprintf($this->lang['msg_updated'], $response->appliance->name);
         }
     } else {
         $response->msg = '';
     }
     return $response;
 }
コード例 #21
0
 function edit()
 {
     $h = array();
     $h['volume']['title'] = $this->lang['table_volume'];
     $h['id']['title'] = $this->lang['table_id'];
     $h['snapshot']['title'] = $this->lang['table_snapshot'];
     $h['zone']['title'] = $this->lang['table_zone'];
     $h['state']['title'] = $this->lang['table_state'];
     $h['date']['title'] = $this->lang['table_date'];
     $h['type']['title'] = $this->lang['table_type'];
     $h['snap']['title'] = '&#160;';
     $h['snap']['sortable'] = false;
     $h['attach']['title'] = '&#160;';
     $h['attach']['sortable'] = false;
     $h['detach']['title'] = '&#160;';
     $h['detach']['sortable'] = false;
     $h['remove']['title'] = '&#160;';
     $h['remove']['sortable'] = false;
     $content = array();
     $file = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/hybrid-cloud-stat/' . $this->id . '.describe_volumes.log';
     if ($this->file->exists($file)) {
         $this->file->remove($file);
     }
     $a = $this->response->html->a();
     $a->label = $this->lang['action_add_volume'];
     $a->css = 'add';
     $a->handler = 'onclick="wait();"';
     $a->href = $this->response->get_url($this->actions_name, "add");
     $d['add_volume'] = $a->get_string();
     require_once $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/class/hybrid-cloud.class.php';
     $hc = new hybrid_cloud();
     $hc->get_instance_by_id($this->id);
     $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-ebs describe_volumes';
     $command .= ' -i ' . $hc->id;
     $command .= ' -n ' . $hc->account_name;
     $command .= ' -O ' . $hc->access_key;
     $command .= ' -W ' . $hc->secret_key;
     $command .= ' -t ' . $hc->account_type;
     $command .= ' -ar ' . $this->region;
     $command .= ' --openqrm-ui-user ' . $this->user->name;
     $command .= ' --openqrm-cmd-mode background';
     $server = new openqrm_server();
     $server->send_command($command, NULL, true);
     while (!$this->file->exists($file)) {
         usleep(10000);
         // sleep 10ms to unload the CPU
         clearstatcache();
     }
     $content = $this->file->get_contents($file);
     $content = explode("\n", $content);
     $b = array();
     foreach ($content as $k => $v) {
         if ($v !== '') {
             // e.g. VOLUME	vol-1a2b3c4d	30	snap-1a2b3c4d	us-west-2a	available	YYYY-MM-DDTHH:MM:SS+0000	standard
             $tmp = explode('@', $v);
             $volume = $tmp[1];
             $id = $tmp[2];
             $snapshot = $tmp[3];
             $zone = $tmp[4];
             $state = $tmp[5];
             $date = $tmp[6];
             $type = $tmp[7];
             $a = $this->response->html->a();
             $a->label = $this->lang['action_snap_volume'];
             $a->css = 'edit';
             $a->handler = 'onclick="wait();"';
             $a->href = $this->response->get_url($this->actions_name, "snap", "volume_name", $volume);
             $a->css = 'edit';
             $snap = $a->get_string();
             if ($state == 'available') {
                 $a = $this->response->html->a();
                 $a->label = $this->lang['action_attach_volume'];
                 $a->css = 'remove';
                 $a->handler = 'onclick="wait();"';
                 $a->href = $this->response->get_url($this->actions_name, "attach", "volume_name", $volume);
                 $a->css = 'edit';
                 $attach = $a->get_string();
                 $a = $this->response->html->a();
                 $a->label = $this->lang['action_remove_volume'];
                 $a->css = 'remove';
                 $a->handler = 'onclick="wait();"';
                 $a->href = $this->response->get_url($this->actions_name, "remove", "volume_name", $volume);
                 $a->css = 'edit';
                 $remove = $a->get_string();
             } else {
                 $a = $this->response->html->a();
                 $a->label = $this->lang['action_detach_volume'];
                 $a->css = 'remove';
                 $a->handler = 'onclick="wait();"';
                 $a->href = $this->response->get_url($this->actions_name, "detach", "volume_name", $volume);
                 $a->css = 'edit';
                 $attach = $a->get_string();
                 $remove = '';
             }
             $b[] = array('volume' => $volume, 'id' => $id, 'snapshot' => $snapshot, 'zone' => $zone, 'state' => $state, 'date' => $date, 'type' => $type, 'snap' => $snap, 'attach' => $attach, 'remove' => $remove);
         }
     }
     $params = $this->response->get_array($this->actions_name, 'edit');
     $table = $this->response->html->tablebuilder('hybridcloud_import_edit', $params);
     $table->offset = 0;
     $table->sort = 'volume';
     $table->limit = 200;
     $table->order = 'ASC';
     $table->id = 'Tabelle';
     $table->css = 'htmlobject_table';
     $table->border = 1;
     $table->cellspacing = 0;
     $table->cellpadding = 3;
     $table->autosort = true;
     $table->sort_link = false;
     $table->max = count($b);
     $table->head = $h;
     $table->body = $b;
     // handle account name
     require_once $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/class/hybrid-cloud.class.php';
     $hc = new hybrid_cloud();
     $hc->get_instance_by_id($this->id);
     $d['name'] = $hc->account_name;
     $d['form'] = $this->response->get_form($this->actions_name, 'edit', false)->get_elements();
     $d['table'] = $table;
     return $d;
 }
コード例 #22
0
 function update()
 {
     $response = $this->get_response();
     $form = $response->form;
     $cloud_user_resource_limit = $form->get_request('cloud_user_resource_limit');
     $cloud_user_disk_limit = $form->get_request('cloud_user_disk_limit');
     $cloud_user_memory_limit = $form->get_request('cloud_user_memory_limit');
     $cloud_user_cpu_limit = $form->get_request('cloud_user_cpu_limit');
     $cloud_user_network_limit = $form->get_request('cloud_user_network_limit');
     if (!$form->get_errors() && $response->submit()) {
         $db = $this->cloud_user;
         $data = $form->get_request();
         $data['cu_id'] = $this->response->html->request()->get('cloud_user_id');
         // name already in use ?
         $this->cloud_user->get_instance_by_id($data['cu_id']);
         // email valid ?
         if (!strcmp($data['cu_email'], "@localhost")) {
             if (!$this->cloud_user->checkEmail($data['cu_email'])) {
                 $form->set_error("cu_email", $this->lang['cloud_user_email_invalid']);
             }
         }
         if (!$form->get_errors()) {
             $password = '';
             if (isset($data['cu_password'])) {
                 $password = $data['cu_password'];
                 // password min 6 characters
                 if (strlen($data['cu_password']) < 6) {
                     $form->set_error("cu_password", $this->lang['cloud_user_short_password']);
                 }
             }
             unset($data['cloud_user_resource_limit']);
             unset($data['cloud_user_disk_limit']);
             unset($data['cloud_user_memory_limit']);
             unset($data['cloud_user_cpu_limit']);
             unset($data['cloud_user_network_limit']);
             // add user to htpasswd
             if (strlen($password)) {
                 $cloud_htpasswd = $this->clouddir . "/user/.htpasswd";
                 if (file_exists($cloud_htpasswd)) {
                     $openqrm_server_command = "htpasswd -b " . $this->clouddir . "/user/.htpasswd " . $username . " " . $password;
                 } else {
                     $openqrm_server_command = "htpasswd -c -b " . $this->clouddir . "/user/.htpasswd " . $username . " " . $password;
                 }
                 $output = shell_exec($openqrm_server_command);
                 // send mail to user just in case the password is set
                 $cc_admin_email = $this->cloud_config->get_value(1);
                 // 1 is admin_email
                 // get external name
                 $external_portal_name = $this->cloud_config->get_value(3);
                 // 3 is the external name
                 if (!strlen($external_portal_name)) {
                     $openqrm_server = new openqrm_server();
                     $openqrm_server_ip = $openqrm_server->get_ip_address();
                     $external_portal_name = "http://{$openqrm_server_ip}/cloud-portal";
                 }
                 $email = $data['cu_email'];
                 $forename = $data['cu_forename'];
                 $lastname = $data['cu_lastname'];
                 $this->cloud_mailer->to = $email;
                 $this->cloud_mailer->from = $cc_admin_email;
                 $this->cloud_mailer->subject = "openQRM Cloud: Your account has been updated";
                 $this->cloud_mailer->template = $this->rootdir . "/plugins/cloud/etc/mail/welcome_new_cloud_user.mail.tmpl";
                 $arr = array('@@USER@@' => $username, '@@PASSWORD@@' => $password, '@@EXTERNALPORTALNAME@@' => $external_portal_name, '@@FORENAME@@' => $forename, '@@LASTNAME@@' => $lastname, '@@CLOUDADMIN@@' => $cc_admin_email);
                 $this->cloud_mailer->var_array = $arr;
                 $this->cloud_mailer->send();
             }
             // set user permissions and limits, set to 0 (infinite) by default
             $cloud_user_limits_fields['cl_resource_limit'] = $cloud_user_resource_limit;
             $cloud_user_limits_fields['cl_memory_limit'] = $cloud_user_memory_limit;
             $cloud_user_limits_fields['cl_disk_limit'] = $cloud_user_disk_limit;
             $cloud_user_limits_fields['cl_cpu_limit'] = $cloud_user_cpu_limit;
             $cloud_user_limits_fields['cl_network_limit'] = $cloud_user_network_limit;
             $this->cloud_user_limits->get_instance_by_cu_id($data['cu_id']);
             $this->cloud_user_limits->update($this->cloud_user_limits->id, $cloud_user_limits_fields);
             $dberror = $this->cloud_user->update($data['cu_id'], $data);
             // success msg
             $response->msg = $this->lang['cloud_user_update_successful'];
         }
     } else {
         if ($form->get_errors()) {
             $response->error = implode('<br>', $form->get_errors());
         }
     }
     return $response;
 }
コード例 #23
0
 function edit()
 {
     // filter
     $alphabet = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
     $alphabet_arr = explode(",", $alphabet);
     $form = $this->response->get_form($this->actions_name, 'edit');
     unset($form->__data['submit']);
     $d = array();
     $d['submit'] = '';
     $form->add($d);
     unset($form->__data['cancel']);
     $d = array();
     $d['cancel'] = '';
     $form->add($d);
     $filter = $this->response->html->select();
     $filter->name = 'hybrid_cloud_ami_filter';
     $filter->handler = 'onchange="wait();this.form.submit();return false;"';
     $filter->add(array('private', $this->lang['table_private_ami']), array(0, 1));
     foreach ($alphabet_arr as $index => $character) {
         $filter->add(array($character), array(0, 0));
     }
     if ($this->filter == 'private') {
         $ami_type_switch_cmd_parameter = ' -ap private';
     } else {
         $ami_type_switch_cmd_parameter = ' -ap public';
     }
     $filter->selected = array($this->filter);
     $box = $this->response->html->box();
     $box->label = "Filter";
     $box->add($filter);
     $box->id = "amifilter";
     $box->css = "htmlobject_box";
     $form->add($box);
     $this->response->add('hybrid_cloud_ami_filter', $this->filter);
     $d['filter'] = $form->get_string();
     $h = array();
     $h['ami']['title'] = $this->lang['table_ami'];
     $h['path']['title'] = $this->lang['table_path'];
     $h['perm']['title'] = $this->lang['table_permission'];
     $h['arch']['title'] = $this->lang['table_arch'];
     $h['type']['title'] = $this->lang['table_type'];
     $h['virt']['title'] = $this->lang['table_virt_type'];
     $h['image']['title'] = '&#160;';
     $h['image']['sortable'] = false;
     $content = array();
     $file = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/hybrid-cloud-stat/' . $this->id . '.describe_images.log';
     if ($this->file->exists($file)) {
         $this->file->remove($file);
     }
     $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 .= ' -f ' . $this->filter;
         $hc_authentication .= ' -ar ' . $this->region;
         $hc_authentication .= $ami_type_switch_cmd_parameter;
         #$d['ami_type_switch']   = $ami_type_switch;
     }
     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;
         $hc_authentication .= ' -f ' . $this->filter;
         #$d['ami_type_switch']   = '';
     }
     $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-ami describe_images';
     $command .= ' -i ' . $this->hc->id;
     $command .= ' -t ' . $this->hc->account_type;
     $command .= ' -n ' . $this->hc->account_name;
     $command .= $hc_authentication;
     $command .= ' --openqrm-ui-user ' . $this->user->name;
     $command .= ' --openqrm-cmd-mode background';
     $server = new openqrm_server();
     $server->send_command($command, NULL, true);
     while (!$this->file->exists($file)) {
         usleep(10000);
         // sleep 10ms to unload the CPU
         clearstatcache();
     }
     $content = $this->file->get_contents($file);
     $content = explode("\n", $content);
     $b = array();
     foreach ($content as $k => $v) {
         if ($v !== '') {
             // e.g. IMAGE@ami-25f9c051@021471307000/ami_hapx_ubuntu_10_04@021471307000@available@public@@i386@machine@aki-4deec439@@@ebs@paravirtual@xen
             $tmp = explode('@', $v);
             $ami = $tmp[1];
             $path = $tmp[2];
             if ($this->hc->account_type == 'aws' || $this->hc->account_type == 'euca') {
                 $state = $tmp[4];
                 $perm = $tmp[5];
                 $arch = $tmp[7];
                 $type = $tmp[13];
                 $virt = $tmp[14];
             }
             if ($this->hc->account_type == 'lc-openstack') {
                 $state = '';
                 $perm = '';
                 $arch = '';
                 $type = '';
                 $virt = '';
             }
             if ($arch != "i386" && $arch != "x86_64") {
                 $arch = '';
             }
             $image_add_remove = '';
             $deployment_type = '';
             $image = new image();
             $image->get_instance_by_name($ami);
             if (strlen($image->id)) {
                 if ($image->type != $this->deployment->type) {
                     $deployment_type = $image->type;
                     $disabled[] = $ami;
                 } else {
                     $i = $this->response->html->a();
                     $i->title = $this->lang['action_remove_image'];
                     $i->label = $this->lang['action_remove_image'];
                     $i->handler = 'onclick="wait();"';
                     $i->css = 'edit';
                     $i->href = $this->response->get_url($this->actions_name, "image") . '&image_id=' . $image->id . '&image_command=remove';
                     $image_add_remove = $i;
                 }
             } else {
                 $i = $this->response->html->a();
                 $i->title = $this->lang['action_add_image'];
                 $i->label = $this->lang['action_add_image'];
                 $i->handler = 'onclick="wait();"';
                 $i->css = 'edit';
                 $i->href = $this->response->get_url($this->actions_name, "image") . '&image_name=' . $ami . '&image_rootdevice=' . $ami . '&image_comment=' . basename($path) . '&image_command=add';
                 $disabled[] = $ami;
                 $image_add_remove = $i;
             }
             $b[] = array('ami' => $ami, 'path' => basename($path), 'perm' => $perm, 'arch' => $arch, 'type' => $type, 'virt' => $virt, 'state' => $arch, 'image' => $image_add_remove);
         }
     }
     $params = $this->response->get_array($this->actions_name, 'edit');
     $table = $this->response->html->tablebuilder('hybridcloud_ami_edit', $params);
     $table->offset = 0;
     $table->sort = 'ami';
     $table->limit = 200;
     $table->order = 'ASC';
     $table->id = 'Tabelle';
     $table->css = 'htmlobject_table';
     $table->border = 1;
     $table->cellspacing = 0;
     $table->cellpadding = 3;
     $table->autosort = true;
     $table->sort_link = false;
     $table->max = count($b);
     $table->head = $h;
     $table->body = $b;
     $table->limit_select = array(array("value" => 10, "text" => 10), array("value" => 20, "text" => 20), array("value" => 30, "text" => 30), array("value" => 50, "text" => 50), array("value" => 100, "text" => 100), array("value" => 200, "text" => 200));
     $d['name'] = $this->hc->account_name;
     $d['form'] = $this->response->get_form($this->actions_name, 'edit', false)->get_elements();
     $d['table'] = $table;
     return $d;
 }
コード例 #24
0
 function __reload_instance_configuration()
 {
     require_once $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/class/hybrid-cloud.class.php';
     $hc = new hybrid_cloud();
     $hc->get_instance_by_id($this->response->html->request()->get('hybrid_cloud_id'));
     $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-ebs instance_configuration';
     $command .= ' -i ' . $hc->id;
     $command .= ' -n ' . $hc->account_name;
     $command .= ' -O ' . $hc->access_key;
     $command .= ' -W ' . $hc->secret_key;
     $command .= ' -t ' . $hc->account_type;
     $command .= ' -ar ' . $this->response->html->request()->get('region');
     $file = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/hybrid-cloud-stat/' . $hc->id . '.attach_volume_configuration.log';
     if ($this->file->exists($file)) {
         $this->file->remove($file);
     }
     $openqrm = new openqrm_server();
     $openqrm->send_command($command, NULL, true);
     while (!$this->file->exists($file)) {
         usleep(10000);
         // sleep 10ms to unload the CPU
         clearstatcache();
     }
     return true;
 }
コード例 #25
0
 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;
 }
コード例 #26
0
ファイル: resource-monitor.php プロジェクト: kelubo/OpenQRM
$resource_event = $request->get('resource_event');
foreach ($_REQUEST as $key => $value) {
    if (strncmp($key, "resource_", 9) == 0) {
        $resource_fields[$key] = $request->get($key);
    }
}
unset($resource_fields["resource_command"]);
// set lastgood
$resource_lastgood = $_SERVER['REQUEST_TIME'];
$resource_fields["resource_lastgood"] = $resource_lastgood;
// gather for event vars
$event_name = $request->get('event_name');
$event_priority = $request->get('event_priority');
$event_source = $request->get('event_source');
$event_description = $request->get('event_description');
$openqrm_server = new openqrm_server();
$OPENQRM_SERVER_IP_ADDRESS = $openqrm_server->get_ip_address();
global $OPENQRM_SERVER_IP_ADDRESS;
$event = new event();
switch ($resource_command) {
    // get_parameter requires :
    // resource_mac
    default:
    case 'get_parameter':
        // if resource-id = -1 we add a new resource first
        if ($resource_id == "-1") {
            // check if resource already exists
            $resource = new resource();
            if (!$resource->exists($resource_mac)) {
                // add resource
                $new_resource_id = (int) str_replace(".", "", str_pad(microtime(true), 15, "0"));
コード例 #27
0
ファイル: lcmc-action.php プロジェクト: kelubo/OpenQRM
require_once "{$RootDir}/class/openqrm_server.class.php";
// filter inputs
require_once $RootDir . '/class/htmlobjects/htmlobject.class.php';
require_once $RootDir . '/include/requestfilter.inc.php';
$html = new htmlobject($RootDir . '/class/htmlobjects/');
$request = $html->request();
$request->filter = $requestfilter;
global $IMAGE_INFO_TABLE;
global $DEPLOYMENT_INFO_TABLE;
global $OPENQRM_SERVER_BASE_DIR;
// get params
$lcmc_command = $request->get('lcmc_command');
$lcmc_resource_id = $request->get('resource_id');
$lcmc_resource_ip = $request->get('resource_ip');
// get event + openQRM server
$event = new event();
$openqrm_server = new openqrm_server();
$OPENQRM_SERVER_IP_ADDRESS = $openqrm_server->get_ip_address();
global $OPENQRM_SERVER_IP_ADDRESS;
global $event;
// user/role authentication
if ($OPENQRM_USER->role != "administrator") {
    $event->log("authorization", $_SERVER['REQUEST_TIME'], 1, "lcmc-action", "Un-Authorized access to lcmc-actions from {$OPENQRM_USER->name}", "", "", 0, 0, 0);
    exit;
}
$event->log("{$lcmc_command}", $_SERVER['REQUEST_TIME'], 5, "lcmc-action", "Processing lcmc command {$lcmc_command}", "", "", 0, 0, 0);
switch ($lcmc_command) {
    default:
        $event->log("{$lcmc_command}", $_SERVER['REQUEST_TIME'], 3, "lcmc-action", "No such lcmc command ({$lcmc_command})", "", "", 0, 0, 0);
        break;
}
コード例 #28
0
$ansible_server_ip = $request->get('ansible_ip');
global $OPENQRM_SERVER_BASE_DIR;
$event = new event();
$openqrm_server = new openqrm_server();
$OPENQRM_SERVER_IP_ADDRESS = $openqrm_server->get_ip_address();
global $OPENQRM_SERVER_IP_ADDRESS;
global $event;
// main
$event->log($ansible_command, $_SERVER['REQUEST_TIME'], 5, "ansible-apply", "Processing ansible command " . $ansible_command, "", "", 0, 0, 0);
switch ($ansible_command) {
    case 'apply':
        $appliance = new appliance();
        $appliance->get_instance_by_id($ansible_server_id);
        if ($ansible_server_name == $appliance->name) {
            $resource = new resource();
            $resource->get_instance_by_id($appliance->resources);
            if ($ansible_server_mac == $resource->mac && $ansible_server_ip == $resource->ip) {
                $command = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/ansible/bin/openqrm-ansible-manager apply " . $appliance->id . " " . $appliance->name . " " . $resource->ip . "  --openqrm-cmd-mode background";
                $openqrm_server = new openqrm_server();
                $openqrm_server->send_command($command, NULL, true);
            } else {
                $event->log($ansible_command, $_SERVER['REQUEST_TIME'], 3, "ansible-apply", "Request for Ansible apply for server id " . $ansible_server_id . " with wrong resource " . $resource->id, "", "", 0, 0, 0);
            }
        } else {
            $event->log($ansible_command, $_SERVER['REQUEST_TIME'], 3, "ansible-apply", "Request for Ansible apply for server id " . $ansible_server_id . " with wrong name " . $ansible_server_name, "", "", 0, 0, 0);
        }
        break;
    default:
        $event->log($ansible_command, $_SERVER['REQUEST_TIME'], 3, "ansible-apply", "No such command " . $ansible_command, "", "", 0, 0, 0);
        break;
}
コード例 #29
0
function openqrm_hybrid_cloud_monitor()
{
    global $event;
    global $OPENQRM_SERVER_BASE_DIR;
    global $OPENQRM_SERVER_IP_ADDRESS;
    global $OPENQRM_EXEC_PORT;
    global $openqrm_server;
    global $BaseDir;
    global $RootDir;
    $now = $_SERVER['REQUEST_TIME'];
    // $event->log("hybrid_cloud_monitor", $_SERVER['REQUEST_TIME'], 2, "hybrid-cloud-monitor-hook", "Hybrid Cloud monitor hook DISABLED for now!!!", "", "", 0, 0, 0);
    // return;
    // $event->log("hybrid_cloud_monitor", $_SERVER['REQUEST_TIME'], 5, "hybrid-cloud-monitor-hook", "Hybrid Cloud monitor hook", "", "", 0, 0, 0);
    $last_stats = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/hybrid-cloud/web/hybrid-cloud-stat/last_statistics";
    if (file_exists($last_stats)) {
        $last_host_stats = file_get_contents($last_stats);
        $secs_after_last_host_stat = $now - $last_host_stats;
        if ($secs_after_last_host_stat > 35) {
            file_put_contents($last_stats, $now);
            $server = new openqrm_server();
            $hc = new hybrid_cloud();
            $hc_account_arr = $hc->get_ids();
            foreach ($hc_account_arr as $id) {
                $hc_account_id = $id['hybrid_cloud_id'];
                $hc->get_instance_by_id($hc_account_id);
                $hc_authentication = '';
                // for every ec2/euca cloud account monitor every configured region
                if ($hc->account_type == 'aws' || $hc->account_type == 'euca') {
                    $hybrid_cloud_conf = $OPENQRM_SERVER_BASE_DIR . '/openqrm/plugins/hybrid-cloud/etc/openqrm-plugin-hybrid-cloud.conf';
                    $hybrid_cloud_conf_arr = openqrm_parse_conf($hybrid_cloud_conf);
                    $region_arr = explode(",", $hybrid_cloud_conf_arr['OPENQRM_PLUGIN_HYBRID_CLOUD_REGIONS']);
                    $hc_authentication .= ' -O ' . $hc->access_key;
                    $hc_authentication .= ' -W ' . $hc->secret_key;
                }
                // one region for openstack
                if ($hc->account_type == 'lc-openstack') {
                    $region_arr = array("OpenStack");
                    $hc_authentication .= ' -u ' . $hc->username;
                    $hc_authentication .= ' -p ' . $hc->password;
                    $hc_authentication .= ' -q ' . $hc->host;
                    $hc_authentication .= ' -x ' . $hc->port;
                    $hc_authentication .= ' -g ' . $hc->tenant;
                    $hc_authentication .= ' -e ' . $hc->endpoint;
                }
                foreach ($region_arr as $region) {
                    $event->log("hybrid_cloud_monitor", $_SERVER['REQUEST_TIME'], 5, "hybrid-cloud-monitor-hook", "Hybrid Cloud monitor - checking Cloud statistics for Account " . $hc->account_name . " - " . $region, "", "", 0, 0, 0);
                    $statfile = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/hybrid-cloud/web/hybrid-cloud-stat/" . $hc_account_id . ".instances_statistics.log";
                    $command = $OPENQRM_SERVER_BASE_DIR . '/openqrm/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-vm describe --statistics true';
                    $command .= ' -i ' . $hc->id;
                    $command .= ' -n ' . $hc->account_name;
                    $command .= ' -t ' . $hc->account_type;
                    $command .= ' -ir ' . $region;
                    $command .= $hc_authentication;
                    $command .= ' --openqrm-cmd-mode background';
                    if (file_exists($statfile)) {
                        unlink($statfile);
                    }
                    $server->send_command($command, NULL, true);
                    while (!file_exists($statfile)) {
                        usleep(10000);
                        clearstatcache();
                    }
                    $content = file_get_contents($statfile);
                    $content = explode("\n", $content);
                    $b = array();
                    foreach ($content as $k => $v) {
                        if ($v !== '') {
                            $tmp = explode('@', $v);
                            $name = $tmp[1];
                            $ami = $tmp[2];
                            $public_hostname = $tmp[3];
                            $private_hostname = $tmp[4];
                            $state = $tmp[5];
                            $keypair = $tmp[6];
                            $unknown1 = $tmp[7];
                            $unknown2 = $tmp[8];
                            $type = $tmp[9];
                            $date = $tmp[10];
                            $region = $tmp[11];
                            $unknown4 = $tmp[12];
                            $unknown5 = $tmp[13];
                            $unknown6 = $tmp[14];
                            $monitoring = $tmp[15];
                            $public_ip = $hc->format_ip_address($tmp[16]);
                            $private_ip = $hc->format_ip_address($tmp[17]);
                            $unknown7 = $tmp[18];
                            $unknown8 = $tmp[19];
                            $store = $tmp[20];
                            $unknown9 = $tmp[21];
                            $unknown10 = $tmp[22];
                            $unknown11 = $tmp[23];
                            $unknown12 = $tmp[24];
                            $hvm = $tmp[25];
                            $virt_type = $tmp[26];
                            $mac = '';
                            // check for idle instances
                            $resource = new resource();
                            if ($state == 'idle') {
                                $mac = $tmp[30];
                                $resource->get_instance_by_mac($mac);
                                $resource_fields["resource_state"] = 'active';
                                $resource_fields["resource_lastgood"] = $now;
                                $resource_fields["resource_cpunumber"] = $hc->translate_resource_components('cpu', $type);
                                $resource_fields["resource_nics"] = $hc->translate_resource_components('net', $type);
                                $resource_fields["resource_memtotal"] = $hc->translate_resource_components('mem', $type);
                                $resource_fields["resource_memused"] = "0";
                                $resource_fields["resource_load"] = "0";
                                // restore mgmt ip
                                $resource_fields["resource_ip"] = $resource->network;
                                $resource->update_info($resource->id, $resource_fields);
                            } else {
                                if ($state == 'running') {
                                    // check if existing, if not auto-create resource, image and appliance
                                    if ($resource->exists_by_name($name)) {
                                        // update stats
                                        $resource->get_instance_id_by_hostname($name);
                                        $resource->get_instance_by_id($resource->id);
                                        $resource_fields["resource_state"] = 'active';
                                        $resource_fields["resource_lastgood"] = $now;
                                        $resource_fields["resource_cpunumber"] = $hc->translate_resource_components('cpu', $type);
                                        $resource_fields["resource_nics"] = $hc->translate_resource_components('net', $type);
                                        $resource_fields["resource_memtotal"] = $hc->translate_resource_components('mem', $type);
                                        $resource_fields["resource_memused"] = $resource_fields["resource_memtotal"];
                                        $resource_fields["resource_load"] = "1";
                                        if (strlen($public_ip) && $resource->ip != $public_ip) {
                                            // set public ip, update early and run nagios hook
                                            $resource_fields["resource_ip"] = $public_ip;
                                            $resource->update_info($resource->id, $resource_fields);
                                            // nagios enabled and started ?
                                            if (file_exists($RootDir . "/plugins/nagios3/.running")) {
                                                $virtualization = new virtualization();
                                                $virtualization->get_instance_by_type("hybrid-cloud-vm-local");
                                                $hc_appliance = new appliance();
                                                $hc_appliance->get_instance_by_virtualization_and_resource($virtualization->id, $resource->id);
                                                if (strlen($hc_appliance->name)) {
                                                    // special nagios classes
                                                    require_once $RootDir . "/plugins/nagios3/class/nagios3_service.class.php";
                                                    require_once $RootDir . "/plugins/nagios3/class/nagios3_host.class.php";
                                                    // get the nagios service checks
                                                    $nagios_host = new nagios3_host();
                                                    $nagios_host->get_instance_by_appliance_id($hc_appliance->id);
                                                    $active_nagios_services = explode(',', $nagios_host->appliance_services);
                                                    $nagios_service_list = '';
                                                    foreach ($active_nagios_services as $service_id) {
                                                        $nagios_service = new nagios3_service();
                                                        $nagios_service->get_instance_by_id($service_id);
                                                        $nagios_service_list = $nagios_service_list . "," . $nagios_service->port;
                                                    }
                                                    $nagios_service_list = substr($nagios_service_list, 1);
                                                    if (strlen($nagios_service_list)) {
                                                        // appliance has nagios service checks configured
                                                        $nagios_appliance_stop_cmd = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/nagios3/bin/openqrm-nagios-manager remove_host -n " . $hc_appliance->name . " --openqrm-cmd-mode background";
                                                        $server->send_command($nagios_appliance_stop_cmd, NULL, true);
                                                        sleep(2);
                                                        $nagios_appliance_start_cmd = $OPENQRM_SERVER_BASE_DIR . "/openqrm/plugins/nagios3/bin/openqrm-nagios-manager add -n " . $hc_appliance->name . " -i " . $public_ip . " -p " . $nagios_service_list . " --openqrm-cmd-mode background";
                                                        $server->send_command($nagios_appliance_start_cmd, NULL, true);
                                                    }
                                                }
                                            }
                                            // nagios finished
                                        }
                                        $resource->update_info($resource->id, $resource_fields);
                                    } else {
                                        // through error for now
                                        $event->log("hybrid_cloud_monitor", $_SERVER['REQUEST_TIME'], 5, "hybrid-cloud-monitor-hook", "New Resource detected with name " . $name . "!", "", "", 0, 0, 0);
                                    }
                                }
                            }
                        }
                    }
                    unlink($statfile);
                }
            }
        }
    } else {
        file_put_contents($last_stats, $now);
    }
}
コード例 #30
0
 function remove()
 {
     $response = $this->get_response();
     $group_name = $response->html->request()->get('group_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'] = $group_name;
     $d['param_f']['object']['type'] = 'htmlobject_input';
     $d['param_f']['object']['attrib']['type'] = 'checkbox';
     $d['param_f']['object']['attrib']['name'] = 'group_name';
     $d['param_f']['object']['attrib']['value'] = $group_name;
     $d['param_f']['object']['attrib']['checked'] = true;
     $form->add($d);
     if (!$form->get_errors() && $response->submit()) {
         $errors = array();
         $message = array();
         require_once $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/web/class/hybrid-cloud.class.php';
         $hc = new hybrid_cloud();
         $hc->get_instance_by_id($this->id);
         $command = $this->openqrm->get('basedir') . '/plugins/hybrid-cloud/bin/openqrm-hybrid-cloud-group remove';
         $command .= ' -i ' . $hc->id;
         $command .= ' -n ' . $hc->account_name;
         $command .= ' -O ' . $hc->access_key;
         $command .= ' -W ' . $hc->secret_key;
         $command .= ' -t ' . $hc->account_type;
         $command .= ' -ar ' . $this->region;
         $command .= ' -gn ' . $group_name;
         $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'], $group_name);
         if (count($errors) === 0) {
             $response->msg = join('<br>', $message);
         } else {
             $msg = array_merge($errors, $message);
             $response->error = join('<br>', $msg);
         }
         sleep(4);
     }
     return $response;
 }