通过 ec2-api / boto 调用 OpenStack 功能

通过 ec2-api / boto 调用 OpenStack 功能

OpenStack 支持 amazon ec2 的 api,并能通过 python 库 boto 来进行调用。目前,社区在把 ec2-api 从 nova-api 中脱离出来,独立作为一个项目,放到 stackforge 中。项目的源代码地址为 https://github.com/stackforge/ec2-api

创建验证信息

ec2-api 有自己的验证方式,并转换到 keystone 上进行最终的验证。在使用前,需要先创建 ec2 的凭据信息:

keystone --tenant-id <tenant-id> --user-id <user-id> ec2-credentials-create

可通过下面的命令查看所有的 ec2 凭据信息:

keystone ec2-credentials-list

输出的结果如下:

+--------+----------------------------------+----------------------------------+
| tenant |              access              |              secret              |
+--------+----------------------------------+----------------------------------+
| admin  | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+--------+----------------------------------+----------------------------------+

然后,可使用 boto 来调用 ec2-api。

使用 boto 调用 ec2-api

首先安装 boto,安装 2.25.0 之前的版本

pip install boto<2.35.0

由于 boto 2.35.0 以后的版本,在签名上与 OpenStack 采用的流程有点不同(在 IceHouse 版本上还存在此问题),因此会导致兼容性问题,在 nova-api 中会有错误信息:

AuthFailure: Signature not provided

如果遇到这种情况,更换为 2.34.0 即可。

然后,使用 ec2 凭据信息的 access 和 secret 来连接 OpenStack:

import boto
from boto.ec2.connection import EC2Connection

region = boto.ec2.RegionInfo(name='nova', endpoint='<OpenStack IP>')
conn = EC2Connection(aws_access_key_id="<access>",
                 aws_secret_access_key="<secret>",
                 is_secure=False,
                 port=8773,
                 path='/services/Cloud',
                 region=region)
regions = conn.get_all_regions()
print('--regions--')
print(str(regions))

boto / ec2-api 还支持很多其它的操作,均通过 EC2Connection 来进行。

在 stackforge 上, ThoughtWorks 贡献了 ec2-driver,实现 nova 调用 ec2。通过适当的修改,可以通过 ec2-api 来集成其它的 OpenStack(即 OpenStack on OpenStack )。

posted @ 2015-05-29 11:26  drop *  阅读(671)  评论(0编辑  收藏  举报