From 45f4b75491ef9f77b454792770609e0aa003a6e5 Mon Sep 17 00:00:00 2001 From: sateesh Date: Mon, 21 Feb 2011 19:42:20 +0530 Subject: [PATCH] * Removed nova/virt/guest-tools/guest_tool.bat & nova/virt/guest-tools/guest_tool.sh as guest_tool.py can be invoked directly during guest startup. * Removed 'nova/virt/guest-tools/' and the encompassed script 'guest_tool.py' is moved to 'etc/vmware_guest_tool.py' * Moved image vmwareapi_blockdiagram.jpg from 'nova/virt/' to 'doc/source/images/' so that it'll be picked up by document build scripts. * Moved vmwareapi_readme.rst from 'nova/virt/' to 'doc/source/' so that it'll be handled by document build scripts. * Added 'Introduction' section to 'vmwareapi_readme.rst' * Added vmwareapi module diagram to readme document. Added reference to 'images/vmwareapi_blockdiagram.jpg' in document 'vmwareapi_readme.rst' --- doc/source/images/vmwareapi_blockdiagram.jpg | Bin 0 -> 75363 bytes doc/source/vmwareapi_readme.rst | 87 ++++++++++++++++++ .../guest_tool.py => etc/vmware_guest_tool.py | 9 ++ nova/virt/guest-tools/guest_tool.bat | 5 - nova/virt/guest-tools/guest_tool.sh | 4 - 5 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 doc/source/images/vmwareapi_blockdiagram.jpg create mode 100644 doc/source/vmwareapi_readme.rst rename nova/virt/guest-tools/guest_tool.py => etc/vmware_guest_tool.py (94%) delete mode 100644 nova/virt/guest-tools/guest_tool.bat delete mode 100644 nova/virt/guest-tools/guest_tool.sh diff --git a/doc/source/images/vmwareapi_blockdiagram.jpg b/doc/source/images/vmwareapi_blockdiagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ae1fc8e0e6bc27ae234ce5d46df78cc0dc791b8 GIT binary patch literal 75363 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 G$bSPMS4eCC literal 0 HcmV?d00001 diff --git a/doc/source/vmwareapi_readme.rst b/doc/source/vmwareapi_readme.rst new file mode 100644 index 000000000000..e354237feac3 --- /dev/null +++ b/doc/source/vmwareapi_readme.rst @@ -0,0 +1,87 @@ +.. + + Copyright (c) 2010 Citrix Systems, Inc. + Copyright 2010 OpenStack LLC. + + Licensed under the Apache License, Version 2.0 (the "License"); you may + not use this file except in compliance with the License. You may obtain + a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + License for the specific language governing permissions and limitations + under the License. + +VMware ESX/ESXi Server Support for OpenStack Compute +==================================================== + +Introduction +------------ +A module named 'vmwareapi' is added to 'nova.virt' to add support of VMware ESX/ESXi hypervisor to OpenStack compute (Nova). Nova may now use VMware vSphere as a compute provider. + +The basic requirement is to support VMware vSphere 4.1 as a compute provider within Nova. As the deployment architecture, support both ESX and ESXi. VM storage is restricted to VMFS volumes on local drives. vCenter is not required by the current design, and is not currently supported. Instead, Nova Compute talks directly to ESX/ESXi. + +The 'vmwareapi' module is integrated with Glance, so that VM images can be streamed from there for boot on ESXi using Glance server for image storage & retrieval. + +Currently supports Nova's flat networking model (Flat Manager). + +.. image:: images/vmwareapi_blockdiagram.jpg + + +System Requirements +------------------- +Following software components are required for building the cloud using OpenStack on top of ESX/ESXi Server(s): + +* OpenStack (Bexar Release) +* Glance Image service (Bexar Release) +* VMware ESX v4.1 or VMware ESXi(licensed) v4.1 + +VMware ESX Requirements +----------------------- +* ESX credentials with administration/root privileges +* Single local hard disk at the ESX host +* An ESX Virtual Machine Port Group (Bridge for Flat Networking) + +Python dependencies +------------------- +* ZSI-2.0 + +Configuration flags required for nova-compute +--------------------------------------------- +:: + + --connection_type=vmwareapi + --vmwareapi_host_ip= + --vmwareapi_host_username= + --vmwareapi_host_password= + +Other flags +----------- +:: + + --network_manager=nova.network.manager.FlatManager + --flat_network_bridge= + --image_service=nova.image.glance.GlanceImageService + --glance_host= + +FAQ +--- + +1. What type of disk images are supported? + +* Only VMware VMDK's are currently supported and of that support is available only for thick disks, thin provisioned disks are not supported. + + +2. How is IP address information injected into the guest? + +* IP address information is injected through 'machine.id' vmx parameter (equivalent to XenStore in XenServer). This information can be retrived inside the guest using VMware tools. + + +3. What is the guest tool? + +* The guest tool is a small python script that should be run either as a service or added to system startup. This script configures networking on the guest. + + diff --git a/nova/virt/guest-tools/guest_tool.py b/etc/vmware_guest_tool.py similarity index 94% rename from nova/virt/guest-tools/guest_tool.py rename to etc/vmware_guest_tool.py index c605e47d2581..7a18a9180490 100644 --- a/nova/virt/guest-tools/guest_tool.py +++ b/etc/vmware_guest_tool.py @@ -15,6 +15,15 @@ # License for the specific language governing permissions and limitations # under the License. +""" +The guest tool is a small python script that should be run either as a service +or added to system startup. This script configures networking on the guest. + +IP address information is injected through 'machine.id' vmx parameter which is +equivalent to XenStore in XenServer. This information can be retrived inside +the guest using VMware tools. +""" + import os import sys import subprocess diff --git a/nova/virt/guest-tools/guest_tool.bat b/nova/virt/guest-tools/guest_tool.bat deleted file mode 100644 index f7445d05ca19..000000000000 --- a/nova/virt/guest-tools/guest_tool.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off - -set GuestToolsHome=%~dp0 -set PATH=%PATH%;%GuestToolsHome%\Python24 -"%GuestToolsHome%\Python24\python.exe" "%GuestToolsHome%\guest_tool.py" \ No newline at end of file diff --git a/nova/virt/guest-tools/guest_tool.sh b/nova/virt/guest-tools/guest_tool.sh deleted file mode 100644 index 1bfbc7804283..000000000000 --- a/nova/virt/guest-tools/guest_tool.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -##!/usr/bin/bash - -python guest_tool.py \ No newline at end of file