# Licensed to the Apache Software Foundation (ASF) under the terms of ASLv2 (http://www.apache.org/licenses/LICENSE-2.0).
#
#
# Sample configuration file. You need to rename the extension of the file
# and change some of the placeholders for this configuration to work.
#

# Configure your server here
server=http://${org.apache.ace.server}

# Note that AMIs are specific to an Amazon availability zone
amiId=ami-6a31041e
location=eu-west-1

# Your access key ID and secret access key (AWS console, top right menu "Security Credentials")
accessKeyid=Your_access_key_here!
secretAccessKey=Your_secret_key_here!

# Tag prefix for instance names
tagPrefix=default

# Use this bootstrap to use a Sun VM instead of the OpenJDK one provided by Amazon
nodeBootstrap=cd ~; wget -Ojava.bin http://javadl.sun.com/webapps/download/AutoDL?BundleId=43871 ;chmod +x java.bin;./java.bin /y; export PATH=`pwd`/jre1.6.0_23/bin:$PATH

# Open up any extra ports (comma separated list)
extraPorts=9090

# Should we run the process as root? This only works if your account is in the sudoers file.
runAsRoot=true

# A comma separated list of extra artifacts that will be downloaded from the OBR (just list their filenames here)
additionalObrDownloads=

# A comma separated list of extra artifacts that will be downloaded from the specified URLs (list full URLs here)
externalDownloadUrls=
