使用openstack通过php启动实例并根据请求自动构建实例的指导?

时间:2014-04-15 11:28:31

标签: php vmware openstack openstack-nova juju

一个非常开放的问题,我需要一些建议,更重要的是指向正确的方向。

我正在考虑将openstack用于我的私有云(目前使用VMware),因为主要目的是能够从我们的Web应用程序中启动一个新的VM实例,这样就可以通过php页面触发例如,部署新的apache worker服务器。下一个目标是开发我们的代码,以便能够查看服务器负载何时变高或需要更多工作服务器来执行任务以自动启动实例?

我一直在查看openstack API,看看这是否是最佳方法?但也看juju,看看你是否可以使用魅力来做到这一点,看看juju的api是否最好?

目标是使用VMware或替换vmware。

我当前的设置是在使用nova作为存储的笔记本电脑上运行openstack所以对指针的任何帮助都会很棒

我知道这是一个悬而未决的问题

1 个答案:

答案 0 :(得分:1)

有一个SDK页面列出了许多存在的OpenStack API客户端SDK。

价:

https://wiki.openstack.org/wiki/SDKs#PHP

目前已列出两个适用于OpenStack的PHP SDK:

价:

https://github.com/rackspace/php-opencloud https://github.com/zendframework/ZendService_OpenStack

我不会将Juju用作界面。坦率地说,我不确定OpenStack是您正在做的事情的正确工具。但是,如果你想玩devstack并获得一个想法,我认为rackspace的php客户端SDK可能是一个好的开始。 Devstack也不是一种糟糕的方式来获得这种体验。

使用php-opencloud启动服务器的示例:

$server = $compute->server();

try {
$response = $server->create(array(
    'name'     => 'My lovely server',
    'image'    => $ubuntu,
    'flavor'   => $twoGbFlavor
));
} catch (\Guzzle\Http\Exception\BadResponseException $e) {

// No! Something failed. Let's find out:

$responseBody = (string) $e->getResponse()->getBody();
$statusCode   = $e->getResponse()->getStatusCode();
$headers      = $e->getResponse()->getHeaderLines();

echo sprintf("Status: %s\nBody: %s\nHeaders: %s", $statusCode, $responseBody, implode(', ', $headers));
}

这将是一个轮询功能:

use OpenCloud\Compute\Constants\ServerState;

$callback = function($server) {
if (!empty($server->error)) {
    var_dump($server->error);
    exit;
} else {
    echo sprintf(
        "Waiting on %s/%-12s %4s%%",
        $server->name(),
        $server->status(),
        isset($server->progress) ? $server->progress : 0
    );
}
};

$server->waitFor(ServerState::ACTIVE, 600, $callback);