diff --git a/.gitea/scripts/deploy-and-restart-service.sh b/.gitea/scripts/deploy-and-restart-service.sh
index 142b509..ccbbb8f 100755
--- a/.gitea/scripts/deploy-and-restart-service.sh
+++ b/.gitea/scripts/deploy-and-restart-service.sh
@@ -38,14 +38,17 @@ rsync -avz --delete \
./services/${SERVICE_NAME_LOWER}/current/* ${SERVICE_DIR}/
### SUBSTITUTIONS
+# Deploy-time tokens are '@@token@@'. Their values are declared in
+# config/environments.yml -- keep the two in sync until this is replaced by a
+# call to agebd.subs (see the refactor plan, step 3).
### IOC
-sed -i "s/{{ *agebd_env_suffix_upper* }}/${AGEBD_ENV_SUFFIX_UPPER}/g" "${IOC_DIR}/"*
-sed -i "s/{{ *agebd_env_suffix_lower* }}/${AGEBD_ENV_SUFFIX_LOWER}/g" "${IOC_DIR}/"*
-sed -i "s/{{ *ioc_port* }}/${IOC_PORT}/g" "${IOC_DIR}/"*
+sed -i "s/@@[[:space:]]*agebd_env_suffix_upper[[:space:]]*@@/${AGEBD_ENV_SUFFIX_UPPER}/g" "${IOC_DIR}/"*
+sed -i "s/@@[[:space:]]*agebd_env_suffix_lower[[:space:]]*@@/${AGEBD_ENV_SUFFIX_LOWER}/g" "${IOC_DIR}/"*
+sed -i "s/@@[[:space:]]*ioc_port[[:space:]]*@@/${IOC_PORT}/g" "${IOC_DIR}/"*
### SYSTEMD
if [ -f "${SYSTEMD_UNIT_FILE_PATH}" ]; then
- sed -i "s/{{ *agebd_env* }}/${AGEBD_ENV}/g" "${SYSTEMD_UNIT_FILE_PATH}"
+ sed -i "s/@@[[:space:]]*agebd_env[[:space:]]*@@/${AGEBD_ENV}/g" "${SYSTEMD_UNIT_FILE_PATH}"
fi
diff --git a/.gitea/workflows/add-new-service.yml b/.gitea/workflows/add-new-service.yml
index 0d465d6..2a2aea7 100644
--- a/.gitea/workflows/add-new-service.yml
+++ b/.gitea/workflows/add-new-service.yml
@@ -23,6 +23,12 @@ jobs:
echo $UV_CACHE_DIR
uv run --directory cli pytest
+ # Includes check_subs: every @@token@@ the new service brought in must be
+ # declared in config/environments.yml and live in a rendered path.
+ - name: Run scripts tests
+ run: |
+ uv run --directory scripts pytest
+
- name: Parse Service Directory Name
id: parse_branch
# Uses bash shell parameter elimination to strip 'feature/add-service-' from the front
diff --git a/ansible/tasks/ioc/ioc-install.yml b/ansible/tasks/ioc/ioc-install.yml
index 225c2c7..d807ee4 100644
--- a/ansible/tasks/ioc/ioc-install.yml
+++ b/ansible/tasks/ioc/ioc-install.yml
@@ -32,22 +32,22 @@
cmd: "mv {{ ioc_base_dir }}/{{ orig_params_name }} {{ ioc_base_dir }}/{{ target_params_name }}"
removes: "{{ ioc_base_dir }}/{{ orig_params_name }}" # Only runs if the original file exists
-# Replace {{ agebd_env_suffix_upper }} inside the newly renamed subs file
+# Replace the @@agebd_env_suffix_upper@@ token inside the newly renamed subs file
- name: "[{{ target_service_name_lower }}] Substitute environment tokens inside subs file"
ansible.builtin.replace:
path: "{{ ioc_base_dir }}/{{ target_subs_name }}"
- regexp: '\{\{\s*agebd_env_suffix_upper\s*\}\}'
+ regexp: '@@\s*agebd_env_suffix_upper\s*@@'
replace: "{{ env_suffix_upper }}"
-# Replace {{ agebd_env_suffix_lower }} and {{ ioc_port }} inside the newly renamed params file
+# Replace the @@agebd_env_suffix_lower@@ and @@ioc_port@@ tokens inside the newly renamed params file
- name: "[{{ target_service_name_lower }}] Substitute environment token inside params file"
ansible.builtin.replace:
path: "{{ ioc_base_dir }}/{{ target_params_name }}"
regexp: "{{ item.regexp }}"
replace: "{{ item.replace | string }}"
with_items:
- - { regexp: '\{\{\s*agebd_env_suffix_lower\s*\}\}', replace: "{{ env_suffix_lower }}" }
- - { regexp: '\{\{\s*ioc_port\s*\}\}', replace: "{{ ioc_port }}" }
+ - { regexp: '@@\s*agebd_env_suffix_lower\s*@@', replace: "{{ env_suffix_lower }}" }
+ - { regexp: '@@\s*ioc_port\s*@@', replace: "{{ ioc_port }}" }
- name: "[{{ target_service_name_lower }}] Run ioc install"
ansible.builtin.shell:
diff --git a/ansible/tasks/service/service-deploy-and-restart.yml b/ansible/tasks/service/service-deploy-and-restart.yml
index 0d38c27..2380c7c 100644
--- a/ansible/tasks/service/service-deploy-and-restart.yml
+++ b/ansible/tasks/service/service-deploy-and-restart.yml
@@ -27,7 +27,7 @@
- name: "[{{ target_service_name_lower }}] Substitute environment variable inline"
ansible.builtin.replace:
path: "{{ svc_current_dir }}/systemd/{{ service_unit_name }}"
- regexp: '\{\{\s*agebd_env\s*\}\}'
+ regexp: '@@\s*agebd_env\s*@@'
replace: "{{ agebd_env }}"
# systemctl --user link --force "./{{ service_unit_name }}"
diff --git a/cli/src/models/master_ioc_subs.py b/cli/src/models/master_ioc_subs.py
index 80d1c82..6b6d67e 100644
--- a/cli/src/models/master_ioc_subs.py
+++ b/cli/src/models/master_ioc_subs.py
@@ -24,7 +24,7 @@ class MasterIocSubs(BaseModel):
Parses the configuration text and appends a new row before the closing bracket.
"""
quoted_service = f'"{service_name}"'
- new_row = f' {{ "{{{{ agebd_env_suffix_upper }}}}", {quoted_service:<22} , "{starton}", "{autooff}" }}'
+ new_row = f' {{ "@@agebd_env_suffix_upper@@", {quoted_service:<22} , "{starton}", "{autooff}" }}'
# Use regex to find the last closing curly brace of the configuration block
# This targets the line that contains only a lone closing brace, optional spaces, and maybe a comma/semicolon.
diff --git a/cli/tests/fixtures/expected_output/qt/A_BD_ServiceManager.ui b/cli/tests/fixtures/expected_output/qt/A_BD_ServiceManager.ui
index 389a057..4260a44 100644
--- a/cli/tests/fixtures/expected_output/qt/A_BD_ServiceManager.ui
+++ b/cli/tests/fixtures/expected_output/qt/A_BD_ServiceManager.ui
@@ -71,7 +71,7 @@ caLabel[statusTip="Operation"]{
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -106,7 +106,7 @@ caLabel[statusTip="Operation"]{
!A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF
@@ -586,7 +586,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ALIVE
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ALIVE
caLed::Alarm
@@ -602,7 +602,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-STARTTIME
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-STARTTIME
caLineEdit::Default
@@ -624,7 +624,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-STATUS
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-STATUS
caLineEdit::Default
@@ -646,7 +646,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-VERSION
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-VERSION
caLineEdit::Default
@@ -668,7 +668,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF
caChoice::Column
@@ -717,7 +717,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF-RB
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF-RB
caLed::Alarm
@@ -763,7 +763,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-CPCL-MASTER{{ agebd_env_suffix_upper }}:STATUS
+ AGEBD-CPCL-MASTER@@agebd_env_suffix_upper@@:STATUS
caLed::Alarm
@@ -1040,7 +1040,7 @@ caLabel[statusTip="Operation"]{
EPushButton::None
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:MASTER-LOGS-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:MASTER-LOGS-REQ
Logs
@@ -1106,7 +1106,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-GUIRELOAD
Reload
@@ -1172,7 +1172,7 @@ caLabel[statusTip="Operation"]{
EPushButton::None
- AGEBD-CPCL-MASTER{{ agebd_env_suffix_upper }}:RESTART
+ AGEBD-CPCL-MASTER@@agebd_env_suffix_upper@@:RESTART
↺
diff --git a/cli/tests/fixtures/expected_output/qt/A_BD_TestService99-X00.ui b/cli/tests/fixtures/expected_output/qt/A_BD_TestService99-X00.ui
index 3e964b9..b0cf93b 100644
--- a/cli/tests/fixtures/expected_output/qt/A_BD_TestService99-X00.ui
+++ b/cli/tests/fixtures/expected_output/qt/A_BD_TestService99-X00.ui
@@ -30,7 +30,7 @@
0
- AGEBD-TESTSERVICE99-X00{{ agebd_env_suffix_upper }}:AO
+ AGEBD-TESTSERVICE99-X00@@agebd_env_suffix_upper@@:AO
9.000000000000000
@@ -49,10 +49,10 @@
- Toggle AGEBD-ALH{{ agebd_env_suffix_upper }}:TESTSERVICE99-X00-ONOFF
+ Toggle AGEBD-ALH@@agebd_env_suffix_upper@@:TESTSERVICE99-X00-ONOFF
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TESTSERVICE99-X00-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TESTSERVICE99-X00-ONOFF
@@ -70,7 +70,7 @@
- Value of AGEBD-TESTSERVICE99-X00{{ agebd_env_suffix_upper }}:AO
+ Value of AGEBD-TESTSERVICE99-X00@@agebd_env_suffix_upper@@:AO
diff --git a/cli/tests/fixtures/expected_output/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs b/cli/tests/fixtures/expected_output/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
index cebcb97..a1754e8 100644
--- a/cli/tests/fixtures/expected_output/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
+++ b/cli/tests/fixtures/expected_output/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
@@ -1,5 +1,5 @@
file MASTER.template {
pattern { SUFFIX SERVICE STARTON AUTOOFF }
- { "{{ agebd_env_suffix_upper }}", "MASTER" , "0", "30" }
- { "{{ agebd_env_suffix_upper }}", "TESTSERVICE99-X00" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "MASTER" , "0", "30" }
+ { "@@agebd_env_suffix_upper@@", "TESTSERVICE99-X00" , "0", "0" }
}
diff --git a/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_main.subs b/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_main.subs
index ba42592..70d11d8 100644
--- a/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_main.subs
+++ b/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_main.subs
@@ -1,4 +1,4 @@
file TESTSERVICE99-X00.template {
pattern { DEVICE }
- { AGEBD-TESTSERVICE99-X00{{ agebd_env_suffix_upper }} }
+ { AGEBD-TESTSERVICE99-X00@@agebd_env_suffix_upper@@ }
}
diff --git a/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_parameters.yaml b/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_parameters.yaml
index c179f0d..24aa364 100644
--- a/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_parameters.yaml
+++ b/cli/tests/fixtures/expected_output/services/testservice99-x00/current/ioc/AGEBD-CPCL-TESTSERVICE99-X00_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/cli/tests/fixtures/expected_output/services/testservice99-x00/current/systemd/AGEBD-SERVICE-TESTSERVICE99-X00.service b/cli/tests/fixtures/expected_output/services/testservice99-x00/current/systemd/AGEBD-SERVICE-TESTSERVICE99-X00.service
index 496c48b..436985e 100644
--- a/cli/tests/fixtures/expected_output/services/testservice99-x00/current/systemd/AGEBD-SERVICE-TESTSERVICE99-X00.service
+++ b/cli/tests/fixtures/expected_output/services/testservice99-x00/current/systemd/AGEBD-SERVICE-TESTSERVICE99-X00.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TESTSERVICE99-X00
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TESTSERVICE99-X00
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TESTSERVICE99-X00
Restart=no
[Install]
diff --git a/cli/tests/fixtures/test_repo_root/qt/A_BD_ServiceManager.ui b/cli/tests/fixtures/test_repo_root/qt/A_BD_ServiceManager.ui
index c1b6561..d2c3936 100644
--- a/cli/tests/fixtures/test_repo_root/qt/A_BD_ServiceManager.ui
+++ b/cli/tests/fixtures/test_repo_root/qt/A_BD_ServiceManager.ui
@@ -71,7 +71,7 @@ caLabel[statusTip="Operation"]{
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -106,7 +106,7 @@ caLabel[statusTip="Operation"]{
!A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF
@@ -586,7 +586,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ALIVE
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ALIVE
caLed::Alarm
@@ -602,7 +602,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-STARTTIME
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-STARTTIME
caLineEdit::Default
@@ -624,7 +624,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-STATUS
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-STATUS
caLineEdit::Default
@@ -646,7 +646,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-VERSION
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-VERSION
caLineEdit::Default
@@ -668,7 +668,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF
caChoice::Column
@@ -717,7 +717,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF-RB
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF-RB
caLed::Alarm
@@ -763,7 +763,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-CPCL-MASTER{{ agebd_env_suffix_upper }}:STATUS
+ AGEBD-CPCL-MASTER@@agebd_env_suffix_upper@@:STATUS
caLed::Alarm
@@ -1040,7 +1040,7 @@ caLabel[statusTip="Operation"]{
EPushButton::None
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:MASTER-LOGS-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:MASTER-LOGS-REQ
Logs
@@ -1106,7 +1106,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-GUIRELOAD
Reload
@@ -1172,7 +1172,7 @@ caLabel[statusTip="Operation"]{
EPushButton::None
- AGEBD-CPCL-MASTER{{ agebd_env_suffix_upper }}:RESTART
+ AGEBD-CPCL-MASTER@@agebd_env_suffix_upper@@:RESTART
↺
diff --git a/cli/tests/fixtures/test_repo_root/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs b/cli/tests/fixtures/test_repo_root/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
index 6ccd171..6e28017 100644
--- a/cli/tests/fixtures/test_repo_root/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
+++ b/cli/tests/fixtures/test_repo_root/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
@@ -1,4 +1,4 @@
file MASTER.template {
pattern { SUFFIX SERVICE STARTON AUTOOFF }
- { "{{ agebd_env_suffix_upper }}", "MASTER" , "0", "30" }
+ { "@@agebd_env_suffix_upper@@", "MASTER" , "0", "30" }
}
diff --git a/cli/uv.lock b/cli/uv.lock
index d56b4cc..29a62ec 100644
--- a/cli/uv.lock
+++ b/cli/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
diff --git a/config/environments.yml b/config/environments.yml
new file mode 100644
index 0000000..bf3707a
--- /dev/null
+++ b/config/environments.yml
@@ -0,0 +1,79 @@
+# Single source of truth for every deploy-time substitution in this repo.
+#
+# There are two substitution stages, and they use different delimiters on
+# purpose:
+#
+# {{ token }} creation-time. Resolved once by copier when a new service is
+# created (cli/src/core/service_creator.py). Never survives
+# into a committed file.
+#
+# @@token@@ deploy-time. Resolved on every deploy, per environment, by
+# agebd.subs. Lives in committed files.
+#
+# This file declares the deploy-time stage only. scripts/ci/check_subs.py
+# enforces that every @@token@@ in the repo is declared here, and that it
+# only appears in a path that actually gets rendered.
+#
+# 'local' is deliberately absent: it is a runtime mode for tests without EPICS
+# access (see agebd.enums.AGEBD_ENV), not a deploy target.
+
+environments:
+ prod:
+ agebd_env: prod
+ agebd_env_suffix_upper: ""
+ agebd_env_suffix_lower: ""
+ dev:
+ agebd_env: dev
+ agebd_env_suffix_upper: "-DEV"
+ agebd_env_suffix_lower: "-dev"
+
+# Every deploy-time token. Each environment above must define exactly the
+# tokens with source 'environment' -- adding one here without adding it to
+# every environment is a load-time error.
+tokens:
+ agebd_env:
+ source: environment
+ description: >-
+ Deployment environment name. Used in deploy paths and systemd units,
+ e.g. /sls/bd/hla/dev/bin/start_service.sh.
+ agebd_env_suffix_upper:
+ source: environment
+ description: >-
+ Uppercase suffix appended to EPICS device names, e.g. AGEBD-TUNE-DEV.
+ Used in IOC substitution files and Qt UI files.
+ agebd_env_suffix_lower:
+ source: environment
+ description: >-
+ Lowercase suffix appended to host names, e.g. sls-vserv-bd-01-dev.
+ Used in IOC parameter files.
+ ioc_port:
+ source: registry
+ description: >-
+ IOC port for the service being deployed, read from
+ config/services_registry.yml.
+
+# Where deploy-time tokens are allowed to live, as repo-root-relative globs.
+locations:
+ # Rendered at deploy time by agebd.subs. A token here is resolved.
+ render:
+ - services/*/current/ioc
+ - services/*/current/systemd
+ - qt
+ # Carry deploy-time tokens verbatim, because the copy they produce lands in
+ # a render path. A token here is NOT resolved in place.
+ passthrough:
+ - templates
+ - cli/tests/fixtures
+ # The substitution machinery itself: code that renders, generates or
+ # documents tokens. Naming a token here is expected; nothing is resolved.
+ # These paths use {{ }} as their own template language (Ansible, copier), so
+ # the leftover-delimiter check does not apply to them.
+ references:
+ - ansible/tasks/*
+ - .gitea/scripts
+ - cli/src/models
+ - packages/agebd/src/agebd
+ - packages/agebd/tests
+ - scripts/ci
+ - scripts/tests
+ - config
diff --git a/packages/agebd/pyproject.toml b/packages/agebd/pyproject.toml
index 20a1b46..384fcf3 100644
--- a/packages/agebd/pyproject.toml
+++ b/packages/agebd/pyproject.toml
@@ -9,6 +9,7 @@ dependencies = [
"pyepics>=3.5.10",
"typer>=0.23.2",
"gitpython>=3.1.50",
+ "pyyaml>=6.0.3",
]
# Dev dependencies
diff --git a/packages/agebd/src/agebd/subs.py b/packages/agebd/src/agebd/subs.py
new file mode 100644
index 0000000..dd4b1e1
--- /dev/null
+++ b/packages/agebd/src/agebd/subs.py
@@ -0,0 +1,370 @@
+"""
+Single source of truth for deploy-time substitutions.
+
+Committed files carry deploy-time placeholders written as ``@@token@@``.
+This module is the only place that knows what those tokens resolve to.
+
+There are two substitution stages in this repo, and they use different
+delimiters on purpose:
+
+ ``{{ token }}`` creation-time. Resolved once by copier when a new
+ service is created (cli/src/core/service_creator.py).
+ Never survives into a committed file.
+
+ ``@@token@@`` deploy-time. Resolved on every deploy, per environment,
+ by this module. Lives in committed files.
+
+Token values come from two sources, both declared in config/environments.yml:
+
+ environment the per-environment table in config/environments.yml
+ registry config/services_registry.yml, per service
+
+Rendering is a strict regex substitution rather than a template engine. The
+rendered files are EPICS database/substitution files and Qt XML, which are
+full of braces and other characters a template engine would try to interpret;
+and a regex over declared token names gives an exact "unknown token in this
+file" error instead of silently leaving the placeholder in place -- which is
+the failure mode of the sed calls this module replaces.
+"""
+
+import os
+import re
+from dataclasses import dataclass, field
+from fnmatch import fnmatch
+from pathlib import Path
+from typing import Iterable, Iterator, Optional, Union
+
+import yaml
+
+from agebd.utils import get_git_root
+
+CONFIG_DIR_ENV_VAR = "AGEBD_CONFIG_DIR"
+ENVIRONMENTS_FILENAME = "environments.yml"
+SERVICES_REGISTRY_FILENAME = "services_registry.yml"
+
+ENVIRONMENT_SOURCE = "environment"
+REGISTRY_SOURCE = "registry"
+
+#: Deploy-time placeholder, e.g. ``@@agebd_env@@`` or ``@@agebd_env@@``.
+TOKEN_PATTERN = re.compile(r"@@\s*([a-z][a-z0-9_]*)\s*@@")
+
+#: The pre-migration deploy-time delimiters. Kept here so that the CI lint can
+#: spot files that were missed by the switch to ``@@token@@``.
+LEGACY_TOKEN_PATTERN = re.compile(r"\{\{\s*([a-z][a-z0-9_]*)\s*\}\}")
+
+
+class SubstitutionError(Exception):
+ """Base class for every error raised by this module."""
+
+
+class UnknownTokenError(SubstitutionError):
+ """A ``@@token@@`` was found that is not declared in environments.yml."""
+
+
+def resolve_config_dir(config_dir: Optional[Union[str, Path]] = None) -> Path:
+ """
+ Locate the directory holding environments.yml.
+
+ Explicit argument wins, then $AGEBD_CONFIG_DIR, then the config directory
+ of the surrounding git checkout. The env var is what deployed hosts use:
+ the deployed tree is not a git checkout.
+ """
+ if config_dir is not None:
+ return Path(config_dir)
+
+ from_env = os.environ.get(CONFIG_DIR_ENV_VAR)
+ if from_env:
+ return Path(from_env)
+
+ try:
+ return get_git_root(__file__) / "config"
+ except Exception as e:
+ raise SubstitutionError(
+ "Could not locate the config directory: agebd is not installed inside a git "
+ f"checkout. Set ${CONFIG_DIR_ENV_VAR} to the directory holding "
+ f"{ENVIRONMENTS_FILENAME}."
+ ) from e
+
+
+@dataclass(frozen=True)
+class TokenSpec:
+ name: str
+ source: str
+ description: str = ""
+
+
+@dataclass
+class SubstitutionsConfig:
+ """The parsed contents of config/environments.yml."""
+
+ config_dir: Path
+ environments: dict
+ tokens: dict
+ render_paths: tuple = ()
+ passthrough_paths: tuple = ()
+ reference_paths: tuple = ()
+
+ @property
+ def environments_file(self) -> Path:
+ return self.config_dir / ENVIRONMENTS_FILENAME
+
+ @property
+ def services_registry_file(self) -> Path:
+ return self.config_dir / SERVICES_REGISTRY_FILENAME
+
+ @classmethod
+ def load(cls, config_dir: Optional[Union[str, Path]] = None) -> "SubstitutionsConfig":
+ resolved_dir = resolve_config_dir(config_dir)
+ path = resolved_dir / ENVIRONMENTS_FILENAME
+ if not path.is_file():
+ raise SubstitutionError(f"No {ENVIRONMENTS_FILENAME} found at: {path}")
+
+ with open(path) as f:
+ raw = yaml.safe_load(f) or {}
+
+ tokens = {
+ name: TokenSpec(
+ name=name,
+ source=spec["source"],
+ description=spec.get("description", ""),
+ )
+ for name, spec in (raw.get("tokens") or {}).items()
+ }
+ locations = raw.get("locations") or {}
+
+ config = cls(
+ config_dir=resolved_dir,
+ environments=raw.get("environments") or {},
+ tokens=tokens,
+ render_paths=tuple(locations.get("render") or ()),
+ passthrough_paths=tuple(locations.get("passthrough") or ()),
+ reference_paths=tuple(locations.get("references") or ()),
+ )
+ config.assert_valid()
+ return config
+
+ def assert_valid(self) -> None:
+ """
+ Every environment must define exactly the tokens sourced from the
+ environment table -- no more, no less. This is what stops a new token
+ from being added for dev but forgotten for prod.
+ """
+ if not self.environments:
+ raise SubstitutionError(f"No environments declared in {self.environments_file}")
+
+ for name, spec in self.tokens.items():
+ if spec.source not in (ENVIRONMENT_SOURCE, REGISTRY_SOURCE):
+ raise SubstitutionError(
+ f"Token '{name}' in {self.environments_file} has unknown source "
+ f"'{spec.source}'. Expected '{ENVIRONMENT_SOURCE}' or '{REGISTRY_SOURCE}'."
+ )
+
+ expected = self.environment_token_names()
+ for env_name, values in self.environments.items():
+ declared = set(values)
+ missing = expected - declared
+ unexpected = declared - expected
+ if missing:
+ raise SubstitutionError(
+ f"Environment '{env_name}' in {self.environments_file} is missing "
+ f"token(s): {', '.join(sorted(missing))}"
+ )
+ if unexpected:
+ raise SubstitutionError(
+ f"Environment '{env_name}' in {self.environments_file} defines "
+ f"token(s) that are not declared under 'tokens': "
+ f"{', '.join(sorted(unexpected))}"
+ )
+
+ def environment_token_names(self) -> set:
+ return {n for n, spec in self.tokens.items() if spec.source == ENVIRONMENT_SOURCE}
+
+ def registry_token_names(self) -> set:
+ return {n for n, spec in self.tokens.items() if spec.source == REGISTRY_SOURCE}
+
+ def assert_environment_exists(self, env: str) -> dict:
+ try:
+ return self.environments[env]
+ except KeyError:
+ known = ", ".join(sorted(self.environments))
+ raise SubstitutionError(
+ f"Unknown environment '{env}'. Declared in {self.environments_file}: {known}"
+ ) from None
+
+ def expand_render_paths(self, repo_root: Union[str, Path]) -> list:
+ """
+ Resolve the 'render' globs against a checkout, keeping only what exists.
+ """
+ root = Path(repo_root)
+ found = []
+ for pattern in self.render_paths:
+ found.extend(sorted(p for p in root.glob(pattern) if p.is_dir()))
+ return found
+
+ def is_render_path(self, rel_path: Union[str, Path]) -> bool:
+ return _is_under_any(Path(rel_path), self.render_paths)
+
+ def is_passthrough_path(self, rel_path: Union[str, Path]) -> bool:
+ return _is_under_any(Path(rel_path), self.passthrough_paths)
+
+ def is_reference_path(self, rel_path: Union[str, Path]) -> bool:
+ """
+ True for the substitution machinery itself -- code that renders,
+ generates or documents tokens rather than carrying them.
+ """
+ return _is_under_any(Path(rel_path), self.reference_paths)
+
+
+@dataclass
+class Substitutions:
+ """
+ Resolved deploy-time token values for one environment, and optionally for
+ one service.
+ """
+
+ values: dict = field(default_factory=dict)
+ config: Optional[SubstitutionsConfig] = None
+
+ @classmethod
+ def for_env(cls, env: str, config_dir: Optional[Union[str, Path]] = None) -> "Substitutions":
+ """
+ Tokens that depend only on the environment. Rendering a file that also
+ needs a registry token (``ioc_port``) with this will raise -- use
+ :meth:`for_service`.
+ """
+ config = SubstitutionsConfig.load(config_dir)
+ return cls(values=dict(config.assert_environment_exists(str(env))), config=config)
+
+ @classmethod
+ def for_service(
+ cls, env: str, service_name: str, config_dir: Optional[Union[str, Path]] = None
+ ) -> "Substitutions":
+ """
+ Every deploy-time token, for one service in one environment.
+ """
+ subs = cls.for_env(env, config_dir=config_dir)
+ assert subs.config is not None
+ if "ioc_port" in subs.config.registry_token_names():
+ subs.values["ioc_port"] = str(
+ read_ioc_port(subs.config.services_registry_file, service_name)
+ )
+ return subs
+
+ def __getitem__(self, token: str) -> str:
+ try:
+ return self.values[token]
+ except KeyError:
+ raise UnknownTokenError(self._unknown_token_message(token)) from None
+
+ def __contains__(self, token: str) -> bool:
+ return token in self.values
+
+ def render_text(self, text: str, origin: Optional[Union[str, Path]] = None) -> str:
+ """
+ Replace every ``@@token@@`` in ``text``. Raises on an undeclared or
+ misspelled token rather than leaving it in the output.
+ """
+
+ def replace(match: "re.Match") -> str:
+ token = match.group(1)
+ if token not in self.values:
+ raise UnknownTokenError(self._unknown_token_message(token, origin=origin))
+ return self.values[token]
+
+ return TOKEN_PATTERN.sub(replace, text)
+
+ def render_file(self, path: Union[str, Path]) -> bool:
+ """
+ Render one file in place. Returns True if the file changed.
+ """
+ path = Path(path)
+ original = path.read_text()
+ rendered = self.render_text(original, origin=path)
+ if rendered == original:
+ return False
+ path.write_text(rendered)
+ return True
+
+ def render_tree(self, root: Union[str, Path]) -> list:
+ """
+ Render every text file under ``root`` in place. Returns the files that
+ changed.
+ """
+ return [path for path in iter_text_files(root) if self.render_file(path)]
+
+ def _unknown_token_message(self, token: str, origin: Optional[Union[str, Path]] = None) -> str:
+ where = f" in {origin}" if origin else ""
+ known = ", ".join(sorted(self.values)) or "(none)"
+ declared_in = self.config.environments_file if self.config else ENVIRONMENTS_FILENAME
+ return (
+ f"Unknown deploy-time token '@@{token}@@'{where}. "
+ f"Declare it in {declared_in}, or fix the spelling. "
+ f"Available here: {known}."
+ )
+
+
+def read_ioc_port(registry_file: Union[str, Path], service_name: str) -> int:
+ """
+ Look up a service's IOC port in the services registry.
+
+ Registry names are CamelCase; callers pass whatever casing they have, so
+ the comparison is case-insensitive.
+ """
+ with open(registry_file) as f:
+ registry = yaml.safe_load(f) or {}
+
+ wanted = service_name.lower()
+ for entry in registry.get("services") or []:
+ if str(entry.get("name", "")).lower() == wanted:
+ return entry["ioc_port"]
+
+ raise SubstitutionError(f"Service '{service_name}' not found in {registry_file}")
+
+
+def find_tokens(text: str) -> set:
+ """Every deploy-time token name appearing in ``text``."""
+ return set(TOKEN_PATTERN.findall(text))
+
+
+def find_legacy_tokens(text: str) -> set:
+ """Every pre-migration ``{{ token }}`` name appearing in ``text``."""
+ return set(LEGACY_TOKEN_PATTERN.findall(text))
+
+
+SKIPPED_DIRS = frozenset(
+ {".git", ".venv", ".pixi", ".cache", ".pytest_cache", ".ruff_cache", "__pycache__"}
+)
+
+
+def iter_text_files(root: Union[str, Path]) -> Iterator[Path]:
+ """
+ Yield readable text files under ``root``, skipping build/cache directories
+ and anything that is not valid UTF-8.
+ """
+ for path in sorted(Path(root).rglob("*")):
+ if not path.is_file():
+ continue
+ if SKIPPED_DIRS.intersection(path.parts):
+ continue
+ try:
+ path.read_text()
+ except (UnicodeDecodeError, OSError):
+ continue
+ yield path
+
+
+def _is_under_any(rel_path: Path, patterns: Iterable) -> bool:
+ """
+ True if ``rel_path`` itself, or any of its parent directories, matches one
+ of the repo-root-relative directory globs in ``patterns``.
+ """
+ candidates = [rel_path] + [p for p in rel_path.parents if str(p) != "."]
+ for pattern in patterns:
+ pattern_parts = Path(pattern).parts
+ for candidate in candidates:
+ parts = candidate.parts
+ if len(parts) == len(pattern_parts) and all(
+ fnmatch(part, pat) for part, pat in zip(parts, pattern_parts)
+ ):
+ return True
+ return False
diff --git a/packages/agebd/tests/test_subs.py b/packages/agebd/tests/test_subs.py
new file mode 100644
index 0000000..f909544
--- /dev/null
+++ b/packages/agebd/tests/test_subs.py
@@ -0,0 +1,217 @@
+import pytest
+import yaml
+
+from agebd.subs import (
+ SubstitutionError,
+ Substitutions,
+ SubstitutionsConfig,
+ UnknownTokenError,
+ find_legacy_tokens,
+ find_tokens,
+ read_ioc_port,
+)
+
+ENVIRONMENTS = {
+ "environments": {
+ "prod": {
+ "agebd_env": "prod",
+ "agebd_env_suffix_upper": "",
+ "agebd_env_suffix_lower": "",
+ },
+ "dev": {
+ "agebd_env": "dev",
+ "agebd_env_suffix_upper": "-DEV",
+ "agebd_env_suffix_lower": "-dev",
+ },
+ },
+ "tokens": {
+ "agebd_env": {"source": "environment", "description": "env name"},
+ "agebd_env_suffix_upper": {"source": "environment", "description": "upper suffix"},
+ "agebd_env_suffix_lower": {"source": "environment", "description": "lower suffix"},
+ "ioc_port": {"source": "registry", "description": "ioc port"},
+ },
+ "locations": {
+ "render": ["services/*/current/ioc", "qt"],
+ "passthrough": ["templates"],
+ },
+}
+
+REGISTRY = {
+ "next_available_ioc_port": 50002,
+ "services": [
+ {"name": "Master", "ioc_port": 50000, "status": "active"},
+ {"name": "TauBPM", "ioc_port": 50001, "status": "active"},
+ ],
+}
+
+
+@pytest.fixture
+def config_dir(tmp_path):
+ (tmp_path / "environments.yml").write_text(yaml.safe_dump(ENVIRONMENTS))
+ (tmp_path / "services_registry.yml").write_text(yaml.safe_dump(REGISTRY))
+ return tmp_path
+
+
+def write_environments(config_dir, environments):
+ (config_dir / "environments.yml").write_text(yaml.safe_dump(environments))
+
+
+def test_for_env_resolves_environment_tokens(config_dir):
+ subs = Substitutions.for_env("dev", config_dir=config_dir)
+
+ assert subs["agebd_env"] == "dev"
+ assert subs["agebd_env_suffix_upper"] == "-DEV"
+ assert subs["agebd_env_suffix_lower"] == "-dev"
+
+
+def test_prod_suffixes_are_empty(config_dir):
+ subs = Substitutions.for_env("prod", config_dir=config_dir)
+
+ assert subs.render_text("AGEBD-TUNE@@agebd_env_suffix_upper@@:AO") == "AGEBD-TUNE:AO"
+
+
+def test_for_service_adds_ioc_port(config_dir):
+ subs = Substitutions.for_service("dev", "taubpm", config_dir=config_dir)
+
+ assert subs["ioc_port"] == "50001"
+
+
+def test_render_text_substitutes_every_occurrence(config_dir):
+ subs = Substitutions.for_env("dev", config_dir=config_dir)
+
+ text = "AGEBD-ALH@@agebd_env_suffix_upper@@:X\nsls-vserv-bd-01@@agebd_env_suffix_lower@@\n"
+
+ assert subs.render_text(text) == "AGEBD-ALH-DEV:X\nsls-vserv-bd-01-dev\n"
+
+
+def test_render_text_raises_on_misspelled_token(config_dir):
+ subs = Substitutions.for_env("dev", config_dir=config_dir)
+
+ with pytest.raises(UnknownTokenError, match="agebd_env_sufix_upper"):
+ subs.render_text("AGEBD-TUNE@@agebd_env_sufix_upper@@:AO", origin="TUNE.subs")
+
+
+def test_render_text_raises_when_registry_token_is_not_loaded(config_dir):
+ """for_env() has no ioc_port, so a parameters file must fail loudly."""
+ subs = Substitutions.for_env("dev", config_dir=config_dir)
+
+ with pytest.raises(UnknownTokenError, match="ioc_port"):
+ subs.render_text("ioc_port: @@ioc_port@@")
+
+
+def test_render_file_reports_whether_it_changed(config_dir, tmp_path):
+ subs = Substitutions.for_env("dev", config_dir=config_dir)
+ path = tmp_path / "AGEBD-CPCL-TUNE_main.subs"
+ path.write_text("{ AGEBD-TUNE@@agebd_env_suffix_upper@@ }\n")
+
+ assert subs.render_file(path) is True
+ assert path.read_text() == "{ AGEBD-TUNE-DEV }\n"
+ assert subs.render_file(path) is False
+
+
+def test_render_tree_skips_cache_directories(config_dir, tmp_path):
+ subs = Substitutions.for_env("dev", config_dir=config_dir)
+ (tmp_path / "ioc").mkdir()
+ (tmp_path / "ioc" / "a.subs").write_text("AGEBD-A@@agebd_env_suffix_upper@@")
+ (tmp_path / "__pycache__").mkdir()
+ (tmp_path / "__pycache__" / "b.subs").write_text("AGEBD-B@@agebd_env_suffix_upper@@")
+
+ changed = subs.render_tree(tmp_path)
+
+ assert [p.name for p in changed] == ["a.subs"]
+ assert (tmp_path / "__pycache__" / "b.subs").read_text().endswith("@@agebd_env_suffix_upper@@")
+
+
+def test_replacement_value_is_literal(config_dir):
+ """A value containing regex backreference syntax must not be interpreted."""
+ environments = yaml.safe_load(yaml.safe_dump(ENVIRONMENTS))
+ environments["environments"]["dev"]["agebd_env_suffix_upper"] = r"-\1DEV"
+ write_environments(config_dir, environments)
+
+ subs = Substitutions.for_env("dev", config_dir=config_dir)
+
+ assert subs.render_text("AGEBD-A@@agebd_env_suffix_upper@@") == r"AGEBD-A-\1DEV"
+
+
+def test_unknown_environment_lists_the_known_ones(config_dir):
+ with pytest.raises(SubstitutionError, match="dev, prod"):
+ Substitutions.for_env("staging", config_dir=config_dir)
+
+
+def test_token_missing_from_one_environment_is_a_load_error(config_dir):
+ environments = yaml.safe_load(yaml.safe_dump(ENVIRONMENTS))
+ del environments["environments"]["prod"]["agebd_env_suffix_lower"]
+ write_environments(config_dir, environments)
+
+ with pytest.raises(SubstitutionError, match="missing token"):
+ SubstitutionsConfig.load(config_dir)
+
+
+def test_undeclared_token_in_an_environment_is_a_load_error(config_dir):
+ environments = yaml.safe_load(yaml.safe_dump(ENVIRONMENTS))
+ environments["environments"]["dev"]["agebd_env_suffix_mixed"] = "-Dev"
+ write_environments(config_dir, environments)
+
+ with pytest.raises(SubstitutionError, match="not declared"):
+ SubstitutionsConfig.load(config_dir)
+
+
+def test_unknown_token_source_is_a_load_error(config_dir):
+ environments = yaml.safe_load(yaml.safe_dump(ENVIRONMENTS))
+ environments["tokens"]["ioc_port"]["source"] = "somewhere"
+ write_environments(config_dir, environments)
+
+ with pytest.raises(SubstitutionError, match="unknown source"):
+ SubstitutionsConfig.load(config_dir)
+
+
+def test_read_ioc_port_is_case_insensitive(config_dir):
+ registry_file = config_dir / "services_registry.yml"
+
+ assert read_ioc_port(registry_file, "taubpm") == 50001
+ assert read_ioc_port(registry_file, "TauBPM") == 50001
+ assert read_ioc_port(registry_file, "TAUBPM") == 50001
+
+
+def test_read_ioc_port_raises_for_unknown_service(config_dir):
+ with pytest.raises(SubstitutionError, match="Nope"):
+ read_ioc_port(config_dir / "services_registry.yml", "Nope")
+
+
+def test_path_classification(config_dir):
+ config = SubstitutionsConfig.load(config_dir)
+
+ assert config.is_render_path("services/tune/current/ioc/TUNE.template")
+ assert config.is_render_path("qt/A_BD_Tune.ui")
+ assert config.is_passthrough_path("templates/service/x/current/ioc/a.jinja")
+ assert not config.is_render_path("services/tune/current/app/src/main.py")
+ assert not config.is_passthrough_path("services/tune/current/app/src/main.py")
+
+
+def test_expand_render_paths(config_dir, tmp_path):
+ config = SubstitutionsConfig.load(config_dir)
+ repo = tmp_path / "repo"
+ (repo / "services" / "tune" / "current" / "ioc").mkdir(parents=True)
+ (repo / "services" / "tune" / "current" / "app").mkdir(parents=True)
+ (repo / "qt").mkdir()
+
+ expanded = {p.relative_to(repo).as_posix() for p in config.expand_render_paths(repo)}
+
+ assert expanded == {"services/tune/current/ioc", "qt"}
+
+
+def test_find_tokens_ignores_non_token_angle_brackets():
+ assert find_tokens("@@b@@ and @@agebd_env@@") == {"b", "agebd_env"}
+ assert find_tokens("user@@example.com") == set()
+ assert find_tokens("@@ NotAToken @@") == set()
+
+
+def test_find_legacy_tokens_returns_both_stages():
+ """
+ It cannot tell the two stages apart on syntax alone -- callers intersect
+ the result with the declared deploy-time tokens.
+ """
+ assert find_legacy_tokens("{{ agebd_env_suffix_upper }} {{service_name_upper}}") == {
+ "agebd_env_suffix_upper",
+ "service_name_upper",
+ }
diff --git a/packages/agebd/uv.lock b/packages/agebd/uv.lock
index 1f758ce..11ec0f8 100644
--- a/packages/agebd/uv.lock
+++ b/packages/agebd/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -28,6 +29,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -532,6 +534,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "readme-renderer"
version = "45.0"
diff --git a/qt/A_BD_DBPM3Curr.ui b/qt/A_BD_DBPM3Curr.ui
index 288be53..5cc52db 100644
--- a/qt/A_BD_DBPM3Curr.ui
+++ b/qt/A_BD_DBPM3Curr.ui
@@ -43,7 +43,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:DBPM3CURR-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:DBPM3CURR-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -185,7 +185,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CHARGE-AVG
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CHARGE-AVG
@@ -245,7 +245,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CURRENT-AVG
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CURRENT-AVG
@@ -305,7 +305,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:ACCUMULATED-BEAM-DOSE
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:ACCUMULATED-BEAM-DOSE
@@ -521,7 +521,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CURRENT-AVG.EGU
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CURRENT-AVG.EGU
@@ -581,7 +581,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CHARGE-AVG.EGU
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CHARGE-AVG.EGU
@@ -641,7 +641,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:ACCUMULATED-BEAM-DOSE.EGU
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:ACCUMULATED-BEAM-DOSE.EGU
@@ -755,7 +755,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:DBPM3CURR-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:DBPM3CURR-ONOFF
caChoice::Column
@@ -796,7 +796,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CALIBRATION-DBPM3-2-PCT-NEW
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CALIBRATION-DBPM3-2-PCT-NEW
@@ -853,7 +853,7 @@
Calculate New Calibration Factor
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CONTROL-RECALIBRATE
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CONTROL-RECALIBRATE
Calculate New Calibration Factor
@@ -872,7 +872,7 @@
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CONTROL-RECALIBRATE-NPTS
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CONTROL-RECALIBRATE-NPTS
0
@@ -894,7 +894,7 @@
Apply New Calibration Factor
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CONTROL-RECALIBRATE-APPLY
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CONTROL-RECALIBRATE-APPLY
Apply New Calibration Factor
@@ -922,7 +922,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:CALIBRATION-DBPM3-2-PCT
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:CALIBRATION-DBPM3-2-PCT
@@ -1118,7 +1118,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:ACCUMULATED-BEAM-DOSE-PCT
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:ACCUMULATED-BEAM-DOSE-PCT
@@ -1194,7 +1194,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }}:ACCUMULATED-BEAM-DOSE-PCT.EGU
+ AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@:ACCUMULATED-BEAM-DOSE-PCT.EGU
diff --git a/qt/A_BD_FeedBackOverview.ui b/qt/A_BD_FeedBackOverview.ui
index afac466..d58b54a 100644
--- a/qt/A_BD_FeedBackOverview.ui
+++ b/qt/A_BD_FeedBackOverview.ui
@@ -106,7 +106,7 @@ caLabel[statusTip="Operation"]{
- name=Orbit Feedback,alive=ARSGE-CECL-FOFB1:FOFB-OPERATE,panelcmd=A_DI_FOFB_CECL_USER.ui;name=Hor. Tune Feedback,onoff=AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBX-ONOFF,alive=AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBX-ALIVE,panelcmd=A_BD_TuneBump.ui;name=Ver. Tune Feedback,onoff=AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBY-ONOFF,alive=AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBY-ALIVE,panelcmd=A_BD_TuneBump.ui
+ name=Orbit Feedback,alive=ARSGE-CECL-FOFB1:FOFB-OPERATE,panelcmd=A_DI_FOFB_CECL_USER.ui;name=Hor. Tune Feedback,onoff=AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBX-ONOFF,alive=AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBX-ALIVE,panelcmd=A_BD_TuneBump.ui;name=Ver. Tune Feedback,onoff=AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBY-ONOFF,alive=AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBY-ALIVE,panelcmd=A_BD_TuneBump.ui
A_BD_FeedBackOverview_inc.ui
diff --git a/qt/A_BD_InjectionGuard.ui b/qt/A_BD_InjectionGuard.ui
index 4393d06..7328d5e 100644
--- a/qt/A_BD_InjectionGuard.ui
+++ b/qt/A_BD_InjectionGuard.ui
@@ -66,7 +66,7 @@ caLabel[statusTip="Operation"]{
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:INJECTIONGUARD-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:INJECTIONGUARD-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -89,7 +89,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CONTROL-MODE
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CONTROL-MODE
@@ -125,7 +125,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-SUM
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-SUM
caLineEdit::Alarm_Default
@@ -405,7 +405,7 @@ caLabel[statusTip="Operation"]{
30
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:STATUS-SECRET-MASTER
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:STATUS-SECRET-MASTER
caLed::Alarm
@@ -547,7 +547,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignCenter
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-SUM-OP
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-SUM-OP
caLineEdit::Alarm_Default
@@ -617,7 +617,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignCenter
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-SUM-MD
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-SUM-MD
caLineEdit::Alarm_Default
@@ -696,7 +696,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignCenter
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-SUM-LATCH
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-SUM-LATCH
caLineEdit::Alarm_Default
@@ -724,7 +724,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:RESET-LATCHES
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:RESET-LATCHES
Reset
@@ -771,7 +771,7 @@ caLabel[statusTip="Operation"]{
Qt::ScrollBarAsNeeded
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:LOG
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:LOG
caMultiLineString::None
@@ -790,7 +790,7 @@ caLabel[statusTip="Operation"]{
Clear Logs
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:LOG-CLEAR
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:LOG-CLEAR
Clear Logs
@@ -819,7 +819,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:LOG-PAUSE
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:LOG-PAUSE
diff --git a/qt/A_BD_InjectionGuard_inc.ui b/qt/A_BD_InjectionGuard_inc.ui
index 12b4b31..f81722a 100644
--- a/qt/A_BD_InjectionGuard_inc.ui
+++ b/qt/A_BD_InjectionGuard_inc.ui
@@ -30,7 +30,7 @@
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CONTROL-BRIDGE-CHECK-$(checknr)
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CONTROL-BRIDGE-CHECK-$(checknr)
@@ -62,7 +62,7 @@
false
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-$(checknr)
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-$(checknr)
caLed::Alarm
@@ -81,7 +81,7 @@
false
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-$(checknr)-MD
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-$(checknr)-MD
caLed::Alarm
@@ -110,7 +110,7 @@
true
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-$(checknr).DESC
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-$(checknr).DESC
@@ -170,7 +170,7 @@
false
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CHECK-$(checknr)-LATCH
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CHECK-$(checknr)-LATCH
caLed::Alarm
@@ -199,7 +199,7 @@
20
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:CONTROL-BRIDGE-CHECK-$(checknr)
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:CONTROL-BRIDGE-CHECK-$(checknr)
caLed::Alarm
diff --git a/qt/A_BD_Master.ui b/qt/A_BD_Master.ui
index 96b5a3c..229928e 100644
--- a/qt/A_BD_Master.ui
+++ b/qt/A_BD_Master.ui
@@ -43,7 +43,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -62,7 +62,7 @@
Clear Logs
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:LOG-CLEAR
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:LOG-CLEAR
Clear Logs
@@ -94,7 +94,7 @@
Get Systemd Status for each Service
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:GET-SYSTEMD-STATUS
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:GET-SYSTEMD-STATUS
Get Systemd Status for each Service
@@ -151,7 +151,7 @@
true
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:LOG
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:LOG
caLineEdit::User
diff --git a/qt/A_BD_NTurns.ui b/qt/A_BD_NTurns.ui
index 0921764..dc4479a 100644
--- a/qt/A_BD_NTurns.ui
+++ b/qt/A_BD_NTurns.ui
@@ -24,7 +24,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:NTURNS-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:NTURNS-ONOFF
caChoice::Column
@@ -62,7 +62,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:NTURNS-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:NTURNS-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -202,7 +202,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:CONTROL-80-NPOINTS
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:CONTROL-80-NPOINTS
caLineEdit::User
@@ -218,7 +218,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:CONTROL-80-MINHEIGHT
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:CONTROL-80-MINHEIGHT
@@ -231,7 +231,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:CONTROL-80-MINSEP
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:CONTROL-80-MINSEP
@@ -292,7 +292,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:CONTROL-2K-MINSEP
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:CONTROL-2K-MINSEP
@@ -305,7 +305,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:CONTROL-2K-MINHEIGHT
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:CONTROL-2K-MINHEIGHT
@@ -318,7 +318,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:CONTROL-2K-NPOINTS
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:CONTROL-2K-NPOINTS
caLineEdit::User
@@ -388,7 +388,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:STAGE0-Q-80TURNS
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:STAGE0-Q-80TURNS
@@ -448,7 +448,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:STAGE0-Q-2KTURNS
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:STAGE0-Q-2KTURNS
@@ -526,7 +526,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:BPM-WF-ENUMERATE;AGEBD-NTURNS{{ agebd_env_suffix_upper }}:STAGE0-Q-80TURNS-WF
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:BPM-WF-ENUMERATE;AGEBD-NTURNS@@agebd_env_suffix_upper@@:STAGE0-Q-80TURNS-WF
caCartesianPlot::Lines
@@ -542,7 +542,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:BPM-WF-ENUMERATE;AGEBD-NTURNS{{ agebd_env_suffix_upper }}:STAGE0-Q-80TURNS-PEAKS
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:BPM-WF-ENUMERATE;AGEBD-NTURNS@@agebd_env_suffix_upper@@:STAGE0-Q-80TURNS-PEAKS
caCartesianPlot::Sticks
@@ -582,7 +582,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:BPM-WF-ENUMERATE;AGEBD-NTURNS{{ agebd_env_suffix_upper }}:STAGE0-Q-2KTURNS-WF
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:BPM-WF-ENUMERATE;AGEBD-NTURNS@@agebd_env_suffix_upper@@:STAGE0-Q-2KTURNS-WF
caCartesianPlot::Lines
@@ -598,7 +598,7 @@
- AGEBD-NTURNS{{ agebd_env_suffix_upper }}:BPM-WF-ENUMERATE;AGEBD-NTURNS{{ agebd_env_suffix_upper }}:STAGE0-Q-80TURNS-PEAKS;
+ AGEBD-NTURNS@@agebd_env_suffix_upper@@:BPM-WF-ENUMERATE;AGEBD-NTURNS@@agebd_env_suffix_upper@@:STAGE0-Q-80TURNS-PEAKS;
caCartesianPlot::Sticks
diff --git a/qt/A_BD_OrbitBump.ui b/qt/A_BD_OrbitBump.ui
index 64c3c4e..2a17f88 100644
--- a/qt/A_BD_OrbitBump.ui
+++ b/qt/A_BD_OrbitBump.ui
@@ -328,7 +328,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:ORBITBUMP-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:ORBITBUMP-GUIRELOAD
caCalc::TriggerZeroToOne
diff --git a/qt/A_BD_OrbitBump_ExpertBackUp.ui b/qt/A_BD_OrbitBump_ExpertBackUp.ui
index 18fac9c..3b52e13 100644
--- a/qt/A_BD_OrbitBump_ExpertBackUp.ui
+++ b/qt/A_BD_OrbitBump_ExpertBackUp.ui
@@ -31,7 +31,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:BEAMLINE-BEND
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:BEAMLINE-BEND
@@ -64,7 +64,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:BEAMLINECALC
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:BEAMLINECALC
caLineEdit::Default
@@ -86,7 +86,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:BEAMLINETYPE-BEND
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:BEAMLINETYPE-BEND
caLineEdit::Default
@@ -108,7 +108,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:BEAMLINETYPE
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:BEAMLINETYPE
caLineEdit::Default
@@ -130,7 +130,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:BEAMLINETYPE-ID
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:BEAMLINETYPE-ID
caLineEdit::Default
@@ -152,7 +152,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:BEAMLINE
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:BEAMLINE
caLineEdit::Default
diff --git a/qt/A_BD_OrbitBump_Expert_inc.ui b/qt/A_BD_OrbitBump_Expert_inc.ui
index 1d0a058..105d90e 100644
--- a/qt/A_BD_OrbitBump_Expert_inc.ui
+++ b/qt/A_BD_OrbitBump_Expert_inc.ui
@@ -24,7 +24,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAX-BPM1
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAX-BPM1
@@ -37,7 +37,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAY-BPM1
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAY-BPM1
@@ -50,7 +50,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAX-BPM2
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAX-BPM2
@@ -63,7 +63,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAY-BPM2
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAY-BPM2
@@ -82,7 +82,7 @@
0
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-X
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-X
caSpinbox::Alarm
@@ -116,7 +116,7 @@
0
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-XP
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-XP
caSpinbox::Alarm
@@ -150,7 +150,7 @@
0
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-YP
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-YP
caSpinbox::Alarm
@@ -184,7 +184,7 @@
0
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-Y
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-Y
caSpinbox::Alarm
@@ -212,7 +212,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAX-BPM4
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAX-BPM4
@@ -225,7 +225,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAY-BPM3
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAY-BPM3
@@ -238,7 +238,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAY-BPM4
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAY-BPM4
@@ -251,7 +251,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-DELTAX-BPM3
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-DELTAX-BPM3
@@ -264,7 +264,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-BPM1
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-BPM1
@@ -277,7 +277,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-BPM2
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-BPM2
@@ -290,7 +290,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-BPM3
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-BPM3
@@ -303,7 +303,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-BPM4
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-BPM4
@@ -475,7 +475,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-X-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-X-TOTAL
caLineEdit::Alarm_Default
@@ -497,7 +497,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-Y-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-Y-TOTAL
caLineEdit::Alarm_Default
@@ -516,7 +516,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-YP-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-YP-TOTAL
caLineEdit::Alarm_Default
@@ -535,7 +535,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-XP-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-XP-TOTAL
caLineEdit::Alarm_Default
diff --git a/qt/A_BD_OrbitBump_Operator_inc.ui b/qt/A_BD_OrbitBump_Operator_inc.ui
index 3d59a56..8c18013 100644
--- a/qt/A_BD_OrbitBump_Operator_inc.ui
+++ b/qt/A_BD_OrbitBump_Operator_inc.ui
@@ -37,7 +37,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-X-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-X-TOTAL
caLineEdit::Alarm_Default
@@ -59,7 +59,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-XP-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-XP-TOTAL
caLineEdit::Alarm_Default
@@ -78,7 +78,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-Y-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-Y-TOTAL
caLineEdit::Alarm_Default
@@ -97,7 +97,7 @@
- AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }}:$(sourcepoint)-OFFSET-YP-TOTAL
+ AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@:$(sourcepoint)-OFFSET-YP-TOTAL
caLineEdit::Alarm_Default
diff --git a/qt/A_BD_PostMortemLog.ui b/qt/A_BD_PostMortemLog.ui
index bf7f8f7..658cfab 100644
--- a/qt/A_BD_PostMortemLog.ui
+++ b/qt/A_BD_PostMortemLog.ui
@@ -52,7 +52,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:POSTMORTEMLOG-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:POSTMORTEMLOG-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -74,7 +74,7 @@
true
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:LOG
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:LOG
@@ -106,7 +106,7 @@
Horizontal Tune (nominal: Qx = 39.37)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-QX
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-QX
@@ -179,7 +179,7 @@
Vertival Tune (nominal: Qy = 15.22)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-QY
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-QY
@@ -252,7 +252,7 @@
Vertival Beam Size (nominal: Sig_y = 10)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X01DD-SIGY
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X01DD-SIGY
@@ -262,7 +262,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X08DB-SIGY
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X08DB-SIGY
caCartesianPlot::Lines
@@ -332,7 +332,7 @@
Horizontal Beam Size (nominal: Sig_x = 9)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X01DD-SIGX
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X01DD-SIGX
@@ -342,7 +342,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X08DB-SIGX
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X08DB-SIGX
caCartesianPlot::Lines
@@ -412,7 +412,7 @@
Stored Beam Current
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-CURRPCT
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-CURRPCT
@@ -422,7 +422,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-CURRBPM
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-CURRBPM
caCartesianPlot::Lines
@@ -492,7 +492,7 @@
Beam Lifetime
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TAUBPM
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TAUBPM
caCartesianPlot::FatDots
@@ -505,7 +505,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TAUPCT
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TAUPCT
caCartesianPlot::FatDots
@@ -580,7 +580,7 @@
Vertival Beam Size (nominal: Sig_y = 10)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X01DD-SIGY-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X01DD-SIGY-LAST
@@ -590,7 +590,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X08DB-SIGY-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X08DB-SIGY-LAST
caCartesianPlot::Lines
@@ -660,7 +660,7 @@
Stored Beam Current
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-CURRPCT-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-CURRPCT-LAST
@@ -670,7 +670,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-CURRBPM-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-CURRBPM-LAST
caCartesianPlot::Lines
@@ -740,7 +740,7 @@
Horizontal Tune (nominal: Qx = 39.37)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-QX-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-QX-LAST
@@ -813,7 +813,7 @@
Horizontal Beam Size (nominal: Sig_x = 9)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X01DD-SIGX-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X01DD-SIGX-LAST
@@ -823,7 +823,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-X08DB-SIGX-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-X08DB-SIGX-LAST
caCartesianPlot::Lines
@@ -893,7 +893,7 @@
Vertival Tune (nominal: Qy = 15.22)
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-QY-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-QY-LAST
@@ -966,7 +966,7 @@
Beam Lifetime
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TAUBPM-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TAUBPM-LAST
caCartesianPlot::FatDots
@@ -979,7 +979,7 @@
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TIME;AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:BUFFER-TAUPCT-LAST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TIME;AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:BUFFER-TAUPCT-LAST
caCartesianPlot::FatDots
@@ -1072,7 +1072,7 @@
Update Logs
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:POSTMORTEMLOG-LOGS-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:POSTMORTEMLOG-LOGS-REQ
Update Logs
@@ -1104,7 +1104,7 @@
Test Trigger Post Mortem
- AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }}:TEST
+ AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@:TEST
Test Trigger Post Mortem
diff --git a/qt/A_BD_Scrubbing.ui b/qt/A_BD_Scrubbing.ui
index 0c96232..0deae26 100644
--- a/qt/A_BD_Scrubbing.ui
+++ b/qt/A_BD_Scrubbing.ui
@@ -24,7 +24,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:SCRUBBING-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:SCRUBBING-ONOFF
caChoice::Column
@@ -59,7 +59,7 @@
- ARIVA-VMAVE:PRESS-MAX;ARIVA-VMAVE-FE:PRESS-MAX;ARIVA-VMAVE-ALL:PRESS-MAX;AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-MAX-PLOT;AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-MIN-PLOT;AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-DYN-PLOT
+ ARIVA-VMAVE:PRESS-MAX;ARIVA-VMAVE-FE:PRESS-MAX;ARIVA-VMAVE-ALL:PRESS-MAX;AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-VACUUM-MAX-PLOT;AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-VACUUM-MIN-PLOT;AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-VACUUM-DYN-PLOT
caStripPlot::Second
@@ -411,7 +411,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:SCRUBBING-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:SCRUBBING-GUIRELOAD
caCalc::TriggerOneToZero
@@ -427,7 +427,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:SCRUBBING-INFO
+ AGEBD-ALH@@agebd_env_suffix_upper@@:SCRUBBING-INFO
caLineEdit::Alarm_Default
@@ -449,7 +449,7 @@
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:TOPUP-DELTAT
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:TOPUP-DELTAT
caLineEdit::Default
@@ -474,7 +474,7 @@
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:TOPUP-TAU
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:TOPUP-TAU
caLineEdit::Default
@@ -568,7 +568,7 @@
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:TOPUP-DELTAI
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:TOPUP-DELTAI
caLineEdit::Default
@@ -1913,7 +1913,7 @@
22
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:STATUS-SECRET-MASTER
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:STATUS-SECRET-MASTER
caLed::Alarm
@@ -2937,7 +2937,7 @@ AGETI-CVME-MASTER-TMA:Evt-LI-Gun-EVRCount-I
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOIN-SP.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOIN-SP.VAL
caSpinbox::User
@@ -2962,7 +2962,7 @@ AGETI-CVME-MASTER-TMA:Evt-LI-Gun-EVRCount-I
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOMB-SP.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOMB-SP.VAL
caSpinbox::User
@@ -2987,7 +2987,7 @@ AGETI-CVME-MASTER-TMA:Evt-LI-Gun-EVRCount-I
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOME-SP.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOME-SP.VAL
caSpinbox::User
@@ -3012,7 +3012,7 @@ AGETI-CVME-MASTER-TMA:Evt-LI-Gun-EVRCount-I
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOEX-SP.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOEX-SP.VAL
caSpinbox::User
@@ -3037,7 +3037,7 @@ AGETI-CVME-MASTER-TMA:Evt-LI-Gun-EVRCount-I
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-SRIN-SP.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-SRIN-SP.VAL
caSpinbox::User
@@ -3099,7 +3099,7 @@ Setpoint
true
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOMB-RB.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOMB-RB.VAL
@@ -3141,7 +3141,7 @@ Setpoint
true
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOIN-RB.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOIN-RB.VAL
@@ -3183,7 +3183,7 @@ Setpoint
true
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOME-RB.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOME-RB.VAL
@@ -3225,7 +3225,7 @@ Setpoint
true
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-SRIN-RB.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-SRIN-RB.VAL
@@ -3267,7 +3267,7 @@ Setpoint
true
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:WARMUPCYCLES-BOEX-RB.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:WARMUPCYCLES-BOEX-RB.VAL
@@ -3394,7 +3394,7 @@ Remaining
- ;AGEBD-TIMING{{ agebd_env_suffix_upper }}:TARGET-BUCKET
+ ;AGEBD-TIMING@@agebd_env_suffix_upper@@:TARGET-BUCKET
caCartesianPlot::Sticks
@@ -3491,7 +3491,7 @@ Remaining
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:GO
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:GO
@@ -3535,7 +3535,7 @@ Remaining
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FILLPATTERN-string.VAL
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FILLPATTERN-string.VAL
0
@@ -3567,7 +3567,7 @@ Remaining
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:FPFB-MODE
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:FPFB-MODE
@@ -3591,7 +3591,7 @@ Remaining
EPushButton::WidthAndHeight
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:ZERO-TARGET-BUCKET
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:ZERO-TARGET-BUCKET
Reset
@@ -3639,7 +3639,7 @@ Remaining
true
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CURRENT-THRESHOLD
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CURRENT-THRESHOLD
caSpinbox::User
@@ -3690,7 +3690,7 @@ Remaining
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:FPFB-NTH
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:FPFB-NTH
caSpinbox::User
@@ -3754,7 +3754,7 @@ Remaining
1
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MIN
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MIN
caSpinbox::User
@@ -3779,7 +3779,7 @@ Remaining
1
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -3850,7 +3850,7 @@ Remaining
1
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-MIN
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-VACUUM-MIN
caSpinbox::User
@@ -3921,7 +3921,7 @@ Remaining
1
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-MAX
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-VACUUM-MAX
caSpinbox::User
@@ -3969,7 +3969,7 @@ Remaining
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-TIME-MAX
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-TIME-MAX
caSpinbox::User
@@ -3994,7 +3994,7 @@ Remaining
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-TIME-MIN
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-TIME-MIN
caSpinbox::User
@@ -4058,7 +4058,7 @@ Remaining
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-GUNGRID-FPFB
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-GUNGRID-FPFB
caSpinbox::User
@@ -4083,7 +4083,7 @@ Remaining
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-GUNGRID-ACCUM
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-GUNGRID-ACCUM
caSpinbox::User
@@ -4171,7 +4171,7 @@ Remaining
- ARS07-DPCT-0000:CURR;AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX;AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MIN
+ ARS07-DPCT-0000:CURR;AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX;AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MIN
caStripPlot::Second
@@ -4398,7 +4398,7 @@ Remaining
Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing
- AGEBD-PARAMS{{ agebd_env_suffix_upper }}:LIFETIME
+ AGEBD-PARAMS@@agebd_env_suffix_upper@@:LIFETIME
@@ -4448,7 +4448,7 @@ Remaining
- AGEBD-PARAMS{{ agebd_env_suffix_upper }}:TRANSMISSION
+ AGEBD-PARAMS@@agebd_env_suffix_upper@@:TRANSMISSION
@@ -4521,7 +4521,7 @@ Remaining
-AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-DYN-FRAC
+AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-VACUUM-DYN-FRAC
caSpinbox::User
@@ -4559,7 +4559,7 @@ AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-DYN-FRAC
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-SCRUB
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-SCRUB
@@ -4611,7 +4611,7 @@ AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-DYN-FRAC
A>3
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-SCRUB
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-SCRUB
@@ -4674,7 +4674,7 @@ AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-DYN-FRAC
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:MBFBY-GAIN-SP.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:MBFBY-GAIN-SP.VAL
caSpinbox::User
@@ -4776,7 +4776,7 @@ AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-VACUUM-DYN-FRAC
0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:MBFBX-GAIN-SP.VAL
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:MBFBX-GAIN-SP.VAL
caSpinbox::User
@@ -5062,7 +5062,7 @@ ARSGE-MBFBT-AMP-02:SET-ON-OFF
A<4 & A>0
- AGEBD-SCRUBBING{{ agebd_env_suffix_upper }}:CONTROL-SCRUB
+ AGEBD-SCRUBBING@@agebd_env_suffix_upper@@:CONTROL-SCRUB
diff --git a/qt/A_BD_ServiceManager.ui b/qt/A_BD_ServiceManager.ui
index 850dca3..3539295 100644
--- a/qt/A_BD_ServiceManager.ui
+++ b/qt/A_BD_ServiceManager.ui
@@ -71,7 +71,7 @@ caLabel[statusTip="Operation"]{
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -106,7 +106,7 @@ caLabel[statusTip="Operation"]{
!A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF
@@ -586,7 +586,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ALIVE
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ALIVE
caLed::Alarm
@@ -602,7 +602,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-STARTTIME
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-STARTTIME
caLineEdit::Default
@@ -624,7 +624,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-STATUS
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-STATUS
caLineEdit::Default
@@ -646,7 +646,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-VERSION
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-VERSION
caLineEdit::Default
@@ -668,7 +668,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF
caChoice::Column
@@ -717,7 +717,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-ONOFF-RB
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-ONOFF-RB
caLed::Alarm
@@ -763,7 +763,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-CPCL-MASTER{{ agebd_env_suffix_upper }}:STATUS
+ AGEBD-CPCL-MASTER@@agebd_env_suffix_upper@@:STATUS
caLed::Alarm
@@ -1040,7 +1040,7 @@ caLabel[statusTip="Operation"]{
EPushButton::None
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:MASTER-LOGS-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:MASTER-LOGS-REQ
Logs
@@ -1106,7 +1106,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:MASTER-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:MASTER-GUIRELOAD
Reload
@@ -1172,7 +1172,7 @@ caLabel[statusTip="Operation"]{
EPushButton::None
- AGEBD-CPCL-MASTER{{ agebd_env_suffix_upper }}:RESTART
+ AGEBD-CPCL-MASTER@@agebd_env_suffix_upper@@:RESTART
↺
diff --git a/qt/A_BD_ServiceManager_inc.ui b/qt/A_BD_ServiceManager_inc.ui
index 4f030fb..056c07c 100644
--- a/qt/A_BD_ServiceManager_inc.ui
+++ b/qt/A_BD_ServiceManager_inc.ui
@@ -162,7 +162,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:$(service)-STATUS
+ AGEBD-ALH@@agebd_env_suffix_upper@@:$(service)-STATUS
caLineEdit::Default
@@ -195,7 +195,7 @@
EPushButton::None
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:$(service)-RESTART-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:$(service)-RESTART-REQ
Restart
@@ -227,7 +227,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:$(service)-VERSION
+ AGEBD-ALH@@agebd_env_suffix_upper@@:$(service)-VERSION
caLineEdit::Default
@@ -249,7 +249,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:$(service)-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:$(service)-ONOFF
caChoice::Column
@@ -268,7 +268,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:$(service)-STARTTIME
+ AGEBD-ALH@@agebd_env_suffix_upper@@:$(service)-STARTTIME
caLineEdit::Default
@@ -320,7 +320,7 @@
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:$(service)-ALIVE
+ AGEBD-ALH@@agebd_env_suffix_upper@@:$(service)-ALIVE
caLed::Alarm
@@ -347,7 +347,7 @@
EPushButton::None
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:$(service)-LOGS-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:$(service)-LOGS-REQ
Logs
@@ -409,7 +409,7 @@
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:$(service)-ONOFF-RB
+ AGEBD-ALH@@agebd_env_suffix_upper@@:$(service)-ONOFF-RB
caLed::Alarm
@@ -536,7 +536,7 @@
EPushButton::None
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:$(service)-START-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:$(service)-START-REQ
Start
@@ -579,7 +579,7 @@
EPushButton::None
- AGEBD-MASTER{{ agebd_env_suffix_upper }}:$(service)-ABORT-REQ
+ AGEBD-MASTER@@agebd_env_suffix_upper@@:$(service)-ABORT-REQ
KILL
@@ -686,7 +686,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:$(service)-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:$(service)-GUIRELOAD
Reload
diff --git a/qt/A_BD_TauBPM.ui b/qt/A_BD_TauBPM.ui
index 9460e95..c063922 100644
--- a/qt/A_BD_TauBPM.ui
+++ b/qt/A_BD_TauBPM.ui
@@ -78,7 +78,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUBPM{{ agebd_env_suffix_upper }}:TAU
+ AGEBD-TAUBPM@@agebd_env_suffix_upper@@:TAU
@@ -138,7 +138,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUBPM{{ agebd_env_suffix_upper }}:TAU-ERR
+ AGEBD-TAUBPM@@agebd_env_suffix_upper@@:TAU-ERR
@@ -214,7 +214,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUBPM{{ agebd_env_suffix_upper }}:INJRATE
+ AGEBD-TAUBPM@@agebd_env_suffix_upper@@:INJRATE
@@ -274,7 +274,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUBPM{{ agebd_env_suffix_upper }}:INJRATE-ERR
+ AGEBD-TAUBPM@@agebd_env_suffix_upper@@:INJRATE-ERR
@@ -363,7 +363,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:LIFETIME-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:LIFETIME-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -395,7 +395,7 @@
- AGEBD-TAUBPM{{ agebd_env_suffix_upper }}:CONTROL-NSAMPLES-FIT-TAU
+ AGEBD-TAUBPM@@agebd_env_suffix_upper@@:CONTROL-NSAMPLES-FIT-TAU
caLineEdit::User
@@ -411,7 +411,7 @@
- AGEBD-TAUBPM{{ agebd_env_suffix_upper }}:CONTROL-MIN-CURR
+ AGEBD-TAUBPM@@agebd_env_suffix_upper@@:CONTROL-MIN-CURR
12
@@ -430,7 +430,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TAUBPM-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TAUBPM-ONOFF
caChoice::Column
@@ -465,7 +465,7 @@
- AGEBD-TAUBPM{{ agebd_env_suffix_upper }}:CONTROL-NSAMPLES-FIT-ROC
+ AGEBD-TAUBPM@@agebd_env_suffix_upper@@:CONTROL-NSAMPLES-FIT-ROC
caLineEdit::User
diff --git a/qt/A_BD_TauPCT.ui b/qt/A_BD_TauPCT.ui
index 31c3115..7f79c7d 100644
--- a/qt/A_BD_TauPCT.ui
+++ b/qt/A_BD_TauPCT.ui
@@ -78,7 +78,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUPCT{{ agebd_env_suffix_upper }}:TAU
+ AGEBD-TAUPCT@@agebd_env_suffix_upper@@:TAU
@@ -138,7 +138,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUPCT{{ agebd_env_suffix_upper }}:TAU-ERR
+ AGEBD-TAUPCT@@agebd_env_suffix_upper@@:TAU-ERR
@@ -214,7 +214,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUPCT{{ agebd_env_suffix_upper }}:INJRATE
+ AGEBD-TAUPCT@@agebd_env_suffix_upper@@:INJRATE
@@ -274,7 +274,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TAUPCT{{ agebd_env_suffix_upper }}:INJRATE-ERR
+ AGEBD-TAUPCT@@agebd_env_suffix_upper@@:INJRATE-ERR
@@ -363,7 +363,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TAUPCT-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TAUPCT-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -395,7 +395,7 @@
- AGEBD-TAUPCT{{ agebd_env_suffix_upper }}:CONTROL-NSAMPLES-FIT-TAU
+ AGEBD-TAUPCT@@agebd_env_suffix_upper@@:CONTROL-NSAMPLES-FIT-TAU
caLineEdit::User
@@ -411,7 +411,7 @@
- AGEBD-TAUPCT{{ agebd_env_suffix_upper }}:CONTROL-MIN-CURR
+ AGEBD-TAUPCT@@agebd_env_suffix_upper@@:CONTROL-MIN-CURR
12
@@ -430,7 +430,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TAUPCT-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TAUPCT-ONOFF
caChoice::Column
@@ -449,7 +449,7 @@
- AGEBD-TAUPCT{{ agebd_env_suffix_upper }}:CONTROL-NSAMPLES-FIT-ROC
+ AGEBD-TAUPCT@@agebd_env_suffix_upper@@:CONTROL-NSAMPLES-FIT-ROC
caLineEdit::User
diff --git a/qt/A_BD_Timing.ui b/qt/A_BD_Timing.ui
index 3b78166..b18ff40 100644
--- a/qt/A_BD_Timing.ui
+++ b/qt/A_BD_Timing.ui
@@ -46,7 +46,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TIMING-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TIMING-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -154,7 +154,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-GUN
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-GUN
caSpinbox::User
@@ -185,7 +185,7 @@
3
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-llemast
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-llemast
caSpinbox::User
@@ -240,7 +240,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-BOINKI
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-BOINKI
caSpinbox::User
@@ -295,7 +295,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-BOINSE
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-BOINSE
caSpinbox::User
@@ -326,7 +326,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-BOEXKI
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-BOEXKI
caSpinbox::User
@@ -384,7 +384,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-BOEXSE
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-BOEXSE
caSpinbox::User
@@ -442,7 +442,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-SRINSE
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-SRINSE
caSpinbox::User
@@ -548,7 +548,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-BTRICT
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-BTRICT
caSpinbox::User
@@ -798,7 +798,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-klystr2
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-klystr2
caSpinbox::User
@@ -829,7 +829,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-3GHzScp
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-3GHzScp
caSpinbox::User
@@ -860,7 +860,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-500-PBU
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-500-PBU
caSpinbox::User
@@ -891,7 +891,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-Kly1PMU
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-Kly1PMU
caSpinbox::User
@@ -922,7 +922,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-klystr1
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-klystr1
caSpinbox::User
@@ -953,7 +953,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-preamp1
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-preamp1
caSpinbox::User
@@ -984,7 +984,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-3GHzQdm
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-3GHzQdm
caSpinbox::User
@@ -1015,7 +1015,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-preamp2
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-preamp2
caSpinbox::User
@@ -1046,7 +1046,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lirf-Kly2PMU
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lirf-Kly2PMU
caSpinbox::User
@@ -1173,7 +1173,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-SRINK1
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-SRINK1
caSpinbox::User
@@ -1207,7 +1207,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-SRINK2
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-SRINK2
caSpinbox::User
@@ -1241,7 +1241,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-SRINK3
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-SRINK3
caSpinbox::User
@@ -1275,7 +1275,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-SRINK4
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-SRINK4
caSpinbox::User
@@ -1333,7 +1333,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lindi-ictone
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lindi-ictone
caSpinbox::User
@@ -1364,7 +1364,7 @@
0
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-ZERO-DELAY-lindi-icts23
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-ZERO-DELAY-lindi-icts23
caSpinbox::User
@@ -3472,7 +3472,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-GUN
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-GUN
@@ -3497,7 +3497,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-llemast
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-llemast
@@ -3522,7 +3522,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-BOINKI
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-BOINKI
@@ -3547,7 +3547,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-BOINSE
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-BOINSE
@@ -3572,7 +3572,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-BOEXKI
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-BOEXKI
@@ -3597,7 +3597,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-BOEXSE
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-BOEXSE
@@ -3622,7 +3622,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-BTRICT
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-BTRICT
@@ -3647,7 +3647,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-SRINSE
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-SRINSE
@@ -3672,7 +3672,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-SRINK4
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-SRINK4
@@ -3697,7 +3697,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-preamp1
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-preamp1
@@ -3722,7 +3722,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-3GHzQdm
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-3GHzQdm
@@ -3747,7 +3747,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-500-PBU
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-500-PBU
@@ -3772,7 +3772,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-preamp2
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-preamp2
@@ -3797,7 +3797,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-klystr2
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-klystr2
@@ -3822,7 +3822,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-3GHzScp
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-3GHzScp
@@ -3847,7 +3847,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-Kly1PMU
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-Kly1PMU
@@ -3872,7 +3872,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-klystr1
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-klystr1
@@ -3897,7 +3897,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lirf-Kly2PMU
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lirf-Kly2PMU
@@ -3922,7 +3922,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lindi-ictone
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lindi-ictone
@@ -3947,7 +3947,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-lindi-icts23
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-lindi-icts23
@@ -3972,7 +3972,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-SRINK3
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-SRINK3
@@ -3997,7 +3997,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-SRINK2
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-SRINK2
@@ -4022,7 +4022,7 @@
false
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FLW-BCKT-SRINK1
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FLW-BCKT-SRINK1
catogglebutton_3
@@ -4089,7 +4089,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:SETALL-DELAY
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:SETALL-DELAY
@@ -4149,7 +4149,7 @@
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:SETALL-ERROR
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:SETALL-ERROR
@@ -4230,7 +4230,7 @@
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:CONTROL-FILLPATTERN-string.VAL
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:CONTROL-FILLPATTERN-string.VAL
0
@@ -4266,7 +4266,7 @@
EPushButton::WidthAndHeight
- AGEBD-TIMING{{ agebd_env_suffix_upper }}:ZERO-TARGET-BUCKET
+ AGEBD-TIMING@@agebd_env_suffix_upper@@:ZERO-TARGET-BUCKET
Reset
@@ -4426,7 +4426,7 @@
!A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TIMING-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TIMING-ONOFF
@@ -4470,7 +4470,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TIMING-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TIMING-ONOFF
0
diff --git a/qt/A_BD_TopUpTool.ui b/qt/A_BD_TopUpTool.ui
index cb126f5..83e7b85 100644
--- a/qt/A_BD_TopUpTool.ui
+++ b/qt/A_BD_TopUpTool.ui
@@ -24,7 +24,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TOPUPTOOL-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TOPUPTOOL-ONOFF
caChoice::Column
@@ -209,7 +209,7 @@
0
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-GUNGRID-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-GUNGRID-MAX
caSpinbox::User
@@ -273,7 +273,7 @@
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:SCRUBBING-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:SCRUBBING-GUIRELOAD
caCalc::TriggerOneToZero
@@ -289,7 +289,7 @@
- AGEBD-ALH{{ agebd_env_suffix_upper }}:SCRUBBING-INFO
+ AGEBD-ALH@@agebd_env_suffix_upper@@:SCRUBBING-INFO
caLineEdit::Alarm_Default
@@ -311,7 +311,7 @@
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-DELTAT
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-DELTAT
caLineEdit::Default
@@ -336,7 +336,7 @@
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-TAU
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-TAU
caLineEdit::Default
@@ -430,7 +430,7 @@
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-DELTAI
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-DELTAI
caLineEdit::Default
@@ -1989,7 +1989,7 @@
22
- AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }}:STATUS-SECRET-MASTER
+ AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@:STATUS-SECRET-MASTER
caLed::Alarm
@@ -2286,7 +2286,7 @@ AGETI-CVME-MASTER-TMA:Evt-SR-Inj-EVRCount-I
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -2744,7 +2744,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -2769,7 +2769,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -2794,7 +2794,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -2819,7 +2819,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -2844,7 +2844,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -2869,7 +2869,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -2894,7 +2894,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -3050,7 +3050,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MAX
caSpinbox::User
@@ -3121,7 +3121,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-TIME-FREQ
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-TIME-FREQ
caSpinbox::User
@@ -3169,7 +3169,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-CURRENT-MIN
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-CURRENT-MIN
caSpinbox::User
@@ -3194,7 +3194,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-VAC-MAX
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-VAC-MAX
caSpinbox::User
@@ -3219,7 +3219,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
1
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:CONTROL-VAC-MIN
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:CONTROL-VAC-MIN
caSpinbox::User
@@ -3262,7 +3262,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-DELTAT
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-DELTAT
caLineEdit::Default
@@ -3287,7 +3287,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-DELTAI
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-DELTAI
caLineEdit::Default
@@ -3312,7 +3312,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-TAU
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-TAU
caLineEdit::Default
@@ -3337,7 +3337,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-DELTAI
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-DELTAI
caLineEdit::Default
@@ -3431,7 +3431,7 @@ AGETI-CVME-MASTER-TMA:Evt-14.VALA
- AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }}:TOPUP-DELTAT
+ AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@:TOPUP-DELTAT
caLineEdit::Default
diff --git a/qt/A_BD_Tune.ui b/qt/A_BD_Tune.ui
index d6b6403..733714b 100644
--- a/qt/A_BD_Tune.ui
+++ b/qt/A_BD_Tune.ui
@@ -55,7 +55,7 @@
x [mm]
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:OSCILLATION-SAMPLE-ALL;AGEBD-TUNE{{ agebd_env_suffix_upper }}:OSCILLATION-X-ALL
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:OSCILLATION-SAMPLE-ALL;AGEBD-TUNE@@agebd_env_suffix_upper@@:OSCILLATION-X-ALL
caCartesianPlot::NoSymbol
@@ -102,7 +102,7 @@
y [mm]
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:OSCILLATION-SAMPLE-ALL;AGEBD-TUNE{{ agebd_env_suffix_upper }}:OSCILLATION-Y-ALL
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:OSCILLATION-SAMPLE-ALL;AGEBD-TUNE@@agebd_env_suffix_upper@@:OSCILLATION-Y-ALL
caCartesianPlot::NoSymbol
@@ -151,7 +151,7 @@
Amplitude
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:SPEC-SAMPLE-ALL;AGEBD-TUNE{{ agebd_env_suffix_upper }}:HORIZONTAL-SPEC-ALL
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:SPEC-SAMPLE-ALL;AGEBD-TUNE@@agebd_env_suffix_upper@@:HORIZONTAL-SPEC-ALL
caCartesianPlot::NoSymbol
@@ -198,7 +198,7 @@
Amplitude
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:SPEC-SAMPLE-ALL;AGEBD-TUNE{{ agebd_env_suffix_upper }}:VERTICAL-SPEC-ALL
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:SPEC-SAMPLE-ALL;AGEBD-TUNE@@agebd_env_suffix_upper@@:VERTICAL-SPEC-ALL
caCartesianPlot::NoSymbol
@@ -283,7 +283,7 @@
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNE-ALIVE
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNE-ALIVE
caLed::Alarm
@@ -323,7 +323,7 @@
false
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNE-ONOFF-RB
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNE-ONOFF-RB
caLed::Alarm
@@ -358,7 +358,7 @@ measurement
true
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNE-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNE-ONOFF
@@ -405,7 +405,7 @@ measurement
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:MEAS-TIME
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:MEAS-TIME
@@ -433,7 +433,7 @@ measurement
-
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:VERTICAL-PEAK1-FREQ
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:VERTICAL-PEAK1-FREQ
4
@@ -467,7 +467,7 @@ measurement
-
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:HORIZONTAL-PEAK1-FREQ
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:HORIZONTAL-PEAK1-FREQ
4
@@ -516,7 +516,7 @@ measurement
-
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:Q1_NAFF
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:Q1_NAFF
4
@@ -538,7 +538,7 @@ measurement
-
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:Q2_NAFF
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:Q2_NAFF
4
@@ -612,7 +612,7 @@ measurement
false
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:SVD-CLEAN
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:SVD-CLEAN
@@ -631,7 +631,7 @@ measurement
0
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:SVD-CLEAN-Neigenvalues
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:SVD-CLEAN-Neigenvalues
false
@@ -705,7 +705,7 @@ values
2
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-ROI-Yi
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-ROI-Yi
caSpinbox::User
@@ -756,7 +756,7 @@ values
0.000000000000000
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-ROI-Xf
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-ROI-Xf
caSpinbox::User
@@ -789,7 +789,7 @@ values
2
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-ROI-Xi
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-ROI-Xi
caSpinbox::User
@@ -870,7 +870,7 @@ values
0.000000000000000
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-ROI-Yf
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-ROI-Yf
caSpinbox::User
@@ -934,7 +934,7 @@ values
false
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-TbTLastIndex
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-TbTLastIndex
caSpinbox::User
@@ -994,7 +994,7 @@ values
false
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-TbTFirstIndex
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-TbTFirstIndex
false
@@ -1045,7 +1045,7 @@ values
true
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-NAveraging
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-NAveraging
caNumeric::Channel
@@ -1096,7 +1096,7 @@ values
true
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:CONTROL-NAFF
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:CONTROL-NAFF
@@ -1130,7 +1130,7 @@ harmonics
true
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:NAFF-HARMONICS
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:NAFF-HARMONICS
caNumeric::Channel
@@ -1185,7 +1185,7 @@ ARS07-DBPM-0840
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:BPM-SELECT-SINGLE
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:BPM-SELECT-SINGLE
-
@@ -1873,7 +1873,7 @@ ARS07-DBPM-0840
false
- AGEBD-TUNE{{ agebd_env_suffix_upper }}:SINGLE-BPM
+ AGEBD-TUNE@@agebd_env_suffix_upper@@:SINGLE-BPM
diff --git a/qt/A_BD_TuneBump.ui b/qt/A_BD_TuneBump.ui
index 55eff01..9ed1d2c 100644
--- a/qt/A_BD_TuneBump.ui
+++ b/qt/A_BD_TuneBump.ui
@@ -81,7 +81,7 @@ caLabel[statusTip="Operation"]{
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEBUMP-GUIRELOAD
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEBUMP-GUIRELOAD
caCalc::TriggerZeroToOne
@@ -103,7 +103,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-STEPDOWN
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-STEPDOWN
<<
@@ -141,7 +141,7 @@ caLabel[statusTip="Operation"]{
4
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-STEPSIZE
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-STEPSIZE
caSpinbox::User
@@ -175,7 +175,7 @@ caLabel[statusTip="Operation"]{
4
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-STEPSIZE
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-STEPSIZE
caSpinbox::User
@@ -232,7 +232,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-STEPDOWN
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-STEPDOWN
<<
@@ -330,7 +330,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-STEPUP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-STEPUP
>>
@@ -368,7 +368,7 @@ caLabel[statusTip="Operation"]{
false
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-STEPUP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-STEPUP
>>
@@ -457,7 +457,7 @@ caLabel[statusTip="Operation"]{
Vertical Tune (nominal: Qy = 15.22)
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:NORM-QY-FREQ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:NORM-QY-AMP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:NORM-QY-FREQ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:NORM-QY-AMP
@@ -467,7 +467,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-PEAKS-FREQ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-PEAKS
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-PEAKS-FREQ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-PEAKS
caCartesianPlot::Sticks
@@ -518,7 +518,7 @@ caLabel[statusTip="Operation"]{
Synchrotron Tune (nominal: 0.0027)
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:NORM-QZ-FREQ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:NORM-QZ-AMP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:NORM-QZ-FREQ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:NORM-QZ-AMP
@@ -528,7 +528,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QZ-PEAKS-FREQ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QZ-PEAKS
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QZ-PEAKS-FREQ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QZ-PEAKS
caCartesianPlot::Sticks
@@ -579,7 +579,7 @@ caLabel[statusTip="Operation"]{
Horizontal Tune (nominal: Qx = 39.37)
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:NORM-QX-FREQ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:NORM-QX-AMP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:NORM-QX-FREQ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:NORM-QX-AMP
@@ -589,7 +589,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-PEAKS-FREQ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-PEAKS
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-PEAKS-FREQ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-PEAKS
caCartesianPlot::Sticks
@@ -657,7 +657,7 @@ caLabel[statusTip="Operation"]{
Tune Z
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SPEC-FREQ-qZ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SPEC-Z
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SPEC-FREQ-qZ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SPEC-Z
@@ -702,7 +702,7 @@ caLabel[statusTip="Operation"]{
Tune Y
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SPEC-FREQ-qY;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SPEC-Y
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SPEC-FREQ-qY;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SPEC-Y
@@ -747,7 +747,7 @@ caLabel[statusTip="Operation"]{
Tune X
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SPEC-FREQ-qX;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SPEC-X
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SPEC-FREQ-qX;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SPEC-X
@@ -809,7 +809,7 @@ caLabel[statusTip="Operation"]{
Vertical TbT data
- ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SIGN-Y
+ ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SIGN-Y
@@ -857,7 +857,7 @@ caLabel[statusTip="Operation"]{
Longitudinal Stage 1 Data
- ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SIGN-Z
+ ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SIGN-Z
@@ -905,7 +905,7 @@ caLabel[statusTip="Operation"]{
Horizontal TbT data
- ;AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SIGN-X
+ ;AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SIGN-X
@@ -1329,7 +1329,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-ULIM
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-ULIM
caSpinbox::User
@@ -1360,7 +1360,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-LLIM
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-LLIM
caSpinbox::User
@@ -1391,7 +1391,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-ULIM
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-ULIM
caSpinbox::User
@@ -1459,7 +1459,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-LLIM
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-LLIM
caSpinbox::User
@@ -1758,7 +1758,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SIGN-Y.INP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SIGN-Y.INP
@@ -1818,7 +1818,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SIGN-X.INP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SIGN-X.INP
@@ -1878,7 +1878,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:SIGN-Z.INP
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:SIGN-Z.INP
@@ -2021,7 +2021,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-KP
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-KP
caSpinbox::User
@@ -2193,7 +2193,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-KI
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-KI
caSpinbox::User
@@ -2224,7 +2224,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-KD
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-KD
caSpinbox::User
@@ -2255,7 +2255,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-QX
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-QX
caSpinbox::User
@@ -2323,7 +2323,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-QXMAX
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-QXMAX
caSpinbox::User
@@ -2391,7 +2391,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-QXMIN
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-QXMIN
caSpinbox::User
@@ -2496,7 +2496,7 @@ caLabel[statusTip="Operation"]{
1
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-MIN-CURR
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-MIN-CURR
caSpinbox::User
@@ -2567,7 +2567,7 @@ caLabel[statusTip="Operation"]{
true
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CONTROL-QX-OKRNG
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CONTROL-QX-OKRNG
caSpinbox::User
@@ -2598,7 +2598,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:DELTAQ
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:DELTAQ
@@ -2705,7 +2705,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:QSTEPS
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:QSTEPS
caStripPlot::Second
@@ -2866,7 +2866,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBX-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBX-ONOFF
caChoice::Column
@@ -2885,7 +2885,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK1
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK1
@@ -2911,7 +2911,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK2
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK2
@@ -2974,7 +2974,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK5
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK5
@@ -3000,7 +3000,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK8
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK8
@@ -3063,7 +3063,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK3
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK3
@@ -3126,7 +3126,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK6
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK6
@@ -3152,7 +3152,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK4
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK4
@@ -3215,7 +3215,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECK7
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECK7
@@ -3321,7 +3321,7 @@ caLabel[statusTip="Operation"]{
true
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:CHECKALL
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:CHECKALL
@@ -3501,7 +3501,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:DELTAQ-ULIM
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:DELTAQ-ULIM
caSpinbox::User
@@ -3532,7 +3532,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBX{{ agebd_env_suffix_upper }}:DELTAQ-LLIM
+ AGEBD-TUNEFBX@@agebd_env_suffix_upper@@:DELTAQ-LLIM
caSpinbox::User
@@ -3635,7 +3635,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-QY
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-QY
caSpinbox::User
@@ -3706,7 +3706,7 @@ caLabel[statusTip="Operation"]{
true
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-QY-OKRNG
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-QY-OKRNG
caSpinbox::User
@@ -3774,7 +3774,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-KI
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-KI
caSpinbox::User
@@ -3873,7 +3873,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK4
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK4
@@ -3905,7 +3905,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-KP
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-KP
caSpinbox::User
@@ -3936,7 +3936,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-QYMAX
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-QYMAX
caSpinbox::User
@@ -4078,7 +4078,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-KD
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-KD
caSpinbox::User
@@ -4103,7 +4103,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK3
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK3
@@ -4283,7 +4283,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:DELTAQ
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:DELTAQ
@@ -4386,7 +4386,7 @@ caLabel[statusTip="Operation"]{
true
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECKALL
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECKALL
@@ -4412,7 +4412,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK5
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK5
@@ -4438,7 +4438,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK2
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK2
@@ -4507,7 +4507,7 @@ caLabel[statusTip="Operation"]{
2
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-QYMIN
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-QYMIN
caSpinbox::User
@@ -4532,7 +4532,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK1
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK1
@@ -4595,7 +4595,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBY-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBY-ONOFF
caChoice::Column
@@ -4614,7 +4614,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK6
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK6
@@ -4656,7 +4656,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:QSTEPS
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:QSTEPS
caStripPlot::Second
@@ -4897,7 +4897,7 @@ caLabel[statusTip="Operation"]{
1
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CONTROL-MIN-CURR
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CONTROL-MIN-CURR
caSpinbox::User
@@ -4959,7 +4959,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK7
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK7
@@ -4985,7 +4985,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:CHECK8
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:CHECK8
@@ -5091,7 +5091,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:DELTAQ-ULIM
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:DELTAQ-ULIM
caSpinbox::User
@@ -5122,7 +5122,7 @@ caLabel[statusTip="Operation"]{
3
- AGEBD-TUNEFBY{{ agebd_env_suffix_upper }}:DELTAQ-LLIM
+ AGEBD-TUNEFBY@@agebd_env_suffix_upper@@:DELTAQ-LLIM
caSpinbox::User
@@ -5189,7 +5189,7 @@ caLabel[statusTip="Operation"]{
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:WRITE2MAG
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:WRITE2MAG
@@ -5241,7 +5241,7 @@ caLabel[statusTip="Operation"]{
Qt::ScrollBarAsNeeded
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:CHANGELOG
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:CHANGELOG
caMultiLineString::None
@@ -5277,7 +5277,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX
@@ -5359,7 +5359,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY
@@ -5472,7 +5472,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-SB1
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-SB1
@@ -5532,7 +5532,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-SB1-DIFF
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-SB1-DIFF
@@ -5629,7 +5629,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-SB2
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-SB2
@@ -5689,7 +5689,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-SB2-DIFF
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-SB2-DIFF
@@ -5860,7 +5860,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-SB1
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-SB1
@@ -6031,7 +6031,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-SB2
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-SB2
@@ -6091,7 +6091,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-SB1-DIFF
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-SB1-DIFF
@@ -6151,7 +6151,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-SB2-DIFF
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-SB2-DIFF
@@ -6223,7 +6223,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QX-FREQ
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QX-FREQ
@@ -6311,7 +6311,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QY-FREQ
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QY-FREQ
@@ -6423,7 +6423,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QZ
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QZ
@@ -6508,7 +6508,7 @@ caLabel[statusTip="Operation"]{
Qt::AlignAbsolute|Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
- AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }}:QZ-FREQ
+ AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@:QZ-FREQ
@@ -6603,7 +6603,7 @@ caLabel[statusTip="Operation"]{
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBX-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBX-ONOFF
@@ -6641,7 +6641,7 @@ caLabel[statusTip="Operation"]{
A
- AGEBD-ALH{{ agebd_env_suffix_upper }}:TUNEFBY-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:TUNEFBY-ONOFF
calabel_3
diff --git a/scripts/ci/check_subs.py b/scripts/ci/check_subs.py
new file mode 100644
index 0000000..f341d9a
--- /dev/null
+++ b/scripts/ci/check_subs.py
@@ -0,0 +1,131 @@
+"""
+Guard the deploy-time substitution contract.
+
+Every ``@@token@@`` in this repo must be declared in config/environments.yml,
+and must live somewhere that actually gets rendered. Three things are checked:
+
+ 1. Tokens inside a render path are declared.
+ Catches typos, which would otherwise ship the literal placeholder.
+
+ 2. Declared tokens only appear in a render, passthrough or reference path.
+ Catches a placeholder added to a file nobody renders -- exactly the
+ regression that put a suffix token into qt/*.ui while the Qt deploy
+ step was a plain rsync.
+
+ 3. No pre-migration ``{{ token }}`` form of a deploy-time token survives,
+ in the paths that carry tokens. Catches files missed by the switch to
+ the ``@@token@@`` delimiters. Reference paths are exempt: Ansible and
+ copier own ``{{ }}`` in their own files, and some of their variables
+ share a name with our tokens.
+
+Files tracked by git plus new, non-ignored files are scanned, so build and
+cache directories are skipped for free.
+"""
+
+import sys
+
+import git
+from agebd.subs import (
+ SubstitutionsConfig,
+ find_legacy_tokens,
+ find_tokens,
+)
+from agebd.utils import get_git_root
+
+REPO_ROOT = get_git_root(__file__)
+
+
+def iter_tracked_text_files(repo_root=REPO_ROOT):
+ """
+ Yield (relative_path, contents) for every UTF-8 decodable file that is
+ tracked, or new and not gitignored. New files are included so that a bad
+ token is reported before it is committed rather than after.
+ """
+ repo = git.Repo(repo_root)
+ listing = repo.git.ls_files("--cached", "--others", "--exclude-standard")
+ for rel_path in sorted(set(listing.splitlines())):
+ path = repo_root / rel_path
+ if not path.is_file():
+ continue
+ try:
+ yield rel_path, path.read_text()
+ except (UnicodeDecodeError, OSError):
+ continue
+
+
+def check_declared(config, rel_path, contents):
+ """1. Tokens inside a render path must be declared."""
+ if not config.is_render_path(rel_path):
+ return []
+
+ return [
+ f"{rel_path}: '@@{token}@@' is not declared under 'tokens' in "
+ f"{config.environments_file.name}"
+ for token in sorted(find_tokens(contents))
+ if token not in config.tokens
+ ]
+
+
+def carries_tokens(config, rel_path):
+ """
+ True for paths whose files carry deploy-time tokens as data: they are
+ either rendered, or copied into something that is.
+ """
+ return config.is_render_path(rel_path) or config.is_passthrough_path(rel_path)
+
+
+def check_location(config, rel_path, contents):
+ """2. Declared tokens must sit in a render, passthrough or reference path."""
+ if carries_tokens(config, rel_path) or config.is_reference_path(rel_path):
+ return []
+
+ return [
+ f"{rel_path}: '@@{token}@@' is in a path that is never rendered. In "
+ f"{config.environments_file.name}, add the path to 'locations.render' if it "
+ f"should be substituted at deploy time, or to 'locations.references' if it is "
+ f"part of the substitution machinery. Otherwise remove the token."
+ for token in sorted(find_tokens(contents) & set(config.tokens))
+ ]
+
+
+def check_no_legacy_delimiters(config, rel_path, contents):
+ """
+ 3. No deploy-time token may still use the creation-time delimiters, in the
+ paths that carry tokens. Elsewhere {{ }} belongs to whichever tool owns
+ the file.
+ """
+ if not carries_tokens(config, rel_path):
+ return []
+
+ return [
+ f"{rel_path}: '{{{{ {token} }}}}' uses the creation-time delimiters for a "
+ f"deploy-time token. Write it as '@@{token}@@'."
+ for token in sorted(find_legacy_tokens(contents) & set(config.tokens))
+ ]
+
+
+CHECKS = (check_declared, check_location, check_no_legacy_delimiters)
+
+
+def check_subs(repo_root=REPO_ROOT):
+ """
+ Raise AssertionError listing every violation, or return silently.
+ """
+ config = SubstitutionsConfig.load(repo_root / "config")
+
+ errors = []
+ for rel_path, contents in iter_tracked_text_files(repo_root):
+ for check in CHECKS:
+ errors.extend(check(config, rel_path, contents))
+
+ if errors:
+ raise AssertionError("Deploy-time substitution problems found:\n\n " + "\n ".join(errors))
+
+
+if __name__ == "__main__":
+ try:
+ check_subs()
+ except AssertionError as e:
+ print(e, file=sys.stderr)
+ sys.exit(1)
+ print("All deploy-time tokens are declared and live in a rendered path.")
diff --git a/scripts/tests/test_check_subs.py b/scripts/tests/test_check_subs.py
new file mode 100644
index 0000000..e7e53af
--- /dev/null
+++ b/scripts/tests/test_check_subs.py
@@ -0,0 +1,73 @@
+import pytest
+from agebd.subs import SubstitutionsConfig
+from agebd.utils import get_git_root
+
+from ci.check_subs import (
+ check_declared,
+ check_location,
+ check_no_legacy_delimiters,
+ check_subs,
+)
+
+REPO_ROOT = get_git_root(__file__)
+
+
+@pytest.fixture
+def config():
+ return SubstitutionsConfig.load(REPO_ROOT / "config")
+
+
+def test_repo_satisfies_the_substitution_contract():
+ check_subs()
+
+
+def test_undeclared_token_in_a_render_path_is_reported(config):
+ errors = check_declared(config, "qt/A_BD_Tune.ui", "AGEBD-TUNE@@agebd_env_sufix_upper@@:AO")
+
+ assert len(errors) == 1
+ assert "agebd_env_sufix_upper" in errors[0]
+
+
+def test_declared_token_in_a_render_path_is_accepted(config):
+ assert check_declared(config, "qt/A_BD_Tune.ui", "@@agebd_env_suffix_upper@@") == []
+
+
+def test_token_outside_a_rendered_path_is_reported(config):
+ errors = check_location(config, "bin/start_service.sh", "SUFFIX=@@agebd_env_suffix_upper@@")
+
+ assert len(errors) == 1
+ assert "never rendered" in errors[0]
+
+
+def test_token_in_a_render_path_is_accepted(config):
+ assert check_location(config, "qt/A_BD_Tune.ui", "@@agebd_env_suffix_upper@@") == []
+
+
+def test_token_in_a_passthrough_path_is_accepted(config):
+ assert (
+ check_location(
+ config,
+ "templates/service/{{service_name_lower}}/current/ioc/x.jinja",
+ "@@agebd_env_suffix_upper@@",
+ )
+ == []
+ )
+
+
+def test_legacy_delimiters_are_reported(config):
+ errors = check_no_legacy_delimiters(
+ config, "qt/A_BD_Tune.ui", "AGEBD-TUNE{{ agebd_env_suffix_upper }}:AO"
+ )
+
+ assert len(errors) == 1
+ assert "@@agebd_env_suffix_upper@@" in errors[0]
+
+
+def test_creation_time_tokens_are_left_alone(config):
+ """{{ service_name_upper }} is copier's, not ours."""
+ assert (
+ check_no_legacy_delimiters(
+ config, "templates/service/x/current/ioc/y.jinja", "{{ service_name_upper }}"
+ )
+ == []
+ )
diff --git a/scripts/uv.lock b/scripts/uv.lock
index 4fb18c2..0f9df6b 100644
--- a/scripts/uv.lock
+++ b/scripts/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
diff --git a/services/dbpm3curr/current/app/uv.lock b/services/dbpm3curr/current/app/uv.lock
index d44abe9..c2d1df4 100644
--- a/services/dbpm3curr/current/app/uv.lock
+++ b/services/dbpm3curr/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_main.subs b/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_main.subs
index 9bd8726..0c8c4c7 100644
--- a/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_main.subs
+++ b/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_main.subs
@@ -1,4 +1,4 @@
file DBPM3CURR.template {
pattern { DEVICE }
- { AGEBD-DBPM3CURR{{ agebd_env_suffix_upper }} }
+ { AGEBD-DBPM3CURR@@agebd_env_suffix_upper@@ }
}
diff --git a/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_parameters.yaml b/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_parameters.yaml
+++ b/services/dbpm3curr/current/ioc/AGEBD-CPCL-DBPM3CURR_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/dbpm3curr/current/systemd/AGEBD-SERVICE-DBPM3CURR.service b/services/dbpm3curr/current/systemd/AGEBD-SERVICE-DBPM3CURR.service
index dc46bb9..800fe42 100644
--- a/services/dbpm3curr/current/systemd/AGEBD-SERVICE-DBPM3CURR.service
+++ b/services/dbpm3curr/current/systemd/AGEBD-SERVICE-DBPM3CURR.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-DBPM3CURR
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh DBPM3CURR
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh DBPM3CURR
Restart=no
[Install]
diff --git a/services/injectionguard/current/app/uv.lock b/services/injectionguard/current/app/uv.lock
index dc5c6b5..67f7f0c 100644
--- a/services/injectionguard/current/app/uv.lock
+++ b/services/injectionguard/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_main.subs b/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_main.subs
index 28c92a4..ff29124 100644
--- a/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_main.subs
+++ b/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_main.subs
@@ -1,31 +1,31 @@
file INJECTIONGUARD_individual.template {
pattern { DEVICE }
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} }
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ }
}
file INJECTIONGUARD_automated.template {
pattern { DEVICE NR Latch Description }
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 01 1 "Beam Dump Kicker"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 02 1 "Dump Valve"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 03 1 "MIS"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 04 1 "VCS"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 05 1 "Linac KV/BB/BY"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 06 1 "RF Linac"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 07 1 "RF Booster"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 08 1 "RF Ring"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 09 1 "Magnets Pulsed"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 10 1 "Magnets Booster"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 11 1 "Magnets Corrector"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 12 1 "Magnets Ring"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 13 1 "Current Limit"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 14 1 "IDs Ready"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 15 1 "Single Bunch Charge"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 16 1 "Injection Quality"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 17 1 "Dump Quality"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 18 1 "Lifetime"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 19 1 "Tune"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 20 0 "Pingers"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 21 1 "Vacuum Pressure"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 22 1 "Orbit Deviation"}
- { AGEBD-INJECTIONGUARD{{ agebd_env_suffix_upper }} 23 1 "Beam Dump Controller"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 01 1 "Beam Dump Kicker"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 02 1 "Dump Valve"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 03 1 "MIS"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 04 1 "VCS"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 05 1 "Linac KV/BB/BY"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 06 1 "RF Linac"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 07 1 "RF Booster"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 08 1 "RF Ring"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 09 1 "Magnets Pulsed"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 10 1 "Magnets Booster"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 11 1 "Magnets Corrector"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 12 1 "Magnets Ring"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 13 1 "Current Limit"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 14 1 "IDs Ready"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 15 1 "Single Bunch Charge"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 16 1 "Injection Quality"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 17 1 "Dump Quality"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 18 1 "Lifetime"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 19 1 "Tune"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 20 0 "Pingers"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 21 1 "Vacuum Pressure"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 22 1 "Orbit Deviation"}
+ { AGEBD-INJECTIONGUARD@@agebd_env_suffix_upper@@ 23 1 "Beam Dump Controller"}
}
diff --git a/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_parameters.yaml b/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_parameters.yaml
+++ b/services/injectionguard/current/ioc/AGEBD-CPCL-INJECTIONGUARD_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/injectionguard/current/systemd/AGEBD-SERVICE-INJECTIONGUARD.service b/services/injectionguard/current/systemd/AGEBD-SERVICE-INJECTIONGUARD.service
index 64f6675..007f32a 100644
--- a/services/injectionguard/current/systemd/AGEBD-SERVICE-INJECTIONGUARD.service
+++ b/services/injectionguard/current/systemd/AGEBD-SERVICE-INJECTIONGUARD.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-INJECTIONGUARD
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh INJECTIONGUARD
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh INJECTIONGUARD
Restart=no
[Install]
diff --git a/services/master/current/app/uv.lock b/services/master/current/app/uv.lock
index 7118582..9bd84ca 100644
--- a/services/master/current/app/uv.lock
+++ b/services/master/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
diff --git a/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs b/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
index 6fa7099..7c80682 100644
--- a/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
+++ b/services/master/current/ioc/AGEBD-CPCL-MASTER_main.subs
@@ -1,32 +1,32 @@
file MASTER.template {
pattern { SUFFIX SERVICE STARTON AUTOOFF }
- { "{{ agebd_env_suffix_upper }}", "MASTER" , "0", "30" }
- { "{{ agebd_env_suffix_upper }}", "NTURNS" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "DBPM3CURR" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "TAUBPM" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "TAUPCT" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "SCRUBBING" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "TIMING" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "TUNE" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "INJECTIONGUARD" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "POSTMORTEMLOG" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "TUNEBUMP" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "PLOTS" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "ORBITBUMP" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "TOPUPTOOL" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "SHIFTTOOL" , "1", "0" }
- { "{{ agebd_env_suffix_upper }}", "BEAMTRANSFERCHECKS" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "TUNEFBX" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "TUNEFBY" , "0", "0" }
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X02S" , "0", "0" } # I-TOMCAT
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X03M" , "0", "0" } # ADRESS
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X04S" , "0", "0" } # ADDAMS
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X05L" , "0", "0" } # QUEST
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X06S" , "0", "0" } # PXI
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X07M" , "0", "0" } # PHOENIX/XTREME
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X08S" , "0", "0" } # MicroXAS
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X09L" , "0", "0" } # OPERA
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X10S" , "0", "0" } # PXII
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X11M" , "0", "0" } # SIM
- { "{{ agebd_env_suffix_upper }}", "OPTICSFF-X12S" , "0", "0" } # cSAXS
+ { "@@agebd_env_suffix_upper@@", "MASTER" , "0", "30" }
+ { "@@agebd_env_suffix_upper@@", "NTURNS" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "DBPM3CURR" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "TAUBPM" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "TAUPCT" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "SCRUBBING" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "TIMING" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "TUNE" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "INJECTIONGUARD" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "POSTMORTEMLOG" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "TUNEBUMP" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "PLOTS" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "ORBITBUMP" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "TOPUPTOOL" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "SHIFTTOOL" , "1", "0" }
+ { "@@agebd_env_suffix_upper@@", "BEAMTRANSFERCHECKS" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "TUNEFBX" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "TUNEFBY" , "0", "0" }
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X02S" , "0", "0" } # I-TOMCAT
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X03M" , "0", "0" } # ADRESS
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X04S" , "0", "0" } # ADDAMS
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X05L" , "0", "0" } # QUEST
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X06S" , "0", "0" } # PXI
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X07M" , "0", "0" } # PHOENIX/XTREME
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X08S" , "0", "0" } # MicroXAS
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X09L" , "0", "0" } # OPERA
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X10S" , "0", "0" } # PXII
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X11M" , "0", "0" } # SIM
+ { "@@agebd_env_suffix_upper@@", "OPTICSFF-X12S" , "0", "0" } # cSAXS
}
diff --git a/services/master/current/ioc/AGEBD-CPCL-MASTER_parameters.yaml b/services/master/current/ioc/AGEBD-CPCL-MASTER_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/master/current/ioc/AGEBD-CPCL-MASTER_parameters.yaml
+++ b/services/master/current/ioc/AGEBD-CPCL-MASTER_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/master/current/systemd/AGEBD-SERVICE-MASTER.service b/services/master/current/systemd/AGEBD-SERVICE-MASTER.service
index aea7b97..490eefe 100644
--- a/services/master/current/systemd/AGEBD-SERVICE-MASTER.service
+++ b/services/master/current/systemd/AGEBD-SERVICE-MASTER.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-MASTER
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh MASTER
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh MASTER
Restart=no
[Install]
diff --git a/services/nturns/current/app/uv.lock b/services/nturns/current/app/uv.lock
index 1f79ca4..46026f6 100644
--- a/services/nturns/current/app/uv.lock
+++ b/services/nturns/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -286,6 +288,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_main.subs b/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_main.subs
index 8a6d076..708f2e9 100644
--- a/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_main.subs
+++ b/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_main.subs
@@ -1,4 +1,4 @@
file NTURNS.template {
pattern { DEVICE }
- { AGEBD-NTURNS{{ agebd_env_suffix_upper }} }
+ { AGEBD-NTURNS@@agebd_env_suffix_upper@@ }
}
diff --git a/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_parameters.yaml b/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_parameters.yaml
+++ b/services/nturns/current/ioc/AGEBD-CPCL-NTURNS_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/nturns/current/systemd/AGEBD-SERVICE-NTURNS.service b/services/nturns/current/systemd/AGEBD-SERVICE-NTURNS.service
index 93bc014..cf91666 100644
--- a/services/nturns/current/systemd/AGEBD-SERVICE-NTURNS.service
+++ b/services/nturns/current/systemd/AGEBD-SERVICE-NTURNS.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-NTURNS
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh NTURNS
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh NTURNS
Restart=no
[Install]
diff --git a/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_main.subs b/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_main.subs
index 710b532..286591d 100644
--- a/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_main.subs
+++ b/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_main.subs
@@ -2,31 +2,31 @@ file ORBITBUMP_machine.template {
pattern
{DEVICE sourcepoint beamline LOX HIX X LOXP HIXP XP LOY HIY Y LOYP HIYP YP BPM1 C1xx C1xpx C1yy C1ypy BPM2 C2xx C2xpx C2yy C2ypy BPM3 C3xx C3xpx C3yy C3ypy BPM4 C4xx C4xpx C4yy C4ypy}
# Diagnostic dipole beamlines
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X01DD NEMO -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS01-DBPM-1080 -0.0009920 -0.0006308 -0.0001141 0.0001109 ARS01-DBPM-1460 0.9742755 -0.1432472 0.9455447 -0.0865934 ARS01-DBPM-1900 0.9277200 1.0454287 0.1445141 1.5920941 ARS01-DBPM-2410 -0.0809412 -0.0384293 0.0058229 0.1036650}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X08DB DISCO -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS08-DBPM-1900 -0.2500389 -0.0365053 0.0001023 0.0000595 ARS08-DBPM-2410 1.2775662 -0.9246414 0.5814965 -0.4999301 ARS08-DBPM-2910 0.6885552 0.9211364 0.4873898 1.7550023 ARS08-DBPM-4220 -0.2391394 -0.0169593 0.0309046 0.1234665}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X10DG X11HEAT -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS10-DBPM-4720 -0.0187 -0.0188 0 0 ARS10-DBPM-5250 1.6016 -1.2108 0.5496 -0.5376 ARS10-DBPM-5880 0.7075 1.0654 1.1093 1.9515 ARS11-DBPM-0850 0.0026 0.0044 0.0166 0.0304}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X01DD NEMO -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS01-DBPM-1080 -0.0009920 -0.0006308 -0.0001141 0.0001109 ARS01-DBPM-1460 0.9742755 -0.1432472 0.9455447 -0.0865934 ARS01-DBPM-1900 0.9277200 1.0454287 0.1445141 1.5920941 ARS01-DBPM-2410 -0.0809412 -0.0384293 0.0058229 0.1036650}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X08DB DISCO -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS08-DBPM-1900 -0.2500389 -0.0365053 0.0001023 0.0000595 ARS08-DBPM-2410 1.2775662 -0.9246414 0.5814965 -0.4999301 ARS08-DBPM-2910 0.6885552 0.9211364 0.4873898 1.7550023 ARS08-DBPM-4220 -0.2391394 -0.0169593 0.0309046 0.1234665}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X10DG X11HEAT -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS10-DBPM-4720 -0.0187 -0.0188 0 0 ARS10-DBPM-5250 1.6016 -1.2108 0.5496 -0.5376 ARS10-DBPM-5880 0.7075 1.0654 1.1093 1.9515 ARS11-DBPM-0850 0.0026 0.0044 0.0166 0.0304}
# User dipole beamlines
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X01DA DEBYE -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS01-DBPM-2410 -0.2169694 -0.0006291 0.0001170 0.0000325 ARS01-DBPM-2910 1.2765938 -0.9208697 0.5792863 -0.5011470 ARS01-DBPM-4220 0.6866207 0.9198858 0.4842977 1.7595080 ARS01-DBPM-4720 -0.1924402 0.0258918 0.0307458 0.1239361}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X02DA S-TOMCAT -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS02-DBPM-2410 -0.2089937 0.0072435 0.0001169 0.0000325 ARS02-DBPM-2910 1.2772588 -0.9200089 0.5792866 -0.5011606 ARS02-DBPM-4220 0.6864959 0.9194778 0.4843170 1.7595616 ARS02-DBPM-4720 -0.1833930 0.0352770 0.0307471 0.1239392}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X03DA PEARL -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS03-DBPM-2410 -0.2016647 0.0152728 0.0001171 0.0000326 ARS03-DBPM-2910 1.2831552 -0.9190247 0.5819894 -0.5004911 ARS03-DBPM-4220 0.6905553 0.9206615 0.4875028 1.7552635 ARS03-DBPM-4720 -0.1749243 0.0438144 0.0309089 0.1234182}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X04DB VUV -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS04-DBPM-1900 -0.1917962 0.0214714 0.0001022 0.0000595 ARS04-DBPM-2410 1.2842031 -0.9179380 0.5814999 -0.5000284 ARS04-DBPM-2910 0.6887599 0.9211626 0.4874732 1.7553295 ARS04-DBPM-4220 -0.1710439 0.0514609 0.0309080 0.1234788}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X05DA Optics -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS05-DBPM-2410 -0.2740176 -0.0571105 0.0001170 0.0000321 ARS05-DBPM-2910 1.2732647 -0.9287209 0.5819890 -0.5003730 ARS05-DBPM-4220 0.6913367 0.9213802 0.4873370 1.7548006 ARS05-DBPM-4720 -0.2592981 -0.0408063 0.0308988 0.1233928}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X06DA PXIII -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS06-DBPM-2410 -0.2675305 -0.0508248 0.0001170 0.0000321 ARS06-DBPM-2910 1.2749858 -0.9266845 0.5818007 -0.5004548 ARS06-DBPM-4220 0.6916389 0.9218001 0.4871613 1.7552275 ARS06-DBPM-4720 -0.2517260 -0.0332473 0.0308895 0.1234316}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X07DB nanoXAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS07-DBPM-1900 -0.2563387 -0.0425222 0.0001023 0.0000596 ARS07-DBPM-2410 1.2761628 -0.9263027 0.5814954 -0.4999177 ARS07-DBPM-2910 0.6888233 0.9216262 0.4873810 1.7549631 ARS07-DBPM-4220 -0.2469055 -0.0248794 0.0309043 0.1234651}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X07DA PolLux -300 300 0 -150 150 0 -300 300 0 -250 250 0 ARS07-DBPM-2410 -0.2606076 -0.0450539 0.0001170 0.0000326 ARS07-DBPM-2910 1.2750718 -0.9205684 0.5819899 -0.4976199 ARS07-DBPM-4220 0.6915728 0.9246379 0.4873668 1.7572153 ARS07-DBPM-4720 -0.2433555 -0.0254434 0.0309006 0.1235450}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X10DA SuperXAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS10-DBPM-2410 -0.2392400 -0.0226765 0.0001170 0.0000321 ARS10-DBPM-2910 1.2780895 -0.9235140 0.5818007 -0.5005005 ARS10-DBPM-4220 0.6911875 0.9212713 0.4872251 1.7554059 ARS10-DBPM-4720 -0.2190626 -0.0004438 0.0308933 0.1234413}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X01DA DEBYE -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS01-DBPM-2410 -0.2169694 -0.0006291 0.0001170 0.0000325 ARS01-DBPM-2910 1.2765938 -0.9208697 0.5792863 -0.5011470 ARS01-DBPM-4220 0.6866207 0.9198858 0.4842977 1.7595080 ARS01-DBPM-4720 -0.1924402 0.0258918 0.0307458 0.1239361}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X02DA S-TOMCAT -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS02-DBPM-2410 -0.2089937 0.0072435 0.0001169 0.0000325 ARS02-DBPM-2910 1.2772588 -0.9200089 0.5792866 -0.5011606 ARS02-DBPM-4220 0.6864959 0.9194778 0.4843170 1.7595616 ARS02-DBPM-4720 -0.1833930 0.0352770 0.0307471 0.1239392}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X03DA PEARL -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS03-DBPM-2410 -0.2016647 0.0152728 0.0001171 0.0000326 ARS03-DBPM-2910 1.2831552 -0.9190247 0.5819894 -0.5004911 ARS03-DBPM-4220 0.6905553 0.9206615 0.4875028 1.7552635 ARS03-DBPM-4720 -0.1749243 0.0438144 0.0309089 0.1234182}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X04DB VUV -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS04-DBPM-1900 -0.1917962 0.0214714 0.0001022 0.0000595 ARS04-DBPM-2410 1.2842031 -0.9179380 0.5814999 -0.5000284 ARS04-DBPM-2910 0.6887599 0.9211626 0.4874732 1.7553295 ARS04-DBPM-4220 -0.1710439 0.0514609 0.0309080 0.1234788}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X05DA Optics -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS05-DBPM-2410 -0.2740176 -0.0571105 0.0001170 0.0000321 ARS05-DBPM-2910 1.2732647 -0.9287209 0.5819890 -0.5003730 ARS05-DBPM-4220 0.6913367 0.9213802 0.4873370 1.7548006 ARS05-DBPM-4720 -0.2592981 -0.0408063 0.0308988 0.1233928}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X06DA PXIII -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS06-DBPM-2410 -0.2675305 -0.0508248 0.0001170 0.0000321 ARS06-DBPM-2910 1.2749858 -0.9266845 0.5818007 -0.5004548 ARS06-DBPM-4220 0.6916389 0.9218001 0.4871613 1.7552275 ARS06-DBPM-4720 -0.2517260 -0.0332473 0.0308895 0.1234316}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X07DB nanoXAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS07-DBPM-1900 -0.2563387 -0.0425222 0.0001023 0.0000596 ARS07-DBPM-2410 1.2761628 -0.9263027 0.5814954 -0.4999177 ARS07-DBPM-2910 0.6888233 0.9216262 0.4873810 1.7549631 ARS07-DBPM-4220 -0.2469055 -0.0248794 0.0309043 0.1234651}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X07DA PolLux -300 300 0 -150 150 0 -300 300 0 -250 250 0 ARS07-DBPM-2410 -0.2606076 -0.0450539 0.0001170 0.0000326 ARS07-DBPM-2910 1.2750718 -0.9205684 0.5819899 -0.4976199 ARS07-DBPM-4220 0.6915728 0.9246379 0.4873668 1.7572153 ARS07-DBPM-4720 -0.2433555 -0.0254434 0.0309006 0.1235450}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X10DA SuperXAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS10-DBPM-2410 -0.2392400 -0.0226765 0.0001170 0.0000321 ARS10-DBPM-2910 1.2780895 -0.9235140 0.5818007 -0.5005005 ARS10-DBPM-4220 0.6911875 0.9212713 0.4872251 1.7554059 ARS10-DBPM-4720 -0.2190626 -0.0004438 0.0308933 0.1234413}
# ID beamlines
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X02SA I-TOMCAT -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS01-DBPM-5250 -0.0161762 0.0645315 -0.0000522 0.0002217 ARS01-DBPM-5880 1.3057217 -3.1586368 0.7340909 -1.7908669 ARS02-DBPM-1080 1.1637103 2.7703664 0.8405251 2.0415012 ARS02-DBPM-1460 0.0473369 0.1176477 0.0354851 0.0914118}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X03MA ADRESS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS02-DBPM-5250 -0.0056074 0.0805576 -0.0000533 0.0001427 ARS02-DBPM-5880 1.2522257 -3.5240592 0.7649336 -2.1576328 ARS03-DBPM-0810 1.1134798 3.0406278 0.8874945 2.4488073 ARS03-DBPM-1080 0.0367597 0.0902093 0.0491615 0.1421129}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X04SA ADDAMS -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS03-DBPM-5250 0.0006041 0.0811354 -0.0000524 0.0002222 ARS03-DBPM-5880 1.3048037 -3.1594991 0.7340820 -1.7909262 ARS04-DBPM-1080 1.1649402 2.7718322 0.8405182 2.0415768 ARS04-DBPM-1460 0.0441826 0.1145073 0.0354841 0.0914133}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X05LA QUEST -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS04-DBPM-5880 0.0008866 0.0002252 -0.0001045 0.0002529 ARS05-DBPM-0410 0.8976150 -2.8499257 1.0112790 -2.8592349 ARS05-DBPM-1080 1.0880889 5.0183256 0.9137175 4.2390359 ARS05-DBPM-1460 0.0421489 0.1947713 0.0433357 0.2067705}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X06SA PXI -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS05-DBPM-5250 -0.0776973 0.0030268 -0.0000523 0.0002212 ARS05-DBPM-5880 1.3044906 -3.1590695 0.7341239 -1.7906420 ARS06-DBPM-1080 1.1642809 2.7699897 0.8405515 2.0412179 ARS06-DBPM-1460 0.0604868 0.1306028 0.0354886 0.0914055}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X07MA Phoenix/XTreme -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS06-DBPM-5250 -0.0684380 0.0189547 -0.0000531 0.0001447 ARS06-DBPM-5880 1.2508776 -3.5845660 0.7649630 -2.1939024 ARS07-DBPM-0810 1.1137188 2.9863773 0.8875136 2.4060190 ARS07-DBPM-1080 0.0093629 0.0606390 0.0491634 0.1397441}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X08SA micro-XAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS07-DBPM-5250 -0.0624701 0.0181621 -0.0000523 0.0002216 ARS07-DBPM-5880 1.3039931 -3.1597229 0.7341156 -1.7906968 ARS08-DBPM-1080 1.1652753 2.7714013 0.8405450 2.0412871 ARS08-DBPM-1460 0.0575855 0.1278140 0.0354876 0.0914065}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X09LA PEARL/XIL-II -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS08-DBPM-5880 0.0011254 0.0009724 -0.0000942 0.0002317 ARS09-DBPM-0570 0.8843735 -2.4344684 1.1263977 -3.0082085 ARS09-DBPM-1080 1.0591734 3.0395499 0.9413643 2.7184391 ARS09-DBPM-1460 0.0394021 0.1139547 0.0465775 0.1402264}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X10SA PXII -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS09-DBPM-5250 -0.0473875 0.0333454 -0.0000523 0.0002213 ARS09-DBPM-5880 1.3047178 -3.1592507 0.7341077 -1.7907518 ARS10-DBPM-1080 1.1639981 2.7701547 0.8405387 2.0413565 ARS10-DBPM-1460 0.0540084 0.1242161 0.0354869 0.0914087}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X11MA SIM -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS10-DBPM-5250 -0.0383667 0.0514782 -0.0000499 0.0001646 ARS10-DBPM-5880 1.2526899 -3.7342542 0.7640638 -2.2804441 ARS11-DBPM-0850 1.1168967 3.1441871 0.8845808 2.5170397 ARS11-DBPM-1080 0.0219427 0.0928506 0.0546028 0.1626088}
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X12SA cSAXS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS11-DBPM-5250 -0.0326376 0.0479239 -0.0000524 0.0002219 ARS11-DBPM-5880 1.3047910 -3.1591765 0.7340995 -1.7908066 ARS12-DBPM-1080 1.1653151 2.7718178 0.8405322 2.0414257 ARS12-DBPM-1460 0.0513287 0.1216036 0.0354860 0.0914097}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X02SA I-TOMCAT -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS01-DBPM-5250 -0.0161762 0.0645315 -0.0000522 0.0002217 ARS01-DBPM-5880 1.3057217 -3.1586368 0.7340909 -1.7908669 ARS02-DBPM-1080 1.1637103 2.7703664 0.8405251 2.0415012 ARS02-DBPM-1460 0.0473369 0.1176477 0.0354851 0.0914118}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X03MA ADRESS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS02-DBPM-5250 -0.0056074 0.0805576 -0.0000533 0.0001427 ARS02-DBPM-5880 1.2522257 -3.5240592 0.7649336 -2.1576328 ARS03-DBPM-0810 1.1134798 3.0406278 0.8874945 2.4488073 ARS03-DBPM-1080 0.0367597 0.0902093 0.0491615 0.1421129}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X04SA ADDAMS -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS03-DBPM-5250 0.0006041 0.0811354 -0.0000524 0.0002222 ARS03-DBPM-5880 1.3048037 -3.1594991 0.7340820 -1.7909262 ARS04-DBPM-1080 1.1649402 2.7718322 0.8405182 2.0415768 ARS04-DBPM-1460 0.0441826 0.1145073 0.0354841 0.0914133}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X05LA QUEST -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS04-DBPM-5880 0.0008866 0.0002252 -0.0001045 0.0002529 ARS05-DBPM-0410 0.8976150 -2.8499257 1.0112790 -2.8592349 ARS05-DBPM-1080 1.0880889 5.0183256 0.9137175 4.2390359 ARS05-DBPM-1460 0.0421489 0.1947713 0.0433357 0.2067705}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X06SA PXI -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS05-DBPM-5250 -0.0776973 0.0030268 -0.0000523 0.0002212 ARS05-DBPM-5880 1.3044906 -3.1590695 0.7341239 -1.7906420 ARS06-DBPM-1080 1.1642809 2.7699897 0.8405515 2.0412179 ARS06-DBPM-1460 0.0604868 0.1306028 0.0354886 0.0914055}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X07MA Phoenix/XTreme -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS06-DBPM-5250 -0.0684380 0.0189547 -0.0000531 0.0001447 ARS06-DBPM-5880 1.2508776 -3.5845660 0.7649630 -2.1939024 ARS07-DBPM-0810 1.1137188 2.9863773 0.8875136 2.4060190 ARS07-DBPM-1080 0.0093629 0.0606390 0.0491634 0.1397441}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X08SA micro-XAS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS07-DBPM-5250 -0.0624701 0.0181621 -0.0000523 0.0002216 ARS07-DBPM-5880 1.3039931 -3.1597229 0.7341156 -1.7906968 ARS08-DBPM-1080 1.1652753 2.7714013 0.8405450 2.0412871 ARS08-DBPM-1460 0.0575855 0.1278140 0.0354876 0.0914065}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X09LA PEARL/XIL-II -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS08-DBPM-5880 0.0011254 0.0009724 -0.0000942 0.0002317 ARS09-DBPM-0570 0.8843735 -2.4344684 1.1263977 -3.0082085 ARS09-DBPM-1080 1.0591734 3.0395499 0.9413643 2.7184391 ARS09-DBPM-1460 0.0394021 0.1139547 0.0465775 0.1402264}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X10SA PXII -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS09-DBPM-5250 -0.0473875 0.0333454 -0.0000523 0.0002213 ARS09-DBPM-5880 1.3047178 -3.1592507 0.7341077 -1.7907518 ARS10-DBPM-1080 1.1639981 2.7701547 0.8405387 2.0413565 ARS10-DBPM-1460 0.0540084 0.1242161 0.0354869 0.0914087}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X11MA SIM -500 500 0 -150 150 0 -500 500 0 -150 150 0 ARS10-DBPM-5250 -0.0383667 0.0514782 -0.0000499 0.0001646 ARS10-DBPM-5880 1.2526899 -3.7342542 0.7640638 -2.2804441 ARS11-DBPM-0850 1.1168967 3.1441871 0.8845808 2.5170397 ARS11-DBPM-1080 0.0219427 0.0928506 0.0546028 0.1626088}
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X12SA cSAXS -300 300 0 -150 150 0 -300 300 0 -150 150 0 ARS11-DBPM-5250 -0.0326376 0.0479239 -0.0000524 0.0002219 ARS11-DBPM-5880 1.3047910 -3.1591765 0.7340995 -1.7908066 ARS12-DBPM-1080 1.1653151 2.7718178 0.8405322 2.0414257 ARS12-DBPM-1460 0.0513287 0.1216036 0.0354860 0.0914097}
}
@@ -34,29 +34,29 @@ file ORBITBUMP_beamline.template {
pattern
{DEVICE sourcepoint beamline DRVL DRVH X XP Y YP }
# Diagnostic dipole beamlines
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X01DD NEMO -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X08DB DISCO -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X10DG X11HEAT -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X01DD NEMO -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X08DB DISCO -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X10DG X11HEAT -10 10 0 0 0 0 }
# User dipole beamlines
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X01DA DEBYE -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X02DA S-TOMCAT -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X03DA PEARL -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X04DB VUV -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X05DA Optics -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X06DA PXIII -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X07DB nanoXAS -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X07DA PolLux -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X10DA SuperXAS -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X01DA DEBYE -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X02DA S-TOMCAT -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X03DA PEARL -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X04DB VUV -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X05DA Optics -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X06DA PXIII -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X07DB nanoXAS -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X07DA PolLux -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X10DA SuperXAS -10 10 0 0 0 0 }
# ID beamlines
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X02SA I-TOMCAT -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X03MA ADRESS -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X04SA ADDAMS -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X05LA QUEST -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X06SA PXI -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X07MA Phoenix/XTreme -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X08SA micro-XAS -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X09LA PEARL/XIL-II -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X10SA PXII -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X11MA SIM -10 10 0 0 0 0 }
- {AGEBD-ORBITBUMP{{ agebd_env_suffix_upper }} X12SA cSAXS -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X02SA I-TOMCAT -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X03MA ADRESS -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X04SA ADDAMS -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X05LA QUEST -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X06SA PXI -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X07MA Phoenix/XTreme -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X08SA micro-XAS -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X09LA PEARL/XIL-II -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X10SA PXII -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X11MA SIM -10 10 0 0 0 0 }
+ {AGEBD-ORBITBUMP@@agebd_env_suffix_upper@@ X12SA cSAXS -10 10 0 0 0 0 }
}
diff --git a/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_parameters.yaml b/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_parameters.yaml
+++ b/services/orbitbump/current/ioc/AGEBD-CPCL-ORBITBUMP_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/params/current/ioc/AGEBD-CPCL-PARAMS_main.subs b/services/params/current/ioc/AGEBD-CPCL-PARAMS_main.subs
index 17d70e3..6eec21d 100644
--- a/services/params/current/ioc/AGEBD-CPCL-PARAMS_main.subs
+++ b/services/params/current/ioc/AGEBD-CPCL-PARAMS_main.subs
@@ -1,4 +1,4 @@
file PARAMS.template {
pattern { DEVICE }
- { AGEBD-PARAMS{{ agebd_env_suffix_upper }} }
+ { AGEBD-PARAMS@@agebd_env_suffix_upper@@ }
}
diff --git a/services/params/current/ioc/AGEBD-CPCL-PARAMS_parameters.yaml b/services/params/current/ioc/AGEBD-CPCL-PARAMS_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/params/current/ioc/AGEBD-CPCL-PARAMS_parameters.yaml
+++ b/services/params/current/ioc/AGEBD-CPCL-PARAMS_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/plots/current/app/uv.lock b/services/plots/current/app/uv.lock
index b02d9a2..1c4bad6 100644
--- a/services/plots/current/app/uv.lock
+++ b/services/plots/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -510,6 +512,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "requests"
version = "2.34.2"
diff --git a/services/plots/current/ioc/AGEBD-CPCL-PLOTS_main.subs b/services/plots/current/ioc/AGEBD-CPCL-PLOTS_main.subs
index 17e7b9d..2e9deb5 100644
--- a/services/plots/current/ioc/AGEBD-CPCL-PLOTS_main.subs
+++ b/services/plots/current/ioc/AGEBD-CPCL-PLOTS_main.subs
@@ -1,64 +1,64 @@
file PLOTS_timeaxis.template {
pattern
{ DEVICE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }} }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@ }
}
file PLOTS_9h.template {
pattern
{ DEVICE, NAME, INP }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, CURRENT, AGEBD-PARAMS:CURRENT }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, CURRENT-BPM, AGEBD-DBPM3CURR:CURRENT-AVG }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, CURRENT-PCT, ARS07-DPCT-0000:CURR }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, INJECTION-RATE, AGEBD-PARAMS:INJECTION-RATE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, TRANSMISSION, AGEBD-PARAMS:TRANSMISSION }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, LIFETIME, AGEBD-PARAMS:LIFETIME }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, MAVAC-AVG, ARIVA-VMAVE:PRESS-AVE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, MAVAC-MAX, ARIVA-VMAVE:PRESS-MAX }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, FEVAC-AVG, ARIVA-VMAVE-FE:PRESS-AVE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, FEVAC-MAX, ARIVA-VMAVE-FE:PRESS-MAX }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ABRTL-DDRM-0670, ABRTL-DDRM-0670:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ABRTL-DDRM-0950, ABRTL-DDRM-0950:FET1_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X05LA-DDRM-0330, X05LA-DDRM-0330:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X05LA-DDRM-0650, X05LA-DDRM-0650:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X09LA-DDRM-0330, X09LA-DDRM-0330:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X09LA-DDRM-0790, X09LA-DDRM-0790:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS01-DDRM-0375, ARS01-DDRM-0375:FET1_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS01-DDRM-1530, ARS01-DDRM-1530:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS05-DDRM-1530, ARS05-DDRM-1530:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS05-DDRM-3500, ARS05-DDRM-3500:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS09-DDRM-1530, ARS09-DDRM-1530:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS09-DDRM-3500, ARS09-DDRM-3500:FET2_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS12-DDRM-1530, ARS12-DDRM-1530:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS12-DDRM-3500, ARS12-DDRM-3500:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS12-DDRM-4400, ARS12-DDRM-4400:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, ARS12-DDRM-5480, ARS12-DDRM-5480:FET1_BIAS_DOSE}
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X02SA-UIND-GAP, AGEOP-STATUS:X02SA-UIND-GAP} # Soft Blue #A0C4FF
- # { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X03MA-UIND-GAP, AGEOP-STATUS:X03MA-UIND-GAP} # Warm Orange #FFD6A5
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X04SA-UIND-GAP, AGEOP-STATUS:X04SA-UIND-GAP} # Light Green #CAFFBF
- # { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X05LA-UIND-GAP, AGEOP-STATUS:X05LA-UIND-GAP} # Coral Red #FFADAD
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X06SA-UIND-GAP, AGEOP-STATUS:X06SA-UIND-GAP} # Lavender #CDB4DB
- # { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X07MA-UIND-GAP, AGEOP-STATUS:X07MA-UIND-GAP} # Desert Tan #DDB892
- # { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X08SA-UIND-GAP, AGEOP-STATUS:X08SA-UIND-GAP} # Peach Pink #FFB5A7
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X09LB-UIND-GAP, AGEOP-STATUS:X09LB-UIND-GAP} # Aqua Blue #9BF6FF
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X10SA-UIND-GAP, AGEOP-STATUS:X10SA-UIND-GAP} # Pale Yellow #FDFFB6
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X11MA-UIND2-GAP, AGEOP-STATUS:X11MA-UIND2-GAP} # Periwinkle #BDB2FF
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, X12SA-UIND-GAP, AGEOP-STATUS:X12SA-UIND-GAP} # Mint Green #B0F2C2
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, CURRENT, AGEBD-PARAMS:CURRENT }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, CURRENT-BPM, AGEBD-DBPM3CURR:CURRENT-AVG }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, CURRENT-PCT, ARS07-DPCT-0000:CURR }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, INJECTION-RATE, AGEBD-PARAMS:INJECTION-RATE }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, TRANSMISSION, AGEBD-PARAMS:TRANSMISSION }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, LIFETIME, AGEBD-PARAMS:LIFETIME }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, MAVAC-AVG, ARIVA-VMAVE:PRESS-AVE }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, MAVAC-MAX, ARIVA-VMAVE:PRESS-MAX }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, FEVAC-AVG, ARIVA-VMAVE-FE:PRESS-AVE }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, FEVAC-MAX, ARIVA-VMAVE-FE:PRESS-MAX }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ABRTL-DDRM-0670, ABRTL-DDRM-0670:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ABRTL-DDRM-0950, ABRTL-DDRM-0950:FET1_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X05LA-DDRM-0330, X05LA-DDRM-0330:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X05LA-DDRM-0650, X05LA-DDRM-0650:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X09LA-DDRM-0330, X09LA-DDRM-0330:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X09LA-DDRM-0790, X09LA-DDRM-0790:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS01-DDRM-0375, ARS01-DDRM-0375:FET1_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS01-DDRM-1530, ARS01-DDRM-1530:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS05-DDRM-1530, ARS05-DDRM-1530:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS05-DDRM-3500, ARS05-DDRM-3500:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS09-DDRM-1530, ARS09-DDRM-1530:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS09-DDRM-3500, ARS09-DDRM-3500:FET2_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS12-DDRM-1530, ARS12-DDRM-1530:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS12-DDRM-3500, ARS12-DDRM-3500:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS12-DDRM-4400, ARS12-DDRM-4400:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, ARS12-DDRM-5480, ARS12-DDRM-5480:FET1_BIAS_DOSE}
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X02SA-UIND-GAP, AGEOP-STATUS:X02SA-UIND-GAP} # Soft Blue #A0C4FF
+ # { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X03MA-UIND-GAP, AGEOP-STATUS:X03MA-UIND-GAP} # Warm Orange #FFD6A5
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X04SA-UIND-GAP, AGEOP-STATUS:X04SA-UIND-GAP} # Light Green #CAFFBF
+ # { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X05LA-UIND-GAP, AGEOP-STATUS:X05LA-UIND-GAP} # Coral Red #FFADAD
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X06SA-UIND-GAP, AGEOP-STATUS:X06SA-UIND-GAP} # Lavender #CDB4DB
+ # { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X07MA-UIND-GAP, AGEOP-STATUS:X07MA-UIND-GAP} # Desert Tan #DDB892
+ # { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X08SA-UIND-GAP, AGEOP-STATUS:X08SA-UIND-GAP} # Peach Pink #FFB5A7
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X09LB-UIND-GAP, AGEOP-STATUS:X09LB-UIND-GAP} # Aqua Blue #9BF6FF
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X10SA-UIND-GAP, AGEOP-STATUS:X10SA-UIND-GAP} # Pale Yellow #FDFFB6
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X11MA-UIND2-GAP, AGEOP-STATUS:X11MA-UIND2-GAP} # Periwinkle #BDB2FF
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, X12SA-UIND-GAP, AGEOP-STATUS:X12SA-UIND-GAP} # Mint Green #B0F2C2
}
file PLOTS_week.template {
pattern
{ DEVICE, NAME, INP }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, CURRENT-BPM, AGEBD-DBPM3CURR:CURRENT-AVG }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, CURRENT-PCT, ARS07-DPCT-0000:CURR }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, TAU-BPM, AGEBD-TAUBPM:TAU }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, TAU-PCT, AGEBD-TAUPCT:TAU }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, TAU-TOPUP, AGEBD-SCRUBBING:TOPUP-TAU }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, INJRATE-BPM, AGEBD-TAUBPM:INJRATE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, INJRATE-PCT, AGEBD-TAUPCT:INJRATE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, MAVAC-AVG, ARIVA-VMAVE:PRESS-AVE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, MAVAC-MAX, ARIVA-VMAVE:PRESS-MAX }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, FEVAC-AVG, ARIVA-VMAVE-FE:PRESS-AVE }
- { AGEBD-PLOTS{{ agebd_env_suffix_upper }}, FEVAC-MAX, ARIVA-VMAVE-FE:PRESS-MAX }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, CURRENT-BPM, AGEBD-DBPM3CURR:CURRENT-AVG }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, CURRENT-PCT, ARS07-DPCT-0000:CURR }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, TAU-BPM, AGEBD-TAUBPM:TAU }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, TAU-PCT, AGEBD-TAUPCT:TAU }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, TAU-TOPUP, AGEBD-SCRUBBING:TOPUP-TAU }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, INJRATE-BPM, AGEBD-TAUBPM:INJRATE }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, INJRATE-PCT, AGEBD-TAUPCT:INJRATE }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, MAVAC-AVG, ARIVA-VMAVE:PRESS-AVE }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, MAVAC-MAX, ARIVA-VMAVE:PRESS-MAX }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, FEVAC-AVG, ARIVA-VMAVE-FE:PRESS-AVE }
+ { AGEBD-PLOTS@@agebd_env_suffix_upper@@, FEVAC-MAX, ARIVA-VMAVE-FE:PRESS-MAX }
}
diff --git a/services/plots/current/ioc/AGEBD-CPCL-PLOTS_parameters.yaml b/services/plots/current/ioc/AGEBD-CPCL-PLOTS_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/plots/current/ioc/AGEBD-CPCL-PLOTS_parameters.yaml
+++ b/services/plots/current/ioc/AGEBD-CPCL-PLOTS_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/plots/current/systemd/AGEBD-SERVICE-PLOTS.service b/services/plots/current/systemd/AGEBD-SERVICE-PLOTS.service
index 98888ed..9f4739c 100644
--- a/services/plots/current/systemd/AGEBD-SERVICE-PLOTS.service
+++ b/services/plots/current/systemd/AGEBD-SERVICE-PLOTS.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-PLOTS
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh PLOTS
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh PLOTS
Restart=no
[Install]
diff --git a/services/postmortemlog/current/app/uv.lock b/services/postmortemlog/current/app/uv.lock
index d036cb1..4550566 100644
--- a/services/postmortemlog/current/app/uv.lock
+++ b/services/postmortemlog/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -506,6 +508,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "requests"
version = "2.34.2"
diff --git a/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs
index c424cf8..1b79c63 100644
--- a/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs
+++ b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_main.subs
@@ -1,129 +1,129 @@
file POSTMORTEMLOG.template {
pattern
{ DEVICE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ }
}
file POSTMORTEMLOG_15min10Hz.template {
pattern
{ DEVICE NAME INP}
# ---------- BEAM CURRENT --------------
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} CURRBPM AGEBD-DBPM3CURR:CURRENT-AVG }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} CURRPCT ARS07-DPCT-0000:CURR }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ CURRBPM AGEBD-DBPM3CURR:CURRENT-AVG }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ CURRPCT ARS07-DPCT-0000:CURR }
# ---------- BEAM LIFETIME --------------
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} TAUBPM AGEBD-TAUBPM:TAU }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} TAUPCT AGEBD-TAUPCT:TAU }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ TAUBPM AGEBD-TAUBPM:TAU }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ TAUPCT AGEBD-TAUPCT:TAU }
# ---------- TUNES --------------
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} QX AGEBD-TUNEBUMP:QX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} QY AGEBD-TUNEBUMP:QY }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} QZ AGEBD-TUNEBUMP:QZ }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ QX AGEBD-TUNEBUMP:QX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ QY AGEBD-TUNEBUMP:QY }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ QZ AGEBD-TUNEBUMP:QZ }
# ---------- LOSSES --------------
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-DDRM-0375 ARS01-DDRM-0375:FET1_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ABRTL-DDRM-0670 ABRTL-DDRM-0670:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ABRTL-DDRM-0950 ABRTL-DDRM-0950:FET1_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-DDRM-1530 ARS01-DDRM-1530:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} X05LA-DDRM-0330 X05LA-DDRM-0330:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-DDRM-1530 ARS05-DDRM-1530:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-DDRM-3500 ARS05-DDRM-3500:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} X09LA-DDRM-0330 X09LA-DDRM-0330:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-DDRM-1530 ARS09-DDRM-1530:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-DDRM-3500 ARS09-DDRM-3500:FET2_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-DDRM-1530 ARS12-DDRM-1530:FET1_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-DDRM-3500 ARS12-DDRM-3500:FET2_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-DDRM-4400 ARS12-DDRM-4400:FET2_BIAS_DOSE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-DDRM-5480 ARS12-DDRM-5480:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-DDRM-0375 ARS01-DDRM-0375:FET1_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ABRTL-DDRM-0670 ABRTL-DDRM-0670:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ABRTL-DDRM-0950 ABRTL-DDRM-0950:FET1_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-DDRM-1530 ARS01-DDRM-1530:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ X05LA-DDRM-0330 X05LA-DDRM-0330:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-DDRM-1530 ARS05-DDRM-1530:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-DDRM-3500 ARS05-DDRM-3500:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ X09LA-DDRM-0330 X09LA-DDRM-0330:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-DDRM-1530 ARS09-DDRM-1530:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-DDRM-3500 ARS09-DDRM-3500:FET2_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-DDRM-1530 ARS12-DDRM-1530:FET1_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-DDRM-3500 ARS12-DDRM-3500:FET2_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-DDRM-4400 ARS12-DDRM-4400:FET2_BIAS_DOSE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-DDRM-5480 ARS12-DDRM-5480:FET1_BIAS_DOSE }
# ---------- RF --------------
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} MASTERFREQ-SET AGERF-MO01:FREQ-SET }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} MASTERFREQ-GET AGERF-MO01:FREQ-GET }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0140-INP ARS05-RCAV-0140:CO1i-POWER-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0060-INP ARS05-RCAV-0060:CO1i-POWER-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0230-INP ARS05-RCAV-0230:CO1i-POWER-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0310-INP ARS05-RCAV-0310:CO1i-POWER-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0060-REF ARS05-RCAV-0060:CO1r-POWER-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0140-REF ARS05-RCAV-0140:CO1r-POWER-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0230-REF ARS05-RCAV-0230:CO1r-POWER-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} RFPOW-0310-REF ARS05-RCAV-0310:CO1r-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ MASTERFREQ-SET AGERF-MO01:FREQ-SET }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ MASTERFREQ-GET AGERF-MO01:FREQ-GET }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0140-INP ARS05-RCAV-0140:CO1i-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0060-INP ARS05-RCAV-0060:CO1i-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0230-INP ARS05-RCAV-0230:CO1i-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0310-INP ARS05-RCAV-0310:CO1i-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0060-REF ARS05-RCAV-0060:CO1r-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0140-REF ARS05-RCAV-0140:CO1r-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0230-REF ARS05-RCAV-0230:CO1r-POWER-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ RFPOW-0310-REF ARS05-RCAV-0310:CO1r-POWER-MAX }
# ---------- BEAM SIZE --------------
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} X01DD-SIGX X01DD-FE-CAM1:SIG-X }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} X01DD-SIGY X01DD-FE-CAM1:SIG-Y }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} X08DB-SIGX X08DB-FE-CAM1:SIG-X }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} X08DB-SIGY X08DB-FE-CAM1:SIG-Y }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ X01DD-SIGX X01DD-FE-CAM1:SIG-X }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ X01DD-SIGY X01DD-FE-CAM1:SIG-Y }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ X08DB-SIGX X08DB-FE-CAM1:SIG-X }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ X08DB-SIGY X08DB-FE-CAM1:SIG-Y }
# ---------- VACUUM --------------
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} VACMAX ARIVA-VMAVE:PRESS-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} VACMAXFE ARIVA-VMAVE-FE:PRESS-MAX }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-VMCC-0110 ARS01-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-VMCC-0210 ARS01-VMCC-0210:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-VMCC-0225 ARS01-VMCC-0225:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-VMCC-0310 ARS01-VMCC-0310:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-VMCC-1550 ARS01-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-VMCC-3510 ARS01-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS01-VMCC-5460 ARS01-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS02-VMCC-0110 ARS02-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS02-VMCC-0210 ARS02-VMCC-0210:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS02-VMCC-0310 ARS02-VMCC-0310:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS02-VMCC-1550 ARS02-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS02-VMCC-3510 ARS02-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS02-VMCC-5460 ARS02-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS03-VMCC-0110 ARS03-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS03-VMCC-0320 ARS03-VMCC-0320:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS03-VMCC-1550 ARS03-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS03-VMCC-3510 ARS03-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS03-VMCC-5460 ARS03-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS04-VMCC-0110 ARS04-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS04-VMCC-1550 ARS04-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS04-VMCC-3510 ARS04-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS04-VMCC-5460 ARS04-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0110 ARS05-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0115 ARS05-VMCC-0115:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0210 ARS05-VMCC-0210:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0215 ARS05-VMCC-0215:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0310 ARS05-VMCC-0310:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0315 ARS05-VMCC-0315:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0410 ARS05-VMCC-0410:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0415 ARS05-VMCC-0415:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0510 ARS05-VMCC-0510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0520 ARS05-VMCC-0520:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0530 ARS05-VMCC-0530:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-0810 ARS05-VMCC-0810:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-1550 ARS05-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-3510 ARS05-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS05-VMCC-5460 ARS05-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS06-VMCC-0110 ARS06-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS06-VMCC-1550 ARS06-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS06-VMCC-3510 ARS06-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS06-VMCC-5460 ARS06-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS07-VMCC-0010 ARS07-VMCC-0010:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS07-VMCC-0120 ARS07-VMCC-0120:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS07-VMCC-0210 ARS07-VMCC-0210:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS07-VMCC-1550 ARS07-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS07-VMCC-3510 ARS07-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS07-VMCC-5460 ARS07-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS08-VMCC-0110 ARS08-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS08-VMCC-1550 ARS08-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS08-VMCC-3510 ARS08-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS08-VMCC-5460 ARS08-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-0110 ARS09-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-0120 ARS09-VMCC-0120:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-0410 ARS09-VMCC-0410:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-0510 ARS09-VMCC-0510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-0810 ARS09-VMCC-0810:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-1550 ARS09-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-3510 ARS09-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS09-VMCC-5460 ARS09-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS10-VMCC-0110 ARS10-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS10-VMCC-1550 ARS10-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS10-VMCC-3510 ARS10-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS10-VMCC-5460 ARS10-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-0110 ARS11-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-0210 ARS11-VMCC-0210:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-0310 ARS11-VMCC-0310:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-0410 ARS11-VMCC-0410:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-0510 ARS11-VMCC-0510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-1550 ARS11-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-3510 ARS11-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS11-VMCC-5460 ARS11-VMCC-5460:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-VMCC-0110 ARS12-VMCC-0110:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-VMCC-1550 ARS12-VMCC-1550:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-VMCC-3510 ARS12-VMCC-3510:PRESSURE }
- { AGEBD-POSTMORTEMLOG{{ agebd_env_suffix_upper }} ARS12-VMCC-5460 ARS12-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ VACMAX ARIVA-VMAVE:PRESS-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ VACMAXFE ARIVA-VMAVE-FE:PRESS-MAX }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-VMCC-0110 ARS01-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-VMCC-0210 ARS01-VMCC-0210:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-VMCC-0225 ARS01-VMCC-0225:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-VMCC-0310 ARS01-VMCC-0310:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-VMCC-1550 ARS01-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-VMCC-3510 ARS01-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS01-VMCC-5460 ARS01-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS02-VMCC-0110 ARS02-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS02-VMCC-0210 ARS02-VMCC-0210:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS02-VMCC-0310 ARS02-VMCC-0310:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS02-VMCC-1550 ARS02-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS02-VMCC-3510 ARS02-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS02-VMCC-5460 ARS02-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS03-VMCC-0110 ARS03-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS03-VMCC-0320 ARS03-VMCC-0320:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS03-VMCC-1550 ARS03-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS03-VMCC-3510 ARS03-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS03-VMCC-5460 ARS03-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS04-VMCC-0110 ARS04-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS04-VMCC-1550 ARS04-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS04-VMCC-3510 ARS04-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS04-VMCC-5460 ARS04-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0110 ARS05-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0115 ARS05-VMCC-0115:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0210 ARS05-VMCC-0210:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0215 ARS05-VMCC-0215:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0310 ARS05-VMCC-0310:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0315 ARS05-VMCC-0315:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0410 ARS05-VMCC-0410:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0415 ARS05-VMCC-0415:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0510 ARS05-VMCC-0510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0520 ARS05-VMCC-0520:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0530 ARS05-VMCC-0530:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-0810 ARS05-VMCC-0810:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-1550 ARS05-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-3510 ARS05-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS05-VMCC-5460 ARS05-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS06-VMCC-0110 ARS06-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS06-VMCC-1550 ARS06-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS06-VMCC-3510 ARS06-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS06-VMCC-5460 ARS06-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS07-VMCC-0010 ARS07-VMCC-0010:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS07-VMCC-0120 ARS07-VMCC-0120:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS07-VMCC-0210 ARS07-VMCC-0210:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS07-VMCC-1550 ARS07-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS07-VMCC-3510 ARS07-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS07-VMCC-5460 ARS07-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS08-VMCC-0110 ARS08-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS08-VMCC-1550 ARS08-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS08-VMCC-3510 ARS08-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS08-VMCC-5460 ARS08-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-0110 ARS09-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-0120 ARS09-VMCC-0120:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-0410 ARS09-VMCC-0410:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-0510 ARS09-VMCC-0510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-0810 ARS09-VMCC-0810:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-1550 ARS09-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-3510 ARS09-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS09-VMCC-5460 ARS09-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS10-VMCC-0110 ARS10-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS10-VMCC-1550 ARS10-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS10-VMCC-3510 ARS10-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS10-VMCC-5460 ARS10-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-0110 ARS11-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-0210 ARS11-VMCC-0210:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-0310 ARS11-VMCC-0310:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-0410 ARS11-VMCC-0410:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-0510 ARS11-VMCC-0510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-1550 ARS11-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-3510 ARS11-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS11-VMCC-5460 ARS11-VMCC-5460:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-VMCC-0110 ARS12-VMCC-0110:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-VMCC-1550 ARS12-VMCC-1550:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-VMCC-3510 ARS12-VMCC-3510:PRESSURE }
+ { AGEBD-POSTMORTEMLOG@@agebd_env_suffix_upper@@ ARS12-VMCC-5460 ARS12-VMCC-5460:PRESSURE }
}
diff --git a/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml
+++ b/services/postmortemlog/current/ioc/AGEBD-CPCL-POSTMORTEMLOG_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service b/services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service
index 0c9bef2..3812a83 100644
--- a/services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service
+++ b/services/postmortemlog/current/systemd/AGEBD-SERVICE-POSTMORTEMLOG.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-POSTMORTEMLOG
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh POSTMORTEMLOG
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh POSTMORTEMLOG
Restart=no
[Install]
diff --git a/services/scrubbing/current/app/uv.lock b/services/scrubbing/current/app/uv.lock
index c4e3018..3a93903 100644
--- a/services/scrubbing/current/app/uv.lock
+++ b/services/scrubbing/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_main.subs b/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_main.subs
index 7c4b66f..d9be150 100644
--- a/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_main.subs
+++ b/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_main.subs
@@ -1,4 +1,4 @@
file SCRUBBING.template {
pattern { DEVICE }
- { AGEBD-SCRUBBING{{ agebd_env_suffix_upper }} }
+ { AGEBD-SCRUBBING@@agebd_env_suffix_upper@@ }
}
diff --git a/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_parameters.yaml b/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_parameters.yaml
+++ b/services/scrubbing/current/ioc/AGEBD-CPCL-SCRUBBING_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/scrubbing/current/systemd/AGEBD-SERVICE-SCRUBBING.service b/services/scrubbing/current/systemd/AGEBD-SERVICE-SCRUBBING.service
index 479b986..22183fc 100644
--- a/services/scrubbing/current/systemd/AGEBD-SERVICE-SCRUBBING.service
+++ b/services/scrubbing/current/systemd/AGEBD-SERVICE-SCRUBBING.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-SCRUBBING
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh SCRUBBING
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh SCRUBBING
Restart=no
[Install]
diff --git a/services/shifttool/current/app/uv.lock b/services/shifttool/current/app/uv.lock
index f89a870..ee3e89e 100644
--- a/services/shifttool/current/app/uv.lock
+++ b/services/shifttool/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -373,6 +375,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "requests"
version = "2.34.2"
diff --git a/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_main.subs b/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_main.subs
index 1e54004..4b4c10e 100644
--- a/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_main.subs
+++ b/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_main.subs
@@ -1,4 +1,4 @@
file SHIFTTOOL.template {
pattern { DEVICE }
- { AGEBD-SHIFTTOOL{{ agebd_env_suffix_upper }} }
+ { AGEBD-SHIFTTOOL@@agebd_env_suffix_upper@@ }
}
diff --git a/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_parameters.yaml b/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_parameters.yaml
+++ b/services/shifttool/current/ioc/AGEBD-CPCL-SHIFTTOOL_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/shifttool/current/systemd/AGEBD-SERVICE-SHIFTTOOL.service b/services/shifttool/current/systemd/AGEBD-SERVICE-SHIFTTOOL.service
index e1e1a1c..95dfb42 100644
--- a/services/shifttool/current/systemd/AGEBD-SERVICE-SHIFTTOOL.service
+++ b/services/shifttool/current/systemd/AGEBD-SERVICE-SHIFTTOOL.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-SHIFTTOOL
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh SHIFTTOOL
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh SHIFTTOOL
Restart=no
[Install]
diff --git a/services/taubpm/current/app/uv.lock b/services/taubpm/current/app/uv.lock
index ab2369d..6180982 100644
--- a/services/taubpm/current/app/uv.lock
+++ b/services/taubpm/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_main.subs b/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_main.subs
index bef2d58..24d8543 100644
--- a/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_main.subs
+++ b/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_main.subs
@@ -1,4 +1,4 @@
file TAUBPM.template {
pattern { DEVICE }
- { AGEBD-TAUBPM{{ agebd_env_suffix_upper }} }
+ { AGEBD-TAUBPM@@agebd_env_suffix_upper@@ }
}
diff --git a/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_parameters.yaml b/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_parameters.yaml
+++ b/services/taubpm/current/ioc/AGEBD-CPCL-TAUBPM_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/taubpm/current/systemd/AGEBD-SERVICE-TAUBPM.service b/services/taubpm/current/systemd/AGEBD-SERVICE-TAUBPM.service
index 7a2c19d..59e5dae 100644
--- a/services/taubpm/current/systemd/AGEBD-SERVICE-TAUBPM.service
+++ b/services/taubpm/current/systemd/AGEBD-SERVICE-TAUBPM.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TAUBPM
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TAUBPM
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TAUBPM
Restart=no
[Install]
diff --git a/services/taupct/current/app/uv.lock b/services/taupct/current/app/uv.lock
index 939300c..2d56d1e 100644
--- a/services/taupct/current/app/uv.lock
+++ b/services/taupct/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_main.subs b/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_main.subs
index efe7adc..f902cd6 100644
--- a/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_main.subs
+++ b/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_main.subs
@@ -1,4 +1,4 @@
file TAUPCT.template {
pattern { DEVICE }
- { AGEBD-TAUPCT{{ agebd_env_suffix_upper }} }
+ { AGEBD-TAUPCT@@agebd_env_suffix_upper@@ }
}
diff --git a/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_parameters.yaml b/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_parameters.yaml
+++ b/services/taupct/current/ioc/AGEBD-CPCL-TAUPCT_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/taupct/current/systemd/AGEBD-SERVICE-TAUPCT.service b/services/taupct/current/systemd/AGEBD-SERVICE-TAUPCT.service
index 8632a60..8695bb4 100644
--- a/services/taupct/current/systemd/AGEBD-SERVICE-TAUPCT.service
+++ b/services/taupct/current/systemd/AGEBD-SERVICE-TAUPCT.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TAUPCT
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TAUPCT
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TAUPCT
Restart=no
[Install]
diff --git a/services/timing/current/app/uv.lock b/services/timing/current/app/uv.lock
index 24e45d2..94c899e 100644
--- a/services/timing/current/app/uv.lock
+++ b/services/timing/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/timing/current/ioc/AGEBD-CPCL-TIMING_main.subs b/services/timing/current/ioc/AGEBD-CPCL-TIMING_main.subs
index 768d0f2..9837aba 100644
--- a/services/timing/current/ioc/AGEBD-CPCL-TIMING_main.subs
+++ b/services/timing/current/ioc/AGEBD-CPCL-TIMING_main.subs
@@ -1,4 +1,4 @@
file TIMING.template {
pattern { DEVICE }
- { AGEBD-TIMING{{ agebd_env_suffix_upper }} }
+ { AGEBD-TIMING@@agebd_env_suffix_upper@@ }
}
diff --git a/services/timing/current/ioc/AGEBD-CPCL-TIMING_parameters.yaml b/services/timing/current/ioc/AGEBD-CPCL-TIMING_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/timing/current/ioc/AGEBD-CPCL-TIMING_parameters.yaml
+++ b/services/timing/current/ioc/AGEBD-CPCL-TIMING_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/timing/current/systemd/AGEBD-SERVICE-TIMING.service b/services/timing/current/systemd/AGEBD-SERVICE-TIMING.service
index 37d3228..7650e5c 100644
--- a/services/timing/current/systemd/AGEBD-SERVICE-TIMING.service
+++ b/services/timing/current/systemd/AGEBD-SERVICE-TIMING.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TIMING
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TIMING
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TIMING
Restart=no
[Install]
diff --git a/services/topuptool/current/app/uv.lock b/services/topuptool/current/app/uv.lock
index a1e962a..137728b 100644
--- a/services/topuptool/current/app/uv.lock
+++ b/services/topuptool/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_main.subs b/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_main.subs
index 99c70ee..5edf85b 100644
--- a/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_main.subs
+++ b/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_main.subs
@@ -1,4 +1,4 @@
file TOPUPTOOL.template {
pattern { DEVICE }
- { AGEBD-TOPUPTOOL{{ agebd_env_suffix_upper }} }
+ { AGEBD-TOPUPTOOL@@agebd_env_suffix_upper@@ }
}
diff --git a/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_parameters.yaml b/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_parameters.yaml
+++ b/services/topuptool/current/ioc/AGEBD-CPCL-TOPUPTOOL_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/topuptool/current/systemd/AGEBD-SERVICE-TOPUPTOOL.service b/services/topuptool/current/systemd/AGEBD-SERVICE-TOPUPTOOL.service
index f322fb2..612e53f 100644
--- a/services/topuptool/current/systemd/AGEBD-SERVICE-TOPUPTOOL.service
+++ b/services/topuptool/current/systemd/AGEBD-SERVICE-TOPUPTOOL.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TOPUPTOOL
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TOPUPTOOL
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TOPUPTOOL
Restart=no
[Install]
diff --git a/services/tune/current/app/uv.lock b/services/tune/current/app/uv.lock
index e7452fe..effe985 100644
--- a/services/tune/current/app/uv.lock
+++ b/services/tune/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -382,6 +384,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs b/services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs
index 45ad64a..64f89f8 100644
--- a/services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs
+++ b/services/tune/current/ioc/AGEBD-CPCL-TUNE_main.subs
@@ -1,4 +1,4 @@
file TUNE.template {
pattern { DEVICE }
- { AGEBD-TUNE{{ agebd_env_suffix_upper }} }
+ { AGEBD-TUNE@@agebd_env_suffix_upper@@ }
}
diff --git a/services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml b/services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml
+++ b/services/tune/current/ioc/AGEBD-CPCL-TUNE_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/tune/current/systemd/AGEBD-SERVICE-TUNE.service b/services/tune/current/systemd/AGEBD-SERVICE-TUNE.service
index a2ef74f..e3d8433 100644
--- a/services/tune/current/systemd/AGEBD-SERVICE-TUNE.service
+++ b/services/tune/current/systemd/AGEBD-SERVICE-TUNE.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TUNE
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TUNE
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TUNE
Restart=no
[Install]
diff --git a/services/tunebump/current/app/uv.lock b/services/tunebump/current/app/uv.lock
index fa7fbfc..30017a1 100644
--- a/services/tunebump/current/app/uv.lock
+++ b/services/tunebump/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -288,6 +290,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_main.subs b/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_main.subs
index eda0773..1b568b7 100644
--- a/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_main.subs
+++ b/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_main.subs
@@ -1,4 +1,4 @@
file TUNEBUMP.template {
pattern { DEVICE }
- { AGEBD-TUNEBUMP{{ agebd_env_suffix_upper }} }
+ { AGEBD-TUNEBUMP@@agebd_env_suffix_upper@@ }
}
diff --git a/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_parameters.yaml b/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_parameters.yaml
+++ b/services/tunebump/current/ioc/AGEBD-CPCL-TUNEBUMP_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/tunebump/current/systemd/AGEBD-SERVICE-TUNEBUMP.service b/services/tunebump/current/systemd/AGEBD-SERVICE-TUNEBUMP.service
index 1c9313b..623ae62 100644
--- a/services/tunebump/current/systemd/AGEBD-SERVICE-TUNEBUMP.service
+++ b/services/tunebump/current/systemd/AGEBD-SERVICE-TUNEBUMP.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TUNEBUMP
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TUNEBUMP
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TUNEBUMP
Restart=no
[Install]
diff --git a/services/tunefbx/current/app/uv.lock b/services/tunefbx/current/app/uv.lock
index 46b65ea..b06290c 100644
--- a/services/tunefbx/current/app/uv.lock
+++ b/services/tunefbx/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_main.subs b/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_main.subs
index 4ce5b49..91e35d9 100644
--- a/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_main.subs
+++ b/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_main.subs
@@ -1,4 +1,4 @@
file TUNEFBX.template {
pattern { DEVICE }
- { AGEBD-TUNEFBX{{ agebd_env_suffix_upper }} }
+ { AGEBD-TUNEFBX@@agebd_env_suffix_upper@@ }
}
diff --git a/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_parameters.yaml b/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_parameters.yaml
+++ b/services/tunefbx/current/ioc/AGEBD-CPCL-TUNEFBX_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/tunefbx/current/systemd/AGEBD-SERVICE-TUNEFBX.service b/services/tunefbx/current/systemd/AGEBD-SERVICE-TUNEFBX.service
index 85688a0..ce93033 100644
--- a/services/tunefbx/current/systemd/AGEBD-SERVICE-TUNEFBX.service
+++ b/services/tunefbx/current/systemd/AGEBD-SERVICE-TUNEFBX.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TUNEFBX
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TUNEFBX
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TUNEFBX
Restart=no
[Install]
diff --git a/services/tunefby/current/app/uv.lock b/services/tunefby/current/app/uv.lock
index ae9bbd5..9639669 100644
--- a/services/tunefby/current/app/uv.lock
+++ b/services/tunefby/current/app/uv.lock
@@ -10,6 +10,7 @@ dependencies = [
{ name = "gitpython" },
{ name = "h5py" },
{ name = "pyepics" },
+ { name = "pyyaml" },
{ name = "typer" },
]
@@ -18,6 +19,7 @@ requires-dist = [
{ name = "gitpython", specifier = ">=3.1.50" },
{ name = "h5py", specifier = ">=3.16.0" },
{ name = "pyepics", specifier = ">=3.5.10" },
+ { name = "pyyaml", specifier = ">=6.0.3" },
{ name = "typer", specifier = ">=0.23.2" },
]
@@ -284,6 +286,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/a0/39350dd17dd6d6c6507025c0e53aef67a9293a6d37d3511f23ea510d5800/pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b", size = 184227, upload-time = "2025-09-25T21:31:46.04Z" },
+ { url = "https://files.pythonhosted.org/packages/05/14/52d505b5c59ce73244f59c7a50ecf47093ce4765f116cdb98286a71eeca2/pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956", size = 174019, upload-time = "2025-09-25T21:31:47.706Z" },
+ { url = "https://files.pythonhosted.org/packages/43/f7/0e6a5ae5599c838c696adb4e6330a59f463265bfa1e116cfd1fbb0abaaae/pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8", size = 740646, upload-time = "2025-09-25T21:31:49.21Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/3a/61b9db1d28f00f8fd0ae760459a5c4bf1b941baf714e207b6eb0657d2578/pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198", size = 840793, upload-time = "2025-09-25T21:31:50.735Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1e/7acc4f0e74c4b3d9531e24739e0ab832a5edf40e64fbae1a9c01941cabd7/pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b", size = 770293, upload-time = "2025-09-25T21:31:51.828Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/ef/abd085f06853af0cd59fa5f913d61a8eab65d7639ff2a658d18a25d6a89d/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0", size = 732872, upload-time = "2025-09-25T21:31:53.282Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/15/2bc9c8faf6450a8b3c9fc5448ed869c599c0a74ba2669772b1f3a0040180/pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69", size = 758828, upload-time = "2025-09-25T21:31:54.807Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/00/531e92e88c00f4333ce359e50c19b8d1de9fe8d581b1534e35ccfbc5f393/pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e", size = 142415, upload-time = "2025-09-25T21:31:55.885Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/fa/926c003379b19fca39dd4634818b00dec6c62d87faf628d1394e137354d4/pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c", size = 158561, upload-time = "2025-09-25T21:31:57.406Z" },
+]
+
[[package]]
name = "rich"
version = "15.0.0"
diff --git a/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_main.subs b/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_main.subs
index 759a18d..9b64018 100644
--- a/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_main.subs
+++ b/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_main.subs
@@ -1,4 +1,4 @@
file TUNEFBY.template {
pattern { DEVICE }
- { AGEBD-TUNEFBY{{ agebd_env_suffix_upper }} }
+ { AGEBD-TUNEFBY@@agebd_env_suffix_upper@@ }
}
diff --git a/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_parameters.yaml b/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_parameters.yaml
index c179f0d..24aa364 100644
--- a/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_parameters.yaml
+++ b/services/tunefby/current/ioc/AGEBD-CPCL-TUNEFBY_parameters.yaml
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ agebd_env_suffix_lower }}
-ioc_port: {{ ioc_port }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/services/tunefby/current/systemd/AGEBD-SERVICE-TUNEFBY.service b/services/tunefby/current/systemd/AGEBD-SERVICE-TUNEFBY.service
index c2f2d0e..828b784 100644
--- a/services/tunefby/current/systemd/AGEBD-SERVICE-TUNEFBY.service
+++ b/services/tunefby/current/systemd/AGEBD-SERVICE-TUNEFBY.service
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-TUNEFBY
After=network.target
[Service]
-Environment=AGEBD_ENV={{ agebd_env }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{ agebd_env }}/bin/start_service.sh TUNEFBY
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh TUNEFBY
Restart=no
[Install]
diff --git a/templates/qt/A_BD_{{ui_filename}}.ui.jinja b/templates/qt/A_BD_{{ui_filename}}.ui.jinja
index 307ae6d..1e372dc 100644
--- a/templates/qt/A_BD_{{ui_filename}}.ui.jinja
+++ b/templates/qt/A_BD_{{ui_filename}}.ui.jinja
@@ -30,7 +30,7 @@
0
- AGEBD-{{ service_name_upper }}{{ '{{ agebd_env_suffix_upper }}' }}:AO
+ AGEBD-{{ service_name_upper }}@@agebd_env_suffix_upper@@:AO
9.000000000000000
@@ -49,10 +49,10 @@
- Toggle AGEBD-ALH{{ '{{ agebd_env_suffix_upper }}' }}:{{ service_name_upper }}-ONOFF
+ Toggle AGEBD-ALH@@agebd_env_suffix_upper@@:{{ service_name_upper }}-ONOFF
- AGEBD-ALH{{ '{{ agebd_env_suffix_upper }}' }}:{{ service_name_upper }}-ONOFF
+ AGEBD-ALH@@agebd_env_suffix_upper@@:{{ service_name_upper }}-ONOFF
@@ -70,7 +70,7 @@
- Value of AGEBD-{{ service_name_upper }}{{ '{{ agebd_env_suffix_upper }}' }}:AO
+ Value of AGEBD-{{ service_name_upper }}@@agebd_env_suffix_upper@@:AO
diff --git a/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_main.subs.jinja b/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_main.subs.jinja
index 78f2f06..a209fa1 100644
--- a/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_main.subs.jinja
+++ b/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_main.subs.jinja
@@ -1,4 +1,4 @@
file {{ service_name_upper }}.template {
pattern { DEVICE }
- { AGEBD-{{ service_name_upper }}{{ '{{ agebd_env_suffix_upper }}' }} }
+ { AGEBD-{{ service_name_upper }}@@agebd_env_suffix_upper@@ }
}
diff --git a/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_parameters.yaml.jinja b/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_parameters.yaml.jinja
index 8748d7c..24aa364 100644
--- a/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_parameters.yaml.jinja
+++ b/templates/service/{{service_name_lower}}/current/ioc/AGEBD-CPCL-{{service_name_upper}}_parameters.yaml.jinja
@@ -1,6 +1,6 @@
cpu_architecture: x86_64
epics_version: 7.0.8
-ioc_host: sls-vserv-bd-01{{ '{{ agebd_env_suffix_lower }}' }}
-ioc_port: {{ '{{ ioc_port }}' }}
+ioc_host: sls-vserv-bd-01@@agebd_env_suffix_lower@@
+ioc_port: @@ioc_port@@
os: RHEL8
os_id: rhel
diff --git a/templates/service/{{service_name_lower}}/current/systemd/AGEBD-SERVICE-{{service_name_upper}}.service.jinja b/templates/service/{{service_name_lower}}/current/systemd/AGEBD-SERVICE-{{service_name_upper}}.service.jinja
index 61b1e48..2bdaf79 100644
--- a/templates/service/{{service_name_lower}}/current/systemd/AGEBD-SERVICE-{{service_name_upper}}.service.jinja
+++ b/templates/service/{{service_name_lower}}/current/systemd/AGEBD-SERVICE-{{service_name_upper}}.service.jinja
@@ -3,9 +3,9 @@ Description=AGEBD-SERVICE-{{ service_name_upper }}
After=network.target
[Service]
-Environment=AGEBD_ENV={{ '{{ agebd_env }}' }}
+Environment=AGEBD_ENV=@@agebd_env@@
Environment=PYTHONUNBUFFERED=1
-ExecStart=/sls/bd/hla/{{'{{ agebd_env }}'}}/bin/start_service.sh {{ service_name_upper }}
+ExecStart=/sls/bd/hla/@@agebd_env@@/bin/start_service.sh {{ service_name_upper }}
Restart=no
[Install]