diff --git a/.gitignore b/.gitignore index 9f11f5f..24f69ba 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ dist/ # Compose override files compose.override.yml +vault.yml +ansible/roles/signage_player/files/morz-agent +player/agent/agent-linux-arm64 diff --git a/ansible/group_vars/signage_players/vars.yml b/ansible/group_vars/signage_players/vars.yml new file mode 100644 index 0000000..13c7a5d --- /dev/null +++ b/ansible/group_vars/signage_players/vars.yml @@ -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 }}" diff --git a/ansible/host_vars/info10/vars.yml b/ansible/host_vars/info10/vars.yml new file mode 100644 index 0000000..82a4a7c --- /dev/null +++ b/ansible/host_vars/info10/vars.yml @@ -0,0 +1,4 @@ +--- +ansible_host: 10.0.0.200 +ansible_user: morz +screen_id: info01-dev diff --git a/ansible/inventory.yml b/ansible/inventory.yml new file mode 100644 index 0000000..5ce26f4 --- /dev/null +++ b/ansible/inventory.yml @@ -0,0 +1,6 @@ +--- +all: + children: + signage_players: + hosts: + info10: diff --git a/ansible/roles/signage_player/defaults/main.yml b/ansible/roles/signage_player/defaults/main.yml new file mode 100644 index 0000000..c2c940f --- /dev/null +++ b/ansible/roles/signage_player/defaults/main.yml @@ -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 diff --git a/ansible/roles/signage_player/handlers/main.yml b/ansible/roles/signage_player/handlers/main.yml new file mode 100644 index 0000000..3db2938 --- /dev/null +++ b/ansible/roles/signage_player/handlers/main.yml @@ -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 diff --git a/ansible/roles/signage_player/tasks/main.yml b/ansible/roles/signage_player/tasks/main.yml new file mode 100644 index 0000000..cc616cc --- /dev/null +++ b/ansible/roles/signage_player/tasks/main.yml @@ -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 diff --git a/ansible/roles/signage_player/templates/config.json.j2 b/ansible/roles/signage_player/templates/config.json.j2 new file mode 100644 index 0000000..71e03fa --- /dev/null +++ b/ansible/roles/signage_player/templates/config.json.j2 @@ -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 }} +} diff --git a/ansible/roles/signage_player/templates/morz-agent.service.j2 b/ansible/roles/signage_player/templates/morz-agent.service.j2 new file mode 100644 index 0000000..e5fed7e --- /dev/null +++ b/ansible/roles/signage_player/templates/morz-agent.service.j2 @@ -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 diff --git a/ansible/site.yml b/ansible/site.yml index ba0a1dd..09feb85 100644 --- a/ansible/site.yml +++ b/ansible/site.yml @@ -1,7 +1,6 @@ -- name: Placeholder deployment entrypoint - hosts: all +--- +- name: Deploy Morz Infoboard Player Agent + hosts: signage_players gather_facts: false - tasks: - - name: Show target host placeholder - ansible.builtin.debug: - msg: "Placeholder fuer spaeteres signage deployment auf {{ inventory_hostname }}" + roles: + - signage_player