跳转到: 导航, 搜索

NovaVMware/DeveloperGuide

目录

开发者 DevStack + vSphere 指南

这是一个为对使用 OpenStack 和 vSphere (ESX, ESXi, 和 vCenter) 驱动程序进行开发的开发者准备的简短指南。

vSphere 环境和清单

设置一个 vSphere 5.1 (或更高版本) 开发环境。为了开发目的,你需要拥有以下一种类型的清单

带有 DRS 集群的清单

注意:集群应该启用 DRS,并且“完全自动化”放置已开启。另外,如果你无法让两个或多个 ESX 主机工作,你仍然可以使用集群中的一个主机,但你将无法观察 VM 放置行为,因为除了孤立的主机之外,没有其他地方可以放置 VM。

开发环境

获取 Ubuntu 12.04 (推荐) 虚拟机设置

这个 Ubuntu 工作站可以作为虚拟机本身运行,但它应该具有公共互联网访问权限(理想情况下是直接的,但如果不需要将代码提交回 OpenStack,则 http 代理是可行的,如果你需要,请参阅故障排除页面,了解可能有所帮助的步骤)。它还应该具有与 vSphere 主机相当高的带宽链路,因为它需要将镜像从 Ubuntu 工作站流式传输到 vSphere 主机。

我们建议你的 Ubuntu 工作站具有

  • 至少 10 GB 磁盘,20+ GB 更好。
  • 至少一个 vCPU,2 个更好。
  • 4 GB 内存。

可选设置

如果你使用的是远程工作站(未在你的物理计算机上本地运行),你可能需要遵循 网络故障排除 下的一些额外步骤

在你的新虚拟机中安装 Devstack (http://devstack.org/)

启动后,运行

sudo apt-get install git
git clone http://github.com/openstack-dev/devstack.git
cd devstack

为 DevStack 设置 localrc

在你的 devstack 目录中创建一个名为“localrc”的文件,内容如下(对于每个带有 $variable_name 的项目,你需要输入特定于你的环境的值,其余的可以保持不变)。

文件 ~/devstack/localrc

ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-cpu,n-net,n-cond,n-sch,n-novnc,n-cauth,rabbit,mysql,horizon
VIRT_DRIVER=vsphere
VMWAREAPI_IP=$your_vCenter_ip_address
VMWAREAPI_USER=root
VMWAREAPI_PASSWORD=$password_goes_here
VMWAREAPI_CLUSTER=$your_cluster_name
DATABASE_PASSWORD=nova
RABBIT_PASSWORD=nova
SERVICE_TOKEN=nova
SERVICE_PASSWORD=nova
ADMIN_PASSWORD=nova
HOST_IP=$your_development_vm_ip

注意:如果你想使用特定的数据存储,请配置 VMWAREAPI_DATASTORE_REGEX

注意:如果你正在使用 trivial 清单示例,请省略 VMWAREAPI_CLUSTER 行。

注意:如果你希望将日志写入磁盘(而不仅仅可以通过 screen 访问),请使用 define SCREEN_LOGDIR 指向你希望日志所在的路径。例如

SCREEN_LOGDIR=/var/log

启动堆栈 (第一次)

./stack.sh

第一次启动时这将花费很长时间,因为它会下载所有代码和依赖项。注意:第一次启动可能会失败。

凭据和环境变量

在你的环境变量中获取 OpenStack API 凭据

$ source openrc demo demo

每当你使用 openstack CLI 客户端(例如“nova”、“glance”或“quantum”)进行调用时都需要此凭据。你可以随时从 devstack 目录重新运行此命令,以便在以后重新登录。如果你想要管理员凭据,请使用 admin ($ source openrc admin admin)

Glance 初始设置

获取一个 VMDK 作为磁盘镜像并使用 Glance API 将其上传到 OpenStack。最新的代码(8月中旬)有一个更改,它会在你第一次运行 devstack 时上传镜像。Glance 启动后,运行以下命令查看你是否在 glance 中有一个预配置的镜像

$ glance image-list

获取一个初始 VMDK 用于工作

关于哪些 VMDK 磁盘适用于 OpenStack + vSphere,有很多“陷阱”,因此我们强烈建议你使用提供的镜像开始。在附录中,有关于创建/转换你自己的镜像的信息。

下载 1 GB debian 磁盘镜像(登录此镜像的用户/密码为 nicira/nicira)。

http://partnerweb.vmware.com/programs/vmdkimage/debian-2.6.32-i686.vmdk 

将文件放在你的主目录下 ~/

注意:如果你正在使用嵌套的虚拟机,你需要获取 32 位镜像才能使用或排除故障:如何在 vSphere 5.1 中启用嵌套 ESXi 和其他虚拟机 - 更多信息请参见:http://www.virtuallyghetto.com/2012/08/how-to-enable-nested-esxi-other.html#sthash.NJ2VNiwt.dpuf

将你的 VMDK 上传到 glance

建议使用 Devstack 提供的 upload_images.sh 脚本将镜像上传到 Glance

https://github.com/openstack-dev/devstack/blob/master/tools/upload_image.sh

upload_image.sh 有一个依赖项

https://github.com/openstack-dev/devstack/blob/master/functions

该脚本将内省提供的镜像以提取元数据。它期望 URL 作为唯一参数。URL 的方案可以是 http(s) 或 file。当提供一个 flat 磁盘 (*-flat.vmdk) 时,该脚本将尝试检索关联的描述符 (*.vmdk) 以查找正确的元数据。用户也可以指定描述符:在这种情况下,该脚本将尝试查找 flat 磁盘。如果提供了一个 *-flat.vmdk 磁盘并且找不到描述符,则“ide”将被用作默认的 adapter_type,而“preallocated”将被用作默认的 disk_type。

执行示例

$ cd ~/devstack
$ ./tools/upload_image.sh http://partnerweb.vmware.com/programs/vmdkimage/debian-2.6.32-i686.vmdk
$ ./tools/upload_image.sh file:///home/user/images/debian-2.6.32-i686.vmdk
$ ./tools/upload_image.sh "http://partnerweb.vmware.com/programs/vmdkimage/trend-tinyvm1-flat-;ide;.vmdk"

可以提供特定的元数据:镜像文件名格式为 <name>-<disk type>;<storage adapter>;<network adapter>.vmdk 默认情况下,Nova 驱动程序将使用 adapter_type "lsiLogic" 和 disk_type "preallocated"

为了避免元数据问题,强烈建议提供一个 monolithicSparse 或 monolithicFlat 磁盘,其中描述符和 flat 磁盘位于同一目录中。有关 VMware 驱动程序支持的磁盘类型的信息,请参阅 https://docs.openstack.org/trunk/config-reference/content/vmware.html 。有关磁盘类型的常规信息:http://sanbarrow.com/vmdk-basics.html

或者,可以直接调用 Glance 客户端(以下命令使用 Glance 客户端的 V1 版本)

$ glance image-create --name Debian --is-public=True --container-format=bare --disk-format=vmdk --property vmware-disktype="preallocated" < debian-2.6.32-i686.vmdk 

这将打印出一个 <image-id> 以供下面使用。如果你忘记了它,可以随时运行“glance image-list”来查看所有现有的镜像。

还有一个基于 IDE 的镜像可以使用。

wget "http://partnerweb.vmware.com/programs/vmdkimage/trend-tinyvm1-flat-;ide;.vmdk"

注意 vmware_adaptertype 设置为 "ide"

$ glance image-create --name trend-thin --is-public=True --container-format=bare --disk-format=vmdk --property vmware_adaptertype="ide" < "trend-tinyvm1-flat-;ide;.vmdk"

Nova 启动

使用上面的“<image-id>”启动 VM

$ nova boot --image <image-id> --flavor 1 test1

现在你可以使用其他 nova 客户端命令与镜像交互。例如

$ nova list
+--------------------------------------+-------+--------+------------+-------------+------------------+
| ID                                   | Name  | Status | Task State | Power State | Networks         |
+--------------------------------------+-------+--------+------------+-------------+------------------+
| 9bb724bf-298d-4a63-a653-dab7fcbd9ac7 | test1 | ACTIVE  | None       | NOSTATE     | private=10.0.0.2 |
+--------------------------------------+-------+--------+------------+-------------+------------------+

注意:如果你的磁盘很大,将镜像从 glance 流式传输到数据存储可能需要很长时间(例如,对于 1 GB 的 thick 镜像,大约需要 7 分钟)。这只会发生在第一次在新数据存储上使用新的镜像 UUID 时。你可以通过查看 filestore 的 vmware_base 目录中的文件大小来监控进度。

完成此操作后,你可以使用 vCenter 查看 VM。上述 Debian 镜像的用户名/密码为 nicira/nicira 。

你可以通过访问你的 Ubuntu 主机上的端口 80 来访问 OpenStack Web GUI(称为 horizon),但目前通过 Horizon 进行 VNC 访问已损坏(请参阅:https://review.openstack.org/#/c/30036/ 获取修复此问题的补丁)。

使用 Screen

使用 screen 与单个 openstack 服务交互

$ screen -x stack

参见:https://gnu.ac.cn/software/screen/manual/screen.html <- 如何使用

  • “Control + a”进入命令模式... 输入此命令以获取每个新命令字符

字符 0 到 9 切换选项卡

    • 字符 'd' 分离会话
    • 字符 '[' 进入“复制模式”,允许你导航屏幕跟踪并 'escape' 退出复制模式。
    • 字符 '"' 显示一个屏幕列表,你可以使用上下箭头导航

例如,nova-compute 服务在 n-cpu 选项卡上运行,通常是编号 6。因此要导航到它,按 Ctrl+a 然后按 '6',你将切换到它。然后你可以与 n-cpu 的终端交互。

使用开发环境

如果你想重置你的环境,请运行

./unstack.sh 
./stack.sh 
  • stack.sh 的这次运行会更快 (~1 分钟),因为它会重置所有数据库和状态,但不需要重新下载软件包或源代码。
  • 运行 ./unstack 后,请务必清理所有数据存储并删除意外留下的所有文件。这将防止许多人们在生产环境中看不到的问题。(例如:部分上传的 VMDK。)

注意:重置环境时不会自动更新源代码。这很有价值,因为你可以手动通过 git 管理源代码,拥有许多分支等。

远程调试器

要使用 pycharm 远程调试器(可能还有 eclipse),请在你的 nova 代码中进行以下更改

index 0e7ecdc,87edf9b..0000000 --- a/nova/cmd/__init__.py +++ b/nova/cmd/__init__.py @@@ -31,8 -31,4 +31,8 @@@

 os.environ['EVENTLET_NO_GREENDNS'] = 'y
 
 import eventlet
 
-eventlet.monkey_patch(os=False)
+if '--debug-host' and '--debug-port' in sys.argv:
+    eventlet.monkey_patch(all=False,socket=True,time=True,os=False,thread=False)
+else:
+    eventlet.monkey_patch(os=False)
+


diff --combined nova/cmd/compute.py index 61cf434,f03a9bd..0000000 --- a/nova/cmd/compute.py +++ b/nova/cmd/compute.py @@@ -33,19 -33,10 +33,19 @@@

 from nova.openstack.common import log a
 from nova import service
 from nova import utils
 
+cli_opts = [
+        cfg.StrOpt('debug-host',
+                    default=None,
+                    help='Connect to debug host'),
+        cfg.IntOpt('debug-port',
+                    default=None,
+                    help='Connect to debug host port'),
+    ]
+
 CONF = cfg.CONF
 CONF.import_opt('compute_topic', 'nova.compute.rpcapi')
 CONF.import_opt('use_local', 'nova.conductor.api', group='conductor')
-
+CONF.register_cli_opts(cli_opts)
 
 def block_db_access():
     class NoDB(object):

@@@ -72,16 -63,6 +72,16 @@@ def main()

         objects_base.NovaObject.indirection_api = \
             conductor_rpcapi.ConductorAPI()
 
+    if CONF.debug_host:
+        from pydev import pydevd
+        print ('Listening on ' + str(CONF.debug_port) + ' for host ' +
+                                    CONF.debug_host)
+        pydevd.settrace(host=CONF.debug_host,
+                        port=CONF.debug_port,
+                        stdoutToServer=False,
+                        stderrToServer=False)
+
+
     server = service.Service.create(binary='nova-compute',
                                     topic=CONF.compute_topic,
                                     db_allowed=False)

然后在 pycharm 中,创建一个远程调试会话,主机为 localhost,端口为你想要的任何端口。当你运行它时,使用 --debug_host <你的 IP> 和 --debug_port <你的端口>。就是这样!

测试

安装 python 支持库

apt-get 库

$ sudo apt-get install python-dev libmysqlclient-dev python-pip build-essential 
$ sudo apt-get install libxml2-dev libxslt1-dev libpq-dev

基于 pip 的工具安装

$ sudo pip install --upgrade pip 
$ sudo pip install --upgrade virtualenv
$ sudo pip install MySQL-python
$ sudo pip install tox
$ sudo pip install python-subunit

pip 代理故障排除

如果你在这里收到连接被拒绝 - 尝试此操作

export PIP_INDEX_URL="http://pypi.openstack.org/openstack"

如果你收到以下错误:“pip 的 wheel 支持需要 setuptools >= 0.8 用于 dist-info 支持”,请尝试此命令

 sudo pip install setuptools --no-use-wheel --upgrade

安装 OpenStack 库

$ cd /opt/stack/nova
$ sudo pip install -i http://pypi.openstack.org/openstack  -r requirements.txt -r test-requirements.txt 

注意:确保 requires 列表中的所有内容都已安装。一些安装程序有单独的问题,你可能需要一次清除一个问题。特别是 lxslt 有一些可能需要注意的问题。

使用 TOX 进行测试

参见:https://wiki.openstack.org/wiki/ProjectTestingInterface

在提交代码审查之前需要运行的重要测试是

tox -e py26,py27
tox -e pep8

目前 run_tests.sh 是运行测试的更好方法。

使用 run_tests.sh 进行测试

$ cd /opt/stack/nova
$ ./run_tests.sh

... 或 ...

$ ./run_tests.sh nova.tests.virt.vmwareapi

... 只运行 vmware 单元测试。


注意:如果你想在你的正常(非虚拟)环境中使用 python 包,请传递 -N 标志

代码覆盖率测试和信息

使用 tox

$ cd /opt/stack/nova
$ tox -e cover  (code coverage)

查看 cover 目录下的 html 报告,了解该模块的代码覆盖率。文件 index.html 包含整体覆盖率报告

注意:测试可能需要 10、20 或长达 65 分钟(具体取决于你的硬件、网络和系统),并且不会产生任何输出直到完成。这是正常的。你的系统可能会变得迟缓,但不应该完全死机,系统挂起可能表明测试环境配置不当。测试将在 Mac OSX 上运行。在配置良好的 Ubuntu 12.04 机器上,2 个核心和 2GB 内存应该需要 10 到 20 分钟才能完成。

使用 run_tests.sh

 $ cd /opt/stack/nova
 $ ./run_tests.sh --coverage

附加设置

如果您使用的是 Ubuntu 12.04 并且需要使用 Python 2.6(OpenStack 需要它用于一些测试脚本),请通过以下方式安装旧版本的 python

$ sudo add-apt-repository ppa:fkrull/deadsnakes
$ sudo apt-get update
$ sudo apt-get install python2.6 python2.6-dev

禁用详细日志记录子系统

将此行添加到 nova.conf 以禁用 amqp 日志记录(例如)

default_log_levels=amqp=WARN,amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,keystone=INFO,eventlet.wsgi.server=WARN,nova.openstack.common.rpc.amqp=WARN

故障排除

一些工作场所可能需要使用特殊的网络和/或代理设置,并且这些设置在您移动时可能会发生变化。这些问题可能导致 apt-get、git 和 OpenStack 的其他部分出现问题。如果您所在的地点需要特殊的代理规则,请设置 apt-get 使用代理。您可能还需要根据公司的特定防火墙规则设置其他代理设置

日志记录

您可能需要监视 devstack 的日志文件。以下是如何以最少麻烦的方式设置文件日志记录。

要设置屏幕窗口的日志记录,请将 shell 变量 SCREEN_LOGDIR 设置为要放置日志文件的目录。日志文件将以类似于 screen-$SERVICE_NAME-$TIMESTAMP.log 的名称出现在该目录中,并且符号链接 screen-$SERVICE_NAME.log 将链接到最新的日志文件。日志会保留 LOGDAYS 变量指定的时间长短。

SCREEN_LOGDIR 和 LOGDAYS 都是 shell 变量,因此您需要在 shell 或 localrc 中设置它们。如果只想让日志这次有效,请使用 shell 命令。如果始终希望出现日志文件,请使用 localrc

假设您已经创建了一个目录...

$ mkdir ~/log

然后,如果您只想记录这次日志,在您的 bash shell 中说...

$ export SCREEN_LOGDIR=~/log
$ export LOGDAYS=2

...或者如果您始终想要日志文件,在您的 localrc 中添加以下行...

SCREEN_LOGDIR=~/log
LOGDAYS=2

stack.sh 脚本将自动为您轮换日志文件。

MySQL 问题

如果您在使用 Keystone 时遇到问题,请尝试...

$ mysql -u root -pnova

...如果这不起作用,您可能有一个损坏的 mysql 安装。如果您在让 mysql 正常工作时遇到问题,请尝试清除 OpenStack 版本的安装并手动安装数据库。以下是如何完全删除所有内容并从头开始安装 mysql-server。

$ ./unstack
$ sudo apt-get purge mysql-server

...您可能需要使用名称 mysql-server-5.5 代替...

$ sudo apt-get autoremove
$ sudo apt-get install mysql-server-5.5
$ sudo mysql_install_db
$ sudo mysqladmin -u root password 'nova'
$ sudo service mysql restart
$ ./stack

Keystone 问题

如果您在通过 curl 检查您的 keystone 连接时遇到问题,那么是您的代理设置。尝试在 /etc/environment 中设置以下内容

no_proxy=localhost,127.0.0.0/8,127.0.1.1,127.0.1.1*,local.home

通用数据库问题

如果您在测试或其他数据库密集型活动中遇到问题,您可能需要遵循

http://codeinthehole.com/writing/how-to-set-up-mysql-for-python-on-ubuntu/

rootwrap 问题

如果网络突然停止工作并出现如下错误

Traceback (most recent call last):
  File "/usr/bin/nova-rootwrap", line 59, in <module>
    from nova.rootwrap import wrapper
ImportError: No module named rootwrap

那么有东西将一个损坏的 rootwrap 添加到了 /usr/bin。删除 /usr/bin/nova-rootwrap,它将使用 /usr/local/bin 中的正确版本

检查 nova-compute 是否正在运行

$ screen -x

请注意 n-cpu 运行的选项卡。通常是 #6,但有时可能会是不同的选项卡。切换到 n-cpu 的选项卡。ctl+a 然后 6。如果您看到

$ cd /opt/stack/nova && sg  '/usr/local/bin/nova-compute --config-file /etc/nova/nova.conf' || touch "/opt/stack/status/stack/n-cpu.failure"
sg: group '/usr/local/bin/nova-compute --config-file /etc/nova/nova.conf' does not exist
$

...那么 nova-compute 没有启动。您可以手动启动 nova-compute,方法是编辑命令以读取

$ cd /opt/stack/nova && /usr/local/bin/nova-compute --config-file /etc/nova/nova.conf || touch "/opt/stack/status/stack/n-cpu.failure"

...这对于开发是允许的(但不适用于生产环境)。

网络故障排除

远程访问的工作站需要一个 IP 地址才能 SSH 或 VNC 到其中进行工作。这些说明大多假定是本地可访问的 VM 或物理机。如果您正在使用远程托管的 Ubuntu 开发人员工作站,您可能需要考虑特殊的网络问题。如果您发现 nova-network 正在窃取您在环境中的工作站 IP(并非在所有环境中都会出现,因此将其放在此处作为故障排除步骤),那么为 nova-network 设置第二个接口。

配置假的网卡

配置一个假的接口,以便 nova-network 不会窃取您需要远程访问主机的真实 IP。在 Ubuntu 上

$ sudo ip tuntap add dev tapfoo mode tap
$ sudo ifconfig tapfoo $some_ip up 

注意:为接口分配一个适合您环境的 IP 地址。

现在您已经有了假的以太网接口,更改您的 localrc 并重新运行 ./stack.sh,以便您可以在新的接口上启动 nova-network。

添加到您的 localrc 文件

FLAT_INTERFACE=tapfoo

配置代理

一些工作场所可能需要使用特殊的网络和/或代理设置,并且这些设置在您移动时可能会发生变化。这些问题可能导致 apt-get、git 和 OpenStack 的其他部分出现问题。如果您所在的地点需要特殊的代理规则,请设置 apt-get 使用代理。您可能还需要根据公司的特定防火墙规则设置其他代理设置

自签名证书

如果您想连接到带有自签名证书的 vSphere,从 Liberty 开始,您必须禁用 nova 和 cinder 的证书验证

 [[post-config|$NOVA_CONF]]
 [vmware]
 insecure = true
 
 [[post-config|$CINDER_CONF]]
 [vmdk]
 vmware_insecure = true

附录

转换镜像

使用 qemu-img 将其他磁盘镜像转换为 vmdk

可以使用 qemu-img 实用程序将多种格式(例如 qcow2)的磁盘镜像转换为 vmware nova 驱动程序可用的 VMDK 格式。

例如,以下命令可用于将 qcow2 Ubuntu Precise 云镜像(可从 http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img 下载)转换为 vmdk


qemu-img convert -f raw ~/Downloads/precise-server-cloudimg-amd64-disk1.img -O vmdk precise-server-cloudimg-amd64-disk1.vmdk

将稀疏 vmdk 转换为与 ESX 兼容的格式

由于 VC 驱动程序中处理稀疏 vmdk 磁盘的方式存在一个错误(通过以下建议 补丁 修复,目前正在审核),因此在将其上传到 glance 以供驱动程序使用之前,必须先将稀疏磁盘转换为预配置或预分配磁盘。

有几种方法可以执行此类转换

1. 使用 vSphere CLI(有时称为远程 CLI 或 rCLI)工具。

撰写本文时的最新版本是 5.1,链接是 此处

假设稀疏磁盘在 ESX 主机可访问的数据存储上可用,以下命令将其转换为预分配格式

vmkfstools --server=ip_of_some_ESX_host -i /vmfs/volumes/datastore1/sparse.vmdk /vmfs/volumes/datastore1/converted.vmdk

(请注意,来自相同 CLI 包的 vifs 工具可用于上传要转换的磁盘并下载转换后的磁盘(如果需要))

2. 直接在 ESX 主机上使用 vmkfstools

如果 ESX 主机上启用了 SSH 服务,可以通过 scp 将稀疏磁盘上传到 ESX 数据存储,并且 ESX 本地 vmkfstools 可以用于执行转换

(在通过 ssh 登录到主机后)

vmkfstools -i /vmfs/volumes/datastore1/sparse.vmdk /vmfs/volumes/datastore1/converted.vmdk

3. vmware-vdiskmanager

vmware-vdiskmanager 是随 VMware Fusion 和 VMware Workstation 捆绑在一起的实用程序。以下是将稀疏磁盘转换为预分配格式的示例

'/Applications/VMware Fusion.app/Contents/Library/vmware-vdiskmanager' -r sparse.vmdk -t 4 converted.vmdk

在上述所有情况下,转换后的 vmdk 实际上是一对文件,描述符文件 converted.vmdk 和实际虚拟磁盘数据文件 converted-flat.vmdk。要上传到 glance 的文件是 converted-flat.vmdk

上传镜像到 glance 时指定正确的适配器类型

当前,存在一个限制,即带有 ide 适配器类型的 OS 启动 vmdk 磁盘无法附加到虚拟 SCSI 控制器,同样,带有其中一个 scsi 适配器类型(例如 busLogic、lsiLogic)的磁盘无法附加到 IDE 控制器。因此,在将镜像上传到 glance 时设置正确的 vmware_adaptertype 属性非常重要。特别是,通过 qemu-img 转换的其他格式的 vmdk 磁盘将始终是具有 IDE 适配器类型的单片稀疏 vmdk。因此,使用上述 Precise Ubuntu 镜像的示例,在 qemu-img 转换和转换为预分配磁盘之后,将 vmdk 磁盘上传的命令应如下所示

  glance image-create --name precise-cloud --is-public=True --container-format=bare --disk-format=vmdk --property vmware_disktype="preallocated" --property vmware_adaptertype="ide" < converted-flat.vmdk

获取与 vmdk 关联的适配器类型

如果 vmdk 是一个单片文件(例如由 qemu-img 转换生成),则可以通过以下方式检索适配器类型

  head -20 some_monolithic.vmdk

并查找 ddb.adapterType=XXX 属性

如果 vmdk 具有描述符/数据文件对(foo.vmdk 和 foo-XXXX.vmdk)。可以检查描述符文件 foo.vmdk 以获取相同的 ddb.adapterType 属性)

正在审核的评论列表

https://review.openstack.org/#/q/message:vmware+OR+message:vcenter+OR+message:vsphere+OR+message:esx+OR+message:vcdriver+OR+message:datastore,n,z