openstack二次开发:Python API

作 为 OpenStack 用户或管理员,您常常需要编写脚本来自动化常见任务。除了 REST 和命令行接口之外,OpenStack 还公开了原生的 Python API 绑定。了解如何使用这些 Python 绑定简化编写 OpenStack 自动化脚本的过程。



OpenStack 是一个越来越流行的、用于部署基础架构即服务 (IaaS) 云的开源解决方案。OpenStack 附带了一个仪表板 Web 应用程序,非常适合执行手动任务,比如启动单个虚拟机 (VM) 实例,但是,如果希望自动化基于云的任务,则需要编写可操作 OpenStack 的脚本。



许多用户直接为 OpenStack 具象状态传输 (REST) 应用编程接口 (API) 编写自动化脚本,或者编写调用命令行工具(比如keystone 或 nova)的 shell 脚本。但 Python 中有一种编写 OpenStack 自动化脚本的更好方法。所有 OpenStack 服务都公开了原生 Python API,以公开与命令行工具相同的特性集。不幸的是,描述如何使用这些 API 的文档很少。



如果您是 Python 程序员,那么 Python API 会比命令行工具或 REST API 容易使用得多。在本文中,我将演示如何使用原生 OpenStack Python API 自动化常见的用户和管理性任务。



OpenStack 项目和代号

OpenStack 这个词不是指单个应用程序。它是一个服务集合,这些服务协同工作来实现 IaaS 云。每个 OpenStack 服务都有一个正式名称和一个代号,如表 1 所示,而且每个 OpenStack 服务公开了自己的 Python API。

表 1. OpenStack 服务和代号
27151317_TevB.jpg


安装 Python 绑定

Python 绑定与每个服务的命令行工具捆绑在一起。事实上,每个命令行工具使用相应的 Python API 实现。可从 Python Package Index(PyPi — 参见参考资料,获取相关链接)中使用 pip(一个 Python 包安装程序)来安装每个工具。pip 包名称包括:


  • python-keystoneclient

  • python-glanceclient

  • python-novaclient

  • python-quantumclient

  • python-cinderclient

  • python-swiftclient

例如,要安装 keystone 客户端,可运行以下命令:

$ pip install python-keystoneclient



可将这些包安装到 Python 虚拟环境或您的系统级 Python 包中,只要您拥有本地机器上的根用户特权。


所有 OpenStack API 都有一些版本,Python 绑定支持多个 API 版本,以保持向后兼容性。因此可以安全地下载这些包的最新版本,因为它们将会适合 OpenStack 服务的所有更低版本。


在本文中,我将重点介绍来自以下服务的 Python API 示例:


  • OpenStack Identity Service (keystone)

  • OpenStack Image Service (glance)

  • OpenStack Compute Service (nova)




设置一个测试环境

为 了最充分地掌握本文的内容,建议您使用管理员特权访问一个 OpenStack 云,以便试用这些代码段。如果目前没有 OpenStack 云的管理员访问权,那么最简单的方法就是在一个 VM 中部署 OpenStack。DevStack 项目旨在简化在单个机器上创建一个面向开发的 OpenStack 部署的过程。配合 VirtualBox 等虚拟化工具,您可以在笔记本电脑上(甚至在 Mac 或 Windows® 上)实现一个 OpenStack 云。



您还可以获得 TryStack 上的一个免费帐户,TryStack 是由社区维护的 OpenStack 沙盒。请注意,只能获取 TryStack 上的用户级特权,不能获得管理级特权,所以您无法使用 TryStack 测试需要管理特权的脚本。



OpenStack Identity (keystone)

客户端要对 Identity (keystone) API 发出请求,可实例化适当的 keystone 客户端 Python 对象并调用它的方法。因为 API 提供了版本控制,所以 Python 客户端始终与该 API 的一个特定版本有关联。


清单 1 显示了使用 keystone 客户端的 2.0 版将 Image Service 添加到服务目录的示例。


清单 1. 使用 keystone 创建一个管理员角色

import keystoneclient.v2_0.client as ksclient
# Replace the method arguments with the ones from your local config
keystone = ksclient.Client(auth_url="http://192.168.27.100:35357/v2.0",
                           username="admin",
                           password="devstack",
                           tenant_name="demo")
glance_service = keystone.services.create(name="glance",
                            service_type="image",
                            description="OpenStack Image Service")
复制代码

凭据

在 实例化 keystoneclient.v2_0.client.Client 对象时必须提供凭据。keystone 端点接受两种类型的凭据:令牌,或者用户名和密码。如果您是管理员,那么您可以使用 admin 令牌,这是一种具有管理员特权且永不过期的特殊令牌。要定义此令牌,可以使用运行 keystone 服务的机器上的 /etc/keystone/keystone.conf 文件中的 admin_token 选项(参见清单 2)。

清单 2. 使用身份验证令牌执行身份验证

import keystoneclient.v2_0.client as ksclient
# Replace the values below with the ones from your local config
endpoint = "http://192.168.27.100:35357/v2.0"
admin_token = "devstack"
keystone = ksclient.Client(endpoint=endpoint, token=admin_token)
复制代码

出于安全原因,一般不赞成使用 admin 令牌。相反,在创建了具有管理特权的用户之后,建议 OpenStack Identity 开发人员始终使用用户名和密码进行身份验证(参见清单 3)。

清单 3. 使用用户名和密码执行身份验证

import keystoneclient.v2_0.client as ksclient
# Replace the values below  the ones from your local config,
auth_url = "http://192.168.27.100:35357/v2.0"
username = "admin"
password = "devstack"
tenant_name = "demo"
keystone = ksclient.Client(auth_url=auth_url, username=username,
                           password=password, tenant_name=tenant_name
  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值