From c276c2a090baa9addbda88beed3b9534eb4f0bc4 Mon Sep 17 00:00:00 2001 From: Pluto Date: Mon, 2 Feb 2026 21:55:08 -0600 Subject: [PATCH] Update openclaw role for Margaret Docker deployment - Updated defaults: custom image, container name, config paths - Updated compose template: proper CMD, HOME env, user mapping - Updated tasks: image existence check, warning if not found - Added handlers: restart on compose changes - Image must be pre-built on Bart (16GB RAM) and transferred --- roles/openclaw/defaults/main.yml | 13 +++-- roles/openclaw/handlers/main.yml | 6 +++ roles/openclaw/tasks/main.yml | 47 ++++++++++++++----- .../openclaw/templates/docker-compose.yml.j2 | 27 ++++++----- 4 files changed, 65 insertions(+), 28 deletions(-) create mode 100644 roles/openclaw/handlers/main.yml diff --git a/roles/openclaw/defaults/main.yml b/roles/openclaw/defaults/main.yml index 84cc328..fe4fbf4 100644 --- a/roles/openclaw/defaults/main.yml +++ b/roles/openclaw/defaults/main.yml @@ -1,5 +1,10 @@ --- -openclaw_compose_dir: "{{ docker_compose_base }}/automation" -openclaw_data_dir: /data/openclaw -openclaw_image: "ghcr.io/openclaw/openclaw:latest" -openclaw_host: "openclaw.{{ domain }}" +openclaw_compose_dir: "{{ docker_compose_base }}/margaret" +openclaw_config_dir: /home/glyptic/.openclaw +openclaw_image: margaret-openclaw:latest +openclaw_container_name: margaret +openclaw_gateway_port: 18790 +openclaw_matrix_user: margaret +openclaw_anthropic_api_key: "{{ vault_anthropic_api_key }}" +openclaw_user_uid: "1000" +openclaw_user_gid: "1000" diff --git a/roles/openclaw/handlers/main.yml b/roles/openclaw/handlers/main.yml new file mode 100644 index 0000000..36aa9db --- /dev/null +++ b/roles/openclaw/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: Restart Margaret + community.docker.docker_compose_v2: + project_src: "{{ openclaw_compose_dir }}" + state: restarted + tags: [openclaw, margaret] diff --git a/roles/openclaw/tasks/main.yml b/roles/openclaw/tasks/main.yml index 4a5e57f..9313d83 100644 --- a/roles/openclaw/tasks/main.yml +++ b/roles/openclaw/tasks/main.yml @@ -1,28 +1,51 @@ --- -- name: Create OpenClaw directories +- name: Create OpenClaw compose directory ansible.builtin.file: - path: "{{ item }}" + path: "{{ openclaw_compose_dir }}" state: directory owner: glyptic group: docker mode: "0755" - loop: - - "{{ openclaw_data_dir }}" - tags: [openclaw, automation] + tags: [openclaw, margaret] -- name: Deploy OpenClaw compose file +- name: Ensure OpenClaw config directory exists + ansible.builtin.file: + path: "{{ openclaw_config_dir }}" + state: directory + owner: "{{ openclaw_user_uid }}" + group: "{{ openclaw_user_gid }}" + mode: "0755" + tags: [openclaw, margaret] + +- name: Deploy OpenClaw (Margaret) compose file ansible.builtin.template: src: docker-compose.yml.j2 - dest: "{{ openclaw_compose_dir }}/docker-compose.openclaw.yml" + dest: "{{ openclaw_compose_dir }}/docker-compose.yml" owner: glyptic group: docker mode: "0644" - tags: [openclaw, automation] + notify: Restart Margaret + tags: [openclaw, margaret] -- name: Start OpenClaw +- name: Check if Margaret image exists + community.docker.docker_image_info: + name: "{{ openclaw_image }}" + register: margaret_image + tags: [openclaw, margaret] + +- name: Warn if Margaret image not found + ansible.builtin.debug: + msg: > + Margaret image '{{ openclaw_image }}' not found locally. + Build on Bart (192.168.86.181) and transfer: + docker save {{ openclaw_image }} | gzip > /tmp/margaret.tar.gz + # Transfer via relay and load on Peggy + when: margaret_image.images | length == 0 + tags: [openclaw, margaret] + +- name: Start Margaret container community.docker.docker_compose_v2: project_src: "{{ openclaw_compose_dir }}" - files: - - docker-compose.openclaw.yml state: present - tags: [openclaw, automation] + when: margaret_image.images | length > 0 + tags: [openclaw, margaret] diff --git a/roles/openclaw/templates/docker-compose.yml.j2 b/roles/openclaw/templates/docker-compose.yml.j2 index 6e9f746..b24ba24 100644 --- a/roles/openclaw/templates/docker-compose.yml.j2 +++ b/roles/openclaw/templates/docker-compose.yml.j2 @@ -1,21 +1,24 @@ services: - openclaw: + {{ openclaw_container_name }}: image: {{ openclaw_image }} - container_name: openclaw + container_name: {{ openclaw_container_name }} restart: unless-stopped - environment: - TZ: {{ timezone }} + command: + - node + - /usr/local/lib/node_modules/openclaw/dist/index.js + - gateway + - --allow-unconfigured volumes: - - {{ openclaw_data_dir }}:/data - - /var/run/docker.sock:/var/run/docker.sock:ro - labels: - traefik.enable: "true" - traefik.http.routers.openclaw.rule: "Host(`{{ openclaw_host }}`)" - traefik.http.routers.openclaw.entrypoints: websecure - traefik.http.routers.openclaw.tls.certresolver: letsencrypt - traefik.http.services.openclaw.loadbalancer.server.port: "3000" + - {{ openclaw_config_dir }}:/home/glyptic/.openclaw networks: - {{ docker_network_name }} + labels: + traefik.enable: "false" + environment: + NODE_ENV: production + HOME: /home/glyptic + ANTHROPIC_API_KEY: {{ openclaw_anthropic_api_key }} + user: "{{ openclaw_user_uid }}:{{ openclaw_user_gid }}" networks: {{ docker_network_name }}: