| # |
| # 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) |
| |
| |
| ContainerProfile = DefaultProfile( |
| cmd = 'cp /tmp/http_example.py .' |
| ) |
| |
| GpuProfile = DefaultProfile( |
| gpu=1 |
| ) |
| |
| 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}}' |
| ) |
| |
| test_task = Task( |
| name = 'http_example', |
| resources = Resources(cpu=0.5, ram=32*MB, disk=64*MB, gpu='{{profile.gpu}}'), |
| processes = [stage_server, run_server], |
| constraints = order(stage_server, run_server) |
| ) |
| |
| no_python_task = Task( |
| name = 'http_example_no_python', |
| resources = Resources(cpu=0.4, ram=32*MB, disk=64*MB), |
| processes = [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])) |
| # "I am going to fail" config. |
| shell_config = ShellHealthChecker( |
| # This shell validates two things: |
| # 1. the shell command is not run as a privileged user |
| # 2. a failed shell command results in a health check failure |
| shell_command='rm -f /etc/passwd' |
| ) |
| health_check_config = HealthCheckConfig( |
| health_checker=HealthCheckerConfig(shell=shell_config), |
| initial_interval_secs=5, |
| interval_secs=1, |
| min_consecutive_successes=5 |
| ) |
| |
| job = Service( |
| cluster = 'devcluster', |
| instances = 2, |
| update_config = update_config, |
| health_check_config = health_check_config, |
| task = test_task, |
| role = '{{profile.role}}', |
| environment = 'test', |
| contact = '{{profile.role}}@localhost', |
| announce = Announcer(), |
| ) |
| |
| jobs = [ |
| job( |
| name = 'http_example' |
| ).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_watch_secs |
| ).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}}')), |
| task = no_python_task |
| ).bind(profile=DefaultProfile()), |
| job( |
| name = 'http_example_unified_docker', |
| container = Mesos(image=DockerImage(name='http_example_netcat', tag='latest')), |
| task = no_python_task |
| ).bind(profile=DefaultProfile()) |
| ] |