1. Go to this page and download the library: Download clivern/monkey library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
clivern / monkey example snippets
$ composer
use Clivern\Monkey\Util\Config;
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
// OR
$config = new Config([
"us_dc_clsk_01" => [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]
]);
// To use self-signed or invalid SSL for connecting to CloudStack
$config = new Config([
"us_dc_clsk_01" => [
"api_url" => "https://clsk_url.com:8443/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here",
"verify_ssl" => false
]
]);
// To Check if CloudStack Server Credentials Exists
$config->isCloudStackServerExists("us_dc_clsk_01"); // Return Boolean
// To Get CloudStack Server Credentials
$config->getCloudStackServer("us_dc_clsk_01"); // Return array & May be empty if not exist
// To Get All CloudStack Servers Credentials
$config->getCloudStackServers(); // Return Array
// To Remove CloudStack Server
$config->removeCloudStackServer("us_dc_clsk_01"); // Return Boolean
use Clivern\Monkey\Util\Config;
use Clivern\Monkey\API\Request\PlainRequest;
use Clivern\Monkey\API\Response\PlainResponse;
use Clivern\Monkey\API\Request\RequestMethod;
use Clivern\Monkey\API\Request\RequestType;
use Clivern\Monkey\API\Caller;
// Create a cloudStack credentials config
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
// Create request object with a missing parameter account :(
$request = new PlainRequest();
$request->setMethod(RequestMethod::$GET)
->setType(RequestType::$SYNCHRONOUS)
->addParameter("command", "createUser")
->addParameter("email", "[email protected]")
->addParameter("firstname", "John")
->addParameter("lastname", "Doe")
->addParameter("password", "clivern")
->addParameter("username", "clivern");
// Create response object without callbacks
$response = new PlainResponse();
// Create a caller object with the request and response and ident create_account
$caller = new Caller($request, $response, "create_account", $config->getCloudStackServer("us_dc_clsk_01"));
// Run the call
$caller->execute();
// Debug the caller status and response data
var_dump($caller->getStatus()); // Return string(6) "FAILED"
var_dump($caller->response()->getResponse()); // Returns array(0) { }
var_dump($caller->response()->getErrorCode()); // Returns int(431)
var_dump($caller->response()->getErrorMessage()); // Returns string(73) "Unable to execute API command createuser due to missing parameter account"
use Clivern\Monkey\Util\Config;
use Clivern\Monkey\API\Request\PlainRequest;
use Clivern\Monkey\API\Response\PlainResponse;
use Clivern\Monkey\API\Request\RequestMethod;
use Clivern\Monkey\API\Request\RequestType;
use Clivern\Monkey\API\Caller;
// Create a cloudStack credentials config
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
// Create request object
$request = new PlainRequest();
$request->setMethod(RequestMethod::$GET)
->setType(RequestType::$SYNCHRONOUS)
->addParameter("command", "createUser")
->addParameter("account", "admin")
->addParameter("email", "[email protected]")
->addParameter("firstname", "John")
->addParameter("lastname", "Doe")
->addParameter("password", "clivern")
->addParameter("username", "clivern");
// Create response object without callbacks
$response = new PlainResponse();
// Create a caller object with the request and response and ident create_account
$caller = new Caller($request, $response, "create_account", $config->getCloudStackServer("us_dc_clsk_01"));
// Run the call
$caller->execute();
// Debug the caller status and response data
var_dump($caller->getStatus()); // Return string(9) "SUCCEEDED"
var_dump($caller->response()->getResponse()); // Returns array(1) { ["createuserresponse"]=> array(1) { ["user"]=> array(18) { ["id"]=> string(36) "6980f41b-73e5-4848-ad90-7859efb613ad" .....}}}
var_dump($caller->response()->getErrorCode()); // Returns string(0) ""
var_dump($caller->response()->getErrorMessage()); // Returns string(0) ""
use Clivern\Monkey\Util\Config;
use Clivern\Monkey\API\Request\PlainRequest;
use Clivern\Monkey\API\Response\PlainResponse;
use Clivern\Monkey\API\Request\RequestMethod;
use Clivern\Monkey\API\Request\RequestType;
use Clivern\Monkey\API\Caller;
use Clivern\Monkey\API\Job;
use Clivern\Monkey\API\DumpType;
use Clivern\Monkey\API\Factory;
use Clivern\Monkey\API\JobStatus;
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
$request = new PlainRequest();
$request->setMethod(RequestMethod::$GET)
->setType(RequestType::$ASYNCHRONOUS)
->addParameter("command", "stopVirtualMachine")
->addParameter("id", "4c9c8759-de26-41bb-9a22-fe51b9f0c9af");
$response = new PlainResponse();
$caller = new Caller($request, $response, "stop_virtual_machine", $config->getCloudStackServer("us_dc_clsk_01"));
// Create a job with one caller and 4 default trials in case of failure
$job = new Job([
$caller
], 4);
// Job initial state to store in database
$initialJobState = $job->dump(DumpType::$JSON);
var_dump($initialJobState);
$currentJobState = $initialJobState;
$finished = false;
$currentJob = null;
while (!$finished) {
$currentJob = Factory::job()->reload($currentJobState, DumpType::$JSON);
$currentJob->execute();
$finished = (($currentJob->getStatus() == JobStatus::$FAILED) || ($currentJob->getStatus() == JobStatus::$SUCCEEDED)) ? true : false;
$currentJobState = $currentJob->dump(DumpType::$JSON);
sleep(5);
}
if( $currentJob != null ){
var_dump($currentJob->getStatus());
var_dump($currentJob->getCaller("stop_virtual_machine")->getStatus());
var_dump($currentJob->getCaller("stop_virtual_machine")->response()->getResponse());
var_dump($currentJob->getCaller("stop_virtual_machine")->response()->getErrorCode());
var_dump($currentJob->getCaller("stop_virtual_machine")->response()->getErrorMessage());
var_dump($currentJob->dump(DumpType::$JSON));
}
use Clivern\Monkey\Util\Config;
use Clivern\Monkey\API\Request\PlainRequest;
use Clivern\Monkey\API\Response\PlainResponse;
use Clivern\Monkey\API\Request\RequestMethod;
use Clivern\Monkey\API\Request\RequestType;
use Clivern\Monkey\API\Caller;
use Clivern\Monkey\API\Job;
use Clivern\Monkey\API\DumpType;
use Clivern\Monkey\API\Factory;
use Clivern\Monkey\API\JobStatus;
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
$request = new PlainRequest();
$request->setMethod(RequestMethod::$GET)
->setType(RequestType::$ASYNCHRONOUS)
->addParameter("command", "startVirtualMachine")
->addParameter("id", "4c9c8759-de26-41bb-9a22-fe51b9f0c9af");
$response = new PlainResponse();
$caller = new Caller($request, $response, "start_virtual_machine", $config->getCloudStackServer("us_dc_clsk_01"));
// Create a job with one caller and 4 default trials in case of failure
$job = new Job([
$caller
], 4);
// Job initial state to store in database
$initialJobState = $job->dump(DumpType::$JSON);
var_dump($initialJobState);
$currentJobState = $initialJobState;
$finished = false;
$currentJob = null;
while (!$finished) {
$currentJob = Factory::job()->reload($currentJobState, DumpType::$JSON);
$currentJob->execute();
$finished = (($currentJob->getStatus() == JobStatus::$FAILED) || ($currentJob->getStatus() == JobStatus::$SUCCEEDED)) ? true : false;
$currentJobState = $currentJob->dump(DumpType::$JSON);
sleep(5);
}
if( $currentJob != null ){
var_dump($currentJob->getStatus());
var_dump($currentJob->getCaller("start_virtual_machine")->getStatus());
var_dump($currentJob->getCaller("start_virtual_machine")->response()->getResponse());
var_dump($currentJob->getCaller("start_virtual_machine")->response()->getErrorCode());
var_dump($currentJob->getCaller("start_virtual_machine")->response()->getErrorMessage());
var_dump($currentJob->dump(DumpType::$JSON));
}
use Clivern\Monkey\Util\Config;
use Clivern\Monkey\API\Request\PlainRequest;
use Clivern\Monkey\API\Response\PlainResponse;
use Clivern\Monkey\API\Request\RequestMethod;
use Clivern\Monkey\API\Request\RequestType;
use Clivern\Monkey\API\Caller;
use Clivern\Monkey\API\Job;
use Clivern\Monkey\API\DumpType;
use Clivern\Monkey\API\Factory;
use Clivern\Monkey\API\JobStatus;
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
$request1 = new PlainRequest();
$request1->setMethod(RequestMethod::$GET)
->setType(RequestType::$ASYNCHRONOUS)
->addParameter("command", "stopVirtualMachine")
->addParameter("id", "4c9c8759-de26-41bb-9a22-fe51b9f0c9af");
$response1 = new PlainResponse();
$caller1 = new Caller($request1, $response1, "stop_virtual_machine", $config->getCloudStackServer("us_dc_clsk_01"));
$request2 = new PlainRequest();
$request2->setMethod(RequestMethod::$GET)
->setType(RequestType::$ASYNCHRONOUS)
->addParameter("command", "startVirtualMachine")
->addParameter("id", "4c9c8759-de26-41bb-9a22-fe51b9f0c9af");
$response2 = new PlainResponse();
$caller2 = new Caller($request2, $response2, "start_virtual_machine", $config->getCloudStackServer("us_dc_clsk_01"));
// Create a job with two callers and 4 default trials in case of failure
$job = new Job([
$caller1,
$caller2
], 4);
// Job initial state to store in database
$initialJobState = $job->dump(DumpType::$JSON);
var_dump($initialJobState);
$currentJobState = $initialJobState;
$finished = false;
$currentJob = null;
while (!$finished) {
$currentJob = Factory::job()->reload($currentJobState, DumpType::$JSON);
$currentJob->execute();
$finished = (($currentJob->getStatus() == JobStatus::$FAILED) || ($currentJob->getStatus() == JobStatus::$SUCCEEDED)) ? true : false;
$currentJobState = $currentJob->dump(DumpType::$JSON);
sleep(5);
}
if( $currentJob != null ){
var_dump($currentJob->getStatus());
var_dump($currentJob->getCaller("stop_virtual_machine")->getStatus());
var_dump($currentJob->getCaller("stop_virtual_machine")->response()->getResponse());
var_dump($currentJob->getCaller("stop_virtual_machine")->response()->getErrorCode());
var_dump($currentJob->getCaller("stop_virtual_machine")->response()->getErrorMessage());
var_dump($currentJob->getCaller("start_virtual_machine")->getStatus());
var_dump($currentJob->getCaller("start_virtual_machine")->response()->getResponse());
var_dump($currentJob->getCaller("start_virtual_machine")->response()->getErrorCode());
var_dump($currentJob->getCaller("start_virtual_machine")->response()->getErrorMessage());
var_dump($currentJob->dump(DumpType::$JSON));
}
use Clivern\Monkey\Util\Config;
use Clivern\Monkey\API\Request\PlainRequest;
use Clivern\Monkey\API\Response\PlainResponse;
use Clivern\Monkey\API\Request\RequestMethod;
use Clivern\Monkey\API\Request\RequestType;
use Clivern\Monkey\API\Caller;
use Clivern\Monkey\API\Job;
use Clivern\Monkey\API\DumpType;
use Clivern\Monkey\API\Factory;
use Clivern\Monkey\API\JobStatus;
use Clivern\Monkey\API\CallerStatus;
class TemplatesFilter
{
public static function addTemplateId($caller, $arguments)
{
if ($caller->getStatus() != CallerStatus::$SUCCEEDED) {
return false;
}
$response = $caller->response()->getResponse();
if( !is_array($response) || !isset($response["listtemplatesresponse"]) || !isset($response["listtemplatesresponse"]["template"]) ){
return false;
}
foreach ($response["listtemplatesresponse"]["template"] as $template) {
if(isset($arguments['template_name']) && ($template['name'] == $arguments['template_name'])) {
$caller->addItem("templateid", $template['id']);
break;
}elseif(!isset($arguments['template_name'])){
$caller->addItem("templateid", $template['id']);
break;
}
}
if( empty($caller->getItem("templateid")) ){
$caller->setStatus(CallerStatus::$FAILED);
$caller->response()->setErrorCode("M200");
$caller->response()->setErrorMessage((isset($arguments['template_name']))
? sprintf("Error! Can't find template with name: %s", $arguments['template_name'])
: "Error! Can't find any template."
);
}
}
}
class ServiceOfferingsFilter
{
public static function addServiceOfferId($caller, $arguments)
{
if ($caller->getStatus() != CallerStatus::$SUCCEEDED) {
return false;
}
$response = $caller->response()->getResponse();
if( !is_array($response) || !isset($response["listserviceofferingsresponse"]) || !isset($response["listserviceofferingsresponse"]["serviceoffering"]) ){
return false;
}
foreach ($response["listserviceofferingsresponse"]["serviceoffering"] as $serviceoffering) {
if(isset($arguments['serviceoffering_name']) && ($serviceoffering['name'] == $arguments['serviceoffering_name'])) {
$caller->addItem("serviceofferingid", $serviceoffering['id']);
break;
}elseif(!isset($arguments['serviceoffering_name'])){
$caller->addItem("serviceofferingid", $serviceoffering['id']);
break;
}
}
if( empty($caller->getItem("serviceofferingid")) ){
$caller->setStatus(CallerStatus::$FAILED);
$caller->response()->setErrorCode("M200");
$caller->response()->setErrorMessage((isset($arguments['serviceoffering_name']))
? sprintf("Error! Can't find service offering with name: %s", $arguments['serviceoffering_name'])
: "Error! Can't find any service offering."
);
}
}
}
class ZoneFilter
{
public static function addZoneId($caller, $arguments)
{
if ($caller->getStatus() != CallerStatus::$SUCCEEDED) {
return false;
}
$response = $caller->response()->getResponse();
if( !is_array($response) || !isset($response["listzonesresponse"]) || !isset($response["listzonesresponse"]["zone"]) ){
return false;
}
foreach ($response["listzonesresponse"]["zone"] as $zone) {
if(isset($arguments['zone_name']) && ($zone['name'] == $arguments['zone_name'])) {
$caller->addItem("zoneid", $zone['id']);
break;
}elseif(!isset($arguments['zone_name'])){
$caller->addItem("zoneid", $zone['id']);
break;
}
}
if( empty($caller->getItem("zoneid")) ){
$caller->setStatus(CallerStatus::$FAILED);
$caller->response()->setErrorCode("M200");
$caller->response()->setErrorMessage((isset($arguments['zone_name']))
? sprintf("Error! Can't find zone with name: %s", $arguments['zone_name'])
: "Error! Can't find any zone."
);
}
}
}
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
$request1 = new PlainRequest();
$request1->setMethod(RequestMethod::$GET)
->setType(RequestType::$SYNCHRONOUS)
->addParameter("command", "listTemplates")
->addParameter("templatefilter", "featured");
$response1 = new PlainResponse("\TemplatesFilter::addTemplateId", ["template_name" => "CentOS 5.6 (64-bit) no GUI (Simulator)"]);
$caller1 = new Caller($request1, $response1, "list_templates", $config->getCloudStackServer("us_dc_clsk_01"));
$request2 = new PlainRequest();
$request2->setMethod(RequestMethod::$GET)
->setType(RequestType::$SYNCHRONOUS)
->addParameter("command", "listServiceOfferings");
$response2 = new PlainResponse("\ServiceOfferingsFilter::addServiceOfferId", ["serviceoffering_name" => "Small Instance"]);
$caller2 = new Caller($request2, $response2, "list_service_offering", $config->getCloudStackServer("us_dc_clsk_01"));
$request3 = new PlainRequest();
$request3->setMethod(RequestMethod::$GET)
->setType(RequestType::$SYNCHRONOUS)
->addParameter("command", "listZones");
$response3 = new PlainResponse("\ZoneFilter::addZoneId", ["zone_name" => "Sandbox-simulator"]);
$caller3 = new Caller($request3, $response3, "list_zone", $config->getCloudStackServer("us_dc_clsk_01"));
$request4 = new PlainRequest();
$request4->setMethod(RequestMethod::$GET)
->setType(RequestType::$ASYNCHRONOUS)
->addParameter("command", "deployVirtualMachine")
->addParameter("serviceofferingid", "@list_service_offering->serviceofferingid")
->addParameter("templateid", "@list_templates->templateid")
->addParameter("zoneid", "@list_zone->zoneid");
$response4 = new PlainResponse();
$caller4 = new Caller($request4, $response4, "deploy_virtual_machine", $config->getCloudStackServer("us_dc_clsk_01"));
// Create a job with four callers and 4 default trials in case of failure
$job = new Job([
$caller1,
$caller2,
$caller3,
$caller4
], 4);
// Job initial state to store in database
$initialJobState = $job->dump(DumpType::$JSON);
var_dump($initialJobState);
$currentJobState = $initialJobState;
$finished = false;
$currentJob = null;
while (!$finished) {
$currentJob = Factory::job()->reload($currentJobState, DumpType::$JSON);
$currentJob->execute();
$finished = (($currentJob->getStatus() == JobStatus::$FAILED) || ($currentJob->getStatus() == JobStatus::$SUCCEEDED)) ? true : false;
$currentJobState = $currentJob->dump(DumpType::$JSON);
sleep(5);
}
if( $currentJob != null ){
var_dump($currentJob->getStatus());
var_dump($currentJob->getCaller("list_service_offering")->getStatus());
var_dump($currentJob->getCaller("list_service_offering")->response()->getResponse());
var_dump($currentJob->getCaller("list_service_offering")->response()->getErrorCode());
var_dump($currentJob->getCaller("list_service_offering")->response()->getErrorMessage());
var_dump($currentJob->getCaller("list_templates")->getStatus());
var_dump($currentJob->getCaller("list_templates")->response()->getResponse());
var_dump($currentJob->getCaller("list_templates")->response()->getErrorCode());
var_dump($currentJob->getCaller("list_templates")->response()->getErrorMessage());
var_dump($currentJob->getCaller("list_zone")->getStatus());
var_dump($currentJob->getCaller("list_zone")->response()->getResponse());
var_dump($currentJob->getCaller("list_zone")->response()->getErrorCode());
var_dump($currentJob->getCaller("list_zone")->response()->getErrorMessage());
var_dump($currentJob->getCaller("deploy_virtual_machine")->getStatus());
var_dump($currentJob->getCaller("deploy_virtual_machine")->response()->getResponse());
var_dump($currentJob->getCaller("deploy_virtual_machine")->response()->getErrorCode());
var_dump($currentJob->getCaller("deploy_virtual_machine")->response()->getErrorMessage());
var_dump($currentJob->dump(DumpType::$JSON));
}
use Clivern\Monkey\API\Contract\RequestInterface;
use Clivern\Monkey\API\Request\PlainRequest;
class CreateUser extends PlainRequest implements RequestInterface {
}
use Clivern\Monkey\API\Contract\ResponseInterface;
use Clivern\Monkey\API\Response\PlainResponse;
class CreateUser extends PlainResponse implements ResponseInterface {
}
#!/usr/bin/env php
Config;
use Clivern\Monkey\API\Request\PlainRequest;
use Clivern\Monkey\API\Response\PlainResponse;
use Clivern\Monkey\API\Request\RequestMethod;
use Clivern\Monkey\API\Request\RequestType;
use Clivern\Monkey\API\Caller;
$platform = false;
foreach ($argv as $value) {
if(strpos($value, "platform=") !== false){
$platform = str_replace("platform=", "", $value);
}
}
$command = false;
foreach ($argv as $value) {
if(strpos($value, "command=") !== false){
$command = str_replace("command=", "", $value);
}
}
if(empty($command) || empty($platform)){
die("Please Provide Command and The Platform ID");
}
$config = new Config();
$config->addCloudStackServer("us_dc_clsk_01", [
"api_url" => "http://clsk_url.com:8080/client/api",
"api_key" => "api_key_here",
"secret_key" => "secret_key_here"
]);
$request = new PlainRequest();
$request->setMethod(RequestMethod::$GET)
->setType(RequestType::$SYNCHRONOUS)
->addParameter("command", $command);
foreach ($argv as $value) {
if((strpos($value, "command=") === false) && (strpos($value, "platform=") === false) && strpos($value, "=")){
$parameter = explode("=", $value);
$request->addParameter($parameter[0], $parameter[1]);
}
}
// Create response object without callbacks
$response = new PlainResponse();
// Create a caller object with the request and response and ident
$caller = new Caller($request, $response, $command, $config->getCloudStackServer($platform));
// Run the call
$caller->execute();
$data = $caller->response()->getResponse();
echo json_encode($data);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.