Funk-lab/ansible/roles/hermes_agent/tasks/main.yml

157 lines
4.1 KiB
YAML

---
# --- Dépendances système ---
- name: Install Hermes Agent dependencies
ansible.builtin.dnf:
name:
- curl
- git
- tar
state: present
# --- Utilisateur système ---
- name: Create hermes system user
ansible.builtin.user:
name: "{{ hermes_user }}"
home: "{{ hermes_home }}"
shell: /bin/bash
system: false
create_home: true
state: present
# --- Environnement shell utilisateur ---
- name: Set HERMES_HOME in hermes user bashrc
ansible.builtin.lineinfile:
path: "{{ hermes_home }}/.bashrc"
line: "export HERMES_HOME={{ hermes_data_dir }}"
create: true
owner: "{{ hermes_user }}"
group: "{{ hermes_user }}"
mode: '0644'
- name: Add hermes venv to PATH in bashrc
ansible.builtin.lineinfile:
path: "{{ hermes_home }}/.bashrc"
line: "export PATH={{ hermes_data_dir }}/hermes-agent/venv/bin:$PATH"
create: true
owner: "{{ hermes_user }}"
group: "{{ hermes_user }}"
mode: '0644'
# --- Répertoire données (RAID5) ---
- name: Create HERMES_HOME on RAID5
ansible.builtin.file:
path: "{{ hermes_data_dir }}"
state: directory
owner: "{{ hermes_user }}"
group: "{{ hermes_user }}"
mode: '0750'
# --- Installation ---
- name: Check if hermes binary is already installed
ansible.builtin.stat:
path: "{{ hermes_home }}/.local/bin/hermes"
register: hermes_binary
- name: Install Hermes Agent via installer script
ansible.builtin.shell:
cmd: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
executable: /bin/bash
become: true
become_user: "{{ hermes_user }}"
environment:
HOME: "{{ hermes_home }}"
HERMES_HOME: "{{ hermes_data_dir }}"
when: not hermes_binary.stat.exists
register: hermes_install_result
- name: Show installer output
ansible.builtin.debug:
var: hermes_install_result.stdout_lines
when: hermes_install_result is changed
# --- Packages Python pour les skills ---
- name: Install Python packages for Hermes skills
ansible.builtin.pip:
name: "qdrant-client>=1.12.0"
executable: "{{ hermes_data_dir }}/hermes-agent/venv/bin/pip"
state: present
become: true
become_user: "{{ hermes_user }}"
when: hermes_binary.stat.exists
# --- Configuration ---
- name: Ensure LM_BASE_URL in .env points to LiteLLM
ansible.builtin.lineinfile:
path: "{{ hermes_data_dir }}/.env"
regexp: '^LM_BASE_URL='
line: "LM_BASE_URL={{ hermes_lm_base_url }}"
create: false
notify: Restart hermes-agent
when: hermes_binary.stat.exists
- name: Ensure LM_API_KEY in .env is correct
ansible.builtin.lineinfile:
path: "{{ hermes_data_dir }}/.env"
regexp: '^LM_API_KEY='
line: "LM_API_KEY={{ hermes_lm_api_key }}"
create: false
notify: Restart hermes-agent
when: hermes_binary.stat.exists
- name: Deploy Hermes config.yaml
ansible.builtin.template:
src: config.yaml.j2
dest: "{{ hermes_data_dir }}/config.yaml"
owner: "{{ hermes_user }}"
group: "{{ hermes_user }}"
mode: '0640'
notify: Restart hermes-agent
# --- Service systemd ---
- name: Deploy hermes-agent systemd service
ansible.builtin.template:
src: hermes-agent.service.j2
dest: /etc/systemd/system/hermes-agent.service
mode: '0644'
notify:
- Reload systemd
- Restart hermes-agent
- name: Enable and start hermes-agent
ansible.builtin.systemd:
name: hermes-agent
enabled: true
daemon_reload: true
state: started
# --- Wrapper global ---
- name: Deploy hermes global wrapper (/usr/local/bin/hermes)
ansible.builtin.copy:
dest: /usr/local/bin/hermes
mode: '0755'
content: |
#!/bin/bash
exec sudo -u {{ hermes_user }} \
HOME={{ hermes_home }} \
HERMES_HOME={{ hermes_data_dir }} \
{{ hermes_data_dir }}/hermes-agent/venv/bin/hermes "$@"
# --- Firewall ---
- name: Open Hermes gateway port in firewall
ansible.posix.firewalld:
port: "{{ hermes_gateway_port }}/tcp"
permanent: true
state: enabled
immediate: true
when: ansible_facts.services['firewalld.service'] is defined
and ansible_facts.services['firewalld.service']['state'] == 'running'