使用Python和Requests访问HP OpenStack Nova

因此,我申请加入新的惠普云服务的免费和私人测试版,已经被惠普云团队所接受,今天我终于有一段时间在惠普云端使用OpenStack API。我将从我对服务的第一印象开始:

管理的用户界面非常用户友好,设计与Twitter Bootstrap非常相似,请参阅“管理”部分中“计算”页面的屏幕截图:

以下是实例大小集的截图:

因为他们使用的是OpenStack,所以我认为他们应该将OpenStack的词汇导入到用户界面中,而不是将其称为“Size”,而使用“ Flavor ” 更为明智。

用户界面仍然没有很多功能,我真正想要的是一个“停止”或类似的东西,只有“终止”功能是存在于管理界面,但这些细节他们应该还在工作,因为他们只是在测试版。

另一个重要的信息是,通过使用生成的RSA密钥通过SSH完成对实例的访问。

现在让我们深入OpenStack API。

OpenStack API

要访问OpenStack API,您需要凭证进行身份验证,惠普云服务为您拥有的每个区域/服务在管理界面上提供这些密钥,请参阅下面的屏幕截图(当然,密钥是匿名的):

让我们开始通过子类别 Requests AuthBase来定义认证方案:

class OpenStackAuth(AuthBase):
    def __init__(self, auth_user, auth_key):
        self.auth_key = auth_key
        self.auth_user = auth_user

def __call__(self, r):
    r.headers['X-Auth-User'] = self.auth_user
    r.headers['X-Auth-Key'] = self.auth_key
    return r

如您所见,我们正在使用参数在请求头中定义X-Auth-User和X-Auth-Key。这些参数分别是我们前面引用的帐户ID和访问密钥。现在,您所要做的就是使用身份验证方案自行完成请求,这很容易使用Requests:

ENDPOINT_URL = 'https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/'
ACCESS_KEY = 'Your Access Key'
ACCOUNT_ID = 'Your Account ID'
response = requests.get(ENDPOINT_URL, auth=OpenStackAuth(ACCOUNT_ID, ACCESS_KEY))

就是这样,您只需使用几行代码即可完成认证机制,这就是将请求发送到HP Cloud服务器的方式:

此请求会发送到HP Cloud Endpoint URL(https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/)。现在让我们看看服务器如何回应这个认证请求:

您可以通过打印请求响应对象的标头属性来使用请求显示此身份验证响应。您可以看到服务器用两个重要的标题项来回答我们的请求:X-Server-Management-URL和X-Auth-Token。管理URL现在是我们的新端点,是我们应该用来向HP Cloud服务提出进一步请求的URL,而X-Auth-Token是服务器根据我们的凭据生成的认证令牌,这些令牌通常适用于24小时,但是我还没有测试过。

我们现在需要做的是再次对请求AuthBase类进行子类化,但是这次只定义了我们需要使用的每个新请求中要使用的身份验证令牌。

class OpenStackAuthToken(AuthBase):
    def __init__(self, request):
        self.auth_token = request.headers['x-auth-token']

def __call__(self, r):
    r.headers['X-Auth-Token'] = self.auth_token
    return r

请注意,OpenStackAuthToken正在接收响应请求作为参数,复制X-Auth-Token并将其设置为请求。

让我们使用OpenStack API v.1.1中的一个服务,我打算调用List Server API函数,使用JSON解析结果,然后在屏幕上显示结果:

# Get the management URL from the response header
mgmt_url = response.headers['x-server-management-url']

# Create a new request to the management URL using the /servers path
# and the OpenStackAuthToken scheme we created
r_server = requests.get(mgmt_url + '/servers', auth=OpenStackAuthToken(response))

# Parse the response and show it to the screen
json_parse = json.loads(r_server.text)
print json.dumps(json_parse, indent=4)

这就是我们对这个要求的回应:

{
    "servers": [
        {
            "id": 22378,
            "uuid": "e2964d51-fe98-48f3-9428-f3083aa0318e",
            "links": [
                {
                    "href": "https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/20817201684751/servers/22378",
                    "rel": "self"
                },
                {
                    "href": "https://az-1.region-a.geo-1.compute.hpcloudsvc.com/20817201684751/servers/22378",
                    "rel": "bookmark"
                }
            ],
            "name": "Server 22378"
        },
        {
            "id": 11921,
            "uuid": "312ff473-3d5d-433e-b7ee-e46e4efa0e5e",
            "links": [
                {
                    "href": "https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/20817201684751/servers/11921",
                    "rel": "self"
                },
                {
                    "href": "https://az-1.region-a.geo-1.compute.hpcloudsvc.com/20817201684751/servers/11921",
                    "rel": "bookmark"
                }
            ],
            "name": "Server 11921"
        }
    ]
}

就是这样,现在你知道如何使用Requests和Python来使用OpenStack API。如果你想阅读更多关于API的信息,它是如何工作的,你可以阅读这里文档

本文的版权归 Hero 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞雪无情的博客

Go语言经典库使用分析(五)| Negroni 中间件(一)

上一篇介绍的Gorilla Handlers中间件,严格来说不能称之为一个库或者框架,他只是一系列包装http.Handler的中间件函数,并且他们之间没有任何...

10130
来自专栏orientlu

连接器 -- Scatter File & Linker Script File

源文件编译后生成 elf 格式的目标文件(各种.o), 与运行时库经过连接器处理后,生成可以被写入嵌入式设备 ROM 中的 elf 格式文件。

20420
来自专栏依乐祝

Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)

上一篇文章中,给大家讲解了如何通过 Asp.Net Core Web Api实现图片上传的接口,具体的可以[点这里查看][https://www.cnblogs...

18410
来自专栏护卫神小符的专栏

如何在护卫神镜像中安装 SQL SERVER?

针对很多腾讯云新上云的用户,在购买安装护卫神镜像系统后,需要使用到SQL SERVER但是又不清楚如何安装配置SQL SERVER。

34800
来自专栏游戏杂谈

webgame开发中的文件解密

因为图片文件经过加密,已经成了二进制流的文件了(一堆乱码),只能使用URLStream来加载资源了。

11440
来自专栏惨绿少年

awk巩固练习题

第1章 awk数组练习题 1.1 文件内容(仅第一行) [root@znix test]# head -1 secure-20161219 access.log...

25700
来自专栏散尽浮华

Linux下DNS服务(Bind9)之Web管理利器-NamedManager部署说明

NamedManager 是一个基于Web的DNS管理系统,可用来添加、调整和删除DNS的zones/records数据。它使用Bind作为底层DNS服务,提供...

1.4K80
来自专栏测试驿栈

入侵常用端口详解

第三方通用组件漏洞struts thinkphp jboss ganglia zabbix 

50230
来自专栏数据之美

使用 django-blog-zinnia 搭建个人博客

django-blog-zinnia 虽然小巧,但是具备了个人博客应用的全部基础功能,且具有很高的拓展性,并且开箱即用。以下是官方列出的一些特性: 评论 站...

36590
来自专栏开心的学习之路

Fedora27搭建GPU版TensorFlow

主机:华硕(ASUS)G11飞行堡垒 显卡:GeForce 1070 原操作系统为win10,准备安装Fedora 27,从零开始搭建GPU版TensorF...

40570

扫码关注云+社区

领取腾讯云代金券