From bf2fe8035816a20e25c69ec04c44a299d3382308 Mon Sep 17 00:00:00 2001 From: Benjamin Labrecque Date: Tue, 7 Jul 2026 13:47:54 +0200 Subject: [PATCH] refactor: organize ansible stuff --- .gitea/workflows/add-new-service.yml | 2 +- ansible/add-new-service.yml | 5 --- ansible/playbooks/add-new-service.yml | 8 ++++ .../deploy-and-restart-modified-services.yml} | 10 ++--- ansible/plays/ioc-start.yml | 27 ------------ .../ioc/ioc-install-and-restart-master.yml | 4 ++ .../{ => ioc}/ioc-install-and-restart.yml | 0 ansible/plays/restart-master-ioc.yml | 6 --- ansible/plays/restart-master-service.yml | 0 ansible/plays/service-deploy.yml | 37 ---------------- .../service-deploy-and-restart-master.yml | 4 ++ .../service/service-deploy-and-restart.yml | 44 +++++++++++++++++++ 12 files changed, 66 insertions(+), 81 deletions(-) delete mode 100644 ansible/add-new-service.yml create mode 100644 ansible/playbooks/add-new-service.yml rename ansible/{deploy-service.yml => playbooks/deploy-and-restart-modified-services.yml} (60%) delete mode 100644 ansible/plays/ioc-start.yml create mode 100644 ansible/plays/ioc/ioc-install-and-restart-master.yml rename ansible/plays/{ => ioc}/ioc-install-and-restart.yml (100%) delete mode 100644 ansible/plays/restart-master-ioc.yml delete mode 100644 ansible/plays/restart-master-service.yml delete mode 100644 ansible/plays/service-deploy.yml create mode 100644 ansible/plays/service/service-deploy-and-restart-master.yml create mode 100644 ansible/plays/service/service-deploy-and-restart.yml diff --git a/.gitea/workflows/add-new-service.yml b/.gitea/workflows/add-new-service.yml index da58b96..852025f 100644 --- a/.gitea/workflows/add-new-service.yml +++ b/.gitea/workflows/add-new-service.yml @@ -15,4 +15,4 @@ jobs: - name: Restart master service run: | - ansible-playbook ansible/add-new-service.yml -i hosts.yml \ No newline at end of file + ansible-playbook ansible/playbooks/add-new-service.yml -i hosts.yml \ No newline at end of file diff --git a/ansible/add-new-service.yml b/ansible/add-new-service.yml deleted file mode 100644 index 0b7dc38..0000000 --- a/ansible/add-new-service.yml +++ /dev/null @@ -1,5 +0,0 @@ -# TODO: Create venv and install ansible? That way not dependent on ansible -# being installed on machine. - -- name: Restart Master IOC - import_playbook: plays/restart-master-ioc.yml \ No newline at end of file diff --git a/ansible/playbooks/add-new-service.yml b/ansible/playbooks/add-new-service.yml new file mode 100644 index 0000000..5dd2bfe --- /dev/null +++ b/ansible/playbooks/add-new-service.yml @@ -0,0 +1,8 @@ +# TODO: Create venv and install ansible? That way not dependent on ansible +# being installed on machine. + +- name: Install and Restart Master IOC + import_playbook: ../plays/ioc/ioc-install-and-restart-master.yml + +- name: Deploy and Restart Master Service + import_playbook: ../plays/service/service-deploy-and-restart-master.yml \ No newline at end of file diff --git a/ansible/deploy-service.yml b/ansible/playbooks/deploy-and-restart-modified-services.yml similarity index 60% rename from ansible/deploy-service.yml rename to ansible/playbooks/deploy-and-restart-modified-services.yml index 42e5197..2cc12f8 100644 --- a/ansible/deploy-service.yml +++ b/ansible/playbooks/deploy-and-restart-modified-services.yml @@ -1,4 +1,4 @@ -- name: Dynamic HLA Microservices Deployer +- name: Deploy and Restart Modified Services hosts: localhost gather_facts: yes @@ -8,14 +8,14 @@ agebd_env: "dev" tasks: - # 1. Fail early if no services were modified + # Fail early if no services were modified - name: Check if there are services to deploy ansible.builtin.meta: end_play when: changed_services_raw | trim == "" - # 2. Main Loop: Loop through the list of modified service names - - name: Deploy Modified Services - include_tasks: plays/service-deploy.yml + # 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 loop: "{{ changed_services_raw.split() }}" loop_control: loop_var: service_dir_name \ No newline at end of file diff --git a/ansible/plays/ioc-start.yml b/ansible/plays/ioc-start.yml deleted file mode 100644 index d89839d..0000000 --- a/ansible/plays/ioc-start.yml +++ /dev/null @@ -1,27 +0,0 @@ -- name: Start an IOC - # TODO: env - hosts: sls-vserv-bd-01-dev - gather_facts: false - - #TODO: docs? - # For the git clone and git push commands to work smoothly inside this playbook, - # ensure your shell environment is passing your SSH key. Run ssh-add -l on your - # terminal before firing up ansible-playbook. - - # TODO - # If the machine executing this playbook doesn't have a global Git user configured, - # the git commit task will fail. You can explicitly bypass this by adding environment - # variables directly to the commit task if needed: - # environment: - # GIT_COMMITTER_NAME: "Ansible Provisioner" - # GIT_COMMITTER_EMAIL: "your-email@psi.ch" - # GIT_AUTHOR_NAME: "Ansible Provisioner" - # GIT_AUTHOR_EMAIL: "your-email@psi.ch" - - tasks: - - name: Start IOC - # TODO: - # sudo shellbox status - # sudo shellbox reload - # sudo shellbox status - # sudo shellbox start XXXXXXX \ No newline at end of file diff --git a/ansible/plays/ioc/ioc-install-and-restart-master.yml b/ansible/plays/ioc/ioc-install-and-restart-master.yml new file mode 100644 index 0000000..10b0949 --- /dev/null +++ b/ansible/plays/ioc/ioc-install-and-restart-master.yml @@ -0,0 +1,4 @@ +- name: Install and Restart Master IOC + vars: + service_dir_name: 000-master + import_playbook: ioc-install-and-restart.yml \ No newline at end of file diff --git a/ansible/plays/ioc-install-and-restart.yml b/ansible/plays/ioc/ioc-install-and-restart.yml similarity index 100% rename from ansible/plays/ioc-install-and-restart.yml rename to ansible/plays/ioc/ioc-install-and-restart.yml diff --git a/ansible/plays/restart-master-ioc.yml b/ansible/plays/restart-master-ioc.yml deleted file mode 100644 index 73eea01..0000000 --- a/ansible/plays/restart-master-ioc.yml +++ /dev/null @@ -1,6 +0,0 @@ -- name: Restart Master IOC - vars: - service_dir_name: 000-master - import_playbook: ioc-install-and-restart.yml - - # TODO: restart systemd master service? \ No newline at end of file diff --git a/ansible/plays/restart-master-service.yml b/ansible/plays/restart-master-service.yml deleted file mode 100644 index e69de29..0000000 diff --git a/ansible/plays/service-deploy.yml b/ansible/plays/service-deploy.yml deleted file mode 100644 index b6bf7f6..0000000 --- a/ansible/plays/service-deploy.yml +++ /dev/null @@ -1,37 +0,0 @@ -- name: "[{{ service_dir_name }}] Define service specific paths and names" - ansible.builtin.set_fact: - # 1. The literal directory name on disk (e.g., "000-master") - svc_current_dir: "/sls/bd/hla/{{ agebd_env }}/services/{{ service_dir_name }}/current" - # 2. Extract logical service name by dropping the first 4 characters and converting to UPPERCASE (e.g., "MASTER") - service_unit_name: "AGEBD-SERVICE-{{ service_dir_name[4:] | upper }}.service" - -- name: "[{{ service_dir_name }}] Ensure target directory structure exists" - ansible.builtin.file: - path: "{{ svc_current_dir }}" - state: directory - mode: '0755' - -- name: "[{{ service_dir_name }}] Sync service deployment files" - ansible.builtin.copy: - src: "{{ playbook_dir }}/../services/{{ service_dir_name }}/current/" - dest: "{{ svc_current_dir }}/" - mode: 'preserve' - -- name: "[{{ service_dir_name }}] Substitute environment variable inline" - ansible.builtin.replace: - path: "{{ svc_current_dir }}/systemd/{{ service_unit_name }}" - regexp: '\{\{\s*agebd_env\s*\}\}' - replace: "{{ agebd_env }}" - -- name: "[{{ service_dir_name }}] Restart Systemd Service using Relative Paths" - ansible.builtin.shell: | - # 1. Tell systemd to link the service file into its registry relatively - systemctl --user link "./{{ service_unit_name }}" - - systemctl --user daemon-reload - systemctl --user enable "{{ service_unit_name }}" - systemctl --user restart "{{ service_unit_name }}" - args: - chdir: "{{ svc_current_dir }}/systemd" - environment: - XDG_RUNTIME_DIR: "/run/user/{{ ansible_effective_user_id }}" \ No newline at end of file diff --git a/ansible/plays/service/service-deploy-and-restart-master.yml b/ansible/plays/service/service-deploy-and-restart-master.yml new file mode 100644 index 0000000..c685051 --- /dev/null +++ b/ansible/plays/service/service-deploy-and-restart-master.yml @@ -0,0 +1,4 @@ +- name: Deploy and Restart Master Service + vars: + service_dir_name: 000-master + import_playbook: service-deploy-and-restart.yml \ No newline at end of file diff --git a/ansible/plays/service/service-deploy-and-restart.yml b/ansible/plays/service/service-deploy-and-restart.yml new file mode 100644 index 0000000..3c73820 --- /dev/null +++ b/ansible/plays/service/service-deploy-and-restart.yml @@ -0,0 +1,44 @@ +- name: Deploy and Restart Service + # TODO: dev/prod + hosts: sls-vserv-bd-hla01-dev + connection: local + gather_facts: false + + tasks: + - name: "[{{ service_dir_name }}] Define service specific paths and names" + ansible.builtin.set_fact: + # 1. The literal directory name on disk (e.g., "000-master") + svc_current_dir: "/sls/bd/hla/{{ agebd_env }}/services/{{ service_dir_name }}/current" + # 2. Extract logical service name by dropping the first 4 characters and converting to UPPERCASE (e.g., "MASTER") + service_unit_name: "AGEBD-SERVICE-{{ service_dir_name[4:] | upper }}.service" + + - name: "[{{ service_dir_name }}] Ensure target directory structure exists" + ansible.builtin.file: + path: "{{ svc_current_dir }}" + state: directory + mode: '0755' + + - name: "[{{ service_dir_name }}] Sync service deployment files" + ansible.builtin.copy: + src: "{{ playbook_dir }}/../services/{{ service_dir_name }}/current/" + dest: "{{ svc_current_dir }}/" + mode: 'preserve' + + - name: "[{{ service_dir_name }}] Substitute environment variable inline" + ansible.builtin.replace: + path: "{{ svc_current_dir }}/systemd/{{ service_unit_name }}" + regexp: '\{\{\s*agebd_env\s*\}\}' + replace: "{{ agebd_env }}" + + - name: "[{{ service_dir_name }}] Restart Systemd Service using Relative Paths" + ansible.builtin.shell: | + # 1. Tell systemd to link the service file into its registry relatively + systemctl --user link "./{{ service_unit_name }}" + + systemctl --user daemon-reload + systemctl --user enable "{{ service_unit_name }}" + systemctl --user restart "{{ service_unit_name }}" + args: + chdir: "{{ svc_current_dir }}/systemd" + environment: + XDG_RUNTIME_DIR: "/run/user/{{ ansible_effective_user_id }}" \ No newline at end of file