153 lines
4.9 KiB
YAML
153 lines
4.9 KiB
YAML
---
|
|
- name: Deploy AWatch-rus server
|
|
hosts: aw_server
|
|
become: true
|
|
gather_facts: true
|
|
|
|
vars:
|
|
aw_release_root: "/opt/activitywatch/releases"
|
|
aw_release_dir: "{{ aw_release_root }}/{{ aw_server_version }}"
|
|
aw_archive_path: "/tmp/activitywatch-{{ aw_server_version }}.zip"
|
|
aw_bootstrap_dir: "/tmp/aw-rus-bootstrap"
|
|
|
|
tasks:
|
|
- name: Install base packages
|
|
ansible.builtin.apt:
|
|
name:
|
|
- curl
|
|
- unzip
|
|
state: present
|
|
update_cache: true
|
|
|
|
- name: Ensure service account exists
|
|
ansible.builtin.user:
|
|
name: "{{ aw_server_user }}"
|
|
group: "{{ aw_server_group }}"
|
|
home: "{{ aw_server_data_dir }}"
|
|
shell: /usr/sbin/nologin
|
|
system: true
|
|
create_home: false
|
|
|
|
- name: Ensure required directories
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
owner: "{{ aw_server_user }}"
|
|
group: "{{ aw_server_group }}"
|
|
mode: "0755"
|
|
loop:
|
|
- "{{ aw_release_root }}"
|
|
- "{{ aw_release_dir }}"
|
|
- "{{ aw_server_webui_dir }}"
|
|
- "{{ aw_server_data_dir }}"
|
|
- "{{ aw_server_log_dir }}"
|
|
- /etc/activitywatch
|
|
- "{{ aw_bootstrap_dir }}"
|
|
|
|
- name: Download ActivityWatch release archive
|
|
ansible.builtin.get_url:
|
|
url: "{{ aw_server_download_url }}"
|
|
dest: "{{ aw_archive_path }}"
|
|
mode: "0644"
|
|
|
|
- name: Unpack ActivityWatch release
|
|
ansible.builtin.unarchive:
|
|
src: "{{ aw_archive_path }}"
|
|
dest: "{{ aw_release_dir }}"
|
|
remote_src: true
|
|
extra_opts: ["-o"]
|
|
|
|
- name: Discover extracted AW directory
|
|
ansible.builtin.find:
|
|
paths: "{{ aw_release_dir }}"
|
|
file_type: directory
|
|
patterns: "activitywatch*"
|
|
register: aw_release_find
|
|
|
|
- name: Set release extracted path
|
|
ansible.builtin.set_fact:
|
|
aw_release_extracted: "{{ (aw_release_find.files | sort(attribute='path') | map(attribute='path') | list | first) }}"
|
|
|
|
- name: Verify extracted directory exists
|
|
ansible.builtin.assert:
|
|
that:
|
|
- aw_release_extracted is defined
|
|
- aw_release_extracted | length > 0
|
|
fail_msg: "Cannot locate extracted ActivityWatch release directory."
|
|
|
|
- name: Sync release content to /opt/activitywatch
|
|
ansible.builtin.command:
|
|
cmd: "rsync -a --delete {{ aw_release_extracted }}/ /opt/activitywatch/"
|
|
|
|
- name: Copy bootstrap files from repository
|
|
ansible.builtin.copy:
|
|
src: "{{ item.src }}"
|
|
dest: "{{ item.dest }}"
|
|
mode: "{{ item.mode }}"
|
|
loop:
|
|
- { src: "{{ aw_repo_root }}/aw-server/activitywatch-server.service", dest: "/etc/systemd/system/activitywatch-server.service", mode: "0644" }
|
|
- { src: "{{ aw_repo_root }}/aw-server/aw-ru-patch.js", dest: "{{ aw_server_webui_dir }}/js/ru-patch-v5.js", mode: "0644" }
|
|
- { src: "{{ aw_repo_root }}/aw-server/aw-sw-cleanup.js", dest: "{{ aw_server_webui_dir }}/js/sw-cleanup.js", mode: "0644" }
|
|
notify:
|
|
- Reload systemd
|
|
- Restart activitywatch
|
|
|
|
- name: Copy WebUI index template from installed distribution
|
|
ansible.builtin.copy:
|
|
remote_src: true
|
|
src: "/opt/activitywatch/aw-webui/index.html"
|
|
dest: "{{ aw_server_webui_dir }}/index.html"
|
|
mode: "0644"
|
|
|
|
- name: Insert RU patch scripts into index.html
|
|
ansible.builtin.replace:
|
|
path: "{{ aw_server_webui_dir }}/index.html"
|
|
regexp: '</head>'
|
|
replace: '<script src="/js/sw-cleanup.js?v=ansible1"></script></head>'
|
|
|
|
- name: Insert RU patch loader before body end
|
|
ansible.builtin.replace:
|
|
path: "{{ aw_server_webui_dir }}/index.html"
|
|
regexp: '</body>'
|
|
replace: '<script defer="defer" src="/js/ru-patch-v5.js?v=ansible1"></script></body>'
|
|
|
|
- name: Write /etc/activitywatch/aw-server.env
|
|
ansible.builtin.copy:
|
|
dest: /etc/activitywatch/aw-server.env
|
|
mode: "0640"
|
|
content: |
|
|
AW_SERVER_HOST={{ aw_server_bind_host }}
|
|
AW_SERVER_PORT={{ aw_server_port }}
|
|
AW_DATA_DIR={{ aw_server_data_dir }}
|
|
AW_LOG_DIR={{ aw_server_log_dir }}
|
|
AW_WEBUI_DIR={{ aw_server_webui_dir }}
|
|
AW_SERVER_USER={{ aw_server_user }}
|
|
AW_SERVER_GROUP={{ aw_server_group }}
|
|
|
|
- name: Enable and start service
|
|
ansible.builtin.systemd:
|
|
name: activitywatch-server.service
|
|
enabled: true
|
|
state: restarted
|
|
daemon_reload: true
|
|
|
|
- name: Wait for API
|
|
ansible.builtin.uri:
|
|
url: "http://127.0.0.1:{{ aw_server_port }}/api/0/info"
|
|
method: GET
|
|
status_code: 200
|
|
register: aw_api
|
|
retries: 10
|
|
delay: 3
|
|
until: aw_api.status == 200
|
|
|
|
handlers:
|
|
- name: Reload systemd
|
|
ansible.builtin.systemd:
|
|
daemon_reload: true
|
|
|
|
- name: Restart activitywatch
|
|
ansible.builtin.systemd:
|
|
name: activitywatch-server.service
|
|
state: restarted
|