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

#
# Deploy a Voldemort cluster
# 

# Read the Configuration Guide for more info:
# http://whirr.apache.org/docs/latest/configuration-guide.html

# Change the cluster name here
whirr.cluster-name=voldemort

# Change the number of machines in the cluster here
whirr.instance-templates=2 voldemort 

# Setup your cloud credentials by copying conf/credentials.sample
# to ~/.whirr/credentials and editing as needed

# By default use the user system SSH keys. Override them here.
# whirr.private-key-file=${sys:user.home}/.ssh/id_rsa
# whirr.public-key-file=${whirr.private-key-file}.pub

# By default we use a stock build and configuration, but these can be overridden
# by providing URLs for the build and configuration. Note: the configuration is
# a flat hierarchy, there are no expected sub-directories in whirr.voldemort.conf.url, 
# just the two files server.properties and stores.xml.
#whirr.voldemort.tarball.url=http://www.example.com/my/custom/build/of/voldemort.tar.gz
#whirr.voldemort.conf.url=http://www.example.com/my/custom/voldemort/config.tar.gz

