#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:56\n"
"PO-Revision-Date: 2013-02-02T20:11:56\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 "Adding an ISO"
msgstr ""

#. Tag: para
#, no-c-format
msgid "To make additional operating system or other software available for use with guest VMs, you can add an ISO. The ISO is typically thought of as an operating system image, but you can also add ISOs for other types of software, such as desktop applications that you want to be installed as part of a template."
msgstr ""

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

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

#. Tag: para
#, no-c-format
msgid "In Select View, choose ISOs."
msgstr ""

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

#. Tag: para
#, no-c-format
msgid "In the Add ISO screen, provide the following:"
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Name</emphasis>: Short name for the ISO image. For example, CentOS 6.2 64-bit."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Description</emphasis>: Display test for the ISO image. For example, CentOS 6.2 64-bit."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">URL</emphasis>: The URL that hosts the ISO image. The Management Server must be able to access this location via HTTP. If needed you can place the ISO image directly on the Management Server"
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Zone</emphasis>: Choose the zone where you want the ISO to be available, or All Zones to make it available throughout &PRODUCT;."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Bootable</emphasis>: Whether or not a guest could boot off this ISO image. For example, a CentOS ISO is bootable, a Microsoft Office ISO is not bootable."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">OS Type</emphasis>: This helps &PRODUCT; and the hypervisor perform certain operations and make assumptions that improve the performance of the guest. Select one of the following."
msgstr ""

#. Tag: para
#, no-c-format
msgid "If the operating system of your desired ISO image is listed, choose it."
msgstr ""

#. Tag: para
#, no-c-format
msgid "If the OS Type of the ISO is not listed or if the ISO is not bootable, choose Other."
msgstr ""

#. Tag: para
#, no-c-format
msgid "(XenServer only) If you want to boot from this ISO in PV mode, choose Other PV (32-bit) or Other PV (64-bit)"
msgstr ""

#. Tag: para
#, no-c-format
msgid "(KVM only) If you choose an OS that is PV-enabled, the VMs created from this ISO will have a SCSI (virtio) root disk. If the OS is not PV-enabled, the VMs will have an IDE root disk. The PV-enabled types are:"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Fedora 13"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Fedora 12"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Fedora 11"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Fedora 10"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Fedora 9"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Other PV"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Debian GNU/Linux"
msgstr ""

#. Tag: para
#, no-c-format
msgid "CentOS 5.3"
msgstr ""

#. Tag: para
#, no-c-format
msgid "CentOS 5.4"
msgstr ""

#. Tag: para
#, no-c-format
msgid "CentOS 5.5"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Red Hat Enterprise Linux 5.3"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Red Hat Enterprise Linux 5.4"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Red Hat Enterprise Linux 5.5"
msgstr ""

#. Tag: para
#, no-c-format
msgid "Red Hat Enterprise Linux 6"
msgstr ""

#. Tag: para
#, no-c-format
msgid "It is not recommended to choose an older version of the OS than the version in the image. For example, choosing CentOS 5.4 to support a CentOS 6.2 image will usually not work. In these cases, choose Other."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Extractable</emphasis>: Choose Yes if the ISO should be available for extraction."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Public</emphasis>: Choose Yes if this ISO should be available to other users."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Featured</emphasis>: Choose Yes if you would like this ISO to be more prominent for users to select. The ISO will appear in the Featured ISOs list. Only an administrator can make an ISO Featured."
msgstr ""

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

#. Tag: para
#, no-c-format
msgid "The Management Server will download the ISO. Depending on the size of the ISO, this may take a long time. The ISO status column will display Ready once it has been successfully downloaded into secondary storage. Clicking Refresh updates the download percentage."
msgstr ""

#. Tag: para
#, no-c-format
msgid "<emphasis role=\"bold\">Important</emphasis>: Wait for the ISO to finish downloading. If you move on to the next task and try to use the ISO right away, it will appear to fail. The entire ISO must be available before &PRODUCT; can work with it."
msgstr ""

