前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python和Requests访问HP OpenStack Nova

使用Python和Requests访问HP OpenStack Nova

作者头像
Hero
发布2018-01-09 10:07:42
2.1K0
发布2018-01-09 10:07:42

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

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

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

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

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

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

现在让我们深入OpenStack API。

OpenStack API

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

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

代码语言:python
复制
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:

代码语言:javascript
复制
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类进行子类化,但是这次只定义了我们需要使用的每个新请求中要使用的身份验证令牌。

代码语言:python
复制
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解析结果,然后在屏幕上显示结果:

代码语言:javascript
复制
# 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)

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

代码语言:javascript
复制
{
    "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的信息,它是如何工作的,你可以阅读这里文档

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenStack API
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档