# SLS HLA Framework ## Getting started Install [uv](https://docs.astral.sh/uv/) ## CLI Using the CLI: ``` cd cli uv sync source .venv/bin/activate agebd --help ``` ### Adding a new service ``` agebd service add --help ``` ## Environments The services are deployed to 2 environments: | Environment | Network | Host | Deploy path on host | |---|---|---|---| |`prod` | `machine`| `sls-vserv-bd-hla01` | `/sls/bd/hla/prod/` | | `dev` | `office` | `sls-vserv-bd-hla01-dev` | `/sls/bd/hla/dev/` | ### Process Variables (PVs) We distinguish between - `prod` vs `dev` PVs - **services specific** PVs from a dedicated IOC vs **external** PVs from other IOCs #### PVs - Service Specific You create them, see (# TODO: docs...) `prod` and `dev` PVs automatically get created. In your code, you only use the `prod` name of a PV. The framework will automatically use the `dev` name/PV when a service runs in the `dev` environment. #### PVs - External You can only access them. The framework will use the same PV in `prod` and `dev`, i.e. there is no `dev` PV. #### PVs - Examples | Environment | Service Specific | External | |---|---|---| |`prod` | `PV("AGEBD-MYSERVICE:MYPVNAME")` | `PV("AGEOP-SOME-SERVICE:SOME-PVNAME")` | | `dev` | `PV("AGEBD-MYSERVICE-DEV:MYPVNAME")` | - | ### Python For python services there are 3 environments. The python environment is set through the env variable `AGEBD_ENV`. | Environment | PVs | |---|---| | `AGEBD_ENV=prod` | uses `prod` PVs | | `AGEBD_ENV=dev` | uses `dev` PVs | | `AGEBD_ENV=local` | uses fake/mock python objects as PVs, no access to real PVs | ## Hosts overview Check which network a host lives in, e.g. for `sls-lca`: ```shell ping sls-lca.psi.ch ``` ### Machine Net (`prod`) - sls-lca - sls-vserv-bd-01 - sls-vserv-bd-hla01 ### Office Net (`dev`) - sls-lc8 - sls-lc9 - sls-vserv-bd-01-dev - sls-vserv-bd-hla01-dev