5. Use Python for scripting inside and outside containers#
Date: 2022-11-30
Status#
Accepted
Context#
Inside the container, we use the ibek tool for scripting. Outside we
use ec from epics-containers-cli.
Much of what these tools do is
call command line tools like docker, helm, kubectl, compilers,
etc. This seems like a natural fit for bash scripts.
These features were originally implemented in bash but were converted to python for the following reasons:
- python provides for much richer command line arguments 
- it is also much easier to provide rich help 
- managing errors is vastly improved with exception handling 
- the unit testing framework allows good test coverage in continuous integration 
- complex string handling is a common requirement and is much easier in python 
- there is a clear versioning strategy and packages can be installed with pip, meaning that you can check which version of the script you are running and report bugs against a specific version 
- the code is much easier to read and maintain 
- because the packages can be pip installed they can be used in CI and inside multiple containers without having to copy the scripts around 
Decision#
We always prefer Python and keep bash scripts to a minimum
Consequences#
Scripting is much easier to maintain and is more reliable.