# Find the other rc files
RC_DIR=$(cd $(dirname "$BASH_SOURCE") && pwd)

# Destination path for installation
DEST=/opt/stack

# Specify which services to launch.  These generally correspond to
# screen tabs. If you like to add other services that are not enabled
# by default you can append them in your ENABLED_SERVICES variable in
# your localrc. For example for swift you can just add this in your
# localrc to add it with the other services:
# ENABLED_SERVICES+=,swift
#
# If you like to explicitly remove services you can add a -$service in
# ENABLED_SERVICES, for example in your localrc to install all defaults but not
# cinder you would just need to set this :
# ENABLED_SERVICES+=,-cinder
ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,mysql,rabbit

# Set the default Nova APIs to enable
NOVA_ENABLED_APIS=ec2,osapi_compute,osapi_volume,metadata

# volume service
CINDER_REPO=https://github.com/openstack/cinder
CINDER_BRANCH=master

# volume client
CINDERCLIENT_REPO=https://github.com/openstack/python-cinderclient
CINDERCLIENT_BRANCH=master

# compute service
NOVA_REPO=https://github.com/openstack/nova.git
NOVA_BRANCH=master

# storage service
SWIFT_REPO=https://github.com/openstack/swift.git
SWIFT_BRANCH=master
SWIFT3_REPO=https://github.com/fujita/swift3.git
SWIFT3_BRANCH=master


# python swift client library
SWIFTCLIENT_REPO=https://github.com/openstack/python-swiftclient
SWIFTCLIENT_BRANCH=master

# image catalog service
GLANCE_REPO=https://github.com/openstack/glance.git
GLANCE_BRANCH=master

# python glance client library
GLANCECLIENT_REPO=https://github.com/openstack/python-glanceclient
GLANCECLIENT_BRANCH=master

# unified auth system (manages accounts/tokens)
KEYSTONE_REPO=https://github.com/openstack/keystone.git
KEYSTONE_BRANCH=master

# a websockets/html5 or flash powered VNC console for vm instances
NOVNC_REPO=https://github.com/kanaka/noVNC.git
NOVNC_BRANCH=master

# django powered web control panel for openstack
HORIZON_REPO=https://github.com/openstack/horizon.git
HORIZON_BRANCH=master

# python client library to nova that horizon (and others) use
NOVACLIENT_REPO=https://github.com/openstack/python-novaclient.git
NOVACLIENT_BRANCH=master

# Shared openstack python client library
OPENSTACKCLIENT_REPO=https://github.com/openstack/python-openstackclient.git
OPENSTACKCLIENT_BRANCH=master

# python keystone client library to nova that horizon uses
KEYSTONECLIENT_REPO=https://github.com/openstack/python-keystoneclient
KEYSTONECLIENT_BRANCH=master

# quantum service
QUANTUM_REPO=https://github.com/openstack/quantum
QUANTUM_BRANCH=master

# quantum client
QUANTUM_CLIENT_REPO=https://github.com/openstack/python-quantumclient
QUANTUM_CLIENT_BRANCH=master

# Tempest test suite
TEMPEST_REPO=https://github.com/openstack/tempest.git
TEMPEST_BRANCH=master

# melange service
MELANGE_REPO=https://github.com/openstack/melange.git
MELANGE_BRANCH=master

# python melange client library
MELANGECLIENT_REPO=https://github.com/openstack/python-melangeclient.git
MELANGECLIENT_BRANCH=master

# Specify a comma-separated list of uec images to download and install into glance.
# supported urls here are:
#  * "uec-style" images:
#     If the file ends in .tar.gz, uncompress the tarball and and select the first
#     .img file inside it as the image.  If present, use "*-vmlinuz*" as the kernel
#     and "*-initrd*" as the ramdisk
#     example: http://cloud-images.ubuntu.com/releases/oneiric/release/ubuntu-11.10-server-cloudimg-amd64.tar.gz
#  * disk image (*.img,*.img.gz)
#    if file ends in .img, then it will be uploaded and registered as a to
#    glance as a disk image.  If it ends in .gz, it is uncompressed first.
#    example:
#      http://cloud-images.ubuntu.com/releases/oneiric/release/ubuntu-11.10-server-cloudimg-armel-disk1.img
#      http://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-rootfs.img.gz
#IMAGE_URLS="http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-11.2_2.6.35-15_1.tar.gz" # old ttylinux-uec image
#IMAGE_URLS="http://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img" # cirros full disk image
case "$LIBVIRT_TYPE" in
    lxc) # the cirros root disk in the uec tarball is empty, so it will not work for lxc
        DEFAULT_IMAGE_NAME=cirros-0.3.0-x86_64-rootfs
        IMAGE_URLS="http://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-rootfs.img.gz";;
    *)  # otherwise, use the uec style image (with kernel, ramdisk, disk)
        DEFAULT_IMAGE_NAME=cirros-0.3.0-x86_64-uec
        IMAGE_URLS="http://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-uec.tar.gz";;
esac

# allow local overrides of env variables
if [ -f $RC_DIR/localrc ]; then
    source $RC_DIR/localrc
fi

# 5Gb default volume backing file size
VOLUME_BACKING_FILE_SIZE=${VOLUME_BACKING_FILE_SIZE:-5130M}
