2020-12-02 05:34:57 登录注册 RSS

当前位置: 公理网 >> 曝光信息 >> PythonAPI:OpenStack隐藏深处的秘密

PythonAPI:OpenStack隐藏深处的秘密
发布时间:2018-11-03| 来源:公理网 | 点击发表评论
回页首

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

python-keystoneclient

python-glanceclient

python-novaclient

python-quantumclient

python-cinderclient

python-swiftclient


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


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

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

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

OpenStackIdentityService(keystone)

OpenStackImageService(glance)

OpenStackComputeService(nova)

回页首

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

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


回页首

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

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

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

importkeystoneclient.v2_0.clientasksclient
#Replacethemethodargumentswiththeonesfromyourlocalconfig
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="OpenStackImageService")

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

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

importkeystoneclient.v2_0.clientasksclient
#Replacethevaluesbelowwiththeonesfromyourlocalconfig
endpoint="http://192.168.27.100:35357/v2.0"
admin_token="devstack"
keystone=ksclient.Client(endpoint=endpoint,token=admin_token)
出于安全原因,一般不赞成使用?admin?令牌。相反,在创建了具有管理特权的用户之后,建议OpenStackIdentity开发人员始终使用用户名和密码进行身份验证(参见清单3)。

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

importkeystoneclient.v2_0.clientasksclient
#Replacethevaluesbelowtheonesfromyourlocalconfig,
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)

为了简化身份验证,建议创建一个openrc文件,将凭据导出到环境变量中。这样做可以避免将登录信息硬编码到脚本中。清单4显示了一个openrc文件示例。

清单4.从环境变量加载凭据

exportOS_USERNAME="myname"
exportOS_PASSWORD="mypassword"
exportOS_TENANT_NAME="mytenant"
exportOS_AUTH_URL="http://10.20.0.2:5000/v2.0/"
环境变量OS_USERNAME、OS_PASSWORD、OS_TENANT_NAME和OS_AUTH_URL在所有Python命令行工具中已标准化。如果设置了这些环境变量,命令行工具(keystone、nova)将会使用它们对其API端点进行身份验证。

使用Bash?source?内置命令将这些环境变量加载到您当前的shell中。如果使用Bash作为标准shell,那么您可能希望将这行代码添加到.profile中,以便在您每次登录时自动设置这些环境变量:


$sourceopenrc
找到openrc文件后,Python脚本就可以从环境中检索凭据。我们创建了一个名为credentials.py的Python文件(如清单5所示),以便从环境中提取登录信息。请注意,keystone?和?nova?在其客户端初始化器方法中使用了稍微不同的变量名,所以我为每个工具定义了不同的函数。

清单5.credentials.py

#!/usr/bin/envpython
importos
defget_keystone_creds():
d={}
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']
returnd
defget_nova_creds():
d={}
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']
returnd

如果客户端初始化器返回时没有抛出异常,则它已成功向端点验证。您可访问刚才通过返回的对象?auth_token?属性发出的?keystone?令牌,如清单6所示。当对?glance?API
进行身份验证时,需要显式地将一个?keystone?身份验证令牌作为参数传递给初始化器,我们稍后会对此进行讨论。

清单6.在一个交互式Python会话中对一个keystone端点执行成功的验证

importkeystoneclient.v2_0.clientasksclient
fromcredentialsimportget_keystone_creds
creds=get_keystone_creds()
keystone=ksclient.Client(**creds)
keystone.auth_token
u'MIILkAYJKoZIhvcNAQcCoIILgTCCC30CAQExCTAHBgUrDgMCGjCCCmkGCSqGSIb3DQEHAaCCCloE
ggpWeyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxMy0wNS0yNlQwMjoxMjo0Mi
42MDAwMjUiLCAiZXhwaXJlcyI6ICIyMDEzLTA1LTI3VDAyOjEyOjQyWiIsICJpZCI6ICJwbGFjZWhv
bGRlciIsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogbnVsbCwgImVuYWJsZWQiOiB0cnVlLCAiaW
fI9JnOBZJwuoma8je0a1AvLff6AcJ1zFkVZGb'
备注:OpenStackIdentity的Grizzly版本默认情况下使用了公钥基础架构令牌,这些令牌比OpenStack的以前版本中使用的通用惟一标识符令牌(例如?7d9fde355f09458f8e97986a5a652bfe)要长得多。

CRUD操作
keystone?API实质上是一个创建、读娶更新、删除(CRUD)接口:与?keystone?API的大多数交互都会读取?keystone?后端数据库或修改它。与该
API的大多数交互都会调用?Manager?对象。一个Manager表示一个具有相同类型的对象集合。例如,UserManager?处理keystone?用户,TenantManager?处理租户,RoleManager?处理角色,等等。这些管理器支持多种操作,比如?create(创建一个新对象)、get(按
ID检索一个对象)、list(检索所有对象)和?delete。

创建用户、租户和角色
通常,在部署OpenStack时,执行的第一个任务是创建一个?keystone?租户,然后创建一个具有管理特权的?keystone?用户。清单7?显示了一个使用PythonAPI自动化此过程的示例。该脚本可执行以下任务:

创建一个用户角色(Client.roles.create)。

创建一个管理角色(Client.roles.create)。

创建一个名为acme的租户(Client.tenants.create)。

创建一个名为admin的用户(Client.users.create)。

为admin用户分配acme租户中的管理角色(Client.roles.add_user_role)。


这是一个适合使用?admin?令牌的场景,因为IdentityService不包含任何具有管理特权的用户。

清单7.创建一个用户、租户和角色

importkeystoneclient.v2_0.clientasksclient
endpoint="http://192.168.27.100:35357/v2.0"
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="EmployeesofAcmeCorp.",
enabled=True)
admin_user=keystone.users.create(name="admin",
password="a.G'03134!j",
email="[email protected]",tenant_id=acme_tenant.id)
keystone.roles.add_user_role(admin_user,admin_role,acme_tenant)

通常,在OpenStack云中,部署IdentityService的下一个任务是在?keystone?中填充云和端点中的服务。清单8显示了使用Client.services.create?和?Client.endpoints.create?方法为
IdentityService添加一个服务和端点的示例。

清单8.创建一个服务和端点

importkeystoneclient.v2_0.clientasksclient
creds=get_keystone_creds()#Seeopenrc-creds
keystone=ksclient.Client(**creds)
service=keystone.services.create(name="keystone",
service_type="identity",
description="OpenStackIdentityService")
keystone_publicurl="http://192.168.27.100:5000/v2.0"
keystone_adminurl="http://192.168.27.100:35357/v2.0"
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?方法检索OpenStackImage(glance)Service的端点。

清单9.在一个交互式Python会话中查询glance端点

importkeystoneclient.v2_0.clientasksclient
creds=get_keystone_creds()#Seeahref="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'

nova?API的1.1版和第2版是相同的。可用“2”代替“1.1”,传递它作为?novaclient.client.Clientinitializer?的第一个参数,但没有?novaclient.v2模块,只有一个?novaclient.v1_1?模块。

OpenStackCompute(nova)PythonAPI的工作原理类似于OpenStackIdentityAPI。这里使用了?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.传递版本作为参数

fromnovaclientimportclientasnovaclient
fromcredentialsimportget_nova_creds
creds=get_nova_creds()
nova=novaclient.Client("1.1",**creds)
清单11演示了如何通过显式导入1.1版模块来获取合适的客户端。

清单11.直接导入版本

importnovaclient.v1_1.clientasnvclient
fromcredentialsimportget_nova_creds
creds=get_nova_creds()
nova=nvclient.Client(**creds)

如果不知道实例的ID,只知道它的名称,那么可以使用?Server.find?方法。清单13显示了如何按名称找到一个实例,然后使用Server.delete?方法终止它。

清单13.终止“my-vm”实例

importnovaclient.v1_1.clientasnvclient
fromcredentialsimportget_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?方法将SecureShell(SSH)公钥上传到?~/.ssh/id_rsa.pub,并将密钥对命名为mykey(假设该密钥对还不存在)。最后,它使用?Client.servers.get?方法获取该实例的当前状态,使用它来轮询状态。

清单14.启动一个新实例

importos
importtime
importnovaclient.v1_1.clientasnvclient
fromcredentialsimportget_nova_creds
creds=get_nova_creds()
nova=nvclient.Client(**creds)
ifnotnova.keypairs.findall(name="mykey"):
withopen(os.path.expanduser('~/.ssh/id_rsa.pub'))asfpubkey:
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")
#Pollat5secondintervals,untilthestatusisnolonger'BUILD'
status=instance.status
whilestatus=='BUILD':
time.sleep(5)
#Retrievetheinstanceagainsothestatusfieldupdates
instance=nova.servers.get(instance.id)
status=instance.status
print"status:%s"%status

要附加一个浮动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()
FloatingIPfixed_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上运行)以及所有InternetControlMessageProtocol(ICMP)流量。为此,我使用?Client.security_groups.find?方法获取了名为
default的安全组。

清单16.允许使用default安全组中的端口22和ICMP

importnovaclient.v1_1.clientasnvclient
fromcredentialsimportget_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:[email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ITISPOSSIBLETHATSOMEONEISDOINGSOMETHINGNASTY!
Someonecouldbeeavesdroppingonyourightnow(man-in-the-middleattack)!
Itisalsopossiblethatahostkeyhasjustbeenchanged.
ThefingerprintfortheRSAkeysentbytheremotehostis
6f:2b:59:46:cb:8c:81:48:06:f3:c5:db:40:23:d3:be.
Pleasecontactyoursystemadministrator.
Addcorrecthostkeyin/home/mylogin/.ssh/known_hoststogetridofthismessage.
Offendingkeyin/home/mylogin/.ssh/known_hosts:1
RSAhostkeyfor10.40.1.150haschangedandyouhaverequestedstrictchecking.
Hostkeyverificationfailed.
如果您的VM映像安装了?cloud-init?包(参见?参考资料),那么它会将主机密钥输出到控制台,如清单
8所示。

清单18.控制台中的SSH密钥输出示例

-----BEGINSSHHOSTKEYKEYS-----
ecdsa-sha2-nistp256AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDciNMyzj0osyPOM+
1OyseTWgkzw+M43zp5H2CchG8daRDHel7V3OHETVdI6WofNn
[email protected]
ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQDU854+fNdcKMZTLCUejMOZllQmmphr6V5Aaz1F2+x2jXql5rqKQ
d5/h6OdFszcp+gdTeVtfgG++/298qodTemVVrvqwjp4eN87iHvhPxH6GDEevAKlEed2ckdAmgvzI9rcOYgR/46G9x
Iea0IdgNjMvN1baj6WPtv+HfcfH/ZV58G306lSJfbz/GVxNTIxW+Wg7ZQCAe6jWgm4oQ+66sco+7Fub24EPue3kO8
jqufqq3mY5+MFlzEHSX5B04ioG5Alw/JuqVx5+7zHt9I2wA3nzsyUdKtCTrw8V4fYEhWDm53WLOpW+8CeYCXuv+yL
7EjwLqhIH/[email protected]
-----ENDSSHHOSTKEYKEYS-----
清单19给出的脚本使用?Server.get_console_output?API方法从控制台中提取SSH主机密钥,然后更新?~/.ssh/known_hosts?文件,所以在首次使用SSH访问浮动IP地址时,您不会获得此SSH警告。

清单19.从控制台提取SSH主机密钥

importos
importsubprocess
importnovaclient.v1_1.clientasnvclient
fromcredentialsimportget_nova_creds

start='-----BEGINSSHHOSTKEYKEYS-----\r'
end='-----ENDSSHHOSTKEYKEYS-----\r'
start_ind=lines.index(start)
end_ind=lines.index(end)
foriinrange(start_ind+1,end_ind):
key=lines[i].rstrip()
ifkey.startswith('ssh-rsa'):
returnkey
raiseKeyError("sshhostkeynotfound")

key=get_hostkey_from_console(output)
withopen(os.path.expanduser("~/.ssh/known_hosts"),'a')asf:
f.write("{0}{1}\n".format(floating_ip,key))

回页首

OpenStackImage(glance)
OpenStackImageService(glance)负责管理ComputeService所使用的一个VM映像目录。

对glance端点执行身份验证
OpenStackImage(glance)PythonAPI在执行初始身份验证时与ComputeAPI有一些细微的差别。glance?API依赖于必须从?keystone?API
获取的信息:

glance?端点URL

一个?keystone?身份验证令牌


像?nova?API一样,对于?glance?API,您可以传递API的版本作为参数或直接导入该模块。清单20中的示例展示了如何使用该API的第2版,对?glance?端点执行身份验证。

清单20.对glanceAPI执行身份验证

importkeystoneclient.v2_0.clientasksclient
importglanceclient
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模块

importkeystoneclient.v2_0.clientasksclient
importglanceclient.v2.clientasglclient
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映像列表

importkeystoneclient.v2_0.clientasksclient
importglanceclient.v2.clientasglclient
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
generatorobjectlistat0x10c8efd70
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'd36267b5-7cae-4dec-b5bc-6d2de5c89c64',u'updated_at':
u'2013-05-28T00:44:21Z',u'visibility':u'public',u'file':
u'/v2/images/cac50405-f4d4-4715-b1f6-7f00ff5030e6/file',u'min_disk':0,
u'id':u'cac50405-f4d4-4715-b1f6-7f00ff5030e6',u'size':25165824,u'name':
u'cirros-0.3.1-x86_64-uec',u'checksum':u'f8a2eeee2dc65b3d9b6e63678955bd83',
u'created_at':u'2013-05-28T00:44:21Z',u'disk_format':u'ami',u'protected':
False,u'schema':u'/v2/schemas/image'}

清单23中的示例展示了如何使用?glance?API上传一个文件。这里需要使用该API的第1版创建一个映像,因为PythonAPI绑定还未实现第2版的?create?方法。

清单23.将一个映像上传到glance

importkeystoneclient.v2_0.clientasksclient
importglanceclient
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)
withopen('/tmp/cirros-0.3.0-x86_64-disk.img')asfimage:
glance.images.create(name="cirros",is_public=True,disk_format="qcow2",
container_format="bare",data=fimage)

回页首

本文仅简短概述了OpenStackPythonAPI公开的功能。可通过多种方式进一步了解这些API的工作原理。

官方API文档
OpenStack项目维护着所有OpenStackPythonAPI的文档(参见?参考资料)。所有这些
API都拥有每个模块、类和方法的自动生成的文档。一些API的文档中包含使用示例,而其他文档没有。

IntrospecttheAPI
了解API的一种最佳方式是在一个交互式命令行Python解释器中使用它们。bpython解释器是一个增强的Python解释器,会在您键入时显示有效的方法名称,还会自动显示一个函数的文档字符串(参见图1)。

图1.bpython的自动帮助显示界面

查阅CLI源代码
Python的一个优势在于它的可读性,没有任何方法能够比阅读源代码更好地了解API。所有包都托管在openstack小组中的github上。例如,要获取?nova?API源代码的副本,可运行以下命令:


gitclonehttp://github.com/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方法。

查阅其他使用PythonAPI的应用程序
其他一些应用程序也使用了OpenStackPythonAPI。OpenStackDashboard(参见?参考资料,获取相关链接)完全使用
PythonAPI与各种OpenStack服务进行通信。它是使用PythonAPI的应用程序的一个很好的例子。具体来讲,您可以查看openstack_dashboard/api目录,看看该仪表板是如何使用PythonAPI的。

OpenStackClient(参见?参考资料)用于将现有客户端上的功能统一到单个命令行接口中。它使用了来自其他所有项目的
PythonAPI。

Heat项目是一个设计为使用OpenStack的业务流程层,它使用了这些API。具体来讲,请查看heat/engine/clients.py文件。

Ansible是一个基于Python的配置管理工具,拥有多个使用PythonAPI的OpenStack模块。具体来讲,请查看library/cloud目录,其中包含AnsibleOpenStack模块。

了解PythonAPI的工作原理后,很难想像再返回使用RESTAPI或命令行工具构建您的OpenStack自动化脚本的情形。


OpenStack语言绑定和Python客户端?是关于Python语言绑定的官方OpenStack
文档。
OpenStackWikiSDK页面?提供了针对其他语言的OpenStack语言绑定的链接,比如Java?、JavaScript、Ruby、Perl、PHP
和Microsoft?.NET语言。
TryStack?是由社区经营的一个免费OpenStack沙盒。它是一个试验不需要管理特权的自动化脚本的不错资源。
OpenStack客户端指南?描述了如何使用OpenStack命令行工具。
OpenStackAPI文档?描述了RESTAPI。

了解?PyPi,Python包索引。

获取?cloud-init?文档。

以下是这些API公开的Python模块、类、方法和函数的索引的一些快速链接:nova
keystone
glance
quantum
cinder
swift

了解?OpenStackDashboard?的更多信息;您可?从github下载仪表板代码。

了解?OpenStack客户端?的更多信息。您可以?在github上找到代码。

了解?Heat?项目的更多信息。代码可在github上找到。

了解?Ansible?这个基于Python的配置管理工具。代码可在github上找到。

在developerWorks?云开发人员资源?中,发现和分享应用程序和服务开发人员构建云部署项目的知识和经验。

观看丰富的?developerWorks演示,那里提供了面向初学者的产品安装和设置演示,以及面向经验丰富的开发人员的高级功能演示。

获得产品和技术
python-keystoneclient:OpenStackIdentityAPI和?keystone?命令行工具。
python-novaclient:OpenStackComputeAPI和?nova?命令行工具。
python-glanceclient:OpenStackImageAPI和?glance?命令行工具。
DevStack:在单个服务器上执行快速、用于开发的OpenStack部署的Bash脚本。

下载?bpython?增强的Python解释器。

openstack-operators?邮件列表是与已部署OpenStack的系统管理员讨论
OpenStack相关问题的不错资源。
AskOpenStack?是OpenStack用户社区的一个官方OpenStack问答站点。

加入?developerWorks中文社区。探索由开发人员推动的博客、论坛、群组和维基,并与其他developerWorks
用户进行交流。

加入?developerWorks社区云计算群组。

在?Twitter上关注developerWorks。

查阅?developerWorks上所有优秀的云博客。

最新新闻

手机浏览

公理网 版权所有

公理网 Total 0.020456(s) query 6, 报料QQ:点击这里

给我发消息