Releases: hyperion-start/hyperion-core
Releases · hyperion-start/hyperion-core
[2.2.0] - 19.06.2019
Added
- Enabled configuration of rate at which the monitoring thread checks on components/hosts.
- Added possibility to specify optional requirements for components. This is useful for combination with the exclude
feature.
Changed
- Moved user interfaces and graph drawing to external libraries
Fixed
- Having requires or depends defined as empty list does not cause an exception anymore.
- Program will exit with correct exit code on missing urwid installation after showing the error output.
2.1.0
[2.1.0] - 23.02.2019
Added
- Mark noauto generated by visual validation mode graph with doubleoctagon.
Changed
- Moved graph generation to extra python file.
- Before slave sessions and the main session are terminated on full shutdown, each component is stopped.
- Tmux windows for components now start with the shell configured by
shell_path
(defaults tobin/bash
).
Fixed
- Logs opened in cli interface that are accessed over ssh won't cause a crash of the UI on connection loss anymore.
- Correct behaivor on component stop: C-c is sent to a window even if a custom stop command is not given.
- Ignore circular dependency error on cleanup. This is triggered by getting the start oder of components for clean
shutdown. When this exception occurs we can assume that no component is running, because a server will not start with
an invalid config nor reload a config that becomes invalid, meaning the cleanup function is called directly after a
failed server start so it is okay to ignore the exception in this case.
2.0.0-alpha
[2.0.0-alpha] - 31.01.2019
Added
verbose_checks
top level field in config. If set to true enables logging stdout and stderr of check commands.- If sourcing the custom environment file exited with an error while preprocessing, the user is informed via critical
log output. - Interactive CLI now supports showing server and slave logs on click of the hostname if it is connected.
- Tagging components with a list of tags is possible by using the
tags
key in the component configuration. - Specifying a list of exclude tags is possible by using the
exclude
tag in the top level of the configuration. Each
component tagged with a tag included in the exclude list will be removed from the loaded config. This is useful for
dynamic configs (sim and robot specific components in one configured system, for instance) to switch between usage of
specific components.
Changed
- Parsing the environment file is more robust now (with exception handling).
- Add enum ExitState in config to define different exit states.
- Starting remote tmux client sessions is not done over ssh anymore but communicated from a client to the server where,
if necessary its forwarded to the server the component is running on, where the bash script for creating a local clone
session is executed. - host_states and host_list usage is now consistent across client interfaces and manager instances.
- Dependency model changed to requires/provides to enhance reusability of components. Use the keys
provides
and
requires
in component configurations to model dependencies.
Fixed
- Bug in search component cmd, that would use a dictionary as command to run, when the requested cmd type could not be
found in the list of available commands. - Restrict usage of standalone mode to having to provide a configuration.
- Safe shutdown is invoked when a slave raises a HostUnknownException while trying to connect to its master server.
1.0.0-alpha
Changelog
Added
- This changelog
- Graph generated by visual validator mode now clusters by hostname
- Reusing still alive slave sockets after a disconnect on a reconnect attempt (see #30).
- Host status dictionary to keep track of each hosts status (DISCONNECTED, SSH_ONLY and CONNECTED)
- All socket connections are routed over SSH port forwarding (using the control master so every host connection uses
only one port again). Implicitly adds user authentication for UI clients and remote slaves and encrypts the
communication thus resolving #32 and #28.forward_over_ssh()
forwards a random local port to the remote server port using the custom ssh config. On success
the random port is returned to be used .- To identify slaves each slave sends an
auth
message containing its hostname on connect because the management
server gets local sockets without information which remote host the come from. The port of the connection is then
mapped to the host from the message payload.
- Possibility to use environment variables for host names in components (e.g
host: ${base-pc}
where base-pc can
evaluate to anything) - Broadcasting results of check events is now optional (true by default)
- Adding a
noauto
key to a component config will prevent it from being started automatically by astart_all
procedure. This will also prevent it from being started as dependency of another component which can lead to severe
start procedure problems thus is it discouraged to depend on noauto components (Resolves #36). - Usage of optional
stop
commands for components (resolves #34). Note: the component window receives an interrupt, after which the
given stop command is executed. - Reload config at runtime feature (Resolves #37)
- Option to specify standard shell executable for subprocess calls when the environment file is sourced (config
preprocessing and when running a component check). The default path '/bin/bash' can be overridden by specifying the
executable path as value of theshell_path
field in the system config file. - Force mode: tries starting a component even if dependencies failed (Resolves #33). In interactive cli press
F
to
toggle force mode. - Unit test for slave to server to client connection (by passing on a check event).
Changed
- Slave session start moved from ssh window of the master server tmux session to remote host tmux session called
CONFIG_NAME-slave (standard session components get started in too). This way the terminal instance running the slave
can be accessed on the remote host, which is more practical. - Moved
setup_ssh_config()
method to a static context so that it can be run without having a reference to a manager
AbstractManager instance. - Socket servers are now always bound to loopback to make connections inaccessible from other network devices forcing
clients to use ssh forwarding. - Moved localhost checks in RemoteClientInterfaces to the BaseClient class.
- Renamed
set_component_ids
toconf_preprocessing
and added resolving hosts that are given as env variables. For
the sake of using variables defined in the custom environment file (if any is given) it is sourced via subprocess and
the env variables are analyzed. - Only broadcast local check events or if a slave did not answer (in time) to prevent sending a check event twice
(received check events are forwarded automatically) - Major changes in generated graph layout:
- Rankdir is now from R to L, hostnames in node labels appear after a
linebreak, are slightly smaller and colored green for better overview. - Node style changed to squares.
- Edge style changed from splines to polyline (less ambiguous overlap).
- Rank is globally managed, not cluster specific.
- Rankdir is now from R to L, hostnames in node labels appear after a
- Replaced enum dependency with enum34
- On component (depedency) start don't always wait the whole component wait time. Instead, checks are performed
periodically until successful, if the component wait time is over, each check is counted as try and on 4 unsuccessful
tries the process is interpreted as failed start. - Most component check results of checks performed during component startup (including dependencies) are not
broadcasted to ui clients. Only the last check of the component (thus not a intermediate but a meaningful result) will
be published (Resolves #35). - Special order of component cmds in configurations is not required anymore since the function
get_component_cmd
takes
care of that now. - Disabled automatic
check all
action on interactive cli start. - Disabled PyQt gui for now, since currently it is not compatible with the server/client architecture.
Fixed
- Stability of execute mode (all commands now work again for remote or local components)
- validator mode: moved setting component ids to a function that is called before analysing the config so that it now
is able to find the id key each component dict. - visual validator mode
- Trying to send commands to not connected slaves
- Set ssh connect option batchmode to disable being prompted for a password, when auth via ssh keys is not successful,
because the tmux window would be kept busy and the application would loop endlessly waiting for the ssh process to
finish. - On slave disconnect pass host name instead of the ip to the disconnect event (caused additional host entries
in host_list see #29) - Add a check if ssh is actually running instead of checking if only the window exists before attempting a slave start.
That would cause an incorrect status of SSH_ONLY when the slave connection failed instead of DISCONNECTED as it should
be. - SlaveManager check_buffer content validation: changed to None check instead of single if because a value of 0 as
answer (currently RUNNING) would be interpreted as no answer and result in an UNREACHABLE event. - Lowered CPU usage of
clientInterface
by adding sleep to the messaging loop. - If custom environment was given as relative path, absolute path is joined and saved (necessary to source before
running checks in subprocess) - Use sleep in slave messaging loop to fix CPU leak.
- Reconnect event (sent on ssh reconnect) resulted in wrong host status CONNECTED, now it is set to SSH_ONLY.
- SlaveReconnect being handled by client interfaces the right way.
alpha
Alpha release! In this commit many things happened, but due to the major change of the structure I just squashed everything to one feature commit. First of all the server/client model was updated according to #24: slave instances now run as a limited version of a master server, keeping track of their own local components. The master server starts a new slave managing socket server, that listens for new connections of slave servers and sends and receives serialized commands over the socket connection. The logging model has been changed fundamentally too (#26). The demo example with start all and an opened interactive cli gui generates the following structure: /tmp/Hyperion/log/ ├── hyperion-vm │ ├── client │ ├── component │ │ ├── nav@hyperion-vm │ │ │ └── latest.log │ │ └── top@hyperion-vm │ │ └── latest.log │ ├── server │ ├── slave │ │ └── Hyperion-DEMO.log │ └── standalone ├── localhost │ ├── client │ │ └── 13-39-08.log │ ├── component │ │ ├── roscore@localhost │ │ │ └── latest.log │ │ ├── xclock@localhost │ │ │ └── latest.log │ │ └── xeyes@localhost │ │ └── latest.log │ ├── server │ │ └── Hyperion-DEMO.log │ ├── slave │ └── standalone └── remote └── slave └── Hyperion-DEMO@hyperion-vm_13-38-57.log The log directory holds 3 types of directory on the first level: 'localhost' for commits from locally started components, 'remote' for remote logs that are copied over and 'HOSTNAME' which is an sshfs mount pointing to a slave machines /tmp/log/Hyperion/localhost directory. Inside the localhost directory are directories for each (non-trivial) run mode and a directory for component logs. In summary this commit provides all initially planned functionality for the interactive gui. The PyQt gui will be updated soon and a web ui is planned too. From here on the focus is shifted from new feature developement to bringing more stability. Fixes #27, #26, #23, #24