.. 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
   https://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: https://docs.cloudstack.apache.org/en/latest/installguide/index.html
.. _CloudStack Administrator's Guide: https://docs.cloudstack.apache.org/en/latest/adminguide/index.html
.. _CloudStack Apidocs: https://cloudstack.apache.org/api.html

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

.. Latest version systemvm template name

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

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

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

.. |br| raw:: html

   <br/>
