No symlink deployment

This commit is contained in:
2025-10-06 12:44:50 +02:00
parent 95e6a598f4
commit 23e2004365
6 changed files with 62 additions and 41 deletions
+55 -34
View File
@@ -29,6 +29,35 @@
- name: EPICS setup
include_tasks: epics_setup.yaml
- name: Get info about deployment path
ansible.builtin.stat:
path: "{{ deployment_path }}"
register: deployment_path_info
- name: Remove the old-style symlink if it exists
ansible.builtin.file:
path: "{{ deployment_path }}"
state: absent
when: deployment_path_info.stat.islnk is defined and deployment_path_info.stat.islnk
- name: Create a folder for old deployments
become_user: "{{ deployment_user }}"
ansible.builtin.file:
path: "{{ old_deployments_path }}"
state: directory
- name: Stop bec-server if it exists and running
ansible.builtin.systemd:
name: bec-server.service
state: stopped
register: systemd_stop_result
failed_when: "systemd_stop_result is failed and 'Could not find the requested service' not in systemd_stop_result.msg"
- name: Move the previous deployment into an old deployments timestamped folder
ansible.builtin.command:
cmd: mv {{ deployment_path }} {{ old_deployments_path }}/{{ ansible_date_time['iso8601_basic_short'] }}
when: deployment_path_info.stat.exists and deployment_path_info.stat.isdir
- name: Create a folder for BEC server logs
ansible.builtin.file:
owner: "{{ service_user }}"
@@ -38,7 +67,7 @@
- name: Create a folder for BEC deployment
become_user: "{{ deployment_user }}"
ansible.builtin.file:
path: "{{ timestamped_deployment_path }}"
path: "{{ deployment_path }}"
state: directory
- name: Create a folder for secrets
@@ -90,28 +119,28 @@
become_user: "{{ deployment_user }}"
ansible.builtin.git:
repo: https://github.com/bec-project/bec.git
dest: "{{ timestamped_deployment_path }}/bec"
dest: "{{ deployment_path }}/bec"
version: "{{ bec_version }}"
- name: Clone Ophyd Devices repository
become_user: "{{ deployment_user }}"
ansible.builtin.git:
repo: https://github.com/bec-project/ophyd_devices.git
dest: "{{ timestamped_deployment_path }}/ophyd_devices"
dest: "{{ deployment_path }}/ophyd_devices"
version: "{{ ophyd_devices_version }}"
- name: Clone BEC Widgets repository
become_user: "{{ deployment_user }}"
ansible.builtin.git:
repo: https://github.com/bec-project/bec_widgets.git
dest: "{{ timestamped_deployment_path }}/bec_widgets"
dest: "{{ deployment_path }}/bec_widgets"
version: "{{ bec_widgets_version }}"
- name: Create user branches in git repositories
become_user: "{{ deployment_user }}"
ansible.builtin.command:
cmd: git switch -c {{ user_git_branch_name }}
chdir: "{{ timestamped_deployment_path }}/{{ item }}"
chdir: "{{ deployment_path }}/{{ item }}"
loop:
- bec
- ophyd_devices
@@ -124,7 +153,7 @@
name: user.name
value: "{{ git_username }}"
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item }}"
repo: "{{ deployment_path }}/{{ item }}"
loop:
- bec
- ophyd_devices
@@ -137,7 +166,7 @@
name: user.email
value: "{{ git_username }}@psi.ch"
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item }}"
repo: "{{ deployment_path }}/{{ item }}"
loop:
- bec
- ophyd_devices
@@ -150,7 +179,7 @@
name: pull.rebase
value: true
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item }}"
repo: "{{ deployment_path }}/{{ item }}"
loop:
- bec
- ophyd_devices
@@ -163,7 +192,7 @@
name: core.sharedRepository
value: group
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item }}"
repo: "{{ deployment_path }}/{{ item }}"
loop:
- bec
- ophyd_devices
@@ -174,7 +203,7 @@
become_user: "{{ deployment_user }}"
ansible.builtin.git:
repo: https://git:{{ bec_bl_push_pat }}@gitea.psi.ch/bec/{{ item.key }}.git
dest: "{{ timestamped_deployment_path }}/{{ item.key }}"
dest: "{{ deployment_path }}/{{ item.key }}"
version: "{{ item.value or 'main' }}"
loop: "{{ bec_plugins | dict2items }}"
when: not ansible_check_mode
@@ -183,7 +212,7 @@
become_user: "{{ deployment_user }}"
ansible.builtin.command:
cmd: git switch -c {{ user_git_branch_name }}
chdir: "{{ timestamped_deployment_path }}/{{ item.key }}"
chdir: "{{ deployment_path }}/{{ item.key }}"
loop: "{{ bec_plugins | dict2items }}"
when: not ansible_check_mode
@@ -193,7 +222,7 @@
name: user.name
value: "{{ git_username }}"
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item.key }}"
repo: "{{ deployment_path }}/{{ item.key }}"
loop: "{{ bec_plugins | dict2items }}"
when: not ansible_check_mode
@@ -203,7 +232,7 @@
name: user.email
value: "{{ git_username }}@psi.ch"
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item.key }}"
repo: "{{ deployment_path }}/{{ item.key }}"
loop: "{{ bec_plugins | dict2items }}"
when: not ansible_check_mode
@@ -213,7 +242,7 @@
name: pull.rebase
value: true
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item.key }}"
repo: "{{ deployment_path }}/{{ item.key }}"
loop: "{{ bec_plugins | dict2items }}"
when: not ansible_check_mode
@@ -223,14 +252,14 @@
name: core.sharedRepository
value: group
scope: local
repo: "{{ timestamped_deployment_path }}/{{ item.key }}"
repo: "{{ deployment_path }}/{{ item.key }}"
loop: "{{ bec_plugins | dict2items }}"
when: not ansible_check_mode
- name: Install bec_lib
become_user: "{{ deployment_user }}"
ansible.builtin.pip:
name: "{{ timestamped_deployment_path }}/bec/bec_lib"
name: "{{ deployment_path }}/bec/bec_lib"
editable: true
virtualenv_command: "{{ python_version }} -m venv"
virtualenv: "{{ bec_venv_path }}"
@@ -240,7 +269,7 @@
- name: Install bec_ipython_client
become_user: "{{ deployment_user }}"
ansible.builtin.pip:
name: "{{ timestamped_deployment_path }}/bec/bec_ipython_client"
name: "{{ deployment_path }}/bec/bec_ipython_client"
editable: true
virtualenv_command: "{{ python_version }} -m venv"
virtualenv: "{{ bec_venv_path }}"
@@ -248,7 +277,7 @@
- name: Install ophyd_devices
become_user: "{{ deployment_user }}"
ansible.builtin.pip:
name: "{{ timestamped_deployment_path }}/ophyd_devices"
name: "{{ deployment_path }}/ophyd_devices"
editable: true
virtualenv_command: "{{ python_version }} -m venv"
virtualenv: "{{ bec_venv_path }}"
@@ -258,7 +287,7 @@
- name: Install bec_widgets
become_user: "{{ deployment_user }}"
ansible.builtin.pip:
name: "{{ timestamped_deployment_path }}/bec_widgets[pyside6]"
name: "{{ deployment_path }}/bec_widgets[pyside6]"
editable: true
virtualenv_command: "{{ python_version }} -m venv"
virtualenv: "{{ bec_venv_path }}"
@@ -266,7 +295,7 @@
- name: Install bec_server
become_user: "{{ deployment_user }}"
ansible.builtin.pip:
name: "{{ timestamped_deployment_path }}/bec/bec_server"
name: "{{ deployment_path }}/bec/bec_server"
editable: true
virtualenv_command: "{{ python_version }} -m venv"
virtualenv: "{{ bec_venv_path }}"
@@ -276,7 +305,7 @@
- name: Install BEC plugins
become_user: "{{ deployment_user }}"
ansible.builtin.pip:
name: "{{ timestamped_deployment_path }}/{{ item.key }}"
name: "{{ deployment_path }}/{{ item.key }}"
editable: true
virtualenv_command: "{{ python_version }} -m venv"
virtualenv: "{{ bec_venv_path }}"
@@ -287,14 +316,14 @@
- name: Create BEC deployment config directory
become_user: "{{ deployment_user }}"
ansible.builtin.file:
path: "{{ timestamped_deployment_path }}/deployment_configs"
path: "{{ deployment_path }}/deployment_configs"
state: directory
- name: Copy BEC service config
become_user: "{{ deployment_user }}"
ansible.builtin.template:
src: bec_config_server.yaml.j2
dest: "{{ timestamped_deployment_path }}/deployment_configs/server.yaml"
dest: "{{ deployment_path }}/deployment_configs/server.yaml"
notify:
- (Re-)start BEC server
@@ -302,7 +331,7 @@
become_user: "{{ deployment_user }}"
ansible.builtin.template:
src: bec_config_client.yaml.j2
dest: "{{ timestamped_deployment_path }}/deployment_configs/client.yaml"
dest: "{{ deployment_path }}/deployment_configs/client.yaml"
- name: Copy BEC service files
ansible.builtin.template:
@@ -319,26 +348,18 @@
notify:
- (Re-)start BEC server
- name: Create a link to the current deployment
become_user: "{{ deployment_user }}"
ansible.builtin.file:
src: "{{ timestamped_deployment_path }}"
dest: "{{ deployment_path_prefix }}/{{ deployment_name }}"
state: link
when: not ansible_check_mode
- name: Copy BEC set account binary
become_user: "{{ deployment_user }}"
ansible.builtin.copy:
src: bec_set_account
dest: "{{ timestamped_deployment_path }}/bin/"
dest: "{{ deployment_path }}/bin/"
mode: u+x,g+x
- name: Copy BEC set account script
become_user: "{{ deployment_user }}"
ansible.builtin.template:
src: bec-set-account.j2
dest: "{{ timestamped_deployment_path }}/bec-set-account"
dest: "{{ deployment_path }}/bec-set-account"
mode: u+x,g+rx
- name: Add bec startup script
+1 -1
View File
@@ -5,7 +5,7 @@ Description=bec-server service
Type=oneshot
RemainAfterExit=yes
User={{ service_user }}
WorkingDirectory={{ timestamped_deployment_path }}
WorkingDirectory={{ deployment_path }}
ExecStart=/bin/bash /usr/local/sbin/bec-server.sh
Restart=on-failure
+1 -1
View File
@@ -1,2 +1,2 @@
source {{ bec_venv_path }}/bin/activate
exec bec-server start --config {{ timestamped_deployment_path }}/deployment_configs/server.yaml --interface tmux
exec bec-server start --config {{ deployment_path }}/deployment_configs/server.yaml --interface tmux
+1 -1
View File
@@ -15,4 +15,4 @@ if [ $# -ne 1 ]; then
exit 1
fi
exec {{ timestamped_deployment_path }}/bin/bec_set_account -redis-host {{ ansible_hostname }} -pgroup "$1"
exec {{ deployment_path }}/bin/bec_set_account -redis-host {{ ansible_hostname }} -pgroup "$1"
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/sh
source {{ bec_venv_path }}/bin/activate
exec bec --config {{ timestamped_deployment_path }}/deployment_configs/client.yaml "$@"
exec bec --config {{ deployment_path }}/deployment_configs/client.yaml "$@"
+3 -3
View File
@@ -1,8 +1,8 @@
---
python_version: python3.12
deployment_path: "{{ deployment_path_prefix }}/{{ deployment_name }}_deployments"
timestamped_deployment_path: "{{ deployment_path }}/{{ ansible_date_time['iso8601_basic_short'] }}"
bec_venv_path: "{{ timestamped_deployment_path }}/bec_venv"
deployment_path: "{{ deployment_path_prefix }}/{{ deployment_name }}"
old_deployments_path: "{{ deployment_path_prefix }}/old_{{ deployment_name }}_deployments"
bec_venv_path: "{{ deployment_path }}/bec_venv"
user_git_branch_name: "{{ git_username }}_{{ deployment_name }}_{{ ansible_date_time['iso8601_basic_short'] }}"
bec_atlas_token: "{{ lookup('file', 'bec_atlas_token') }}"
bec_bl_push_pat: "{{ lookup('file', 'bec_bl_push_pat') }}"