From 8032cfae6f7c6aee731eda659c41384ff97366b4 Mon Sep 17 00:00:00 2001 From: Benjamin Labrecque Date: Tue, 14 Jul 2026 14:31:06 +0200 Subject: [PATCH] chore: clean up ansible structure --- .../workflows/deploy-and-restart-service.yml | 2 +- ansible/playbooks/add-new-service.yml | 64 ++++++++------- .../deploy-and-restart-modified-services.yml | 5 +- ansible/playbooks/ioc-install.yml | 9 +++ ansible/playbooks/ioc-restart.yml | 9 +++ ansible/playbooks/ioc-start.yml | 9 +++ ansible/plays/ioc/ioc-install.yml | 79 ------------------- ansible/plays/ioc/ioc-restart.yml | 37 --------- ansible/plays/ioc/ioc-start.yml | 15 ---- .../service/service-deploy-and-restart.yml | 59 -------------- ansible/tasks/ioc/ioc-install.yml | 71 +++++++++++++++++ ansible/tasks/ioc/ioc-restart.yml | 29 +++++++ ansible/tasks/ioc/ioc-start.yml | 10 +++ .../service/service-deploy-and-restart.yml | 53 +++++++++++++ docs/ansible.md | 11 ++- 15 files changed, 236 insertions(+), 226 deletions(-) create mode 100644 ansible/playbooks/ioc-install.yml create mode 100644 ansible/playbooks/ioc-restart.yml create mode 100644 ansible/playbooks/ioc-start.yml delete mode 100644 ansible/plays/ioc/ioc-install.yml delete mode 100644 ansible/plays/ioc/ioc-restart.yml delete mode 100644 ansible/plays/ioc/ioc-start.yml delete mode 100644 ansible/plays/service/service-deploy-and-restart.yml create mode 100644 ansible/tasks/ioc/ioc-install.yml create mode 100644 ansible/tasks/ioc/ioc-restart.yml create mode 100644 ansible/tasks/ioc/ioc-start.yml create mode 100644 ansible/tasks/service/service-deploy-and-restart.yml diff --git a/.gitea/workflows/deploy-and-restart-service.yml b/.gitea/workflows/deploy-and-restart-service.yml index a3bf45e..da90b18 100644 --- a/.gitea/workflows/deploy-and-restart-service.yml +++ b/.gitea/workflows/deploy-and-restart-service.yml @@ -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" diff --git a/ansible/playbooks/add-new-service.yml b/ansible/playbooks/add-new-service.yml index 110e5a1..7754900 100644 --- a/ansible/playbooks/add-new-service.yml +++ b/ansible/playbooks/add-new-service.yml @@ -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 \ No newline at end of file + - name: Deploy and Restart New Service + vars: + branch_name: "feature/add-service-{{ service_name_lower }}" + import_tasks: ../tasks/service/service-deploy-and-restart.yml diff --git a/ansible/playbooks/deploy-and-restart-modified-services.yml b/ansible/playbooks/deploy-and-restart-modified-services.yml index 08bcb93..44689b5 100644 --- a/ansible/playbooks/deploy-and-restart-modified-services.yml +++ b/ansible/playbooks/deploy-and-restart-modified-services.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 diff --git a/ansible/playbooks/ioc-install.yml b/ansible/playbooks/ioc-install.yml new file mode 100644 index 0000000..dbed4a3 --- /dev/null +++ b/ansible/playbooks/ioc-install.yml @@ -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 diff --git a/ansible/playbooks/ioc-restart.yml b/ansible/playbooks/ioc-restart.yml new file mode 100644 index 0000000..6176856 --- /dev/null +++ b/ansible/playbooks/ioc-restart.yml @@ -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 diff --git a/ansible/playbooks/ioc-start.yml b/ansible/playbooks/ioc-start.yml new file mode 100644 index 0000000..434fd0f --- /dev/null +++ b/ansible/playbooks/ioc-start.yml @@ -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 diff --git a/ansible/plays/ioc/ioc-install.yml b/ansible/plays/ioc/ioc-install.yml deleted file mode 100644 index 55eda0e..0000000 --- a/ansible/plays/ioc/ioc-install.yml +++ /dev/null @@ -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 \ No newline at end of file diff --git a/ansible/plays/ioc/ioc-restart.yml b/ansible/plays/ioc/ioc-restart.yml deleted file mode 100644 index 1617ce2..0000000 --- a/ansible/plays/ioc/ioc-restart.yml +++ /dev/null @@ -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 \ No newline at end of file diff --git a/ansible/plays/ioc/ioc-start.yml b/ansible/plays/ioc/ioc-start.yml deleted file mode 100644 index 4555aeb..0000000 --- a/ansible/plays/ioc/ioc-start.yml +++ /dev/null @@ -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 \ 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 deleted file mode 100644 index d596c8d..0000000 --- a/ansible/plays/service/service-deploy-and-restart.yml +++ /dev/null @@ -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 }}" \ No newline at end of file diff --git a/ansible/tasks/ioc/ioc-install.yml b/ansible/tasks/ioc/ioc-install.yml new file mode 100644 index 0000000..c5a200c --- /dev/null +++ b/ansible/tasks/ioc/ioc-install.yml @@ -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 diff --git a/ansible/tasks/ioc/ioc-restart.yml b/ansible/tasks/ioc/ioc-restart.yml new file mode 100644 index 0000000..121853b --- /dev/null +++ b/ansible/tasks/ioc/ioc-restart.yml @@ -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 diff --git a/ansible/tasks/ioc/ioc-start.yml b/ansible/tasks/ioc/ioc-start.yml new file mode 100644 index 0000000..e2a2d77 --- /dev/null +++ b/ansible/tasks/ioc/ioc-start.yml @@ -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 diff --git a/ansible/tasks/service/service-deploy-and-restart.yml b/ansible/tasks/service/service-deploy-and-restart.yml new file mode 100644 index 0000000..d567a5a --- /dev/null +++ b/ansible/tasks/service/service-deploy-and-restart.yml @@ -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 }}" diff --git a/docs/ansible.md b/docs/ansible.md index b1dbd17..7519bb5 100644 --- a/docs/ansible.md +++ b/docs/ansible.md @@ -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 -``` \ No newline at end of file +```