使用Python和Requests访问HP OpenStack Nova

2018-01-09 10:07:42 浏览数 (1)

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

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

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

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

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

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

现在让我们深入OpenStack API。

OpenStack API

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

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

代码语言:python代码运行次数:0复制
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代码运行次数:0复制
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的信息,它是如何工作的,你可以阅读这里的文档。

pythonopenstackpythonopenstack

0 人点赞