# kevin-256/infra-teatro architecture

> Architecture diagram of the GitHub repository kevin-256/infra-teatro, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kevin-256/infra-teatro
- Repository: https://github.com/kevin-256/infra-teatro

## Overview

This repository documents and configures a venue network for Dante audio, Art-Net lighting, mixer control, video, and management. The principal workflow is an operator applying MikroTik RouterOS configuration files to the FOH and stage switches, which provide the documented VLAN networks for venue devices. Separate Ansible projects provision DNS, a Companion cluster stack, and RustDesk. The README supplies the network capabilities and addressing; source excerpts were unavailable, so links between unsampled Ansible roles and implementation details are omitted.

Main entry points: [`FOH/CRS326-24G-2S+RM.rsc`](https://github.com/kevin-256/infra-teatro/blob/main/FOH/CRS326-24G-2S%2BRM.rsc) (FOH switch), [`STAGE/CRS326-24G-2S+RM.rsc`](https://github.com/kevin-256/infra-teatro/blob/main/STAGE/CRS326-24G-2S%2BRM.rsc) (Stage switch), [`Ansible/Companion/playbook.yaml`](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/playbook.yaml) (Companion playbook), [`README.md`](https://github.com/kevin-256/infra-teatro/blob/main/README.md) (Audio devices)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_switching["Switching"]
  node_foh_config["FOH switch config"]
  node_stage_config["Stage switch config"]
  node_router_config["Router config<br/>[Router.rsc]"]
  node_foh_switch["FOH switch"]
  node_stage_switch["Stage switch"]
end

subgraph group_networks["VLAN networks"]
  node_wan{{"WAN VLAN 9<br/>[README.md]"}}
  node_management{{"Management VLAN 10<br/>[README.md]"}}
  node_corosync{{"Corosync VLAN 11<br/>[README.md]"}}
  node_dante_primary{{"Dante primary VLAN 20<br/>[README.md]"}}
  node_dante_backup{{"Dante backup VLAN 30<br/>[README.md]"}}
  node_mixer_control{{"Mixer control VLAN 40<br/>[README.md]"}}
  node_artnet{{"Art-Net VLAN 50<br/>[README.md]"}}
  node_video{{"Video VLAN 60<br/>[README.md]"}}
end

subgraph group_automation["Ansible automation"]
  node_dns_playbook["Bind9 playbook<br/>[playbook.yaml]"]
  node_bind_role["Bind9 role<br/>[main.yaml]"]
  node_companion_playbook["Companion playbook<br/>[playbook.yaml]"]
  node_companion_role["Companion role<br/>[main.yml]"]
  node_gluster_role["GlusterFS role<br/>[main.yml]"]
  node_pacemaker_role["Pacemaker role<br/>[main.yml]"]
  node_rustdesk_playbook["RustDesk playbook<br/>[playbook.yaml]"]
end

subgraph group_services["Services"]
  node_dns["DNS service"]
  node_ntp["NTP service<br/>[README.md]"]
  node_companion["Companion cluster"]
  node_rustdesk["RustDesk service"]
  node_audio_devices["Audio devices<br/>[README.md]"]
  node_show_devices["Lighting and video devices<br/>[README.md]"]
end

node_operator(("Network operator"))

node_operator -->|"uploads and applies"| node_foh_config
node_operator -->|"uploads and applies"| node_stage_config
node_operator -->|"uploads and applies"| node_router_config
node_foh_config -->|"configures"| node_foh_switch
node_stage_config -->|"configures"| node_stage_switch
node_foh_switch -->|"provides VLAN"| node_wan
node_foh_switch -->|"provides VLAN"| node_management
node_foh_switch -->|"provides VLAN"| node_corosync
node_foh_switch -->|"provides VLAN"| node_dante_primary
node_foh_switch -->|"provides VLAN"| node_dante_backup
node_foh_switch -->|"provides VLAN"| node_mixer_control
node_foh_switch -->|"provides VLAN"| node_artnet
node_foh_switch -->|"provides VLAN"| node_video
node_stage_switch -->|"provides VLAN"| node_wan
node_stage_switch -->|"provides VLAN"| node_management
node_stage_switch -->|"provides VLAN"| node_corosync
node_stage_switch -->|"provides VLAN"| node_dante_primary
node_stage_switch -->|"provides VLAN"| node_dante_backup
node_stage_switch -->|"provides VLAN"| node_mixer_control
node_stage_switch -->|"provides VLAN"| node_artnet
node_stage_switch -->|"provides VLAN"| node_video
node_audio_devices -->|"uses"| node_dante_primary
node_audio_devices -->|"uses"| node_dante_backup
node_audio_devices -->|"uses"| node_mixer_control
node_show_devices -->|"uses"| node_artnet
node_show_devices -->|"uses"| node_video
node_dns_playbook -->|"runs role"| node_bind_role
node_companion_playbook -->|"runs role"| node_companion_role
node_companion_playbook -->|"runs role"| node_gluster_role
node_companion_playbook -->|"runs role"| node_pacemaker_role

click node_foh_config "https://github.com/kevin-256/infra-teatro/blob/main/FOH/CRS326-24G-2S%2BRM.rsc"
click node_stage_config "https://github.com/kevin-256/infra-teatro/blob/main/STAGE/CRS326-24G-2S%2BRM.rsc"
click node_router_config "https://github.com/kevin-256/infra-teatro/blob/main/FOH/Router.rsc"
click node_foh_switch "https://github.com/kevin-256/infra-teatro/blob/main/FOH/CRS326-24G-2S%2BRM.rsc"
click node_stage_switch "https://github.com/kevin-256/infra-teatro/blob/main/STAGE/CRS326-24G-2S%2BRM.rsc"
click node_wan "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_management "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_corosync "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_dante_primary "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_dante_backup "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_mixer_control "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_artnet "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_video "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_dns "https://github.com/kevin-256/infra-teatro/tree/main/Ansible/Bind9"
click node_ntp "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_companion "https://github.com/kevin-256/infra-teatro/tree/main/Ansible/Companion"
click node_rustdesk "https://github.com/kevin-256/infra-teatro/tree/main/Ansible/Rustdesk"
click node_audio_devices "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_show_devices "https://github.com/kevin-256/infra-teatro/blob/main/README.md"
click node_dns_playbook "https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Bind9/playbook.yaml"
click node_bind_role "https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Bind9/roles/bind9/tasks/main.yaml"
click node_companion_playbook "https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/playbook.yaml"
click node_companion_role "https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/roles/companion/tasks/main.yml"
click node_gluster_role "https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/roles/glusterfs/tasks/main.yml"
click node_pacemaker_role "https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/roles/pacemaker/tasks/main.yml"
click node_rustdesk_playbook "https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Rustdesk/playbook.yaml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_foh_config,node_stage_config,node_router_config,node_foh_switch,node_stage_switch toneBlue
class node_wan,node_management,node_corosync,node_dante_primary,node_dante_backup,node_mixer_control,node_artnet,node_video toneAmber
class node_dns_playbook,node_bind_role,node_companion_playbook,node_companion_role,node_gluster_role,node_pacemaker_role,node_rustdesk_playbook toneMint
class node_dns,node_ntp,node_companion,node_rustdesk,node_audio_devices,node_show_devices toneRose
class node_operator toneIndigo
```

## Components

### Switching

- [FOH switch config](https://github.com/kevin-256/infra-teatro/blob/main/FOH/CRS326-24G-2S%2BRM.rsc): `FOH/CRS326-24G-2S+RM.rsc`
- [Stage switch config](https://github.com/kevin-256/infra-teatro/blob/main/STAGE/CRS326-24G-2S%2BRM.rsc): `STAGE/CRS326-24G-2S+RM.rsc`
- [Router config](https://github.com/kevin-256/infra-teatro/blob/main/FOH/Router.rsc): `FOH/Router.rsc`
- [FOH switch](https://github.com/kevin-256/infra-teatro/blob/main/FOH/CRS326-24G-2S%2BRM.rsc): `FOH/CRS326-24G-2S+RM.rsc`
- [Stage switch](https://github.com/kevin-256/infra-teatro/blob/main/STAGE/CRS326-24G-2S%2BRM.rsc): `STAGE/CRS326-24G-2S+RM.rsc`

### VLAN networks

- [WAN VLAN 9](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Management VLAN 10](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Corosync VLAN 11](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Dante primary VLAN 20](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Dante backup VLAN 30](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Mixer control VLAN 40](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Art-Net VLAN 50](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Video VLAN 60](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`

### Ansible automation

- [Bind9 playbook](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Bind9/playbook.yaml): `Ansible/Bind9/playbook.yaml`
- [Bind9 role](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Bind9/roles/bind9/tasks/main.yaml): `Ansible/Bind9/roles/bind9/tasks/main.yaml`
- [Companion playbook](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/playbook.yaml): `Ansible/Companion/playbook.yaml`
- [Companion role](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/roles/companion/tasks/main.yml): `Ansible/Companion/roles/companion/tasks/main.yml`
- [GlusterFS role](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/roles/glusterfs/tasks/main.yml): `Ansible/Companion/roles/glusterfs/tasks/main.yml`
- [Pacemaker role](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Companion/roles/pacemaker/tasks/main.yml): `Ansible/Companion/roles/pacemaker/tasks/main.yml`
- [RustDesk playbook](https://github.com/kevin-256/infra-teatro/blob/main/Ansible/Rustdesk/playbook.yaml): `Ansible/Rustdesk/playbook.yaml`

### Services

- [DNS service](https://github.com/kevin-256/infra-teatro/tree/main/Ansible/Bind9): `Ansible/Bind9`
- [NTP service](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Companion cluster](https://github.com/kevin-256/infra-teatro/tree/main/Ansible/Companion): `Ansible/Companion`
- [RustDesk service](https://github.com/kevin-256/infra-teatro/tree/main/Ansible/Rustdesk): `Ansible/Rustdesk`
- [Audio devices](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`
- [Lighting and video devices](https://github.com/kevin-256/infra-teatro/blob/main/README.md): `README.md`

### Other components

- **Network operator**

## Connections

- Network operator → FOH switch config: uploads and applies
- Network operator → Stage switch config: uploads and applies
- Network operator → Router config: uploads and applies
- FOH switch config → FOH switch: configures
- Stage switch config → Stage switch: configures
- FOH switch → WAN VLAN 9: provides VLAN
- FOH switch → Management VLAN 10: provides VLAN
- FOH switch → Corosync VLAN 11: provides VLAN
- FOH switch → Dante primary VLAN 20: provides VLAN
- FOH switch → Dante backup VLAN 30: provides VLAN
- FOH switch → Mixer control VLAN 40: provides VLAN
- FOH switch → Art-Net VLAN 50: provides VLAN
- FOH switch → Video VLAN 60: provides VLAN
- Stage switch → WAN VLAN 9: provides VLAN
- Stage switch → Management VLAN 10: provides VLAN
- Stage switch → Corosync VLAN 11: provides VLAN
- Stage switch → Dante primary VLAN 20: provides VLAN
- Stage switch → Dante backup VLAN 30: provides VLAN
- Stage switch → Mixer control VLAN 40: provides VLAN
- Stage switch → Art-Net VLAN 50: provides VLAN
- Stage switch → Video VLAN 60: provides VLAN
- Audio devices → Dante primary VLAN 20: uses
- Audio devices → Dante backup VLAN 30: uses
- Audio devices → Mixer control VLAN 40: uses
- Lighting and video devices → Art-Net VLAN 50: uses
- Lighting and video devices → Video VLAN 60: uses
- Bind9 playbook → Bind9 role: runs role
- Companion playbook → Companion role: runs role
- Companion playbook → GlusterFS role: runs role
- Companion playbook → Pacemaker role: runs role
