The System Controller is the central backend that ties together and controls the different components of the base platform, and that provides the REST API that is used by the user to configure and monitor the system.
When each Agile Live component (such as an Ingest or a Production Pipeline) starts up, it connects to and registers with the System Controller. This means the System Controller must run in a network location that is reachable from all other components.
From release 6.0.0 and on, the System Controller is distributed as a debian package, acl-system-controller
.
To install the System Controller application, do the following:
sudo apt -y install acl-system-controller_<version>_amd64.deb
The System Controller binary will be installed in the directory /opt/agile_live/bin/
and its configuration file will be placed in /etc/opt/agile_live/
.
Note
In releases 5.0.0 and earlier, the System Controller application was delivered in the release artifactagile-live-system-controller-<x.y.z>-<checksum>.zip
. Unpack the file and place the contents in a desired location.
An example configuration file is shipped with this release, postfixed with .example
. Remove this postfix to use the file.The System Controller is configured either using a settings file or using environment variables, or a combination thereof. The settings file, named acl_sc_settings.json
, is searched for in /etc/opt/agile_live
and current directory, or the search path can be pointed to using a flag on the command line when starting the application:
./acl-system-controller
for default search paths or ./acl-system-controller -settings-path /path/to/directory/where/settings_file/exists
To use environment variables overriding settings from the configuration file, construct the variables from the json objects in the settings file by prepending with ACL_SC
and then the json object flattened out with _
as the delimiter, e.g.:
export ACL_SC_LOGGER_LEVEL=debug
export ACL_SC_PROTO=https
Starting with the basic configuration file in the release, edit a few settings inside it (see this guide for help with the security related parameters):
- change the
psk
parameter to something random of your own - change the
salt
to some long string of your own - set the
username
andpassword
to protect the REST API - specify TLS certificate and key files
- set the
host
andport
parameters to where the System Controller shall be reached
Also consider setting the file_name_prefix
to set the log file location, otherwise it defaults to /tmp/
.
Warning
Since passwords will be inserted in this configuration file, it is recommended to set the file rights to only allow reading by the user that executes the System Controller.From the installation directory, the System Controller is started with:
./acl-system-controller
If started successfully, it will display a log message showing the server endpoint.
The System Controller comes with built-in Swagger documentation that makes it easy to explore the API in a regular web browser. To access the Swagger REST API documentation hosted by the System Controller, open https://<IP>:<port>/swagger/
in your browser. The Swagger UI can be used to poll or edit the state of the actual system by using the “Try it out” buttons.
Running the System Controller as a service
It may be useful to run the System Controller as a service in Ubuntu, so that it starts automatically on boot and restarts if it terminates abnormally. In Ubuntu 22.04 systemd
manages the services. Here follows an example of how a service can be configured, started and monitored.
First create a “service unit file”, named for example /etc/systemd/system/acl-system-controller.service
and put the following in it:
[Unit]
Description=Agile Live System Controller service
[Service]
User=<YOUR_USER>
Environment=<ANY_ENV_VARS_HERE>
ExecStart=/opt/agile_live/bin/acl-system-controller
Restart=always
[Install]
WantedBy=multi-user.target
Replace <YOUR_USER>
with the user that will be executing the System Controller binary on the host machine. The Environment
attribute is used if you want to set any parameters as environment variables.
After saving the service unit file, run:
sudo systemctl daemon-reload
sudo systemctl enable acl-system-controller.service
sudo systemctl start acl-system-controller
The service should now be started. The status of the service can be queried using:
sudo systemctl status acl-system-controller.service