Python SDK 指南
使用 Red Hat Enterprise Virtualization Python SDK
摘要
部分 I. Python 软件开发套件 复制链接链接已复制到粘贴板!
第 1 章 概述 复制链接链接已复制到粘贴板!
Red Hat Enterprise Virtualization 权利池的系统都可以获得这个软件包。
1.1. 前提条件 复制链接链接已复制到粘贴板!
- 安装了 Red Hat Enterprise Linux 6.6 或 7 的系统。支持这两个版本的 Server 和 Workstation 变体。
- Red Hat Enterprise Virtualization 权利的订阅。
重要
重要
1.2. 安装 Python 软件开发套件 复制链接链接已复制到粘贴板!
过程 1.1. 安装 Python 软件开发套件
- 确认您的系统已经在 Red Hat Subscription Manager 中订阅了
Red Hat Enterprise Virtualization权利:subscription-manager list --available | grep -A8 "Red Hat Enterprise Virtualization" subscription-manager attach --pool=pool_id subscription-manager repos --enable=rhel-6-server-rhevm-3.6-rpms
# subscription-manager list --available | grep -A8 "Red Hat Enterprise Virtualization" # subscription-manager attach --pool=pool_id # subscription-manager repos --enable=rhel-6-server-rhevm-3.6-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 安装所需软件包:
yum install rhevm-sdk-python
# yum install rhevm-sdk-pythonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
/usr/lib/python2.7/site-packages/ovirtsdk/ 目录,且现在可将其添加至 Python 项目。
第 2 章 Python 快速入门实例 复制链接链接已复制到粘贴板!
2.1. Python 快速入门介绍 复制链接链接已复制到粘贴板!
Red Hat Enterprise Virtualization 权利池的系统可以获得这个软件包。有关订阅系统以便下载软件的详情请查看 第 1.2 节 “安装 Python 软件开发套件”。
- 已经连接到网络中的 Red Hat Enterprise Virtualization Manager。
- 已经被配置并连接到网络中的 Red Hat Enterprise Virtualization Hypervisor。
- 包括了需要在虚拟机上安装的操作系统的 ISO 映像文件。
- 对组成 Red Hat Enterprise Virtualization 环境的物理和逻辑项有一定的了解。
- 对 Python 编程语言有一定的了解。
重要
注意
id 属性生成一个 GUID。这里所使用的值可能会和您实际使用的 Red Hat Enterprise Virtualization 环境中的值不同。
注意
ovirtsdk.infrastructure.errors 模块的 pydoc。
pydoc ovirtsdk.infrastructure.errors
$ pydoc ovirtsdk.infrastructure.errors
2.2. 实例:使用 Python 访问 API 的进入点 复制链接链接已复制到粘贴板!
API 类,它被作为 API 的进入点使用。
例 2.1. 使用 Python 访问 API 的进入点
rhevm.demo.redhat.com)所提供的一个 REST API 实例(instance)上。如果连接成功,它会创建一个 API 类。如果需要断开连接,使用 API 类的 disconnect() 方法。
API 类的构造函数的参数包括:
- 要连接到的 Manager 的
url。 - 用来进行用户验证的用户的
username。 - 用来进行用户验证的用户的
password。 ca_file(到证书的路径)。证书是 Manager 的证书颁发机构所颁发的文件,它可以通过https://HOST/ca.crt获得。
API 类的构造函数还支持其它参数。这个实例中只包括了必需的参数。
Connected to Red Hat Enterprise Virtualization Manager successfully!
Connected to Red Hat Enterprise Virtualization Manager successfully!
2.3. 实例:使用 Python 列出数据中心集合 复制链接链接已复制到粘贴板!
API 类提供了访问数据中心集合(名为 datacenters)的功能。这个集合包括了环境中的所有数据中心。
例 2.2. 使用 Python 列出数据中心集合
datacenters 集合中的所有数据中心。它同时还显示了集合中的每个数据中心的基本信息。
Default 数据中心,而且它还没有被激活,这个实例会输出以下信息:
Default (d8b74b20-c6e1-11e1-87a3-00163e77e2ed)
Default (d8b74b20-c6e1-11e1-87a3-00163e77e2ed)
2.4. 实例:使用 Python 列出集群集合 复制链接链接已复制到粘贴板!
clusters)的功能。这个集合包括了环境中的所有集群。
例 2.3. 使用 Python 列出集群集合
clusters 集合中的集群。它同时还显示了集合中的每个集群的基本信息。
Default 集群,这个实例会输出以下信息:
Default (99408929-82cf-4dc7-a532-9d998063fa95)
Default (99408929-82cf-4dc7-a532-9d998063fa95)
2.5. 实例:使用 Python 列出逻辑网络集合 复制链接链接已复制到粘贴板!
API 类提供了访问逻辑网络集合(名为 networks)的功能。这个集合包括了环境中的所有逻辑网络。
例 2.4. 使用 Python 列出逻辑网络集合
networks 集合中的逻辑网络。它同时还显示了集合中的每个网络的基本信息。
ovirtmgmt (00000000-0000-0000-0000-000000000009)
ovirtmgmt (00000000-0000-0000-0000-000000000009)
2.6. 实例:使用 Python 列出主机集合 复制链接链接已复制到粘贴板!
API 类提供了访问主机集合(名为 hosts)的功能。这个集合包括了环境中的所有主机。
例 2.5. 使用 Python 列出主机集合
hosts 集合中的主机。
Atlantic 的主机,这个实例会输出以下信息:
Atlantic (5b333c18-f224-11e1-9bdd-00163e77e2ed)
Atlantic (5b333c18-f224-11e1-9bdd-00163e77e2ed)
2.7. 实例:列出 ISO 存储域中的 ISO 文件 复制链接链接已复制到粘贴板!
API 类提供了访问存储域集合(名为 storagedomains)的功能。这个集合包括了一个 files 集合来描述存储域中的文件。
例 2.6. 列出 ISO 存储域中的 ISO 文件
2.8. 实例:列出虚拟机的大小 复制链接链接已复制到粘贴板!
API 类提供了访问虚拟机集合(名为 vms)的功能。这个集合包括了一个 disks 集合来描述附加到这个虚拟机上的每个磁盘的详细信息。
例 2.7. 列出虚拟机的大小
2.9. 实例:使用 Python 批准一个主机 复制链接链接已复制到粘贴板!
例 2.8. 使用 Python 批准一个主机
approve 方法来批准一个名为 Atlantic 的主机。
approve 请求成功,脚本会输出以下信息:
Host 'Atlantic' approved (Status: Up).
Host 'Atlantic' approved (Status: Up).
status 的值是 up,它代表了主机已经被批准。
2.10. 实例:使用 Python 创建 NFS 数据存储 复制链接链接已复制到粘贴板!
API 类提供了访问存储域集合(名为 storagedomains)的功能。这个集合包括环境中的所有存储域。storagedomains 集合也可以被用来添加和删除存储域。
注意
例 2.9. 使用 Python 创建 NFS 数据存储
storagedomains 集合中添加了一个 NFS 数据域。使用 Python 添加 NFS 存储域可以分为以下几步:
- 使用
datacenters集合的get方法指定存储必须被附加到的数据中心。dc = api.datacenters.get(name="Default")
dc = api.datacenters.get(name="Default")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用
hosts集合的get方法指定用来附加存储的主机。h = api.hosts.get(name="Atlantic")
h = api.hosts.get(name="Atlantic")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 指定 NFS 存储域的
Storage参数。在这个实例中,NFS 的位置是192.0.43.10/storage/data。s = params.Storage(address="192.0.43.10", path="/storage/data", type_="nfs")
s = params.Storage(address="192.0.43.10", path="/storage/data", type_="nfs")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用
storagedomains集合的add方法请求创建存储域。除了Storage参数,还需要提供以下信息:- 存储域的名称。
- 从
datacenters集合获得的数据中心项。 - 从
hosts集合获得的主机项。 - 添加的存储域类型(
data、iso或export)。 - 使用的存储格式(
v1、v2或v3)。
add 方法调用成功,脚本会输出以下信息:
Storage Domain 'data1' added (bd954c03-d180-4d16-878c-2aedbdede566).
Storage Domain 'data1' added (bd954c03-d180-4d16-878c-2aedbdede566).
2.11. 实例:使用 Python 创建 NFS ISO 存储 复制链接链接已复制到粘贴板!
注意
例 2.10. 使用 Python 创建 NFS ISO 存储
storagedomains 集合中添加了一个 NFS ISO 域。使用 Python 添加 NFS 存储域可以分为以下几步:
- 使用
datacenters集合的get方法指定存储必须被附加到的数据中心。dc = api.datacenters.get( name="Default" )
dc = api.datacenters.get( name="Default" )Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用
hosts集合的get方法指定用来附加存储的主机。h = api.hosts.get(name="Atlantic")
h = api.hosts.get(name="Atlantic")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 指定 NFS 存储域的
Storage参数。在这个实例中,NFS 的位置是192.0.43.10/storage/iso。s = params.Storage(address="192.0.43.10", path="/storage/iso", type_="nfs")
s = params.Storage(address="192.0.43.10", path="/storage/iso", type_="nfs")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用
storagedomains集合的add方法请求创建存储域。除了Storage参数,还需要提供以下信息:- 存储域的名称。
- 从
datacenters集合获得的数据中心项。 - 从
hosts集合获得的主机项。 - 添加的存储域类型(
data、iso或export)。 - 使用的存储格式(
v1、v2或v3)。
add 方法调用成功,脚本会输出以下信息:
Storage Domain 'iso1' added (789814a7-7b90-4a39-a1fd-f6a98cc915d8).
Storage Domain 'iso1' added (789814a7-7b90-4a39-a1fd-f6a98cc915d8).
2.12. 实例:使用 Python 为数据中心附加存储域 复制链接链接已复制到粘贴板!
例 2.11. 使用 Python 为数据中心附加存储域
data1 的数据存储域和一个名为 iso1 的 ISO 存储域附加到 default 数据中心中。这个附加的操作是通过数据中心的 storagedomains 集合的 add 方法实现的。
add 方法的调用成功,这个脚本会输出:
Attached data storage domain 'data1' to data center 'Default' (Status: maintenance). Attached ISO storage domain 'iso1' to data center 'Default' (Status: maintenance).
Attached data storage domain 'data1' to data center 'Default' (Status: maintenance).
Attached ISO storage domain 'iso1' to data center 'Default' (Status: maintenance).
status 的值代表了存储域仍然需要被激活。
2.13. 实例:使用 Python 激活存储域 复制链接链接已复制到粘贴板!
例 2.12. 使用 Python 激活存储域
data1 的数据存储域和一个名为 iso1 的 ISO 存储域。这两个存储域都被附加到 Default 数据中心中。激活操作是通过存储域的 activate 方法实现的。
activate 请求成功,脚本会输出:
Activated data storage domain 'data1' in data center 'Default' (Status: active). Activated ISO storage domain 'iso1' in data center 'Default' (Status: active).
Activated data storage domain 'data1' in data center 'Default' (Status: active).
Activated ISO storage domain 'iso1' in data center 'Default' (Status: active).
status 的值代表了存储域已经被激活。
2.14. 实例:使用 Python 创建虚拟机 复制链接链接已复制到粘贴板!
例 2.13. 使用 Python 创建虚拟机
vm1 的虚拟机。这个虚拟机会满足以下条件:
- 最少有 512MB 内存(以字节表示)。
vm_memory = 512 * 1024 * 1024
vm_memory = 512 * 1024 * 1024Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必须附加到
Default集群(因此也被附加到Default数据中心)。vm_cluster = api.clusters.get(name="Default")
vm_cluster = api.clusters.get(name="Default")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必须基于默认的
Blank模板。vm_template = api.templates.get(name="Blank")
vm_template = api.templates.get(name="Blank")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必须从虚拟硬盘引导。
vm_os = params.OperatingSystem(boot=[params.Boot(dev="hd")])
vm_os = params.OperatingSystem(boot=[params.Boot(dev="hd")])Copy to Clipboard Copied! Toggle word wrap Toggle overflow
vms 集合的 add 方法创建虚拟机前,把这些选项组合为一个参数项。
add 请求成功,脚本会输出以下信息:
Virtual machine 'vm1' added.
Virtual machine 'vm1' added.
2.15. 实例:使用 Python 创建虚拟机 NIC 复制链接链接已复制到粘贴板!
例 2.14. 使用 Python 创建虚拟机 NIC
nic1 的 NIC,并把它附加到名为 vm1 的虚拟机上。这个 NIC 满足以下条件:
- 必须是
virtio网络设备。nic_interface = "virtio"
nic_interface = "virtio"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必须连接到
ovirtmgmt管理网络。nic_network = api.networks.get(name="ovirtmgmt")
nic_network = api.networks.get(name="ovirtmgmt")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
nics 集合的 add 方法创建 NIC 前,把这些选项组合在一起作为 NIC 参数项。
add 请求成功,脚本会输出以下信息:
Network interface 'nic1' added to 'vm1'.
Network interface 'nic1' added to 'vm1'.
2.16. 实例:使用 Python 创建虚拟机存储磁盘 复制链接链接已复制到粘贴板!
例 2.15. 使用 Python 创建虚拟机存储磁盘
virtio 磁盘,并把它附加到名为 vm1 的虚拟机上。这个磁盘满足以下条件:
- 必须存储在名为
data1的存储域中,disk_storage_domain = params.StorageDomains(storage_domain=[api.storagedomains.get(name="data1")])
disk_storage_domain = params.StorageDomains(storage_domain=[api.storagedomains.get(name="data1")])Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 磁盘的容量是 8GB,
disk_size = 8*1024*1024
disk_size = 8*1024*1024Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必须是一个
system类磁盘(和data相对应),disk_type = "system"
disk_type = "system"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必须是
virtio存储设备,disk_interface = "virtio"
disk_interface = "virtio"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以
cow格式保存,disk_format = "cow"
disk_format = "cow"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必须被标记为一个可用的引导设备。
disk_bootable = True
disk_bootable = TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
disks 集合的 add 方法创建磁盘前,把这些选项组合在一起作为磁盘参数项。
add 请求成功,脚本会输出以下信息:
Disk 'vm1_Disk1' added to 'vm1'.
Disk 'vm1_Disk1' added to 'vm1'.
2.17. 实例:使用 Python 为虚拟机附加一个 ISO 映像 复制链接链接已复制到粘贴板!
例 2.16. 指定 ISO 映像
files 集合中。这个实例列出了一个 ISO 存储域中的 files 集合中的内容。
files 集合中找到的每个文件输出和以下相似的内容:
RHEL6.3-Server-x86_64-DVD1.iso
RHEL6.3-Server-x86_64-DVD1.iso
id 和 name 属性是相同的。
例 2.17. 使用 Python 为虚拟机附加一个 ISO 映像
RHEL6.3-Server-x86_64-DVD1.iso ISO 映像文件附加到 vm1 虚拟机上。使用虚拟机的 cdroms 集合的 add 方法可以把指定的映像文件附加到虚拟机上。
add 请求成功,脚本会输出以下信息:
Attached CD to 'vm1'.
Attached CD to 'vm1'.
注意
Down 的虚拟机上。如果需要把 ISO 附加到一个状态为 Up 的虚拟机上时,把第 2 个 try 中的代码改为:
例 2.18. 使用 Python 从虚拟机上弹出一个 cdrom
cdrom 集合中弹出一个 ISO。
2.18. 实例:使用 Python 分离一个磁盘 复制链接链接已复制到粘贴板!
例 2.19. 使用 Python 分离一个磁盘
2.19. 实例:使用 Python 启动虚拟机 复制链接链接已复制到粘贴板!
例 2.20. 使用 Python 启动虚拟机
start 方法启动虚拟机。
start 请求成功,脚本会输出以下信息:
Started 'vm1'.
Started 'vm1'.
status 的值是 up,它代表了主机已经被启动。
2.20. 实例:使用 Python 启动覆盖参数的虚拟机 复制链接链接已复制到粘贴板!
例 2.21. 使用 Python 启动覆盖参数的虚拟机
virtio-win_x86.vfd 软盘。这个动作与使用管理或用户门户网站中的 Run Once 窗口启动虚拟机一致。
注意
2.21. 实例:使用 Python 启动附带 Cloud-Init 虚拟机 复制链接链接已复制到粘贴板!
例 2.22. 使用 Python 启动附带 Cloud-Init 虚拟机
2.22. 实例:使用 Python 检查系统事件 复制链接链接已复制到粘贴板!
events 集合来访问事件。
例 2.23. 使用 Python 检查系统事件
events 集合被列出。请注意:
- 使用
list方法中的query参数确保了所有结果页都会被返回。在默认的情况下,list方法只返回结果的第 1 页(这个页默认包括最多100个结果)。 - 结果列表中的事件顺序和实际发生的顺序相同。
2012-09-25T18:40:10.065-04:00 NORMAL CODE 30 - User admin@internal logged in. 2012-09-25T18:40:10.368-04:00 NORMAL CODE 153 - VM vm1 was started by admin@internal (Host: Atlantic). 2012-09-25T18:40:10.470-04:00 NORMAL CODE 30 - User admin@internal logged in.
2012-09-25T18:40:10.065-04:00 NORMAL CODE 30 - User admin@internal logged in.
2012-09-25T18:40:10.368-04:00 NORMAL CODE 153 - VM vm1 was started by admin@internal (Host: Atlantic).
2012-09-25T18:40:10.470-04:00 NORMAL CODE 30 - User admin@internal logged in.
第 3 章 使用软件开发套件 复制链接链接已复制到粘贴板!
3.1. 使用 Python 连接 API 复制链接链接已复制到粘贴板!
API 类的实例(instance)。要实现这个任务,需要在脚本的开始首先导入这个类。
from ovirtsdk.api import API
from ovirtsdk.api import API
API 类的构造函数支持以下参数:
- url
- 指定要连接到的 Manager 的 URL(包括
/api路径)。这个参数是必需的。 - username
- 指定连接时使用的用户名(使用 UPD 格式)。这个参数是必需的。
- password
- 指定
username参数中指定的用户的密码。这个参数是必需的。 - Kerberos
- 使用有效 Kerberos ticket 验证连接。有效值为
True和False。这个参数是自选的。 - key_file
- 指定一个 PEM 格式的密钥文件。这个密钥文件包括了
cert_file指定的证书的私人密钥。这个参数是可选的。 - cert_file
- 指定一个 PEM 格式的客户端证书。这个证书被用来在服务器上建立客户端的身份。这个选项是可选的。
- ca_file
- 指定服务器证书颁发机构的证书文件。除非
insecure参数被设置为True,这个参数是必需的。 - port
- 指定连接使用的端口(当
url参数没有提供相应信息时有效)。这个参数是可选的。 - timeout
- 一个请求的超时时间(以秒为单位)。这个选项是可选的。
- persistent_auth
- 指定是否为连接建立持久性验证。有效值是
True和False。这个参数是可选的,默认值是False。 - insecure
- 允许通过没有证书颁发机构的 SSL 进行连接。有效值包括
True和False。如果insecure参数被设置为False(默认的值),必须在连接时提供ca_file来建立安全的连接。在使用这个选项是需要格外小心。如果使用不当,可能会被"中间人攻击“所利用来进行服务器身份欺骗。 - filter
- 指定是否启用基于用户权限的过滤器。有效值是
True和False。如果filter参数被设置为False(默认值),所使用的用户验证信息必须是管理员用户。如果filter参数被设置为True,则任何用户都可以使用,Manager 会根据用户的权限决定用户可以进行什么操作。 - debug
- 指定这个连接是否启用调试(debug)模式。有效值是
True和False。这个参数是可选的。
API 项实例,使用 test() 方法检查连接是否工作正常,然后使用 disconnect() 方法断开连接。
API 项支持方法的完整列表请参考 ovirtsdk.api 模块的 pydoc 输出结果。
pydoc ovirtsdk.api
$ pydoc ovirtsdk.api
3.2. 资源和集合 复制链接链接已复制到粘贴板!
- 集合
- 集合就是相同类型的一组资源。API 提供了顶级集合和子集合。
hosts集合是一个顶级集合的例子,它包括了虚拟环境中的所有虚拟主机。host.nics集合是子集合的一个例子,它包括了附加到一个主机资源上的所有网络接口卡。集合提供了多个方法来添加资源(add)、获得资源(get)和列出资源(list)。 - 资源
- REST API 中的资源就是一个带有固定接口的对象,它包括了一组和它所代表的特定资源类型相关的属性。所有资源的接口提供了更新资源(
update)和删除资源(delete)的方法。另外,一些资源还额外支持只适用于它们的某些操作,如Host资源有一个approve方法。
3.3. 从集合中获取资源 复制链接链接已复制到粘贴板!
get 和 list 方法可以从集合中获取资源。
- get
- 从集合中获取一个单一资源。要被获取的资源是由参数中所提供的名称决定的。
get方法可以使用以下参数:name- 从集合中获取的资源名称。id- 从集合中获取的资源的 GUID。
- list
- 从集合中获取一组资源。要获得的资源由所提供的条件所决定。
list方法支持以下参数:**kwargs- 允许进行基于关键字过滤的额外参数字典。query- 和 Red Hat Enterprise Virtualization 用户接口中所使用的查询相同的查询。max- 可以获得的资源的最大数量。case_sensitive- 指定搜索条件是否区分大小写(True区分大小写或False不区分大小写,默认值是True)。
3.4. 从集合中获取特定资源 复制链接链接已复制到粘贴板!
get 方法从集合中获取特定资源。
例 3.1. 获取特定名称的资源
get 方法中使用 name 参数从 datacenters 集合中获取 Default 数据中心:
dc = api.datacenters.get("Default")
dc = api.datacenters.get("Default")
dc = api.datacenters.get(name="Default")
dc = api.datacenters.get(name="Default")
all-content 标头的 get 请求可以获得的额外信息。
例 3.2. 在特定资源中获取额外信息
vm = api.vms.get(name="VM01", all_content=True)
vm = api.vms.get(name="VM01", all_content=True)
3.5. 从集合中获取资源列表 复制链接链接已复制到粘贴板!
list 方法从集合中获取一个资源列表。
例 3.3. 获取一个集合中的所有资源列表
datacenters 集合中的所有资源列表。list 的 query 参数可以允许使用基于引擎的查询。这些查询的格式与管理门户和用户门户中所使用的查询格式完全相同。query 参数也提供了设置查询结果分页的功能。
datacenters 集合中的资源列表被保存在本地定义的 dc_list 列表变量中。
警告
list 方法所能获得的结果数量仅由 Red Hat Enterprise Virtualization Manager 的 SearchResultsLimit 配置值决定。
list 返回所有资源,您可以使用这个实例中所使用的方法来对结果进行分页。
list 中的 max 参数来指定您需要获取的结果数量的最大值。
例 3.4. 在一个集合中获取一组和关键字过滤器项匹配的资源列表
datacenters 集合中的、存储类型为 nfs 的资源列表。在这个实例中,使用了 query 参数和 **kwargs 参数。query 参数被用来进行分页;**kwargs 参数被用来进行基于存储类型的过滤。
datacenters 集合中的、存储类型为 nfs 的资源列表被保存在本地定义的 dc_list 列表变量中。
3.6. 为集合添加一个资源 复制链接链接已复制到粘贴板!
add 方法以及相应的参数可以为这个集合添加一个资源。提供给 add 方法的参数使用 ovirtsdk.xml.params 模块中的一个项实例。
例 3.5. 为集合添加一个资源
- 创建一个参数项实例来代表要被创建的资源类型。
- 指定资源要被添加到的集合。
- 调用集合的
add方法,使用操作项作为一个参数。
例 3.6. 复杂参数
ovirtsdk.xml.params.Version 项。然后,在创建 ovirtsdk.xml.params.DataCenter 项实例中使用这个项(包括了要被创建的数据中心的参数)。最后,使用 datacenters 集合的 add 方法创建资源。
v_params = params.Version(major=3, minor=2) dc_params = params.DataCenter(name="DemoDataCenter", storage_type="NFS", version=v_params) dc = api.datacenters.add(dc_params)
v_params = params.Version(major=3, minor=2)
dc_params = params.DataCenter(name="DemoDataCenter", storage_type="NFS", version=v_params)
dc = api.datacenters.add(dc_params)
3.7. 更新集合中的资源 复制链接链接已复制到粘贴板!
update 方法来保存所做的修改。对参数的修改操作是通过使用所获取的资源的 set_* 方法进行的。
例 3.7. 更新资源
DemoDataCenter 的数据中心的描述信息被更新。
dc = api.datacenters.get("DemoDataCenter")
dc.set_description("This data center description provided using the Python SDK")
dc.update()
dc = api.datacenters.get("DemoDataCenter")
dc.set_description("This data center description provided using the Python SDK")
dc.update()
3.8. 从集合中删除资源 复制链接链接已复制到粘贴板!
delete 方法来删除它。
例 3.8. 从集合中删除资源
vms 集合中删除一个名为 DemoVM 的虚拟机:
vm = api.vms.get("DemoVM")
vm.delete()
vm = api.vms.get("DemoVM")
vm.delete()
3.9. 错误处理 复制链接链接已复制到粘贴板!
ovirtsdk.infrastructure.errors 模块中:
- ConnectionError
- 在传输层错误发生时出现。
- DisconnectedError
- 当试图在断开连接后使用 SDK 时出现。
- ImmutableError
- 当一个 SDK 实例已经在相同的域中存在时初始 SDK 会出现这个错误。只适用于 SDK 3.2 或更高版本。
- NoCertificatesError
- 当 --insecure 是 'False',而没有提供 CA 时出现。
- RequestError
- 在有 oVirt 服务器错误时出现
- UnsecuredConnectionAttemptError
- 当服务器运行 HTTPS 而使用 HTTP 时出现。
- MissingParametersError
- 在没有为 get() 方法提供 id 或 name 参数的情况下出现。
例 3.9. 捕获一个 ConnectionError 异常
第 4 章 Python 参考文档 复制链接链接已复制到粘贴板!
4.1. Python 参考文档 复制链接链接已复制到粘贴板!
- ovirtsdk.api
- ovirtsdk.infrastructure.brokers
- ovirtsdk.infrastructure.errors
pydoc [MODULE]
$ pydoc [MODULE]
附录 A. 修订历史 复制链接链接已复制到粘贴板!
| 修订历史 | ||||
|---|---|---|---|---|
| 修订 3.6-4.1 | Sat Jan 23 2016 | |||
| ||||
| 修订 3.6-4 | Fri 11 Dec 2015 | |||
| ||||
| 修订 3.6-3 | Wed 18 Nov 2015 | |||
| ||||
| 修订 3.6-2 | Wed 30 Sep 2015 | |||
| ||||
| 修订 3.6-1 | Mon 10 Aug 2015 | |||
| ||||