#Licensed to the Apache Software Foundation (ASF) under one
#or more contributor license agreements.  See the NOTICE file
#distributed with this work for additional information
#regarding copyright ownership.  The ASF licenses this file
#to you 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.
msgid ""
msgstr ""
"Project-Id-Version: 0\n"
"POT-Creation-Date: 2013-02-02T20:11:58\n"
"PO-Revision-Date: 2013-02-02T20:11:58\n"
"Last-Translator: Automatically generated\n"
"Language-Team: None\n"
"MIME-Version: 1.0\n"
"Content-Type: application/x-publican; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Tag: title
#, no-c-format
msgid "Creating VMs"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Virtual machines are usually created from a template. Users can also create blank virtual machines. A blank virtual machine is a virtual machine without an OS template. Users can attach an ISO file and install the OS from the CD/DVD-ROM."
msgstr ""

#. Tag: para
#, no-c-format
msgid "To create a VM from a template:"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Log in to the &PRODUCT; UI as an administrator or user."
msgstr ""

#. Tag: para
#, no-c-format
msgid "In the left navigation bar, click Instances."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Click Add Instance."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Select a template, then follow the steps in the wizard. (For more information about how the templates came to be in this list, see Working with Templates."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Be sure that the hardware you have allows starting the selected service offering."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Click Submit and your VM will be created and started."
msgstr ""

#. Tag: para
#, no-c-format
msgid "For security reason, the internal name of the VM is visible only to the root admin."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Starting with v3.0.3, you can create a VM without starting it. You can determine whether the VM needs to be started as part of the VM deployment. A new request parameter, startVM, is introduced in the deployVm API to support this feature. For more information, see the Developer's Guide"
msgstr ""

#. Tag: para
#, no-c-format
msgid "To create a VM from an ISO:"
msgstr ""

#. Tag: para
#, no-c-format
msgid "(XenServer) Windows VMs running on XenServer require PV drivers, which may be provided in the template or added after the VM is created. The PV drivers are necessary for essential management functions such as mounting additional volumes and ISO images, live migration, and graceful shutdown."
msgstr ""

#. Tag: para
#, no-c-format
msgid "Select ISO Boot, and follow the steps in the wizard."
msgstr ""

