广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >openstack中php sdk php-opencloud怎么用
  • 831
分享到

openstack中php sdk php-opencloud怎么用

2024-04-02 19:04:59 831人浏览 八月长安
摘要

这篇文章主要介绍了openstack中PHP sdk php-opencloud怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。&nbs

这篇文章主要介绍了openstack中PHP sdk php-opencloud怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

   openstack提供的是rest风格的api接口,其说明文档见:

Http://developer.openstack.org/api-ref-guides/bk-api-ref.pdf,为便于理解和简化调用,这里使用开源的php sdk——php-opencoud。

1 目录结构

    vendor

 ---------composer

 ---------guzzle

 ---------psr

 ---------rackspace

               --------------php-opencloud

               ---------------------docs

               ---------------------lib

                                               ---OpenCloud

               ---------------------samples

               ---------------------tests

    composer:提供自动加载的功能

    guzzle:处理http请求

    psr:提供日志功能

    rackspace/php-opencloud/lib/OpenCloud:php封装库

    OpenCloud不仅支持openstack的api,还支持Rackspace的api。

2 UML模型图

     openstack中php sdk php-opencloud怎么用

  由图中看到,可以从OpenStack客户端中根据需要获取不同的服务对象。计算服务用来管理云主机,通过主机类型、镜像、密钥对和网络等数据就可以创建一台云主机,而且能够对云主机做出暂停、恢复、停止、开始和重启等多种操作,还可以得到基于WEB vnc的控制台链接。对象存储服务是以容器的形式来存放数据对象,可以给对象名称设置路径前缀来对对象进行分类,组织成类似windows文件夹的结构。

3 示例代码

3.1 计算服务

<?php
require dirname(__DIR__) . '/vendor/autoload.php';
use OpenCloud\Openstack;
use OpenCloud\Compute\Constants\ServerState;
use Guzzle\Http\Exception\BadResponseException;
 
error_reporting(0);
 
$client = new Openstack('http://192.168.128.0:5000/v2.0', array(
    'username' => 'admin',
    'passWord'   => 'ADMIN_PASS',
    'tenantName' => 'admin'
));
 
$computeService = $client->computeService('nova','regionOne');
 
//1.枚举镜像
$p_w_picpaths = $computeService->p_w_picpathList();
printf("Images-------------------------------------------------------------------------\n");
foreach($p_w_picpaths as $p_w_picpath)
{
    printf("ID:%s,Name:%s\n",$p_w_picpath->id,$p_w_picpath->name);
}
 
//2.枚举主机类型
$flavors = $computeService->flavorList();
printf("Flavors-------------------------------------------------------------------------\n");
foreach($flavors as $flavor)
{
    printf("ID:%-36s,Name:%-36s,Vcpus:%d,Ram:%d\n",$flavor->id,$flavor->name,$flavor->vcpus,$flavor->ram);
}
 
//3.枚举密钥对(for windows:加密密码传输 for linux:ssh登录)
$keypairs = $computeService->lisTKEypairs();
printf("Keypairs------------------------------------------------------------------------\n");
foreach($keypairs as $keypair)
{
    printf("Name:%s\n",$keypair->getName());
}
 
//4.创建云主机
$server = $computeService->server();
 
printf("Create Server-------------------------------------------------------------------\n");
$serverName = 'test123';
$p_w_picpathId = 'c36b0707-38ec-45e5-9d62-7e8798f1724f';
$flavorId = '53b1355a-c7c6-41a6-884f-7b1604002897';
$keypairName = 'testKey';
try
{
    $response = $server->create(array(
        'name' => $serverName,
        'p_w_picpathId' => $p_w_picpathId,
        'flavorId' => $flavorId,
        'keypair' => $keypairName,
        'metadata' => array(
            'admin_pass' => '123456',//设置密码
            'appid' => '123456789' //设置自定义元数据
        )));
}catch(BadResponseException $e)
{
    echo $e->getResponse();
}
 
printf("ID:%s,Name:%s,Status:%s\n",$server->id,$server->name,$server->status);
 
function GetServerState($server)
{
    printf("Status:%s\n",$server->status);
}
 
//wait for
$server->waitFor(ServerState::ACTIVE,null,GetServerState,1);
 
if (is_object($server->addresses))
{
    foreach ($server->addresses as $netkey => $netvalue)
    {
        printf("\tNetwork name:%s\n",$netkey);
        if (is_array($netvalue))
        {
            foreach ($netvalue as $infokey => $infovalue)
            {
                printf("\t\tIndex:%s\n",$infokey);
                printf("\t\t\tMac:    %s\n",$infovalue->{'OS-EXT-IPS-MAC:mac_addr'});
                printf("\t\t\tVersion:%s\n",$infovalue->version);
                printf("\t\t\tAddr:   %s\n",$infovalue->addr);
                printf("\t\t\tType:   %s\n",$infovalue->{'OS-EXT-IPS:type'});
            }
        }
    }
}
 
//5.获取vnc访问地址
printf("VNC-----------------------------------------------------------------------------\n");
$console = $server->console();
printf("Type:%s,URL:%s\n",$console->type,$console->url);
 
//6.停止云主机
printf("Stop Server---------------------------------------------------------------------\n");
$server->stop();
 
$server->waitFor('SHUTOFF',null,GetServerState,1);
 
//7.启动云主机
printf("Start Server--------------------------------------------------------------------\n");
$server->start();
$server->waitFor(ServerState::ACTIVE,null,GetServerState,1);
 
//8.重启云主机
printf("ReBoot Server-------------------------------------------------------------------\n");
//$server->reboot(ServerState::REBOOT_STATE_SOFT);//REBOOT_STATE_SOFT:软重启 REBOOT_STATE_HARD:硬重启
//$server->waitFor(ServerState::ACTIVE,null,GetServerState,1);
 
//9.删除云主机
printf("Delete Server-------------------------------------------------------------------\n");
$server->delete();
 
//10.获取镜像信息
printf("Image Info----------------------------------------------------------------------\n");
$p_w_picpath = $computeService->p_w_picpath($server->p_w_picpath->id);
printf("ID:%s,Name:%s\n",$p_w_picpath->id,$p_w_picpath->name);
 
//11.获取主机类型信息
printf("Flavor Info---------------------------------------------------------------------\n");
$flavor = $computeService->flavor($server->flavor->id);
printf("ID:%s,Name:%s,Vcpus:%d,Ram:%d\n",$flavor->id,$flavor->name,$flavor->vcpus,$flavor->ram);

3.2 对象存储服务

<?php
require dirname(__DIR__) . '/vendor/autoload.php';
use OpenCloud\Openstack;
use OpenCloud\Common\Constants\Size;
use OpenCloud\ObjectStore\Resource\DataObject;
 
$client = new Openstack('http://192.168.128.0:5000/v2.0', array(
    'username' => 'admin',
    'password'   => 'ADMIN_PASS',
    'tenantName' => 'admin'
));
 
//获取对象存储服务
$objectStoreService = $client->objectStoreService('swift', 'regionOne');
 
//1.创建容器(每个云盘使用者都有一个容器跟其对应)
$containerName = 'testContainer';
printf("Create Container %s------------------------------------------------------\n",$containerName);
//检查名字合法性
$objectStoreService->checkContainerName($containerName);
$container = $objectStoreService->createContainer($containerName);
if($container == false)
{
    $container = $objectStoreService->getContainer($containerName);
}
else
{
    //设置配额
    $container->setBytesQuota(5 * Size::GB); // 5GB
}
 
//2.枚举容器
$containers = $objectStoreService->listContainers();
printf("Containers--------------------------------------------------------------------------\n");
foreach ($containers as $container)
{
    $container = $objectStoreService->getContainer($container->name);
    printf("Name:%-60s,BytesUsed:%15.6fM,ObjectCount:%d",$container->name,$container->getBytesUsed() / 1024 / 1024,$container->getObjectCount());
    $bytesQuota = $container->getBytesQuota();
    if($bytesQuota)
        printf(",BytesQuota:%.6fM",$bytesQuota / 1024 / 1024);
 
    printf("\n");
}
 
//3.容器添加对象
$container = $objectStoreService->getContainer($containerName);
//添加文件
$customHeaders = array('Content-Type' => 'text/plain');
$fileData = fopen('D:/upload_small_object.txt', 'r');
$object = $container->uploadObject('upload_small_object.txt', $fileData,$customHeaders);
//添加目录(注意后面的斜杠)
$dirName = 'dir1/';
$object = $container->uploadObject($dirName,'');
//目录添加文件(文件放到目录中,必须在文件名前加上目录,形成类似a/b/c/d/1.txt结构(目录a/,目录a/b/,目录a/b/c/,目录a/b/c/d/))
$fileData = fopen('D:/upload_small_object.txt', 'r');
$object = $container->uploadObject($dirName . 'upload_small_object.txt', $fileData,$customHeaders);
//目录下再添加目录
$dirName = $dirName . 'dir1-1/';
$object = $container->uploadObject($dirName,'');
//二级目录下再添加文件
$fileData = fopen('D:/upload_small_object.txt', 'r');
$object = $container->uploadObject($dirName . 'upload_small_object.txt', $fileData,$customHeaders);
 
//4.枚举对象
printf("%s Objects-----------------------------------------------------------\n",$containerName);
//是目录的最后一个字符是斜杠
$objects = $container->objectList();
foreach ($objects as $object)
{
    printf("Name:%-60s,Size:%15.6fM,LastModified:%s\n",$object->getName(),$object->getContentLength(),$object->getLastModified());
}
 
//5.枚举目录下的对象(设定前缀)
printf("%s Objects---------------------------------------------------------------\n",$dirName);
$objects = $container->objectList(array('prefix' => $dirName));
foreach ($objects as $object)
{
    printf("Name:%-60s,Size:%15.6fM,LastModified:%s\n",$object->getName(),$object->getContentLength(),$object->getLastModified());
}
 
//6.下载文件
$object = $container->getObject($dirName . 'upload_small_object.txt');
$objectContent = $object->getContent();
$objectContent->rewind();
$stream = $objectContent->getStream();
file_put_contents('D:/123.txt', $stream);
 
//7.删除容器(删除云盘使用者时删除对应云盘)
$objects = $container->objectList();
//循环删除每个对象(不支持批删)
foreach ($objects as $object)
{
   $object->delete();
}
$container->delete();

感谢你能够认真阅读完这篇文章,希望小编分享的“openstack中php sdk php-opencloud怎么用”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网PHP编程频道,更多相关知识等着你来学习!

--结束END--

本文标题: openstack中php sdk php-opencloud怎么用

本文链接: https://www.lsjlt.com/news/83723.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • openstack中php sdk php-opencloud怎么用
    这篇文章主要介绍了openstack中php sdk php-opencloud怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。&nbs...
    99+
    2022-10-19
  • PHP SDK是什么意思?使用SDK有什么好处?
    如果您是一个网站开发者或者在学习PHP编程语言的过程中,您可能会听说过PHP SDK。那么PHP SDK是什么意思呢?PHP SDK(Software Development Kit)是用于PHP开发的一组工具和库。它们可以用于简化网络开发...
    99+
    2023-05-14
    php sdk
  • 详解PHP中怎么安装支付宝SDK?(指南分享)
    随着电子商务的普及,支付宝成为了最流行的在线付款平台之一,因此,许多网站和应用程序都使用支付宝 SDK 进行开发。PHP 支付宝 SDK 是一种特殊的软件包,可以方便地与支付宝相关接口进行交互。本文将提供关于 PHP 支付宝 SDK 的详细...
    99+
    2023-05-14
    php sdk
  • PHP中php://input怎么用
    本文操作环境:Windows7系统,PHP7.1版,Dell G3电脑。PHP中php://input怎么用?对于php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。“php://input allows you ...
    99+
    2015-01-18
    PHP 输入流
  • PHP SDK的安装和使用的方法是什么
    本文小编为大家详细介绍“PHP SDK的安装和使用的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP SDK的安装和使用的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一步:下载PHP...
    99+
    2023-07-05
  • php中case怎么用
    这篇文章将为大家详细讲解有关php中case怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php中case是在switch语句中使用,其使用语法如“switch (n){case label1:br...
    99+
    2023-06-22
  • php中$_SERVER怎么用
    这篇文章主要为大家展示了“php中$_SERVER怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中$_SERVER怎么用”这篇文章吧。为了我们了解这个数组,我们来看一个小栗子。<...
    99+
    2023-06-20
  • php中continue怎么用
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑continue 是用在循环结构中的,它可以控制程序放弃本次循环中 continue 语句之后的代码并进行下一次循环。continue 本身并不跳出循环结构,只是放弃这...
    99+
    2017-09-06
    php continue
  • PHP中mysqli_more_results怎么用
    这篇文章主要介绍PHP中mysqli_more_results怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!定义和用法mysqli_more_results - 检查...
    99+
    2022-10-19
  • php中list怎么用
    这篇文章将为大家详细讲解有关php中list怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。list妙用//妙用一 list($a,$b) = [...
    99+
    2022-10-19
  • php中private怎么用
    这篇文章将为大家详细讲解有关php中private怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在PHP中,private是一个访问修饰符,用于限制修饰成员的可访问性,表示的意思是“私有的”,也就是...
    99+
    2023-06-29
  • php中yield怎么用
    小编给大家分享一下php中yield怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!yield 解决的问题解决运行内存的瓶颈,php程序中的变量存储在内存中,...
    99+
    2023-06-15
  • php中eval怎么用
    小编给大家分享一下php中eval怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php eval函数的作用是把字符串按照PHP代码来计算,其使用语法如“eval(phpcode)”,其中参数phpcode则是规定要计...
    99+
    2023-06-21
  • php中getimagesize怎么用
    这篇文章主要介绍了php中getimagesize怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php getimagesize的作用是测定任何图像文件的大小并返回图像...
    99+
    2023-06-25
  • php中result怎么用
    这篇文章主要介绍了php中result怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php中result怎么用文章都会有所收获,下面我们一起来看看吧。在php中,result的意思是“结果”,“mysql...
    99+
    2023-06-26
  • php中explode怎么用
    这篇文章将为大家详细讲解有关php中explode怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php explode用于把字符串打散为数组,explode函数的使用语法是“explode(sepa...
    99+
    2023-06-09
  • php中Session怎么用
    小编给大家分享一下php中Session怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.Session简介PHP 中的 session 会话是通过唯一的会...
    99+
    2023-06-14
  • php中pcntl怎么用
    这篇文章主要介绍了php中pcntl怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php pcntl的用法:首先创建一个PHP示例文件;然后使用PCNTL系列的函数处理...
    99+
    2023-06-14
  • php中public怎么用
    小编给大家分享一下php中public怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在PHP中,public是一个访问修饰符,用于限制修饰成员的可访问性,表...
    99+
    2023-06-29
  • PHP中PDO怎么用
    小编给大家分享一下PHP中PDO怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!大约 80% 的 Web 应用程序由 PHP 提供支持。类似地,SQL 也是如...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作