# 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

# EC2 support.
EXTRA_DIST = mesos-ec2 mesos_ec2.py

EXTRA_DIST += deploy.amazon64/root/ephemeral-hdfs/conf/core-site.xml	\
  deploy.amazon64/root/ephemeral-hdfs/conf/hadoop-env.sh		\
  deploy.amazon64/root/ephemeral-hdfs/conf/hdfs-site.xml		\
  deploy.amazon64/root/ephemeral-hdfs/conf/mapred-site.xml		\
  deploy.amazon64/root/ephemeral-hdfs/conf/masters			\
  deploy.amazon64/root/ephemeral-hdfs/conf/slaves			\
  deploy.amazon64/root/mesos-ec2/cluster-url				\
  deploy.amazon64/root/mesos-ec2/copy-dir				\
  deploy.amazon64/root/mesos-ec2/create-swap				\
  deploy.amazon64/root/mesos-ec2/hadoop-framework-conf/core-site.xml	\
  deploy.amazon64/root/mesos-ec2/hadoop-framework-conf/hadoop-env.sh	\
  deploy.amazon64/root/mesos-ec2/hadoop-framework-conf/mapred-site.xml	\
  deploy.amazon64/root/mesos-ec2/haproxy+apache/haproxy.config.template	\
  deploy.amazon64/root/mesos-ec2/hypertable/Capfile			\
  deploy.amazon64/root/mesos-ec2/hypertable/hypertable.cfg		\
  deploy.amazon64/root/mesos-ec2/masters				\
  deploy.amazon64/root/mesos-ec2/mesos-daemon				\
  deploy.amazon64/root/mesos-ec2/redeploy-mesos				\
  deploy.amazon64/root/mesos-ec2/setup					\
  deploy.amazon64/root/mesos-ec2/setup-slave				\
  deploy.amazon64/root/mesos-ec2/setup-torque				\
  deploy.amazon64/root/mesos-ec2/slaves					\
  deploy.amazon64/root/mesos-ec2/ssh-no-keychecking			\
  deploy.amazon64/root/mesos-ec2/start-hypertable			\
  deploy.amazon64/root/mesos-ec2/start-mesos				\
  deploy.amazon64/root/mesos-ec2/stop-hypertable			\
  deploy.amazon64/root/mesos-ec2/stop-mesos				\
  deploy.amazon64/root/mesos-ec2/zoo					\
  deploy.amazon64/root/persistent-hdfs/conf/core-site.xml		\
  deploy.amazon64/root/persistent-hdfs/conf/hadoop-env.sh		\
  deploy.amazon64/root/persistent-hdfs/conf/hdfs-site.xml		\
  deploy.amazon64/root/persistent-hdfs/conf/mapred-site.xml		\
  deploy.amazon64/root/persistent-hdfs/conf/masters			\
  deploy.amazon64/root/persistent-hdfs/conf/slaves			\
  deploy.amazon64/root/spark/conf/spark-env.sh

EXTRA_DIST += deploy.generic/root/mesos-ec2/ec2-variables.sh
