blob: 877dbfdffdc2e7fdc6feb27a81887de989cfa74c [file] [log] [blame]
#
# Licensed 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.
#
import getpass
class DefaultProfile(Struct):
role=Default(String, getpass.getuser())
cmd=Default(String, 'cp /vagrant/src/test/sh/org/apache/aurora/e2e/http_example.py .')
gpu=Default(Integer, 0)
instances=Default(Integer, 1)
ContainerProfile = DefaultProfile(
cmd = 'cp /tmp/http_example.py .'
)
GpuProfile = DefaultProfile(
gpu=1
)
echo_ports = Process(
name = 'echo_ports',
cmdline = 'echo "tcp port: {{thermos.ports[tcp]}}; http port: {{thermos.ports[http]}}; alias: {{thermos.ports[alias]}}; health: {{thermos.ports[health]}}"'
)
run_server = Process(
name = 'run_server',
cmdline = 'python http_example.py {{thermos.ports[http]}} {{thermos.ports[health]}}')
stage_server = Process(
name = 'stage_server',
cmdline = '{{profile.cmd}}'
)
setup_env = Process(
name = 'setup_env',
cmdline='''cat <<EOF > .thermos_profile
export IT_WORKED=hello
EOF'''
)
read_env = Process(
name = 'read_env',
cmdline = 'echo "$IT_WORKED"'
)
verify_file_mount = Process(
name = 'verify_file_mount',
cmdline = 'cat /home/vagrant/aurora/.auroraversion'
)
# Regression test for quotation mark usage (AURORA-1782)
verify_command_escaping = Process(
name = 'verify_command_escaping',
cmdline = """
python -c 'import sys
if __name__ == "__main__":
sys.exit(0)'
"""
)
verify_file_system = Process(
name = 'check_fs',
cmdline = 'check-fs.sh'
)
test_task = SequentialTask(
name = 'http_example',
resources = Resources(cpu=0.5, ram=32*MB, disk=64*MB, gpu='{{profile.gpu}}'),
processes = [
setup_env,
read_env,
echo_ports,
verify_command_escaping,
stage_server,
run_server
]
)
no_python_task = SequentialTask(
name = 'http_example_no_python',
resources = Resources(cpu=0.4, ram=32*MB, disk=64*MB),
processes = [
setup_env,
read_env,
echo_ports,
verify_command_escaping,
verify_file_mount,
verify_file_system,
Process(name='run_server', cmdline='run-server.sh {{thermos.ports[http]}}'),
]
)
update_config = UpdateConfig(watch_secs=0, batch_size=2)
update_config_watch_secs = UpdateConfig(watch_secs=10, batch_size=2)
update_config_var_batch = UpdateConfig(update_strategy = VariableBatchUpdateStrategy(batch_sizes = [1,2]))
health_check_config = HealthCheckConfig(initial_interval_secs=5, interval_secs=1)
shell_health_check_config = HealthCheckConfig(
health_checker = HealthCheckerConfig(
shell = ShellHealthChecker(shell_command='stat /usr/local/bin/run-server.sh')),
initial_interval_secs=5,
interval_secs=1,
min_consecutive_successes=5
)
job = Service(
cluster = 'devcluster',
instances = '{{profile.instances}}',
update_config = update_config,
health_check_config = health_check_config,
task = test_task,
role = '{{profile.role}}',
environment = 'test',
contact = '{{profile.role}}@localhost',
announce = Announcer(
portmap={'alias': 'http'},
),
)
volumes = [
Volume(container_path="etc/rsyslog.d.container", host_path="/etc/rsyslog.d", mode=Mode("RO")),
Volume(container_path="etc/w3m.container", host_path="/etc/X11", mode=Mode("RO"))
]
jobs = [
job(
name = 'http_example'
).bind(profile=DefaultProfile()),
job(
name = 'http_example_maintenance'
).bind(profile=DefaultProfile()),
job(
name = 'http_example_watch_secs',
update_config = update_config_watch_secs
).bind(profile=DefaultProfile()),
job(
name = 'http_example_var_batch_update',
update_config = update_config_var_batch
).bind(profile=DefaultProfile()),
job(
name = 'http_example_revocable',
tier = 'revocable'
).bind(profile=DefaultProfile()),
job(
name = 'http_example_docker',
container = Docker(image='{{docker.image[http_example][latest]}}')
).bind(profile=ContainerProfile),
job(
name = 'http_example_gpu'
).bind(profile=GpuProfile),
job(
name = 'http_example_unified_appc',
container = Mesos(image=AppcImage(name='http_example_netcat', image_id='{{appc_image_id}}'), volumes=volumes),
task = no_python_task,
health_check_config=shell_health_check_config
).bind(profile=DefaultProfile()),
job(
name = 'http_example_unified_docker',
container = Mesos(image=DockerImage(name='http_example_netcat', tag='latest'), volumes=volumes),
task = no_python_task,
health_check_config=shell_health_check_config
).bind(profile=DefaultProfile())
]