tools/deploy/aurora/schema/thermos/schema_base.py (57 lines of code) (raw):

# # 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. # # checkstyle: noqa from pystachio import ( Boolean, Default, Empty, Enum, Float, Integer, List, Map, Required, String, Struct ) # Define constants for resources BYTES = 1 KB = 1024 * BYTES MB = 1024 * KB GB = 1024 * MB TB = 1024 * GB class ThermosContext(Struct): # TODO(wickman) Move the underlying replacement mechanism to %port% replacements ports = Map(String, Integer) # TODO(wickman) Move the underlying replacement mechanism to %task_id% task_id = String # TODO(wickman) Move underlying mechanism to %user% user = String class Resources(Struct): cpu = Required(Float) ram = Required(Integer) disk = Required(Integer) gpu = Default(Integer, 0) class Constraint(Struct): order = List(String) class RotatePolicy(Struct): log_size = Default(Integer, 100*MB) backups = Default(Integer, 5) LoggerDestination = Enum('file', 'console', 'both', 'none') LoggerMode = Enum('standard', 'rotate') class Logger(Struct): destination = Default(LoggerDestination, LoggerDestination('file')) mode = Default(LoggerMode, LoggerMode('rotate')) rotate = RotatePolicy class Process(Struct): cmdline = Required(String) name = Required(String) # This is currently unused but reserved for future use by Thermos. resources = Resources # optionals max_failures = Default(Integer, 1) # maximum number of failed process runs # before process is failed. daemon = Default(Boolean, False) ephemeral = Default(Boolean, False) min_duration = Default(Integer, 5) # integer seconds final = Default(Boolean, False) # if this process should be a finalizing process # that should always be run after regular processes logger = Default(Logger, Empty) class Task(Struct): name = Default(String, '{{processes[0].name}}') processes = List(Process) # optionals constraints = Default(List(Constraint), []) resources = Resources max_failures = Default(Integer, 1) # maximum number of failed processes before task is failed. max_concurrency = Default(Integer, 0) # 0 is infinite concurrency. # > 0 is max concurrent processes. finalization_wait = Default(Integer, 30) # the amount of time in seconds we allocate to run the # finalization schedule. # TODO(jon): remove/replace with proper solution to MESOS-3546 user = String