diff --git a/tasks/main.yaml b/tasks/main.yaml index cadc3a1..0dfecdc 100644 --- a/tasks/main.yaml +++ b/tasks/main.yaml @@ -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 diff --git a/templates/bec-server.service.j2 b/templates/bec-server.service.j2 index 9186c05..2601f8d 100644 --- a/templates/bec-server.service.j2 +++ b/templates/bec-server.service.j2 @@ -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 diff --git a/templates/bec-server.sh.j2 b/templates/bec-server.sh.j2 index 0302f1a..bfbe407 100644 --- a/templates/bec-server.sh.j2 +++ b/templates/bec-server.sh.j2 @@ -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 diff --git a/templates/bec-set-account.j2 b/templates/bec-set-account.j2 index fd384e6..a0d3daf 100755 --- a/templates/bec-set-account.j2 +++ b/templates/bec-set-account.j2 @@ -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" diff --git a/templates/bec.j2 b/templates/bec.j2 index 6a4775b..0fe10e2 100644 --- a/templates/bec.j2 +++ b/templates/bec.j2 @@ -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 "$@" diff --git a/vars/main.yaml b/vars/main.yaml index 8008319..a0de816 100644 --- a/vars/main.yaml +++ b/vars/main.yaml @@ -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') }}"