1
0
mirror of https://github.com/OpenNebula/one.git synced 2024-12-23 17:33:56 +03:00
one/include/OneClient.h
2014-01-09 11:51:20 +01:00

323 lines
10 KiB
C++

/* -------------------------------------------------------------------------- */
/* Copyright 2002-2014, OpenNebula Project (OpenNebula.org), C12G Labs */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); you may */
/* not use this file except in compliance with the License. You may obtain */
/* a copy of the License at */
/* */
/* http://www.apache.org/licenses/LICENSE-2.0 */
/* */
/* Unless required by applicable law or agreed to in writing, software */
/* distributed under the License is distributed on an "AS IS" BASIS, */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
/* See the License for the specific language governing permissions and */
/* limitations under the License. */
/* -------------------------------------------------------------------------- */
#ifndef ONECLIENT_H_
#define ONECLIENT_H_
#ifdef __cplusplus
#include <xmlrpc-c/base.hpp>
#include <xmlrpc-c/client_simple.hpp>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
/**
* OneClient class. Provides a simple interface to invoke the ONE methods. This
* class can be used as base to build complex clients or VM applications
*/
class OneClient : public xmlrpc_c::clientSimple
{
public:
/* ---------------------------------------------------------------------- */
/* ONE Session Constructors */
/* ---------------------------------------------------------------------- */
/**
* Set the connection values to communicate with ONE
* @param oneurl the ONE front-end to interact with, defaults to "localhost".
* @param socket the socket where ONE listen to, defaults to 2633.
*/
OneClient(string oneurl="localhost",unsigned int socket=2633)
{
ostringstream oss;
oss << "http://" << oneurl << ":" << socket << "/RPC2";
url=oss.str();
session = "oneclient";
};
~OneClient(){};
/* ---------------------------------------------------------------------- */
/* ONE Virtual Machine Methods */
/* ---------------------------------------------------------------------- */
/**
* Add a new VM to the VM pool and starts it.
* @param template_file path, description of the Virtual Machine template
* @param vmid, the id of the new VM
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int allocate(string template_file, int& vmid, string& error);
/**
* Add a new VM to the VM pool and starts it.
* @param template description of the Virtual Machine template
* @param vmid, the id of the new VM
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int allocate_template(const string& template_file,
int& vmid,
string& error);
/**
* Deploys the virtual machine "vmid" into the host "hid".
* @param vmid the virtual machine to deploy.
* @param hid the host id to deploy the VM.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int deploy(int vmid, int hid, string& error);
/**
* Migrate the virtual machine "vmid" to the host "hid".
* @param vmid the virtual machine to migrate.
* @param hid the destination host.
* @param live try a "live migration".
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int migrate(int vmid, int hid, bool live, string& error);
/**
* Shutdown a virtual machine.
* @param vmid the vm identifier to shutdown.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int shutdown(int vmid, string& error)
{
return action(vmid,"shutdown",error);
};
/**
* Sets a VM to hold, scheduler will not deploy it.
* @param vmid the vm identifier to hold.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int hold(int vmid, string& error)
{
return action(vmid,"hold",error);
};
/**
* Release a VM from hold state.
* @param vmid the vm identifier to release.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int release(int vmid, string& error)
{
return action(vmid,"release",error);
};
/**
* Stop a running VM
* @param vmid the vm identifier to stop.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int stop(int vmid, string& error)
{
return action(vmid,"stop",error);
};
/**
* Saves a running VM
* @param vmid the vm identifier to suspend.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int suspend(int vmid, string& error)
{
return action(vmid,"suspend",error);
};
/**
* Resumes the execution of a saved VM
* @param vmid the vm identifier to resume.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int resume(int vmid, string& error)
{
return action(vmid,"resume",error);
};
/**
* Cancel the execution of a VM,
* @param vmid the vm identifier to resume.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int cancel(int vmid, string& error)
{
return action(vmid,"cancel",error);
};
/**
* Remove the VM from the DB
* @param vmid the vm identifier to resume.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int finalize(int vmid, string& error)
{
return action(vmid,"finalize",error);
};
/**
* Gets information on a virtual machine
* @param vmid the vm identifier.
* @param info the VM information
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int info(int vmid, string& info, string& error);
/* ---------------------------------------------------------------------- */
/* ONE Host Methods */
/* ---------------------------------------------------------------------- */
/**
* Gets system info from a single host ( "hid" ).
* @param hid the host id to get for information
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int host_info(int hid, string& info, string& error);
/**
* Removes a host from the pool
* @param hid the host id to remove
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int host_delete(int hid, string& error);
/**
* Enables a given host.
* @param hid the host id to enable.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int host_enable(int hid, string& error)
{
return host_available(hid,true,error);
};
/**
* Disables a given host.
* @param hid the host id to disable.
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int host_disable(int hid, string& error)
{
return host_available(hid,false,error);
};
/**
* Adds a new Host to the Pool
* @param name hostname of the host to add
* @param im_mad the name of the information driver, from oned.conf
* @param vmm_mad the name of the virtual machine manager driver, from oned.conf
* @param error if an error occurs this is the error message
* @return -1 if an error occurs, 0 on success.
*/
int host_allocate(string& name,
string& im_mad,
string& vmm_mad,
int& hid,
string& error);
private:
/**
* URl - url to connect to ONE.
*/
string url;
/**
* Session - Client session id
*/
string session;
/**
* Submits an action to be performed on a VM.
* @param vmid the VM id.
* @param action the "transition" to execute.
* @param error if an error occurs this is error message.
* @return -1 if an error occurs, otherwise 0.
*/
int action(int vmid, const char * action, string& error);
/**
* Enables or disables a given host.
* @param hid the host id to enable/disable.
* @param enable true to enavle the target host.
* @param error if an error occurs this is error message.
* @return -1 if an error occurs, otherwise "0".
*/
int host_available(int hid, bool enable, string& error);
};
extern "C"
{
#endif
void c_oneStart(void);
int c_oneDeploy(int vmid, int hid);
int c_oneMigrate(int vmid, int hid, int flag);
int c_oneAllocate(char* vm_template);
int c_oneAllocateTemplate(char* vm_template);
int c_oneAction(int vmid,char* action);
int c_oneShutdown(int vmid);
int c_oneSuspend(int vmid);
int c_oneStop(int vmid);
int c_oneResume(int vmid);
int c_oneCancel(int vmid);
int c_oneFinalize(int vmid);
int c_oneVmInfo(int vmid, char* ret_info,int leng);
void c_oneFree(void);
#ifdef __cplusplus
}
#endif
#endif /*ONECLIENT_H_*/