.. 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.


.. This file contain Variables shared across other .rst files in this project


.. _CloudStack Installation Guide: http://docs.cloudstack.apache.org/projects/cloudstack-installation
.. _CloudStack Administrator's Guide: http://docs.cloudstack.apache.org/projects/cloudstack-administration
.. _CloudStack Apidocs: http://cloudstack.apache.org/docs/api/

.. |documentation_home| replace:: http://docs.cloudstack.apache.org/

.. Latest version systemvm template name

.. |sysvm64-name-xen|    replace:: systemvm-xenserver-4.11.3
.. |sysvm64-name-kvm|    replace:: systemvm-kvm-4.11.3
.. |sysvm64-name-vmware| replace:: systemvm-vmware-4.11.3
.. |sysvm64-name-hyperv| replace:: systemvm-hyperv-4.11.3
.. |sysvm64-name-ovm|    replace:: systemvm-ovm-4.11.3

.. Latest version systemvm template URL
.. |sysvm64-url-xen|    replace:: http://download.cloudstack.org/systemvm/4.11/systemvmtemplate-4.11.3-xen.vhd.bz2
.. |sysvm64-url-kvm|    replace:: http://download.cloudstack.org/systemvm/4.11/systemvmtemplate-4.11.3-kvm.qcow2.bz2
.. |sysvm64-url-vmware| replace:: http://download.cloudstack.org/systemvm/4.11/systemvmtemplate-4.11.3-vmware.ova
.. |sysvm64-url-hyperv| replace:: http://download.cloudstack.org/systemvm/4.11/systemvmtemplate-4.11.3-hyperv.vhd.zip
.. |sysvm64-url-ovm|    replace:: http://download.cloudstack.org/systemvm/4.11/systemvmtemplate-4.11.3-ovm.raw.bz2

.. Version specific: 4.5 systemvm template URL
.. |acs45-sysvm64-url-xen|    replace:: http://download.cloudstack.org/systemvm/4.5/systemvm64template-4.5-xen.vhd.bz2
.. |acs45-sysvm64-url-kvm|    replace:: http://download.cloudstack.org/systemvm/4.5/systemvm64template-4.5-kvm.qcow2.bz2
.. |acs45-sysvm64-url-vmware| replace:: http://download.cloudstack.org/systemvm/4.5/systemvm64template-4.5-vmware.ova
.. |acs45-sysvm64-url-hyperv| replace:: http://download.cloudstack.org/systemvm/4.5/systemvm64template-4.5-hyperv.vhd.zip

.. Images


.. |vpn-icon.png| image:: /_static/images/vpn-icon.png
.. |sysmanager.png| image:: /_static/images/sysmanager.png
.. |software-license.png| image:: /_static/images/software-license.png
.. |change-admin-password.png| image:: /_static/images/change-admin-password.png
.. |menu_acs_logo| image:: /_static/acslogo.png