ominfra 0.0.0.dev154__py3-none-any.whl → 0.0.0.dev156__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ominfra/manage/bootstrap.py +4 -0
- ominfra/manage/bootstrap_.py +5 -0
- ominfra/manage/commands/inject.py +8 -11
- ominfra/manage/commands/{execution.py → local.py} +1 -5
- ominfra/manage/commands/ping.py +23 -0
- ominfra/manage/commands/subprocess.py +3 -4
- ominfra/manage/commands/types.py +8 -0
- ominfra/manage/deploy/apps.py +72 -0
- ominfra/manage/deploy/config.py +8 -0
- ominfra/manage/deploy/git.py +136 -0
- ominfra/manage/deploy/inject.py +21 -0
- ominfra/manage/deploy/paths.py +81 -28
- ominfra/manage/deploy/types.py +13 -0
- ominfra/manage/deploy/venvs.py +66 -0
- ominfra/manage/inject.py +20 -4
- ominfra/manage/main.py +15 -27
- ominfra/manage/remote/_main.py +1 -1
- ominfra/manage/remote/config.py +0 -2
- ominfra/manage/remote/connection.py +7 -24
- ominfra/manage/remote/execution.py +1 -1
- ominfra/manage/remote/inject.py +3 -14
- ominfra/manage/remote/spawning.py +2 -2
- ominfra/manage/system/commands.py +22 -2
- ominfra/manage/system/config.py +3 -1
- ominfra/manage/system/inject.py +16 -6
- ominfra/manage/system/packages.py +38 -14
- ominfra/manage/system/platforms.py +72 -0
- ominfra/manage/targets/__init__.py +0 -0
- ominfra/manage/targets/connection.py +150 -0
- ominfra/manage/targets/inject.py +42 -0
- ominfra/manage/targets/targets.py +87 -0
- ominfra/scripts/journald2aws.py +205 -134
- ominfra/scripts/manage.py +2192 -734
- ominfra/scripts/supervisor.py +187 -25
- ominfra/supervisor/configs.py +163 -18
- {ominfra-0.0.0.dev154.dist-info → ominfra-0.0.0.dev156.dist-info}/METADATA +3 -3
- {ominfra-0.0.0.dev154.dist-info → ominfra-0.0.0.dev156.dist-info}/RECORD +42 -31
- ominfra/manage/system/types.py +0 -5
- /ominfra/manage/{commands → deploy}/interp.py +0 -0
- {ominfra-0.0.0.dev154.dist-info → ominfra-0.0.0.dev156.dist-info}/LICENSE +0 -0
- {ominfra-0.0.0.dev154.dist-info → ominfra-0.0.0.dev156.dist-info}/WHEEL +0 -0
- {ominfra-0.0.0.dev154.dist-info → ominfra-0.0.0.dev156.dist-info}/entry_points.txt +0 -0
- {ominfra-0.0.0.dev154.dist-info → ominfra-0.0.0.dev156.dist-info}/top_level.txt +0 -0
ominfra/scripts/supervisor.py
CHANGED
@@ -1726,8 +1726,6 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
|
|
1726
1726
|
"""
|
1727
1727
|
TODO:
|
1728
1728
|
- def maybe(v: lang.Maybe[T])
|
1729
|
-
- patch / override lite.check ?
|
1730
|
-
- checker interface?
|
1731
1729
|
"""
|
1732
1730
|
|
1733
1731
|
|
@@ -3789,6 +3787,20 @@ def attr_setting(obj, attr, val, *, default=None): # noqa
|
|
3789
3787
|
setattr(obj, attr, orig)
|
3790
3788
|
|
3791
3789
|
|
3790
|
+
##
|
3791
|
+
|
3792
|
+
|
3793
|
+
class aclosing(contextlib.AbstractAsyncContextManager): # noqa
|
3794
|
+
def __init__(self, thing):
|
3795
|
+
self.thing = thing
|
3796
|
+
|
3797
|
+
async def __aenter__(self):
|
3798
|
+
return self.thing
|
3799
|
+
|
3800
|
+
async def __aexit__(self, *exc_info):
|
3801
|
+
await self.thing.aclose()
|
3802
|
+
|
3803
|
+
|
3792
3804
|
########################################
|
3793
3805
|
# ../../../omlish/lite/inject.py
|
3794
3806
|
|
@@ -4957,7 +4969,8 @@ def configure_standard_logging(
|
|
4957
4969
|
"""
|
4958
4970
|
TODO:
|
4959
4971
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
4960
|
-
-
|
4972
|
+
- namedtuple
|
4973
|
+
- literals
|
4961
4974
|
"""
|
4962
4975
|
|
4963
4976
|
|
@@ -5247,14 +5260,18 @@ class ObjMarshalerManager:
|
|
5247
5260
|
) -> ObjMarshaler:
|
5248
5261
|
if isinstance(ty, type):
|
5249
5262
|
if abc.ABC in ty.__bases__:
|
5250
|
-
|
5263
|
+
impls = [ity for ity in deep_subclasses(ty) if abc.ABC not in ity.__bases__] # type: ignore
|
5264
|
+
if all(ity.__qualname__.endswith(ty.__name__) for ity in impls):
|
5265
|
+
ins = {ity: snake_case(ity.__qualname__[:-len(ty.__name__)]) for ity in impls}
|
5266
|
+
else:
|
5267
|
+
ins = {ity: ity.__qualname__ for ity in impls}
|
5268
|
+
return PolymorphicObjMarshaler.of([
|
5251
5269
|
PolymorphicObjMarshaler.Impl(
|
5252
5270
|
ity,
|
5253
|
-
|
5271
|
+
itn,
|
5254
5272
|
rec(ity),
|
5255
5273
|
)
|
5256
|
-
for ity in
|
5257
|
-
if abc.ABC not in ity.__bases__
|
5274
|
+
for ity, itn in ins.items()
|
5258
5275
|
])
|
5259
5276
|
|
5260
5277
|
if issubclass(ty, enum.Enum):
|
@@ -5816,22 +5833,124 @@ class RestartUnconditionally:
|
|
5816
5833
|
|
5817
5834
|
@dc.dataclass(frozen=True)
|
5818
5835
|
class ProcessConfig:
|
5836
|
+
# A Python string expression that is used to compose the supervisor process name for this process. You usually don't
|
5837
|
+
# need to worry about setting this unless you change numprocs. The string expression is evaluated against a
|
5838
|
+
# dictionary that includes group_name, host_node_name, process_num, program_name, and here (the directory of the
|
5839
|
+
# supervisord config file).
|
5819
5840
|
name: str
|
5841
|
+
|
5842
|
+
# The command that will be run when this program is started. The command can be either absolute (e.g.
|
5843
|
+
# /path/to/programname) or relative (e.g. programname). If it is relative, the supervisord's environment $PATH will
|
5844
|
+
# be searched for the executable. Programs can accept arguments, e.g. /path/to/program foo bar. The command line can
|
5845
|
+
# use double quotes to group arguments with spaces in them to pass to the program, e.g. /path/to/program/name -p
|
5846
|
+
# "foo bar". Note that the value of command may include Python string expressions, e.g. /path/to/programname
|
5847
|
+
# --port=80%(process_num)02d might expand to /path/to/programname --port=8000 at runtime. String expressions are
|
5848
|
+
# evaluated against a dictionary containing the keys group_name, host_node_name, program_name, process_num,
|
5849
|
+
# numprocs, here (the directory of the supervisord config file), and all supervisord's environment variables
|
5850
|
+
# prefixed with ENV_. Controlled programs should themselves not be daemons, as supervisord assumes it is responsible
|
5851
|
+
# for daemonizing its subprocesses
|
5820
5852
|
command: str
|
5821
5853
|
|
5854
|
+
#
|
5855
|
+
|
5856
|
+
# Supervisor will start as many instances of this program as named by numprocs. Note that if numprocs > 1, the
|
5857
|
+
# process_name expression must include %(process_num)s (or any other valid Python string expression that includes
|
5858
|
+
# process_num) within it.
|
5859
|
+
num_procs: int = 1
|
5860
|
+
|
5861
|
+
# An integer offset that is used to compute the number at which process_num starts.
|
5862
|
+
num_procs_start: int = 0
|
5863
|
+
|
5864
|
+
#
|
5865
|
+
|
5866
|
+
# Instruct supervisord to use this UNIX user account as the account which runs the program. The user can only be
|
5867
|
+
# switched if supervisord is run as the root user. If supervisord can't switch to the specified user, the program
|
5868
|
+
# will not be started.
|
5869
|
+
#
|
5870
|
+
# Note: The user will be changed using setuid only. This does not start a login shell and does not change
|
5871
|
+
# environment variables like USER or HOME
|
5872
|
+
user: ta.Optional[str] = None
|
5822
5873
|
uid: ta.Optional[int] = None
|
5823
|
-
|
5874
|
+
|
5875
|
+
# An octal number (e.g. 002, 022) representing the umask of the process.
|
5824
5876
|
umask: ta.Optional[int] = None
|
5877
|
+
|
5878
|
+
#
|
5879
|
+
|
5880
|
+
# A file path representing a directory to which supervisord should temporarily chdir before exec'ing the child.
|
5881
|
+
directory: ta.Optional[str] = None
|
5882
|
+
|
5883
|
+
# A list of key/value pairs in the form KEY="val",KEY2="val2" that will be placed in the child process' environment.
|
5884
|
+
# The environment string may contain Python string expressions that will be evaluated against a dictionary
|
5885
|
+
# containing group_name, host_node_name, process_num, program_name, and here (the directory of the supervisord
|
5886
|
+
# config file). Values containing non-alphanumeric characters should be quoted (e.g. KEY="val:123",KEY2="val,456").
|
5887
|
+
# Otherwise, quoting the values is optional but recommended. Note that the subprocess will inherit the environment
|
5888
|
+
# variables of the shell used to start “supervisord” except for the ones overridden here.
|
5889
|
+
environment: ta.Optional[ta.Mapping[str, str]] = None
|
5890
|
+
|
5891
|
+
#
|
5892
|
+
|
5893
|
+
# The relative priority of the program in the start and shutdown ordering. Lower priorities indicate programs that
|
5894
|
+
# start first and shut down last at startup and when aggregate commands are used in various clients (e.g. “start
|
5895
|
+
# all”/”stop all”). Higher priorities indicate programs that start last and shut down first.
|
5825
5896
|
priority: int = 999
|
5826
5897
|
|
5898
|
+
# If true, this program will start automatically when supervisord is started.
|
5827
5899
|
auto_start: bool = True
|
5900
|
+
|
5901
|
+
# Specifies if supervisord should automatically restart a process if it exits when it is in the RUNNING state. May
|
5902
|
+
# be one of false, unexpected, or true. If false, the process will not be autorestarted. If unexpected, the process
|
5903
|
+
# will be restarted when the program exits with an exit code that is not one of the exit codes associated with this
|
5904
|
+
# process' configuration (see exitcodes). If true, the process will be unconditionally restarted when it exits,
|
5905
|
+
# without regard to its exit code.
|
5906
|
+
#
|
5907
|
+
# Note: autorestart controls whether supervisord will autorestart a program if it exits after it has successfully
|
5908
|
+
# started up (the process is in the RUNNING state). supervisord has a different restart mechanism for when the
|
5909
|
+
# process is starting up (the process is in the STARTING state). Retries during process startup are controlled by
|
5910
|
+
# startsecs and startretries.
|
5828
5911
|
auto_restart: str = 'unexpected'
|
5829
5912
|
|
5913
|
+
# The total number of seconds which the program needs to stay running after a startup to consider the start
|
5914
|
+
# successful (moving the process from the STARTING state to the RUNNING state). Set to 0 to indicate that the
|
5915
|
+
# program needn't stay running for any particular amount of time.
|
5916
|
+
#
|
5917
|
+
# Note: Even if a process exits with an “expected” exit code (see exitcodes), the start will still be considered a
|
5918
|
+
# failure if the process exits quicker than startsecs.
|
5830
5919
|
start_secs: int = 1
|
5920
|
+
|
5921
|
+
# The number of serial failure attempts that supervisord will allow when attempting to start the program before
|
5922
|
+
# giving up and putting the process into an FATAL state.
|
5923
|
+
#
|
5924
|
+
# Note: After each failed restart, process will be put in BACKOFF state and each retry attempt will take
|
5925
|
+
# increasingly more time.
|
5831
5926
|
start_retries: int = 3
|
5832
5927
|
|
5833
|
-
|
5834
|
-
|
5928
|
+
# The signal used to kill the program when a stop is requested. This can be specified using the signal's name or its
|
5929
|
+
# number. It is normally one of: TERM, HUP, INT, QUIT, KILL, USR1, or USR2.
|
5930
|
+
stop_signal: int = signal.SIGTERM
|
5931
|
+
|
5932
|
+
# The number of seconds to wait for the OS to return a SIGCHLD to supervisord after the program has been sent a
|
5933
|
+
# stopsignal. If this number of seconds elapses before supervisord receives a SIGCHLD from the process, supervisord
|
5934
|
+
# will attempt to kill it with a final SIGKILL.
|
5935
|
+
stop_wait_secs: int = 10
|
5936
|
+
|
5937
|
+
# If true, the flag causes supervisor to send the stop signal to the whole process group and implies killasgroup is
|
5938
|
+
# true. This is useful for programs, such as Flask in debug mode, that do not propagate stop signals to their
|
5939
|
+
# children, leaving them orphaned.
|
5940
|
+
stop_as_group: bool = False
|
5941
|
+
|
5942
|
+
# If true, when resorting to send SIGKILL to the program to terminate it send it to its whole process group instead,
|
5943
|
+
# taking care of its children as well, useful e.g with Python programs using multiprocessing.
|
5944
|
+
kill_as_group: bool = False
|
5945
|
+
|
5946
|
+
# The list of “expected” exit codes for this program used with autorestart. If the autorestart parameter is set to
|
5947
|
+
# unexpected, and the process exits in any other way than as a result of a supervisor stop request, supervisord will
|
5948
|
+
# restart the process if it exits with an exit code that is not defined in this list.
|
5949
|
+
#
|
5950
|
+
# Note: In Supervisor versions prior to 4.0, the default was 0,2. In Supervisor 4.0, the default was changed to 0.
|
5951
|
+
exitcodes: ta.Sequence[int] = (0,)
|
5952
|
+
|
5953
|
+
#
|
5835
5954
|
|
5836
5955
|
@dc.dataclass(frozen=True)
|
5837
5956
|
class Log:
|
@@ -5845,18 +5964,14 @@ class ProcessConfig:
|
|
5845
5964
|
stdout: Log = Log()
|
5846
5965
|
stderr: Log = Log()
|
5847
5966
|
|
5848
|
-
|
5849
|
-
|
5850
|
-
|
5851
|
-
|
5852
|
-
|
5853
|
-
|
5854
|
-
exitcodes: ta.Sequence[int] = (0,)
|
5855
|
-
|
5967
|
+
# If true, cause the process' stderr output to be sent back to supervisord on its stdout file descriptor (in UNIX
|
5968
|
+
# shell terms, this is the equivalent of executing /the/program 2>&1).
|
5969
|
+
#
|
5970
|
+
# Note: Do not set redirect_stderr=true in an [eventlistener:x] section. Eventlisteners use stdout and stdin to
|
5971
|
+
# communicate with supervisord. If stderr is redirected, output from stderr will interfere with the eventlistener
|
5972
|
+
# protocol.
|
5856
5973
|
redirect_stderr: bool = False
|
5857
5974
|
|
5858
|
-
environment: ta.Optional[ta.Mapping[str, str]] = None
|
5859
|
-
|
5860
5975
|
|
5861
5976
|
@dc.dataclass(frozen=True)
|
5862
5977
|
class ProcessGroupConfig:
|
@@ -5869,28 +5984,75 @@ class ProcessGroupConfig:
|
|
5869
5984
|
|
5870
5985
|
@dc.dataclass(frozen=True)
|
5871
5986
|
class ServerConfig:
|
5987
|
+
# Instruct supervisord to switch users to this UNIX user account before doing any meaningful processing. The user
|
5988
|
+
# can only be switched if supervisord is started as the root user.
|
5872
5989
|
user: ta.Optional[str] = None
|
5990
|
+
|
5991
|
+
# If true, supervisord will start in the foreground instead of daemonizing.
|
5873
5992
|
nodaemon: bool = False
|
5993
|
+
|
5994
|
+
# The umask of the supervisord process.
|
5874
5995
|
umask: int = 0o22
|
5996
|
+
|
5997
|
+
#
|
5998
|
+
|
5999
|
+
# When supervisord daemonizes, switch to this directory. This option can include the value %(here)s, which expands
|
6000
|
+
# to the directory in which the supervisord configuration file was found.
|
5875
6001
|
directory: ta.Optional[str] = None
|
5876
|
-
|
5877
|
-
|
5878
|
-
|
5879
|
-
loglevel: int = logging.INFO
|
6002
|
+
|
6003
|
+
# The location in which supervisord keeps its pid file. This option can include the value %(here)s, which expands to
|
6004
|
+
# the directory in which the supervisord configuration file was found.
|
5880
6005
|
pidfile: str = 'supervisord.pid'
|
6006
|
+
|
6007
|
+
# The identifier string for this supervisor process, used by the RPC interface.
|
5881
6008
|
identifier: str = 'supervisor'
|
5882
|
-
|
6009
|
+
|
6010
|
+
# The minimum number of file descriptors that must be available before supervisord will start successfully.
|
5883
6011
|
min_fds: int = 1024
|
6012
|
+
# The minimum number of process descriptors that must be available before supervisord will start successfully.
|
5884
6013
|
min_procs: int = 200
|
6014
|
+
|
6015
|
+
# Prevent supervisord from clearing any existing AUTO child log files at startup time. Useful for debugging
|
5885
6016
|
nocleanup: bool = False
|
6017
|
+
|
6018
|
+
# Strip all ANSI escape sequences from child log files.
|
5886
6019
|
strip_ansi: bool = False
|
6020
|
+
|
6021
|
+
#
|
6022
|
+
|
6023
|
+
# The path to the activity log of the supervisord process. This option can include the value %(here)s, which expands
|
6024
|
+
# to the directory in which the supervisord configuration file was found.
|
6025
|
+
logfile: str = 'supervisord.log'
|
6026
|
+
|
6027
|
+
# The maximum number of bytes that may be consumed by the activity log file before it is rotated (suffix multipliers
|
6028
|
+
# like “KB”, “MB”, and “GB” can be used in the value). Set this value to 0 to indicate an unlimited log size.
|
6029
|
+
logfile_max_bytes: int = 50 * 1024 * 1024
|
6030
|
+
|
6031
|
+
# The number of backups to keep around resulting from activity log file rotation. If set to 0, no backups will be
|
6032
|
+
# kept.
|
6033
|
+
logfile_backups: int = 10
|
6034
|
+
|
6035
|
+
# The logging level, dictating what is written to the supervisord activity log. One of critical, error, warn, info,
|
6036
|
+
# debug, trace, or blather. Note that at log level debug, the supervisord log file will record the stderr/stdout
|
6037
|
+
# output of its child processes and extended info about process state changes, which is useful for debugging a
|
6038
|
+
# process which isn't starting properly.
|
6039
|
+
loglevel: int = logging.INFO
|
6040
|
+
|
6041
|
+
# The directory used for AUTO child log files. This option can include the value %(here)s, which expands to the
|
6042
|
+
# directory in which the supervisord configuration file was found.
|
6043
|
+
child_logdir: str = '/dev/null'
|
6044
|
+
|
6045
|
+
# If true and not daemonized, logs will not be directed to stdout.
|
5887
6046
|
silent: bool = False
|
5888
6047
|
|
6048
|
+
#
|
6049
|
+
|
5889
6050
|
groups: ta.Optional[ta.Sequence[ProcessGroupConfig]] = None
|
5890
6051
|
|
5891
6052
|
@classmethod
|
5892
6053
|
def new(
|
5893
6054
|
cls,
|
6055
|
+
*,
|
5894
6056
|
umask: ta.Union[int, str] = 0o22,
|
5895
6057
|
directory: ta.Optional[str] = None,
|
5896
6058
|
logfile: str = 'supervisord.log',
|
ominfra/supervisor/configs.py
CHANGED
@@ -29,22 +29,124 @@ class RestartUnconditionally:
|
|
29
29
|
|
30
30
|
@dc.dataclass(frozen=True)
|
31
31
|
class ProcessConfig:
|
32
|
+
# A Python string expression that is used to compose the supervisor process name for this process. You usually don't
|
33
|
+
# need to worry about setting this unless you change numprocs. The string expression is evaluated against a
|
34
|
+
# dictionary that includes group_name, host_node_name, process_num, program_name, and here (the directory of the
|
35
|
+
# supervisord config file).
|
32
36
|
name: str
|
37
|
+
|
38
|
+
# The command that will be run when this program is started. The command can be either absolute (e.g.
|
39
|
+
# /path/to/programname) or relative (e.g. programname). If it is relative, the supervisord's environment $PATH will
|
40
|
+
# be searched for the executable. Programs can accept arguments, e.g. /path/to/program foo bar. The command line can
|
41
|
+
# use double quotes to group arguments with spaces in them to pass to the program, e.g. /path/to/program/name -p
|
42
|
+
# "foo bar". Note that the value of command may include Python string expressions, e.g. /path/to/programname
|
43
|
+
# --port=80%(process_num)02d might expand to /path/to/programname --port=8000 at runtime. String expressions are
|
44
|
+
# evaluated against a dictionary containing the keys group_name, host_node_name, program_name, process_num,
|
45
|
+
# numprocs, here (the directory of the supervisord config file), and all supervisord's environment variables
|
46
|
+
# prefixed with ENV_. Controlled programs should themselves not be daemons, as supervisord assumes it is responsible
|
47
|
+
# for daemonizing its subprocesses
|
33
48
|
command: str
|
34
49
|
|
50
|
+
#
|
51
|
+
|
52
|
+
# Supervisor will start as many instances of this program as named by numprocs. Note that if numprocs > 1, the
|
53
|
+
# process_name expression must include %(process_num)s (or any other valid Python string expression that includes
|
54
|
+
# process_num) within it.
|
55
|
+
num_procs: int = 1
|
56
|
+
|
57
|
+
# An integer offset that is used to compute the number at which process_num starts.
|
58
|
+
num_procs_start: int = 0
|
59
|
+
|
60
|
+
#
|
61
|
+
|
62
|
+
# Instruct supervisord to use this UNIX user account as the account which runs the program. The user can only be
|
63
|
+
# switched if supervisord is run as the root user. If supervisord can't switch to the specified user, the program
|
64
|
+
# will not be started.
|
65
|
+
#
|
66
|
+
# Note: The user will be changed using setuid only. This does not start a login shell and does not change
|
67
|
+
# environment variables like USER or HOME
|
68
|
+
user: ta.Optional[str] = None
|
35
69
|
uid: ta.Optional[int] = None
|
36
|
-
|
70
|
+
|
71
|
+
# An octal number (e.g. 002, 022) representing the umask of the process.
|
37
72
|
umask: ta.Optional[int] = None
|
73
|
+
|
74
|
+
#
|
75
|
+
|
76
|
+
# A file path representing a directory to which supervisord should temporarily chdir before exec'ing the child.
|
77
|
+
directory: ta.Optional[str] = None
|
78
|
+
|
79
|
+
# A list of key/value pairs in the form KEY="val",KEY2="val2" that will be placed in the child process' environment.
|
80
|
+
# The environment string may contain Python string expressions that will be evaluated against a dictionary
|
81
|
+
# containing group_name, host_node_name, process_num, program_name, and here (the directory of the supervisord
|
82
|
+
# config file). Values containing non-alphanumeric characters should be quoted (e.g. KEY="val:123",KEY2="val,456").
|
83
|
+
# Otherwise, quoting the values is optional but recommended. Note that the subprocess will inherit the environment
|
84
|
+
# variables of the shell used to start “supervisord” except for the ones overridden here.
|
85
|
+
environment: ta.Optional[ta.Mapping[str, str]] = None
|
86
|
+
|
87
|
+
#
|
88
|
+
|
89
|
+
# The relative priority of the program in the start and shutdown ordering. Lower priorities indicate programs that
|
90
|
+
# start first and shut down last at startup and when aggregate commands are used in various clients (e.g. “start
|
91
|
+
# all”/”stop all”). Higher priorities indicate programs that start last and shut down first.
|
38
92
|
priority: int = 999
|
39
93
|
|
94
|
+
# If true, this program will start automatically when supervisord is started.
|
40
95
|
auto_start: bool = True
|
96
|
+
|
97
|
+
# Specifies if supervisord should automatically restart a process if it exits when it is in the RUNNING state. May
|
98
|
+
# be one of false, unexpected, or true. If false, the process will not be autorestarted. If unexpected, the process
|
99
|
+
# will be restarted when the program exits with an exit code that is not one of the exit codes associated with this
|
100
|
+
# process' configuration (see exitcodes). If true, the process will be unconditionally restarted when it exits,
|
101
|
+
# without regard to its exit code.
|
102
|
+
#
|
103
|
+
# Note: autorestart controls whether supervisord will autorestart a program if it exits after it has successfully
|
104
|
+
# started up (the process is in the RUNNING state). supervisord has a different restart mechanism for when the
|
105
|
+
# process is starting up (the process is in the STARTING state). Retries during process startup are controlled by
|
106
|
+
# startsecs and startretries.
|
41
107
|
auto_restart: str = 'unexpected'
|
42
108
|
|
109
|
+
# The total number of seconds which the program needs to stay running after a startup to consider the start
|
110
|
+
# successful (moving the process from the STARTING state to the RUNNING state). Set to 0 to indicate that the
|
111
|
+
# program needn't stay running for any particular amount of time.
|
112
|
+
#
|
113
|
+
# Note: Even if a process exits with an “expected” exit code (see exitcodes), the start will still be considered a
|
114
|
+
# failure if the process exits quicker than startsecs.
|
43
115
|
start_secs: int = 1
|
116
|
+
|
117
|
+
# The number of serial failure attempts that supervisord will allow when attempting to start the program before
|
118
|
+
# giving up and putting the process into an FATAL state.
|
119
|
+
#
|
120
|
+
# Note: After each failed restart, process will be put in BACKOFF state and each retry attempt will take
|
121
|
+
# increasingly more time.
|
44
122
|
start_retries: int = 3
|
45
123
|
|
46
|
-
|
47
|
-
|
124
|
+
# The signal used to kill the program when a stop is requested. This can be specified using the signal's name or its
|
125
|
+
# number. It is normally one of: TERM, HUP, INT, QUIT, KILL, USR1, or USR2.
|
126
|
+
stop_signal: int = signal.SIGTERM
|
127
|
+
|
128
|
+
# The number of seconds to wait for the OS to return a SIGCHLD to supervisord after the program has been sent a
|
129
|
+
# stopsignal. If this number of seconds elapses before supervisord receives a SIGCHLD from the process, supervisord
|
130
|
+
# will attempt to kill it with a final SIGKILL.
|
131
|
+
stop_wait_secs: int = 10
|
132
|
+
|
133
|
+
# If true, the flag causes supervisor to send the stop signal to the whole process group and implies killasgroup is
|
134
|
+
# true. This is useful for programs, such as Flask in debug mode, that do not propagate stop signals to their
|
135
|
+
# children, leaving them orphaned.
|
136
|
+
stop_as_group: bool = False
|
137
|
+
|
138
|
+
# If true, when resorting to send SIGKILL to the program to terminate it send it to its whole process group instead,
|
139
|
+
# taking care of its children as well, useful e.g with Python programs using multiprocessing.
|
140
|
+
kill_as_group: bool = False
|
141
|
+
|
142
|
+
# The list of “expected” exit codes for this program used with autorestart. If the autorestart parameter is set to
|
143
|
+
# unexpected, and the process exits in any other way than as a result of a supervisor stop request, supervisord will
|
144
|
+
# restart the process if it exits with an exit code that is not defined in this list.
|
145
|
+
#
|
146
|
+
# Note: In Supervisor versions prior to 4.0, the default was 0,2. In Supervisor 4.0, the default was changed to 0.
|
147
|
+
exitcodes: ta.Sequence[int] = (0,)
|
148
|
+
|
149
|
+
#
|
48
150
|
|
49
151
|
@dc.dataclass(frozen=True)
|
50
152
|
class Log:
|
@@ -58,18 +160,14 @@ class ProcessConfig:
|
|
58
160
|
stdout: Log = Log()
|
59
161
|
stderr: Log = Log()
|
60
162
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
exitcodes: ta.Sequence[int] = (0,)
|
68
|
-
|
163
|
+
# If true, cause the process' stderr output to be sent back to supervisord on its stdout file descriptor (in UNIX
|
164
|
+
# shell terms, this is the equivalent of executing /the/program 2>&1).
|
165
|
+
#
|
166
|
+
# Note: Do not set redirect_stderr=true in an [eventlistener:x] section. Eventlisteners use stdout and stdin to
|
167
|
+
# communicate with supervisord. If stderr is redirected, output from stderr will interfere with the eventlistener
|
168
|
+
# protocol.
|
69
169
|
redirect_stderr: bool = False
|
70
170
|
|
71
|
-
environment: ta.Optional[ta.Mapping[str, str]] = None
|
72
|
-
|
73
171
|
|
74
172
|
@dc.dataclass(frozen=True)
|
75
173
|
class ProcessGroupConfig:
|
@@ -82,28 +180,75 @@ class ProcessGroupConfig:
|
|
82
180
|
|
83
181
|
@dc.dataclass(frozen=True)
|
84
182
|
class ServerConfig:
|
183
|
+
# Instruct supervisord to switch users to this UNIX user account before doing any meaningful processing. The user
|
184
|
+
# can only be switched if supervisord is started as the root user.
|
85
185
|
user: ta.Optional[str] = None
|
186
|
+
|
187
|
+
# If true, supervisord will start in the foreground instead of daemonizing.
|
86
188
|
nodaemon: bool = False
|
189
|
+
|
190
|
+
# The umask of the supervisord process.
|
87
191
|
umask: int = 0o22
|
192
|
+
|
193
|
+
#
|
194
|
+
|
195
|
+
# When supervisord daemonizes, switch to this directory. This option can include the value %(here)s, which expands
|
196
|
+
# to the directory in which the supervisord configuration file was found.
|
88
197
|
directory: ta.Optional[str] = None
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
loglevel: int = logging.INFO
|
198
|
+
|
199
|
+
# The location in which supervisord keeps its pid file. This option can include the value %(here)s, which expands to
|
200
|
+
# the directory in which the supervisord configuration file was found.
|
93
201
|
pidfile: str = 'supervisord.pid'
|
202
|
+
|
203
|
+
# The identifier string for this supervisor process, used by the RPC interface.
|
94
204
|
identifier: str = 'supervisor'
|
95
|
-
|
205
|
+
|
206
|
+
# The minimum number of file descriptors that must be available before supervisord will start successfully.
|
96
207
|
min_fds: int = 1024
|
208
|
+
# The minimum number of process descriptors that must be available before supervisord will start successfully.
|
97
209
|
min_procs: int = 200
|
210
|
+
|
211
|
+
# Prevent supervisord from clearing any existing AUTO child log files at startup time. Useful for debugging
|
98
212
|
nocleanup: bool = False
|
213
|
+
|
214
|
+
# Strip all ANSI escape sequences from child log files.
|
99
215
|
strip_ansi: bool = False
|
216
|
+
|
217
|
+
#
|
218
|
+
|
219
|
+
# The path to the activity log of the supervisord process. This option can include the value %(here)s, which expands
|
220
|
+
# to the directory in which the supervisord configuration file was found.
|
221
|
+
logfile: str = 'supervisord.log'
|
222
|
+
|
223
|
+
# The maximum number of bytes that may be consumed by the activity log file before it is rotated (suffix multipliers
|
224
|
+
# like “KB”, “MB”, and “GB” can be used in the value). Set this value to 0 to indicate an unlimited log size.
|
225
|
+
logfile_max_bytes: int = 50 * 1024 * 1024
|
226
|
+
|
227
|
+
# The number of backups to keep around resulting from activity log file rotation. If set to 0, no backups will be
|
228
|
+
# kept.
|
229
|
+
logfile_backups: int = 10
|
230
|
+
|
231
|
+
# The logging level, dictating what is written to the supervisord activity log. One of critical, error, warn, info,
|
232
|
+
# debug, trace, or blather. Note that at log level debug, the supervisord log file will record the stderr/stdout
|
233
|
+
# output of its child processes and extended info about process state changes, which is useful for debugging a
|
234
|
+
# process which isn't starting properly.
|
235
|
+
loglevel: int = logging.INFO
|
236
|
+
|
237
|
+
# The directory used for AUTO child log files. This option can include the value %(here)s, which expands to the
|
238
|
+
# directory in which the supervisord configuration file was found.
|
239
|
+
child_logdir: str = '/dev/null'
|
240
|
+
|
241
|
+
# If true and not daemonized, logs will not be directed to stdout.
|
100
242
|
silent: bool = False
|
101
243
|
|
244
|
+
#
|
245
|
+
|
102
246
|
groups: ta.Optional[ta.Sequence[ProcessGroupConfig]] = None
|
103
247
|
|
104
248
|
@classmethod
|
105
249
|
def new(
|
106
250
|
cls,
|
251
|
+
*,
|
107
252
|
umask: ta.Union[int, str] = 0o22,
|
108
253
|
directory: ta.Optional[str] = None,
|
109
254
|
logfile: str = 'supervisord.log',
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ominfra
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev156
|
4
4
|
Summary: ominfra
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,8 +12,8 @@ Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Operating System :: POSIX
|
13
13
|
Requires-Python: >=3.12
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omdev==0.0.0.
|
16
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omdev==0.0.0.dev156
|
16
|
+
Requires-Dist: omlish==0.0.0.dev156
|
17
17
|
Provides-Extra: all
|
18
18
|
Requires-Dist: paramiko~=3.5; extra == "all"
|
19
19
|
Requires-Dist: asyncssh~=2.18; extra == "all"
|
@@ -29,46 +29,57 @@ ominfra/journald/messages.py,sha256=zhAQswhpSBybaBPWONCt0quenYK91HMHRkuOz38mq1E,
|
|
29
29
|
ominfra/journald/tailer.py,sha256=gBVtuc8dm-H13eOYC-F5fCrJLuiC3fAC3TyVdrKhnqQ,33516
|
30
30
|
ominfra/manage/__init__.py,sha256=aykrEASTHEtJ-o97jUHRIv8oea41tO7RDHB56cQfmis,265
|
31
31
|
ominfra/manage/__main__.py,sha256=5IeIERm-371fSI5ZvPv8eldAJBwgKwpR0R49pTsILNM,76
|
32
|
-
ominfra/manage/bootstrap.py,sha256=
|
33
|
-
ominfra/manage/bootstrap_.py,sha256=
|
32
|
+
ominfra/manage/bootstrap.py,sha256=1RIRhVkUZjxZcZerHMg8U6xgWhhemGgPN5cDye8dQ68,446
|
33
|
+
ominfra/manage/bootstrap_.py,sha256=CYO8HfuVsw02PiVMMnyabL5jqJhexeP0b5mWz8eOtoA,652
|
34
34
|
ominfra/manage/config.py,sha256=1y2N_8nXHBZc6YbW6BaRZoDDCTBmiHuWtTOQ7zdr5VE,184
|
35
|
-
ominfra/manage/inject.py,sha256=
|
36
|
-
ominfra/manage/main.py,sha256=
|
35
|
+
ominfra/manage/inject.py,sha256=_FVaMZUBKi-oObv14H77luWYCodxNJJD1t4pNQzckFE,2030
|
36
|
+
ominfra/manage/main.py,sha256=LrjcdTLUtbEho_LNwQ9JBK2BfE5IZuUF-wSHXujiiuY,3489
|
37
37
|
ominfra/manage/marshal.py,sha256=WKj7IU9bo4fBMSSzT6ZMm_WFalXIJZ-V7j8oi92fNhk,305
|
38
38
|
ominfra/manage/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
39
39
|
ominfra/manage/commands/base.py,sha256=LtaI0AgnplttQK7gNncNItq8yuTZQimJTaprVpZktI8,3993
|
40
|
-
ominfra/manage/commands/
|
41
|
-
ominfra/manage/commands/
|
42
|
-
ominfra/manage/commands/interp.py,sha256=OKkenH8YKEW_mEDR6X7_ZLxK9a1Ox6KHSwFPTHT6OzA,1029
|
40
|
+
ominfra/manage/commands/inject.py,sha256=uRw6DsllEoL6GDy0dZJdu2z9tf6I7l3YObMli-qIuIo,3426
|
41
|
+
ominfra/manage/commands/local.py,sha256=DyHIsQ03_YS6kAA8WLeMyXyGgyizkd1WZUZdATkSsZE,532
|
43
42
|
ominfra/manage/commands/marshal.py,sha256=4DSCMPzRiRhufIB_9DPL6LrZkRZOle5ruOWU4MVlcXM,694
|
44
|
-
ominfra/manage/commands/
|
43
|
+
ominfra/manage/commands/ping.py,sha256=DVZFzL1Z_f-Bq53vxMrL3xOi0iK_nMonJE4KvQf9wsI,546
|
44
|
+
ominfra/manage/commands/subprocess.py,sha256=mOZMLp45P87UmRjIStshuSj8STmMma2FvoNomBH4aXE,2453
|
45
|
+
ominfra/manage/commands/types.py,sha256=XFZPeqeIBAaIIQF3pdPbGxLlb-LCrz6WtlDWO2q_vz0,210
|
45
46
|
ominfra/manage/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
47
|
+
ominfra/manage/deploy/apps.py,sha256=i0iB7vVjnsMRahlKn3nTIComQGtYEEWe2twTpRO43Mg,1747
|
46
48
|
ominfra/manage/deploy/commands.py,sha256=YZGdpiaqj_-iMp2SMdz4hB6bTKk3UQxnHeTblGyxuuk,560
|
47
|
-
ominfra/manage/deploy/
|
48
|
-
ominfra/manage/deploy/
|
49
|
+
ominfra/manage/deploy/config.py,sha256=xBBaeDXmM6omkJHJLMbieKD3wNaxSY1KAaXDiseX7Dk,161
|
50
|
+
ominfra/manage/deploy/git.py,sha256=l-LcRIsysK6Y1OIwY2NYhuyzRW6wbE2n2vg9RRnQ2Zs,3815
|
51
|
+
ominfra/manage/deploy/inject.py,sha256=0_dBxMsyRYC9VH26Ue9k176IU22t9hWDmw101uIHyNE,1218
|
52
|
+
ominfra/manage/deploy/interp.py,sha256=OKkenH8YKEW_mEDR6X7_ZLxK9a1Ox6KHSwFPTHT6OzA,1029
|
53
|
+
ominfra/manage/deploy/paths.py,sha256=QZgeqESogfOw02cswGx-UcAwku-iklSjB46xaoDWJxo,5731
|
54
|
+
ominfra/manage/deploy/types.py,sha256=zW1nwi_wlBB6ekTmR3udnO2OW-p9JToyh3R27rzNEX8,264
|
55
|
+
ominfra/manage/deploy/venvs.py,sha256=CCPa8a5f5YamESDB7KemoLxkfszoczC2swnbAG4eOtY,1763
|
49
56
|
ominfra/manage/remote/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
-
ominfra/manage/remote/_main.py,sha256=
|
57
|
+
ominfra/manage/remote/_main.py,sha256=p5KoiS2WMw6QAqlDl_Zun-JybmCsy8awIfpBMLBjGMY,4356
|
51
58
|
ominfra/manage/remote/channel.py,sha256=36xR9Ti9ZA8TUBtxmY0u7_3Lv7E6wzQTxlZl7gLR5GE,2224
|
52
|
-
ominfra/manage/remote/config.py,sha256=
|
53
|
-
ominfra/manage/remote/connection.py,sha256=
|
54
|
-
ominfra/manage/remote/execution.py,sha256=
|
55
|
-
ominfra/manage/remote/inject.py,sha256=
|
59
|
+
ominfra/manage/remote/config.py,sha256=zRIC7Yhh3FMfoIgyqlbDTwpL_jS23lhQXjGB2_YG4Eg,473
|
60
|
+
ominfra/manage/remote/connection.py,sha256=T4fL-GXXAfnbCbkZ3_28t8LAwwki4Td3j41eY_2qKYA,3795
|
61
|
+
ominfra/manage/remote/execution.py,sha256=_bygZi_0Uel615uIg43S14CTdmv1unEIu9TPz2mVRJ4,11738
|
62
|
+
ominfra/manage/remote/inject.py,sha256=nSNP_VInCCZOWVrUIRHBvLmnM45geFoYmMh-zqc__as,1080
|
56
63
|
ominfra/manage/remote/payload.py,sha256=Rn-Yo26POpHEOOfUHX3jWkqcQVEAvkJ_5Bu13jwoob4,944
|
57
|
-
ominfra/manage/remote/spawning.py,sha256=
|
64
|
+
ominfra/manage/remote/spawning.py,sha256=2k1Zfrn8RgnfCxGEaAk5ditpb2BcMARjdiYC_RiERVY,3203
|
58
65
|
ominfra/manage/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
59
|
-
ominfra/manage/system/commands.py,sha256=
|
60
|
-
ominfra/manage/system/config.py,sha256=
|
61
|
-
ominfra/manage/system/inject.py,sha256=
|
62
|
-
ominfra/manage/system/packages.py,sha256=
|
63
|
-
ominfra/manage/system/
|
66
|
+
ominfra/manage/system/commands.py,sha256=XrYvsxiwTJh17buIWmoFGH8zTUIXmrXvYkLy1INtmkU,1173
|
67
|
+
ominfra/manage/system/config.py,sha256=mEVBL1cy4twO6F0bdnCI01Sm0xuLe1Z5eiAzCvbmoAc,196
|
68
|
+
ominfra/manage/system/inject.py,sha256=Ksc7Xw_Yh3lWwkTRxB2JCeOYO-nMyKj-Kssd1RDkR9g,1871
|
69
|
+
ominfra/manage/system/packages.py,sha256=uqCemll529Bg6OvJVkk3m4d3xOe_FFrgBgRQep_-Pv8,4612
|
70
|
+
ominfra/manage/system/platforms.py,sha256=F0bgYzUzCjZ2LbWVvnEq2ya_X_LfRW406LQYFL7bG44,1202
|
71
|
+
ominfra/manage/targets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
|
+
ominfra/manage/targets/connection.py,sha256=j2QrVS-QFOZJ47TqwaMt8MSPg0whokysGePagjJg3Jg,4637
|
73
|
+
ominfra/manage/targets/inject.py,sha256=P4597xWM-V3I_gCt2O71OLhYQkkXtuJvkYRsIbhhMcE,1561
|
74
|
+
ominfra/manage/targets/targets.py,sha256=CFl8Uirgn3gfowO1Fn-LBK-6qYqEMFJ9snPUl0gCRuM,1753
|
64
75
|
ominfra/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
65
|
-
ominfra/scripts/journald2aws.py,sha256=
|
66
|
-
ominfra/scripts/manage.py,sha256=
|
67
|
-
ominfra/scripts/supervisor.py,sha256=
|
76
|
+
ominfra/scripts/journald2aws.py,sha256=5eqvfZ_qB1wc0WOop3mz82gOHN3SGzFcuwxUeXLOR4I,151695
|
77
|
+
ominfra/scripts/manage.py,sha256=eB_u6D3BdulXlyis65K28F0IHSTPLPKsSSTafJ1zuJ4,250371
|
78
|
+
ominfra/scripts/supervisor.py,sha256=PrRSYhPe8K6sOAmmF7-LNvCHsSBIizWDkV_GIsPL2vE,272399
|
68
79
|
ominfra/supervisor/LICENSE.txt,sha256=yvqaMNsDhWxziHa9ien6qCW1SkZv-DQlAg96XjfSee8,1746
|
69
80
|
ominfra/supervisor/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
70
81
|
ominfra/supervisor/__main__.py,sha256=I0yFw-C08OOiZ3BF6lF1Oiv789EQXu-_j6whDhQUTEA,66
|
71
|
-
ominfra/supervisor/configs.py,sha256=
|
82
|
+
ominfra/supervisor/configs.py,sha256=SFn1_Cm48fqmjYsFCEx_-fvrnOXHPTIXgcRhHtUz7q8,13650
|
72
83
|
ominfra/supervisor/dispatchers.py,sha256=zXLwQS4Vc6dWw5o9QOL04UMDt7w6CKu9wf19CjUiS2Q,1005
|
73
84
|
ominfra/supervisor/dispatchersimpl.py,sha256=q3dEyOHWTPKm28nmAGisjgIW1BX6O3-SzbYa7nWuTEs,11349
|
74
85
|
ominfra/supervisor/events.py,sha256=XGrtzHr1xm0dwjz329fn9eR0_Ap-LQL6Sk8LJ8eVDEo,6692
|
@@ -106,9 +117,9 @@ ominfra/tailscale/api.py,sha256=C5-t_b6jZXUWcy5k8bXm7CFnk73pSdrlMOgGDeGVrpw,1370
|
|
106
117
|
ominfra/tailscale/cli.py,sha256=h6akQJMl0KuWLHS7Ur6WcBZ2JwF0DJQhsPTnFBdGyNk,3571
|
107
118
|
ominfra/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
119
|
ominfra/tools/listresources.py,sha256=4qVg5txsb10EHhvqXXeM6gJ2jx9LbroEnPydDv1uXs0,6176
|
109
|
-
ominfra-0.0.0.
|
110
|
-
ominfra-0.0.0.
|
111
|
-
ominfra-0.0.0.
|
112
|
-
ominfra-0.0.0.
|
113
|
-
ominfra-0.0.0.
|
114
|
-
ominfra-0.0.0.
|
120
|
+
ominfra-0.0.0.dev156.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
121
|
+
ominfra-0.0.0.dev156.dist-info/METADATA,sha256=Uh8A7yOgSiNjW9yWFY_Vm8fW6j9BVhm8wLX-hZOTbjs,731
|
122
|
+
ominfra-0.0.0.dev156.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
123
|
+
ominfra-0.0.0.dev156.dist-info/entry_points.txt,sha256=kgecQ2MgGrM9qK744BoKS3tMesaC3yjLnl9pa5CRczg,37
|
124
|
+
ominfra-0.0.0.dev156.dist-info/top_level.txt,sha256=E-b2OHkk_AOBLXHYZQ2EOFKl-_6uOGd8EjeG-Zy6h_w,8
|
125
|
+
ominfra-0.0.0.dev156.dist-info/RECORD,,
|