Fuege Ansible-Rolle signage_player fuer Agent-Deployment hinzu

- Rolle signage_player: baut Binary lokal (linux/arm64), deployt es,
  schreibt config.json per Template, installiert und aktiviert systemd-Unit
- inventory.yml mit Host info10 (10.0.0.200)
- group_vars/signage_players: getrennte vars.yml (oeffentlich) und
  vault.yml (Secrets, gitignored) fuer MQTT-Credentials
- host_vars/info10: ansible_host, ansible_user, screen_id
- site.yml zeigt auf signage_players-Gruppe und signage_player-Rolle
- Binaries und vault.yml in .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jesko Anschütz 2026-03-22 21:09:54 +01:00
parent 1dbebc0a2b
commit b111cf8421
10 changed files with 133 additions and 6 deletions

3
.gitignore vendored
View file

@ -16,3 +16,6 @@ dist/
# Compose override files # Compose override files
compose.override.yml compose.override.yml
vault.yml
ansible/roles/signage_player/files/morz-agent
player/agent/agent-linux-arm64

View file

@ -0,0 +1,9 @@
---
morz_server_base_url: "http://10.0.0.70:8080"
morz_mqtt_broker: "tcp://dockerbox.morz.de:1883"
morz_heartbeat_every_seconds: 30
morz_status_report_every_seconds: 60
# Credentials kommen aus vault.yml (ansible-vault)
morz_mqtt_username: "{{ vault_mqtt_username }}"
morz_mqtt_password: "{{ vault_mqtt_password }}"

View file

@ -0,0 +1,4 @@
---
ansible_host: 10.0.0.200
ansible_user: morz
screen_id: info01-dev

6
ansible/inventory.yml Normal file
View file

@ -0,0 +1,6 @@
---
all:
children:
signage_players:
hosts:
info10:

View file

@ -0,0 +1,11 @@
---
signage_user: morz
signage_config_dir: /etc/signage
signage_binary_dest: /usr/local/bin/morz-agent
morz_server_base_url: "http://10.0.0.70:8080"
morz_mqtt_broker: ""
morz_mqtt_username: ""
morz_mqtt_password: ""
morz_heartbeat_every_seconds: 30
morz_status_report_every_seconds: 60

View file

@ -0,0 +1,11 @@
---
- name: Reload systemd
ansible.builtin.systemd:
daemon_reload: true
become: true
- name: Restart morz-agent
ansible.builtin.systemd:
name: morz-agent
state: restarted
become: true

View file

@ -0,0 +1,59 @@
---
- name: Build agent binary for linux/arm64
ansible.builtin.command:
cmd: go build -o {{ role_path }}/files/morz-agent ./cmd/agent
chdir: "{{ playbook_dir }}/../player/agent"
environment:
GOOS: linux
GOARCH: arm64
delegate_to: localhost
changed_when: true
- name: Ensure config directory exists
ansible.builtin.file:
path: "{{ signage_config_dir }}"
state: directory
owner: root
group: root
mode: "0755"
become: true
- name: Deploy agent config
ansible.builtin.template:
src: config.json.j2
dest: "{{ signage_config_dir }}/config.json"
owner: root
group: "{{ signage_user }}"
mode: "0640"
become: true
notify: Restart morz-agent
- name: Deploy agent binary
ansible.builtin.copy:
src: morz-agent
dest: "{{ signage_binary_dest }}"
owner: root
group: root
mode: "0755"
become: true
notify: Restart morz-agent
- name: Deploy systemd unit
ansible.builtin.template:
src: morz-agent.service.j2
dest: /etc/systemd/system/morz-agent.service
owner: root
group: root
mode: "0644"
become: true
notify:
- Reload systemd
- Restart morz-agent
- name: Enable and start morz-agent
ansible.builtin.systemd:
name: morz-agent
enabled: true
state: started
daemon_reload: false
become: true

View file

@ -0,0 +1,9 @@
{
"screen_id": "{{ screen_id }}",
"server_base_url": "{{ morz_server_base_url }}",
"mqtt_broker": "{{ morz_mqtt_broker }}",
"mqtt_username": "{{ morz_mqtt_username }}",
"mqtt_password": "{{ morz_mqtt_password }}",
"heartbeat_every_seconds": {{ morz_heartbeat_every_seconds }},
"status_report_every_seconds": {{ morz_status_report_every_seconds }}
}

View file

@ -0,0 +1,16 @@
[Unit]
Description=Morz Infoboard Player Agent
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User={{ signage_user }}
ExecStart={{ signage_binary_dest }}
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target

View file

@ -1,7 +1,6 @@
- name: Placeholder deployment entrypoint ---
hosts: all - name: Deploy Morz Infoboard Player Agent
hosts: signage_players
gather_facts: false gather_facts: false
tasks: roles:
- name: Show target host placeholder - signage_player
ansible.builtin.debug:
msg: "Placeholder fuer spaeteres signage deployment auf {{ inventory_hostname }}"