Hello World, OpenNebula Cloud API 编程
2012年01月16日 | 标签: cloud, oca, opennebula, opennebula cloud api, python, ruby | 作者:vpsee
先报告一下我们云计算项目的进度。去年休假前订购的服务器和部件已经陆续到货了,计算节点采用的是 Dell PowerEdge M710HD 刀片服务器,特别为数据中心级虚拟应用设计,海量内存、密集 IO 吞吐等优势,特别适合云计算、虚拟机等应用。现在正在等 Dell 的售后技术人员过来安装服务器和存储阵列,有些电源和机柜问题需要解决,顺利的话下周服务器可以上线。
OpenNebula 提供了 XML-RPC 的方式访问 OpenNebula Cloud Api (OCA),这样就允许不同操作系统、不同语言编写的客户端程序可以通过 XML-RPC 远程调用的方式来访问 OpenNebula 服务。下面通过两个不同语言编写的最简单例子抛砖引玉一下,来看看如何是如何与 OCA 打交道的。
OpenNebula 绝大部分是由 Ruby 编写的,其提供的 Ruby OCA API 实现当然是最丰富和完整的。先安装 Ruby OCA Bindings:
$ sudo gem install oca
用 Ruby 编写一小段代码试验一下,以下代码用来打印当前云里每个计算结点的 hostname:
#!/usr/bin/ruby require 'rubygems' require 'oca' include OpenNebula # OpenNebula credentials CREDENTIALS = "oneadmin:vpsee" # XML_RPC endpoint where OpenNebula is listening ENDPOINT = "http://localhost:2633/RPC2" client = Client.new(CREDENTIALS, ENDPOINT) host_pool = HostPool.new(client) rc = host_pool.info # Print all the hostname from the host pool host_pool.each do |host| puts host.name end
再来看看用 Python 如何编写上面类似功能的代码。安装 Python OCA Bindings:
$ sudo easy_install oca
用 Python 编写一小段代码看一下:
#!/usr/bin/python import oca # OpenNebula credentials CREDENTIALS = "oneadmin:vpsee" # XML_RPC endpoint where OpenNebula is listening ENDPOINT = "http://localhost:2633/RPC2" client = oca.Client(CREDENTIALS, ENDPOINT) host_pool = oca.HostPool(client) host_pool.info() # Print all the hostname from the host pool for host in host_pool: print host.name
应该没人会想在这种情况下用 Java 或 C++ 吧,Programming Examples 里面提供的 Java OCA 和 C++ 例子比 Ruby, Python 复杂得多。
最终采用OpenNebula了?
放弃openstack了?
@babo
首选 OpenStack,第二选择 OpenNebula,备份方案 VMware vSphere.
LingCloud就是用OpenNebula作为执行引擎,不过现在新版本的OpenNebula本身的应用层工具已经做得不错了,LingCloud的发展方向需要进一步思考。
关注ING!
能说说选择OpenStack、OpenNebula的主要考虑吗?和商业软件比较有何优缺点?
hi,问个问题:OpenNebula中
onehost list
ID NAME CLUSTER RVM TCPU FCPU ACPU TMEM FMEM STAT
1 vm-container-26-2 default 5 1600 1598 1100 23.9G 22.4G on
如上信息,CPU的统计都是*100,vpsee知道nebula为什么这么做吗?
当我创建8CPU、8G内存的虚拟机后,onevm list 能看到虚拟机由pending变为prolog状态,对应所属主机内存会马上减掉8G,更新到nebula数据库host…表中. 但是CPU为什么只是减少了1个? 不应该是8个吗?请教下vpsee,盼复!!谢谢!
楼主试过用php xmlrpc 与opennebula的xmlrpc API进行对接吗?今天搞了一整天,返回的error no是512,也就是 0x0200 AUTHORIZATION User is not authorized to perform the requested action.
这是用户认证的问题,还是认证后没有对这个操作进行授权呢?望解答一下。关注本贴!
======================================
测试php文件如下:
<?php
require_once('/root/software/xmlrpc/xmlrpc-2.2.2/lib/xmlrpc.inc');
$UserPwd = ":”;
$m = new xmlrpcmsg(‘one.hostpool.info’,array(new xmlrpcval($HTTP_POST_VARS[“$UserPwd”], “string”)));
$c = new xmlrpc_client(“/RPC2”, “localhost”, 2633);
$r = $c->send($m);
if (!$r->faultCode()) {
$v = $r->value();
print “State number ” .$HTTP_POST_VARS[$UserPwd] . ” is ” .$v->scalarval() . “\n”;
print “I got this value back” .$r->serialize() . “\n”;
} else {
print “Fault\n”;
print “Code: ” . $r->faultCode(). “\n” .
“Reason: ” .$r->faultString() . “\n”;
}
print $r->faultCode().”\n”;
?>
楼上的为 $UserPwd = “oneadmin:password”;
不知道怎么不见了
返回
0
[HostPoolInfo] User [-1] : Not authorized to perform INFO_POOL HOST.
512