--- - name: Install prerequisites ansible.builtin.package: name: - python3 - python3-pip - python3-venv - curl state: present become: true - name: Create Hermes group ansible.builtin.group: name: "{{ hermes_group }}" system: true state: present become: true - name: Create Hermes user ansible.builtin.user: name: "{{ hermes_user }}" group: "{{ hermes_group }}" home: "{{ hermes_data_dir }}" shell: /usr/sbin/nologin system: true create_home: false state: present become: true - name: Get Hermes release info from GitHub ansible.builtin.uri: url: >- {{ 'https://api.github.com/repos/NousResearch/hermes-agent/releases/latest' if hermes_version == '' else 'https://api.github.com/repos/NousResearch/hermes-agent/releases/tags/v' + hermes_version }} headers: Accept: "application/vnd.github.v3+json" return_content: true register: _hermes_release - name: Set version and download URL facts ansible.builtin.set_fact: _hermes_version_tag: "{{ _hermes_release.json.tag_name }}" _hermes_whl_url: >- {{ _hermes_release.json.assets | selectattr('name', 'search', '\.whl$') | map(attribute='browser_download_url') | first }} - name: Read installed version ansible.builtin.slurp: src: "{{ hermes_install_dir }}/.version" register: _hermes_installed_raw ignore_errors: true become: true - name: Set installed version fact ansible.builtin.set_fact: _hermes_installed_version: >- {{ (_hermes_installed_raw.content | b64decode | trim) if _hermes_installed_raw is not failed else '' }} - name: Install or upgrade Hermes when: _hermes_installed_version != _hermes_version_tag block: - name: Create Hermes installation directory ansible.builtin.file: path: "{{ hermes_install_dir }}" state: directory owner: "{{ hermes_user }}" group: "{{ hermes_group }}" mode: '0755' become: true - name: Create Python virtual environment ansible.builtin.command: cmd: python3 -m venv {{ hermes_install_dir }}/venv creates: "{{ hermes_install_dir }}/venv/bin/python" become: true become_user: "{{ hermes_user }}" - name: Download Hermes wheel ansible.builtin.get_url: url: "{{ _hermes_whl_url }}" dest: /tmp/hermes.whl mode: '0644' - name: Install Hermes wheel into virtualenv ansible.builtin.pip: name: /tmp/hermes.whl virtualenv: "{{ hermes_install_dir }}/venv" state: present become: true become_user: "{{ hermes_user }}" - name: Write installed version file ansible.builtin.copy: content: "{{ _hermes_version_tag }}" dest: "{{ hermes_install_dir }}/.version" owner: "{{ hermes_user }}" group: "{{ hermes_group }}" mode: '0644' become: true - name: Remove downloaded wheel ansible.builtin.file: path: /tmp/hermes.whl state: absent - name: Create Hermes data directory ansible.builtin.file: path: "{{ hermes_data_dir }}" state: directory owner: "{{ hermes_user }}" group: "{{ hermes_group }}" mode: '0750' become: true - name: Create Hermes systemd service ansible.builtin.template: src: hermes.service.j2 dest: /etc/systemd/system/hermes.service mode: '0644' become: true - name: Enable and start Hermes service ansible.builtin.systemd: name: hermes enabled: "{{ hermes_service_enabled }}" state: "{{ hermes_service_state }}" daemon_reload: true become: true