买车装途观加装导航倒车影像像还是导航好

>>> OpenStack命令行工具与API
OpenStack命令行工具与API
  从这一刻起本指南中,我们假设你已经有一个OpenStack环境运行起来了。本章节将帮助建立你的工作环境并使用它来带领你漫步云端。
  命令行工具
  我们推荐Openstack命令行工具和Openstack的Dashboard两者结合使用。一些用户由于使用过其他云技术背景的,可能会使用EC2兼容的API,相对于我们需要使用到的Openstack原生的API,这些EC2兼容的API使用了不同命名习惯。
  我们强烈建议你从Python Package Index(PyPI)()安装命令行客户端,而不是从Ubuntu或者Fedora的软件包。客户端开发的很快,所以有可能在你安装的时候,操作系统自带发行的软件包已经过时。&pip&可以从大多数的linux发行版里通过&python-pip&这个软件包得到,这个工具是用来管理PyPi的安装包。每个Openstack项目有自己的客户端,所以根据你使用的服务选择某些或者所有以下的软件包:
  python-novaclient(nova CLI)
  python-glanceclient(glance CLI)
  python-keystoneclient(keystone CLI)
  python-cinderclient(cinder CLI)
  python-swiftclient(swift CLI)
  python-quantumclient(quantum CLI)
  安装工具
  使用root从PyPi安装(升级):
  #&pip&install&[&upgrade]&&package-name&
  卸载软件
  #&pip&uninstall&&package-name&
  如果你需要更加新的客户端版本,可以用pip加-e参数直接从git库安b。你必须为需要安装的Python egg指定名称。例如:
  #&pip&install&-e&git+;
  如果你需要在你的云上支持EC2 API的话,你还需要安装&euca2ools&软件包或者一些其他的EC2 API的工具,这样你可以和你的用户有相同的视图。如何使用EC2 API工具超出了这本手册的范围,但是我们会讨论如何得到使用EC2的认证。
  管理命令行工具
  以下是几种 *-manage命令行工具:
  nova-manage&glance-manage&keystone-manage&cinder-manage&
  与上文提到的客户端工具不同,*-manage工具必须在由root在控制节点上运行,因为这些命令需要有访问配置文件的权限,例如/etc/nova.conf,并且需要直接查询数据库而不是通过Openstack的API接口。
  -manage工具存在是一个遗留问题。openstack项目最终的目标是把这些遗留的-manage工具移植到正规的客户端工具中去。到目前为止,你仍旧需要通过ssh登录到控制节点上运行*-manage工具进行维护管理操作。
  获取证书
  如果你要使用命令行工具对你的Openstack云平台进行操作,你必须有合适的证书。目前最方便的得到认证证书的方式是使用horizon dashboard。在顶部的导航栏,点击Setting链接,进入用户配置页面,在页面里你可以为dashboard视图设置语言和时区。更重要的是,这个操作改变了左列的导航栏,里面包含了Openstack API和EC2 Credentials链接,这两个链接将会得到可以在你的shell环境中source的文件,文件包含了命令行工具所需要的servide endpoints地址和你的认证信息。
  点击Openstack API链接。顶部的部分列出了你的Service Endpoints的URL地址,底部是Download Openstack RC File。为了以管理员的身份查看云平台,你可以从下拉菜单中选择admin。选择你需要的project项目,然后点击Download RC。于是会得到一个名为openrc.sh的文件,内容类似如下:
  #!/bin/bash
  # With the addition of Keystone, to use an openstack cloud you should # authenticate against keystone, which returns a Token and Service # Catalog. The catalog contains the endpoint for all services the # user/tenant has access to - including nova, glance, keystone, swift. # # NOTE: Using the 2.0 auth api does not mean that compute api is 2.0. # We use the 1.1 compute api
  export OS_AUTH_URL=
  # With the addition of Keystone we have standardized on the term tenant # as the entity that owns the resources.
  export OS_TENANT_ID=98333aba48e756fa8f629c83a818ad57 export OS_TENANT_NAME=&test-project&
  # In addition to the owning entity (tenant), openstack stores the entity # performing the action as the user.
  export OS_USERNAME=test-user
  # With Keystone you pass the keystone password.
  echo &Please enter your OpenStack Password: & read -s OS_PASSWORD_INPUT export OS_PASSWORD=$OS_PASSWORD_INPUT
  注意这个操作不会以文本保存你的密码,这样做是好事情。但是当你想用这个文件source或者运行脚本,它会提示你输入你的密码,并且保存在环境变量OS_PASSWORD中。记住这个过程需要手动交互。如果你想要一个不需要交互的操作,那么把值直接保存在脚本中。但是这样做你需要格外小心这个脚本文件的安全和权限。
  EC2兼容的认证可以从左边导航栏中的&EC2 Credentials&链接下载,选择你需要的项目,点击&Download EC2 Credentials&。会得到一个提供x509证书的zip文件和一个shell脚本。和前面的openrc文件不同,这些证书包含了所有可以访问你的云平台的认证信息,所以在安全的地方创建一个新目录,在新目录中解开zip文件。你会得到cacert.pem, cert.pem, ec2rc.sh and pk.pem。ec2rc.sh文件内容类似如下:
  #!/bin/bash
  NOVARC=$(readlink -f &${BASH_SOURCE:-${0}}& 2&/dev/null) ||NOVARC=$(python -c &import os, print os.path.abspath(os.path.realpath(sys.argv[1]))& &${BASH_SOURCE:-${0}}&) NOVA_KEY_DIR=${NOVARC%/*} export EC2_ACCESS_KEY=df7f93ec47e84ef8a347bbb3d598449a export EC2_SECRET_KEY=ead2fff9f8a344e489956deacd47e818 export EC2_URL=id, but bundling requires it export EC2_PRIVATE_KEY=${NOVA_KEY_DIR}/pk.pem export EC2_CERT=${NOVA_KEY_DIR}/cert.pem export NOVA_CERT=${NOVA_KEY_DIR}/cacert.pem export EUCALYPTUS_CERT=${NOVA_CERT} # euca-bundle-image seems to require this set
  alias ec2-bundle-image=&ec2-bundle-image &cert $EC2_CERT &privatekey $EC2_PRIVATE_KEY &user 42 &ec2cert $NOVA_CERT& alias ec2-upload-bundle=&ec2-upload-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY &url $S3_URL &ec2cert $NOVA_CERT&
  把EC2 credentials放到你的环境里,source这个ec2rc.sh文件。
  命令行的技巧和陷阱
  命令行工具可以通过&debug标记来显示调用Openstack API的过程,例如
  #&nova&&debug&list&
  这个例子会显示从客户端来的HTTP请求和从endpoints的回应,这些对于对Openstack API定制化客户端有帮助
  Keyring Support()可能就是一个困惑的东西,自这篇文章写的时候,有一个bug(+bug/1020238)。这个bug状态是open,然后解决,但是仍然有问题,又被重新open。这个bug的问题是在某些条件,命令行工具尝试使用一个python的钥匙作为证书的缓存,在这些情况的一个子集中,会要求在每次使用时会提示一个钥匙密码。如果你发现你遇到了这个不幸的情况,添加&no-cache标识或者设置环境变量OS_NO_CACHE=1来避免证书缓存。注意:这会造成命令行工具在每次交互的时候都需要认证。
  优先使用Openstack API而不是命令行工具,他是一个跑在HTTP协议上的RESTful API。多数情况你会希望直接使用API而不是命令行工具,因为某一个命令行可能会存在bug。最好的使用方式是,结合cURL()和其他工具来语法分析响应的JSON,例如jq()
  第一件事情你必须使用你的证书来认证来获取authentication token。证书包含了用户名、密码和tenant(项目)。你可以从上面我们谈到的openrc.sh文件中得到他们。token允许你不需要再次认证就能和其他的service endpoints交互。Tokens通常存在24小时比较好,当token过期后,你将会收到一个401(未被授权的)响应,然后你可以再请求一个token。
  查看你的Openstack服务条目:
  $&curl&-s&-X&POST&;  -d&&{&auth&:&{&passwordCredentials&:&{&username&:&test-user&,&&password&:&test-password&},&&tenantName&:&test-project&}}&&-H&&Content-type:&application/json&&|&jq&.&
  通过阅读JSON的响应切身体会一下目录是如何被安排的。
  为了使后续的请求更方便,我们把token储存在环境变量中。
  $&TOKEN=`curl&-s&-X&POST&;  -d&&{&auth&:&{&passwordCredentials&:&{&username&:&test-user&,&&password&:&test-password&},&&tenantName&:&test-project&}}&&-H&&Content-type:&application/json&&|&jq&-r&.access.token.id`&
  现在你可以在命令行里面使用变量$TOKEN来得到你的token值 从服务目录中选择一个服务endpoint,譬如计算的服务,然后尝试着发出一个请求,例如列出实例。
  $&curl&-s&-H&&X-Auth-Token:&$TOKEN&&;|&jq&.&
  要查询API请求是如何组织的,可以阅读Openstack API Reference()。可以使用jq来细细研究返回的请求响应,阅读jq Manual()
  在cURL命令中使用-s选项可以避免显示过程信息。如果你在使用cURL时遇到困难,把这个标记去掉。同样的,加上-v选项会输出详细信息,帮助排错。在cURL中还有更多有用的功能,参考man帮助手册查询所有的选项。
  服务器和服务
  作为一个管理员,通过使用Openstack工具来让你查看你的Openstack云平台。这部分将会告诉你如何总览你的云,组成,大小和状态。
  首先,你可以查询哪些服务器属于你的Openstack云平台,通过运行
  $&nova-manage&service&list&|&sort&
  输出类似如下:
Binary Host Zone Status State Updated_At nova-cert
nova enabled :-)
19:32:38 nova-compute
nova enabled :-)
19:32:35 nova-compute
nova enabled :-)
19:32:32 nova-compute
nova enabled :-)
19:32:36 nova-compute
nova enabled :-)
19:32:32 nova-compute
nova enabled :-)
19:32:41 nova-consoleauth
nova enabled :-)
19:32:36 nova-network
nova enabled :-)
19:32:32 nova-scheduler
nova enabled :-)
  输出显示有5个计算节点和1个云控制结点。你可以看到一个笑脸:-),表明这个服务是起的并运行着。如果一个服务不可用,:-)会变成XXX。这表明你应该排错一下为什么服务down了。
  如果你用了nova-volume(这个服务在Folsom版本后不赞成使用),你会看到一行nova-volume的服务条目。
  如果你是用了Cinder,运行如下命令将会看到。
  $cinder-manage&host&list&|&sort&  host&zone&&nova&&nova&&nova&&nova&&nova&&nova&
  通过这两个表,你现在已经对组成你的云平台的服务器和服务有了总的概况。
  你也可以使用认证服务(Keystone)查看什么服务在你的云平台可用,什么服务被配置了endpoints。
  以下这个命令需要你在shell中设置了合适的管理权限的变量。
  $&keystone&service-list&
description
cinder glance nova_ec2 keystone nova
volume image ec2 identity compute
Cinder Service OpenStack Image Service EC2 Service OpenStack Identity Service OpenStack Compute Service
  输出显示有5个配置的服务
  查看每个服务的endpoint,运行
  $&keystone&endpoint-list&
  +&&+&&&&&&&&&&&&&&+-/+&&&&&&&&&&&&&&+ | id | publicurl | | adminurl | +&&+&&&&&&&&&&&&&&+-/+&&&&&&&&&&&&&&+ | ... | (tenant_id)s| | (tenant_id)s| | ... | | /| | | ... | | | | | ... | | /| | | ... | (tenant_id)s| | (tenant_id)s| +&&+&&&&&&&&&&&&&&+-/+&&&&&&&&&&&&&&+
  服务和endpoint之间应该是一对一的映射,注意一些服务的公共URL和管理URL是不同的URLs和端口。
  接下恚纯茨愕脑苹肪持械Fixed IP网络
  $&nova-manage&network&list&  id&IPv4&IPv6&start&address&DNS1&DNS2&VlanID&project&uuid&1&10.1.0.0/24&None&10.1.0.3&None&None&300&2725bbd&beacb3f2&2&10.1.1.0/24&None&10.1.1.3&None&None&301&none&d0b1a796&
  输出显示两个被配置的网络,每个网络包含255个IP。第一个网络被分配给一个专门的项目,第二个网络]有分配。你可以手动分配,或者他也会自动被分配当一个项目启动第一个实例的时候
  查看云平台中的floating ip,运行:
  $&nova-manage&floating&list&  2725bbd458ebd36be859f43f&1.2.3.4&None&nova&vlan20&None&1.2.3.5&48a415e7-6f07-4d33-ad00-814e60b010ff&nova&vlan20&
  这里,两个floating IP可用,第一个已经被分配,第二个空间
  用户和项目
  列出云平台下的项目列表,运行
  $&keystone&tenant-list&
jtopjian alvaro everett admin services jonathan lorin anne rhulsker tom adam
True True True True True True True True True True True
  用户列表,运行
  $&keystone&user-list&
everett jonathan nova rhulsker lorin alvaro anne admin cinder glance jtopjian adam tom
True True True True True True True True True True True True True
everett. jon@sfcu.edu nova@localhost ryan.hulkster@cyberalbert.ca
Alvaro.Perry@cyberalbert.ca anne. root@localhost cinder@localhost glance@localhost joe.
fafield@univm.edu.au
  注意,有时候用户和组是一一对应的。通常在标准的系统用户是这样的,例如cinder, glance, nova, swift或者一个组里面就一个用户。
  在运行的实例
  显示运行中的实例列表:
  $&nova&list&&all-tenants&
Windows cloud controller compute node 1 devbox devstack initial lorin-head
ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE
novanetwork_1=10.1.1.3, 199.116.232.39 novanetwork_0=10.1.0.6; jtopjian=10.1.2.3 novanetwork_0=10.1.0.4; jtopjian=10.1.2.4 novanetwork_0=10.1.0.3 novanetwork_0=10.1.0.5 nova_network=10.1.7.4, 10.1.8.4 nova_network=10.1.7.3, 10.1.8.3  &
  不幸的是这个命令没法告诉你更多的关于实例的细节,例如实例跑在哪个计算节点,实例的配置等等。你可以使用下面的命令来单独查看每个实例的细节:
  $&nova&show&&uuid&&
  举例:
  #&nova&show&81db556b-8aa5-427d-a95c-2a9a&
OS-DCF:diskConfig OS-EXT-SRV-ATTR:host OS-EXT-SRV-ATTR:hypervisor_hostname OS-EXT-SRV-ATTR:instance_name OS-EXT-STS:power_state OS-EXT-STS:task_state OS-EXT-STS:vm_state accessIPv4 accessIPv6 config_drive created flavor hostId id image key_name metadata name novanetwork_0 network progress security_groups status tenant_id updated user_id
  MANUAL
instance- None active
  T20:08:36Z m1.small (6) ... ... Ubuntu 12.04 cloudimg amd64 (...) jtopjian-sandbox {} devstack 10.1.0.5 0 [{u&name&: u&default&}] ACTIVE ... T20:08:59Z ...
本文标题:
本文链接:
本文内容由网友发布,仅代表网友个人经验或观点,不代表本网站立场和观点。如果本文侵犯了您的知识产权,请与我们
取得联系,我们会及时修改或删除。
Linux技术文档
Linux就业指导
Linux练习题
价格:免费
价格:免费
价格:免费
关注希赛微信
接听时间:工作日00:00-24:00(仅收市话费)
&&|&&关于希赛&&|&&加入希赛&&|&&常见问题&&|&&免责声明&&|&&联系希赛&&|&&网站地图&&&&&&&&希赛网&&版权所有&&&&&&&&&developerWorks 社区
作为 OpenStack 用户或管理员,您常常需要编写脚本来自动化常见任务。除了 REST 和命令行接口之外,OpenStack 还公开了原生的 Python API 绑定。了解如何使用这些 Python 绑定简化编写 OpenStack 自动化脚本的过程。
, 首席架构师,云服务, Nimbis Services
Lorin Hochstein 之前曾从事学术研究,目前转为软件开发人员/操作员。他是
的云服务首席架构师,负责部署 OpenStack,以便将它用于科技计算应用。Lorin 定期向 OpenStack 文档项目投稿。他的 tweeter 为 ,博客为 。
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 服务和代号安装 Python 绑定Python 绑定与每个服务的命令行工具捆绑在一起。事实上,每个命令行工具使用相应的 Python API 实现。可从 Python Package Index(PyPi — 参见 ,获取相关链接)中使用 pip(一个 Python 包安装程序)来安装每个工具。pip 包名称包括:
python-keystoneclientpython-glanceclientpython-novaclientpython-quantumclientpython-cinderclientpython-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:3",
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:3"
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:3"
username = "admin"
password = "devstack"
tenant_name = "demo"
keystone = ksclient.Client(auth_url=auth_url, username=username,
password=password, tenant_name=tenant_name)加载一个 openrc 文件为了简化身份验证,建议创建一个 openrc 文件,将凭据导出到环境变量中。这样做可以避免将登录信息硬编码到脚本中。清单 4 显示了一个 openrc 文件示例。
清单 4. 从环境变量加载凭据export OS_USERNAME="myname"
export OS_PASSWORD="mypassword"
export OS_TENANT_NAME="mytenant"
export OS_AUTH_URL="http://10.20.0.2:/"环境变量 OS_USERNAME、OS_PASSWORD、OS_TENANT_NAME 和 OS_AUTH_URL 在所有 Python 命令行工具中已标准化。如果设置了这些环境变量,命令行工具(keystone、nova)将会使用它们对其 API 端点进行身份验证。
使用 Bash source 内置命令将这些环境变量加载到您当前的 shell 中。如果使用 Bash 作为标准 shell,那么您可能希望将这行代码添加到 .profile 中,以便在您每次登录时自动设置这些环境变量:
$ source openrc找到 openrc 文件后,Python 脚本就可以从环境中检索凭据。我们创建了一个名为 credentials.py 的 Python 文件(如清单 5 所示),以便从环境中提取登录信息。请注意,keystone 和 nova 在其客户端初始化器方法中使用了稍微不同的变量名,所以我为每个工具定义了不同的函数。
清单 5. credentials.py#!/usr/bin/env python
def get_keystone_creds():
d['username'] = os.environ['OS_USERNAME']
d['password'] = os.environ['OS_PASSWORD']
d['auth_url'] = os.environ['OS_AUTH_URL']
d['tenant_name'] = os.environ['OS_TENANT_NAME']
def get_nova_creds():
d['username'] = os.environ['OS_USERNAME']
d['api_key'] = os.environ['OS_PASSWORD']
d['auth_url'] = os.environ['OS_AUTH_URL']
d['project_id'] = os.environ['OS_TENANT_NAME']
return d身份验证令牌如果客户端初始化器返回时没有抛出异常,则它已成功向端点验证。您可访问刚才通过返回的对象 auth_token 属性发出的 keystone 令牌,如清单 6 所示。当对 glance API 进行身份验证时,需要显式地将一个 keystone 身份验证令牌作为参数传递给初始化器,我们稍后会对此进行讨论。
清单 6. 在一个交互式 Python 会话中对一个 keystone 端点执行成功的验证
&&& import keystoneclient.v2_0.client as ksclient
&&& from credentials import get_keystone_creds
&&& creds = get_keystone_creds()
&&& keystone = ksclient.Client(**creds)
&&& keystone.auth_token
u'MIILkAYJKoZIhvcNAQcCoIILgTCCC30CAQExCTAHBgUrDgMCGjCCCmkGCSqGSIb3DQEHAaCCCloE
ggpWeyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxMy0wNS0yNlQwMjoxMjo0Mi
42MDAwMjUiLCAiZXhwaXJlcyI6ICIyMDEzLTA1LTI3VDAyOjEyOjQyWiIsICJpZCI6ICJwbGFjZWhv
bGRlciIsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogbnVsbCwgImVuYWJsZWQiOiB0cnVlLCAiaW
fI9JnOBZJwuoma8je0a1AvLff6AcJ1zFkVZGb'备注:OpenStack Identity 的 Grizzly 版本默认情况下使用了公钥基础架构令牌,这些令牌比 OpenStack 的以前版本中使用的通用惟一标识符令牌(例如 7d9fde355f86a5a652bfe)要长得多。
CRUD 操作keystone API 实质上是一个创建、读取、更新、删除 (CRUD) 接口:与 keystone API 的大多数交互都会读取 keystone 后端数据库或修改它。与该 API 的大多数交互都会调用 Manager 对象。一个 Manager 表示一个具有相同类型的对象集合。例如,UserManager 处理 keystone 用户,TenantManager 处理租户,RoleManager 处理角色,等等。这些管理器支持多种操作,比如 create(创建一个新对象)、get(按 ID 检索一个对象)、list(检索所有对象)和 delete。
创建用户、租户和角色通常,在部署 OpenStack 时,执行的第一个任务是创建一个 keystone 租户,然后创建一个具有管理特权的 keystone 用户。 显示了一个使用 Python API 自动化此过程的示例。该脚本可执行以下任务:
创建一个用户角色 (Client.roles.create)。创建一个管理角色 (Client.roles.create)。创建一个名为 acme 的租户 (Client.tenants.create)。
创建一个名为 admin 的用户 (Client.users.create)。
为 admin 用户分配 acme 租户中的管理角色 (Client.roles.add_user_role)。
这是一个适合使用 admin 令牌的场景,因为 Identity Service 不包含任何具有管理特权的用户。
清单 7. 创建一个用户、租户和角色import keystoneclient.v2_0.client as ksclient
endpoint = "http://192.168.27.100:3"
admin_token = "devstack"
keystone = ksclient.Client(endpoint=endpoint, token=admin_token)
user_role = keystone.roles.create("user")
admin_role = keystone.roles.create("admin")
acme_tenant = keystone.tenants.create(tenant_name="Acme",
description="Employees of Acme Corp.",
enabled=True)
admin_user = keystone.users.create(name="admin",
password="a.G'03134!j",
email="", tenant_id=acme_tenant.id)
keystone.roles.add_user_role(admin_user, admin_role, acme_tenant)创建服务和端点通常,在 OpenStack 云中,部署 Identity Service 的下一个任务是在 keystone 中填充云和端点中的服务。清单 8 显示了使用 Client.services.create 和 Client.endpoints.create 方法为 Identity Service 添加一个服务和端点的示例。
清单 8. 创建一个服务和端点import keystoneclient.v2_0.client as ksclient
creds = get_keystone_creds() # See
keystone = ksclient.Client(**creds)
service = keystone.services.create(name="keystone",
service_type="identity",
description="OpenStack Identity Service")
keystone_publicurl = "http://192.168.27.100:"
keystone_adminurl = "http://192.168.27.100:3"
keystone.endpoints.create(service_id=service.id,
region="Northeast",
publicurl=keystone_publicurl,
adminurl=keystone_adminurl,
internalurl=keystone_publicurl)访问服务目录keystone 的主要功能之一就是充当服务目录。客户端可使用 keystone 查找 OpenStack 服务的端点 URL。该 API 通过 keystoneclient.v2_0.client.Client.service_catalog.url_for 方法提供此功能。此方法支持按类型(例如 image、volume、compute、network)和端点类型(publicURL、internalURL、adminURL)查找服务端点。
清单 9 演示了如何使用 url_for 方法检索 OpenStack Image (glance) Service 的端点。
清单 9. 在一个交互式 Python 会话中查询 glance 端点
&&& import keystoneclient.v2_0.client as ksclient
&&& creds = get_keystone_creds() # See &a href="openrc-creds" /&
&&& keystone = ksclient.Client(**creds)
&&& glance_endpoint = keystone.service_catalog.url_for(service_type='image',
endpoint_type='publicURL')
&&& glance_endpoint
u'http://192.168.27.100:9292'OpenStack Compute (nova)OpenStack Compute (nova) Python API 的工作原理类似于 OpenStack Identity API。这里使用了 nova API 的 1.1 版,所以本文中使用的 nova Python 绑定的 1.1 版中的类位于 novaclient.v1_1 Python 命名空间中。
对 nova-api 端点执行身份验证
要向 nova-api 端点发出请求,可实例化一个 novaclient.v1_1.client.Client 对象并对它执行调用。可通过两种方式获取一个与该 API 的 1.1 版进行通信的客户端。清单 10 演示了如何通过传递版本字符串作为参数来获取合适的客户端。
清单 10. 传递版本作为参数from novaclient import client as novaclient
from credentials import get_nova_creds
creds = get_nova_creds()
nova = novaclient.Client("1.1", **creds)清单 11 演示了如何通过显式导入 1.1 版模块来获取合适的客户端。
清单 11. 直接导入版本import novaclient.v1_1.client as nvclient
from credentials import get_nova_creds
creds = get_nova_creds()
nova = nvclient.Client(**creds)清单实例使用 Client.servers.list 方法列出当前的 VM 实例,如清单 12 所示。清单 12. 在一个交互式 Python 会话中获取一个 VM 实例列表
&&& import novaclient.v1_1.client as nvclient
&&& from credentials import get_nova_creds
&&& creds = get_nova_creds()
&&& nova = nvclient.Client(**creds)
&&& nova.servers.list()
[&Server: cirros&]按名称获取一个实例并关闭它
如果不知道实例的 ID,只知道它的名称,那么可以使用 Server.find 方法。清单 13 显示了如何按名称找到一个实例,然后使用 Server.delete 方法终止它。
清单 13. 终止 “my-vm” 实例import novaclient.v1_1.client as nvclient
from credentials import get_nova_creds
creds = get_nova_creds()
nova = nvclient.Client(**creds)
server = nova.servers.find(name="my-vm")
server.delete()启动一个实例并检查状态要启动一个新实例,可以使用 Client.servers.create 方法,如清单 14 所示。请注意,必须传递一个 image 对象和 flavor 对象,而不是 image 和 flavor 的名称。该示例还使用 Client.keypairs.create 方法将 Secure Shell (SSH) 公钥上传到 ~/.ssh/id_rsa.pub,并将密钥对命名为 mykey(假设该密钥对还不存在)。最后,它使用 Client.servers.get 方法获取该实例的当前状态,使用它来轮询状态。
清单 14. 启动一个新实例import os
import time
import novaclient.v1_1.client as nvclient
from credentials import get_nova_creds
creds = get_nova_creds()
nova = nvclient.Client(**creds)
if not nova.keypairs.findall(name="mykey"):
with open(os.path.expanduser('~/.ssh/id_rsa.pub')) as fpubkey:
nova.keypairs.create(name="mykey", public_key=fpubkey.read())
image = nova.images.find(name="cirros")
flavor = nova.flavors.find(name="m1.tiny")
instance = nova.servers.create(name="test", image=image, flavor=flavor, key_name="mykey")
# Poll at 5 second intervals, until the status is no longer 'BUILD'
status = instance.status
while status == 'BUILD':
time.sleep(5)
# Retrieve the instance again so the status field updates
instance = nova.servers.get(instance.id)
status = instance.status
print "status: %s" % status附加一个浮动 IP 地址要附加一个浮动 IP 地址,必须首先验证 OpenStack 是否拥有一个可用的浮动 IP 地址。使用 Client.floating_ips.list 方法获取可用的浮动 IP 地址列表。如果结果列表是空的,可使用 Client.floating_ips.create 方法分配一个新的浮动 IP 地址,然后使用 Server.add_floating_ip 方法将它分配给该实例,如清单 15 所示。
清单 15. 创建一个浮动 IP 地址&&& nova.floating_ips.list()
&&& floating_ip = nova.floating_ips.create()
&FloatingIP fixed_ip=None, id=1, instance_id=None, ip=192.168.27.129, pool=public&
&&& instance = nova.servers.find(name="test")
&&& instance.add_floating_ip(floating_ip)更改一个安全组使用 Client.security_group_rules.create 方法向一个安全组添加规则。清单 16 中的示例修改了默认的安全组,以便支持 SSH(在端口 22 上运行)以及所有 Internet Control Message Protocol (ICMP) 流量。为此,我使用 Client.security_groups.find 方法获取了名为 default 的安全组。
清单 16. 允许使用 default 安全组中的端口 22 和 ICMP
import novaclient.v1_1.client as nvclient
from credentials import get_nova_creds
creds = get_nova_creds()
nova = nvclient.Client(**creds)
secgroup = nova.security_groups.find(name="default")
nova.security_group_rules.create(secgroup.id,
ip_protocol="tcp",
from_port=22,
to_port=22)
nova.security_group_rules.create(secgroup.id,
ip_protocol="icmp",
from_port=-1,
to_port=-1)获取控制台日志Server.get_console_output 方法获取了在启动 VM 时发送给控制台的文本。可以分析控制台输出,以解决更改主机密钥的常见问题。
IaaS 云(比如 OpenStack)的一个缺陷是,它不能很好地与 SSH 主机密钥检查功能进行互操作。如果登录到(比如 10.40.1.150 上的)某个实例,而该 IP 地址之前被您过去登录的另一个实例使用过,那么您将获得一个类似清单 17 的错误。
清单 17. ID 更改后的错误@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6f:2b:59:46:cb:8c:81:48:06:f3:c5:db:40:23:d3:be.
Please contact your system administrator.
Add correct host key in /home/mylogin/.ssh/known_hosts to get rid of this message.
Offending key in /home/mylogin/.ssh/known_hosts:1
RSA host key for 10.40.1.150 has changed and you have requested strict checking.
Host key verification failed.如果您的 VM 映像安装了 cloud-init 包(参见 ),那么它会将主机密钥输出到控制台,如清单 8 所示。
清单 18. 控制台中的 SSH 密钥输出示例-----BEGIN SSH HOST KEY KEYS-----
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDciNMyzj0osyPOM+
1OyseTWgkzw+M43zp5H2CchG8daRDHel7V3OHETVdI6WofNn
SdBJAwIoisRFPxyroNGiVw= root@my-name
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU854+fNdcKMZTLCUejMOZllQmmphr6V5Aaz1F2+x2jXql5rqKQ
d5/h6OdFszcp+gdTeVtfgG++/298qodTemVVrvqwjp4eN87iHvhPxH6GDEevAKlEed2ckdAmgvzI9rcOYgR/46G9x
Iea0IdgNjMvN1baj6WPtv+HfcfH/ZV58G306lSJfbz/GVxNTIxW+Wg7ZQCAe6jWgm4oQ+66sco+7Fub24EPue3kO8
jqufqq3mY5+MFlzEHSX5B04ioG5Alw/JuqVx5+7zHt9I2wA3nzsyUdKtCTrw8V4fYEhWDm53WLOpW+8CeYCXuv+yL
7EjwLqhIH/TUuzGQiWmFGvyz root@my-name
-----END SSH HOST KEY KEYS-----清单 19 给出的脚本使用 Server.get_console_output API 方法从控制台中提取 SSH 主机密钥,然后更新 ~/.ssh/known_hosts 文件,所以在首次使用 SSH 访问浮动 IP 地址时,您不会获得此 SSH 警告。
清单 19. 从控制台提取 SSH 主机密钥import os
import subprocess
import novaclient.v1_1.client as nvclient
from credentials import get_nova_creds
def get_server(creds, servername):
nova = nvclient.Client(**creds)
return nova.servers.find(name=servername)
def remove_hostkey(ip):
subprocess.call(["ssh-keygen", "-R", ip])
def get_hostkey_from_console(text):
lines = text.split('\n')
start = '-----BEGIN SSH HOST KEY KEYS-----\r'
end = '-----END SSH HOST KEY KEYS-----\r'
start_ind = lines.index(start)
end_ind = lines.index(end)
for i in range(start_ind+1, end_ind):
key = lines[i].rstrip()
if key.startswith('ssh-rsa'):
return key
raise KeyError("ssh host key not found")
def main():
server = get_server(get_nova_creds(), "my-server")
netname = "my-network"
(fixed_ip, floating_ip) = server.networks[netname]
# Remove existing key, if any
remove_hostkey(floating_ip)
output = server.get_console_output()
key = get_hostkey_from_console(output)
with open(os.path.expanduser("~/.ssh/known_hosts"), 'a') as f:
f.write("{0} {1}\n".format(floating_ip, key))
if __name__ == '__main__':
main()OpenStack Image (glance)OpenStack Image Service (glance) 负责管理 Compute Service 所使用的一个 VM 映像目录。
对 glance 端点执行身份验证OpenStack Image (glance) Python API 在执行初始身份验证时与 Compute API 有一些细微的差别。glance API 依赖于必须从 keystone API 获取的信息:
glance 端点 URL一个 keystone 身份验证令牌像 nova API 一样,对于 glance API,您可以传递 API 的版本作为参数或直接导入该模块。清单 20 中的示例展示了如何使用该 API 的第 2 版,对 glance 端点执行身份验证。
清单 20. 对 glance API 执行身份验证import keystoneclient.v2_0.client as ksclient
import glanceclient
creds = get_keystone_creds()
keystone = ksclient.Client(**creds)
glance_endpoint = keystone.service_catalog.url_for(service_type='image',
endpoint_type='publicURL')
glance = glanceclient.Client('2',glance_endpoint, token=keystone.auth_token)清单 21 中的示例直接导入了相关的 glance 模块。
清单 21. 直接导入 glance 模块import keystoneclient.v2_0.client as ksclient
import glanceclient.v2.client as glclient
creds = get_keystone_creds()
keystone = ksclient.Client(**creds)
glance_endpoint = keystone.service_catalog.url_for(service_type='image',
endpoint_type='publicURL')
glance = glclient.Client(glance_endpoint, token=keystone.auth_token)列出可用映像使用 Client.images.list 方法列出当前的映像,如清单 22 所示。请注意,此方法会返回一个生成器,其中 nova API 中的 list 方法将会返回列表对象。
清单 22. 获取一个 VM 映像列表&&& import keystoneclient.v2_0.client as ksclient
&&& import glanceclient.v2.client as glclient
&&& creds = get_keystone_creds()
&&& keystone = ksclient.Client(**creds)
&&& glance_endpoint = keystone.service_catalog.url_for(service_type='image',
endpoint_type='publicURL')
&&& glance = glclient.Client(glance_endpoint, token=keystone.auth_token)
&&& images = glance.images.list()
&&& images
&generator object list at 0x10c8efd70&
&&& images.next()
{u'status': u'active', u'tags': [], u'kernel_id':
u'8ab02091-21ea-434c-9b7b-9b4e2ae49591', u'container_format': u'ami', u'min_ram': 0,
u'ramdisk_id': u'dcae-4dec-b5bc-6d2de5c89c64', u'updated_at':
u'T00:44:21Z', u'visibility': u'public', u'file':
u'/v2/images/cac5--7f00ff5030e6/file', u'min_disk': 0,
u'id': u'cac5--7f00ff5030e6', u'size': , u'name':
u'cirros-0.3.1-x86_64-uec', u'checksum': u'f8a2eeee2dc65b3d9b6e',
u'created_at': u'T00:44:21Z', u'disk_format': u'ami', u'protected':
False, u'schema': u'/v2/schemas/image'}将一个映像上传到 glance清单 23 中的示例展示了如何使用 glance API 上传一个文件。这里需要使用该 API 的第 1 版创建一个映像,因为 Python API 绑定还未实现第 2 版的 create 方法。
清单 23. 将一个映像上传到 glanceimport keystoneclient.v2_0.client as ksclient
import glanceclient
creds = get_keystone_creds()
keystone = ksclient.Client(**creds)
glance_endpoint = keystone.service_catalog.url_for(service_type='image',
endpoint_type='publicURL')
glance = glanceclient.Client('1',glance_endpoint, token=keystone.auth_token)
with open('/tmp/cirros-0.3.0-x86_64-disk.img') as fimage:
glance.images.create(name="cirros", is_public=True, disk_format="qcow2",
container_format="bare", data=fimage)后续步骤本文仅简短概述了 OpenStack Python API 公开的功能。可通过多种方式进一步了解这些 API 的工作原理。
官方 API 文档OpenStack 项目维护着所有 OpenStack Python API 的文档(参见 )。所有这些 API 都拥有每个模块、类和方法的自动生成的文档。一些 API 的文档中包含使用示例,而其他文档没有。
Introspect the API了解 API 的一种最佳方式是在一个交互式命令行 Python 解释器中使用它们。bpython 解释器是一个增强的 Python 解释器,会在您键入时显示有效的方法名称,还会自动显示一个函数的文档字符串(参见图 1)。
图 1. bpython 的自动帮助显示界面
查阅 CLI 源代码Python 的一个优势在于它的可读性,没有任何方法能够比阅读源代码更好地了解 API。所有包都托管在 openstack 小组中的 github 上。例如,要获取 nova API 源代码的副本,可运行以下命令:
git clone /openstack/python-novaclient因为这些命令行客户端是使用该 API 实现的,所以每个包都提供了一个示例应用程序。
对于 novaclient API,最有趣的文件包含在 novaclient/v1_1 目录中,该目录包含形成此 API 的 Python 类。shell 上的命令行命令被实现为 novaclient/v1_1/shell.py 中的 do_* 方法。例如,nova flavor-list 被实现为 do_flavor_list 方法,该方法最终会调用 Client.flavors.list API 方法。
查阅其他使用 Python API 的应用程序其他一些应用程序也使用了 OpenStack Python API。OpenStack Dashboard(参见 ,获取相关链接)完全使用 Python API 与各种 OpenStack 服务进行通信。它是使用 Python API 的应用程序的一个很好的例子。具体来讲,您可以查看 openstack_dashboard/api 目录,看看该仪表板是如何使用 Python API 的。
OpenStack Client(参见 )用于将现有客户端上的功能统一到单个命令行接口中。它使用了来自其他所有项目的 Python API。
Heat 项目是一个设计为使用 OpenStack 的业务流程层,它使用了这些 API。具体来讲,请查看 heat/engine/clients.py 文件。
Ansible 是一个基于 Python 的配置管理工具,拥有多个使用 Python API 的 OpenStack 模块。具体来讲,请查看 library/cloud 目录,其中包含 Ansible OpenStack 模块。
了解 Python API 的工作原理后,很难想像再返回使用 REST API 或命令行工具构建您的 OpenStack 自动化脚本的情形。
是关于 Python 语言绑定的官方 OpenStack 文档。
提供了针对其他语言的 OpenStack 语言绑定的链接,比如 Java™、JavaScript、Ruby、Perl、PHP 和 Microsoft® .NET 语言。
是由社区经营的一个免费 OpenStack 沙盒。它是一个试验不需要管理特权的自动化脚本的不错资源。
描述了如何使用 OpenStack 命令行工具。
描述了 REST API。
了解 ,Python 包索引。
以下是这些 API 公开的 Python 模块、类、方法和函数的索引的一些快速链接:
的更多信息;您可 。
的更多信息。您可以 。
项目的更多信息。。
这个基于 Python 的配置管理工具。。
在 developerWorks
中,发现和分享应用程序和服务开发人员构建云部署项目的知识和经验。
观看丰富的 ,那里提供了面向初学者的产品安装和设置演示,以及面向经验丰富的开发人员的高级功能演示。
:OpenStack Identity API 和 keystone 命令行工具。
:OpenStack Compute API 和 nova 命令行工具。
:OpenStack Image API 和 glance 命令行工具。
:在单个服务器上执行快速、用于开发的 OpenStack 部署的 Bash 脚本。
增强的 Python 解释器。
邮件列表是与已部署 OpenStack 的系统管理员讨论 OpenStack 相关问题的不错资源。
是 OpenStack 用户社区的一个官方 OpenStack 问答站点。
加入 。探索由开发人员推动的博客、论坛、群组和维基,并与其他 developerWorks 用户进行交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
免费下载、试用软件产品,构建应用并提升技能。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Cloud computingArticleID=956499ArticleTitle=Python API:OpenStack 隐藏深处的秘密publish-date=

我要回帖

更多关于 导航加倒车影像多少钱 的文章

 

随机推荐