chore: clean up ansible structure

This commit is contained in:
Benjamin Labrecque
2026-07-14 14:31:06 +02:00
parent db1c34780b
commit 8032cfae6f
15 changed files with 236 additions and 226 deletions
@@ -53,4 +53,4 @@ jobs:
ansible-playbook ansible/playbooks/deploy-and-restart-modified-services.yml \
-i ansible/hosts.yml \
-e "changed_services_raw=$CHANGED_SVC" \
-e "agebd_env=$AGEBD_ENV"#
-e "agebd_env=$AGEBD_ENV"
+35 -29
View File
@@ -1,37 +1,43 @@
# TODO: Create venv and install ansible? That way not dependent on ansible
# being installed on machine.
---
- name: Add a new service
hosts: sls-vserv-bd-hla01-dev
connection: local
gather_facts: true # Gather once here, available to all included tasks!
# - name: Install Master IOC
# vars:
# preferred_service_name_lower: master
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_playbook: ../plays/ioc/ioc-install.yml
tasks:
# - name: Install Master IOC
# vars:
# preferred_service_name_lower: master
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_tasks: ../tasks/ioc/ioc-install.yml
# - name: Restart Master IOC
# vars:
# preferred_service_name_lower: master
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_playbook: ../plays/ioc/ioc-restart.yml
# - name: Restart Master IOC
# vars:
# preferred_service_name_lower: master
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_tasks: ../tasks/ioc/ioc-restart.yml
- name: Deploy and Restart Master Service
vars:
preferred_service_name_lower: master
branch_name: "feature/add-service-{{ service_name_lower }}"
import_playbook: ../plays/service/service-deploy-and-restart.yml
- name: Deploy and Restart Master Service
vars:
preferred_service_name_lower: master
branch_name: "feature/add-service-{{ service_name_lower }}"
import_tasks: ../tasks/service/service-deploy-and-restart.yml
# TODO: ioc_port
# - name: Install New IOC
# vars:
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_playbook: ../plays/ioc/ioc-install.yml
# TODO: ioc_port
# - name: Install New IOC
# vars:
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_tasks: ../tasks/ioc/ioc-install.yml
# TODO: ioc_port
# - name: Start New IOC
# vars:
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_playbook: ../plays/ioc/ioc-start.yml
# TODO: ioc_port
# - name: Start New IOC
# vars:
# branch_name: "feature/add-service-{{ service_name_lower }}"
# import_tasks: ../tasks/ioc/ioc-start.yml
- name: Deploy and Restart New Service
vars:
branch_name: "feature/add-service-{{ service_name_lower }}"
import_playbook: ../plays/service/service-deploy-and-restart.yml
- name: Deploy and Restart New Service
vars:
branch_name: "feature/add-service-{{ service_name_lower }}"
import_tasks: ../tasks/service/service-deploy-and-restart.yml
@@ -1,3 +1,4 @@
---
- name: Deploy and Restart Modified Services
# TODO: dev/prod
hosts: sls-vserv-bd-hla01-dev
@@ -14,9 +15,9 @@
ansible.builtin.meta: end_play
when: changed_services_raw | trim == ""
# Main Loop: Loop through the list of modified service names
# Main Loop: loop through the list of modified service names
- name: Deploy and Restart Modified Services
include_tasks: ../plays/service/service-deploy-and-restart.yml
include_tasks: ../tasks/service/service-deploy-and-restart.yml
loop: "{{ changed_services_raw.split() }}"
loop_control:
loop_var: service_name_lower
+9
View File
@@ -0,0 +1,9 @@
---
- name: Install an IOC
# TODO: dev/prod
hosts: sls-vserv-bd-01-dev
gather_facts: false
tasks:
- name: Run ioc install tasks
ansible.builtin.include_tasks: ../tasks/ioc/ioc-install.yml
+9
View File
@@ -0,0 +1,9 @@
---
- name: Restart an IOC
# TODO: dev/prod
hosts: sls-vserv-bd-01-dev
gather_facts: false
tasks:
- name: Run ioc restart tasks
ansible.builtin.include_tasks: ../tasks/ioc/ioc-restart.yml
+9
View File
@@ -0,0 +1,9 @@
---
- name: Start an IOC
# TODO: dev/prod
hosts: sls-vserv-bd-01-dev
gather_facts: false
tasks:
- name: Run ioc start tasks
ansible.builtin.include_tasks: ../tasks/ioc/ioc-start.yml
-79
View File
@@ -1,79 +0,0 @@
- name: Install an IOC
# TODO: dev/prod
hosts: sls-lc
gather_facts: false
vars:
workspace_dir: "/tmp/hla_framework_bd"
tasks:
- name: Clone this repository
ansible.builtin.git:
repo: "git@gitea.psi.ch:sls/hla_framework_bd.git"
dest: "{{ workspace_dir }}"
accept_hostkey: true
version: "{{ branch_name }}"
force: true
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Establish environment naming conventions"
ansible.builtin.set_fact:
service_name_upper: "{{ target_service_name_lower | upper }}"
# Set suffix to "-DEV" if dev, otherwise empty ""
env_suffix_upper: "{{ '-DEV' if agebd_env == 'dev' else '' }}"
# Set suffix to "-dev" if dev, otherwise empty ""
env_suffix_lower: "{{ '-dev' if agebd_env == 'dev' else '' }}"
- name: "[{{ target_service_name_lower }}] Define file paths"
ansible.builtin.set_fact:
ioc_base_dir: "{{ workspace_dir }}/services/{{ target_service_name_lower }}/current/ioc"
orig_subs_name: "AGEBD-CPCL-{{ service_name_upper }}_main.subs"
target_subs_name: "AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }}_main.subs"
orig_params_name: "AGEBD-CPCL-{{ service_name_upper }}_parameters.yaml"
target_params_name: "AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }}_parameters.yaml"
# Rename the subs file if we are in DEV
- name: "[{{ target_service_name_lower }}] Rename substitution file for environment"
ansible.builtin.command:
cmd: "mv {{ ioc_base_dir }}/{{ orig_subs_name }} {{ ioc_base_dir }}/{{ target_subs_name }}"
removes: "{{ ioc_base_dir }}/{{ orig_subs_name }}" # Only runs if the original file exists
# Rename the paramters file if we are in DEV
- name: "[{{ target_service_name_lower }}] Rename parameters file for environment"
ansible.builtin.command:
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 }} 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\s*\}\}'
replace: "{{ env_suffix_upper }}"
# Replace {{ agebd_env }} and {{ ioc_port }} 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\s*\}\}', replace: "{{ env_suffix_lower }}" }
- { regexp: '\{\{\s*ioc_port\s*\}\}', replace: "{{ ioc_port }}" }
- name: "[{{ target_service_name_lower }}] Run ioc install"
ansible.builtin.shell:
cmd: "ioc install -V --facility sls --ioc AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }} --clean"
chdir: "{{ ioc_base_dir }}"
changed_when: true
register: ioc_install_result
# Force a pipeline failure if the command output contains error keywords
# (ioc install ... returns exit code 0 even on failure...)
failed_when: >
ioc_install_result.rc != 0 or
"[error]" in ioc_install_result.stderr or
"Unable to write" in ioc_install_result.stderr
-37
View File
@@ -1,37 +0,0 @@
- name: Restart an IOC
# TODO: dev/prod
hosts: sls-lc
gather_facts: false
vars:
workspace_dir: "/tmp/hla_framework_bd"
tasks:
- name: Clone this repository
ansible.builtin.git:
repo: "git@gitea.psi.ch:sls/hla_framework_bd.git"
dest: "{{ workspace_dir }}"
accept_hostkey: true
version: "{{ branch_name }}"
force: true
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Establish environment naming conventions"
ansible.builtin.set_fact:
service_name_upper: "{{ target_service_name_lower | upper }}"
# Set suffix to "-DEV" if dev, otherwise empty ""
env_suffix_upper: "{{ '-DEV' if agebd_env == 'dev' else '' }}"
- name: "[{{ target_service_name_lower }}] Define file paths"
ansible.builtin.set_fact:
ioc_base_dir: "{{ workspace_dir }}/services/{{ target_service_name_lower }}/current/ioc"
- name: "[{{ target_service_name_lower }}] Restart IOC"
ansible.builtin.shell:
cmd: "ioc restart AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }}"
chdir: "{{ ioc_base_dir }}"
changed_when: true
-15
View File
@@ -1,15 +0,0 @@
- name: Restart an IOC
# TODO: dev/prod
hosts: sls-vserv-bd-01-dev
gather_facts: false
tasks:
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Start IOC"
ansible.builtin.shell: |
sudo shellbox start {{ ioc_port }}
changed_when: true
@@ -1,59 +0,0 @@
- name: Deploy and Restart Service
# TODO: dev/prod
hosts: sls-vserv-bd-hla01-dev
connection: local
gather_facts: true # needed for ansible_user_uid
tasks:
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Define service specific paths and names"
ansible.builtin.set_fact:
svc_current_dir: "/sls/bd/hla/{{ agebd_env }}/services/{{ target_service_name_lower }}/current"
service_unit_name: "AGEBD-SERVICE-{{ target_service_name_lower | upper }}.service"
- name: "[{{ target_service_name_lower }}] Ensure target directory structure exists"
ansible.builtin.file:
path: "{{ svc_current_dir }}"
state: directory
# ansible.builtin.shell: |
# mkdir -p "{{ svc_current_dir }}"
# TODO: make sure this is what we want (essentially wipes existing dest dir)
- name: "[{{ target_service_name_lower }}] Sync service deployment files"
ansible.posix.synchronize:
src: "{{ playbook_dir }}/../../../services/{{ target_service_name_lower }}/current/"
dest: "{{ svc_current_dir }}/"
delete: yes # This removes stale files on the target that no longer exist locally
recursive: yes
- 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*\}\}'
replace: "{{ agebd_env }}"
# systemctl --user link --force "./{{ service_unit_name }}"
- name: "[{{ target_service_name_lower }}] Symlink systemd unit file (Absolute Path)"
ansible.builtin.file:
src: "{{ svc_current_dir }}/systemd/{{ service_unit_name }}"
dest: "~/.config/systemd/user/{{ service_unit_name }}"
state: link
force: yes # This overwrites the broken/existing symlink cleanly without error
# export XDG_RUNTIME_DIR=/run/user/$(id -u)
# systemctl --user daemon-reload
# systemctl --user enable "{{ service_unit_name }}"
# systemctl --user restart "{{ service_unit_name }}"
- name: "[{{ target_service_name_lower }}] Enable and Restart Systemd Service"
ansible.builtin.systemd_service:
name: "{{ service_unit_name }}"
scope: user
daemon_reload: yes
enabled: yes
state: restarted
environment:
XDG_RUNTIME_DIR: "/run/user/{{ ansible_user_uid }}"
+71
View File
@@ -0,0 +1,71 @@
---
- name: Clone this repository
ansible.builtin.git:
repo: "git@gitea.psi.ch:sls/hla_framework_bd.git"
dest: "{{ workspace_dir }}"
accept_hostkey: true
version: "{{ branch_name }}"
force: true
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Establish environment naming conventions"
ansible.builtin.set_fact:
service_name_upper: "{{ target_service_name_lower | upper }}"
# Set suffix to "-DEV" if dev, otherwise empty ""
env_suffix_upper: "{{ '-DEV' if agebd_env == 'dev' else '' }}"
# Set suffix to "-dev" if dev, otherwise empty ""
env_suffix_lower: "{{ '-dev' if agebd_env == 'dev' else '' }}"
- name: "[{{ target_service_name_lower }}] Define file paths"
ansible.builtin.set_fact:
ioc_base_dir: "{{ workspace_dir }}/services/{{ target_service_name_lower }}/current/ioc"
orig_subs_name: "AGEBD-CPCL-{{ service_name_upper }}_main.subs"
target_subs_name: "AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }}_main.subs"
orig_params_name: "AGEBD-CPCL-{{ service_name_upper }}_parameters.yaml"
target_params_name: "AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }}_parameters.yaml"
# Rename the subs file if we are in DEV
- name: "[{{ target_service_name_lower }}] Rename substitution file for environment"
ansible.builtin.command:
cmd: "mv {{ ioc_base_dir }}/{{ orig_subs_name }} {{ ioc_base_dir }}/{{ target_subs_name }}"
removes: "{{ ioc_base_dir }}/{{ orig_subs_name }}" # Only runs if the original file exists
# Rename the paramters file if we are in DEV
- name: "[{{ target_service_name_lower }}] Rename parameters file for environment"
ansible.builtin.command:
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 }} 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\s*\}\}'
replace: "{{ env_suffix_upper }}"
# Replace {{ agebd_env }} and {{ ioc_port }} 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\s*\}\}', replace: "{{ env_suffix_lower }}" }
- { regexp: '\{\{\s*ioc_port\s*\}\}', replace: "{{ ioc_port }}" }
- name: "[{{ target_service_name_lower }}] Run ioc install"
ansible.builtin.shell:
cmd: "ioc install -V --facility sls --ioc AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }} --clean"
chdir: "{{ ioc_base_dir }}"
changed_when: true
register: ioc_install_result
# Force a pipeline failure if the command output contains error keywords
# (ioc install ... returns exit code 0 even on failure...)
failed_when: >
ioc_install_result.rc != 0 or
"[error]" in ioc_install_result.stderr or
"Unable to write" in ioc_install_result.stderr
+29
View File
@@ -0,0 +1,29 @@
---
- name: Clone this repository
ansible.builtin.git:
repo: "git@gitea.psi.ch:sls/hla_framework_bd.git"
dest: "{{ workspace_dir }}"
accept_hostkey: true
version: "{{ branch_name }}"
force: true
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Establish environment naming conventions"
ansible.builtin.set_fact:
service_name_upper: "{{ target_service_name_lower | upper }}"
# Set suffix to "-DEV" if dev, otherwise empty ""
env_suffix_upper: "{{ '-DEV' if agebd_env == 'dev' else '' }}"
- name: "[{{ target_service_name_lower }}] Define file paths"
ansible.builtin.set_fact:
ioc_base_dir: "{{ workspace_dir }}/services/{{ target_service_name_lower }}/current/ioc"
- name: "[{{ target_service_name_lower }}] Restart IOC"
ansible.builtin.shell:
cmd: "ioc restart AGEBD-CPCL-{{ service_name_upper }}{{ env_suffix_upper }}"
chdir: "{{ ioc_base_dir }}"
changed_when: true
+10
View File
@@ -0,0 +1,10 @@
---
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Start IOC"
ansible.builtin.shell: |
sudo shellbox start {{ ioc_port }}
changed_when: true
@@ -0,0 +1,53 @@
---
- name: Initialize service name
ansible.builtin.set_fact:
# Uses preferred_service_name_lower if defined in vars, otherwise falls back to the CLI extra-vars
target_service_name_lower: "{{ preferred_service_name_lower | default(service_name_lower) }}"
- name: "[{{ target_service_name_lower }}] Define service specific paths and names"
ansible.builtin.set_fact:
svc_current_dir: "/sls/bd/hla/{{ agebd_env }}/services/{{ target_service_name_lower }}/current"
service_unit_name: "AGEBD-SERVICE-{{ target_service_name_lower | upper }}.service"
- name: "[{{ target_service_name_lower }}] Ensure target directory structure exists"
ansible.builtin.file:
path: "{{ svc_current_dir }}"
state: directory
# ansible.builtin.shell: |
# mkdir -p "{{ svc_current_dir }}"
# TODO: make sure this is what we want (essentially wipes existing dest dir)
- name: "[{{ target_service_name_lower }}] Sync service deployment files"
ansible.posix.synchronize:
src: "{{ playbook_dir }}/../../../services/{{ target_service_name_lower }}/current/"
dest: "{{ svc_current_dir }}/"
delete: yes # This removes stale files on the target that no longer exist locally
recursive: yes
- 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*\}\}'
replace: "{{ agebd_env }}"
# systemctl --user link --force "./{{ service_unit_name }}"
- name: "[{{ target_service_name_lower }}] Symlink systemd unit file (Absolute Path)"
ansible.builtin.file:
src: "{{ svc_current_dir }}/systemd/{{ service_unit_name }}"
dest: "~/.config/systemd/user/{{ service_unit_name }}"
state: link
force: yes # This overwrites the broken/existing symlink cleanly without error
# export XDG_RUNTIME_DIR=/run/user/$(id -u)
# systemctl --user daemon-reload
# systemctl --user enable "{{ service_unit_name }}"
# systemctl --user restart "{{ service_unit_name }}"
- name: "[{{ target_service_name_lower }}] Enable and Restart Systemd Service"
ansible.builtin.systemd_service:
name: "{{ service_unit_name }}"
scope: user
daemon_reload: yes
enabled: yes
state: restarted
environment:
XDG_RUNTIME_DIR: "/run/user/{{ ansible_user_uid }}"
+7 -4
View File
@@ -1,5 +1,8 @@
# Ansible
\# TODO: Create venv and install ansible? That way not dependent on ansible
being installed on machine.
## Running a playbook manually
Set vars on command line:
@@ -13,7 +16,7 @@ ansible-playbook ansible/playbooks/add-new-service.yml \
### Install an IOC
```
ansible-playbook ansible/plays/ioc/ioc-install.yml \
ansible-playbook ansible/playbooks/ioc-install.yml \
-i ansible/hosts.yml \
--extra-vars="agebd_env=dev branch_name=feature/add-service-playground service_name_lower=playground ioc_port=50003" \
-v
@@ -22,7 +25,7 @@ ansible-playbook ansible/plays/ioc/ioc-install.yml \
### Start an IOC
TODO: how to get the ioc_port in cicd? Add it to the branch name?
```
ansible-playbook ansible/plays/ioc/ioc-start.yml \
ansible-playbook ansible/playbooks/ioc-start.yml \
-i ansible/hosts.yml \
--extra-vars="service_name_lower=playground ioc_port=50003" \
-v
@@ -30,8 +33,8 @@ ansible-playbook ansible/plays/ioc/ioc-start.yml \
### Restart an IOC
```
ansible-playbook ansible/plays/ioc/ioc-restart.yml \
ansible-playbook ansible/playbooks/ioc-restart.yml \
-i ansible/hosts.yml \
--extra-vars="agebd_env=dev branch_name=feature/add-service-playground service_name_lower=playground" \
-v
```
```